Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1382c54 authored by Lucas Dupin's avatar Lucas Dupin Committed by Automerger Merge Worker
Browse files

Merge "Smoothly hide the keyboard" into rvc-dev am: f2570fbd

Change-Id: If3fe73931928c9e30c512c51a849e60e81c2b2a4
parents ca286cfa f2570fbd
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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();
+64 −9
Original line number Diff line number Diff line
@@ -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()));
    }
}
 No newline at end of file