diff options
4 files changed, 46 insertions, 4 deletions
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 046981cf2e8f..d90a0225608d 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -1510,11 +1510,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { if (drawable != mBackgroundDrawable) { mBackgroundDrawable = drawable; if (mDecor != null) { + mDecor.startChanging(); mDecor.setWindowBackground(drawable); if (mBackgroundFallbackDrawable != null) { mDecor.setBackgroundFallback(drawable != null ? null : mBackgroundFallbackDrawable); } + mDecor.finishChanging(); } } } diff --git a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt index 9e326aaec3c1..c8244589ce44 100644 --- a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt @@ -91,9 +91,9 @@ class SeekBarViewModel @Inject constructor(@Background private val bgExecutor: R } private var playbackState: PlaybackState? = null private var callback = object : MediaController.Callback() { - override fun onPlaybackStateChanged(state: PlaybackState) { + override fun onPlaybackStateChanged(state: PlaybackState?) { playbackState = state - if (PlaybackState.STATE_NONE.equals(playbackState)) { + if (playbackState == null || PlaybackState.STATE_NONE.equals(playbackState)) { clearController() } else { checkIfPollingNeeded() diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt index b81ab74458ce..1f9862c07a4c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt @@ -654,4 +654,21 @@ public class SeekBarViewModelTest : SysuiTestCase() { fakeExecutor.runAllReady() verify(mockController).unregisterCallback(any()) } + + @Test + fun nullPlaybackStateUnregistersCallback() { + viewModel.updateController(mockController) + val captor = ArgumentCaptor.forClass(MediaController.Callback::class.java) + verify(mockController).registerCallback(captor.capture()) + val callback = captor.value + // WHEN the callback receives a null state + callback.onPlaybackStateChanged(null) + with(fakeExecutor) { + advanceClockToNext() + runAllReady() + } + // THEN we unregister callback (as a result of clearing the controller) + fakeExecutor.runAllReady() + verify(mockController).unregisterCallback(any()) + } } diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 8979d8c6ba10..8f3ed7411f17 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -77,8 +77,10 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionInfo; import android.content.pm.UserInfo; +import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.face.FaceManager; +import android.hardware.face.FaceManager.GetFeatureCallback; import android.hardware.fingerprint.FingerprintManager; import android.hardware.health.V2_0.IHealth; import android.net.ConnectivityManager; @@ -3327,18 +3329,39 @@ public class StatsPullAtomService extends SystemService { try { List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers(); int numUsers = users.size(); + FaceManager faceManager = mContext.getSystemService(FaceManager.class); + for (int userNum = 0; userNum < numUsers; userNum++) { int userId = users.get(userNum).getUserHandle().getIdentifier(); + if (faceManager != null) { + // Store the current setting from the Face HAL, and upon next upload the value + // reported will be correct (given the user did not modify it). + faceManager.getFeature(userId, BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, + new GetFeatureCallback() { + @Override + public void onCompleted(boolean success, int feature, + boolean value) { + if (feature == FaceManager.FEATURE_REQUIRE_ATTENTION + && success) { + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.FACE_UNLOCK_ATTENTION_REQUIRED, + value ? 1 : 0, userId); + } + } + } + ); + } + int unlockKeyguardEnabled = Settings.Secure.getIntForUser( mContext.getContentResolver(), Settings.Secure.FACE_UNLOCK_KEYGUARD_ENABLED, 1, userId); int unlockDismissesKeyguard = Settings.Secure.getIntForUser( mContext.getContentResolver(), - Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, 0, userId); + Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, 1, userId); int unlockAttentionRequired = Settings.Secure.getIntForUser( mContext.getContentResolver(), - Settings.Secure.FACE_UNLOCK_ATTENTION_REQUIRED, 1, userId); + Settings.Secure.FACE_UNLOCK_ATTENTION_REQUIRED, 0, userId); int unlockAppEnabled = Settings.Secure.getIntForUser( mContext.getContentResolver(), Settings.Secure.FACE_UNLOCK_APP_ENABLED, 1, userId); |