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 1f5303fba0a4e..fe681371578d9 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -40,7 +40,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; @@ -68,8 +67,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; @@ -101,10 +98,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; @@ -140,7 +135,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; @@ -163,8 +158,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; @@ -178,7 +172,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); @@ -260,11 +253,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(); @@ -281,14 +275,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) { @@ -304,11 +293,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()); @@ -396,7 +380,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); @@ -425,13 +409,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); } @@ -444,10 +421,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(); } @@ -715,8 +688,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