diff --git a/packages/SystemUI/res-keyguard/drawable/ic_unlocked_aod.xml b/packages/SystemUI/res-keyguard/drawable/ic_unlocked_aod.xml new file mode 100644 index 0000000000000..230a25628c40d --- /dev/null +++ b/packages/SystemUI/res-keyguard/drawable/ic_unlocked_aod.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res-keyguard/drawable/super_lock_icon.xml b/packages/SystemUI/res-keyguard/drawable/super_lock_icon.xml index c58e2e3266d05..67a70bb399646 100644 --- a/packages/SystemUI/res-keyguard/drawable/super_lock_icon.xml +++ b/packages/SystemUI/res-keyguard/drawable/super_lock_icon.xml @@ -50,6 +50,11 @@ android:state_first="true" android:state_single="true" android:drawable="@drawable/ic_lock_aod" /> + + + + + diff --git a/packages/SystemUI/res-keyguard/drawable/unlocked_aod_to_ls.xml b/packages/SystemUI/res-keyguard/drawable/unlocked_aod_to_ls.xml new file mode 100644 index 0000000000000..3b59ba8815b81 --- /dev/null +++ b/packages/SystemUI/res-keyguard/drawable/unlocked_aod_to_ls.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res-keyguard/drawable/unlocked_ls_to_aod.xml b/packages/SystemUI/res-keyguard/drawable/unlocked_ls_to_aod.xml new file mode 100644 index 0000000000000..1c6d0b5193eb1 --- /dev/null +++ b/packages/SystemUI/res-keyguard/drawable/unlocked_ls_to_aod.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 521ed7844cff4..7ac3ca629e3ff 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -39,7 +39,6 @@ import android.os.Vibrator; import android.util.DisplayMetrics; import android.util.Log; import android.util.MathUtils; -import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; @@ -67,8 +66,6 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.ViewController; import com.android.systemui.util.concurrency.DelayableExecutor; -import com.airbnb.lottie.LottieAnimationView; - import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Objects; @@ -103,10 +100,8 @@ public class LockIconViewController extends ViewController impleme @NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final ConfigurationController mConfigurationController; @NonNull private final DelayableExecutor mExecutor; - @NonNull private final LayoutInflater mLayoutInflater; private boolean mUdfpsEnrolled; - @Nullable private LottieAnimationView mAodFp; @NonNull private final AnimatedStateListDrawable mIcon; @NonNull private CharSequence mUnlockedLabel; @@ -141,7 +136,7 @@ public class LockIconViewController extends ViewController impleme // for udfps when strong auth is required or unlocked on AOD private boolean mShowAodLockIcon; - private boolean mShowAODFpIcon; + private boolean mShowAodUnlockedIcon; private final int mMaxBurnInOffsetX; private final int mMaxBurnInOffsetY; private float mInterpolatedDarkAmount; @@ -164,8 +159,7 @@ public class LockIconViewController extends ViewController impleme @NonNull @Main DelayableExecutor executor, @Nullable Vibrator vibrator, @Nullable AuthRippleController authRippleController, - @NonNull @Main Resources resources, - @NonNull LayoutInflater inflater + @NonNull @Main Resources resources ) { super(view); mStatusBarStateController = statusBarStateController; @@ -179,7 +173,6 @@ public class LockIconViewController extends ViewController impleme mExecutor = executor; mVibrator = vibrator; mAuthRippleController = authRippleController; - mLayoutInflater = inflater; mMaxBurnInOffsetX = resources.getDimensionPixelSize(R.dimen.udfps_burn_in_offset_x); mMaxBurnInOffsetY = resources.getDimensionPixelSize(R.dimen.udfps_burn_in_offset_y); @@ -261,11 +254,12 @@ public class LockIconViewController extends ViewController impleme } boolean wasShowingUnlock = mShowUnlockIcon; - boolean wasShowingFpIcon = mUdfpsEnrolled && !mShowUnlockIcon && !mShowLockIcon; + boolean wasShowingFpIcon = mUdfpsEnrolled && !mShowUnlockIcon && !mShowLockIcon + && !mShowAodUnlockedIcon && !mShowAodLockIcon; mShowLockIcon = !mCanDismissLockScreen && !mUserUnlockedWithBiometric && isLockScreen() && (!mUdfpsEnrolled || !mRunningFPS); mShowUnlockIcon = (mCanDismissLockScreen || mUserUnlockedWithBiometric) && isLockScreen(); - mShowAODFpIcon = mIsDozing && mUdfpsEnrolled && !mRunningFPS && mCanDismissLockScreen; + mShowAodUnlockedIcon = mIsDozing && mUdfpsEnrolled && !mRunningFPS && mCanDismissLockScreen; mShowAodLockIcon = mIsDozing && mUdfpsEnrolled && !mRunningFPS && !mCanDismissLockScreen; final CharSequence prevContentDescription = mView.getContentDescription(); @@ -282,14 +276,9 @@ public class LockIconViewController extends ViewController impleme mView.updateIcon(ICON_UNLOCK, false); mView.setContentDescription(mUnlockedLabel); mView.setVisibility(View.VISIBLE); - } else if (mShowAODFpIcon) { - // AOD fp icon is special cased as a lottie view (it updates for each burn-in offset), - // this state shows a transparent view - mView.setContentDescription(null); - mAodFp.setVisibility(View.VISIBLE); - mAodFp.setContentDescription(mCanDismissLockScreen ? mUnlockedLabel : mLockedLabel); - - mView.updateIcon(ICON_FINGERPRINT, true); // this shows no icon + } else if (mShowAodUnlockedIcon) { + mView.updateIcon(ICON_UNLOCK, true); + mView.setContentDescription(mUnlockedLabel); mView.setVisibility(View.VISIBLE); } else if (mShowAodLockIcon) { if (wasShowingUnlock) { @@ -305,11 +294,6 @@ public class LockIconViewController extends ViewController impleme mView.setContentDescription(null); } - if (!mShowAODFpIcon && mAodFp != null) { - mAodFp.setVisibility(View.INVISIBLE); - mAodFp.setContentDescription(null); - } - if (!Objects.equals(prevContentDescription, mView.getContentDescription()) && mView.getContentDescription() != null) { mView.announceForAccessibility(mView.getContentDescription()); @@ -397,7 +381,7 @@ public class LockIconViewController extends ViewController impleme pw.println(); pw.println(" mShowUnlockIcon: " + mShowUnlockIcon); pw.println(" mShowLockIcon: " + mShowLockIcon); - pw.println(" mShowAODFpIcon: " + mShowAODFpIcon); + pw.println(" mShowAodUnlockedIcon: " + mShowAodUnlockedIcon); pw.println(" mIsDozing: " + mIsDozing); pw.println(" mIsBouncerShowing: " + mIsBouncerShowing); pw.println(" mUserUnlockedWithBiometric: " + mUserUnlockedWithBiometric); @@ -426,13 +410,6 @@ public class LockIconViewController extends ViewController impleme - mMaxBurnInOffsetY, mInterpolatedDarkAmount); float progress = MathUtils.lerp(0f, getBurnInProgressOffset(), mInterpolatedDarkAmount); - if (mAodFp != null) { - mAodFp.setTranslationX(offsetX); - mAodFp.setTranslationY(offsetY); - mAodFp.setProgress(progress); - mAodFp.setAlpha(255 * mInterpolatedDarkAmount); - } - mView.setTranslationX(offsetX); mView.setTranslationY(offsetY); } @@ -445,10 +422,6 @@ public class LockIconViewController extends ViewController impleme mView.setUseBackground(mUdfpsSupported); mUdfpsEnrolled = mKeyguardUpdateMonitor.isUdfpsEnrolled(); - if (!wasUdfpsEnrolled && mUdfpsEnrolled && mAodFp == null) { - mLayoutInflater.inflate(R.layout.udfps_aod_lock_icon, mView); - mAodFp = mView.findViewById(R.id.lock_udfps_aod_fp); - } if (wasUdfpsSupported != mUdfpsSupported || wasUdfpsEnrolled != mUdfpsEnrolled) { updateVisibility(); } @@ -712,8 +685,7 @@ public class LockIconViewController extends ViewController impleme private boolean inLockIconArea(MotionEvent event) { return mSensorTouchLocation.contains((int) event.getX(), (int) event.getY()) - && (mView.getVisibility() == View.VISIBLE - || (mAodFp != null && mAodFp.getVisibility() == View.VISIBLE)); + && mView.getVisibility() == View.VISIBLE; } private boolean isActionable() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java index 81bcbfb1f4603..d7c00fbe1e85a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java @@ -26,7 +26,6 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -43,7 +42,6 @@ import android.os.Vibrator; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.Pair; -import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; @@ -69,8 +67,6 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; -import com.airbnb.lottie.LottieAnimationView; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -110,8 +106,6 @@ public class LockIconViewControllerTest extends SysuiTestCase { private @Mock ConfigurationController mConfigurationController; private @Mock Vibrator mVibrator; private @Mock AuthRippleController mAuthRippleController; - private @Mock LottieAnimationView mAodFp; - private @Mock LayoutInflater mLayoutInflater; private FakeExecutor mDelayableExecutor = new FakeExecutor(new FakeSystemClock()); private LockIconViewController mLockIconViewController; @@ -149,7 +143,6 @@ public class LockIconViewControllerTest extends SysuiTestCase { when(mLockIconView.getResources()).thenReturn(mResources); when(mLockIconView.getContext()).thenReturn(mContext); - when(mLockIconView.findViewById(R.layout.udfps_aod_lock_icon)).thenReturn(mAodFp); when(mContext.getResources()).thenReturn(mResources); when(mContext.getSystemService(WindowManager.class)).thenReturn(mWindowManager); Rect windowBounds = new Rect(0, 0, 800, 1200); @@ -176,8 +169,7 @@ public class LockIconViewControllerTest extends SysuiTestCase { mDelayableExecutor, mVibrator, mAuthRippleController, - mResources, - mLayoutInflater + mResources ); } @@ -186,35 +178,6 @@ public class LockIconViewControllerTest extends SysuiTestCase { mStaticMockSession.finishMocking(); } - @Test - public void testIgnoreUdfpsWhenNotSupported() { - // GIVEN Udpfs sensor is NOT available - mLockIconViewController.init(); - captureAttachListener(); - - // WHEN the view is attached - mAttachListener.onViewAttachedToWindow(mLockIconView); - - // THEN lottie animation should NOT be inflated - verify(mLayoutInflater, never()).inflate(eq(R.layout.udfps_aod_lock_icon), any()); - } - - @Test - public void testInflateUdfpsWhenSupported() { - // GIVEN Udpfs sensor is available - setupUdfps(); - when(mKeyguardUpdateMonitor.isUdfpsEnrolled()).thenReturn(true); - - mLockIconViewController.init(); - captureAttachListener(); - - // WHEN the view is attached - mAttachListener.onViewAttachedToWindow(mLockIconView); - - // THEN lottie animation should be inflated - verify(mLayoutInflater).inflate(eq(R.layout.udfps_aod_lock_icon), any()); - } - @Test public void testUpdateFingerprintLocationOnInit() { // GIVEN fp sensor location is available pre-attached