OSDN Git Service

Include uid in device admin pref id.
authorFan Zhang <zhfan@google.com>
Tue, 26 Feb 2019 18:42:10 +0000 (10:42 -0800)
committerFan Zhang <zhfan@google.com>
Tue, 26 Feb 2019 18:49:53 +0000 (10:49 -0800)
Fixes: 124979213
Test: robotests
Change-Id: I50114db79e9b5278bc916fbbba6353c5f19df24f

src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListItem.java
src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminUtils.java [deleted file]
tests/robotests/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListItemTest.java

index 305281c..370a4df 100644 (file)
@@ -30,6 +30,7 @@ class DeviceAdminListItem implements Comparable<DeviceAdminListItem> {
 
     private static final String TAG = "DeviceAdminListItem";
 
+    private final UserHandle mUserHandle;
     private final String mKey;
     private final DeviceAdminInfo mInfo;
     private final CharSequence mName;
@@ -39,7 +40,8 @@ class DeviceAdminListItem implements Comparable<DeviceAdminListItem> {
 
     public DeviceAdminListItem(Context context, DeviceAdminInfo info) {
         mInfo = info;
-        mKey = mInfo.getComponent().flattenToString();
+        mUserHandle = new UserHandle(getUserIdFromDeviceAdminInfo(mInfo));
+        mKey = mUserHandle.getIdentifier() + "@" + mInfo.getComponent().flattenToString();
         mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
         final PackageManager pm = context.getPackageManager();
         mName = mInfo.loadLabel(pm);
@@ -48,8 +50,7 @@ class DeviceAdminListItem implements Comparable<DeviceAdminListItem> {
         } catch (Resources.NotFoundException exception) {
             Log.w(TAG, "Setting description to null because can't find resource: " + mKey);
         }
-        mIcon = pm.getUserBadgedIcon(mInfo.loadIcon(pm),
-                new UserHandle(DeviceAdminUtils.getUserIdFromDeviceAdminInfo(mInfo)));
+        mIcon = pm.getUserBadgedIcon(mInfo.loadIcon(pm), mUserHandle);
     }
 
     @Override
@@ -70,8 +71,7 @@ class DeviceAdminListItem implements Comparable<DeviceAdminListItem> {
     }
 
     public boolean isActive() {
-        return mDPM.isAdminActiveAsUser(mInfo.getComponent(),
-                DeviceAdminUtils.getUserIdFromDeviceAdminInfo(mInfo));
+        return mDPM.isAdminActiveAsUser(mInfo.getComponent(), getUserIdFromDeviceAdminInfo(mInfo));
     }
 
     public Drawable getIcon() {
@@ -79,16 +79,25 @@ class DeviceAdminListItem implements Comparable<DeviceAdminListItem> {
     }
 
     public boolean isEnabled() {
-        return !mDPM.isRemovingAdmin(mInfo.getComponent(),
-                DeviceAdminUtils.getUserIdFromDeviceAdminInfo(mInfo));
+        return !mDPM.isRemovingAdmin(mInfo.getComponent(), getUserIdFromDeviceAdminInfo(mInfo));
     }
 
     public UserHandle getUser() {
-        return new UserHandle(DeviceAdminUtils.getUserIdFromDeviceAdminInfo(mInfo));
+        return new UserHandle(getUserIdFromDeviceAdminInfo(mInfo));
     }
 
     public Intent getLaunchIntent(Context context) {
         return new Intent(context, DeviceAdminAdd.class)
                 .putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mInfo.getComponent());
     }
+
+    /**
+     * Extracts the user id from a device admin info object.
+     *
+     * @param adminInfo the device administrator info.
+     * @return identifier of the user associated with the device admin.
+     */
+    private static int getUserIdFromDeviceAdminInfo(DeviceAdminInfo adminInfo) {
+        return UserHandle.getUserId(adminInfo.getActivityInfo().applicationInfo.uid);
+    }
 }
index 319d62f..7b139d9 100644 (file)
@@ -53,6 +53,9 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
 import com.android.settingslib.widget.FooterPreference;
 import com.android.settingslib.widget.FooterPreferenceMixinCompat;
 
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -249,8 +252,7 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle
                 Log.w(TAG, "Unable to load component: " + activeAdmin);
                 continue;
             }
-            final DeviceAdminInfo deviceAdminInfo = DeviceAdminUtils.createDeviceAdminInfo(
-                    mContext, ai);
+            final DeviceAdminInfo deviceAdminInfo = createDeviceAdminInfo(mContext, ai);
             if (deviceAdminInfo == null) {
                 continue;
             }
@@ -286,7 +288,7 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle
                     && alreadyAddedComponents.contains(riComponentName)) {
                 continue;
             }
-            DeviceAdminInfo deviceAdminInfo = DeviceAdminUtils.createDeviceAdminInfo(
+            DeviceAdminInfo deviceAdminInfo = createDeviceAdminInfo(
                     mContext, resolveInfo.activityInfo);
             // add only visible ones (note: active admins are added regardless of visibility)
             if (deviceAdminInfo != null && deviceAdminInfo.isVisible()) {
@@ -297,4 +299,20 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle
             }
         }
     }
+
+    /**
+     * Creates a device admin info object for the resolved intent that points to the component of
+     * the device admin.
+     *
+     * @param ai ActivityInfo for the admin component.
+     * @return new {@link DeviceAdminInfo} object or null if there was an error.
+     */
+    private static DeviceAdminInfo createDeviceAdminInfo(Context context, ActivityInfo ai) {
+        try {
+            return new DeviceAdminInfo(context, ai);
+        } catch (XmlPullParserException | IOException e) {
+            Log.w(TAG, "Skipping " + ai, e);
+        }
+        return null;
+    }
 }
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminUtils.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminUtils.java
deleted file mode 100644 (file)
index 13d9d20..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.specialaccess.deviceadmin;
-
-import android.app.admin.DeviceAdminInfo;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.os.UserHandle;
-import android.util.Log;
-
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-public class DeviceAdminUtils {
-
-    private static final String TAG = "DeviceAdminUtils";
-
-    /**
-     * Creates a device admin info object for the resolved intent that points to the component of
-     * the device admin.
-     *
-     * @param ai ActivityInfo for the admin component.
-     * @return new {@link DeviceAdminInfo} object or null if there was an error.
-     */
-    public static DeviceAdminInfo createDeviceAdminInfo(Context context, ActivityInfo ai) {
-        try {
-            return new DeviceAdminInfo(context, ai);
-        } catch (XmlPullParserException | IOException e) {
-            Log.w(TAG, "Skipping " + ai, e);
-        }
-        return null;
-    }
-
-    /**
-     * Extracts the user id from a device admin info object.
-     *
-     * @param adminInfo the device administrator info.
-     * @return identifier of the user associated with the device admin.
-     */
-    public static int getUserIdFromDeviceAdminInfo(DeviceAdminInfo adminInfo) {
-        return UserHandle.getUserId(adminInfo.getActivityInfo().applicationInfo.uid);
-    }
-}
index 17703e3..7392fb1 100644 (file)
@@ -67,7 +67,7 @@ public class DeviceAdminListItemTest {
 
         DeviceAdminListItem item = new DeviceAdminListItem(mContext, mDeviceAdminInfo);
 
-        assertThat(item.getKey()).isEqualTo(cn.flattenToShortString());
+        assertThat(item.getKey()).isEqualTo("0@" + cn.flattenToShortString());
         assertThat(item.getName()).isEqualTo(label);
         assertThat(item.getDescription()).isEqualTo(description);
     }