Merge "Revert "Per user setting for instant app""
This commit is contained in:
@@ -1687,7 +1687,7 @@ public class ApplicationPackageManager extends PackageManager {
|
||||
public int installExistingPackageAsUser(String packageName, int userId)
|
||||
throws NameNotFoundException {
|
||||
try {
|
||||
int res = mPM.installExistingPackageAsUser(packageName, userId, 0 /*installFlags*/,
|
||||
int res = mPM.installExistingPackageAsUser(packageName, userId,
|
||||
PackageManager.INSTALL_REASON_UNKNOWN);
|
||||
if (res == INSTALL_FAILED_INVALID_URI) {
|
||||
throw new NameNotFoundException("Package " + packageName + " doesn't exist");
|
||||
|
||||
@@ -284,6 +284,8 @@ public class IntentFilter implements Parcelable {
|
||||
|
||||
/** Whether or not the intent filter is visible to ephemeral apps. */
|
||||
private boolean mVisibleToEphemeral;
|
||||
/** Whether or not the intent filter is part of an ephemeral app. */
|
||||
private boolean mEphemeral;
|
||||
// These functions are the start of more optimized code for managing
|
||||
// the string sets... not yet implemented.
|
||||
|
||||
@@ -654,10 +656,19 @@ public class IntentFilter implements Parcelable {
|
||||
mVisibleToEphemeral = visibleToEmphemeral;
|
||||
}
|
||||
/** @hide */
|
||||
public boolean isVisibleToInstantApp() {
|
||||
public boolean isVisibleToEphemeral() {
|
||||
return mVisibleToEphemeral;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void setEphemeral(boolean ephemeral) {
|
||||
mEphemeral = ephemeral;
|
||||
}
|
||||
/** @hide */
|
||||
public boolean isEphemeral() {
|
||||
return mEphemeral;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new Intent action to match against. If any actions are included
|
||||
* in the filter, then an Intent's action must be one of those values for
|
||||
|
||||
@@ -498,12 +498,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
public static final int PRIVATE_FLAG_DIRECT_BOOT_AWARE = 1 << 6;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: {@code true} if the application is installed
|
||||
* as instant app.
|
||||
*
|
||||
* @hide
|
||||
* Value for {@link #flags}: {@code true} if the application is blocked via restrictions
|
||||
* and for most purposes is considered as not installed.
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_INSTANT = 1 << 7;
|
||||
public static final int PRIVATE_FLAG_EPHEMERAL = 1 << 7;
|
||||
|
||||
/**
|
||||
* When set, at least one component inside this application is direct boot
|
||||
@@ -682,21 +681,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public String seInfo = "default";
|
||||
|
||||
/**
|
||||
* The seinfo tag generated per-user. This value may change based upon the
|
||||
* user's configuration. For example, when an instant app is installed for
|
||||
* a user. It is an error if this field is ever {@code null} when trying to
|
||||
* start a new process.
|
||||
* <p>NOTE: We need to separate this out because we modify per-user values
|
||||
* multiple times. This needs to be refactored since we're performing more
|
||||
* work than necessary and these values should only be set once. When that
|
||||
* happens, we can merge the per-user value with the seInfo state above.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public String seInfoUser;
|
||||
public String seinfo = "default";
|
||||
|
||||
/**
|
||||
* Paths to all shared libraries this application is linked against. This
|
||||
@@ -1024,9 +1009,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
if (resourceDirs != null) {
|
||||
pw.println(prefix + "resourceDirs=" + Arrays.toString(resourceDirs));
|
||||
}
|
||||
if ((flags&DUMP_FLAG_DETAILS) != 0 && seInfo != null) {
|
||||
pw.println(prefix + "seinfo=" + seInfo);
|
||||
pw.println(prefix + "seinfoUser=" + seInfoUser);
|
||||
if ((flags&DUMP_FLAG_DETAILS) != 0 && seinfo != null) {
|
||||
pw.println(prefix + "seinfo=" + seinfo);
|
||||
}
|
||||
pw.println(prefix + "dataDir=" + dataDir);
|
||||
if ((flags&DUMP_FLAG_DETAILS) != 0) {
|
||||
@@ -1136,8 +1120,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
primaryCpuAbi = orig.primaryCpuAbi;
|
||||
secondaryCpuAbi = orig.secondaryCpuAbi;
|
||||
resourceDirs = orig.resourceDirs;
|
||||
seInfo = orig.seInfo;
|
||||
seInfoUser = orig.seInfoUser;
|
||||
seinfo = orig.seinfo;
|
||||
sharedLibraryFiles = orig.sharedLibraryFiles;
|
||||
dataDir = orig.dataDir;
|
||||
deviceEncryptedDataDir = deviceProtectedDataDir = orig.deviceProtectedDataDir;
|
||||
@@ -1198,8 +1181,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
dest.writeString(primaryCpuAbi);
|
||||
dest.writeString(secondaryCpuAbi);
|
||||
dest.writeStringArray(resourceDirs);
|
||||
dest.writeString(seInfo);
|
||||
dest.writeString(seInfoUser);
|
||||
dest.writeString(seinfo);
|
||||
dest.writeStringArray(sharedLibraryFiles);
|
||||
dest.writeString(dataDir);
|
||||
dest.writeString(deviceProtectedDataDir);
|
||||
@@ -1260,8 +1242,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
primaryCpuAbi = source.readString();
|
||||
secondaryCpuAbi = source.readString();
|
||||
resourceDirs = source.readStringArray();
|
||||
seInfo = source.readString();
|
||||
seInfoUser = source.readString();
|
||||
seinfo = source.readString();
|
||||
sharedLibraryFiles = source.readStringArray();
|
||||
dataDir = source.readString();
|
||||
deviceEncryptedDataDir = deviceProtectedDataDir = source.readString();
|
||||
@@ -1349,6 +1330,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
} else {
|
||||
dataDir = credentialProtectedDataDir;
|
||||
}
|
||||
// TODO: modify per-user ephemerality
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1433,7 +1415,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
public boolean isInstantApp() {
|
||||
return (privateFlags & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0;
|
||||
return (privateFlags & ApplicationInfo.PRIVATE_FLAG_EPHEMERAL) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -553,8 +553,7 @@ interface IPackageManager {
|
||||
boolean setInstallLocation(int loc);
|
||||
int getInstallLocation();
|
||||
|
||||
int installExistingPackageAsUser(String packageName, int userId, int installFlags,
|
||||
int installReason);
|
||||
int installExistingPackageAsUser(String packageName, int userId, int installReason);
|
||||
|
||||
void verifyPendingInstall(int id, int verificationCode);
|
||||
void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay);
|
||||
|
||||
@@ -1096,11 +1096,9 @@ public class PackageInstaller {
|
||||
@SystemApi
|
||||
public void setInstallAsInstantApp(boolean isInstantApp) {
|
||||
if (isInstantApp) {
|
||||
installFlags |= PackageManager.INSTALL_INSTANT_APP;
|
||||
installFlags &= ~PackageManager.INSTALL_FULL_APP;
|
||||
installFlags |= PackageManager.INSTALL_EPHEMERAL;
|
||||
} else {
|
||||
installFlags &= ~PackageManager.INSTALL_INSTANT_APP;
|
||||
installFlags |= PackageManager.INSTALL_FULL_APP;
|
||||
installFlags &= ~PackageManager.INSTALL_EPHEMERAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -452,17 +452,17 @@ public abstract class PackageManager {
|
||||
|
||||
/**
|
||||
* Internal {@link PackageInfo} flag: include components that are part of an
|
||||
* instant app. By default, instant app components are not matched.
|
||||
* ephemeral app. By default, ephemeral components are not matched.
|
||||
* @hide
|
||||
*/
|
||||
public static final int MATCH_INSTANT = 0x00800000;
|
||||
public static final int MATCH_EPHEMERAL = 0x00800000;
|
||||
|
||||
/**
|
||||
* Internal {@link PackageInfo} flag: include only components that are exposed to
|
||||
* ephemeral apps.
|
||||
* @hide
|
||||
*/
|
||||
public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000;
|
||||
public static final int MATCH_VISIBLE_TO_EPHEMERAL_ONLY = 0x01000000;
|
||||
|
||||
/**
|
||||
* Internal flag used to indicate that a system component has done their
|
||||
@@ -613,7 +613,7 @@ public abstract class PackageManager {
|
||||
INSTALL_GRANT_RUNTIME_PERMISSIONS,
|
||||
INSTALL_FORCE_VOLUME_UUID,
|
||||
INSTALL_FORCE_PERMISSION_PROMPT,
|
||||
INSTALL_INSTANT_APP,
|
||||
INSTALL_EPHEMERAL,
|
||||
INSTALL_DONT_KILL_APP,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@@ -714,16 +714,7 @@ public abstract class PackageManager {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int INSTALL_INSTANT_APP = 0x00000800;
|
||||
|
||||
/**
|
||||
* Flag parameter for {@link #installPackage} to indicate that this package is
|
||||
* to be installed as a heavy weight app. This is fundamentally the opposite of
|
||||
* {@link #INSTALL_INSTANT_APP}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int INSTALL_FULL_APP = 0x00004000;
|
||||
public static final int INSTALL_EPHEMERAL = 0x00000800;
|
||||
|
||||
/**
|
||||
* Flag parameter for {@link #installPackage} to indicate that this package contains
|
||||
@@ -1194,12 +1185,12 @@ public abstract class PackageManager {
|
||||
public static final int INSTALL_FAILED_ABORTED = -115;
|
||||
|
||||
/**
|
||||
* Installation failed return code: instant app installs are incompatible with some
|
||||
* Installation failed return code: ephemeral app installs are incompatible with some
|
||||
* other installation flags supplied for the operation; or other circumstances such
|
||||
* as trying to upgrade a system app via an instant app install.
|
||||
* as trying to upgrade a system app via an ephemeral install.
|
||||
* @hide
|
||||
*/
|
||||
public static final int INSTALL_FAILED_INSTANT_APP_INVALID = -116;
|
||||
public static final int INSTALL_FAILED_EPHEMERAL_INVALID = -116;
|
||||
|
||||
/** @hide */
|
||||
@IntDef(flag = true, value = {
|
||||
|
||||
@@ -720,8 +720,6 @@ public class PackageParser {
|
||||
public final static int PARSE_COLLECT_CERTIFICATES = 1<<8;
|
||||
public final static int PARSE_TRUSTED_OVERLAY = 1<<9;
|
||||
public final static int PARSE_ENFORCE_CODE = 1<<10;
|
||||
/** @deprecated remove when fixing b/34761192 */
|
||||
@Deprecated
|
||||
public final static int PARSE_IS_EPHEMERAL = 1<<11;
|
||||
public final static int PARSE_FORCE_SDK = 1<<12;
|
||||
|
||||
@@ -2014,6 +2012,10 @@ public class PackageParser {
|
||||
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
|
||||
}
|
||||
|
||||
if ((flags & PARSE_IS_EPHEMERAL) != 0) {
|
||||
pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_EPHEMERAL;
|
||||
}
|
||||
|
||||
if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifest_isolatedSplits, false)) {
|
||||
pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING;
|
||||
}
|
||||
@@ -4147,8 +4149,11 @@ public class PackageParser {
|
||||
ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE;
|
||||
}
|
||||
|
||||
final boolean visibleToEphemeral =
|
||||
sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false);
|
||||
final boolean hasVisibleToEphemeral =
|
||||
sa.hasValue(R.styleable.AndroidManifestActivity_visibleToInstantApps);
|
||||
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
|
||||
final boolean visibleToEphemeral = isEphemeral
|
||||
|| sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false);
|
||||
if (visibleToEphemeral) {
|
||||
a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
@@ -4183,6 +4188,8 @@ public class PackageParser {
|
||||
intent, outError)) {
|
||||
return null;
|
||||
}
|
||||
intent.setEphemeral(isEphemeral);
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
if (intent.countActions() == 0) {
|
||||
Slog.w(TAG, "No actions in intent filter at "
|
||||
+ mArchiveSourcePath + " "
|
||||
@@ -4191,8 +4198,7 @@ public class PackageParser {
|
||||
a.intents.add(intent);
|
||||
}
|
||||
// adjust activity flags when we implicitly expose it via a browsable filter
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
if (intent.isVisibleToInstantApp()) {
|
||||
if (!hasVisibleToEphemeral && intent.isVisibleToEphemeral()) {
|
||||
a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
} else if (!receiver && parser.getName().equals("preferred")) {
|
||||
@@ -4201,6 +4207,8 @@ public class PackageParser {
|
||||
intent, outError)) {
|
||||
return null;
|
||||
}
|
||||
intent.setEphemeral(isEphemeral);
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
if (intent.countActions() == 0) {
|
||||
Slog.w(TAG, "No actions in preferred at "
|
||||
+ mArchiveSourcePath + " "
|
||||
@@ -4212,8 +4220,7 @@ public class PackageParser {
|
||||
owner.preferredActivityFilters.add(intent);
|
||||
}
|
||||
// adjust activity flags when we implicitly expose it via a browsable filter
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
if (intent.isVisibleToInstantApp()) {
|
||||
if (!hasVisibleToEphemeral && intent.isVisibleToEphemeral()) {
|
||||
a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
} else if (parser.getName().equals("meta-data")) {
|
||||
@@ -4465,8 +4472,9 @@ public class PackageParser {
|
||||
}
|
||||
|
||||
// TODO add visibleToInstantApps attribute to activity alias
|
||||
final boolean visibleToEphemeral =
|
||||
((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0);
|
||||
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
|
||||
final boolean visibleToEphemeral = isEphemeral
|
||||
|| ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0);
|
||||
|
||||
sa.recycle();
|
||||
|
||||
@@ -4494,12 +4502,13 @@ public class PackageParser {
|
||||
+ mArchiveSourcePath + " "
|
||||
+ parser.getPositionDescription());
|
||||
} else {
|
||||
intent.setVisibleToEphemeral(
|
||||
visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
intent.setEphemeral(isEphemeral);
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral
|
||||
|| isWebBrowsableIntent(intent));
|
||||
a.intents.add(intent);
|
||||
}
|
||||
// adjust activity flags when we implicitly expose it via a browsable filter
|
||||
if (intent.isVisibleToInstantApp()) {
|
||||
if (intent.isVisibleToEphemeral()) {
|
||||
a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
} else if (parser.getName().equals("meta-data")) {
|
||||
@@ -4640,8 +4649,11 @@ public class PackageParser {
|
||||
ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE;
|
||||
}
|
||||
|
||||
final boolean visibleToEphemeral =
|
||||
sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false);
|
||||
final boolean hasVisibleToEphemeral =
|
||||
sa.hasValue(R.styleable.AndroidManifestProvider_visibleToInstantApps);
|
||||
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
|
||||
final boolean visibleToEphemeral = isEphemeral
|
||||
|| sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false);
|
||||
if (visibleToEphemeral) {
|
||||
p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
@@ -4669,7 +4681,7 @@ public class PackageParser {
|
||||
p.info.authority = cpname.intern();
|
||||
|
||||
if (!parseProviderTags(
|
||||
res, parser, visibleToEphemeral, p, outError)) {
|
||||
res, parser, isEphemeral, hasVisibleToEphemeral, visibleToEphemeral, p, outError)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -4677,7 +4689,8 @@ public class PackageParser {
|
||||
}
|
||||
|
||||
private boolean parseProviderTags(Resources res, XmlResourceParser parser,
|
||||
boolean visibleToEphemeral, Provider outInfo, String[] outError)
|
||||
boolean isEphemeral, boolean hasVisibleToEphemeral, boolean visibleToEphemeral,
|
||||
Provider outInfo, String[] outError)
|
||||
throws XmlPullParserException, IOException {
|
||||
int outerDepth = parser.getDepth();
|
||||
int type;
|
||||
@@ -4694,10 +4707,11 @@ public class PackageParser {
|
||||
intent, outError)) {
|
||||
return false;
|
||||
}
|
||||
intent.setEphemeral(isEphemeral);
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
outInfo.intents.add(intent);
|
||||
// adjust provider flags when we implicitly expose it via a browsable filter
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
if (intent.isVisibleToInstantApp()) {
|
||||
if (!hasVisibleToEphemeral && intent.isVisibleToEphemeral()) {
|
||||
outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
|
||||
@@ -4949,8 +4963,11 @@ public class PackageParser {
|
||||
ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE;
|
||||
}
|
||||
|
||||
final boolean visibleToEphemeral =
|
||||
sa.getBoolean(R.styleable.AndroidManifestService_visibleToInstantApps, false);
|
||||
final boolean hasVisibleToEphemeral =
|
||||
sa.hasValue(R.styleable.AndroidManifestService_visibleToInstantApps);
|
||||
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
|
||||
final boolean visibleToEphemeral = isEphemeral
|
||||
|| sa.getBoolean(R.styleable.AndroidManifestService_visibleToInstantApps, false);
|
||||
if (visibleToEphemeral) {
|
||||
s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
@@ -4982,9 +4999,10 @@ public class PackageParser {
|
||||
intent, outError)) {
|
||||
return null;
|
||||
}
|
||||
// adjust activity flags when we implicitly expose it via a browsable filter
|
||||
intent.setEphemeral(isEphemeral);
|
||||
intent.setVisibleToEphemeral(visibleToEphemeral || isWebBrowsableIntent(intent));
|
||||
if (intent.isVisibleToInstantApp()) {
|
||||
// adjust activity flags when we implicitly expose it via a browsable filter
|
||||
if (!hasVisibleToEphemeral && intent.isVisibleToEphemeral()) {
|
||||
s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL;
|
||||
}
|
||||
s.intents.add(intent);
|
||||
@@ -6464,9 +6482,6 @@ public class PackageParser {
|
||||
if (state.stopped) {
|
||||
return true;
|
||||
}
|
||||
if (state.instantApp != p.applicationInfo.isInstantApp()) {
|
||||
return true;
|
||||
}
|
||||
if ((flags & PackageManager.GET_META_DATA) != 0
|
||||
&& (metaData != null || p.mAppMetaData != null)) {
|
||||
return true;
|
||||
@@ -6502,11 +6517,6 @@ public class PackageParser {
|
||||
} else {
|
||||
ai.flags &= ~ApplicationInfo.FLAG_SUSPENDED;
|
||||
}
|
||||
if (state.instantApp) {
|
||||
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_INSTANT;
|
||||
} else {
|
||||
ai.privateFlags &= ~ApplicationInfo.PRIVATE_FLAG_INSTANT;
|
||||
}
|
||||
if (state.hidden) {
|
||||
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_HIDDEN;
|
||||
} else {
|
||||
@@ -6527,7 +6537,6 @@ public class PackageParser {
|
||||
if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) {
|
||||
ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName);
|
||||
}
|
||||
ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state);
|
||||
}
|
||||
|
||||
public static ApplicationInfo generateApplicationInfo(Package p, int flags,
|
||||
|
||||
@@ -43,7 +43,6 @@ public class PackageUserState {
|
||||
public boolean hidden; // Is the app restricted by owner / admin
|
||||
public boolean suspended;
|
||||
public boolean blockUninstall;
|
||||
public boolean instantApp;
|
||||
public int enabled;
|
||||
public String lastDisableAppCaller;
|
||||
public int domainVerificationStatus;
|
||||
@@ -72,7 +71,6 @@ public class PackageUserState {
|
||||
hidden = o.hidden;
|
||||
suspended = o.suspended;
|
||||
blockUninstall = o.blockUninstall;
|
||||
instantApp = o.instantApp;
|
||||
enabled = o.enabled;
|
||||
lastDisableAppCaller = o.lastDisableAppCaller;
|
||||
domainVerificationStatus = o.domainVerificationStatus;
|
||||
@@ -190,9 +188,6 @@ public class PackageUserState {
|
||||
if (blockUninstall != oldState.blockUninstall) {
|
||||
return false;
|
||||
}
|
||||
if (instantApp != oldState.instantApp) {
|
||||
return false;
|
||||
}
|
||||
if (enabled != oldState.enabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.content.pm;
|
||||
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
|
||||
/**
|
||||
* Utility methods that need to be used in application space.
|
||||
* @hide
|
||||
*/
|
||||
public final class SELinuxUtil {
|
||||
|
||||
/** Append to existing seinfo label for instant apps @hide */
|
||||
private static final String INSTANT_APP_STR = ":ephemeralapp";
|
||||
|
||||
/** Append to existing seinfo when modifications are complete @hide */
|
||||
private static final String COMPLETE_TAG = "complete";
|
||||
private static final String COMPLETE_STR = ":" + COMPLETE_TAG;
|
||||
|
||||
/** @hide */
|
||||
public static String assignSeinfoUser(PackageUserState userState) {
|
||||
String seInfo = "";
|
||||
if (userState.instantApp)
|
||||
seInfo += INSTANT_APP_STR;
|
||||
seInfo += COMPLETE_STR;
|
||||
return seInfo;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4128,20 +4128,20 @@ public final class Settings {
|
||||
}
|
||||
|
||||
/**
|
||||
* System settings which can be accessed by instant apps.
|
||||
* System settings which can be accessed by ephemeral apps.
|
||||
* @hide
|
||||
*/
|
||||
public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>();
|
||||
public static final Set<String> EPHEMERAL_SETTINGS = new ArraySet<>();
|
||||
static {
|
||||
INSTANT_APP_SETTINGS.add(TEXT_AUTO_REPLACE);
|
||||
INSTANT_APP_SETTINGS.add(TEXT_AUTO_CAPS);
|
||||
INSTANT_APP_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
|
||||
INSTANT_APP_SETTINGS.add(TEXT_SHOW_PASSWORD);
|
||||
INSTANT_APP_SETTINGS.add(DATE_FORMAT);
|
||||
INSTANT_APP_SETTINGS.add(FONT_SCALE);
|
||||
INSTANT_APP_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
|
||||
INSTANT_APP_SETTINGS.add(TIME_12_24);
|
||||
INSTANT_APP_SETTINGS.add(SOUND_EFFECTS_ENABLED);
|
||||
EPHEMERAL_SETTINGS.add(TEXT_AUTO_REPLACE);
|
||||
EPHEMERAL_SETTINGS.add(TEXT_AUTO_CAPS);
|
||||
EPHEMERAL_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
|
||||
EPHEMERAL_SETTINGS.add(TEXT_SHOW_PASSWORD);
|
||||
EPHEMERAL_SETTINGS.add(DATE_FORMAT);
|
||||
EPHEMERAL_SETTINGS.add(FONT_SCALE);
|
||||
EPHEMERAL_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
|
||||
EPHEMERAL_SETTINGS.add(TIME_12_24);
|
||||
EPHEMERAL_SETTINGS.add(SOUND_EFFECTS_ENABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6988,17 +6988,17 @@ public final class Settings {
|
||||
}
|
||||
|
||||
/**
|
||||
* Secure settings which can be accessed by instant apps.
|
||||
* Secure settings which can be accessed by ephemeral apps.
|
||||
* @hide
|
||||
*/
|
||||
public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>();
|
||||
public static final Set<String> EPHEMERAL_SETTINGS = new ArraySet<>();
|
||||
static {
|
||||
INSTANT_APP_SETTINGS.add(ENABLED_ACCESSIBILITY_SERVICES);
|
||||
INSTANT_APP_SETTINGS.add(ACCESSIBILITY_SPEAK_PASSWORD);
|
||||
INSTANT_APP_SETTINGS.add(ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
|
||||
EPHEMERAL_SETTINGS.add(ENABLED_ACCESSIBILITY_SERVICES);
|
||||
EPHEMERAL_SETTINGS.add(ACCESSIBILITY_SPEAK_PASSWORD);
|
||||
EPHEMERAL_SETTINGS.add(ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
|
||||
|
||||
INSTANT_APP_SETTINGS.add(DEFAULT_INPUT_METHOD);
|
||||
INSTANT_APP_SETTINGS.add(ENABLED_INPUT_METHODS);
|
||||
EPHEMERAL_SETTINGS.add(DEFAULT_INPUT_METHOD);
|
||||
EPHEMERAL_SETTINGS.add(ENABLED_INPUT_METHODS);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -10136,16 +10136,16 @@ public final class Settings {
|
||||
public static final String CELL_ON = "cell_on";
|
||||
|
||||
/**
|
||||
* Global settings which can be accessed by instant apps.
|
||||
* Global settings which can be accessed by ephemeral apps.
|
||||
* @hide
|
||||
*/
|
||||
public static final Set<String> INSTANT_APP_SETTINGS = new ArraySet<>();
|
||||
public static final Set<String> EPHEMERAL_SETTINGS = new ArraySet<>();
|
||||
static {
|
||||
INSTANT_APP_SETTINGS.add(WAIT_FOR_DEBUGGER);
|
||||
INSTANT_APP_SETTINGS.add(DEVICE_PROVISIONED);
|
||||
INSTANT_APP_SETTINGS.add(DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES);
|
||||
INSTANT_APP_SETTINGS.add(DEVELOPMENT_FORCE_RTL);
|
||||
INSTANT_APP_SETTINGS.add(EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
|
||||
EPHEMERAL_SETTINGS.add(WAIT_FOR_DEBUGGER);
|
||||
EPHEMERAL_SETTINGS.add(DEVICE_PROVISIONED);
|
||||
EPHEMERAL_SETTINGS.add(DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES);
|
||||
EPHEMERAL_SETTINGS.add(DEVELOPMENT_FORCE_RTL);
|
||||
EPHEMERAL_SETTINGS.add(EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user