From ad6351d6147f097255ea92ab41fe17882c30ca16 Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Fri, 9 Dec 2022 02:12:56 +0800 Subject: [PATCH] [Hearing device shortcut] Setup shortcut for hearing device * Hearing aids page need to set restricted mode to DISALLOW_CONFIG_BLUETOOTH, so change AccessibilityShortcutPreferenceFragment to extend RestrictedDashboardFragment * move ShortcutPreference under the device control category for the 1st order Bug: 237625815 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityShortcutPreferenceFragmentTest Change-Id: I13da8d979694aeab76d8a10edf1348c0ee7810f6 --- .../AccessibilityHearingAidsFragment.java | 60 +++++++++++++++++-- .../accessibility/AccessibilitySettings.java | 9 ++- ...cessibilityShortcutPreferenceFragment.java | 8 ++- .../settings/gestures/OneHandedSettings.java | 7 +++ ...ibilityShortcutPreferenceFragmentTest.java | 6 +- 5 files changed, 78 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java b/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java index 03aea31006b..5df8afb425c 100644 --- a/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java @@ -18,33 +18,48 @@ package com.android.settings.accessibility; import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH; +import android.content.ComponentName; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.preference.PreferenceCategory; + +import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.settings.R; -import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.search.SearchIndexable; /** Accessibility settings for hearing aids. */ @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) -public class AccessibilityHearingAidsFragment extends RestrictedDashboardFragment { +public class AccessibilityHearingAidsFragment extends AccessibilityShortcutPreferenceFragment { private static final String TAG = "AccessibilityHearingAidsFragment"; + private static final String KEY_DEVICE_CONTROL_CATEGORY = "device_control_category"; + private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1; + private String mFeatureName; public AccessibilityHearingAidsFragment() { super(DISALLOW_CONFIG_BLUETOOTH); } + @Override + public void onCreate(Bundle savedInstanceState) { + mFeatureName = getContext().getString(R.string.accessibility_hearingaid_title); + super.onCreate(savedInstanceState); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // TODO(b/237625815): Add shortcutPreference by extending - // AccessibilityShortcutPreferenceFragment - - return super.onCreateView(inflater, container, savedInstanceState); + final View view = super.onCreateView(inflater, container, savedInstanceState); + final PreferenceCategory controlCategory = findPreference(KEY_DEVICE_CONTROL_CATEGORY); + // Move the preference under controlCategory need to remove the original first. + mShortcutPreference.setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX); + getPreferenceScreen().removePreference(mShortcutPreference); + controlCategory.addPreference(mShortcutPreference); + return view; } @Override @@ -63,6 +78,39 @@ public class AccessibilityHearingAidsFragment extends RestrictedDashboardFragmen return TAG; } + @Override + protected ComponentName getComponentName() { + return AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME; + } + + @Override + protected CharSequence getLabelName() { + return mFeatureName; + } + + @Override + protected ComponentName getTileComponentName() { + // Don't have quick settings tile for now. + return null; + } + + @Override + protected CharSequence getTileTooltipContent(int type) { + // Don't have quick settings tile for now. + return null; + } + + @Override + protected boolean showGeneralCategory() { + // Have customized category for accessibility hearings aids page. + return false; + } + + @Override + protected CharSequence getShortcutTitle() { + return getText(R.string.accessibility_hearing_device_shortcut_title); + } + public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids); } diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 7b1500b4238..723384e2ee8 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -148,11 +148,14 @@ public class AccessibilitySettings extends DashboardFragment { public AccessibilitySettings() { // Observe changes to anything that the shortcut can toggle, so we can reflect updates - final Collection features = + final Collection features = AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values(); final List shortcutFeatureKeys = new ArrayList<>(features.size()); - for (AccessibilityShortcutController.ToggleableFrameworkFeatureInfo feature : features) { - shortcutFeatureKeys.add(feature.getSettingKey()); + for (AccessibilityShortcutController.FrameworkFeatureInfo feature : features) { + final String key = feature.getSettingKey(); + if (key != null) { + shortcutFeatureKeys.add(key); + } } // Observe changes from accessibility selection menu diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java index 13bfc5ef65e..33dab82de96 100644 --- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java @@ -44,7 +44,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType; -import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.utils.LocaleUtils; import com.google.android.setupcompat.util.WizardManagerHelper; @@ -56,7 +56,7 @@ import java.util.Locale; /** * Base class for accessibility fragments shortcut functions and dialog management. */ -public abstract class AccessibilityShortcutPreferenceFragment extends DashboardFragment +public abstract class AccessibilityShortcutPreferenceFragment extends RestrictedDashboardFragment implements ShortcutPreference.OnClickCallback { private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference"; protected static final String KEY_SAVED_USER_SHORTCUT_TYPE = "shortcut_type"; @@ -75,6 +75,10 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF private boolean mNeedsQSTooltipReshow = false; private int mNeedsQSTooltipType = QuickSettingsTooltipType.GUIDE_TO_EDIT; + public AccessibilityShortcutPreferenceFragment(String restrictionKey) { + super(restrictionKey); + } + /** Returns the accessibility component name. */ protected abstract ComponentName getComponentName(); diff --git a/src/com/android/settings/gestures/OneHandedSettings.java b/src/com/android/settings/gestures/OneHandedSettings.java index aa193865886..53cc48f94e5 100644 --- a/src/com/android/settings/gestures/OneHandedSettings.java +++ b/src/com/android/settings/gestures/OneHandedSettings.java @@ -48,6 +48,13 @@ public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment { private String mFeatureName; private OneHandedSettingsUtils mUtils; + /** + * One handed settings no need to set any restriction key for pin protected. + */ + public OneHandedSettings() { + super(/* restrictionKey= */ null); + } + @Override protected void updatePreferenceStates() { OneHandedSettingsUtils.setUserId(UserHandle.myUserId()); diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java index c7a5884d6e2..7fbc3e36278 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java @@ -93,7 +93,7 @@ public class AccessibilityShortcutPreferenceFragmentTest { public void setUpTestFragment() { MockitoAnnotations.initMocks(this); - mFragment = spy(new TestAccessibilityShortcutPreferenceFragment()); + mFragment = spy(new TestAccessibilityShortcutPreferenceFragment(null)); when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager); when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext); when(mFragment.getContext()).thenReturn(mContext); @@ -256,6 +256,10 @@ public class AccessibilityShortcutPreferenceFragmentTest { public static class TestAccessibilityShortcutPreferenceFragment extends AccessibilityShortcutPreferenceFragment { + public TestAccessibilityShortcutPreferenceFragment(String restrictionKey) { + super(restrictionKey); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {