Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43fcb49a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Delay update of all apps' user sensitive state" into rvc-dev am: eb84f960 am: 8d72cb0a

Change-Id: I73d6973c93d92e410f8035076d7880fc0b9c1c08
parents b5ed6e6c 8d72cb0a
Loading
Loading
Loading
Loading
+16 −21
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTIO
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_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.MATCH_ALL;

@@ -45,7 +47,6 @@ import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManagerInternal.PackageListObserver;
import android.content.pm.PermissionInfo;
import android.os.Build;
import android.os.Handler;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -57,7 +58,6 @@ import android.provider.Telephony;
import android.telecom.TelecomManager;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
import android.util.LongSparseLongArray;
import android.util.Pair;
import android.util.Slog;
@@ -93,6 +93,7 @@ import java.util.concurrent.ExecutionException;
public final class PermissionPolicyService extends SystemService {
    private static final String LOG_TAG = PermissionPolicyService.class.getSimpleName();
    private static final boolean DEBUG = false;
    private static final long USER_SENSITIVE_UPDATE_DELAY_MS = 10000;

    private final Object mLock = new Object();

@@ -378,8 +379,6 @@ public final class PermissionPolicyService extends SystemService {
     * TODO ntmyren: Remove once propagated, and state is repaired
     */
    private void restoreReadPhoneStatePermissions(int userId) {
        PermissionControllerManager manager = new PermissionControllerManager(this.getContext(),
                Handler.getMain());
        PackageManager pm = getContext().getPackageManager();
        List<PackageInfo> packageInfos = pm.getInstalledPackagesAsUser(
                MATCH_ALL | GET_PERMISSIONS, userId);
@@ -389,26 +388,21 @@ public final class PermissionPolicyService extends SystemService {
                continue;
            }

            boolean hasReadPhoneState = false;
            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)) {
                    hasReadPhoneState = true;
                }
            }
            if (!hasReadPhoneState) {
                continue;
            }

            Log.i(LOG_TAG, "Updating read phone state for " + pI.packageName + " "
                    + pI.applicationInfo.uid);
            manager.updateUserSensitiveForApp(pI.applicationInfo.uid);

            UserHandle user = UserHandle.getUserHandleForUid(pI.applicationInfo.uid);
            int permFlags = pm.getPermissionFlags(READ_PHONE_STATE, pI.packageName, user);
            if ((permFlags & FLAG_PERMISSION_AUTO_REVOKED) != 0) {
                    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;
                }
            }
        }
    }

@@ -460,7 +454,8 @@ public final class PermissionPolicyService extends SystemService {
                throw new IllegalStateException(e);
            }

            permissionControllerManager.updateUserSensitive();
            FgThread.getHandler().postDelayed(permissionControllerManager::updateUserSensitive,
                    USER_SENSITIVE_UPDATE_DELAY_MS);

            packageManagerInternal.updateRuntimePermissionsFingerprint(userId);
        }