Merge "Unregister listeners and reset wake lock" into qt-dev
am: 9b47581ea4
Change-Id: I6c479e080905ca8a8dd2ffc036d384d5eb6d7d2e
This commit is contained in:
@@ -104,15 +104,19 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
|||||||
private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm;
|
private final AlarmManager.OnAlarmListener mUpdateNextAlarm = this::updateNextAlarm;
|
||||||
private final HashSet<Integer> mMediaInvisibleStates;
|
private final HashSet<Integer> mMediaInvisibleStates;
|
||||||
private final Object mMediaToken = new Object();
|
private final Object mMediaToken = new Object();
|
||||||
private SettableWakeLock mMediaWakeLock;
|
@VisibleForTesting
|
||||||
private ZenModeController mZenModeController;
|
protected SettableWakeLock mMediaWakeLock;
|
||||||
|
@VisibleForTesting
|
||||||
|
protected ZenModeController mZenModeController;
|
||||||
private String mDatePattern;
|
private String mDatePattern;
|
||||||
private DateFormat mDateFormat;
|
private DateFormat mDateFormat;
|
||||||
private String mLastText;
|
private String mLastText;
|
||||||
private boolean mRegistered;
|
private boolean mRegistered;
|
||||||
private String mNextAlarm;
|
private String mNextAlarm;
|
||||||
private NextAlarmController mNextAlarmController;
|
private NextAlarmController mNextAlarmController;
|
||||||
|
@VisibleForTesting
|
||||||
protected AlarmManager mAlarmManager;
|
protected AlarmManager mAlarmManager;
|
||||||
|
@VisibleForTesting
|
||||||
protected ContentResolver mContentResolver;
|
protected ContentResolver mContentResolver;
|
||||||
private AlarmManager.AlarmClockInfo mNextAlarmInfo;
|
private AlarmManager.AlarmClockInfo mNextAlarmInfo;
|
||||||
private PendingIntent mPendingIntent;
|
private PendingIntent mPendingIntent;
|
||||||
@@ -297,6 +301,12 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateSliceProvider() {
|
public boolean onCreateSliceProvider() {
|
||||||
|
synchronized (this) {
|
||||||
|
KeyguardSliceProvider oldInstance = KeyguardSliceProvider.sInstance;
|
||||||
|
if (oldInstance != null) {
|
||||||
|
oldInstance.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
mAlarmManager = getContext().getSystemService(AlarmManager.class);
|
mAlarmManager = getContext().getSystemService(AlarmManager.class);
|
||||||
mContentResolver = getContext().getContentResolver();
|
mContentResolver = getContext().getContentResolver();
|
||||||
mNextAlarmController = new NextAlarmControllerImpl(getContext());
|
mNextAlarmController = new NextAlarmControllerImpl(getContext());
|
||||||
@@ -310,9 +320,25 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
|||||||
KeyguardSliceProvider.sInstance = this;
|
KeyguardSliceProvider.sInstance = this;
|
||||||
registerClockUpdate();
|
registerClockUpdate();
|
||||||
updateClockLocked();
|
updateClockLocked();
|
||||||
|
}
|
||||||
return true;
|
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
|
@Override
|
||||||
public void onZenChanged(int zen) {
|
public void onZenChanged(int zen) {
|
||||||
notifyChange();
|
notifyChange();
|
||||||
@@ -350,7 +376,8 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
|||||||
* Registers a broadcast receiver for clock updates, include date, time zone and manually
|
* Registers a broadcast receiver for clock updates, include date, time zone and manually
|
||||||
* changing the date/time via the settings app.
|
* changing the date/time via the settings app.
|
||||||
*/
|
*/
|
||||||
private void registerClockUpdate() {
|
@VisibleForTesting
|
||||||
|
protected void registerClockUpdate() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (mRegistered) {
|
if (mRegistered) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -48,6 +48,9 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
|||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
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.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -73,6 +76,14 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
|
|||||||
private NotificationMediaManager mNotificationMediaManager;
|
private NotificationMediaManager mNotificationMediaManager;
|
||||||
@Mock
|
@Mock
|
||||||
private StatusBarStateController mStatusBarStateController;
|
private StatusBarStateController mStatusBarStateController;
|
||||||
|
@Mock
|
||||||
|
private KeyguardBypassController mKeyguardBypassController;
|
||||||
|
@Mock
|
||||||
|
private ZenModeController mZenModeController;
|
||||||
|
@Mock
|
||||||
|
private SettableWakeLock mMediaWakeLock;
|
||||||
|
@Mock
|
||||||
|
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
private TestableKeyguardSliceProvider mProvider;
|
private TestableKeyguardSliceProvider mProvider;
|
||||||
private boolean mIsZenMode;
|
private boolean mIsZenMode;
|
||||||
|
|
||||||
@@ -194,6 +205,20 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
|
|||||||
verify(mContentResolver, never()).notifyChange(eq(mProvider.getUri()), eq(null));
|
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 {
|
private class TestableKeyguardSliceProvider extends KeyguardSliceProvider {
|
||||||
int mCleanDateFormatInvokations;
|
int mCleanDateFormatInvokations;
|
||||||
private int mCounter;
|
private int mCounter;
|
||||||
@@ -207,6 +232,8 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
|
|||||||
super.onCreateSliceProvider();
|
super.onCreateSliceProvider();
|
||||||
mAlarmManager = KeyguardSliceProviderTest.this.mAlarmManager;
|
mAlarmManager = KeyguardSliceProviderTest.this.mAlarmManager;
|
||||||
mContentResolver = KeyguardSliceProviderTest.this.mContentResolver;
|
mContentResolver = KeyguardSliceProviderTest.this.mContentResolver;
|
||||||
|
mZenModeController = KeyguardSliceProviderTest.this.mZenModeController;
|
||||||
|
mMediaWakeLock = KeyguardSliceProviderTest.this.mMediaWakeLock;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,7 +250,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public KeyguardUpdateMonitor getKeyguardUpdateMonitor() {
|
public KeyguardUpdateMonitor getKeyguardUpdateMonitor() {
|
||||||
return mock(KeyguardUpdateMonitor.class);
|
return mKeyguardUpdateMonitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user