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.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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user