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

Commit f6ad8306 authored by Winson Chiu's avatar Winson Chiu Committed by Android (Google) Code Review
Browse files

Merge "Move PackageUserState into system server"

parents be90a5ea 87b67784
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ import android.content.pm.parsing.ParsingPackageUtils;
import android.content.pm.parsing.result.ParseInput;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseTypeImpl;
import android.content.pm.pkg.PackageUserState;
import android.content.pm.pkg.FrameworkPackageUserState;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
@@ -2130,7 +2130,7 @@ public class ApplicationPackageManager extends PackageManager {
            return null;
        }
        return PackageInfoWithoutStateUtils.generate(result.getResult(), null, flags, 0, 0, null,
                PackageUserState.DEFAULT, UserHandle.getCallingUserId());
                FrameworkPackageUserState.DEFAULT, UserHandle.getCallingUserId());
    }

    @Override
+16 −17
Original line number Diff line number Diff line
@@ -56,9 +56,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.overlay.OverlayPaths;
import android.content.pm.parsing.ParsingPackageUtils;
import android.content.pm.pkg.PackageUserState;
import android.content.pm.pkg.FrameworkPackageUserState;
import android.content.pm.pkg.PackageUserStateUtils;
import android.content.pm.split.SplitAssetLoader;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseTypeImpl;
import android.content.res.ApkAssets;
@@ -645,7 +644,7 @@ public class PackageParser {
     * explicitly wanted all uninstalled and hidden packages as well.
     * @param appInfo The applicationInfo of the app being checked.
     */
    private static boolean checkUseInstalledOrHidden(int flags, PackageUserState state,
    private static boolean checkUseInstalledOrHidden(int flags, FrameworkPackageUserState state,
            ApplicationInfo appInfo) {
        // Returns false if the package is hidden system app until installed.
        if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0
@@ -662,7 +661,7 @@ public class PackageParser {
                        || (flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) != 0));
    }

    public static boolean isAvailable(PackageUserState state) {
    public static boolean isAvailable(FrameworkPackageUserState state) {
        return checkUseInstalledOrHidden(0, state, null);
    }

@@ -675,7 +674,7 @@ public class PackageParser {
    @UnsupportedAppUsage
    public static PackageInfo generatePackageInfo(PackageParser.Package p,
            int[] gids, int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state) {
            Set<String> grantedPermissions, FrameworkPackageUserState state) {

        return generatePackageInfo(p, gids, flags, firstInstallTime, lastUpdateTime,
                grantedPermissions, state, UserHandle.getCallingUserId());
@@ -684,7 +683,7 @@ public class PackageParser {
    @UnsupportedAppUsage
    public static PackageInfo generatePackageInfo(PackageParser.Package p,
            int[] gids, int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId) {
            Set<String> grantedPermissions, FrameworkPackageUserState state, int userId) {

        return generatePackageInfo(p, null, gids, flags, firstInstallTime, lastUpdateTime,
                grantedPermissions, state, userId);
@@ -701,12 +700,12 @@ public class PackageParser {
    public static PackageInfo generatePackageInfo(
            PackageParser.Package pkg, ApexInfo apexInfo, int flags) {
        return generatePackageInfo(pkg, apexInfo, EmptyArray.INT, flags, 0, 0,
                Collections.emptySet(), PackageUserState.DEFAULT, UserHandle.getCallingUserId());
                Collections.emptySet(), FrameworkPackageUserState.DEFAULT, UserHandle.getCallingUserId());
    }

    private static PackageInfo generatePackageInfo(PackageParser.Package p, ApexInfo apexInfo,
            int gids[], int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId) {
            Set<String> grantedPermissions, FrameworkPackageUserState state, int userId) {
        if (!checkUseInstalledOrHidden(flags, state, p.applicationInfo) || !p.isMatch(flags)) {
            return null;
        }
@@ -7883,7 +7882,7 @@ public class PackageParser {
    }

    private static boolean copyNeeded(int flags, Package p,
            PackageUserState state, Bundle metaData, int userId) {
            FrameworkPackageUserState state, Bundle metaData, int userId) {
        if (userId != UserHandle.USER_SYSTEM) {
            // We always need to copy for other users, since we need
            // to fix up the uid.
@@ -7929,12 +7928,12 @@ public class PackageParser {

    @UnsupportedAppUsage
    public static ApplicationInfo generateApplicationInfo(Package p, int flags,
            PackageUserState state) {
            FrameworkPackageUserState state) {
        return generateApplicationInfo(p, flags, state, UserHandle.getCallingUserId());
    }

    private static void updateApplicationInfo(ApplicationInfo ai, int flags,
            PackageUserState state) {
            FrameworkPackageUserState state) {
        // CompatibilityMode is global state.
        if (!sCompatibilityModeEnabled) {
            ai.disableCompatibilityMode();
@@ -7989,7 +7988,7 @@ public class PackageParser {

    @UnsupportedAppUsage
    public static ApplicationInfo generateApplicationInfo(Package p, int flags,
            PackageUserState state, int userId) {
            FrameworkPackageUserState state, int userId) {
        if (p == null) return null;
        if (!checkUseInstalledOrHidden(flags, state, p.applicationInfo) || !p.isMatch(flags)) {
            return null;
@@ -8029,7 +8028,7 @@ public class PackageParser {
    }

    public static ApplicationInfo generateApplicationInfo(ApplicationInfo ai, int flags,
            PackageUserState state, int userId) {
            FrameworkPackageUserState state, int userId) {
        if (ai == null) return null;
        if (!checkUseInstalledOrHidden(flags, state, ai)) {
            return null;
@@ -8188,7 +8187,7 @@ public class PackageParser {

    @UnsupportedAppUsage
    public static final ActivityInfo generateActivityInfo(Activity a, int flags,
            PackageUserState state, int userId) {
            FrameworkPackageUserState state, int userId) {
        if (a == null) return null;
        if (!checkUseInstalledOrHidden(flags, state, a.owner.applicationInfo)) {
            return null;
@@ -8205,7 +8204,7 @@ public class PackageParser {
    }

    public static final ActivityInfo generateActivityInfo(ActivityInfo ai, int flags,
            PackageUserState state, int userId) {
            FrameworkPackageUserState state, int userId) {
        if (ai == null) return null;
        if (!checkUseInstalledOrHidden(flags, state, ai.applicationInfo)) {
            return null;
@@ -8280,7 +8279,7 @@ public class PackageParser {

    @UnsupportedAppUsage
    public static final ServiceInfo generateServiceInfo(Service s, int flags,
            PackageUserState state, int userId) {
            FrameworkPackageUserState state, int userId) {
        if (s == null) return null;
        if (!checkUseInstalledOrHidden(flags, state, s.owner.applicationInfo)) {
            return null;
@@ -8378,7 +8377,7 @@ public class PackageParser {

    @UnsupportedAppUsage
    public static final ProviderInfo generateProviderInfo(Provider p, int flags,
            PackageUserState state, int userId) {
            FrameworkPackageUserState state, int userId) {
        if (p == null) return null;
        if (!checkUseInstalledOrHidden(flags, state, p.owner.applicationInfo)) {
            return null;
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package android.content.pm;

import android.content.pm.pkg.PackageUserState;
import android.content.pm.pkg.FrameworkPackageUserState;

/**
 * Utility methods that need to be used in application space.
@@ -31,7 +31,7 @@ public final class SELinuxUtil {
    public static final String COMPLETE_STR = ":complete";

    /** @hide */
    public static String getSeinfoUser(PackageUserState userState) {
    public static String getSeinfoUser(FrameworkPackageUserState userState) {
        if (userState.isInstantApp()) {
           return INSTANT_APP_STR + COMPLETE_STR;
        }
+25 −25
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ import android.content.pm.parsing.component.ParsedPermissionGroup;
import android.content.pm.parsing.component.ParsedProvider;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.component.ParsedUsesPermission;
import android.content.pm.pkg.PackageUserState;
import android.content.pm.pkg.FrameworkPackageUserState;
import android.content.pm.pkg.PackageUserStateUtils;
import android.os.Environment;
import android.os.UserHandle;
@@ -77,7 +77,7 @@ public class PackageInfoWithoutStateUtils {
    @Nullable
    public static PackageInfo generate(ParsingPackageRead pkg, int[] gids,
            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId) {
            Set<String> grantedPermissions, FrameworkPackageUserState state, int userId) {
        return generateWithComponents(pkg, gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions,
                state, userId, null);
    }
@@ -85,13 +85,13 @@ public class PackageInfoWithoutStateUtils {
    @Nullable
    public static PackageInfo generate(ParsingPackageRead pkg, ApexInfo apexInfo, int flags) {
        return generateWithComponents(pkg, EmptyArray.INT, flags, 0, 0, Collections.emptySet(),
                PackageUserState.DEFAULT, UserHandle.getCallingUserId(), apexInfo);
                FrameworkPackageUserState.DEFAULT, UserHandle.getCallingUserId(), apexInfo);
    }

    @Nullable
    private static PackageInfo generateWithComponents(ParsingPackageRead pkg, int[] gids,
            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId,
            Set<String> grantedPermissions, FrameworkPackageUserState state, int userId,
            @Nullable ApexInfo apexInfo) {
        ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
        if (applicationInfo == null) {
@@ -191,7 +191,7 @@ public class PackageInfoWithoutStateUtils {
    @Nullable
    public static PackageInfo generateWithoutComponents(ParsingPackageRead pkg, int[] gids,
            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId,
            Set<String> grantedPermissions, FrameworkPackageUserState state, int userId,
            @Nullable ApexInfo apexInfo, @NonNull ApplicationInfo applicationInfo) {
        if (!checkUseInstalled(pkg, state, flags)) {
            return null;
@@ -206,12 +206,12 @@ public class PackageInfoWithoutStateUtils {
     * server.
     * <p>
     * Prefer {@link #generateWithoutComponents(ParsingPackageRead, int[], int, long, long, Set,
     * PackageUserState, int, ApexInfo, ApplicationInfo)}.
     * FrameworkPackageUserState, int, ApexInfo, ApplicationInfo)}.
     */
    @NonNull
    public static PackageInfo generateWithoutComponentsUnchecked(ParsingPackageRead pkg, int[] gids,
            @PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId,
            Set<String> grantedPermissions, FrameworkPackageUserState state, int userId,
            @Nullable ApexInfo apexInfo, @NonNull ApplicationInfo applicationInfo) {
        PackageInfo pi = new PackageInfo();
        pi.packageName = pkg.getPackageName();
@@ -365,7 +365,7 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ApplicationInfo generateApplicationInfo(ParsingPackageRead pkg,
            @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId) {
            @PackageManager.ApplicationInfoFlags int flags, FrameworkPackageUserState state, int userId) {
        if (pkg == null) {
            return null;
        }
@@ -382,7 +382,7 @@ public class PackageInfoWithoutStateUtils {
     * This bypasses critical checks that are necessary for usage with data passed outside of system
     * server.
     * <p>
     * Prefer {@link #generateApplicationInfo(ParsingPackageRead, int, PackageUserState, int)}.
     * Prefer {@link #generateApplicationInfo(ParsingPackageRead, int, FrameworkPackageUserState, int)}.
     *
     * @param assignUserFields whether to fill the returned {@link ApplicationInfo} with user
     *                         specific fields. This can be skipped when building from a system
@@ -392,7 +392,7 @@ public class PackageInfoWithoutStateUtils {
     */
    @NonNull
    public static ApplicationInfo generateApplicationInfoUnchecked(@NonNull ParsingPackageRead pkg,
            @PackageManager.ApplicationInfoFlags int flags, @NonNull PackageUserState state,
            @PackageManager.ApplicationInfoFlags int flags, @NonNull FrameworkPackageUserState state,
            int userId, boolean assignUserFields) {
        // Make shallow copy so we can store the metadata/libraries safely
        ApplicationInfo ai = ((ParsingPackageHidden) pkg).toAppInfoWithoutState();
@@ -407,7 +407,7 @@ public class PackageInfoWithoutStateUtils {
    }

    private static void updateApplicationInfo(ApplicationInfo ai, int flags,
            PackageUserState state) {
            FrameworkPackageUserState state) {
        if ((flags & PackageManager.GET_META_DATA) == 0) {
            ai.metaData = null;
        }
@@ -452,7 +452,7 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ApplicationInfo generateDelegateApplicationInfo(@Nullable ApplicationInfo ai,
            @PackageManager.ApplicationInfoFlags int flags, @NonNull PackageUserState state,
            @PackageManager.ApplicationInfoFlags int flags, @NonNull FrameworkPackageUserState state,
            int userId) {
        if (ai == null || !checkUseInstalledOrHidden(flags, state, ai)) {
            return null;
@@ -469,7 +469,7 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ActivityInfo generateDelegateActivityInfo(@Nullable ActivityInfo a,
            @PackageManager.ComponentInfoFlags int flags, @NonNull PackageUserState state,
            @PackageManager.ComponentInfoFlags int flags, @NonNull FrameworkPackageUserState state,
            int userId) {
        if (a == null || !checkUseInstalledOrHidden(flags, state, a.applicationInfo)) {
            return null;
@@ -484,7 +484,7 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ActivityInfo generateActivityInfo(ParsingPackageRead pkg, ParsedActivity a,
            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
            @PackageManager.ComponentInfoFlags int flags, FrameworkPackageUserState state,
            @Nullable ApplicationInfo applicationInfo, int userId) {
        if (a == null) return null;
        if (!checkUseInstalled(pkg, state, flags)) {
@@ -505,7 +505,7 @@ public class PackageInfoWithoutStateUtils {
     * server.
     * <p>
     * Prefer {@link #generateActivityInfo(ParsingPackageRead, ParsedActivity, int,
     * PackageUserState, ApplicationInfo, int)}.
     * FrameworkPackageUserState, ApplicationInfo, int)}.
     */
    @NonNull
    public static ActivityInfo generateActivityInfoUnchecked(@NonNull ParsedActivity a,
@@ -550,13 +550,13 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ActivityInfo generateActivityInfo(ParsingPackageRead pkg, ParsedActivity a,
            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
            @PackageManager.ComponentInfoFlags int flags, FrameworkPackageUserState state, int userId) {
        return generateActivityInfo(pkg, a, flags, state, null, userId);
    }

    @Nullable
    public static ServiceInfo generateServiceInfo(ParsingPackageRead pkg, ParsedService s,
            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
            @PackageManager.ComponentInfoFlags int flags, FrameworkPackageUserState state,
            @Nullable ApplicationInfo applicationInfo, int userId) {
        if (s == null) return null;
        if (!checkUseInstalled(pkg, state, flags)) {
@@ -576,7 +576,7 @@ public class PackageInfoWithoutStateUtils {
     * This bypasses critical checks that are necessary for usage with data passed outside of system
     * server.
     * <p>
     * Prefer {@link #generateServiceInfo(ParsingPackageRead, ParsedService, int, PackageUserState,
     * Prefer {@link #generateServiceInfo(ParsingPackageRead, ParsedService, int, FrameworkPackageUserState,
     * ApplicationInfo, int)}.
     */
    @NonNull
@@ -600,13 +600,13 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ServiceInfo generateServiceInfo(ParsingPackageRead pkg, ParsedService s,
            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
            @PackageManager.ComponentInfoFlags int flags, FrameworkPackageUserState state, int userId) {
        return generateServiceInfo(pkg, s, flags, state, null, userId);
    }

    @Nullable
    public static ProviderInfo generateProviderInfo(ParsingPackageRead pkg, ParsedProvider p,
            @PackageManager.ComponentInfoFlags int flags, PackageUserState state,
            @PackageManager.ComponentInfoFlags int flags, FrameworkPackageUserState state,
            @Nullable ApplicationInfo applicationInfo, int userId) {
        if (p == null) return null;
        if (!checkUseInstalled(pkg, state, flags)) {
@@ -627,7 +627,7 @@ public class PackageInfoWithoutStateUtils {
     * server.
     * <p>
     * Prefer {@link #generateProviderInfo(ParsingPackageRead, ParsedProvider, int,
     * PackageUserState, ApplicationInfo, int)}.
     * FrameworkPackageUserState, ApplicationInfo, int)}.
     */
    @NonNull
    public static ProviderInfo generateProviderInfoUnchecked(@NonNull ParsedProvider p,
@@ -661,13 +661,13 @@ public class PackageInfoWithoutStateUtils {

    @Nullable
    public static ProviderInfo generateProviderInfo(ParsingPackageRead pkg, ParsedProvider p,
            @PackageManager.ComponentInfoFlags int flags, PackageUserState state, int userId) {
            @PackageManager.ComponentInfoFlags int flags, FrameworkPackageUserState state, int userId) {
        return generateProviderInfo(pkg, p, flags, state, null, userId);
    }

    /**
     * @param assignUserFields see {@link #generateApplicationInfoUnchecked(ParsingPackageRead, int,
     *                         PackageUserState, int, boolean)}
     *                         FrameworkPackageUserState, int, boolean)}
     */
    @Nullable
    public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i,
@@ -753,7 +753,7 @@ public class PackageInfoWithoutStateUtils {
        return new Attribution(pa.getTag(), pa.getLabel());
    }

    private static boolean checkUseInstalledOrHidden(int flags, @NonNull PackageUserState state,
    private static boolean checkUseInstalledOrHidden(int flags, @NonNull FrameworkPackageUserState state,
            @Nullable ApplicationInfo appInfo) {
        // Returns false if the package is hidden system app until installed.
        if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0
@@ -882,7 +882,7 @@ public class PackageInfoWithoutStateUtils {
        return privateFlagsExt;
    }

    private static boolean checkUseInstalled(ParsingPackageRead pkg, PackageUserState state,
    private static boolean checkUseInstalled(ParsingPackageRead pkg, FrameworkPackageUserState state,
            @PackageManager.PackageInfoFlags int flags) {
        // If available for the target user
        return PackageUserStateUtils.isAvailable(state, flags);
+5 −4
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.pm.parsing.component.ParsedInstrumentation;
import android.content.pm.parsing.component.ParsedPermission;
import android.content.pm.parsing.component.ParsedProvider;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.pkg.FrameworkPackageUserState;

import com.android.internal.R;

@@ -81,7 +82,7 @@ public interface PkgWithoutStatePackageInfo {
     * provide the same information as {@link ActivityInfo}. Effective state can be queried through
     * {@link android.content.pm.PackageManager#getActivityInfo(ComponentName, int)} or by
     * combining state from from com.android.server.pm.pkg.PackageState and
     * {@link android.content.pm.pkg.PackageUserState}.
     * {@link FrameworkPackageUserState}.
     *
     * @see ActivityInfo
     * @see PackageInfo#activities
@@ -152,7 +153,7 @@ public interface PkgWithoutStatePackageInfo {
     * provide the same information as {@link ProviderInfo}. Effective state can be queried through
     * {@link android.content.pm.PackageManager#getProviderInfo(ComponentName, int)} or by
     * combining state from from com.android.server.pm.pkg.PackageState and
     * {@link android.content.pm.pkg.PackageUserState}.
     * {@link FrameworkPackageUserState}.
     *
     * @see ProviderInfo
     * @see PackageInfo#providers
@@ -167,7 +168,7 @@ public interface PkgWithoutStatePackageInfo {
     * provide the same information as {@link ActivityInfo}. Effective state can be queried through
     * {@link android.content.pm.PackageManager#getReceiverInfo(ComponentName, int)} or by
     * combining state from from com.android.server.pm.pkg.PackageState and
     * {@link android.content.pm.pkg.PackageUserState}.
     * {@link FrameworkPackageUserState}.
     *
     * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even
     * though they represent different functionality.
@@ -221,7 +222,7 @@ public interface PkgWithoutStatePackageInfo {
     * provide the same information as {@link ServiceInfo}. Effective state can be queried through
     * {@link android.content.pm.PackageManager#getServiceInfo(ComponentName, int)} or by
     * combining state from from com.android.server.pm.pkg.PackageState and
     * {@link android.content.pm.pkg.PackageUserState}.
     * {@link FrameworkPackageUserState}.
     *
     * @see ServiceInfo
     * @see PackageInfo#services
Loading