Move padlock to the top of the lock screen

Test: tap on notification on lock screen
Test: tap on notification on shade locked
Test: swipe down from the top expanding QS
Test: swipe up from LS
Test: switch between pin, pattern and password
Test: add and remove locked sim card
Test: atest KeyguardBottomAreaTest
Test: atest KeyguardClockPositionAlgorithmTest
Test: atest KeyguardMessageAreaTest
Test: atest KeyguardIndicationControllerTest
Test: atest StatusBarKeyguardViewManagerTest
Test: atest KeyguardBouncerTest
Test: atest KeyguardPatternViewTest
Fixes: 130398499
Fixes: 130298363
Fixes: 129784068
Fixes: 130223966
Change-Id: Ib1706de259fa4b1f4ef13f654cbd931457733d82
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 7d347d5..d09cea5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -19,6 +19,7 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyFloat;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
@@ -27,6 +28,7 @@
 import android.content.Context;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
+import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.test.filters.SmallTest;
@@ -36,6 +38,8 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.keyguard.DismissCallbackRegistry;
 import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.StatusBarState;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -64,16 +68,23 @@
     private BiometricUnlockController mBiometrucUnlockController;
     @Mock
     private DismissCallbackRegistry mDismissCallbackRegistry;
+    @Mock
+    private ViewGroup mLockIconContainer;
+    @Mock
+    private StatusBarStateController mStatusBarStateController;
     private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mDependency.injectMockDependency(StatusBarWindowController.class);
+        mDependency.injectTestDependency(StatusBarStateController.class, mStatusBarStateController);
+        when(mLockIconContainer.getParent()).thenReturn(mock(ViewGroup.class));
         mStatusBarKeyguardViewManager = new TestableStatusBarKeyguardViewManager(getContext(),
                 mViewMediatorCallback, mLockPatternUtils);
         mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar, mContainer,
-                mNotificationPanelView, mBiometrucUnlockController, mDismissCallbackRegistry);
+                mNotificationPanelView, mBiometrucUnlockController, mDismissCallbackRegistry,
+                mLockIconContainer);
         mStatusBarKeyguardViewManager.show(null);
     }
 
@@ -187,6 +198,29 @@
         verify(mBouncer, never()).setExpansion(anyFloat());
     }
 
+    @Test
+    public void onQsExpansionChanged_lockVisibleOnlyWhenCollapsed() {
+        when(mStatusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD);
+        mStatusBarKeyguardViewManager.onQsExpansionChanged(0);
+        verify(mLockIconContainer).setVisibility(eq(View.VISIBLE));
+
+        reset(mNotificationPanelView);
+        when(mNotificationPanelView.isQsExpanded()).thenReturn(true);
+        mStatusBarKeyguardViewManager.onQsExpansionChanged(1f);
+        verify(mLockIconContainer).setVisibility(eq(View.INVISIBLE));
+    }
+
+    @Test
+    public void onQsExpansionChanged_lockInvisibleWhenAnimatingAway() {
+        when(mBouncer.isShowing()).thenReturn(true);
+        mStatusBarKeyguardViewManager.onQsExpansionChanged(0);
+        verify(mLockIconContainer).setVisibility(eq(View.VISIBLE));
+
+        when(mBouncer.isAnimatingAway()).thenReturn(true);
+        mStatusBarKeyguardViewManager.onQsExpansionChanged(0f);
+        verify(mLockIconContainer).setVisibility(eq(View.INVISIBLE));
+    }
+
     private class TestableStatusBarKeyguardViewManager extends StatusBarKeyguardViewManager {
 
         public TestableStatusBarKeyguardViewManager(Context context,
@@ -199,9 +233,10 @@
         public void registerStatusBar(StatusBar statusBar, ViewGroup container,
                 NotificationPanelView notificationPanelView,
                 BiometricUnlockController fingerprintUnlockController,
-                DismissCallbackRegistry dismissCallbackRegistry) {
+                DismissCallbackRegistry dismissCallbackRegistry,
+                ViewGroup lockIconContainer) {
             super.registerStatusBar(statusBar, container, notificationPanelView,
-                    fingerprintUnlockController, dismissCallbackRegistry);
+                    fingerprintUnlockController, dismissCallbackRegistry, lockIconContainer);
             mBouncer = StatusBarKeyguardViewManagerTest.this.mBouncer;
         }
     }