diff options
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java | 83 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java | 20 |
2 files changed, 70 insertions, 33 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java index 4b9bf8c27f8a..e6ec04b4e391 100644 --- a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +++ b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java @@ -37,7 +37,8 @@ import java.util.Objects; import java.util.TimeZone; /** - * Controller for an AnimatableClockView. Instantiated by {@link KeyguardClockSwitchController}. + * Controller for an AnimatableClockView on the keyguard. Instantiated by + * {@link KeyguardClockSwitchController}. */ public class AnimatableClockController extends ViewController<AnimatableClockView> { private static final int FORMAT_NUMBER = 1234567890; @@ -46,6 +47,7 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie private final BroadcastDispatcher mBroadcastDispatcher; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardBypassController mBypassController; + private final BatteryController mBatteryController; private final int mDozingColor = Color.WHITE; private int mLockScreenColor; @@ -53,6 +55,7 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie private boolean mIsCharging; private float mDozeAmount; private Locale mLocale; + private boolean mAttached; // if keyguard isn't showing, mAttached = false private final NumberFormat mBurmeseNf = NumberFormat.getInstance(Locale.forLanguageTag("my")); private final String mBurmeseNumerals; @@ -73,62 +76,96 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mBroadcastDispatcher = broadcastDispatcher; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mBypassController = bypassController; + mBatteryController = batteryController; mBurmeseNumerals = mBurmeseNf.format(FORMAT_NUMBER); mBurmeseLineSpacing = getContext().getResources().getFloat( R.dimen.keyguard_clock_line_spacing_scale_burmese); mDefaultLineSpacing = getContext().getResources().getFloat( R.dimen.keyguard_clock_line_spacing_scale); + } - batteryController.addCallback(new BatteryController.BatteryStateChangeCallback() { - @Override - public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) { - if (!mIsCharging && charging) { - mView.animateCharge(mIsDozing); - } - mIsCharging = charging; + private final BatteryController.BatteryStateChangeCallback mBatteryCallback = + new BatteryController.BatteryStateChangeCallback() { + @Override + public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) { + if (!mIsCharging && charging) { + mView.animateCharge(mIsDozing); } - }); - } + mIsCharging = charging; + } + }; - private BroadcastReceiver mLocaleBroadcastReceiver = new BroadcastReceiver() { + private final BroadcastReceiver mLocaleBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { updateLocale(); } }; + private final KeyguardUpdateMonitorCallback mKeyguardPersistentCallback = + new KeyguardUpdateMonitorCallback() { + @Override + public void onKeyguardVisibilityChanged(boolean showing) { + // call attached/detached methods on visibility changes. benefits include: + // - no animations when keyguard/clock view aren't visible + // - resets state when keyguard is visible again (ie: font weight) + if (showing) { + onViewAttached(); + } else { + onViewDetached(); + } + } + }; + + private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = + new KeyguardUpdateMonitorCallback() { + @Override + public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType, + boolean isStrongBiometric) { + if (biometricSourceType == BiometricSourceType.FACE + && mBypassController.canBypass()) { + mView.animateDisappear(); + } + } + }; + @Override protected void onViewAttached() { + if (mAttached) { + return; + } + mAttached = true; updateLocale(); mBroadcastDispatcher.registerReceiver(mLocaleBroadcastReceiver, new IntentFilter(Intent.ACTION_LOCALE_CHANGED)); mStatusBarStateController.addCallback(mStatusBarStateListener); mIsDozing = mStatusBarStateController.isDozing(); mDozeAmount = mStatusBarStateController.getDozeAmount(); + mBatteryController.addCallback(mBatteryCallback); mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback); + mKeyguardUpdateMonitor.removeCallback(mKeyguardPersistentCallback); + mKeyguardUpdateMonitor.registerCallback(mKeyguardPersistentCallback); + refreshTime(); initColors(); } - private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = - new KeyguardUpdateMonitorCallback() { - @Override - public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType, - boolean isStrongBiometric) { - if (biometricSourceType == BiometricSourceType.FACE - && mBypassController.canBypass()) { - mView.animateDisappear(); - } - } - }; - @Override protected void onViewDetached() { + if (!mAttached) { + return; + } + + mAttached = false; mBroadcastDispatcher.unregisterReceiver(mLocaleBroadcastReceiver); mStatusBarStateController.removeCallback(mStatusBarStateListener); mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); + mBatteryController.removeCallback(mBatteryCallback); + if (!mView.isAttachedToWindow()) { + mKeyguardUpdateMonitor.removeCallback(mKeyguardPersistentCallback); + } } /** Animate the clock appearance */ diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 4245fbc2c3cd..932860f6c29c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -124,16 +124,6 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS @Override public void onInit() { mKeyguardSliceViewController.init(); - } - - @Override - protected void onViewAttached() { - if (CUSTOM_CLOCKS_ENABLED) { - mClockManager.addOnClockChangedListener(mClockChangedListener); - } - mColorExtractor.addOnColorsChangedListener(mColorsListener); - mView.updateColors(getGradientColors()); - updateAodIcons(); mClockFrame = mView.findViewById(R.id.lockscreen_clock_view); mLargeClockFrame = mView.findViewById(R.id.lockscreen_clock_view_large); @@ -157,6 +147,16 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS mKeyguardUpdateMonitor, mBypassController); mLargeClockViewController.init(); + } + + @Override + protected void onViewAttached() { + if (CUSTOM_CLOCKS_ENABLED) { + mClockManager.addOnClockChangedListener(mClockChangedListener); + } + mColorExtractor.addOnColorsChangedListener(mColorsListener); + mView.updateColors(getGradientColors()); + updateAodIcons(); if (mSmartspaceController.isEnabled()) { mSmartspaceView = mSmartspaceController.buildAndConnectView(mView); |