Merge "Remove temp READ_PHONE_STATE fix" into rvc-dev am: 1b9895eb46

Change-Id: Icd9fa28fe5d28c12e0628f9ff5f9e84183ee7d8e
This commit is contained in:
TreeHugger Robot
2020-05-21 03:53:47 +00:00
committed by Automerger Merge Worker

View File

@@ -16,19 +16,14 @@
package com.android.server.policy; package com.android.server.policy;
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_FOREGROUND; import static android.app.AppOpsManager.MODE_FOREGROUND;
import static android.app.AppOpsManager.MODE_IGNORED; import static android.app.AppOpsManager.MODE_IGNORED;
import static android.app.AppOpsManager.OP_NONE; import static android.app.AppOpsManager.OP_NONE;
import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION; import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION;
import static android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED; import static android.content.pm.PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT; import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED;
import static android.content.pm.PackageManager.GET_PERMISSIONS; import static android.content.pm.PackageManager.GET_PERMISSIONS;
import static android.content.pm.PackageManager.MATCH_ALL;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
@@ -366,46 +361,12 @@ public final class PermissionPolicyService extends SystemService {
// Force synchronization as permissions might have changed // Force synchronization as permissions might have changed
synchronizePermissionsAndAppOpsForUser(userId); synchronizePermissionsAndAppOpsForUser(userId);
restoreReadPhoneStatePermissions(userId);
// Tell observers we are initialized for this user. // Tell observers we are initialized for this user.
if (callback != null) { if (callback != null) {
callback.onInitialized(userId); callback.onInitialized(userId);
} }
} }
/**
* Ensure READ_PHONE_STATE user sensitive flags are assigned properly
* TODO ntmyren: Remove once propagated, and state is repaired
*/
private void restoreReadPhoneStatePermissions(int userId) {
PackageManager pm = getContext().getPackageManager();
List<PackageInfo> packageInfos = pm.getInstalledPackagesAsUser(
MATCH_ALL | GET_PERMISSIONS, userId);
for (int i = packageInfos.size() - 1; i >= 0; i--) {
PackageInfo pI = packageInfos.get(i);
if (pI.requestedPermissions == null) {
continue;
}
UserHandle user = UserHandle.getUserHandleForUid(pI.applicationInfo.uid);
for (int j = pI.requestedPermissions.length - 1; j >= 0; j--) {
if (pI.requestedPermissions[j].equals(READ_PHONE_STATE)) {
int flags = pm.getPermissionFlags(READ_PHONE_STATE, pI.packageName, user);
// If the app is auto revoked for read phone state, and is only user sensitive
// when granted, clear auto revoked flag.
if ((flags & FLAG_PERMISSION_AUTO_REVOKED) != 0
&& (flags & FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) != 0
&& (flags & FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED) == 0) {
pm.updatePermissionFlags(READ_PHONE_STATE, pI.packageName,
FLAG_PERMISSION_AUTO_REVOKED, 0, user);
}
break;
}
}
}
}
@Override @Override
public void onStopUser(@UserIdInt int userId) { public void onStopUser(@UserIdInt int userId) {
if (DEBUG) Slog.i(LOG_TAG, "onStopUser(" + userId + ")"); if (DEBUG) Slog.i(LOG_TAG, "onStopUser(" + userId + ")");