From 3a7a73f58da3d961d6f69ad530032e25a8636390 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Tue, 22 Mar 2022 16:51:07 -0700 Subject: [PATCH] Exempt TV devices from Notification Permission Do not implicitly add the notification permission to apps on TV devices, and automatically grant the permission as GRANTED_BY_DEFAULT to explicit requesters. Bug: 220968160 Test: Manual Change-Id: I9aeef86871ab7ca912cc30e1cf4ebd84d7014992 Merged-In: I9aeef86871ab7ca912cc30e1cf4ebd84d7014992 --- .../server/notification/PermissionHelper.java | 13 +++++++++++-- .../pm/permission/PermissionManagerServiceImpl.java | 11 +++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/notification/PermissionHelper.java b/services/core/java/com/android/server/notification/PermissionHelper.java index b4230c11bcab3..a09aa7cea0a4d 100644 --- a/services/core/java/com/android/server/notification/PermissionHelper.java +++ b/services/core/java/com/android/server/notification/PermissionHelper.java @@ -55,8 +55,10 @@ public final class PermissionHelper { private final PermissionManagerServiceInternal mPmi; private final IPackageManager mPackageManager; private final IPermissionManager mPermManager; - // TODO (b/194833441): Remove when the migration is enabled + // TODO (b/194833441): Remove this boolean (but keep the isMigrationEnabled() method) + // when the migration is enabled private final boolean mMigrationEnabled; + private final boolean mIsTv; private final boolean mForceUserSetOnUpgrade; public PermissionHelper(PermissionManagerServiceInternal pmi, IPackageManager packageManager, @@ -67,10 +69,17 @@ public final class PermissionHelper { mPermManager = permManager; mMigrationEnabled = migrationEnabled; mForceUserSetOnUpgrade = forceUserSetOnUpgrade; + boolean isTv; + try { + isTv = mPackageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK, 0); + } catch (RemoteException e) { + isTv = false; + } + mIsTv = isTv; } public boolean isMigrationEnabled() { - return mMigrationEnabled; + return mMigrationEnabled && !mIsTv; } /** diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java index c524fb7ae9e57..d11ea532f140f 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java @@ -297,6 +297,8 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt .OnRuntimePermissionStateChangedListener> mRuntimePermissionStateChangedListeners = new ArrayList<>(); + private final boolean mIsLeanback; + @NonNull private final OnPermissionChangeListeners mOnPermissionChangeListeners; @@ -380,6 +382,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt mContext = context; mPackageManagerInt = LocalServices.getService(PackageManagerInternal.class); mUserManagerInt = LocalServices.getService(UserManagerInternal.class); + mIsLeanback = availableFeatures.containsKey(PackageManager.FEATURE_LEANBACK); mPrivilegedPermissionAllowlistSourcePackageNames.add(PLATFORM_PACKAGE_NAME); // PackageManager.hasSystemFeature() is not used here because PackageManagerService @@ -2822,6 +2825,14 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt } } } + if (mIsLeanback && NOTIFICATION_PERMISSIONS.contains(permName)) { + uidState.grantPermission(bp); + if (origPermState == null || !origPermState.isGranted()) { + if (uidState.grantPermission(bp)) { + wasChanged = true; + } + } + } } else { if (origPermState == null) { // New permission