Merge "Smoothly hide the keyboard" into rvc-dev am: f2570fbd42
Change-Id: If3fe73931928c9e30c512c51a849e60e81c2b2a4
This commit is contained in:
@@ -103,7 +103,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
|
||||
private KeyguardSecurityModel mSecurityModel;
|
||||
private LockPatternUtils mLockPatternUtils;
|
||||
|
||||
private KeyguardSecurityViewFlipper mSecurityViewFlipper;
|
||||
@VisibleForTesting
|
||||
KeyguardSecurityViewFlipper mSecurityViewFlipper;
|
||||
private boolean mIsVerifyUnlockOnly;
|
||||
private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
|
||||
private KeyguardSecurityView mCurrentSecurityView;
|
||||
@@ -375,6 +376,9 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
|
||||
}
|
||||
|
||||
public boolean startDisappearAnimation(Runnable onFinishRunnable) {
|
||||
if (mCurrentSecuritySelection == SecurityMode.Password) {
|
||||
mSecurityViewFlipper.getWindowInsetsController().hide(WindowInsets.Type.ime());
|
||||
}
|
||||
if (mCurrentSecuritySelection != SecurityMode.None) {
|
||||
return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation(
|
||||
onFinishRunnable);
|
||||
@@ -397,7 +401,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
|
||||
return mSecurityViewFlipper.getTitle();
|
||||
}
|
||||
|
||||
private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
|
||||
@VisibleForTesting
|
||||
protected KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
|
||||
final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
|
||||
KeyguardSecurityView view = null;
|
||||
final int children = mSecurityViewFlipper.getChildCount();
|
||||
|
||||
@@ -16,31 +16,75 @@
|
||||
|
||||
package com.android.keyguard;
|
||||
|
||||
import static android.view.WindowInsets.Type.ime;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.UiThreadTest;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.WindowInsetsController;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@TestableLooper.RunWithLooper()
|
||||
public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
|
||||
@UiThreadTest
|
||||
@Mock
|
||||
private KeyguardSecurityModel mKeyguardSecurityModel;
|
||||
@Mock
|
||||
private KeyguardStateController mKeyguardStateController;
|
||||
@Mock
|
||||
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Mock
|
||||
private KeyguardSecurityContainer.SecurityCallback mSecurityCallback;
|
||||
@Mock
|
||||
private KeyguardSecurityView mSecurityView;
|
||||
@Mock
|
||||
private WindowInsetsController mWindowInsetsController;
|
||||
@Mock
|
||||
private KeyguardSecurityViewFlipper mSecurityViewFlipper;
|
||||
@Rule
|
||||
public MockitoRule mRule = MockitoJUnit.rule();
|
||||
private KeyguardSecurityContainer mKeyguardSecurityContainer;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
mDependency.injectTestDependency(KeyguardStateController.class, mKeyguardStateController);
|
||||
mDependency.injectTestDependency(KeyguardSecurityModel.class, mKeyguardSecurityModel);
|
||||
mDependency.injectTestDependency(KeyguardUpdateMonitor.class, mKeyguardUpdateMonitor);
|
||||
mKeyguardSecurityContainer = new KeyguardSecurityContainer(getContext()) {
|
||||
@Override
|
||||
protected KeyguardSecurityView getSecurityView(
|
||||
KeyguardSecurityModel.SecurityMode securityMode) {
|
||||
return mSecurityView;
|
||||
}
|
||||
};
|
||||
mKeyguardSecurityContainer.mSecurityViewFlipper = mSecurityViewFlipper;
|
||||
when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
|
||||
mKeyguardSecurityContainer.setSecurityCallback(mSecurityCallback);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showSecurityScreen_canInflateAllModes() {
|
||||
mDependency.injectMockDependency(KeyguardStateController.class);
|
||||
KeyguardSecurityContainer keyguardSecurityContainer =
|
||||
new KeyguardSecurityContainer(getContext());
|
||||
|
||||
Context context = getContext();
|
||||
|
||||
for (int theme : new int[] {R.style.Theme_SystemUI, R.style.Theme_SystemUI_Light}) {
|
||||
@@ -49,7 +93,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
KeyguardSecurityModel.SecurityMode[] modes =
|
||||
KeyguardSecurityModel.SecurityMode.values();
|
||||
for (KeyguardSecurityModel.SecurityMode mode : modes) {
|
||||
final int resId = keyguardSecurityContainer.getLayoutIdFor(mode);
|
||||
final int resId = mKeyguardSecurityContainer.getLayoutIdFor(mode);
|
||||
if (resId == 0) {
|
||||
continue;
|
||||
}
|
||||
@@ -57,4 +101,15 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startDisappearAnimation_animatesKeyboard() {
|
||||
when(mKeyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(
|
||||
KeyguardSecurityModel.SecurityMode.Password);
|
||||
mKeyguardSecurityContainer.showPrimarySecurityScreen(false /* turningOff */);
|
||||
|
||||
mKeyguardSecurityContainer.startDisappearAnimation(null);
|
||||
verify(mSecurityView).startDisappearAnimation(eq(null));
|
||||
verify(mWindowInsetsController).hide(eq(ime()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user