From 0f2cc342304e8ef89f1ceadee4ab3aeb599091a8 Mon Sep 17 00:00:00 2001 From: Chun-Ku Lin Date: Fri, 10 Nov 2023 20:43:58 +0000 Subject: [PATCH] Don't show quick settings tooltip if the user is in the Setup Wizard, since the user can't access the Quick Settings Panel. Bug: 294560581 Test: manual - Turn on feature flag: adb shell device_config put accessibility com.android.settings.accessibility.remove_qs_tooltip_in_suw true - Modify the font scale in SUW, verify the QS tooltip doesn't show up - Modify the font scale after SUW, verify the QS tooltip shows up Test: atest SettingsRoboTests:com.android.settings.accessibility Change-Id: I1d1a4f8f70ea3e1d929952d5c273de1b4cd80503 --- Android.bp | 1 + aconfig/Android.bp | 13 +++++- aconfig/accessibility/OWNERS | 1 + .../accessibility/accessibility_flags.aconfig | 10 +++++ ...sibility_flag_declarations_legacy.aconfig} | 3 ++ .../PreviewSizeSeekBarController.java | 10 +++++ .../ToggleFeaturePreferenceFragment.java | 8 ++++ .../PreviewSizeSeekBarControllerTest.java | 44 ++++++++++++++++--- .../ToggleFeaturePreferenceFragmentTest.java | 16 +++++++ 9 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 aconfig/accessibility/OWNERS create mode 100644 aconfig/accessibility/accessibility_flags.aconfig rename aconfig/{settings_accessibility_flag_declarations.aconfig => settings_accessibility_flag_declarations_legacy.aconfig} (86%) diff --git a/Android.bp b/Android.bp index 0777aa77440..2699c384c0c 100644 --- a/Android.bp +++ b/Android.bp @@ -89,6 +89,7 @@ android_library { "SettingsLib", "SettingsLibActivityEmbedding", "aconfig_settings_flags_lib", + "accessibility_settings_flags_lib", "app-usage-event-protos-lite", "battery-event-protos-lite", "battery-usage-slot-protos-lite", diff --git a/aconfig/Android.bp b/aconfig/Android.bp index 37b03bafb14..de6d0af9f94 100644 --- a/aconfig/Android.bp +++ b/aconfig/Android.bp @@ -35,4 +35,15 @@ aconfig_declarations { java_aconfig_library { name: "MediaDrmSettingsFlagsLib", aconfig_declarations: "media_drm_flags", -} \ No newline at end of file +} + +aconfig_declarations { + name: "accessibility_flags", + package: "com.android.settings.accessibility", + srcs: ["accessibility/*.aconfig"], +} + +java_aconfig_library { + name: "accessibility_settings_flags_lib", + aconfig_declarations: "accessibility_flags", +} diff --git a/aconfig/accessibility/OWNERS b/aconfig/accessibility/OWNERS new file mode 100644 index 00000000000..7a76c21873b --- /dev/null +++ b/aconfig/accessibility/OWNERS @@ -0,0 +1 @@ +include /src/com/android/settings/accessibility/OWNERS diff --git a/aconfig/accessibility/accessibility_flags.aconfig b/aconfig/accessibility/accessibility_flags.aconfig new file mode 100644 index 00000000000..7f1f909812d --- /dev/null +++ b/aconfig/accessibility/accessibility_flags.aconfig @@ -0,0 +1,10 @@ +package: "com.android.settings.accessibility" + +# NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors. + +flag { + name: "remove_qs_tooltip_in_suw" + namespace: "accessibility" + description: "Don't show quick settings tooltip in SUW, since the user can't use quick settings there." + bug: "294560581" +} \ No newline at end of file diff --git a/aconfig/settings_accessibility_flag_declarations.aconfig b/aconfig/settings_accessibility_flag_declarations_legacy.aconfig similarity index 86% rename from aconfig/settings_accessibility_flag_declarations.aconfig rename to aconfig/settings_accessibility_flag_declarations_legacy.aconfig index 246f983be47..acdce961c1e 100644 --- a/aconfig/settings_accessibility_flag_declarations.aconfig +++ b/aconfig/settings_accessibility_flag_declarations_legacy.aconfig @@ -1,5 +1,8 @@ package: "com.android.settings.flags" +# NOTE: Don't add new accessibility flags here, since the package name doesn't follow +# the best practice for setting's feature flag go/settings-trunk-stable + # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors. # NOTE: All Settings flags share the same Flags class, so prefix our diff --git a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java index 6bd87475e31..f268a40cbdd 100644 --- a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java +++ b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java @@ -16,6 +16,7 @@ package com.android.settings.accessibility; +import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.os.Bundle; @@ -33,6 +34,8 @@ import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; +import com.google.android.setupcompat.util.WizardManagerHelper; + import java.util.Optional; /** @@ -207,6 +210,13 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp return; } + if (Flags.removeQsTooltipInSuw() + && mContext instanceof Activity + && WizardManagerHelper.isAnySetupWizard(((Activity) mContext).getIntent())) { + // Don't show QuickSettingsTooltip in Setup Wizard + return; + } + if (!mNeedsQSTooltipReshow && AccessibilityQuickSettingUtils.hasValueInSharedPreferences( mContext, tileComponentName)) { // Returns if quick settings tooltip only show once. diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 427cad9df8d..c76bb8bc006 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -905,6 +905,14 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment return; } + Activity activity = getActivity(); + if (com.android.settings.accessibility.Flags.removeQsTooltipInSuw() + && activity != null + && WizardManagerHelper.isAnySetupWizard(activity.getIntent())) { + // Don't show QuickSettingsTooltip in Setup Wizard + return; + } + if (!mNeedsQSTooltipReshow && AccessibilityQuickSettingUtils.hasValueInSharedPreferences( getContext(), tileComponentName)) { // Returns if quick settings tooltip only show once. diff --git a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java index 87cd5448a51..14306e02a6b 100644 --- a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java @@ -26,31 +26,39 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.Activity; import android.content.ComponentName; -import android.content.Context; +import android.content.Intent; import android.os.Bundle; +import android.platform.test.annotations.RequiresFlagsEnabled; +import android.platform.test.flag.junit.CheckFlagsRule; +import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.view.LayoutInflater; import android.widget.PopupWindow; import android.widget.SeekBar; +import androidx.fragment.app.testing.EmptyFragmentActivity; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceViewHolder; import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.rules.ActivityScenarioRule; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.testutils.shadow.ShadowFragment; -import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; import com.android.settings.widget.LabeledSeekBarPreference; +import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor; + +import com.google.android.setupcompat.util.WizardManagerHelper; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.mockito.Spy; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.annotation.LooperMode; @@ -64,10 +72,16 @@ import org.robolectric.shadows.ShadowApplication; @LooperMode(LooperMode.Mode.LEGACY) @Config(shadows = {ShadowInteractionJankMonitor.class}) public class PreviewSizeSeekBarControllerTest { + + @Rule + public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); + + @Rule + public ActivityScenarioRule rule = + new ActivityScenarioRule<>(EmptyFragmentActivity.class); private static final String FONT_SIZE_KEY = "font_size"; private static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow"; - @Spy - private final Context mContext = ApplicationProvider.getApplicationContext(); + private Activity mContext; private PreviewSizeSeekBarController mSeekBarController; private FontSizeData mFontSizeData; private LabeledSeekBarPreference mSeekBarPreference; @@ -91,7 +105,9 @@ public class PreviewSizeSeekBarControllerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); + ShadowInteractionJankMonitor.reset(); + rule.getScenario().onActivity(activity -> mContext = activity); mContext.setTheme(androidx.appcompat.R.style.Theme_AppCompat); mFragment = spy(new TestFragment()); when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager); @@ -196,6 +212,24 @@ public class PreviewSizeSeekBarControllerTest { assertThat(getLatestPopupWindow().isShowing()).isTrue(); } + @Test + @RequiresFlagsEnabled(Flags.FLAG_REMOVE_QS_TOOLTIP_IN_SUW) + public void onProgressChanged_inSuw_toolTipShouldNotShown() { + Intent intent = mContext.getIntent(); + intent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true); + mContext.setIntent(intent); + mSeekBarController.displayPreference(mPreferenceScreen); + + // Simulate changing the progress for the first time + int newProgress = (mSeekBarPreference.getProgress() != 0) ? 0 : mSeekBarPreference.getMax(); + mSeekBarPreference.setProgress(newProgress); + mSeekBarPreference.onProgressChanged(new SeekBar(mContext), + newProgress, + /* fromUser= */ false); + + assertThat(getLatestPopupWindow()).isNull(); + } + @Test public void onProgressChanged_tooltipViewHasBeenShown_notShowTooltipView() { mSeekBarController.displayPreference(mPreferenceScreen); diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java index 66211a2baba..2c59c264159 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java @@ -60,6 +60,8 @@ import com.android.settings.flags.Flags; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settingslib.widget.TopIntroPreference; +import com.google.android.setupcompat.util.WizardManagerHelper; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -301,6 +303,20 @@ public class ToggleFeaturePreferenceFragmentTest { assertThat(getLatestPopupWindow().isShowing()).isTrue(); } + @Test + @RequiresFlagsEnabled(com.android.settings.accessibility.Flags.FLAG_REMOVE_QS_TOOLTIP_IN_SUW) + @Config(shadows = ShadowFragment.class) + public void onPreferenceToggledOnEnabledService_inSuw_toolTipViewShouldNotShow() { + Intent suwIntent = new Intent(); + suwIntent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true); + when(mActivity.getIntent()).thenReturn(suwIntent); + + mFragment.onPreferenceToggled( + ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true); + + assertThat(getLatestPopupWindow()).isNull(); + } + @Test @Config(shadows = ShadowFragment.class) public void onPreferenceToggledOnEnabledService_tooltipViewShown_notShowTooltipView() {