Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29641287 authored by Daniel Norman's avatar Daniel Norman Committed by Android (Google) Code Review
Browse files

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

parents 037aae97 4c347313
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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
+64 −8
Original line number Diff line number Diff line
@@ -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);
+12 −0
Original line number Diff line number Diff line
@@ -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();
    }
}