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

Commit 29193969 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6478919 from d0df36f2 to rvc-release

Change-Id: I29116fcb81a412595fb1c40509a1fc4b2556acee
parents 76561c0e d0df36f2
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.app.usage.UsageStatsManager
import android.app.usage.UsageStatsManager.INTERVAL_MONTHLY
import android.os.UserHandle
import android.os.UserManager
import com.android.permissioncontroller.DeviceUtils
import com.android.permissioncontroller.PermissionControllerApplication
import com.android.permissioncontroller.permission.utils.Utils
import kotlinx.coroutines.Job
@@ -53,9 +54,13 @@ class UsageStatsLiveData private constructor(

        val now = System.currentTimeMillis()
        val userMap = mutableMapOf<UserHandle, List<UsageStats>>()
        val enabledUsers = app.getSystemService(UserManager::class.java)!!.enabledProfiles
        val userManager = app.getSystemService(UserManager::class.java)!!
        val enabledUsers = userManager.enabledProfiles
        for (user in UsersLiveData.value!!) {
            if (user !in enabledUsers) {
            // If the user is not enabled, or if the user is a managed profile, and this is not an
            // android TV (where parental control accounts are managed profiles), do not get stats.
            if (user !in enabledUsers || (userManager.isManagedProfile(user.identifier) &&
                    !DeviceUtils.isTelevision(app))) {
                continue
            }
            val statsManager = Utils.getUserContext(app, user).getSystemService(
+7 −1
Original line number Diff line number Diff line
@@ -117,6 +117,9 @@ private const val AUTO_REVOKE_ENABLED = true

private var SKIP_NEXT_RUN = false

private val EXEMPT_PERMISSIONS = listOf(
        android.Manifest.permission.ACTIVITY_RECOGNITION)

private val DEFAULT_UNUSED_THRESHOLD_MS =
        if (AUTO_REVOKE_ENABLED) DAYS.toMillis(90) else Long.MAX_VALUE
fun getUnusedThresholdMs(context: Context) = when {
@@ -339,8 +342,11 @@ private suspend fun revokePermissionsOnUnusedApps(context: Context):
                        ?: return@forEachInParallel

                val fixed = group.isBackgroundFixed || group.isForegroundFixed
                val granted = group.permissions.any { (_, perm) ->
                    perm.isGrantedIncludingAppOp && perm.name !in EXEMPT_PERMISSIONS
                }
                if (!fixed &&
                    group.permissions.any { (_, perm) -> perm.isGrantedIncludingAppOp } &&
                    granted &&
                    !group.isGrantedByDefault &&
                    !group.isGrantedByRole &&
                    group.isUserSensitive) {
+2 −9
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.UserHandle;

import androidx.annotation.NonNull;
@@ -37,8 +36,8 @@ import java.util.List;
public class RequiredActivity extends RequiredComponent {

    public RequiredActivity(@NonNull IntentFilterData intentFilterData,
            @Nullable String permission, @NonNull List<RequiredMetaData> metaData) {
        super(intentFilterData, permission, metaData);
            @Nullable String permission) {
        super(intentFilterData, permission);
    }

    @NonNull
@@ -63,10 +62,4 @@ public class RequiredActivity extends RequiredComponent {
    protected String getComponentPermission(@NonNull ResolveInfo resolveInfo) {
        return resolveInfo.activityInfo.permission;
    }

    @Nullable
    @Override
    protected Bundle getComponentMetaData(@NonNull ResolveInfo resolveInfo) {
        return resolveInfo.activityInfo.metaData;
    }
}
+2 −9
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.UserHandle;

import androidx.annotation.NonNull;
@@ -37,8 +36,8 @@ import java.util.List;
public class RequiredBroadcastReceiver extends RequiredComponent {

    public RequiredBroadcastReceiver(@NonNull IntentFilterData intentFilterData,
            @Nullable String permission, @NonNull List<RequiredMetaData> metaData) {
        super(intentFilterData, permission, metaData);
            @Nullable String permission) {
        super(intentFilterData, permission);
    }

    @NonNull
@@ -62,10 +61,4 @@ public class RequiredBroadcastReceiver extends RequiredComponent {
    protected String getComponentPermission(@NonNull ResolveInfo resolveInfo) {
        return resolveInfo.activityInfo.permission;
    }

    @Nullable
    @Override
    protected Bundle getComponentMetaData(@NonNull ResolveInfo resolveInfo) {
        return resolveInfo.activityInfo.metaData;
    }
}
+6 −62
Original line number Diff line number Diff line
@@ -21,11 +21,9 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
import android.util.ArraySet;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -39,8 +37,6 @@ import java.util.Objects;
 */
public abstract class RequiredComponent {

    private static final String LOG_TAG = RequiredComponent.class.getSimpleName();

    /**
     * The {@code Intent} or {@code IntentFilter} data to match the components.
     */
@@ -56,20 +52,10 @@ public abstract class RequiredComponent {
    @Nullable
    private final String mPermission;

    /**
     * The meta data required on a component for match to succeed.
     *
     * @see android.content.pm.PackageItemInfo#metaData
     */
    @NonNull
    private final List<RequiredMetaData> mMetaData;

    public RequiredComponent(@NonNull IntentFilterData intentFilterData,
            @Nullable String permission,
            @NonNull List<RequiredMetaData> metaData) {
            @Nullable String permission) {
        mIntentFilterData = intentFilterData;
        mPermission = permission;
        mMetaData = metaData;
    }

    @NonNull
@@ -82,11 +68,6 @@ public abstract class RequiredComponent {
        return mPermission;
    }

    @NonNull
    public List<RequiredMetaData> getMetaData() {
        return mMetaData;
    }

    /**
     * Get the component that matches this required component within a package, if any.
     *
@@ -127,13 +108,9 @@ public abstract class RequiredComponent {
        if (packageName != null) {
            intent.setPackage(packageName);
        }
        int flags = PackageManager.MATCH_DIRECT_BOOT_AWARE
                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
        boolean hasMetaData = !mMetaData.isEmpty();
        if (hasMetaData) {
            flags |= PackageManager.GET_META_DATA;
        }
        List<ResolveInfo> resolveInfos = queryIntentComponentsAsUser(intent, flags, user, context);
        List<ResolveInfo> resolveInfos = queryIntentComponentsAsUser(intent,
                PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
                user, context);

        ArraySet<String> componentPackageNames = new ArraySet<>();
        List<ComponentName> componentNames = new ArrayList<>();
@@ -148,27 +125,6 @@ public abstract class RequiredComponent {
                }
            }

            if (hasMetaData) {
                Bundle componentMetaData = getComponentMetaData(resolveInfo);
                if (componentMetaData == null) {
                    Log.w(LOG_TAG, "Component meta data is null");
                    continue;
                }
                boolean isMetaDataQualified = true;
                int metaDataSize = mMetaData.size();
                for (int metaDataIndex = 0; metaDataIndex < metaDataSize; metaDataIndex++) {
                    RequiredMetaData metaData = mMetaData.get(metaDataIndex);

                    if (!metaData.isQualified(componentMetaData)) {
                        isMetaDataQualified = false;
                        break;
                    }
                }
                if (!isMetaDataQualified) {
                    continue;
                }
            }

            ComponentName componentName = getComponentComponentName(resolveInfo);
            String componentPackageName = componentName.getPackageName();
            if (componentPackageNames.contains(componentPackageName)) {
@@ -216,22 +172,11 @@ public abstract class RequiredComponent {
    @Nullable
    protected abstract String getComponentPermission(@NonNull ResolveInfo resolveInfo);

    /**
     * Get the meta data associated with a component.
     *
     * @param resolveInfo the {@code ResolveInfo} of the component
     *
     * @return the meta data associated with a component
     */
    @Nullable
    protected abstract Bundle getComponentMetaData(@NonNull ResolveInfo resolveInfo);

    @Override
    public String toString() {
        return "RequiredComponent{"
                + "mIntentFilterData=" + mIntentFilterData
                + ", mPermission='" + mPermission + '\''
                + ", mMetaData=" + mMetaData
                + '}';
    }

@@ -245,12 +190,11 @@ public abstract class RequiredComponent {
        }
        RequiredComponent that = (RequiredComponent) object;
        return Objects.equals(mIntentFilterData, that.mIntentFilterData)
                && Objects.equals(mPermission, that.mPermission)
                && Objects.equals(mMetaData, that.mMetaData);
                && Objects.equals(mPermission, that.mPermission);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mIntentFilterData, mPermission, mMetaData);
        return Objects.hash(mIntentFilterData, mPermission);
    }
}
Loading