Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +31 −22 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ public class OneHandedController { private final Context mContext; private final DisplayController mDisplayController; private final OneHandedGestureHandler mGestureHandler; private final OneHandedSettingsUtil mOneHandedSettingsUtil; private final OneHandedTimeoutHandler mTimeoutHandler; private final OneHandedTouchHandler mTouchHandler; private final OneHandedTutorialHandler mTutorialHandler; Loading Loading @@ -108,8 +109,12 @@ public class OneHandedController { new AccessibilityManager.AccessibilityStateChangeListener() { @Override public void onAccessibilityStateChanged(boolean enabled) { if (mOneHandedSettingsUtil == null) { Slog.w(TAG, "mOneHandedSettingsUtil may not instantiate yet"); return; } if (enabled) { final int mOneHandedTimeout = OneHandedSettingsUtil final int mOneHandedTimeout = mOneHandedSettingsUtil .getSettingsOneHandedModeTimeout(mContext.getContentResolver()); final int timeout = mAccessibilityManager .getRecommendedTimeoutMillis(mOneHandedTimeout * 1000 Loading @@ -117,7 +122,7 @@ public class OneHandedController { AccessibilityManager.FLAG_CONTENT_CONTROLS); mTimeoutHandler.setTimeout(timeout / 1000); } else { mTimeoutHandler.setTimeout(OneHandedSettingsUtil mTimeoutHandler.setTimeout(mOneHandedSettingsUtil .getSettingsOneHandedModeTimeout(mContext.getContentResolver())); } } Loading Loading @@ -166,13 +171,14 @@ public class OneHandedController { OneHandedDisplayAreaOrganizer organizer = new OneHandedDisplayAreaOrganizer( context, windowManager, animationController, tutorialHandler, oneHandedBackgroundPanelOrganizer, mainExecutor); OneHandedSettingsUtil settingsUtil = new OneHandedSettingsUtil(); OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger); IOverlayManager overlayManager = IOverlayManager.Stub.asInterface( ServiceManager.getService(Context.OVERLAY_SERVICE)); return new OneHandedController(context, windowManager, displayController, oneHandedBackgroundPanelOrganizer, organizer, touchHandler, tutorialHandler, gestureHandler, timeoutHandler, oneHandedUiEventsLogger, overlayManager, taskStackListener, mainExecutor, mainHandler); gestureHandler, settingsUtil, timeoutHandler, oneHandedUiEventsLogger, overlayManager, taskStackListener, mainExecutor, mainHandler); } @VisibleForTesting Loading @@ -184,6 +190,7 @@ public class OneHandedController { OneHandedTouchHandler touchHandler, OneHandedTutorialHandler tutorialHandler, OneHandedGestureHandler gestureHandler, OneHandedSettingsUtil settingsUtil, OneHandedTimeoutHandler timeoutHandler, OneHandedUiEventLogger uiEventsLogger, IOverlayManager overlayManager, Loading @@ -191,6 +198,7 @@ public class OneHandedController { ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; mOneHandedSettingsUtil = settingsUtil; mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; Loading @@ -209,10 +217,10 @@ public class OneHandedController { final int sysPropPercentageConfig = SystemProperties.getInt( ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); mOffSetFraction = sysPropPercentageConfig / 100.0f; mIsOneHandedEnabled = OneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mIsOneHandedEnabled = mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( context.getContentResolver()); mIsSwipeToNotificationEnabled = OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mOneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( context.getContentResolver()); mTimeoutHandler = timeoutHandler; Loading Loading @@ -325,25 +333,25 @@ public class OneHandedController { } private void setupSettingObservers() { OneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_ENABLED, mOneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_ENABLED, mContext.getContentResolver(), mEnabledObserver); OneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_TIMEOUT, mOneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_TIMEOUT, mContext.getContentResolver(), mTimeoutObserver); OneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.TAPS_APP_TO_EXIT, mOneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.TAPS_APP_TO_EXIT, mContext.getContentResolver(), mTaskChangeExitObserver); OneHandedSettingsUtil.registerSettingsKeyObserver( mOneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, mContext.getContentResolver(), mSwipeToNotificationEnabledObserver); } private void updateSettings() { setOneHandedEnabled(OneHandedSettingsUtil setOneHandedEnabled(mOneHandedSettingsUtil .getSettingsOneHandedModeEnabled(mContext.getContentResolver())); mTimeoutHandler.setTimeout(OneHandedSettingsUtil mTimeoutHandler.setTimeout(mOneHandedSettingsUtil .getSettingsOneHandedModeTimeout(mContext.getContentResolver())); setTaskChangeToExit(OneHandedSettingsUtil setTaskChangeToExit(mOneHandedSettingsUtil .getSettingsTapsAppToExit(mContext.getContentResolver())); setSwipeToNotificationEnabled(OneHandedSettingsUtil setSwipeToNotificationEnabled(mOneHandedSettingsUtil .getSettingsSwipeToNotificationEnabled(mContext.getContentResolver())); } Loading @@ -358,7 +366,7 @@ public class OneHandedController { @VisibleForTesting void onEnabledSettingChanged() { final boolean enabled = OneHandedSettingsUtil.getSettingsOneHandedModeEnabled( final boolean enabled = mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mContext.getContentResolver()); mOneHandedUiEventLogger.writeEvent(enabled ? OneHandedUiEventLogger.EVENT_ONE_HANDED_SETTINGS_ENABLED_ON Loading @@ -368,13 +376,13 @@ public class OneHandedController { // Also checks swipe to notification settings since they all need gesture overlay. setEnabledGesturalOverlay( enabled || OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( enabled || mOneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mContext.getContentResolver())); } @VisibleForTesting void onTimeoutSettingChanged() { final int newTimeout = OneHandedSettingsUtil.getSettingsOneHandedModeTimeout( final int newTimeout = mOneHandedSettingsUtil.getSettingsOneHandedModeTimeout( mContext.getContentResolver()); int metricsId = OneHandedUiEventLogger.OneHandedSettingsTogglesEvent.INVALID.getId(); switch (newTimeout) { Loading Loading @@ -403,7 +411,7 @@ public class OneHandedController { @VisibleForTesting void onTaskChangeExitSettingChanged() { final boolean enabled = OneHandedSettingsUtil.getSettingsTapsAppToExit( final boolean enabled = mOneHandedSettingsUtil.getSettingsTapsAppToExit( mContext.getContentResolver()); mOneHandedUiEventLogger.writeEvent(enabled ? OneHandedUiEventLogger.EVENT_ONE_HANDED_SETTINGS_APP_TAPS_EXIT_ON Loading @@ -415,13 +423,13 @@ public class OneHandedController { @VisibleForTesting void onSwipeToNotificationEnabledSettingChanged() { final boolean enabled = OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mOneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mContext.getContentResolver()); setSwipeToNotificationEnabled(enabled); // Also checks one handed mode settings since they all need gesture overlay. setEnabledGesturalOverlay( enabled || OneHandedSettingsUtil.getSettingsOneHandedModeEnabled( enabled || mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mContext.getContentResolver())); } Loading Loading @@ -480,7 +488,8 @@ public class OneHandedController { } private void setupGesturalOverlay() { if (!OneHandedSettingsUtil.getSettingsOneHandedModeEnabled(mContext.getContentResolver())) { if (!mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mContext.getContentResolver())) { return; } Loading Loading @@ -551,7 +560,7 @@ public class OneHandedController { mTutorialHandler.dump(pw); } OneHandedSettingsUtil.dump(pw, innerPrefix, mContext.getContentResolver()); mOneHandedSettingsUtil.dump(pw, innerPrefix, mContext.getContentResolver()); if (mOverlayManager != null) { OverlayInfo info = null; Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSettingsUtil.java +9 −9 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ public final class OneHandedSettingsUtil { * @param observer Observer from caller * @return uri key for observing */ public static Uri registerSettingsKeyObserver(String key, ContentResolver resolver, public Uri registerSettingsKeyObserver(String key, ContentResolver resolver, ContentObserver observer) { Uri uriKey = null; uriKey = Settings.Secure.getUriFor(key); Loading @@ -83,7 +83,7 @@ public final class OneHandedSettingsUtil { * @param resolver ContentResolver of context * @param observer preference key change observer */ public static void unregisterSettingsKeyObserver(ContentResolver resolver, public void unregisterSettingsKeyObserver(ContentResolver resolver, ContentObserver observer) { if (resolver != null) { resolver.unregisterContentObserver(observer); Loading @@ -95,7 +95,7 @@ public final class OneHandedSettingsUtil { * * @return enable or disable one handed mode flag. */ public static boolean getSettingsOneHandedModeEnabled(ContentResolver resolver) { public boolean getSettingsOneHandedModeEnabled(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.ONE_HANDED_MODE_ENABLED, 0 /* Disabled */) == 1; } Loading @@ -105,7 +105,7 @@ public final class OneHandedSettingsUtil { * * @return enable or disable taps app exit. */ public static boolean getSettingsTapsAppToExit(ContentResolver resolver) { public boolean getSettingsTapsAppToExit(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.TAPS_APP_TO_EXIT, 0) == 1; } Loading @@ -116,7 +116,7 @@ public final class OneHandedSettingsUtil { * * @return timeout value in seconds. */ public static @OneHandedTimeout int getSettingsOneHandedModeTimeout(ContentResolver resolver) { public @OneHandedTimeout int getSettingsOneHandedModeTimeout(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.ONE_HANDED_MODE_TIMEOUT, ONE_HANDED_TIMEOUT_MEDIUM_IN_SECONDS); } Loading @@ -124,12 +124,12 @@ public final class OneHandedSettingsUtil { /** * Returns whether swipe bottom to notification gesture enabled or not. */ public static boolean getSettingsSwipeToNotificationEnabled(ContentResolver resolver) { public boolean getSettingsSwipeToNotificationEnabled(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 1) == 1; } protected static void dump(PrintWriter pw, String prefix, ContentResolver resolver) { void dump(PrintWriter pw, String prefix, ContentResolver resolver) { final String innerPrefix = prefix + " "; pw.println(prefix + TAG); pw.print(innerPrefix + "isOneHandedModeEnable="); Loading @@ -139,6 +139,6 @@ public final class OneHandedSettingsUtil { pw.print(innerPrefix + "tapsAppToExit="); pw.println(getSettingsTapsAppToExit(resolver)); } private OneHandedSettingsUtil() {} public OneHandedSettingsUtil() { } } libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java +12 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Mock OneHandedGestureHandler mMockGestureHandler; @Mock OneHandedSettingsUtil mMockSettingsUitl; @Mock OneHandedUiEventLogger mMockUiEventLogger; @Mock IOverlayManager mMockOverlayManager; Loading @@ -78,6 +80,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Mock Handler mMockShellMainHandler; final boolean mDefaultEnabled = true; final boolean mDefaultSwipeToNotificationEnabled = false; final boolean mDefaultTapAppToExitEnabled = true; Loading @@ -91,6 +94,14 @@ public class OneHandedControllerTest extends OneHandedTestCase { when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false); when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>()); when(mMockBackgroundOrganizer.getBackgroundSurface()).thenReturn(mMockLeash); when(mMockSettingsUitl.getSettingsOneHandedModeEnabled(any())).thenReturn( mDefaultEnabled); when(mMockSettingsUitl.getSettingsOneHandedModeTimeout(any())).thenReturn( OneHandedSettingsUtil.ONE_HANDED_TIMEOUT_MEDIUM_IN_SECONDS); when(mMockSettingsUitl.getSettingsTapsAppToExit(any())).thenReturn( mDefaultTapAppToExitEnabled); when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any())).thenReturn( mDefaultSwipeToNotificationEnabled); mSpiedOneHandedController = spy(new OneHandedController( mContext, Loading @@ -101,6 +112,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mMockTouchHandler, mMockTutorialHandler, mMockGestureHandler, mMockSettingsUitl, mSpiedTimeoutHandler, mMockUiEventLogger, mMockOverlayManager, Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedSettingsUtilTest.java +14 −33 Original line number Diff line number Diff line Loading @@ -16,12 +16,11 @@ package com.android.wm.shell.onehanded; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import android.content.ContentResolver; import android.database.ContentObserver; import android.net.Uri; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; Loading @@ -29,48 +28,30 @@ import androidx.test.filters.SmallTest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidTestingRunner.class) public class OneHandedSettingsUtilTest extends OneHandedTestCase { ContentResolver mContentResolver; ContentObserver mContentObserver; boolean mOnChanged; OneHandedSettingsUtil mSettingsUtil; @Mock ContentResolver mMockContentResolver; @Mock ContentObserver mMockContentObserver; @Before public void setUp() { mContentResolver = mContext.getContentResolver(); mContentObserver = new ContentObserver(mContext.getMainThreadHandler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); mOnChanged = true; } }; } @Test public void testRegisterSecureKeyObserver() { final Uri result = OneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver); assertThat(result).isNotNull(); MockitoAnnotations.initMocks(this); OneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver); mSettingsUtil = new OneHandedSettingsUtil(); } @Test public void testUnregisterSecureKeyObserver() { OneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver); OneHandedSettingsUtil.unregisterSettingsKeyObserver(mContentResolver, mContentObserver); assertThat(mOnChanged).isFalse(); Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.TAPS_APP_TO_EXIT, 0); mSettingsUtil.unregisterSettingsKeyObserver(mMockContentResolver, mMockContentObserver); assertThat(mOnChanged).isFalse(); verify(mMockContentResolver).unregisterContentObserver(any()); } } libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,8 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { Handler mMockShellMainHandler; @Mock OneHandedUiEventLogger mMockUiEventLogger; @Mock OneHandedSettingsUtil mMockSettingsUtil; @Before public void setUp() { Loading @@ -80,6 +82,7 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { mMockTouchHandler, mMockTutorialHandler, mMockGestureHandler, mMockSettingsUtil, mTimeoutHandler, mMockUiEventLogger, mMockOverlayManager, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +31 −22 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ public class OneHandedController { private final Context mContext; private final DisplayController mDisplayController; private final OneHandedGestureHandler mGestureHandler; private final OneHandedSettingsUtil mOneHandedSettingsUtil; private final OneHandedTimeoutHandler mTimeoutHandler; private final OneHandedTouchHandler mTouchHandler; private final OneHandedTutorialHandler mTutorialHandler; Loading Loading @@ -108,8 +109,12 @@ public class OneHandedController { new AccessibilityManager.AccessibilityStateChangeListener() { @Override public void onAccessibilityStateChanged(boolean enabled) { if (mOneHandedSettingsUtil == null) { Slog.w(TAG, "mOneHandedSettingsUtil may not instantiate yet"); return; } if (enabled) { final int mOneHandedTimeout = OneHandedSettingsUtil final int mOneHandedTimeout = mOneHandedSettingsUtil .getSettingsOneHandedModeTimeout(mContext.getContentResolver()); final int timeout = mAccessibilityManager .getRecommendedTimeoutMillis(mOneHandedTimeout * 1000 Loading @@ -117,7 +122,7 @@ public class OneHandedController { AccessibilityManager.FLAG_CONTENT_CONTROLS); mTimeoutHandler.setTimeout(timeout / 1000); } else { mTimeoutHandler.setTimeout(OneHandedSettingsUtil mTimeoutHandler.setTimeout(mOneHandedSettingsUtil .getSettingsOneHandedModeTimeout(mContext.getContentResolver())); } } Loading Loading @@ -166,13 +171,14 @@ public class OneHandedController { OneHandedDisplayAreaOrganizer organizer = new OneHandedDisplayAreaOrganizer( context, windowManager, animationController, tutorialHandler, oneHandedBackgroundPanelOrganizer, mainExecutor); OneHandedSettingsUtil settingsUtil = new OneHandedSettingsUtil(); OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger); IOverlayManager overlayManager = IOverlayManager.Stub.asInterface( ServiceManager.getService(Context.OVERLAY_SERVICE)); return new OneHandedController(context, windowManager, displayController, oneHandedBackgroundPanelOrganizer, organizer, touchHandler, tutorialHandler, gestureHandler, timeoutHandler, oneHandedUiEventsLogger, overlayManager, taskStackListener, mainExecutor, mainHandler); gestureHandler, settingsUtil, timeoutHandler, oneHandedUiEventsLogger, overlayManager, taskStackListener, mainExecutor, mainHandler); } @VisibleForTesting Loading @@ -184,6 +190,7 @@ public class OneHandedController { OneHandedTouchHandler touchHandler, OneHandedTutorialHandler tutorialHandler, OneHandedGestureHandler gestureHandler, OneHandedSettingsUtil settingsUtil, OneHandedTimeoutHandler timeoutHandler, OneHandedUiEventLogger uiEventsLogger, IOverlayManager overlayManager, Loading @@ -191,6 +198,7 @@ public class OneHandedController { ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; mOneHandedSettingsUtil = settingsUtil; mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; Loading @@ -209,10 +217,10 @@ public class OneHandedController { final int sysPropPercentageConfig = SystemProperties.getInt( ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); mOffSetFraction = sysPropPercentageConfig / 100.0f; mIsOneHandedEnabled = OneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mIsOneHandedEnabled = mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( context.getContentResolver()); mIsSwipeToNotificationEnabled = OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mOneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( context.getContentResolver()); mTimeoutHandler = timeoutHandler; Loading Loading @@ -325,25 +333,25 @@ public class OneHandedController { } private void setupSettingObservers() { OneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_ENABLED, mOneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_ENABLED, mContext.getContentResolver(), mEnabledObserver); OneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_TIMEOUT, mOneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.ONE_HANDED_MODE_TIMEOUT, mContext.getContentResolver(), mTimeoutObserver); OneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.TAPS_APP_TO_EXIT, mOneHandedSettingsUtil.registerSettingsKeyObserver(Settings.Secure.TAPS_APP_TO_EXIT, mContext.getContentResolver(), mTaskChangeExitObserver); OneHandedSettingsUtil.registerSettingsKeyObserver( mOneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, mContext.getContentResolver(), mSwipeToNotificationEnabledObserver); } private void updateSettings() { setOneHandedEnabled(OneHandedSettingsUtil setOneHandedEnabled(mOneHandedSettingsUtil .getSettingsOneHandedModeEnabled(mContext.getContentResolver())); mTimeoutHandler.setTimeout(OneHandedSettingsUtil mTimeoutHandler.setTimeout(mOneHandedSettingsUtil .getSettingsOneHandedModeTimeout(mContext.getContentResolver())); setTaskChangeToExit(OneHandedSettingsUtil setTaskChangeToExit(mOneHandedSettingsUtil .getSettingsTapsAppToExit(mContext.getContentResolver())); setSwipeToNotificationEnabled(OneHandedSettingsUtil setSwipeToNotificationEnabled(mOneHandedSettingsUtil .getSettingsSwipeToNotificationEnabled(mContext.getContentResolver())); } Loading @@ -358,7 +366,7 @@ public class OneHandedController { @VisibleForTesting void onEnabledSettingChanged() { final boolean enabled = OneHandedSettingsUtil.getSettingsOneHandedModeEnabled( final boolean enabled = mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mContext.getContentResolver()); mOneHandedUiEventLogger.writeEvent(enabled ? OneHandedUiEventLogger.EVENT_ONE_HANDED_SETTINGS_ENABLED_ON Loading @@ -368,13 +376,13 @@ public class OneHandedController { // Also checks swipe to notification settings since they all need gesture overlay. setEnabledGesturalOverlay( enabled || OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( enabled || mOneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mContext.getContentResolver())); } @VisibleForTesting void onTimeoutSettingChanged() { final int newTimeout = OneHandedSettingsUtil.getSettingsOneHandedModeTimeout( final int newTimeout = mOneHandedSettingsUtil.getSettingsOneHandedModeTimeout( mContext.getContentResolver()); int metricsId = OneHandedUiEventLogger.OneHandedSettingsTogglesEvent.INVALID.getId(); switch (newTimeout) { Loading Loading @@ -403,7 +411,7 @@ public class OneHandedController { @VisibleForTesting void onTaskChangeExitSettingChanged() { final boolean enabled = OneHandedSettingsUtil.getSettingsTapsAppToExit( final boolean enabled = mOneHandedSettingsUtil.getSettingsTapsAppToExit( mContext.getContentResolver()); mOneHandedUiEventLogger.writeEvent(enabled ? OneHandedUiEventLogger.EVENT_ONE_HANDED_SETTINGS_APP_TAPS_EXIT_ON Loading @@ -415,13 +423,13 @@ public class OneHandedController { @VisibleForTesting void onSwipeToNotificationEnabledSettingChanged() { final boolean enabled = OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mOneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled( mContext.getContentResolver()); setSwipeToNotificationEnabled(enabled); // Also checks one handed mode settings since they all need gesture overlay. setEnabledGesturalOverlay( enabled || OneHandedSettingsUtil.getSettingsOneHandedModeEnabled( enabled || mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mContext.getContentResolver())); } Loading Loading @@ -480,7 +488,8 @@ public class OneHandedController { } private void setupGesturalOverlay() { if (!OneHandedSettingsUtil.getSettingsOneHandedModeEnabled(mContext.getContentResolver())) { if (!mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( mContext.getContentResolver())) { return; } Loading Loading @@ -551,7 +560,7 @@ public class OneHandedController { mTutorialHandler.dump(pw); } OneHandedSettingsUtil.dump(pw, innerPrefix, mContext.getContentResolver()); mOneHandedSettingsUtil.dump(pw, innerPrefix, mContext.getContentResolver()); if (mOverlayManager != null) { OverlayInfo info = null; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSettingsUtil.java +9 −9 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ public final class OneHandedSettingsUtil { * @param observer Observer from caller * @return uri key for observing */ public static Uri registerSettingsKeyObserver(String key, ContentResolver resolver, public Uri registerSettingsKeyObserver(String key, ContentResolver resolver, ContentObserver observer) { Uri uriKey = null; uriKey = Settings.Secure.getUriFor(key); Loading @@ -83,7 +83,7 @@ public final class OneHandedSettingsUtil { * @param resolver ContentResolver of context * @param observer preference key change observer */ public static void unregisterSettingsKeyObserver(ContentResolver resolver, public void unregisterSettingsKeyObserver(ContentResolver resolver, ContentObserver observer) { if (resolver != null) { resolver.unregisterContentObserver(observer); Loading @@ -95,7 +95,7 @@ public final class OneHandedSettingsUtil { * * @return enable or disable one handed mode flag. */ public static boolean getSettingsOneHandedModeEnabled(ContentResolver resolver) { public boolean getSettingsOneHandedModeEnabled(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.ONE_HANDED_MODE_ENABLED, 0 /* Disabled */) == 1; } Loading @@ -105,7 +105,7 @@ public final class OneHandedSettingsUtil { * * @return enable or disable taps app exit. */ public static boolean getSettingsTapsAppToExit(ContentResolver resolver) { public boolean getSettingsTapsAppToExit(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.TAPS_APP_TO_EXIT, 0) == 1; } Loading @@ -116,7 +116,7 @@ public final class OneHandedSettingsUtil { * * @return timeout value in seconds. */ public static @OneHandedTimeout int getSettingsOneHandedModeTimeout(ContentResolver resolver) { public @OneHandedTimeout int getSettingsOneHandedModeTimeout(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.ONE_HANDED_MODE_TIMEOUT, ONE_HANDED_TIMEOUT_MEDIUM_IN_SECONDS); } Loading @@ -124,12 +124,12 @@ public final class OneHandedSettingsUtil { /** * Returns whether swipe bottom to notification gesture enabled or not. */ public static boolean getSettingsSwipeToNotificationEnabled(ContentResolver resolver) { public boolean getSettingsSwipeToNotificationEnabled(ContentResolver resolver) { return Settings.Secure.getInt(resolver, Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 1) == 1; } protected static void dump(PrintWriter pw, String prefix, ContentResolver resolver) { void dump(PrintWriter pw, String prefix, ContentResolver resolver) { final String innerPrefix = prefix + " "; pw.println(prefix + TAG); pw.print(innerPrefix + "isOneHandedModeEnable="); Loading @@ -139,6 +139,6 @@ public final class OneHandedSettingsUtil { pw.print(innerPrefix + "tapsAppToExit="); pw.println(getSettingsTapsAppToExit(resolver)); } private OneHandedSettingsUtil() {} public OneHandedSettingsUtil() { } }
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java +12 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Mock OneHandedGestureHandler mMockGestureHandler; @Mock OneHandedSettingsUtil mMockSettingsUitl; @Mock OneHandedUiEventLogger mMockUiEventLogger; @Mock IOverlayManager mMockOverlayManager; Loading @@ -78,6 +80,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Mock Handler mMockShellMainHandler; final boolean mDefaultEnabled = true; final boolean mDefaultSwipeToNotificationEnabled = false; final boolean mDefaultTapAppToExitEnabled = true; Loading @@ -91,6 +94,14 @@ public class OneHandedControllerTest extends OneHandedTestCase { when(mMockDisplayAreaOrganizer.isInOneHanded()).thenReturn(false); when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>()); when(mMockBackgroundOrganizer.getBackgroundSurface()).thenReturn(mMockLeash); when(mMockSettingsUitl.getSettingsOneHandedModeEnabled(any())).thenReturn( mDefaultEnabled); when(mMockSettingsUitl.getSettingsOneHandedModeTimeout(any())).thenReturn( OneHandedSettingsUtil.ONE_HANDED_TIMEOUT_MEDIUM_IN_SECONDS); when(mMockSettingsUitl.getSettingsTapsAppToExit(any())).thenReturn( mDefaultTapAppToExitEnabled); when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any())).thenReturn( mDefaultSwipeToNotificationEnabled); mSpiedOneHandedController = spy(new OneHandedController( mContext, Loading @@ -101,6 +112,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mMockTouchHandler, mMockTutorialHandler, mMockGestureHandler, mMockSettingsUitl, mSpiedTimeoutHandler, mMockUiEventLogger, mMockOverlayManager, Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedSettingsUtilTest.java +14 −33 Original line number Diff line number Diff line Loading @@ -16,12 +16,11 @@ package com.android.wm.shell.onehanded; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import android.content.ContentResolver; import android.database.ContentObserver; import android.net.Uri; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; Loading @@ -29,48 +28,30 @@ import androidx.test.filters.SmallTest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidTestingRunner.class) public class OneHandedSettingsUtilTest extends OneHandedTestCase { ContentResolver mContentResolver; ContentObserver mContentObserver; boolean mOnChanged; OneHandedSettingsUtil mSettingsUtil; @Mock ContentResolver mMockContentResolver; @Mock ContentObserver mMockContentObserver; @Before public void setUp() { mContentResolver = mContext.getContentResolver(); mContentObserver = new ContentObserver(mContext.getMainThreadHandler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); mOnChanged = true; } }; } @Test public void testRegisterSecureKeyObserver() { final Uri result = OneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver); assertThat(result).isNotNull(); MockitoAnnotations.initMocks(this); OneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver); mSettingsUtil = new OneHandedSettingsUtil(); } @Test public void testUnregisterSecureKeyObserver() { OneHandedSettingsUtil.registerSettingsKeyObserver( Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver); OneHandedSettingsUtil.unregisterSettingsKeyObserver(mContentResolver, mContentObserver); assertThat(mOnChanged).isFalse(); Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.TAPS_APP_TO_EXIT, 0); mSettingsUtil.unregisterSettingsKeyObserver(mMockContentResolver, mMockContentObserver); assertThat(mOnChanged).isFalse(); verify(mMockContentResolver).unregisterContentObserver(any()); } }
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,8 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { Handler mMockShellMainHandler; @Mock OneHandedUiEventLogger mMockUiEventLogger; @Mock OneHandedSettingsUtil mMockSettingsUtil; @Before public void setUp() { Loading @@ -80,6 +82,7 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { mMockTouchHandler, mMockTutorialHandler, mMockGestureHandler, mMockSettingsUtil, mTimeoutHandler, mMockUiEventLogger, mMockOverlayManager, Loading