From 277cfe5d91b4594ba3155d0d2917b9d20b7d3684 Mon Sep 17 00:00:00 2001 From: Raj Yengisetty Date: Thu, 7 Aug 2014 16:09:24 -0700 Subject: Fix for shadow folders. Repro: - Set low animation scale (.3-.5) - Pkill Trebuchet - Open home screen and click open folder with ~12+ https://jira.cyanogenmod.org/browse/CYAN-4907 Change-Id: Ib927101e72674d5ffa3733f5c093c3f9970fa273 --- src/com/android/launcher3/Launcher.java | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src/com/android/launcher3/Launcher.java') diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 82334297e..01a52d4e9 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -66,6 +66,7 @@ import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.os.SystemClock; +import android.provider.Settings; import android.speech.RecognizerIntent; import android.text.Selection; import android.text.SpannableStringBuilder; @@ -403,6 +404,12 @@ public class Launcher extends Activity } } + public static float sAnimatorDurationScale = 1f; + + public static boolean isAnimatorScaleSafe() { + return sAnimatorDurationScale >= 1f; + } + private CustomContentMode mCustomContentMode = CustomContentMode.CUSTOM_HOME; // Preferences @@ -457,6 +464,38 @@ public class Launcher extends Activity } }; + private class AnimatorScaleObserver extends ContentObserver { + + /** + * Creates a content observer. + * + * @param handler The handler to run {@link #onChange} on, or null if none. + */ + public AnimatorScaleObserver(Handler handler) { + super(handler); + } + + @Override + public void onChange(boolean selfChange) { + onChange(selfChange, null); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + try { + Float curAnimationDurationScale = Settings.Global.getFloat(getContentResolver(), + Settings.Global.ANIMATOR_DURATION_SCALE); + if (curAnimationDurationScale != sAnimatorDurationScale) { + // the Animator Duration scale has changed, restart the Launcher to respect + // these changes + android.os.Process.killProcess(android.os.Process.myPid()); + } + } catch (Settings.SettingNotFoundException e) { + sAnimatorDurationScale = 1f; + } + } + } + @Override protected void onCreate(Bundle savedInstanceState) { if (DEBUG_STRICT_MODE) { @@ -564,6 +603,16 @@ public class Launcher extends Activity "cyanogenmod.intent.action.PROTECTED_COMPONENT_UPDATE"); registerReceiver(protectedAppsChangedReceiver, protectedAppsFilter, "cyanogenmod.permission.PROTECTED_APP", null); + + try { + sAnimatorDurationScale = Settings.Global.getFloat(getContentResolver(), + Settings.Global.ANIMATOR_DURATION_SCALE); + } catch (Settings.SettingNotFoundException e) { + sAnimatorDurationScale = 1f; + } + + AnimatorScaleObserver obs = new AnimatorScaleObserver(new Handler()); + getContentResolver().registerContentObserver(Settings.Global.CONTENT_URI, true, obs); } public void restoreCustomContentMode() { -- cgit v1.2.3