diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 70f6dcd8ea1..e58846cd21e 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -27,6 +27,8 @@ import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; +import android.os.UserHandle; +import android.provider.Settings; import android.text.Html; import android.text.TextUtils; import android.view.LayoutInflater; @@ -47,6 +49,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; import com.android.settings.widget.SwitchBar; +import com.android.settingslib.accessibility.AccessibilityUtils; import com.android.settingslib.widget.FooterPreference; import java.lang.annotation.Retention; @@ -112,6 +115,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setupDefaultShortcutIfNecessary(getPrefContext()); final int resId = getPreferenceScreenResId(); if (resId <= 0) { PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen( @@ -641,4 +645,32 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference preferenceScreen.addPreference(new FooterPreference.Builder(getActivity()).setTitle( title).build()); } + + /** + * Setups a configurable default if the setting has never been set. + */ + private static void setupDefaultShortcutIfNecessary(Context context) { + final String targetKey = Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE; + String targetString = Settings.Secure.getString(context.getContentResolver(), targetKey); + if (!TextUtils.isEmpty(targetString)) { + // The shortcut setting has been set + return; + } + + // AccessibilityManager#getAccessibilityShortcutTargets may not return correct shortcut + // targets during boot. Needs to read settings directly here. + targetString = AccessibilityUtils.getShortcutTargetServiceComponentNameString(context, + UserHandle.myUserId()); + if (TextUtils.isEmpty(targetString)) { + // No configurable default accessibility service + return; + } + + // Only fallback to default accessibility service when setting is never updated. + final ComponentName shortcutName = ComponentName.unflattenFromString(targetString); + if (shortcutName != null) { + Settings.Secure.putString(context.getContentResolver(), targetKey, + shortcutName.flattenToString()); + } + } }