Loading src/com/android/settings/biometrics/activeunlock/ActiveUnlockContentListener.java +10 −8 Original line number Diff line number Diff line Loading @@ -87,10 +87,10 @@ public class ActiveUnlockContentListener { } /** Starts listening for updates from the ContentProvider, and fetches the current value. */ public synchronized void subscribe() { if (mSubscribed && mUri != null) { return; /** Returns true if start listening for updates from the ContentProvider, false otherwise. */ public synchronized boolean subscribe() { if (mSubscribed || mUri == null) { return false; } mSubscribed = true; mContext.getContentResolver().registerContentObserver( Loading @@ -99,15 +99,17 @@ public class ActiveUnlockContentListener { () -> { getContentFromUri(); }); return true; } /** Stops listening for updates from the ContentProvider. */ public synchronized void unsubscribe() { if (!mSubscribed && mUri != null) { return; /** Returns true if stops listening for updates from the ContentProvider, false otherewise. */ public synchronized boolean unsubscribe() { if (!mSubscribed || mUri == null) { return false; } mSubscribed = false; mContext.getContentResolver().unregisterContentObserver(mContentObserver); return true; } /** Retrieves the most recently fetched value from the ContentProvider. */ Loading src/com/android/settings/biometrics/activeunlock/ActiveUnlockStatusPreferenceController.java +11 −5 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public class ActiveUnlockStatusPreferenceController private final CombinedBiometricStatusUtils mCombinedBiometricStatusUtils; private final ActiveUnlockSummaryListener mActiveUnlockSummaryListener; private final ActiveUnlockDeviceNameListener mActiveUnlockDeviceNameListener; private final boolean mIsAvailable; public ActiveUnlockStatusPreferenceController(@NonNull Context context) { this(context, KEY_ACTIVE_UNLOCK_SETTINGS); Loading @@ -59,6 +60,7 @@ public class ActiveUnlockStatusPreferenceController @NonNull Context context, @NonNull String key) { super(context, key); mActiveUnlockStatusUtils = new ActiveUnlockStatusUtils(context); mIsAvailable = mActiveUnlockStatusUtils.isAvailable(); mCombinedBiometricStatusUtils = new CombinedBiometricStatusUtils(context, getUserId()); OnContentChangedListener onSummaryChangedListener = new OnContentChangedListener() { @Override Loading Loading @@ -90,9 +92,11 @@ public class ActiveUnlockStatusPreferenceController /** Subscribes to update preference summary dynamically. */ @OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart() { if (mIsAvailable) { mActiveUnlockSummaryListener.subscribe(); mActiveUnlockDeviceNameListener.subscribe(); } } /** Resets the preference reference on resume. */ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) Loading @@ -105,9 +109,11 @@ public class ActiveUnlockStatusPreferenceController /** Unsubscribes to prevent leaked listener. */ @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onStop() { if (mIsAvailable) { mActiveUnlockSummaryListener.unsubscribe(); mActiveUnlockDeviceNameListener.unsubscribe(); } } @Override public void displayPreference(PreferenceScreen screen) { Loading @@ -127,7 +133,7 @@ public class ActiveUnlockStatusPreferenceController // This should never be called, as getAvailabilityStatus() will return the exact value. // However, this is an abstract method in BiometricStatusPreferenceController, and so // needs to be overridden. return mActiveUnlockStatusUtils.isAvailable(); return mIsAvailable; } @Override Loading tests/robotests/src/com/android/settings/biometrics/activeunlock/ActiveUnlockContentListenerTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.biometrics.activeunlock; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import static org.robolectric.shadows.ShadowLooper.idleMainLooper; Loading @@ -43,6 +44,8 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowDeviceConfig.class}) public class ActiveUnlockContentListenerTest { Loading Loading @@ -136,6 +139,26 @@ public class ActiveUnlockContentListenerTest { assertThat(mUpdateCount).isEqualTo(1); } @Test public void noProvider_subscribeDoesntRegisterObserver() { when(mPackageManager.getInstalledPackages(any())) .thenReturn(new ArrayList<>()); OnContentChangedListener listener = new OnContentChangedListener() { @Override public void onContentChanged(String newValue) {} }; ActiveUnlockContentListener contentListener = new ActiveUnlockContentListener( mContext, listener, "logTag", FakeContentProvider.METHOD_SUMMARY, FakeContentProvider.KEY_SUMMARY); assertThat(contentListener.subscribe()).isFalse(); } private void updateContent(String content) { FakeContentProvider.setTileSummary(content); mContext.getContentResolver().notifyChange( Loading Loading
src/com/android/settings/biometrics/activeunlock/ActiveUnlockContentListener.java +10 −8 Original line number Diff line number Diff line Loading @@ -87,10 +87,10 @@ public class ActiveUnlockContentListener { } /** Starts listening for updates from the ContentProvider, and fetches the current value. */ public synchronized void subscribe() { if (mSubscribed && mUri != null) { return; /** Returns true if start listening for updates from the ContentProvider, false otherwise. */ public synchronized boolean subscribe() { if (mSubscribed || mUri == null) { return false; } mSubscribed = true; mContext.getContentResolver().registerContentObserver( Loading @@ -99,15 +99,17 @@ public class ActiveUnlockContentListener { () -> { getContentFromUri(); }); return true; } /** Stops listening for updates from the ContentProvider. */ public synchronized void unsubscribe() { if (!mSubscribed && mUri != null) { return; /** Returns true if stops listening for updates from the ContentProvider, false otherewise. */ public synchronized boolean unsubscribe() { if (!mSubscribed || mUri == null) { return false; } mSubscribed = false; mContext.getContentResolver().unregisterContentObserver(mContentObserver); return true; } /** Retrieves the most recently fetched value from the ContentProvider. */ Loading
src/com/android/settings/biometrics/activeunlock/ActiveUnlockStatusPreferenceController.java +11 −5 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public class ActiveUnlockStatusPreferenceController private final CombinedBiometricStatusUtils mCombinedBiometricStatusUtils; private final ActiveUnlockSummaryListener mActiveUnlockSummaryListener; private final ActiveUnlockDeviceNameListener mActiveUnlockDeviceNameListener; private final boolean mIsAvailable; public ActiveUnlockStatusPreferenceController(@NonNull Context context) { this(context, KEY_ACTIVE_UNLOCK_SETTINGS); Loading @@ -59,6 +60,7 @@ public class ActiveUnlockStatusPreferenceController @NonNull Context context, @NonNull String key) { super(context, key); mActiveUnlockStatusUtils = new ActiveUnlockStatusUtils(context); mIsAvailable = mActiveUnlockStatusUtils.isAvailable(); mCombinedBiometricStatusUtils = new CombinedBiometricStatusUtils(context, getUserId()); OnContentChangedListener onSummaryChangedListener = new OnContentChangedListener() { @Override Loading Loading @@ -90,9 +92,11 @@ public class ActiveUnlockStatusPreferenceController /** Subscribes to update preference summary dynamically. */ @OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart() { if (mIsAvailable) { mActiveUnlockSummaryListener.subscribe(); mActiveUnlockDeviceNameListener.subscribe(); } } /** Resets the preference reference on resume. */ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) Loading @@ -105,9 +109,11 @@ public class ActiveUnlockStatusPreferenceController /** Unsubscribes to prevent leaked listener. */ @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onStop() { if (mIsAvailable) { mActiveUnlockSummaryListener.unsubscribe(); mActiveUnlockDeviceNameListener.unsubscribe(); } } @Override public void displayPreference(PreferenceScreen screen) { Loading @@ -127,7 +133,7 @@ public class ActiveUnlockStatusPreferenceController // This should never be called, as getAvailabilityStatus() will return the exact value. // However, this is an abstract method in BiometricStatusPreferenceController, and so // needs to be overridden. return mActiveUnlockStatusUtils.isAvailable(); return mIsAvailable; } @Override Loading
tests/robotests/src/com/android/settings/biometrics/activeunlock/ActiveUnlockContentListenerTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.biometrics.activeunlock; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import static org.robolectric.shadows.ShadowLooper.idleMainLooper; Loading @@ -43,6 +44,8 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowDeviceConfig.class}) public class ActiveUnlockContentListenerTest { Loading Loading @@ -136,6 +139,26 @@ public class ActiveUnlockContentListenerTest { assertThat(mUpdateCount).isEqualTo(1); } @Test public void noProvider_subscribeDoesntRegisterObserver() { when(mPackageManager.getInstalledPackages(any())) .thenReturn(new ArrayList<>()); OnContentChangedListener listener = new OnContentChangedListener() { @Override public void onContentChanged(String newValue) {} }; ActiveUnlockContentListener contentListener = new ActiveUnlockContentListener( mContext, listener, "logTag", FakeContentProvider.METHOD_SUMMARY, FakeContentProvider.KEY_SUMMARY); assertThat(contentListener.subscribe()).isFalse(); } private void updateContent(String content) { FakeContentProvider.setTileSummary(content); mContext.getContentResolver().notifyChange( Loading