Merge "Revert "Introduce a new thread in system_server for the PermisisonController""
This commit is contained in:
committed by
Android (Google) Code Review
commit
c382ad1f81
@@ -1,84 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.server;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerExecutor;
|
||||
import android.os.Looper;
|
||||
import android.os.Trace;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.server.ServiceThread;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* Shared singleton thread for the system. This is a thread for handling
|
||||
* calls to and from the PermissionController and handling synchronization
|
||||
* between permissions and appops states.
|
||||
*/
|
||||
public final class PermissionThread extends ServiceThread {
|
||||
private static final long SLOW_DISPATCH_THRESHOLD_MS = 100;
|
||||
private static final long SLOW_DELIVERY_THRESHOLD_MS = 200;
|
||||
|
||||
private static final Object sLock = new Object();
|
||||
|
||||
@GuardedBy("sLock")
|
||||
private static PermissionThread sInstance;
|
||||
private static Handler sHandler;
|
||||
private static HandlerExecutor sHandlerExecutor;
|
||||
|
||||
private PermissionThread() {
|
||||
super("android.perm", android.os.Process.THREAD_PRIORITY_DEFAULT, /* allowIo= */ true);
|
||||
}
|
||||
|
||||
private static void ensureThreadLocked() {
|
||||
if (sInstance != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
sInstance = new PermissionThread();
|
||||
sInstance.start();
|
||||
final Looper looper = sInstance.getLooper();
|
||||
looper.setTraceTag(Trace.TRACE_TAG_SYSTEM_SERVER);
|
||||
looper.setSlowLogThresholdMs(
|
||||
SLOW_DISPATCH_THRESHOLD_MS, SLOW_DELIVERY_THRESHOLD_MS);
|
||||
sHandler = new Handler(sInstance.getLooper());
|
||||
sHandlerExecutor = new HandlerExecutor(sHandler);
|
||||
}
|
||||
|
||||
public static PermissionThread get() {
|
||||
synchronized (sLock) {
|
||||
ensureThreadLocked();
|
||||
return sInstance;
|
||||
}
|
||||
}
|
||||
|
||||
public static Handler getHandler() {
|
||||
synchronized (sLock) {
|
||||
ensureThreadLocked();
|
||||
return sHandler;
|
||||
}
|
||||
}
|
||||
|
||||
public static Executor getExecutor() {
|
||||
synchronized (sLock) {
|
||||
ensureThreadLocked();
|
||||
return sHandlerExecutor;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,6 @@ import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.server.PermissionThread;
|
||||
|
||||
/**
|
||||
* Class that handles one-time permissions for a user
|
||||
@@ -80,8 +79,7 @@ public class OneTimePermissionUserManager {
|
||||
mContext = context;
|
||||
mActivityManager = context.getSystemService(ActivityManager.class);
|
||||
mAlarmManager = context.getSystemService(AlarmManager.class);
|
||||
mPermissionControllerManager = new PermissionControllerManager(
|
||||
mContext, PermissionThread.getHandler());
|
||||
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
|
||||
mHandler = context.getMainThreadHandler();
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,6 @@ import com.android.internal.util.function.TriFunction;
|
||||
import com.android.internal.util.function.pooled.PooledLambda;
|
||||
import com.android.server.FgThread;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.PermissionThread;
|
||||
import com.android.server.ServiceThread;
|
||||
import com.android.server.SystemConfig;
|
||||
import com.android.server.Watchdog;
|
||||
@@ -2057,7 +2056,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
private byte[] backupRuntimePermissions(@UserIdInt int userId) {
|
||||
CompletableFuture<byte[]> backup = new CompletableFuture<>();
|
||||
mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId),
|
||||
PermissionThread.getExecutor(), backup::complete);
|
||||
mContext.getMainExecutor(), backup::complete);
|
||||
|
||||
try {
|
||||
return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
|
||||
@@ -2102,7 +2101,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
}
|
||||
}
|
||||
mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName,
|
||||
UserHandle.of(userId), PermissionThread.getExecutor(), (hasMoreBackup) -> {
|
||||
UserHandle.of(userId), mContext.getMainExecutor(), (hasMoreBackup) -> {
|
||||
if (hasMoreBackup) {
|
||||
return;
|
||||
}
|
||||
@@ -4551,8 +4550,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
mPermissionControllerManager = new PermissionControllerManager(
|
||||
mContext, PermissionThread.getHandler());
|
||||
mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class);
|
||||
mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -64,8 +64,8 @@ import com.android.internal.app.IAppOpsService;
|
||||
import com.android.internal.infra.AndroidFuture;
|
||||
import com.android.internal.util.IntPair;
|
||||
import com.android.internal.util.function.pooled.PooledLambda;
|
||||
import com.android.server.FgThread;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.PermissionThread;
|
||||
import com.android.server.SystemService;
|
||||
import com.android.server.pm.UserManagerInternal;
|
||||
import com.android.server.pm.parsing.pkg.AndroidPackage;
|
||||
@@ -279,7 +279,7 @@ public final class PermissionPolicyService extends SystemService {
|
||||
PermissionControllerManager manager = mPermControllerManagers.get(user);
|
||||
if (manager == null) {
|
||||
manager = new PermissionControllerManager(
|
||||
getUserContext(getContext(), user), PermissionThread.getHandler());
|
||||
getUserContext(getContext(), user), FgThread.getHandler());
|
||||
mPermControllerManagers.put(user, manager);
|
||||
}
|
||||
manager.updateUserSensitiveForApp(uid);
|
||||
@@ -287,9 +287,8 @@ public final class PermissionPolicyService extends SystemService {
|
||||
}, UserHandle.ALL, intentFilter, null, null);
|
||||
|
||||
PermissionControllerManager manager = new PermissionControllerManager(
|
||||
getUserContext(getContext(), Process.myUserHandle()),
|
||||
PermissionThread.getHandler());
|
||||
PermissionThread.getHandler().postDelayed(manager::updateUserSensitive,
|
||||
getUserContext(getContext(), Process.myUserHandle()), FgThread.getHandler());
|
||||
FgThread.getHandler().postDelayed(manager::updateUserSensitive,
|
||||
USER_SENSITIVE_UPDATE_DELAY_MS);
|
||||
}
|
||||
|
||||
@@ -316,7 +315,7 @@ public final class PermissionPolicyService extends SystemService {
|
||||
if (isStarted(changedUserId)) {
|
||||
synchronized (mLock) {
|
||||
if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) {
|
||||
PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage(
|
||||
FgThread.getHandler().sendMessage(PooledLambda.obtainMessage(
|
||||
PermissionPolicyService
|
||||
::synchronizePackagePermissionsAndAppOpsForUser,
|
||||
this, packageName, changedUserId));
|
||||
@@ -422,9 +421,9 @@ public final class PermissionPolicyService extends SystemService {
|
||||
final PermissionControllerManager permissionControllerManager =
|
||||
new PermissionControllerManager(
|
||||
getUserContext(getContext(), UserHandle.of(userId)),
|
||||
PermissionThread.getHandler());
|
||||
FgThread.getHandler());
|
||||
permissionControllerManager.grantOrUpgradeDefaultRuntimePermissions(
|
||||
PermissionThread.getExecutor(), successful -> {
|
||||
FgThread.getExecutor(), successful -> {
|
||||
if (successful) {
|
||||
future.complete(null);
|
||||
} else {
|
||||
@@ -528,7 +527,7 @@ public final class PermissionPolicyService extends SystemService {
|
||||
synchronized (mLock) {
|
||||
if (!mIsUidSyncScheduled.get(uid)) {
|
||||
mIsUidSyncScheduled.put(uid, true);
|
||||
PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage(
|
||||
FgThread.getHandler().sendMessage(PooledLambda.obtainMessage(
|
||||
PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid,
|
||||
this, uid));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user