Merge "Fix click and long click lock behavior" into qt-dev

This commit is contained in:
Lucas Dupin
2019-04-24 00:41:45 +00:00
committed by Android (Google) Code Review
4 changed files with 57 additions and 10 deletions

View File

@@ -54,7 +54,9 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController.StateList
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
import com.android.systemui.statusbar.phone.LockIcon;
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.util.wakelock.SettableWakeLock;
import com.android.systemui.util.wakelock.WakeLock;
@@ -77,6 +79,8 @@ public class KeyguardIndicationController implements StateListener {
private static final long TRANSIENT_BIOMETRIC_ERROR_TIMEOUT = 1300;
private final Context mContext;
private final ShadeController mShadeController;
private final AccessibilityController mAccessibilityController;
private ViewGroup mIndicationArea;
private KeyguardIndicationTextView mTextView;
private KeyguardIndicationTextView mDisclosure;
@@ -116,7 +120,9 @@ public class KeyguardIndicationController implements StateListener {
public KeyguardIndicationController(Context context, ViewGroup indicationArea,
LockIcon lockIcon) {
this(context, indicationArea, lockIcon, new LockPatternUtils(context),
WakeLock.createPartial(context, "Doze:KeyguardIndication"));
WakeLock.createPartial(context, "Doze:KeyguardIndication"),
Dependency.get(ShadeController.class),
Dependency.get(AccessibilityController.class));
registerCallbacks(KeyguardUpdateMonitor.getInstance(context));
}
@@ -126,7 +132,8 @@ public class KeyguardIndicationController implements StateListener {
*/
@VisibleForTesting
KeyguardIndicationController(Context context, ViewGroup indicationArea, LockIcon lockIcon,
LockPatternUtils lockPatternUtils, WakeLock wakeLock) {
LockPatternUtils lockPatternUtils, WakeLock wakeLock, ShadeController shadeController,
AccessibilityController accessibilityController) {
mContext = context;
mIndicationArea = indicationArea;
mTextView = indicationArea.findViewById(R.id.keyguard_indication_text);
@@ -134,9 +141,12 @@ public class KeyguardIndicationController implements StateListener {
mTextView.getTextColors() : ColorStateList.valueOf(Color.WHITE);
mDisclosure = indicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure);
mLockIcon = lockIcon;
mShadeController = shadeController;
mAccessibilityController = accessibilityController;
// lock icon is not used on all form factors.
if (mLockIcon != null) {
mLockIcon.setOnLongClickListener(this::handleTrustCircleClick);
mLockIcon.setOnLongClickListener(this::handleLockLongClick);
mLockIcon.setOnClickListener(this::handleLockClick);
}
mWakeLock = new SettableWakeLock(wakeLock, TAG);
mLockPatternUtils = lockPatternUtils;
@@ -173,7 +183,7 @@ public class KeyguardIndicationController implements StateListener {
Dependency.get(StatusBarStateController.class).removeCallback(this);
}
private boolean handleTrustCircleClick(View view) {
private boolean handleLockLongClick(View view) {
mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK,
0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
showTransientIndication(R.string.keyguard_indication_trust_disabled);
@@ -182,6 +192,13 @@ public class KeyguardIndicationController implements StateListener {
return true;
}
private void handleLockClick(View view) {
if (!mAccessibilityController.isAccessibilityEnabled()) {
return;
}
mShadeController.showBouncer(false /* scrimmed */);
}
/**
* Gets the {@link KeyguardUpdateMonitorCallback} instance associated with this
* {@link KeyguardIndicationController}.

View File

@@ -248,10 +248,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
boolean canLock = mUnlockMethodCache.isMethodSecure()
&& mUnlockMethodCache.canSkipBouncer();
boolean clickToUnlock = mAccessibilityController.isAccessibilityEnabled();
boolean clickToForceLock = canLock && !clickToUnlock;
boolean longClickToForceLock = canLock && !clickToForceLock;
setClickable(clickToForceLock || clickToUnlock);
setLongClickable(longClickToForceLock);
setClickable(clickToUnlock);
setLongClickable(canLock && !clickToUnlock);
setFocusable(mAccessibilityController.isAccessibilityEnabled());
}

View File

@@ -3326,7 +3326,11 @@ public class StatusBar extends SystemUI implements DemoMode,
@Override
public void showBouncer(boolean scrimmed) {
mStatusBarKeyguardViewManager.showBouncer(scrimmed);
if (!mIsOccluded && !scrimmed && mState == StatusBarState.KEYGUARD) {
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */);
} else {
mStatusBarKeyguardViewManager.showBouncer(scrimmed);
}
}
@Override

View File

@@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
@@ -46,11 +48,14 @@ import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
import com.android.systemui.statusbar.phone.LockIcon;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.util.wakelock.WakeLockFake;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -72,6 +77,10 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
private LockIcon mLockIcon;
@Mock
private LockPatternUtils mLockPatternUtils;
@Mock
private ShadeController mShadeController;
@Mock
private AccessibilityController mAccessibilityController;
private KeyguardIndicationTextView mTextView;
private KeyguardIndicationController mController;
@@ -102,7 +111,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
Looper.prepare();
}
mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon,
mLockPatternUtils, mWakeLock);
mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController);
}
@Test
@@ -222,4 +231,23 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
assertThat(mTextView.getCurrentTextColor()).isEqualTo(Color.WHITE);
assertThat(mTextView.getAlpha()).isEqualTo(1f);
}
@Test
public void lockIcon_click() {
createController();
ArgumentCaptor<View.OnLongClickListener> longClickCaptor = ArgumentCaptor.forClass(
View.OnLongClickListener.class);
ArgumentCaptor<View.OnClickListener> clickCaptor = ArgumentCaptor.forClass(
View.OnClickListener.class);
verify(mLockIcon).setOnLongClickListener(longClickCaptor.capture());
verify(mLockIcon).setOnClickListener(clickCaptor.capture());
when(mAccessibilityController.isAccessibilityEnabled()).thenReturn(true);
clickCaptor.getValue().onClick(mLockIcon);
verify(mShadeController).showBouncer(eq(false));
longClickCaptor.getValue().onLongClick(mLockIcon);
verify(mLockPatternUtils).requireCredentialEntry(anyInt());
}
}