Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d3dbbce authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Include uid in device admin pref id."

parents 3329ead4 71d5e90a
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -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);
    }
}
+21 −3
Original line number Diff line number Diff line
@@ -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;
    }
}
+0 −58
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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);
    }