Merge "Check shortcut enabled before auto trun on OHM" into sc-dev
This commit is contained in:
@@ -500,6 +500,11 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void onActivatedActionChanged() {
|
void onActivatedActionChanged() {
|
||||||
|
if (!isShortcutEnabled()) {
|
||||||
|
Slog.w(TAG, "Shortcut not enabled, skip onActivatedActionChanged()");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!isOneHandedEnabled()) {
|
if (!isOneHandedEnabled()) {
|
||||||
final boolean success = mOneHandedSettingsUtil.setOneHandedModeEnabled(
|
final boolean success = mOneHandedSettingsUtil.setOneHandedModeEnabled(
|
||||||
mContext.getContentResolver(), 1 /* Enabled for shortcut */, mUserId);
|
mContext.getContentResolver(), 1 /* Enabled for shortcut */, mUserId);
|
||||||
@@ -613,6 +618,11 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
|||||||
return mIsOneHandedEnabled;
|
return mIsOneHandedEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
boolean isShortcutEnabled() {
|
||||||
|
return mOneHandedSettingsUtil.getShortcutEnabled(mContext.getContentResolver(), mUserId);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean isSwipeToNotificationEnabled() {
|
boolean isSwipeToNotificationEnabled() {
|
||||||
return mIsSwipeToNotificationEnabled;
|
return mIsSwipeToNotificationEnabled;
|
||||||
@@ -623,8 +633,11 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
|||||||
mMainExecutor.execute(() -> stopOneHanded());
|
mMainExecutor.execute(() -> stopOneHanded());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset and align shortcut one_handed_mode_activated status with current mState
|
// If setting is pull screen, notify shortcut one_handed_mode_activated to reset
|
||||||
notifyShortcutState(mState.getState());
|
// and align status with current mState when function enabled.
|
||||||
|
if (isOneHandedEnabled() && !isSwipeToNotificationEnabled()) {
|
||||||
|
notifyShortcutState(mState.getState());
|
||||||
|
}
|
||||||
|
|
||||||
mTouchHandler.onOneHandedEnabled(mIsOneHandedEnabled);
|
mTouchHandler.onOneHandedEnabled(mIsOneHandedEnabled);
|
||||||
|
|
||||||
@@ -723,6 +736,8 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
|||||||
pw.println(mLockedDisabled);
|
pw.println(mLockedDisabled);
|
||||||
pw.print(innerPrefix + "mUserId=");
|
pw.print(innerPrefix + "mUserId=");
|
||||||
pw.println(mUserId);
|
pw.println(mUserId);
|
||||||
|
pw.print(innerPrefix + "isShortcutEnabled=");
|
||||||
|
pw.println(isShortcutEnabled());
|
||||||
|
|
||||||
if (mBackgroundPanelOrganizer != null) {
|
if (mBackgroundPanelOrganizer != null) {
|
||||||
mBackgroundPanelOrganizer.dump(pw);
|
mBackgroundPanelOrganizer.dump(pw);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.wm.shell.onehanded;
|
package com.android.wm.shell.onehanded;
|
||||||
|
|
||||||
|
import static com.android.internal.accessibility.AccessibilityShortcutController.ONE_HANDED_COMPONENT_NAME;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
@@ -34,6 +36,9 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
public final class OneHandedSettingsUtil {
|
public final class OneHandedSettingsUtil {
|
||||||
private static final String TAG = "OneHandedSettingsUtil";
|
private static final String TAG = "OneHandedSettingsUtil";
|
||||||
|
|
||||||
|
private static final String ONE_HANDED_MODE_TARGET_NAME =
|
||||||
|
ONE_HANDED_COMPONENT_NAME.getShortClassName();
|
||||||
|
|
||||||
@IntDef(prefix = {"ONE_HANDED_TIMEOUT_"}, value = {
|
@IntDef(prefix = {"ONE_HANDED_TIMEOUT_"}, value = {
|
||||||
ONE_HANDED_TIMEOUT_NEVER,
|
ONE_HANDED_TIMEOUT_NEVER,
|
||||||
ONE_HANDED_TIMEOUT_SHORT_IN_SECONDS,
|
ONE_HANDED_TIMEOUT_SHORT_IN_SECONDS,
|
||||||
@@ -157,6 +162,17 @@ public final class OneHandedSettingsUtil {
|
|||||||
Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0, userId);
|
Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries one-handed mode shortcut enabled in settings or not.
|
||||||
|
*
|
||||||
|
* @return true if user enabled one-handed shortcut in settings, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean getShortcutEnabled(ContentResolver resolver, int userId) {
|
||||||
|
final String targets = Settings.Secure.getStringForUser(resolver,
|
||||||
|
Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, userId);
|
||||||
|
return targets != null ? targets.contains(ONE_HANDED_MODE_TARGET_NAME) : false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets tutorial shown counts.
|
* Sets tutorial shown counts.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
mDefaultTapAppToExitEnabled);
|
mDefaultTapAppToExitEnabled);
|
||||||
when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any(), anyInt())).thenReturn(
|
when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any(), anyInt())).thenReturn(
|
||||||
mDefaultSwipeToNotificationEnabled);
|
mDefaultSwipeToNotificationEnabled);
|
||||||
|
when(mMockSettingsUitl.getShortcutEnabled(any(), anyInt())).thenReturn(false);
|
||||||
|
|
||||||
when(mMockDisplayAreaOrganizer.getLastDisplayBounds()).thenReturn(
|
when(mMockDisplayAreaOrganizer.getLastDisplayBounds()).thenReturn(
|
||||||
new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height()));
|
new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height()));
|
||||||
@@ -341,6 +342,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_ACTIVE);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_ACTIVE);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
mSpiedOneHandedController.onActivatedActionChanged();
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
verify(mSpiedOneHandedController, never()).startOneHanded();
|
verify(mSpiedOneHandedController, never()).startOneHanded();
|
||||||
@@ -352,6 +354,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(false);
|
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(false);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
mSpiedOneHandedController.onActivatedActionChanged();
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
verify(mSpiedOneHandedController, never()).startOneHanded();
|
verify(mSpiedOneHandedController, never()).startOneHanded();
|
||||||
@@ -363,6 +366,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
mSpiedOneHandedController.onActivatedActionChanged();
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
verify(mSpiedOneHandedController).startOneHanded();
|
verify(mSpiedOneHandedController).startOneHanded();
|
||||||
@@ -374,6 +378,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_ENTERING);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_ENTERING);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(true);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(true);
|
||||||
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
mSpiedOneHandedController.onActivatedActionChanged();
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
verify(mSpiedTransitionState, never()).setState(STATE_EXITING);
|
verify(mSpiedTransitionState, never()).setState(STATE_EXITING);
|
||||||
@@ -384,6 +389,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_EXITING);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_EXITING);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(true);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(true);
|
||||||
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(true);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
mSpiedOneHandedController.onActivatedActionChanged();
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
verify(mSpiedTransitionState, never()).setState(STATE_ENTERING);
|
verify(mSpiedTransitionState, never()).setState(STATE_ENTERING);
|
||||||
@@ -392,6 +398,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void testOneHandedDisabled_shortcutTrigger_thenAutoEnabled() {
|
public void testOneHandedDisabled_shortcutTrigger_thenAutoEnabled() {
|
||||||
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(false);
|
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(false);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(false);
|
when(mMockSettingsUitl.getOneHandedModeActivated(any(), anyInt())).thenReturn(false);
|
||||||
@@ -417,6 +424,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(true);
|
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(true);
|
||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
when(mSpiedOneHandedController.isSwipeToNotificationEnabled()).thenReturn(true);
|
when(mSpiedOneHandedController.isSwipeToNotificationEnabled()).thenReturn(true);
|
||||||
mSpiedOneHandedController.registerEventCallback(mMockEventCallback);
|
mSpiedOneHandedController.registerEventCallback(mMockEventCallback);
|
||||||
mSpiedOneHandedController.onActivatedActionChanged();
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
@@ -425,11 +433,11 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotifyShortcutState_whenUpdateOneHandedEnabled() {
|
public void testNotifyShortcutState_whenSetOneHandedEnabled() {
|
||||||
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(false);
|
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(true);
|
||||||
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
when(mSpiedOneHandedController.isSwipeToNotificationEnabled()).thenReturn(true);
|
when(mSpiedOneHandedController.isSwipeToNotificationEnabled()).thenReturn(false);
|
||||||
mSpiedOneHandedController.registerEventCallback(mMockEventCallback);
|
mSpiedOneHandedController.registerEventCallback(mMockEventCallback);
|
||||||
mSpiedOneHandedController.setOneHandedEnabled(true);
|
mSpiedOneHandedController.setOneHandedEnabled(true);
|
||||||
|
|
||||||
@@ -448,4 +456,31 @@ public class OneHandedControllerTest extends OneHandedTestCase {
|
|||||||
// Verify no NPE crash and mMockShellMainExecutor never be execute.
|
// Verify no NPE crash and mMockShellMainExecutor never be execute.
|
||||||
verify(mMockShellMainExecutor, never()).execute(any());
|
verify(mMockShellMainExecutor, never()).execute(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testShortcutEnable_ableToAutoEnableOneHandedMode() {
|
||||||
|
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(false);
|
||||||
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
|
when(mSpiedOneHandedController.isShortcutEnabled()).thenReturn(true);
|
||||||
|
when(mSpiedOneHandedController.isSwipeToNotificationEnabled()).thenReturn(false);
|
||||||
|
when(mMockSettingsUitl.setOneHandedModeEnabled(any(), anyInt(), anyInt())).thenReturn(
|
||||||
|
false /* To avoid test runner create Toast */);
|
||||||
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
|
verify(mSpiedOneHandedController).notifyUserConfigChanged(anyBoolean());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testShortcutDisable_shouldNotAutoEnableOneHandedMode() {
|
||||||
|
when(mSpiedOneHandedController.isOneHandedEnabled()).thenReturn(false);
|
||||||
|
when(mSpiedTransitionState.getState()).thenReturn(STATE_NONE);
|
||||||
|
when(mSpiedTransitionState.isTransitioning()).thenReturn(false);
|
||||||
|
when(mSpiedOneHandedController.isSwipeToNotificationEnabled()).thenReturn(false);
|
||||||
|
when(mMockSettingsUitl.setOneHandedModeEnabled(any(), anyInt(), anyInt())).thenReturn(true);
|
||||||
|
mSpiedOneHandedController.onActivatedActionChanged();
|
||||||
|
|
||||||
|
verify(mMockSettingsUitl, never()).setOneHandedModeEnabled(any(), anyInt(), anyInt());
|
||||||
|
verify(mSpiedOneHandedController, never()).notifyUserConfigChanged(anyBoolean());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user