*/
public class AccessibilitySettings extends SettingsPreferenceFragment implements DialogCreatable,
Preference.OnPreferenceChangeListener {
+
private static final String DEFAULT_SCREENREADER_MARKET_LINK =
"market://search?q=pname:com.google.android.marvin.talkback";
private void persistEnabledAccessibilityServices() {
StringBuilder builder = new StringBuilder(256);
- int firstEnabled = -1;
for (String key : mAccessibilityServices.keySet()) {
CheckBoxPreference preference = (CheckBoxPreference) findPreference(key);
if (preference.isChecked()) {
String key = accessibilityServiceInfo.getId();
if (mAccessibilityServices.put(key, accessibilityServiceInfo) == null) {
- String settingsActivityName = accessibilityServiceInfo.getSettingsActivityName();
+ SettingsCheckBoxPreference preference = null;
Intent settingsIntent = null;
+ String settingsActivityName = accessibilityServiceInfo.getSettingsActivityName();
+
if (!TextUtils.isEmpty(settingsActivityName)) {
- String packageName = accessibilityServiceInfo.getResolveInfo()
- .serviceInfo.packageName;
settingsIntent = new Intent(Intent.ACTION_MAIN);
- settingsIntent.setClassName(packageName, settingsActivityName);
+ settingsIntent.setClassName(
+ accessibilityServiceInfo.getResolveInfo().serviceInfo.packageName,
+ settingsActivityName);
}
- SettingsCheckBoxPreference preference = new SettingsCheckBoxPreference(
- getActivity(), settingsIntent);
+
+ preference = new SettingsCheckBoxPreference(getActivity(), settingsIntent);
preference.setKey(key);
preference.setOrder(i);
ServiceInfo serviceInfo = accessibilityServiceInfo.getResolveInfo().serviceInfo;
private final Intent mSettingsIntent;
/**
- * Creates a new instance.
+ * Creates a new instance. The constructor is checking whether the
+ * settings intent is resolved to an activity and acts accordingly.
*
* @param context Context for accessing resources.
- * @param settingsIntent Intent to use as settings for the item represented by
+ * @param intent Intent to use as settings for the item represented by
* this preference. Pass <code>null</code> if there is no associated
* settings activity.
*/
- public SettingsCheckBoxPreference(Context context, Intent settingsIntent) {
+ public SettingsCheckBoxPreference(Context context, Intent intent) {
super(context);
if (sDimAlpha == Integer.MIN_VALUE) {
sDimAlpha = (int) (outValue.getFloat() * 255);
}
- mSettingsIntent = settingsIntent;
+ if (intent != null
+ && !context.getPackageManager().queryIntentActivities(intent, 0).isEmpty()) {
+ mSettingsIntent = intent;
+ } else {
+ mSettingsIntent = null;
+ }
+
setWidgetLayoutResource(R.layout.preference_settings_checkbox_widget);
}