Merge "Hides the Edit Shortcut top preference when empty." into main

This commit is contained in:
Daniel Norman
2024-10-18 17:29:37 +00:00
committed by Android (Google) Code Review
3 changed files with 87 additions and 12 deletions

View File

@@ -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

View File

@@ -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<EditShortcutsPreferenceFragment> createFragScenario(
boolean isInSuw, String target) {
return createFragScenario(isInSuw, List.of(target), null);
}
private FragmentScenario<EditShortcutsPreferenceFragment> createFragScenario(
boolean isInSuw, List<String> 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<EditShortcutsPreferenceFragment> 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);

View File

@@ -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<AccessibilityShortcutInfo> installedAccessibilityShortcutList) {
mInstalledAccessibilityShortcutList = installedAccessibilityShortcutList;
}
/**
* Implements the hidden method
* {@link AccessibilityManager#getAccessibilityShortcutTargets}.
*/
@Implementation
public List<String> getAccessibilityShortcutTargets(
@ShortcutConstants.UserShortcutType int shortcutType) {
return List.of();
}
}