Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java +43 −16 Original line number Diff line number Diff line Loading @@ -104,15 +104,19 @@ public class KeyguardSliceProvider extends SliceProvider implements private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm; private final HashSet<Integer> mMediaInvisibleStates; private final Object mMediaToken = new Object(); private SettableWakeLock mMediaWakeLock; private ZenModeController mZenModeController; @VisibleForTesting protected SettableWakeLock mMediaWakeLock; @VisibleForTesting protected ZenModeController mZenModeController; private String mDatePattern; private DateFormat mDateFormat; private String mLastText; private boolean mRegistered; private String mNextAlarm; private NextAlarmController mNextAlarmController; @VisibleForTesting protected AlarmManager mAlarmManager; @VisibleForTesting protected ContentResolver mContentResolver; private AlarmManager.AlarmClockInfo mNextAlarmInfo; private PendingIntent mPendingIntent; Loading Loading @@ -297,6 +301,12 @@ public class KeyguardSliceProvider extends SliceProvider implements @Override public boolean onCreateSliceProvider() { synchronized (this) { KeyguardSliceProvider oldInstance = KeyguardSliceProvider.sInstance; if (oldInstance != null) { oldInstance.onDestroy(); } mAlarmManager = getContext().getSystemService(AlarmManager.class); mContentResolver = getContext().getContentResolver(); mNextAlarmController = new NextAlarmControllerImpl(getContext()); Loading @@ -310,9 +320,25 @@ public class KeyguardSliceProvider extends SliceProvider implements KeyguardSliceProvider.sInstance = this; registerClockUpdate(); updateClockLocked(); } return true; } @VisibleForTesting protected void onDestroy() { synchronized (this) { mNextAlarmController.removeCallback(this); mZenModeController.removeCallback(this); mMediaWakeLock.setAcquired(false); mAlarmManager.cancel(mUpdateNextAlarm); if (mRegistered) { mRegistered = false; getKeyguardUpdateMonitor().removeCallback(mKeyguardUpdateMonitorCallback); getContext().unregisterReceiver(mIntentReceiver); } } } @Override public void onZenChanged(int zen) { notifyChange(); Loading Loading @@ -350,7 +376,8 @@ public class KeyguardSliceProvider extends SliceProvider implements * Registers a broadcast receiver for clock updates, include date, time zone and manually * changing the date/time via the settings app. */ private void registerClockUpdate() { @VisibleForTesting protected void registerClockUpdate() { synchronized (this) { if (mRegistered) { return; Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java +28 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,9 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.wakelock.SettableWakeLock; import org.junit.Assert; import org.junit.Before; Loading @@ -73,6 +76,14 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { private NotificationMediaManager mNotificationMediaManager; @Mock private StatusBarStateController mStatusBarStateController; @Mock private KeyguardBypassController mKeyguardBypassController; @Mock private ZenModeController mZenModeController; @Mock private SettableWakeLock mMediaWakeLock; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private TestableKeyguardSliceProvider mProvider; private boolean mIsZenMode; Loading Loading @@ -194,6 +205,20 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { verify(mContentResolver, never()).notifyChange(eq(mProvider.getUri()), eq(null)); } @Test public void onDestroy_noCrash() { mProvider.onDestroy(); } @Test public void onDestroy_unregisterListeners() { mProvider.registerClockUpdate(); mProvider.onDestroy(); verify(mMediaWakeLock).setAcquired(eq(false)); verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class)); verify(mKeyguardUpdateMonitor).removeCallback(any()); } private class TestableKeyguardSliceProvider extends KeyguardSliceProvider { int mCleanDateFormatInvokations; private int mCounter; Loading @@ -207,6 +232,8 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { super.onCreateSliceProvider(); mAlarmManager = KeyguardSliceProviderTest.this.mAlarmManager; mContentResolver = KeyguardSliceProviderTest.this.mContentResolver; mZenModeController = KeyguardSliceProviderTest.this.mZenModeController; mMediaWakeLock = KeyguardSliceProviderTest.this.mMediaWakeLock; return true; } Loading @@ -223,7 +250,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { @Override public KeyguardUpdateMonitor getKeyguardUpdateMonitor() { return mock(KeyguardUpdateMonitor.class); return mKeyguardUpdateMonitor; } @Override Loading Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java +43 −16 Original line number Diff line number Diff line Loading @@ -104,15 +104,19 @@ public class KeyguardSliceProvider extends SliceProvider implements private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm; private final HashSet<Integer> mMediaInvisibleStates; private final Object mMediaToken = new Object(); private SettableWakeLock mMediaWakeLock; private ZenModeController mZenModeController; @VisibleForTesting protected SettableWakeLock mMediaWakeLock; @VisibleForTesting protected ZenModeController mZenModeController; private String mDatePattern; private DateFormat mDateFormat; private String mLastText; private boolean mRegistered; private String mNextAlarm; private NextAlarmController mNextAlarmController; @VisibleForTesting protected AlarmManager mAlarmManager; @VisibleForTesting protected ContentResolver mContentResolver; private AlarmManager.AlarmClockInfo mNextAlarmInfo; private PendingIntent mPendingIntent; Loading Loading @@ -297,6 +301,12 @@ public class KeyguardSliceProvider extends SliceProvider implements @Override public boolean onCreateSliceProvider() { synchronized (this) { KeyguardSliceProvider oldInstance = KeyguardSliceProvider.sInstance; if (oldInstance != null) { oldInstance.onDestroy(); } mAlarmManager = getContext().getSystemService(AlarmManager.class); mContentResolver = getContext().getContentResolver(); mNextAlarmController = new NextAlarmControllerImpl(getContext()); Loading @@ -310,9 +320,25 @@ public class KeyguardSliceProvider extends SliceProvider implements KeyguardSliceProvider.sInstance = this; registerClockUpdate(); updateClockLocked(); } return true; } @VisibleForTesting protected void onDestroy() { synchronized (this) { mNextAlarmController.removeCallback(this); mZenModeController.removeCallback(this); mMediaWakeLock.setAcquired(false); mAlarmManager.cancel(mUpdateNextAlarm); if (mRegistered) { mRegistered = false; getKeyguardUpdateMonitor().removeCallback(mKeyguardUpdateMonitorCallback); getContext().unregisterReceiver(mIntentReceiver); } } } @Override public void onZenChanged(int zen) { notifyChange(); Loading Loading @@ -350,7 +376,8 @@ public class KeyguardSliceProvider extends SliceProvider implements * Registers a broadcast receiver for clock updates, include date, time zone and manually * changing the date/time via the settings app. */ private void registerClockUpdate() { @VisibleForTesting protected void registerClockUpdate() { synchronized (this) { if (mRegistered) { return; Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java +28 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,9 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.wakelock.SettableWakeLock; import org.junit.Assert; import org.junit.Before; Loading @@ -73,6 +76,14 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { private NotificationMediaManager mNotificationMediaManager; @Mock private StatusBarStateController mStatusBarStateController; @Mock private KeyguardBypassController mKeyguardBypassController; @Mock private ZenModeController mZenModeController; @Mock private SettableWakeLock mMediaWakeLock; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private TestableKeyguardSliceProvider mProvider; private boolean mIsZenMode; Loading Loading @@ -194,6 +205,20 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { verify(mContentResolver, never()).notifyChange(eq(mProvider.getUri()), eq(null)); } @Test public void onDestroy_noCrash() { mProvider.onDestroy(); } @Test public void onDestroy_unregisterListeners() { mProvider.registerClockUpdate(); mProvider.onDestroy(); verify(mMediaWakeLock).setAcquired(eq(false)); verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class)); verify(mKeyguardUpdateMonitor).removeCallback(any()); } private class TestableKeyguardSliceProvider extends KeyguardSliceProvider { int mCleanDateFormatInvokations; private int mCounter; Loading @@ -207,6 +232,8 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { super.onCreateSliceProvider(); mAlarmManager = KeyguardSliceProviderTest.this.mAlarmManager; mContentResolver = KeyguardSliceProviderTest.this.mContentResolver; mZenModeController = KeyguardSliceProviderTest.this.mZenModeController; mMediaWakeLock = KeyguardSliceProviderTest.this.mMediaWakeLock; return true; } Loading @@ -223,7 +250,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase { @Override public KeyguardUpdateMonitor getKeyguardUpdateMonitor() { return mock(KeyguardUpdateMonitor.class); return mKeyguardUpdateMonitor; } @Override Loading