summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Iván Budnik <ivanbuper@google.com> 2023-09-11 15:45:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-09-11 15:45:14 +0000
commitdf3bcae609c8db75a4182c30d4877cc91b9bfdf9 (patch)
treea6bc06e7f47f3e41702b8cbaf652d844ae73becc
parent153ebba97c6aadbceac12efd5dd558d18b7713b0 (diff)
parent66c6215a2b41574334b8d7e7f4d353a4b1343376 (diff)
Merge "Non-functionally simplify permission checking logic" into main
-rw-r--r--services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java55
1 files changed, 31 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 5b870692e348..e53835548e12 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -22,7 +22,6 @@ import static android.content.Intent.ACTION_SCREEN_ON;
import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR;
import static android.media.MediaRouter2Utils.getOriginalId;
import static android.media.MediaRouter2Utils.getProviderId;
-
import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
import static com.android.server.media.MediaFeatureFlagManager.FEATURE_SCANNING_MINIMUM_PACKAGE_IMPORTANCE;
@@ -214,17 +213,16 @@ class MediaRouter2ServiceImpl {
@NonNull
public List<MediaRoute2Info> getSystemRoutes() {
final int uid = Binder.getCallingUid();
+ final int pid = Binder.getCallingPid();
final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier();
- final boolean hasModifyAudioRoutingPermission = mContext.checkCallingOrSelfPermission(
- android.Manifest.permission.MODIFY_AUDIO_ROUTING)
- == PackageManager.PERMISSION_GRANTED;
+ final boolean hasSystemRoutingPermission = checkCallerHasSystemRoutingPermissions(pid, uid);
final long token = Binder.clearCallingIdentity();
try {
Collection<MediaRoute2Info> systemRoutes;
synchronized (mLock) {
UserRecord userRecord = getOrCreateUserRecordLocked(userId);
- if (hasModifyAudioRoutingPermission) {
+ if (hasSystemRoutingPermission) {
MediaRoute2ProviderInfo providerInfo =
userRecord.mHandler.mSystemProvider.getProviderInfo();
if (providerInfo != null) {
@@ -255,9 +253,8 @@ class MediaRouter2ServiceImpl {
final boolean hasConfigureWifiDisplayPermission = mContext.checkCallingOrSelfPermission(
android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
== PackageManager.PERMISSION_GRANTED;
- final boolean hasModifyAudioRoutingPermission = mContext.checkCallingOrSelfPermission(
- android.Manifest.permission.MODIFY_AUDIO_ROUTING)
- == PackageManager.PERMISSION_GRANTED;
+ final boolean hasModifyAudioRoutingPermission =
+ checkCallerHasModifyAudioRoutingPermission(pid, uid);
final long token = Binder.clearCallingIdentity();
try {
@@ -666,17 +663,17 @@ class MediaRouter2ServiceImpl {
public RoutingSessionInfo getSystemSessionInfo(
@Nullable String packageName, boolean setDeviceRouteSelected) {
final int uid = Binder.getCallingUid();
+ final int pid = Binder.getCallingPid();
final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier();
- final boolean hasModifyAudioRoutingPermission = mContext.checkCallingOrSelfPermission(
- android.Manifest.permission.MODIFY_AUDIO_ROUTING)
- == PackageManager.PERMISSION_GRANTED;
+ final boolean hasSystemRoutingPermissions =
+ checkCallerHasSystemRoutingPermissions(pid, uid);
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
UserRecord userRecord = getOrCreateUserRecordLocked(userId);
List<RoutingSessionInfo> sessionInfos;
- if (hasModifyAudioRoutingPermission) {
+ if (hasSystemRoutingPermissions) {
if (setDeviceRouteSelected) {
// Return a fake system session that shows the device route as selected and
// available bluetooth routes as transferable.
@@ -707,6 +704,25 @@ class MediaRouter2ServiceImpl {
}
}
+ private boolean checkCallerHasSystemRoutingPermissions(int pid, int uid) {
+ return checkCallerHasModifyAudioRoutingPermission(pid, uid);
+ }
+
+ private boolean checkCallerHasModifyAudioRoutingPermission(int pid, int uid) {
+ return mContext.checkPermission(Manifest.permission.MODIFY_AUDIO_ROUTING, pid, uid)
+ == PackageManager.PERMISSION_GRANTED;
+ }
+
+ private boolean checkCallerHasBluetoothPermissions(int pid, int uid) {
+ boolean hasBluetoothRoutingPermission = true;
+ for (String permission : BLUETOOTH_PERMISSIONS_FOR_SYSTEM_ROUTING) {
+ hasBluetoothRoutingPermission &=
+ mContext.checkPermission(permission, pid, uid)
+ == PackageManager.PERMISSION_GRANTED;
+ }
+ return hasBluetoothRoutingPermission;
+ }
+
// End of methods that implements operations for both MediaRouter2 and MediaRouter2Manager.
public void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
@@ -1587,20 +1603,11 @@ class MediaRouter2ServiceImpl {
mPid = pid;
mHasConfigureWifiDisplayPermission = hasConfigureWifiDisplayPermission;
mHasModifyAudioRoutingPermission = hasModifyAudioRoutingPermission;
- mHasBluetoothRoutingPermission = new AtomicBoolean(fetchBluetoothPermission());
+ mHasBluetoothRoutingPermission =
+ new AtomicBoolean(checkCallerHasBluetoothPermissions(mPid, mUid));
mRouterId = mNextRouterOrManagerId.getAndIncrement();
}
- private boolean fetchBluetoothPermission() {
- boolean hasBluetoothRoutingPermission = true;
- for (String permission : BLUETOOTH_PERMISSIONS_FOR_SYSTEM_ROUTING) {
- hasBluetoothRoutingPermission &=
- mContext.checkPermission(permission, mPid, mUid)
- == PackageManager.PERMISSION_GRANTED;
- }
- return hasBluetoothRoutingPermission;
- }
-
/**
* Returns whether the corresponding router has permission to query and control system
* routes.
@@ -1611,7 +1618,7 @@ class MediaRouter2ServiceImpl {
public void maybeUpdateSystemRoutingPermissionLocked() {
boolean oldSystemRoutingPermissionValue = hasSystemRoutingPermission();
- mHasBluetoothRoutingPermission.set(fetchBluetoothPermission());
+ mHasBluetoothRoutingPermission.set(checkCallerHasBluetoothPermissions(mPid, mUid));
boolean newSystemRoutingPermissionValue = hasSystemRoutingPermission();
if (oldSystemRoutingPermissionValue != newSystemRoutingPermissionValue) {
Map<String, MediaRoute2Info> routesToReport =