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

Commit 8063670c authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Restrict logging for auto revoke" into rvc-dev

parents 8b064f26 c47bb266
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.permissioncontroller.permission.ui.handheld.AutoRevokeFragmen
import com.android.permissioncontroller.permission.ui.handheld.PermissionAppsFragment;
import com.android.permissioncontroller.permission.ui.legacy.AppPermissionActivity;
import com.android.permissioncontroller.permission.ui.wear.AppPermissionsFragmentWear;
import com.android.permissioncontroller.permission.utils.KotlinUtils;
import com.android.permissioncontroller.permission.utils.Utils;

import java.util.Random;
@@ -181,12 +182,15 @@ public final class ManagePermissionsActivity extends FragmentActivity {
                                APP_PERMISSION_GROUPS_FRAGMENT_AUTO_REVOKE_ACTION, sessionId, uid,
                                packageName, autoRevokeAction);
                    } else {
                        if (KotlinUtils.INSTANCE.isROrAutoRevokeEnabled(getApplication(),
                                packageName, userHandle)) {
                            Log.i(LOG_TAG, "sessionId: " + sessionId
                                + " Reaching AppPermissionGroupsFragment from intent. packageName "
                                + packageName + " uid " + uid);
                                    + " Reaching AppPermissionGroupsFragment from intent. "
                                    + "packageName " + packageName + " uid " + uid);
                            PermissionControllerStatsLog.write(
                                APP_PERMISSION_GROUPS_FRAGMENT_AUTO_REVOKE_ACTION, sessionId, uid,
                                packageName, openFromIntentAction);
                                    APP_PERMISSION_GROUPS_FRAGMENT_AUTO_REVOKE_ACTION, sessionId,
                                    uid, packageName, openFromIntentAction);
                        }
                    }
                } catch (PackageManager.NameNotFoundException e) {
                    // Do no logging
+28 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.app.AppOpsManager
import android.app.AppOpsManager.MODE_ALLOWED
import android.app.AppOpsManager.MODE_FOREGROUND
import android.app.AppOpsManager.MODE_IGNORED
import android.app.AppOpsManager.OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED
import android.app.AppOpsManager.permissionToOp
import android.app.Application
import android.content.Context
@@ -336,6 +337,33 @@ object KotlinUtils {
        }
    }

    /**
     * Determines if an app is R or above, or if it is Q-, and has auto revoke enabled
     *
     * @param app The currenct application
     * @param packageName The package name to check
     * @param user The user whose package we want to check
     *
     * @return true if the package is R+ (and not a work profile) or has auto revoke enabled
     */
    fun isROrAutoRevokeEnabled(app: Application, packageName: String, user: UserHandle): Boolean {
        val userContext = Utils.getUserContext(app, user)
        val liveDataValue = LightPackageInfoLiveData[packageName, user].value
        val (targetSdk, uid) = if (liveDataValue != null) {
            liveDataValue.targetSdkVersion to liveDataValue.uid
        } else {
            val appInfo = userContext.packageManager.getApplicationInfo(packageName, 0)
            appInfo.targetSdkVersion to appInfo.uid
        }

        if (targetSdk <= Build.VERSION_CODES.Q) {
            val opsManager = app.getSystemService(AppOpsManager::class.java)!!
            return opsManager.unsafeCheckOpNoThrow(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, uid,
                packageName) == MODE_ALLOWED
        }
        return true
    }

    /**
     * Grant all foreground runtime permissions of a LightAppPermGroup
     *