The touch exploration capability is dynamically granted pre-JellyBeanMR2.
Since the enable touch exploration capability is dynamically granted by the user for apps targeting pre-JellybeanMR2 API level, we have to avoid caching copies of the service info. Framework change:https://googleplex-android-review.googlesource.com/#/c/301722 bug:8633951 Change-Id: I2b409ca92931d1409e885d6f54e0f10cbece2e80
This commit is contained in:
@@ -121,8 +121,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
private static final String EXTRA_TITLE = "title";
|
private static final String EXTRA_TITLE = "title";
|
||||||
private static final String EXTRA_SUMMARY = "summary";
|
private static final String EXTRA_SUMMARY = "summary";
|
||||||
private static final String EXTRA_SETTINGS_TITLE = "settings_title";
|
private static final String EXTRA_SETTINGS_TITLE = "settings_title";
|
||||||
|
private static final String EXTRA_COMPONENT_NAME = "component_name";
|
||||||
private static final String EXTRA_SETTINGS_COMPONENT_NAME = "settings_component_name";
|
private static final String EXTRA_SETTINGS_COMPONENT_NAME = "settings_component_name";
|
||||||
private static final String EXTRA_ACCESSIBILITY_SERVICE_INFO = "accessibility_service_info";
|
|
||||||
|
|
||||||
// Dialog IDs.
|
// Dialog IDs.
|
||||||
private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 1;
|
private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 1;
|
||||||
@@ -416,7 +416,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
settingsClassName).flattenToString());
|
settingsClassName).flattenToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
extras.putParcelable(EXTRA_ACCESSIBILITY_SERVICE_INFO, info);
|
extras.putParcelable(EXTRA_COMPONENT_NAME, componentName);
|
||||||
|
|
||||||
mServicesCategory.addPreference(preference);
|
mServicesCategory.addPreference(preference);
|
||||||
}
|
}
|
||||||
@@ -677,14 +677,12 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
public void onChange(boolean selfChange, Uri uri) {
|
public void onChange(boolean selfChange, Uri uri) {
|
||||||
String settingValue = Settings.Secure.getString(getContentResolver(),
|
String settingValue = Settings.Secure.getString(getContentResolver(),
|
||||||
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
|
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
|
||||||
final boolean enabled = settingValue.contains(mComponentName);
|
final boolean enabled = settingValue.contains(mComponentName.flattenToString());
|
||||||
mToggleSwitch.setCheckedInternal(enabled);
|
mToggleSwitch.setCheckedInternal(enabled);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private AccessibilityServiceInfo mAccessibilityServiceInfo;
|
private ComponentName mComponentName;
|
||||||
|
|
||||||
private String mComponentName;
|
|
||||||
|
|
||||||
private int mShownDialogId;
|
private int mShownDialogId;
|
||||||
|
|
||||||
@@ -748,53 +746,66 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
Settings.Secure.ACCESSIBILITY_ENABLED, accessibilityEnabled ? 1 : 0);
|
Settings.Secure.ACCESSIBILITY_ENABLED, accessibilityEnabled ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// extras.putString(EXTRA_ENABLE_WARNING_TITLE, getString(
|
// IMPORTANT: Refresh the info since there are dynamically changing capabilities. For
|
||||||
// R.string.accessibility_service_security_warning_title, applicationLabel));
|
// example, before JellyBean MR2 the user was granting the explore by touch one.
|
||||||
// extras.putString(EXTRA_ENABLE_WARNING_MESSAGE, getString(
|
private AccessibilityServiceInfo getAccessibilityServiceInfo() {
|
||||||
// R.string.accessibility_service_security_warning_summary, applicationLabel));
|
List<AccessibilityServiceInfo> serviceInfos = AccessibilityManager.getInstance(
|
||||||
//
|
getActivity()).getInstalledAccessibilityServiceList();
|
||||||
// extras.putString(EXTRA_DISABLE_WARNING_TITLE, getString(
|
final int serviceInfoCount = serviceInfos.size();
|
||||||
// R.string.accessibility_service_disable_warning_title,
|
for (int i = 0; i < serviceInfoCount; i++) {
|
||||||
// applicationLabel));
|
AccessibilityServiceInfo serviceInfo = serviceInfos.get(i);
|
||||||
// extras.putString(EXTRA_DISABLE_WARNING_MESSAGE, getString(
|
ResolveInfo resolveInfo = serviceInfo.getResolveInfo();
|
||||||
// R.string.accessibility_service_disable_warning_summary,
|
if (mComponentName.getPackageName().equals(resolveInfo.serviceInfo.packageName)
|
||||||
// applicationLabel));
|
&& mComponentName.getClassName().equals(resolveInfo.serviceInfo.name)) {
|
||||||
|
return serviceInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(int dialogId) {
|
public Dialog onCreateDialog(int dialogId) {
|
||||||
switch (dialogId) {
|
switch (dialogId) {
|
||||||
case DIALOG_ID_ENABLE_WARNING:
|
case DIALOG_ID_ENABLE_WARNING: {
|
||||||
mShownDialogId = DIALOG_ID_ENABLE_WARNING;
|
mShownDialogId = DIALOG_ID_ENABLE_WARNING;
|
||||||
|
AccessibilityServiceInfo info = getAccessibilityServiceInfo();
|
||||||
|
if (info == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return new AlertDialog.Builder(getActivity())
|
return new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(getString(R.string.enable_service_title,
|
.setTitle(getString(R.string.enable_service_title,
|
||||||
mAccessibilityServiceInfo.getResolveInfo()
|
info.getResolveInfo().loadLabel(getPackageManager())))
|
||||||
.loadLabel(getPackageManager())))
|
|
||||||
.setIconAttribute(android.R.attr.alertDialogIcon)
|
.setIconAttribute(android.R.attr.alertDialogIcon)
|
||||||
.setView(createEnableDialogContentView())
|
.setView(createEnableDialogContentView(info))
|
||||||
.setCancelable(true)
|
.setCancelable(true)
|
||||||
.setPositiveButton(android.R.string.ok, this)
|
.setPositiveButton(android.R.string.ok, this)
|
||||||
.setNegativeButton(android.R.string.cancel, this)
|
.setNegativeButton(android.R.string.cancel, this)
|
||||||
.create();
|
.create();
|
||||||
case DIALOG_ID_DISABLE_WARNING:
|
}
|
||||||
|
case DIALOG_ID_DISABLE_WARNING: {
|
||||||
mShownDialogId = DIALOG_ID_DISABLE_WARNING;
|
mShownDialogId = DIALOG_ID_DISABLE_WARNING;
|
||||||
|
AccessibilityServiceInfo info = getAccessibilityServiceInfo();
|
||||||
|
if (info == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return new AlertDialog.Builder(getActivity())
|
return new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(getString(R.string.disable_service_title,
|
.setTitle(getString(R.string.disable_service_title,
|
||||||
mAccessibilityServiceInfo.getResolveInfo()
|
info.getResolveInfo().loadLabel(getPackageManager())))
|
||||||
.loadLabel(getPackageManager())))
|
|
||||||
.setIconAttribute(android.R.attr.alertDialogIcon)
|
.setIconAttribute(android.R.attr.alertDialogIcon)
|
||||||
.setMessage(getString(R.string.disable_service_message,
|
.setMessage(getString(R.string.disable_service_message,
|
||||||
mAccessibilityServiceInfo.getResolveInfo()
|
info.getResolveInfo().loadLabel(getPackageManager())))
|
||||||
.loadLabel(getPackageManager())))
|
|
||||||
.setCancelable(true)
|
.setCancelable(true)
|
||||||
.setPositiveButton(android.R.string.ok, this)
|
.setPositiveButton(android.R.string.ok, this)
|
||||||
.setNegativeButton(android.R.string.cancel, this)
|
.setNegativeButton(android.R.string.cancel, this)
|
||||||
.create();
|
.create();
|
||||||
default:
|
}
|
||||||
|
default: {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private View createEnableDialogContentView() {
|
private View createEnableDialogContentView(AccessibilityServiceInfo info) {
|
||||||
LayoutInflater inflater = (LayoutInflater) getSystemService(
|
LayoutInflater inflater = (LayoutInflater) getSystemService(
|
||||||
Context.LAYOUT_INFLATER_SERVICE);
|
Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
|
||||||
@@ -804,7 +815,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
TextView capabilitiesHeaderView = (TextView) content.findViewById(
|
TextView capabilitiesHeaderView = (TextView) content.findViewById(
|
||||||
R.id.capabilities_header);
|
R.id.capabilities_header);
|
||||||
capabilitiesHeaderView.setText(getString(R.string.capabilities_list_title,
|
capabilitiesHeaderView.setText(getString(R.string.capabilities_list_title,
|
||||||
mAccessibilityServiceInfo.getResolveInfo().loadLabel(getPackageManager())));
|
info.getResolveInfo().loadLabel(getPackageManager())));
|
||||||
|
|
||||||
LinearLayout capabilitiesView = (LinearLayout) content.findViewById(R.id.capabilities);
|
LinearLayout capabilitiesView = (LinearLayout) content.findViewById(R.id.capabilities);
|
||||||
|
|
||||||
@@ -826,7 +837,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
descriptionView.setText(getString(R.string.capability_desc_receiveAccessibilityEvents));
|
descriptionView.setText(getString(R.string.capability_desc_receiveAccessibilityEvents));
|
||||||
|
|
||||||
List<AccessibilityServiceInfo.CapabilityInfo> capabilities =
|
List<AccessibilityServiceInfo.CapabilityInfo> capabilities =
|
||||||
mAccessibilityServiceInfo.getCapabilityInfos();
|
info.getCapabilityInfos();
|
||||||
|
|
||||||
capabilitiesView.addView(capabilityView);
|
capabilitiesView.addView(capabilityView);
|
||||||
|
|
||||||
@@ -914,11 +925,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mAccessibilityServiceInfo = arguments.getParcelable(EXTRA_ACCESSIBILITY_SERVICE_INFO);
|
mComponentName = arguments.getParcelable(EXTRA_COMPONENT_NAME);
|
||||||
|
|
||||||
ServiceInfo serviceInfo = mAccessibilityServiceInfo.getResolveInfo().serviceInfo;
|
|
||||||
mComponentName = new ComponentName(serviceInfo.packageName,
|
|
||||||
serviceInfo.name).flattenToString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user