Merge "Use a configurable default if the setting has never been set."
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 28e7094..19a0f2b 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -27,6 +27,8 @@
 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.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 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        setupDefaultShortcutIfNecessary(getPrefContext());
         final int resId = getPreferenceScreenResId();
         if (resId <= 0) {
             PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
@@ -642,4 +646,32 @@
         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());
+        }
+    }
 }