From 24782cf8c3741f1397e4eb080778ebd1894fc99c Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Thu, 17 Mar 2022 20:29:18 +0800 Subject: [PATCH] Add checking if device should not support One-handed mode shortcut widget Check One-handed mode system property to enable/disable One-handed mode shortcut widget. Bug: 223754076 Test: manually add One-handed mode settings widget to check Test: make RunSettingsRoboTests ROBOTEST_FILTER= "com.android.settings.shortcut.CreateShortcutPreferenceControllerTest" Change-Id: I5b8f8e56d49be666967d2af66258b20ee5778205 --- .../CreateShortcutPreferenceController.java | 8 +++++ ...reateShortcutPreferenceControllerTest.java | 35 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java index c0f7e1ffc37..c871e9fc219 100644 --- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java +++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java @@ -44,8 +44,10 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceGroup; import com.android.settings.R; +import com.android.settings.Settings; import com.android.settings.Settings.TetherSettingsActivity; import com.android.settings.core.BasePreferenceController; +import com.android.settings.gestures.OneHandedSettingsUtils; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; @@ -178,6 +180,12 @@ public class CreateShortcutPreferenceController extends BasePreferenceController return null; } for (ResolveInfo info : activities) { + if (info.activityInfo.name.contains( + Settings.OneHandedSettingsActivity.class.getSimpleName())) { + if (!OneHandedSettingsUtils.isSupportOneHandedMode()) { + continue; + } + } if (info.activityInfo.name.endsWith(TetherSettingsActivity.class.getSimpleName())) { if (!mConnectivityManager.isTetheringSupported()) { continue; diff --git a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java index cfc9f908c3e..49c1551c5d3 100644 --- a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java @@ -36,6 +36,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; +import android.os.SystemProperties; import com.android.settings.Settings; import com.android.settings.testutils.shadow.ShadowConnectivityManager; @@ -62,6 +63,8 @@ import java.util.List; @Config(shadows = ShadowConnectivityManager.class) public class CreateShortcutPreferenceControllerTest { + static final String SUPPORT_ONE_HANDED_MODE = "ro.support_one_handed_mode"; + @Mock private ShortcutManager mShortcutManager; @Mock @@ -152,4 +155,36 @@ public class CreateShortcutPreferenceControllerTest { assertThat(info.get(0).activityInfo).isEqualTo(ri2.activityInfo); assertThat(info.get(1).activityInfo).isEqualTo(ri1.activityInfo); } + + @Test + public void queryShortcuts_setSupportOneHandedMode_ShouldEnableShortcuts() { + SystemProperties.set(SUPPORT_ONE_HANDED_MODE, "true"); + + setupOneHandedModeActivityInfo(); + final List info = mController.queryShortcuts(); + + assertThat(info).hasSize(1); + } + + @Test + public void queryShortcuts_setUnsupportOneHandedMode_ShouldDisableShortcuts() { + SystemProperties.set(SUPPORT_ONE_HANDED_MODE, "false"); + + setupOneHandedModeActivityInfo(); + final List info = mController.queryShortcuts(); + + assertThat(info).hasSize(0); + } + + private void setupOneHandedModeActivityInfo() { + final ResolveInfo ri = new ResolveInfo(); + ri.activityInfo = new ActivityInfo(); + ri.activityInfo.name = Settings.OneHandedSettingsActivity.class.getSimpleName(); + ri.activityInfo.applicationInfo = new ApplicationInfo(); + ri.activityInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM; + + mPackageManager.setResolveInfosForIntent( + new Intent(CreateShortcutPreferenceController.SHORTCUT_PROBE), + Arrays.asList(ri)); + } }