Merge "Simulate installer denying USE_FULL_SCREEN_INTENT unless allowlisted." into udc-dev

This commit is contained in:
Hai Zhang
2023-04-11 20:25:43 +00:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 0 deletions

View File

@@ -1373,6 +1373,9 @@
<!-- Number of notifications to keep in the notification service historical archive -->
<integer name="config_notificationServiceArchiveSize">100</integer>
<!-- List of packages that will be able to use full screen intent in notifications by default -->
<string-array name="config_useFullScreenIntentPackages" translatable="false" />
<!-- Allow the menu hard key to be disabled in LockScreen on some devices -->
<bool name="config_disableMenuKeyInLockScreen">false</bool>

View File

@@ -2017,6 +2017,7 @@
<java-symbol type="integer" name="config_notificationsBatteryMediumARGB" />
<java-symbol type="integer" name="config_notificationsBatteryNearlyFullLevel" />
<java-symbol type="integer" name="config_notificationServiceArchiveSize" />
<java-symbol type="array" name="config_useFullScreenIntentPackages" />
<java-symbol type="integer" name="config_previousVibrationsDumpLimit" />
<java-symbol type="integer" name="config_defaultVibrationAmplitude" />
<java-symbol type="dimen" name="config_hapticChannelMaxVibrationAmplitude" />

View File

@@ -23,6 +23,7 @@ import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_DEFAULT;
import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_DENIED;
import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_GRANTED;
import static android.content.pm.PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION;
@@ -3655,6 +3656,26 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
for (String permission : pkg.getRequestedPermissions()) {
Integer permissionState = permissionStates.get(permission);
if (Objects.equals(permission, Manifest.permission.USE_FULL_SCREEN_INTENT)
&& permissionState == null) {
final PackageStateInternal ps;
final long token = Binder.clearCallingIdentity();
try {
ps = mPackageManagerInt.getPackageStateInternal(pkg.getPackageName());
} finally {
Binder.restoreCallingIdentity(token);
}
final String[] useFullScreenIntentPackageNames =
mContext.getResources().getStringArray(
com.android.internal.R.array.config_useFullScreenIntentPackages);
final boolean canUseFullScreenIntent = (ps != null && ps.isSystem())
|| ArrayUtils.contains(useFullScreenIntentPackageNames,
pkg.getPackageName());
permissionState = canUseFullScreenIntent ? PERMISSION_STATE_GRANTED
: PERMISSION_STATE_DENIED;
}
if (permissionState == null || permissionState == PERMISSION_STATE_DEFAULT) {
continue;
}