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

Commit 01e38f40 authored by Winson's avatar Winson
Browse files

Separate ParsingPackage into core and ParsedPackage into server

PackageParser exists in the core framework SDK, and so callers
to it would not not expect a call into the system server.

However, some planned features require parts of parsing to exist
in the server so that package state/settings contained in the
server can be applied to the package.

To resolve this, separate ParsingPackage and ParsedPackage
through a hard boundary, where ParsingPackageImpl is roughly
equivalent to the previous PackageImpl, and the new PackageImpl
is everything that should exist in the server and not core.

This also copies over documentation and cleans up the data models
significantly. The fields have been moved to @NonNull, and in
preparation for true immutability, all Collection structures
have moved to generic types and assigned Collections#empty_().

This begins moving away from @hide AppInfo fields, so internal
use of flags/privateFlags is deprecated. It is now replaced by
straight booleans. For simplicity's sake, existing flags have
also been migrated.

This is split for readability and will not compile without
the followup commits.

Bug: 135203078

Test: atest com.android.server.pm.parsing
Test: atest PackageParserTest
Test: atest PackageParserLegacyCoreTest
Test: atest ScanTests
Test: atest ParallelPackageParserTest
Test: manual toggle and run AndroidPackageParsingTestBase

Change-Id: Ib4fe51d729a56bfb0ea1316e577358ba0dfceccf
parent 913b79a6
Loading
Loading
Loading
Loading
+31 −31
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@

package android.content.pm.parsing;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Intent;
import android.content.pm.ConfigurationInfo;
@@ -28,23 +29,23 @@ import android.content.pm.parsing.ComponentParseUtils.ParsedFeature;
import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation;
import android.content.pm.parsing.ComponentParseUtils.ParsedPermission;
import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup;
import android.content.pm.parsing.ComponentParseUtils.ParsedProcess;
import android.content.pm.parsing.ComponentParseUtils.ParsedProvider;
import android.content.pm.parsing.ComponentParseUtils.ParsedService;
import android.os.Bundle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.SparseArray;

import java.security.PublicKey;
import java.util.Map;
import java.util.Set;

/**
 * Methods used for mutation during direct package parsing.
 *
 * Java disallows defining this as an inner interface, so this must be a separate file.
 *
 * @hide
 */
public interface ParsingPackage extends AndroidPackage {
@SuppressWarnings("UnusedReturnValue")
public interface ParsingPackage extends ParsingPackageRead {

    ParsingPackage addActivity(ParsedActivity parsedActivity);

@@ -66,18 +67,18 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage addOverlayable(String overlayableName, String actorName);

    ParsingPackage addFeature(ParsedFeature permission);

    ParsingPackage addPermission(ParsedPermission permission);

    ParsingPackage addPermissionGroup(ParsedPermissionGroup permissionGroup);

    ParsingPackage addPreferredActivityFilter(ParsedActivityIntentInfo activityIntentInfo);
    ParsingPackage addPreferredActivityFilter(ParsedActivityIntentInfo intentInfo);

    ParsingPackage addProtectedBroadcast(String protectedBroadcast);

    ParsingPackage addProvider(ParsedProvider parsedProvider);

    ParsingPackage addFeature(ParsedFeature permission);

    ParsingPackage addReceiver(ParsedActivity parsedReceiver);

    ParsingPackage addReqFeature(FeatureInfo reqFeature);
@@ -102,7 +103,7 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage addQueriesProvider(String authority);

    ParsingPackage setProcesses(ArrayMap<String, ComponentParseUtils.ParsedProcess> processes);
    ParsingPackage setProcesses(@NonNull Map<String, ParsedProcess> processes);

