Merge "Smoothly hide the keyboard" into rvc-dev
This commit is contained in:
@@ -103,7 +103,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
|
|||||||
private KeyguardSecurityModel mSecurityModel;
|
private KeyguardSecurityModel mSecurityModel;
|
||||||
private LockPatternUtils mLockPatternUtils;
|
private LockPatternUtils mLockPatternUtils;
|
||||||
|
|
||||||
private KeyguardSecurityViewFlipper mSecurityViewFlipper;
|
@VisibleForTesting
|
||||||
|
KeyguardSecurityViewFlipper mSecurityViewFlipper;
|
||||||
private boolean mIsVerifyUnlockOnly;
|
private boolean mIsVerifyUnlockOnly;
|
||||||
private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
|
private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
|
||||||
private KeyguardSecurityView mCurrentSecurityView;
|
private KeyguardSecurityView mCurrentSecurityView;
|
||||||
@@ -375,6 +376,9 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean startDisappearAnimation(Runnable onFinishRunnable) {
|
public boolean startDisappearAnimation(Runnable onFinishRunnable) {
|
||||||
|
if (mCurrentSecuritySelection == SecurityMode.Password) {
|
||||||
|
mSecurityViewFlipper.getWindowInsetsController().hide(WindowInsets.Type.ime());
|
||||||
|
}
|
||||||
if (mCurrentSecuritySelection != SecurityMode.None) {
|
if (mCurrentSecuritySelection != SecurityMode.None) {
|
||||||
return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation(
|
return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation(
|
||||||
onFinishRunnable);
|
onFinishRunnable);
|
||||||
@@ -397,7 +401,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
|
|||||||
return mSecurityViewFlipper.getTitle();
|
return mSecurityViewFlipper.getTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
|
@VisibleForTesting
|
||||||
|
protected KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
|
||||||
final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
|
final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
|
||||||
KeyguardSecurityView view = null;
|
KeyguardSecurityView view = null;
|
||||||
final int children = mSecurityViewFlipper.getChildCount();
|
final int children = mSecurityViewFlipper.getChildCount();
|
||||||
|
|||||||
@@ -16,31 +16,75 @@
|
|||||||
|
|
||||||
package com.android.keyguard;
|
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.content.Context;
|
||||||
import android.test.UiThreadTest;
|
import android.testing.AndroidTestingRunner;
|
||||||
|
import android.testing.TestableLooper;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.WindowInsetsController;
|
||||||
|
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
import androidx.test.runner.AndroidJUnit4;
|
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.MockitoJUnit;
|
||||||
|
import org.mockito.junit.MockitoRule;
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidTestingRunner.class)
|
||||||
|
@TestableLooper.RunWithLooper()
|
||||||
public class KeyguardSecurityContainerTest extends SysuiTestCase {
|
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
|
@Test
|
||||||
public void showSecurityScreen_canInflateAllModes() {
|
public void showSecurityScreen_canInflateAllModes() {
|
||||||
mDependency.injectMockDependency(KeyguardStateController.class);
|
|
||||||
KeyguardSecurityContainer keyguardSecurityContainer =
|
|
||||||
new KeyguardSecurityContainer(getContext());
|
|
||||||
|
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
|
|
||||||
for (int theme : new int[] {R.style.Theme_SystemUI, R.style.Theme_SystemUI_Light}) {
|
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[] modes =
|
||||||
KeyguardSecurityModel.SecurityMode.values();
|
KeyguardSecurityModel.SecurityMode.values();
|
||||||
for (KeyguardSecurityModel.SecurityMode mode : modes) {
|
for (KeyguardSecurityModel.SecurityMode mode : modes) {
|
||||||
final int resId = keyguardSecurityContainer.getLayoutIdFor(mode);
|
final int resId = mKeyguardSecurityContainer.getLayoutIdFor(mode);
|
||||||
if (resId == 0) {
|
if (resId == 0) {
|
||||||
continue;
|
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