diff --git a/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java b/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java index d04b34a4c3f..f05b15710c8 100644 --- a/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java +++ b/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java @@ -61,6 +61,7 @@ import com.android.internal.accessibility.dialog.AccessibilityTargetHelper; import com.android.settings.R; import com.android.settings.SetupWizardUtils; import com.android.settings.accessibility.AccessibilitySetupWizardUtils; +import com.android.settings.accessibility.Flags; import com.android.settings.accessibility.PreferredShortcuts; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; @@ -201,9 +202,14 @@ public class EditShortcutsPreferenceFragment extends DashboardFragment { super.onCreatePreferences(savedInstanceState, rootKey); Activity activity = getActivity(); + final Preference descriptionPref = findPreference(getString( + R.string.accessibility_shortcut_description_pref)); if (!activity.getIntent().getAction().equals( Settings.ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS)) { + if (Flags.toggleFeatureFragmentCollectionInfo()) { + descriptionPref.setVisible(false); + } return; } @@ -219,10 +225,11 @@ public class EditShortcutsPreferenceFragment extends DashboardFragment { ); activity.setTitle(titles.first); - - String screenDescriptionPrefKey = getString( - R.string.accessibility_shortcut_description_pref); - findPreference(screenDescriptionPrefKey).setSummary(titles.second); + if (titles.second != null || !Flags.toggleFeatureFragmentCollectionInfo()) { + descriptionPref.setSummary(titles.second); + } else { + descriptionPref.setVisible(false); + } } @NonNull diff --git a/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java index 414fe6333f5..b3270e95c11 100644 --- a/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java @@ -16,6 +16,9 @@ package com.android.settings.accessibility.shortcuts; +import static android.provider.Settings.ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS; + +import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE; @@ -45,6 +48,7 @@ import android.util.Pair; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.Flags; +import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.testing.FragmentScenario; import androidx.lifecycle.Lifecycle; @@ -160,7 +164,7 @@ public class EditShortcutsPreferenceFragmentTest { public void showEditShortcutScreen_inSuw_launchSubSettingWithSuw() { EditShortcutsPreferenceFragment.showEditShortcutScreen( mActivity, METRICS_CATEGORY, SCREEN_TITLE, - TARGET_FAKE_COMPONENT, createSuwIntent(new Intent(), /* isInSuw= */ true)); + TARGET_FAKE_COMPONENT, setIntentInSuw(new Intent(), /* isInSuw= */ true)); assertLaunchSubSettingWithCurrentTargetComponents( TARGET_FAKE_COMPONENT.flattenToString(), /* isInSuw= */ true); @@ -198,6 +202,53 @@ public class EditShortcutsPreferenceFragmentTest { }); } + @Test + @EnableFlags( + com.android.settings.accessibility.Flags.FLAG_TOGGLE_FEATURE_FRAGMENT_COLLECTION_INFO) + public void shortcutDescriptionPref_defaultLaunch_notVisible() { + mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET); + mFragmentScenario.moveToState(Lifecycle.State.CREATED); + + mFragmentScenario.onFragment(fragment -> { + Preference preference = fragment.findPreference( + mContext.getString(R.string.accessibility_shortcut_description_pref)); + assertThat(preference.isVisible()).isFalse(); + }); + } + + @Test + @EnableFlags( + com.android.settings.accessibility.Flags.FLAG_TOGGLE_FEATURE_FRAGMENT_COLLECTION_INFO) + public void shortcutDescriptionPref_launchFromAction_singleTarget_notVisible() { + mFragmentScenario = createFragScenario(/* isInSuw= */ false, List.of(TARGET), + ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS); + mFragmentScenario.moveToState(Lifecycle.State.CREATED); + + mFragmentScenario.onFragment(fragment -> { + Preference preference = fragment.findPreference( + mContext.getString(R.string.accessibility_shortcut_description_pref)); + assertThat(preference.isVisible()).isFalse(); + }); + } + + @Test + @EnableFlags( + com.android.settings.accessibility.Flags.FLAG_TOGGLE_FEATURE_FRAGMENT_COLLECTION_INFO) + public void shortcutDescriptionPref_launchFromAction_multipleTargets_isVisible() { + mFragmentScenario = createFragScenario(/* isInSuw= */ false, + // Both of these components are system components with known labels, so we don't + // need to mock AccessibilityManager with fake labels. + List.of(TARGET, DALTONIZER_COMPONENT_NAME.flattenToString()), + ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS); + mFragmentScenario.moveToState(Lifecycle.State.CREATED); + + mFragmentScenario.onFragment(fragment -> { + Preference preference = fragment.findPreference( + mContext.getString(R.string.accessibility_shortcut_description_pref)); + assertThat(preference.isVisible()).isTrue(); + }); + } + @Test public void fragmentCreated_settingsObserversAreRegistered() { ShadowContentResolver contentResolver = shadowOf(mContext.getContentResolver()); @@ -654,9 +705,14 @@ public class EditShortcutsPreferenceFragmentTest { private FragmentScenario createFragScenario( boolean isInSuw, String target) { + return createFragScenario(isInSuw, List.of(target), null); + } + private FragmentScenario createFragScenario( + boolean isInSuw, List targets, @Nullable String intentAction) { Bundle args = new Bundle(); args.putStringArray( - EditShortcutsPreferenceFragment.ARG_KEY_SHORTCUT_TARGETS, new String[]{target}); + EditShortcutsPreferenceFragment.ARG_KEY_SHORTCUT_TARGETS, + targets.toArray(new String[0])); FragmentScenario scenario = FragmentScenario.launch( EditShortcutsPreferenceFragment.class, args, @@ -664,7 +720,11 @@ public class EditShortcutsPreferenceFragmentTest { scenario.onFragment(fragment -> { Intent intent = fragment.requireActivity().getIntent(); intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, SCREEN_TITLE); - fragment.requireActivity().setIntent(createSuwIntent(intent, isInSuw)); + setIntentInSuw(intent, isInSuw); + if (intentAction != null) { + intent.setAction(intentAction); + } + fragment.requireActivity().setIntent(intent); // Since the fragment is attached before we have a chance // to modify the activity's intent; initialize controllers again fragment.initializePreferenceControllerArguments(); @@ -672,11 +732,7 @@ public class EditShortcutsPreferenceFragmentTest { return scenario; } - private Intent createSuwIntent(Intent intent, boolean isInSuw) { - - if (intent == null) { - intent = new Intent(); - } + private Intent setIntentInSuw(Intent intent, boolean isInSuw) { intent.putExtra(EXTRA_IS_SETUP_FLOW, isInSuw); intent.putExtra(EXTRA_IS_FIRST_RUN, isInSuw); intent.putExtra(EXTRA_IS_PRE_DEFERRED_SETUP, isInSuw); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java index fcd1e42c547..7de69a7ec55 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java @@ -24,6 +24,8 @@ import android.content.Context; import android.util.ArrayMap; import android.view.accessibility.AccessibilityManager; +import com.android.internal.accessibility.common.ShortcutConstants; + import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @@ -71,4 +73,14 @@ public class ShadowAccessibilityManager extends org.robolectric.shadows.ShadowAc @NonNull List installedAccessibilityShortcutList) { mInstalledAccessibilityShortcutList = installedAccessibilityShortcutList; } + + /** + * Implements the hidden method + * {@link AccessibilityManager#getAccessibilityShortcutTargets}. + */ + @Implementation + public List getAccessibilityShortcutTargets( + @ShortcutConstants.UserShortcutType int shortcutType) { + return List.of(); + } }