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

Commit cccbbd36 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix NPE for VirtualDeviceManagerInternal service" into main

parents cf1a527c 422a9b22
Loading
Loading
Loading
Loading
+16 −13
Original line number Original line Diff line number Diff line
@@ -19,13 +19,13 @@ package com.android.server.pm.permission;
import static android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME;
import static android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.ActivityManagerInternal;
import android.app.AlarmManager;
import android.app.AlarmManager;
import android.app.IActivityManager;
import android.app.IActivityManager;
import android.app.IUidObserver;
import android.app.IUidObserver;
import android.app.UidObserver;
import android.app.UidObserver;
import android.companion.virtual.VirtualDevice;
import android.companion.virtual.VirtualDeviceManager;
import android.companion.virtual.VirtualDeviceManager;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
@@ -71,7 +71,6 @@ public class OneTimePermissionUserManager {
    private final @NonNull AlarmManager mAlarmManager;
    private final @NonNull AlarmManager mAlarmManager;
    private final @NonNull PermissionControllerManager mPermissionControllerManager;
    private final @NonNull PermissionControllerManager mPermissionControllerManager;
    private final @NonNull PermissionManager mPermissionManager;
    private final @NonNull PermissionManager mPermissionManager;
    private final VirtualDeviceManagerInternal mVirtualDeviceManagerInternal;


    private final Object mLock = new Object();
    private final Object mLock = new Object();


@@ -108,8 +107,6 @@ public class OneTimePermissionUserManager {
        mPermissionControllerManager = new PermissionControllerManager(
        mPermissionControllerManager = new PermissionControllerManager(
                mContext, PermissionThread.getHandler());
                mContext, PermissionThread.getHandler());
        mPermissionManager = mContext.getSystemService(PermissionManager.class);
        mPermissionManager = mContext.getSystemService(PermissionManager.class);
        mVirtualDeviceManagerInternal =
                LocalServices.getService(VirtualDeviceManagerInternal.class);
        mHandler = context.getMainThreadHandler();
        mHandler = context.getMainThreadHandler();
    }
    }


@@ -274,9 +271,13 @@ public class OneTimePermissionUserManager {
        private @NonNull List<String> getOneTimePermissions(@NonNull String packageName,
        private @NonNull List<String> getOneTimePermissions(@NonNull String packageName,
                int deviceId) {
                int deviceId) {
            List<String> permissions = new ArrayList<>();
            List<String> permissions = new ArrayList<>();
            String persistentDeviceId = getPersistentDeviceId(deviceId);
            if (persistentDeviceId == null) {
                Log.w(LOG_TAG, "No persistence device id found for device : " +  deviceId);
                return permissions;
            }
            Map<String, PermissionManager.PermissionState> permissionStates =
            Map<String, PermissionManager.PermissionState> permissionStates =
                    mPermissionManager.getAllPermissionStates(packageName,
                    mPermissionManager.getAllPermissionStates(packageName, persistentDeviceId);
                            getPersistentDeviceId(deviceId));
            for (Map.Entry<String, PermissionManager.PermissionState> entry :
            for (Map.Entry<String, PermissionManager.PermissionState> entry :
                    permissionStates.entrySet()) {
                    permissionStates.entrySet()) {
                PermissionManager.PermissionState permissionState = entry.getValue();
                PermissionManager.PermissionState permissionState = entry.getValue();
@@ -288,14 +289,16 @@ public class OneTimePermissionUserManager {
            return permissions;
            return permissions;
        }
        }


        private @NonNull String getPersistentDeviceId(int deviceId) {
        private @Nullable String getPersistentDeviceId(int deviceId) {
            VirtualDevice virtualDevice = mVirtualDeviceManagerInternal.getVirtualDevice(deviceId);
            if (deviceId == Context.DEVICE_ID_DEFAULT) {
            String persistentDeviceId = null;
                return VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
            if (virtualDevice != null) {
            }
                persistentDeviceId = virtualDevice.getPersistentDeviceId();
            VirtualDeviceManagerInternal virtualDeviceManagerInternal =
                    LocalServices.getService(VirtualDeviceManagerInternal.class);
            if (virtualDeviceManagerInternal != null) {
                return virtualDeviceManagerInternal.getPersistentIdForDevice(deviceId);
            }
            }
            return persistentDeviceId != null ? persistentDeviceId
            return null;
                    : VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
        }
        }


        public void updateSessionParameters(long timeoutMillis, long revokeAfterKilledDelayMillis) {
        public void updateSessionParameters(long timeoutMillis, long revokeAfterKilledDelayMillis) {