Disable non-permitted accessibility services and IMEs
Bug: 14469005 Change-Id: I4986f035318854c27ecb92bbe2f0c977d53b6361
This commit is contained in:
@@ -18,6 +18,7 @@ package com.android.settings.accessibility;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
import android.app.ActivityManagerNative;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -28,6 +29,7 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
@@ -197,11 +199,15 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
||||
|
||||
private int mLongPressTimeoutDefault;
|
||||
|
||||
private DevicePolicyManager mDpm;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
addPreferencesFromResource(R.xml.accessibility_settings);
|
||||
initializeAllPreferences();
|
||||
mDpm = (DevicePolicyManager) (getActivity()
|
||||
.getSystemService(Context.DEVICE_POLICY_SERVICE));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -434,7 +440,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
||||
accessibilityManager.getInstalledAccessibilityServiceList();
|
||||
Set<ComponentName> enabledServices = AccessibilityUtils.getEnabledServicesFromSettings(
|
||||
getActivity());
|
||||
|
||||
List<String> permittedServices = mDpm.getPermittedAccessibilityServices(
|
||||
UserHandle.myUserId());
|
||||
final boolean accessibilityEnabled = Settings.Secure.getInt(getContentResolver(),
|
||||
Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
|
||||
|
||||
@@ -454,12 +461,27 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
|
||||
preference.setTitle(title);
|
||||
final boolean serviceEnabled = accessibilityEnabled
|
||||
&& enabledServices.contains(componentName);
|
||||
String serviceEnabledString;
|
||||
if (serviceEnabled) {
|
||||
preference.setSummary(getString(R.string.accessibility_feature_state_on));
|
||||
serviceEnabledString = getString(R.string.accessibility_feature_state_on);
|
||||
} else {
|
||||
preference.setSummary(getString(R.string.accessibility_feature_state_off));
|
||||
serviceEnabledString = getString(R.string.accessibility_feature_state_off);
|
||||
}
|
||||
|
||||
// Disable all accessibility services that are not permitted.
|
||||
String packageName = serviceInfo.packageName;
|
||||
boolean serviceAllowed =
|
||||
permittedServices == null || permittedServices.contains(packageName);
|
||||
preference.setEnabled(serviceAllowed || serviceEnabled);
|
||||
|
||||
String summaryString;
|
||||
if (serviceAllowed) {
|
||||
summaryString = serviceEnabledString;
|
||||
} else {
|
||||
summaryString = getString(R.string.accessibility_feature_or_input_method_not_allowed);
|
||||
}
|
||||
preference.setSummary(summaryString);
|
||||
|
||||
preference.setOrder(i);
|
||||
preference.setFragment(ToggleAccessibilityServicePreferenceFragment.class.getName());
|
||||
preference.setPersistent(true);
|
||||
|
Reference in New Issue
Block a user