Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbd67812 authored by Bill Lin's avatar Bill Lin Committed by Automerger Merge Worker
Browse files

Merge "2/ Do not access SettingProvider in test code" into sc-dev am: 82c923af

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13916850

Change-Id: If6d355e395e5bca85cfe2fb912d6244ed0ab9219
parents 380d831b 82c923af
Loading
Loading
Loading
Loading
+31 −22
Original line number Diff line number Diff line
@@ -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;

@@ -327,25 +335,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()));
    }

@@ -360,7 +368,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
@@ -370,13 +378,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) {
@@ -405,7 +413,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
@@ -417,13 +425,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()));
    }

@@ -482,7 +490,8 @@ public class OneHandedController {
    }

    private void setupGesturalOverlay() {
        if (!OneHandedSettingsUtil.getSettingsOneHandedModeEnabled(mContext.getContentResolver())) {
        if (!mOneHandedSettingsUtil.getSettingsOneHandedModeEnabled(
                mContext.getContentResolver())) {
            return;
        }

@@ -553,7 +562,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;
+9 −9
Original line number Diff line number Diff line
@@ -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() {
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -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,
+14 −33
Original line number Diff line number Diff line
@@ -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);

        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());
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -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,