diff --git a/res/xml/app_ops_permissions_details.xml b/res/xml/app_ops_permissions_details.xml index eb8188bad6b..3cbe009fc06 100644 --- a/res/xml/app_ops_permissions_details.xml +++ b/res/xml/app_ops_permissions_details.xml @@ -17,7 +17,7 @@ - { return new UserHandle(getUserIdFromDeviceAdminInfo(mInfo)); } + public int getUid() { + return mInfo.getActivityInfo().applicationInfo.uid; + } + + public String getPackageName() { + return mInfo.getPackageName(); + } + public Intent getLaunchIntent(Context context) { return new Intent(context, DeviceAdminAdd.class) .putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mInfo.getComponent()); diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java index 1184d8e41c5..55ba8acafad 100644 --- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java @@ -18,6 +18,7 @@ package com.android.settings.applications.specialaccess.deviceadmin; import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED; +import android.Manifest; import android.app.AppGlobals; import android.app.admin.DeviceAdminInfo; import android.app.admin.DeviceAdminReceiver; @@ -45,12 +46,13 @@ import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; -import com.android.settingslib.widget.AppSwitchPreference; import com.android.settingslib.widget.FooterPreference; +import com.android.settingslib.widget.TwoTargetPreference; import org.xmlpull.v1.XmlPullParserException; @@ -167,35 +169,35 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle if (mFooterPreference != null) { mFooterPreference.setVisible(mAdmins.isEmpty()); } - final Map preferenceCache = new ArrayMap<>(); + final Map preferenceCache = new ArrayMap<>(); final Context prefContext = mPreferenceGroup.getContext(); final int childrenCount = mPreferenceGroup.getPreferenceCount(); for (int i = 0; i < childrenCount; i++) { final Preference pref = mPreferenceGroup.getPreference(i); - if (!(pref instanceof AppSwitchPreference)) { + if (!(pref instanceof RestrictedSwitchPreference switchPref)) { continue; } - final AppSwitchPreference appSwitch = (AppSwitchPreference) pref; - preferenceCache.put(appSwitch.getKey(), appSwitch); + preferenceCache.put(switchPref.getKey(), switchPref); } for (DeviceAdminListItem item : mAdmins) { final String key = item.getKey(); - AppSwitchPreference pref = preferenceCache.remove(key); + RestrictedSwitchPreference pref = preferenceCache.remove(key); if (pref == null) { - pref = new AppSwitchPreference(prefContext); + pref = new RestrictedSwitchPreference(prefContext); mPreferenceGroup.addPreference(pref); } bindPreference(item, pref); } - for (AppSwitchPreference unusedCacheItem : preferenceCache.values()) { + for (RestrictedSwitchPreference unusedCacheItem : preferenceCache.values()) { mPreferenceGroup.removePreference(unusedCacheItem); } } - private void bindPreference(DeviceAdminListItem item, AppSwitchPreference pref) { + private void bindPreference(DeviceAdminListItem item, RestrictedSwitchPreference pref) { pref.setKey(item.getKey()); pref.setTitle(item.getName()); pref.setIcon(item.getIcon()); + pref.setIconSize(TwoTargetPreference.ICON_SIZE_DEFAULT); pref.setChecked(item.isActive()); pref.setSummary(item.getDescription()); pref.setEnabled(item.isEnabled()); @@ -207,6 +209,8 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle }); pref.setOnPreferenceChangeListener((preference, newValue) -> false); pref.setSingleLineTitle(true); + pref.checkEcmRestrictionAndSetDisabled(Manifest.permission.BIND_DEVICE_ADMIN, + item.getPackageName(), item.getUid()); } /**