Loading services/core/java/com/android/server/PermissionThread.javadeleted 100644 → 0 +0 −84 Original line number Original line Diff line number Diff line /* * 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; } } } No newline at end of file services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java +1 −3 Original line number Original line Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.util.Log; import android.util.SparseArray; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.server.PermissionThread; /** /** * Class that handles one-time permissions for a user * Class that handles one-time permissions for a user Loading Loading @@ -80,8 +79,7 @@ public class OneTimePermissionUserManager { mContext = context; mContext = context; mActivityManager = context.getSystemService(ActivityManager.class); mActivityManager = context.getSystemService(ActivityManager.class); mAlarmManager = context.getSystemService(AlarmManager.class); mAlarmManager = context.getSystemService(AlarmManager.class); mPermissionControllerManager = new PermissionControllerManager( mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class); mContext, PermissionThread.getHandler()); mHandler = context.getMainThreadHandler(); mHandler = context.getMainThreadHandler(); } } Loading services/core/java/com/android/server/pm/permission/PermissionManagerService.java +3 −5 Original line number Original line Diff line number Diff line Loading @@ -145,7 +145,6 @@ import com.android.internal.util.function.TriFunction; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.LocalServices; import com.android.server.PermissionThread; import com.android.server.ServiceThread; import com.android.server.ServiceThread; import com.android.server.SystemConfig; import com.android.server.SystemConfig; import com.android.server.Watchdog; import com.android.server.Watchdog; Loading Loading @@ -2057,7 +2056,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { private byte[] backupRuntimePermissions(@UserIdInt int userId) { private byte[] backupRuntimePermissions(@UserIdInt int userId) { CompletableFuture<byte[]> backup = new CompletableFuture<>(); CompletableFuture<byte[]> backup = new CompletableFuture<>(); mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId), mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId), PermissionThread.getExecutor(), backup::complete); mContext.getMainExecutor(), backup::complete); try { try { return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); Loading Loading @@ -2102,7 +2101,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } } } mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName, mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName, UserHandle.of(userId), PermissionThread.getExecutor(), (hasMoreBackup) -> { UserHandle.of(userId), mContext.getMainExecutor(), (hasMoreBackup) -> { if (hasMoreBackup) { if (hasMoreBackup) { return; return; } } Loading Loading @@ -4551,8 +4550,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } } } mPermissionControllerManager = new PermissionControllerManager( mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class); mContext, PermissionThread.getHandler()); mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class); mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class); } } Loading services/core/java/com/android/server/policy/PermissionPolicyService.java +8 −9 Original line number Original line Diff line number Diff line Loading @@ -64,8 +64,8 @@ import com.android.internal.app.IAppOpsService; import com.android.internal.infra.AndroidFuture; import com.android.internal.infra.AndroidFuture; import com.android.internal.util.IntPair; import com.android.internal.util.IntPair; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.LocalServices; import com.android.server.PermissionThread; import com.android.server.SystemService; import com.android.server.SystemService; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackage; Loading Loading @@ -279,7 +279,7 @@ public final class PermissionPolicyService extends SystemService { PermissionControllerManager manager = mPermControllerManagers.get(user); PermissionControllerManager manager = mPermControllerManagers.get(user); if (manager == null) { if (manager == null) { manager = new PermissionControllerManager( manager = new PermissionControllerManager( getUserContext(getContext(), user), PermissionThread.getHandler()); getUserContext(getContext(), user), FgThread.getHandler()); mPermControllerManagers.put(user, manager); mPermControllerManagers.put(user, manager); } } manager.updateUserSensitiveForApp(uid); manager.updateUserSensitiveForApp(uid); Loading @@ -287,9 +287,8 @@ public final class PermissionPolicyService extends SystemService { }, UserHandle.ALL, intentFilter, null, null); }, UserHandle.ALL, intentFilter, null, null); PermissionControllerManager manager = new PermissionControllerManager( PermissionControllerManager manager = new PermissionControllerManager( getUserContext(getContext(), Process.myUserHandle()), getUserContext(getContext(), Process.myUserHandle()), FgThread.getHandler()); PermissionThread.getHandler()); FgThread.getHandler().postDelayed(manager::updateUserSensitive, PermissionThread.getHandler().postDelayed(manager::updateUserSensitive, USER_SENSITIVE_UPDATE_DELAY_MS); USER_SENSITIVE_UPDATE_DELAY_MS); } } Loading @@ -316,7 +315,7 @@ public final class PermissionPolicyService extends SystemService { if (isStarted(changedUserId)) { if (isStarted(changedUserId)) { synchronized (mLock) { synchronized (mLock) { if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) { if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) { PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage( FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( PermissionPolicyService PermissionPolicyService ::synchronizePackagePermissionsAndAppOpsForUser, ::synchronizePackagePermissionsAndAppOpsForUser, this, packageName, changedUserId)); this, packageName, changedUserId)); Loading Loading @@ -422,9 +421,9 @@ public final class PermissionPolicyService extends SystemService { final PermissionControllerManager permissionControllerManager = final PermissionControllerManager permissionControllerManager = new PermissionControllerManager( new PermissionControllerManager( getUserContext(getContext(), UserHandle.of(userId)), getUserContext(getContext(), UserHandle.of(userId)), PermissionThread.getHandler()); FgThread.getHandler()); permissionControllerManager.grantOrUpgradeDefaultRuntimePermissions( permissionControllerManager.grantOrUpgradeDefaultRuntimePermissions( PermissionThread.getExecutor(), successful -> { FgThread.getExecutor(), successful -> { if (successful) { if (successful) { future.complete(null); future.complete(null); } else { } else { Loading Loading @@ -528,7 +527,7 @@ public final class PermissionPolicyService extends SystemService { synchronized (mLock) { synchronized (mLock) { if (!mIsUidSyncScheduled.get(uid)) { if (!mIsUidSyncScheduled.get(uid)) { mIsUidSyncScheduled.put(uid, true); mIsUidSyncScheduled.put(uid, true); PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage( FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid, PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid, this, uid)); this, uid)); } } Loading Loading
services/core/java/com/android/server/PermissionThread.javadeleted 100644 → 0 +0 −84 Original line number Original line Diff line number Diff line /* * 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; } } } No newline at end of file
services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java +1 −3 Original line number Original line Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.util.Log; import android.util.SparseArray; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.server.PermissionThread; /** /** * Class that handles one-time permissions for a user * Class that handles one-time permissions for a user Loading Loading @@ -80,8 +79,7 @@ public class OneTimePermissionUserManager { mContext = context; mContext = context; mActivityManager = context.getSystemService(ActivityManager.class); mActivityManager = context.getSystemService(ActivityManager.class); mAlarmManager = context.getSystemService(AlarmManager.class); mAlarmManager = context.getSystemService(AlarmManager.class); mPermissionControllerManager = new PermissionControllerManager( mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class); mContext, PermissionThread.getHandler()); mHandler = context.getMainThreadHandler(); mHandler = context.getMainThreadHandler(); } } Loading
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +3 −5 Original line number Original line Diff line number Diff line Loading @@ -145,7 +145,6 @@ import com.android.internal.util.function.TriFunction; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.LocalServices; import com.android.server.PermissionThread; import com.android.server.ServiceThread; import com.android.server.ServiceThread; import com.android.server.SystemConfig; import com.android.server.SystemConfig; import com.android.server.Watchdog; import com.android.server.Watchdog; Loading Loading @@ -2057,7 +2056,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { private byte[] backupRuntimePermissions(@UserIdInt int userId) { private byte[] backupRuntimePermissions(@UserIdInt int userId) { CompletableFuture<byte[]> backup = new CompletableFuture<>(); CompletableFuture<byte[]> backup = new CompletableFuture<>(); mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId), mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId), PermissionThread.getExecutor(), backup::complete); mContext.getMainExecutor(), backup::complete); try { try { return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); Loading Loading @@ -2102,7 +2101,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } } } mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName, mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName, UserHandle.of(userId), PermissionThread.getExecutor(), (hasMoreBackup) -> { UserHandle.of(userId), mContext.getMainExecutor(), (hasMoreBackup) -> { if (hasMoreBackup) { if (hasMoreBackup) { return; return; } } Loading Loading @@ -4551,8 +4550,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } } } mPermissionControllerManager = new PermissionControllerManager( mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class); mContext, PermissionThread.getHandler()); mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class); mPermissionPolicyInternal = LocalServices.getService(PermissionPolicyInternal.class); } } Loading
services/core/java/com/android/server/policy/PermissionPolicyService.java +8 −9 Original line number Original line Diff line number Diff line Loading @@ -64,8 +64,8 @@ import com.android.internal.app.IAppOpsService; import com.android.internal.infra.AndroidFuture; import com.android.internal.infra.AndroidFuture; import com.android.internal.util.IntPair; import com.android.internal.util.IntPair; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.LocalServices; import com.android.server.PermissionThread; import com.android.server.SystemService; import com.android.server.SystemService; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.UserManagerInternal; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackage; Loading Loading @@ -279,7 +279,7 @@ public final class PermissionPolicyService extends SystemService { PermissionControllerManager manager = mPermControllerManagers.get(user); PermissionControllerManager manager = mPermControllerManagers.get(user); if (manager == null) { if (manager == null) { manager = new PermissionControllerManager( manager = new PermissionControllerManager( getUserContext(getContext(), user), PermissionThread.getHandler()); getUserContext(getContext(), user), FgThread.getHandler()); mPermControllerManagers.put(user, manager); mPermControllerManagers.put(user, manager); } } manager.updateUserSensitiveForApp(uid); manager.updateUserSensitiveForApp(uid); Loading @@ -287,9 +287,8 @@ public final class PermissionPolicyService extends SystemService { }, UserHandle.ALL, intentFilter, null, null); }, UserHandle.ALL, intentFilter, null, null); PermissionControllerManager manager = new PermissionControllerManager( PermissionControllerManager manager = new PermissionControllerManager( getUserContext(getContext(), Process.myUserHandle()), getUserContext(getContext(), Process.myUserHandle()), FgThread.getHandler()); PermissionThread.getHandler()); FgThread.getHandler().postDelayed(manager::updateUserSensitive, PermissionThread.getHandler().postDelayed(manager::updateUserSensitive, USER_SENSITIVE_UPDATE_DELAY_MS); USER_SENSITIVE_UPDATE_DELAY_MS); } } Loading @@ -316,7 +315,7 @@ public final class PermissionPolicyService extends SystemService { if (isStarted(changedUserId)) { if (isStarted(changedUserId)) { synchronized (mLock) { synchronized (mLock) { if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) { if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) { PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage( FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( PermissionPolicyService PermissionPolicyService ::synchronizePackagePermissionsAndAppOpsForUser, ::synchronizePackagePermissionsAndAppOpsForUser, this, packageName, changedUserId)); this, packageName, changedUserId)); Loading Loading @@ -422,9 +421,9 @@ public final class PermissionPolicyService extends SystemService { final PermissionControllerManager permissionControllerManager = final PermissionControllerManager permissionControllerManager = new PermissionControllerManager( new PermissionControllerManager( getUserContext(getContext(), UserHandle.of(userId)), getUserContext(getContext(), UserHandle.of(userId)), PermissionThread.getHandler()); FgThread.getHandler()); permissionControllerManager.grantOrUpgradeDefaultRuntimePermissions( permissionControllerManager.grantOrUpgradeDefaultRuntimePermissions( PermissionThread.getExecutor(), successful -> { FgThread.getExecutor(), successful -> { if (successful) { if (successful) { future.complete(null); future.complete(null); } else { } else { Loading Loading @@ -528,7 +527,7 @@ public final class PermissionPolicyService extends SystemService { synchronized (mLock) { synchronized (mLock) { if (!mIsUidSyncScheduled.get(uid)) { if (!mIsUidSyncScheduled.get(uid)) { mIsUidSyncScheduled.put(uid, true); mIsUidSyncScheduled.put(uid, true); PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage( FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid, PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid, this, uid)); this, uid)); } } Loading