diff options
5 files changed, 69 insertions, 64 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java index 44dad57ea3b8..c1a93ce753a6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java @@ -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; @@ -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 @@ -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())); } } @@ -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 @@ -184,6 +190,7 @@ public class OneHandedController { OneHandedTouchHandler touchHandler, OneHandedTutorialHandler tutorialHandler, OneHandedGestureHandler gestureHandler, + OneHandedSettingsUtil settingsUtil, OneHandedTimeoutHandler timeoutHandler, OneHandedUiEventLogger uiEventsLogger, IOverlayManager overlayManager, @@ -191,6 +198,7 @@ public class OneHandedController { ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; + mOneHandedSettingsUtil = settingsUtil; mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; @@ -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; @@ -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())); } @@ -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 @@ -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) { @@ -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 @@ -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())); } @@ -480,7 +488,8 @@ public class OneHandedController { } private void setupGesturalOverlay() { - if (!OneHandedSettingsUtil.getSettingsOneHandedModeEnabled(mContext.getContentResolver())) { + if (!mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled( + mContext.getContentResolver())) { return; } @@ -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; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSettingsUtil.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSettingsUtil.java index f8217c64e53d..4768cf58152b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSettingsUtil.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedSettingsUtil.java @@ -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); @@ -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); @@ -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; } @@ -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; } @@ -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); } @@ -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="); @@ -139,6 +139,6 @@ public final class OneHandedSettingsUtil { pw.print(innerPrefix + "tapsAppToExit="); pw.println(getSettingsTapsAppToExit(resolver)); } - - private OneHandedSettingsUtil() {} + public OneHandedSettingsUtil() { + } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java index 39a6e5fe7b75..bd5fe2bcbdad 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java @@ -66,6 +66,8 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Mock OneHandedGestureHandler mMockGestureHandler; @Mock + OneHandedSettingsUtil mMockSettingsUitl; + @Mock OneHandedUiEventLogger mMockUiEventLogger; @Mock IOverlayManager mMockOverlayManager; @@ -78,6 +80,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Mock Handler mMockShellMainHandler; + final boolean mDefaultEnabled = true; final boolean mDefaultSwipeToNotificationEnabled = false; final boolean mDefaultTapAppToExitEnabled = true; @@ -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, @@ -101,6 +112,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mMockTouchHandler, mMockTutorialHandler, mMockGestureHandler, + mMockSettingsUitl, mSpiedTimeoutHandler, mMockUiEventLogger, mMockOverlayManager, diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedSettingsUtilTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedSettingsUtilTest.java index 48e7179da927..1e6c41af4397 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedSettingsUtilTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedSettingsUtilTest.java @@ -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; @@ -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); + MockitoAnnotations.initMocks(this); - assertThat(result).isNotNull(); - - 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()); } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java index 69c537c2efbe..f586dda145d7 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java @@ -64,6 +64,8 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { Handler mMockShellMainHandler; @Mock OneHandedUiEventLogger mMockUiEventLogger; + @Mock + OneHandedSettingsUtil mMockSettingsUtil; @Before public void setUp() { @@ -80,6 +82,7 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { mMockTouchHandler, mMockTutorialHandler, mMockGestureHandler, + mMockSettingsUtil, mTimeoutHandler, mMockUiEventLogger, mMockOverlayManager, |