Use a configurable default if the setting has never been set.
AccessibilityManager#getAccessibilityShortcutTargets may not return correct shortcut targets during boot. Needs to read settings directly. Bug: 149293174 Bug: 147989561 Test: Manual test Change-Id: Ia8997b08d11da78dab5cd568787e9c61b0b0eeab
This commit is contained in:
@@ -27,6 +27,8 @@ import android.content.pm.ResolveInfo;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@@ -47,6 +49,7 @@ import com.android.settings.SettingsActivity;
|
|||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
|
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
|
||||||
import com.android.settings.widget.SwitchBar;
|
import com.android.settings.widget.SwitchBar;
|
||||||
|
import com.android.settingslib.accessibility.AccessibilityUtils;
|
||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -112,6 +115,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
setupDefaultShortcutIfNecessary(getPrefContext());
|
||||||
final int resId = getPreferenceScreenResId();
|
final int resId = getPreferenceScreenResId();
|
||||||
if (resId <= 0) {
|
if (resId <= 0) {
|
||||||
PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
|
PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
|
||||||
@@ -641,4 +645,32 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference
|
|||||||
preferenceScreen.addPreference(new FooterPreference.Builder(getActivity()).setTitle(
|
preferenceScreen.addPreference(new FooterPreference.Builder(getActivity()).setTitle(
|
||||||
title).build());
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user