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

Commit 5395a3ce authored by Hall Liu's avatar Hall Liu Committed by android-build-merger
Browse files

Merge "Remove cell info from legacy apps without location on" am: 6b0e7370 am: 1c1b5843

am: 85f47b72

Change-Id: I4bb4fcb6549772ced86030d0ed8cdc3d0ef0eacc
parents 6842ee55 85f47b72
Loading
Loading
Loading
Loading
+1 −31
Original line number Diff line number Diff line
@@ -82,8 +82,7 @@ public final class LocationAccessPolicy {
                    .noteOpNoThrow(opCode, uid, pkgName) != AppOpsManager.MODE_ALLOWED) {
                return false;
            }
            if (!isLocationModeEnabled(context, UserHandle.getUserId(uid))
                    && !isLegacyForeground(context, pkgName, uid)) {
            if (!isLocationModeEnabled(context, UserHandle.getUserId(uid))) {
                return false;
            }
            // If the user or profile is current, permission is granted.
@@ -101,35 +100,6 @@ public final class LocationAccessPolicy {
                && locationMode != Settings.Secure.LOCATION_MODE_SENSORS_ONLY;
    }

    private static boolean isLegacyForeground(@NonNull Context context, @NonNull String pkgName,
            int uid) {
        long token = Binder.clearCallingIdentity();
        try {
            return isLegacyVersion(context, pkgName) && isForegroundApp(context, uid);
        } finally {
            Binder.restoreCallingIdentity(token);
        }
    }

    private static boolean isLegacyVersion(@NonNull Context context, @NonNull String pkgName) {
        try {
            if (context.getPackageManager().getApplicationInfo(pkgName, 0)
                    .targetSdkVersion <= Build.VERSION_CODES.O) {
                return true;
            }
        } catch (PackageManager.NameNotFoundException e) {
            // In case of exception, assume known app (more strict checking)
            // Note: This case will never happen since checkPackage is
            // called to verify validity before checking app's version.
        }
        return false;
    }

    private static boolean isForegroundApp(@NonNull Context context, int uid) {
        final ActivityManager am = context.getSystemService(ActivityManager.class);
        return am.getUidImportance(uid) <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE;
    }

    private static boolean checkInteractAcrossUsersFull(@NonNull Context context) {
        return context.checkCallingOrSelfPermission(
                android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)