2/ Do not access SettingProvider in test code
- Refactor OneHandedSettingsUtil.java - Remove redundant test for SettingProvider New policy: b/175024829 Settings key: <one_handed_*> is not readable. From S+, new public settings keys need to be annotated with @Readable unless they are annotated with @hide. Recent changes : ag/13764747 Remove @Readable for hidden fields added in S Test: atest WMShellUnitTests Bug: 183064974 Change-Id: I85bf3680cbcdba4c85aa96de058bc85cfabead46
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
@Test
|
||||
public void testRegisterSecureKeyObserver() {
|
||||
final Uri result = OneHandedSettingsUtil.registerSettingsKeyObserver(
|
||||
Settings.Secure.TAPS_APP_TO_EXIT, mContentResolver, mContentObserver);
|
||||
|
||||
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);
|
||||
mSettingsUtil.unregisterSettingsKeyObserver(mMockContentResolver, mMockContentObserver);
|
||||
|
||||
assertThat(mOnChanged).isFalse();
|
||||
|
||||
Settings.Secure.putInt(mContext.getContentResolver(),
|
||||
Settings.Secure.TAPS_APP_TO_EXIT, 0);
|
||||
|
||||
assertThat(mOnChanged).isFalse();
|
||||
verify(mMockContentResolver).unregisterContentObserver(any());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user