    ParsingPackage asSplit(
            String[] splitNames,
@@ -111,7 +112,7 @@ public interface ParsingPackage extends AndroidPackage {
            @Nullable SparseArray<int[]> splitDependencies
    );

    ParsingPackage setAppMetaData(Bundle appMetaData);
    ParsingPackage setMetaData(Bundle metaData);

    ParsingPackage setForceQueryable(boolean forceQueryable);

@@ -119,8 +120,6 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setMinAspectRatio(float minAspectRatio);

    ParsingPackage setName(String name);

    ParsingPackage setPermission(String permission);

    ParsingPackage setProcessName(String processName);
@@ -137,9 +136,9 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setBaseHardwareAccelerated(boolean baseHardwareAccelerated);

    ParsingPackage setActivitiesResizeModeResizeable(boolean resizeable);
    ParsingPackage setResizeableActivity(Boolean resizeable);

    ParsingPackage setActivitiesResizeModeResizeableViaSdkVersion(boolean resizeableViaSdkVersion);
    ParsingPackage setResizeableActivityViaSdkVersion(boolean resizeableViaSdkVersion);

    ParsingPackage setAllowAudioPlaybackCapture(boolean allowAudioPlaybackCapture);

@@ -151,7 +150,7 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setAllowTaskReparenting(boolean allowTaskReparenting);

    ParsingPackage setIsOverlay(boolean isOverlay);
    ParsingPackage setOverlay(boolean isOverlay);

    ParsingPackage setBackupInForeground(boolean backupInForeground);

@@ -173,7 +172,7 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setHasFragileUserData(boolean hasFragileUserData);

    ParsingPackage setIsGame(boolean isGame);
    ParsingPackage setGame(boolean isGame);

    ParsingPackage setIsolatedSplitLoading(boolean isolatedSplitLoading);

@@ -221,8 +220,6 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setAppComponentFactory(String appComponentFactory);

    ParsingPackage setApplicationVolumeUuid(String applicationVolumeUuid);

    ParsingPackage setBackupAgentName(String backupAgentName);

    ParsingPackage setBanner(int banner);
@@ -233,8 +230,6 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setClassName(String className);

    ParsingPackage setCodePath(String codePath);

    ParsingPackage setCompatibleWidthLimitDp(int compatibleWidthLimitDp);

    ParsingPackage setDescriptionRes(int descriptionRes);
@@ -247,8 +242,6 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setHasDomainUrls(boolean hasDomainUrls);

    ParsingPackage setIcon(int icon);

    ParsingPackage setIconRes(int iconRes);

    ParsingPackage setInstallLocation(int installLocation);
@@ -307,17 +300,17 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage setSupportsSmallScreens(int supportsSmallScreens);

    ParsingPackage setSupportsXLargeScreens(int supportsXLargeScreens);
    ParsingPackage setSupportsExtraLargeScreens(int supportsExtraLargeScreens);

    ParsingPackage setTargetSandboxVersion(int targetSandboxVersion);

    ParsingPackage setTheme(int theme);

    ParsingPackage setUpgradeKeySets(ArraySet<String> upgradeKeySets);
    ParsingPackage setUpgradeKeySets(@NonNull Set<String> upgradeKeySets);

    ParsingPackage setUse32BitAbi(boolean use32BitAbi);

    ParsingPackage setVolumeUuid(String volumeUuid);
    ParsingPackage setVolumeUuid(@Nullable String volumeUuid);

    ParsingPackage setZygotePreloadName(String zygotePreloadName);

@@ -327,17 +320,24 @@ public interface ParsingPackage extends AndroidPackage {

    ParsingPackage sortServices();

    ParsedPackage hideAsParsed();

    ParsingPackage setBaseRevisionCode(int baseRevisionCode);

    ParsingPackage setPreferredOrder(int preferredOrder);

    ParsingPackage setVersionName(String versionName);

    ParsingPackage setCompileSdkVersion(int compileSdkVersion);

    ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename);

    boolean usesCompatibilityMode();
    // TODO(b/135203078): This class no longer has access to ParsedPackage, find a replacement
    //  for moving to the next step
    @Deprecated
    Object hideAsParsed();

    //TODO(b/135203078): Remove in favor of individual methods
    @Deprecated
    int getFlags();

    //TODO(b/135203078): Remove in favor of individual methods
    @Deprecated
    int getPrivateFlags();
}
+844 −0

File added.

Preview size limit exceeded, changes collapsed.

+368 −0

File changed and moved.

Preview size limit exceeded, changes collapsed.

Loading