Merge "Allow temporary locked OHM function disabled when keyguard visible" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7444a36439
@@ -52,18 +52,27 @@ public interface OneHanded {
|
||||
void stopOneHanded(int uiEvent);
|
||||
|
||||
/**
|
||||
* Set navigation 3 button mode enabled or disabled by users.
|
||||
* Sets navigation 3 button mode enabled or disabled by users.
|
||||
*/
|
||||
void setThreeButtonModeEnabled(boolean enabled);
|
||||
|
||||
/**
|
||||
* Register callback to be notified after {@link OneHandedDisplayAreaOrganizer}
|
||||
* Sets one handed feature temporary locked in enabled or disabled state, this won't change
|
||||
* settings configuration.
|
||||
*
|
||||
* @param locked locked function in disabled(can not trigger) or enabled state.
|
||||
* @param enabled function in disabled(can not trigger) or enabled state.
|
||||
*/
|
||||
void setLockedDisabled(boolean locked, boolean enabled);
|
||||
|
||||
/**
|
||||
* Registers callback to be notified after {@link OneHandedDisplayAreaOrganizer}
|
||||
* transition start or finish
|
||||
*/
|
||||
void registerTransitionCallback(OneHandedTransitionCallback callback);
|
||||
|
||||
/**
|
||||
* Register callback for one handed gesture, this gesture callbcak will be activated on
|
||||
* Registers callback for one handed gesture, this gesture callback will be activated on
|
||||
* 3 button navigation mode only
|
||||
*/
|
||||
void registerGestureCallback(OneHandedGestureEventCallback callback);
|
||||
|
||||
@@ -67,6 +67,7 @@ public class OneHandedController {
|
||||
private volatile boolean mIsOneHandedEnabled;
|
||||
private volatile boolean mIsSwipeToNotificationEnabled;
|
||||
private boolean mTaskChangeToExit;
|
||||
private boolean mLockedDisabled;
|
||||
private float mOffSetFraction;
|
||||
|
||||
private final Context mContext;
|
||||
@@ -263,6 +264,10 @@ public class OneHandedController {
|
||||
|
||||
@VisibleForTesting
|
||||
void startOneHanded() {
|
||||
if (isLockedDisabled()) {
|
||||
Slog.d(TAG, "Temporary lock disabled");
|
||||
return;
|
||||
}
|
||||
if (!mDisplayAreaOrganizer.isInOneHanded()) {
|
||||
final int yOffSet = Math.round(getDisplaySize().y * mOffSetFraction);
|
||||
mDisplayAreaOrganizer.scheduleOffset(0, yOffSet);
|
||||
@@ -433,6 +438,11 @@ public class OneHandedController {
|
||||
return displaySize;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isLockedDisabled() {
|
||||
return mLockedDisabled;
|
||||
}
|
||||
|
||||
private void updateOneHandedEnabled() {
|
||||
if (mDisplayAreaOrganizer.isInOneHanded()) {
|
||||
stopOneHanded();
|
||||
@@ -485,6 +495,14 @@ public class OneHandedController {
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setLockedDisabled(boolean locked, boolean enabled) {
|
||||
if (enabled == mIsOneHandedEnabled) {
|
||||
return;
|
||||
}
|
||||
mLockedDisabled = locked && !enabled;
|
||||
}
|
||||
|
||||
private void onConfigChanged(Configuration newConfig) {
|
||||
if (mTutorialHandler != null) {
|
||||
if (!mIsOneHandedEnabled
|
||||
@@ -500,6 +518,8 @@ public class OneHandedController {
|
||||
pw.println(TAG + "states: ");
|
||||
pw.print(innerPrefix + "mOffSetFraction=");
|
||||
pw.println(mOffSetFraction);
|
||||
pw.print(innerPrefix + "mLockedDisabled=");
|
||||
pw.println(mLockedDisabled);
|
||||
|
||||
if (mDisplayAreaOrganizer != null) {
|
||||
mDisplayAreaOrganizer.dump(pw);
|
||||
@@ -575,6 +595,13 @@ public class OneHandedController {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockedDisabled(boolean locked, boolean enabled) {
|
||||
mMainExecutor.execute(() -> {
|
||||
OneHandedController.this.setLockedDisabled(locked, enabled);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerTransitionCallback(OneHandedTransitionCallback callback) {
|
||||
mMainExecutor.execute(() -> {
|
||||
|
||||
@@ -84,6 +84,8 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
||||
final boolean mDefaultSwipeToNotificationEnabled =
|
||||
OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled(
|
||||
getTestContext().getContentResolver());
|
||||
final boolean mDefaultTapAppToExitEnabled = OneHandedSettingsUtil.getSettingsTapsAppToExit(
|
||||
getTestContext().getContentResolver());
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -176,7 +178,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStopOneHanded_shouldRemoveTimer() {
|
||||
public void testStopOneHandedShouldRemoveTimer() {
|
||||
when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(true);
|
||||
mSpiedOneHandedController.stopOneHanded();
|
||||
|
||||
@@ -193,27 +195,29 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSwipeToNotificationEnabled() {
|
||||
final boolean swipeToNotificationEnabled = true;
|
||||
mSpiedOneHandedController.setSwipeToNotificationEnabled(swipeToNotificationEnabled);
|
||||
public void testUpdateSwipeToNotification() {
|
||||
mSpiedOneHandedController.setSwipeToNotificationEnabled(mDefaultSwipeToNotificationEnabled);
|
||||
|
||||
verify(mMockTouchHandler, atLeastOnce()).onOneHandedEnabled(mDefaultEnabled);
|
||||
verify(mMockGestureHandler, atLeastOnce()).onOneHandedEnabled(
|
||||
mDefaultEnabled || swipeToNotificationEnabled);
|
||||
mDefaultEnabled || mDefaultSwipeToNotificationEnabled);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateTapAppToExitUpdate() {
|
||||
public void testSettingsObserverUpdateTapAppToExit() {
|
||||
mSpiedOneHandedController.onTaskChangeExitSettingChanged();
|
||||
|
||||
verify(mMockTaskStackListener, atLeastOnce()).addListener(any());
|
||||
if (mDefaultTapAppToExitEnabled) {
|
||||
verify(mMockTaskStackListener, atLeastOnce()).addListener(any());
|
||||
} else {
|
||||
verify(mMockTaskStackListener, atLeastOnce()).removeListener(any());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tesSettingsObserverUpdateEnabled() {
|
||||
public void testSettingsObserverUpdateEnabled() {
|
||||
mSpiedOneHandedController.onEnabledSettingChanged();
|
||||
|
||||
verify(mSpiedOneHandedController, atLeastOnce()).setOneHandedEnabled(mDefaultEnabled);
|
||||
verify(mSpiedOneHandedController).setOneHandedEnabled(mDefaultEnabled);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -224,10 +228,63 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tesSettingsObserverUpdateSwipeToNotification() {
|
||||
public void testSettingsObserverUpdateSwipeToNotification() {
|
||||
mSpiedOneHandedController.onSwipeToNotificationEnabledSettingChanged();
|
||||
|
||||
verify(mSpiedOneHandedController, atLeastOnce()).setSwipeToNotificationEnabled(
|
||||
!mDefaultEnabled);
|
||||
// Swipe to notification function is opposite with one handed mode function
|
||||
if (mDefaultSwipeToNotificationEnabled) {
|
||||
verify(mSpiedOneHandedController).setSwipeToNotificationEnabled(
|
||||
mDefaultSwipeToNotificationEnabled);
|
||||
} else {
|
||||
verify(mSpiedOneHandedController, never()).setSwipeToNotificationEnabled(
|
||||
mDefaultSwipeToNotificationEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLockedOneHandedDisabled() {
|
||||
// Default mLockDisabled is false
|
||||
assertThat(mSpiedOneHandedController.isLockedDisabled()).isFalse();
|
||||
|
||||
mSpiedOneHandedController.setOneHandedEnabled(true);
|
||||
mSpiedOneHandedController.setLockedDisabled(false /* locked */, true /* enabled */);
|
||||
|
||||
// If mOneHandedEnabled == enabled, then keep unlocked
|
||||
assertThat(mSpiedOneHandedController.isLockedDisabled()).isFalse();
|
||||
|
||||
// If prefer locked enabled state and 'mOneHandedEnabled == enabled', then unlocked
|
||||
mSpiedOneHandedController.setLockedDisabled(true /* locked */, true /* enabled */);
|
||||
|
||||
assertThat(mSpiedOneHandedController.isLockedDisabled()).isFalse();
|
||||
|
||||
// If prefer locked disabled state and 'mOneHandedEnabled != enabled', then locked disabled
|
||||
mSpiedOneHandedController.setLockedDisabled(true /* locked */, false /* enabled */);
|
||||
|
||||
assertThat(mSpiedOneHandedController.isLockedDisabled()).isTrue();
|
||||
|
||||
// If prefer unlock disabled state and 'mOneHandedEnabled != enabled', then unlocked
|
||||
mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */);
|
||||
|
||||
assertThat(mSpiedOneHandedController.isLockedDisabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKeyguardShowingLockOneHandedDisabled() {
|
||||
when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false);
|
||||
mSpiedOneHandedController.setOneHandedEnabled(true);
|
||||
mSpiedOneHandedController.setLockedDisabled(true /* locked */, false /* enabled */);
|
||||
mSpiedOneHandedController.startOneHanded();
|
||||
|
||||
verify(mMockDisplayAreaOrganizer, never()).scheduleOffset(anyInt(), anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testResetKeyguardShowingLockOneHandedDisabled() {
|
||||
when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false);
|
||||
mSpiedOneHandedController.setOneHandedEnabled(true);
|
||||
mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */);
|
||||
mSpiedOneHandedController.startOneHanded();
|
||||
|
||||
verify(mMockDisplayAreaOrganizer).scheduleOffset(anyInt(), anyInt());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -287,6 +287,13 @@ public final class WMShell extends SystemUI
|
||||
|
||||
@Override
|
||||
public void onKeyguardVisibilityChanged(boolean showing) {
|
||||
if (showing) {
|
||||
// When keyguard shown, temperory lock OHM disabled to avoid mis-trigger.
|
||||
oneHanded.setLockedDisabled(true /* locked */, false /* enabled */);
|
||||
} else {
|
||||
// Reset locked.
|
||||
oneHanded.setLockedDisabled(false /* locked */, false /* enabled */);
|
||||
}
|
||||
oneHanded.stopOneHanded();
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user