diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java index de37babfc32..169a9521323 100644 --- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java +++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java @@ -100,6 +100,12 @@ public class LaunchAccessibilityActivityPreferenceFragment extends showDialog(DialogEnums.EDIT_SHORTCUT); } + @Override + int getUserShortcutTypes() { + return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), + mComponentName); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // Do not call super. We don't want to see the "Help & feedback" option on this page so as diff --git a/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java index 1803874f09c..4fcfff8e7f7 100644 --- a/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java @@ -18,6 +18,7 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; +import android.accessibilityservice.AccessibilityServiceInfo; import android.os.Bundle; import android.view.View; @@ -48,6 +49,22 @@ public class LegacyAccessibilityServicePreferenceFragment extends setAllowedPreferredShortcutType(UserShortcutType.HARDWARE); } + @Override + int getUserShortcutTypes() { + int shortcutTypes = super.getUserShortcutTypes(); + + final AccessibilityServiceInfo info = getAccessibilityServiceInfo(); + final boolean hasRequestAccessibilityButtonFlag = + (info.flags & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; + if (hasRequestAccessibilityButtonFlag) { + shortcutTypes |= UserShortcutType.SOFTWARE; + } else { + shortcutTypes &= (~UserShortcutType.SOFTWARE); + } + + return shortcutTypes; + } + private void setAllowedPreferredShortcutType(int type) { final AccessibilityUserShortcutType shortcut = new AccessibilityUserShortcutType( mComponentName.flattenToString(), type); diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index d530a563365..6fdbe0310e0 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -106,7 +106,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends // capabilities. For // example, before JellyBean MR2 the user was granting the explore by touch // one. - private AccessibilityServiceInfo getAccessibilityServiceInfo() { + AccessibilityServiceInfo getAccessibilityServiceInfo() { final List infos = AccessibilityManager.getInstance( getPrefContext()).getInstalledAccessibilityServiceList(); @@ -197,6 +197,12 @@ public class ToggleAccessibilityServicePreferenceFragment extends } } + @Override + int getUserShortcutTypes() { + return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), + mComponentName); + } + @Override protected void updateToggleServiceTitle(SwitchPreference switchPreference) { final AccessibilityServiceInfo info = getAccessibilityServiceInfo(); diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java index 07ff7203013..5cde5e602e7 100644 --- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java @@ -124,6 +124,12 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere showDialog(DialogEnums.EDIT_SHORTCUT); } + @Override + int getUserShortcutTypes() { + return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), + mComponentName); + } + private void updateSwitchBarToggleSwitch() { final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON; if (mToggleServiceDividerSwitchPreference.isChecked() == checked) { diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java index 5b9c55b3a93..c7212a44b21 100644 --- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java @@ -198,6 +198,12 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe showDialog(DialogEnums.EDIT_SHORTCUT); } + @Override + int getUserShortcutTypes() { + return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), + mComponentName); + } + private void updateSwitchBarToggleSwitch() { final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON; if (mToggleServiceDividerSwitchPreference.isChecked() == checked) { diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index eeb1f3ae5cf..7fc4623e332 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -334,6 +334,11 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference removeActionBarToggleSwitch(); } + /** + * Returns the shortcut type list which has been checked by user. + */ + abstract int getUserShortcutTypes(); + protected void updateToggleServiceTitle(SwitchPreference switchPreference) { switchPreference.setTitle(R.string.accessibility_service_master_switch_title); } diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 91b8eaebd47..11f25b4dd43 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -412,6 +412,11 @@ public class ToggleScreenMagnificationPreferenceFragment extends } } + @Override + int getUserShortcutTypes() { + return getUserShortcutTypeFromSettings(getPrefContext()); + } + @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { if (enabled && TextUtils.equals( diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java index e476c21f37d..3df9c048637 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java @@ -129,6 +129,11 @@ public class ToggleFeaturePreferenceFragmentTest { return 0; } + @Override + int getUserShortcutTypes() { + return 0; + } + @Override public int getPreferenceScreenResId() { return R.xml.placeholder_prefs; diff --git a/tests/unit/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/unit/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java index 9a3b526dd7a..e0013e08f8c 100644 --- a/tests/unit/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java +++ b/tests/unit/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java @@ -86,5 +86,10 @@ public class ToggleFeaturePreferenceFragmentTest { public int getMetricsCategory() { return 0; } + + @Override + int getUserShortcutTypes() { + return 0; + } } } \ No newline at end of file