Loading core/java/android/content/IntentFilter.java +36 −8 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.content; import android.annotation.IntDef; import android.annotation.SystemApi; import android.net.Uri; import android.os.Parcel; Loading @@ -33,6 +34,8 @@ import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Iterator; import java.util.Set; Loading Loading @@ -283,9 +286,22 @@ public class IntentFilter implements Parcelable { private static final int STATE_VERIFIED = 0x00001000; private int mVerifyState; /** @hide */ public static final int VISIBILITY_NONE = 0; /** @hide */ public static final int VISIBILITY_EXPLICIT = 1; /** @hide */ public static final int VISIBILITY_IMPLICIT = 2; /** @hide */ @IntDef(prefix = { "VISIBILITY_" }, value = { VISIBILITY_NONE, VISIBILITY_EXPLICIT, VISIBILITY_IMPLICIT, }) @Retention(RetentionPolicy.SOURCE) public @interface InstantAppVisibility {} /** Whether or not the intent filter is visible to instant apps. */ private boolean mVisibleToInstantApp; private @InstantAppVisibility int mInstantAppVisibility; // These functions are the start of more optimized code for managing // the string sets... not yet implemented. Loading Loading @@ -452,7 +468,7 @@ public class IntentFilter implements Parcelable { } mHasPartialTypes = o.mHasPartialTypes; mVerifyState = o.mVerifyState; mVisibleToInstantApp = o.mVisibleToInstantApp; mInstantAppVisibility = o.mInstantAppVisibility; } /** Loading Loading @@ -655,12 +671,24 @@ public class IntentFilter implements Parcelable { } /** @hide */ public void setVisibleToInstantApp(boolean visibleToInstantApp) { mVisibleToInstantApp = visibleToInstantApp; public void setVisibilityToInstantApp(@InstantAppVisibility int visibility) { mInstantAppVisibility = visibility; } /** @hide */ public @InstantAppVisibility int getVisibilityToInstantApp() { return mInstantAppVisibility; } /** @hide */ public boolean isVisibleToInstantApp() { return mVisibleToInstantApp; return mInstantAppVisibility != VISIBILITY_NONE; } /** @hide */ public boolean isExplicitlyVisibleToInstantApp() { return mInstantAppVisibility == VISIBILITY_EXPLICIT; } /** @hide */ public boolean isImplicitlyVisibleToInstantApp() { return mInstantAppVisibility == VISIBILITY_IMPLICIT; } /** Loading Loading @@ -1859,7 +1887,7 @@ public class IntentFilter implements Parcelable { dest.writeInt(mPriority); dest.writeInt(mHasPartialTypes ? 1 : 0); dest.writeInt(getAutoVerify() ? 1 : 0); dest.writeInt(isVisibleToInstantApp() ? 1 : 0); dest.writeInt(mInstantAppVisibility); } /** Loading Loading @@ -1928,7 +1956,7 @@ public class IntentFilter implements Parcelable { mPriority = source.readInt(); mHasPartialTypes = source.readInt() > 0; setAutoVerify(source.readInt() > 0); setVisibleToInstantApp(source.readInt() > 0); setVisibilityToInstantApp(source.readInt()); } private final boolean findMimeType(String type) { Loading core/java/android/content/pm/ActivityInfo.java +20 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.content.pm; import android.annotation.IntDef; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Configuration.NativeConfig; import android.os.Parcel; Loading Loading @@ -412,17 +413,33 @@ public class ActivityInfo extends ComponentInfo public static final int FLAG_ALWAYS_FOCUSABLE = 0x40000; /** * Bit in {@link #flags} indicating if the activity is visible to ephemeral applications. * Bit in {@link #flags} indicating if the activity is visible to instant * applications. The activity is visible if it's either implicitly or * explicitly exposed. * @hide */ public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000; public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000; /** * Bit in {@link #flags} indicating if the activity is implicitly visible * to instant applications. Implicitly visible activities are those that * implement certain intent-filters: * <ul> * <li>action {@link Intent#CATEGORY_BROWSABLE}</li> * <li>action {@link Intent#ACTION_SEND}</li> * <li>action {@link Intent#ACTION_SENDTO}</li> * <li>action {@link Intent#ACTION_SEND_MULTIPLE}</li> * </ul> * @hide */ public static final int FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP = 0x200000; /** * Bit in {@link #flags} indicating if the activity supports picture-in-picture mode. * See {@link android.R.attr#supportsPictureInPicture}. * @hide */ public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x200000; public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x400000; /** * @hide Bit in {@link #flags}: If set, this component will only be seen Loading core/java/android/content/pm/PackageManager.java +9 −1 Original line number Diff line number Diff line Loading @@ -461,11 +461,19 @@ public abstract class PackageManager { /** * Internal {@link PackageInfo} flag: include only components that are exposed to * ephemeral apps. * instant apps. Matched components may have been either explicitly or implicitly * exposed. * @hide */ public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000; /** * Internal {@link PackageInfo} flag: include only components that have been * explicitly exposed to instant apps. * @hide */ public static final int MATCH_EXPLICITLY_VISIBLE_ONLY = 0x02000000; /** * Internal flag used to indicate that a system component has done their * homework and verified that they correctly handle packages and components Loading core/java/android/content/pm/PackageParser.java +52 −27 Original line number Diff line number Diff line Loading @@ -4271,7 +4271,7 @@ public class PackageParser { boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false); if (visibleToEphemeral) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; } Loading Loading @@ -4313,9 +4313,17 @@ public class PackageParser { a.intents.add(intent); } // adjust activity flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); final int visibility = visibleToEphemeral ? IntentFilter.VISIBILITY_EXPLICIT : !receiver && isImplicitlyExposedIntent(intent) ? IntentFilter.VISIBILITY_IMPLICIT : IntentFilter.VISIBILITY_NONE; intent.setVisibilityToInstantApp(visibility); if (intent.isVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; } if (intent.isImplicitlyVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; } if (LOG_UNSAFE_BROADCASTS && receiver && (owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O)) { Loading Loading @@ -4346,9 +4354,17 @@ public class PackageParser { owner.preferredActivityFilters.add(intent); } // adjust activity flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); final int visibility = visibleToEphemeral ? IntentFilter.VISIBILITY_EXPLICIT : !receiver && isImplicitlyExposedIntent(intent) ? IntentFilter.VISIBILITY_IMPLICIT : IntentFilter.VISIBILITY_NONE; intent.setVisibilityToInstantApp(visibility); if (intent.isVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; } if (intent.isImplicitlyVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; } } else if (parser.getName().equals("meta-data")) { if ((a.metaData = parseMetaData(res, parser, a.metaData, Loading @@ -4358,16 +4374,18 @@ public class PackageParser { // we don't have an attribute [or it's false], but, we have meta-data if (!visibleToEphemeral && a.metaData.getBoolean(META_DATA_INSTANT_APPS)) { visibleToEphemeral = true; // set in case there are more intent filters a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; a.info.flags &= ~ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; // cycle through any filters already seen for (int i = a.intents.size() - 1; i >= 0; --i) { a.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/); a.intents.get(i) .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } if (owner.preferredActivityFilters != null) { for (int i = owner.preferredActivityFilters.size() - 1; i >= 0; --i) { owner.preferredActivityFilters.get(i) .setVisibleToInstantApp(true /*visibleToInstantApp*/); .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } } } Loading Loading @@ -4645,7 +4663,7 @@ public class PackageParser { // TODO add visibleToInstantApps attribute to activity alias final boolean visibleToEphemeral = ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0); ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0); sa.recycle(); Loading Loading @@ -4673,13 +4691,20 @@ public class PackageParser { + mArchiveSourcePath + " " + parser.getPositionDescription()); } else { intent.setVisibleToInstantApp( visibleToEphemeral || isImplicitlyExposedIntent(intent)); a.intents.add(intent); } // adjust activity flags when we implicitly expose it via a browsable filter final int visibility = visibleToEphemeral ? IntentFilter.VISIBILITY_EXPLICIT : isImplicitlyExposedIntent(intent) ? IntentFilter.VISIBILITY_IMPLICIT : IntentFilter.VISIBILITY_NONE; intent.setVisibilityToInstantApp(visibility); if (intent.isVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; } if (intent.isImplicitlyVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; } } else if (parser.getName().equals("meta-data")) { if ((a.metaData=parseMetaData(res, parser, a.metaData, Loading Loading @@ -4822,7 +4847,7 @@ public class PackageParser { final boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false); if (visibleToEphemeral) { p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL; p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; } Loading Loading @@ -4874,12 +4899,11 @@ public class PackageParser { intent, outError)) { return false; } outInfo.intents.add(intent); // adjust provider flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); if (intent.isVisibleToInstantApp()) { outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL; if (visibleToEphemeral) { intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP; } outInfo.intents.add(intent); } else if (parser.getName().equals("meta-data")) { if ((outInfo.metaData=parseMetaData(res, parser, Loading @@ -4889,11 +4913,12 @@ public class PackageParser { // we don't have an attribute [or it's false], but, we have meta-data if (!visibleToEphemeral && outInfo.metaData.getBoolean(META_DATA_INSTANT_APPS)) { visibleToEphemeral = true; // set in case there are more intent filters outInfo.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; // cycle through any filters already seen for (int i = outInfo.intents.size() - 1; i >= 0; --i) { outInfo.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/); outInfo.intents.get(i) .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } } Loading Loading @@ -5149,7 +5174,7 @@ public class PackageParser { boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestService_visibleToInstantApps, false); if (visibleToEphemeral) { s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL; s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; } Loading Loading @@ -5180,10 +5205,9 @@ public class PackageParser { intent, outError)) { return null; } // adjust activity flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); if (intent.isVisibleToInstantApp()) { s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL; if (visibleToEphemeral) { intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP; } s.intents.add(intent); } else if (parser.getName().equals("meta-data")) { Loading @@ -5194,11 +5218,12 @@ public class PackageParser { // we don't have an attribute [or it's false], but, we have meta-data if (!visibleToEphemeral && s.metaData.getBoolean(META_DATA_INSTANT_APPS)) { visibleToEphemeral = true; // set in case there are more intent filters s.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; // cycle through any filters already seen for (int i = s.intents.size() - 1; i >= 0; --i) { s.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/); s.intents.get(i) .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } } } else { Loading core/java/android/content/pm/ProviderInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public final class ProviderInfo extends ComponentInfo * Bit in {@link #flags} indicating if the provider is visible to ephemeral applications. * @hide */ public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000; public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000; /** * Bit in {@link #flags}: If set, a single instance of the provider will Loading Loading
core/java/android/content/IntentFilter.java +36 −8 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.content; import android.annotation.IntDef; import android.annotation.SystemApi; import android.net.Uri; import android.os.Parcel; Loading @@ -33,6 +34,8 @@ import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Iterator; import java.util.Set; Loading Loading @@ -283,9 +286,22 @@ public class IntentFilter implements Parcelable { private static final int STATE_VERIFIED = 0x00001000; private int mVerifyState; /** @hide */ public static final int VISIBILITY_NONE = 0; /** @hide */ public static final int VISIBILITY_EXPLICIT = 1; /** @hide */ public static final int VISIBILITY_IMPLICIT = 2; /** @hide */ @IntDef(prefix = { "VISIBILITY_" }, value = { VISIBILITY_NONE, VISIBILITY_EXPLICIT, VISIBILITY_IMPLICIT, }) @Retention(RetentionPolicy.SOURCE) public @interface InstantAppVisibility {} /** Whether or not the intent filter is visible to instant apps. */ private boolean mVisibleToInstantApp; private @InstantAppVisibility int mInstantAppVisibility; // These functions are the start of more optimized code for managing // the string sets... not yet implemented. Loading Loading @@ -452,7 +468,7 @@ public class IntentFilter implements Parcelable { } mHasPartialTypes = o.mHasPartialTypes; mVerifyState = o.mVerifyState; mVisibleToInstantApp = o.mVisibleToInstantApp; mInstantAppVisibility = o.mInstantAppVisibility; } /** Loading Loading @@ -655,12 +671,24 @@ public class IntentFilter implements Parcelable { } /** @hide */ public void setVisibleToInstantApp(boolean visibleToInstantApp) { mVisibleToInstantApp = visibleToInstantApp; public void setVisibilityToInstantApp(@InstantAppVisibility int visibility) { mInstantAppVisibility = visibility; } /** @hide */ public @InstantAppVisibility int getVisibilityToInstantApp() { return mInstantAppVisibility; } /** @hide */ public boolean isVisibleToInstantApp() { return mVisibleToInstantApp; return mInstantAppVisibility != VISIBILITY_NONE; } /** @hide */ public boolean isExplicitlyVisibleToInstantApp() { return mInstantAppVisibility == VISIBILITY_EXPLICIT; } /** @hide */ public boolean isImplicitlyVisibleToInstantApp() { return mInstantAppVisibility == VISIBILITY_IMPLICIT; } /** Loading Loading @@ -1859,7 +1887,7 @@ public class IntentFilter implements Parcelable { dest.writeInt(mPriority); dest.writeInt(mHasPartialTypes ? 1 : 0); dest.writeInt(getAutoVerify() ? 1 : 0); dest.writeInt(isVisibleToInstantApp() ? 1 : 0); dest.writeInt(mInstantAppVisibility); } /** Loading Loading @@ -1928,7 +1956,7 @@ public class IntentFilter implements Parcelable { mPriority = source.readInt(); mHasPartialTypes = source.readInt() > 0; setAutoVerify(source.readInt() > 0); setVisibleToInstantApp(source.readInt() > 0); setVisibilityToInstantApp(source.readInt()); } private final boolean findMimeType(String type) { Loading
core/java/android/content/pm/ActivityInfo.java +20 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.content.pm; import android.annotation.IntDef; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Configuration.NativeConfig; import android.os.Parcel; Loading Loading @@ -412,17 +413,33 @@ public class ActivityInfo extends ComponentInfo public static final int FLAG_ALWAYS_FOCUSABLE = 0x40000; /** * Bit in {@link #flags} indicating if the activity is visible to ephemeral applications. * Bit in {@link #flags} indicating if the activity is visible to instant * applications. The activity is visible if it's either implicitly or * explicitly exposed. * @hide */ public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000; public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000; /** * Bit in {@link #flags} indicating if the activity is implicitly visible * to instant applications. Implicitly visible activities are those that * implement certain intent-filters: * <ul> * <li>action {@link Intent#CATEGORY_BROWSABLE}</li> * <li>action {@link Intent#ACTION_SEND}</li> * <li>action {@link Intent#ACTION_SENDTO}</li> * <li>action {@link Intent#ACTION_SEND_MULTIPLE}</li> * </ul> * @hide */ public static final int FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP = 0x200000; /** * Bit in {@link #flags} indicating if the activity supports picture-in-picture mode. * See {@link android.R.attr#supportsPictureInPicture}. * @hide */ public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x200000; public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x400000; /** * @hide Bit in {@link #flags}: If set, this component will only be seen Loading
core/java/android/content/pm/PackageManager.java +9 −1 Original line number Diff line number Diff line Loading @@ -461,11 +461,19 @@ public abstract class PackageManager { /** * Internal {@link PackageInfo} flag: include only components that are exposed to * ephemeral apps. * instant apps. Matched components may have been either explicitly or implicitly * exposed. * @hide */ public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000; /** * Internal {@link PackageInfo} flag: include only components that have been * explicitly exposed to instant apps. * @hide */ public static final int MATCH_EXPLICITLY_VISIBLE_ONLY = 0x02000000; /** * Internal flag used to indicate that a system component has done their * homework and verified that they correctly handle packages and components Loading
core/java/android/content/pm/PackageParser.java +52 −27 Original line number Diff line number Diff line Loading @@ -4271,7 +4271,7 @@ public class PackageParser { boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false); if (visibleToEphemeral) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; } Loading Loading @@ -4313,9 +4313,17 @@ public class PackageParser { a.intents.add(intent); } // adjust activity flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); final int visibility = visibleToEphemeral ? IntentFilter.VISIBILITY_EXPLICIT : !receiver && isImplicitlyExposedIntent(intent) ? IntentFilter.VISIBILITY_IMPLICIT : IntentFilter.VISIBILITY_NONE; intent.setVisibilityToInstantApp(visibility); if (intent.isVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; } if (intent.isImplicitlyVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; } if (LOG_UNSAFE_BROADCASTS && receiver && (owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O)) { Loading Loading @@ -4346,9 +4354,17 @@ public class PackageParser { owner.preferredActivityFilters.add(intent); } // adjust activity flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); final int visibility = visibleToEphemeral ? IntentFilter.VISIBILITY_EXPLICIT : !receiver && isImplicitlyExposedIntent(intent) ? IntentFilter.VISIBILITY_IMPLICIT : IntentFilter.VISIBILITY_NONE; intent.setVisibilityToInstantApp(visibility); if (intent.isVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; } if (intent.isImplicitlyVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; } } else if (parser.getName().equals("meta-data")) { if ((a.metaData = parseMetaData(res, parser, a.metaData, Loading @@ -4358,16 +4374,18 @@ public class PackageParser { // we don't have an attribute [or it's false], but, we have meta-data if (!visibleToEphemeral && a.metaData.getBoolean(META_DATA_INSTANT_APPS)) { visibleToEphemeral = true; // set in case there are more intent filters a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; a.info.flags &= ~ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; // cycle through any filters already seen for (int i = a.intents.size() - 1; i >= 0; --i) { a.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/); a.intents.get(i) .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } if (owner.preferredActivityFilters != null) { for (int i = owner.preferredActivityFilters.size() - 1; i >= 0; --i) { owner.preferredActivityFilters.get(i) .setVisibleToInstantApp(true /*visibleToInstantApp*/); .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } } } Loading Loading @@ -4645,7 +4663,7 @@ public class PackageParser { // TODO add visibleToInstantApps attribute to activity alias final boolean visibleToEphemeral = ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0); ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0); sa.recycle(); Loading Loading @@ -4673,13 +4691,20 @@ public class PackageParser { + mArchiveSourcePath + " " + parser.getPositionDescription()); } else { intent.setVisibleToInstantApp( visibleToEphemeral || isImplicitlyExposedIntent(intent)); a.intents.add(intent); } // adjust activity flags when we implicitly expose it via a browsable filter final int visibility = visibleToEphemeral ? IntentFilter.VISIBILITY_EXPLICIT : isImplicitlyExposedIntent(intent) ? IntentFilter.VISIBILITY_IMPLICIT : IntentFilter.VISIBILITY_NONE; intent.setVisibilityToInstantApp(visibility); if (intent.isVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP; } if (intent.isImplicitlyVisibleToInstantApp()) { a.info.flags |= ActivityInfo.FLAG_IMPLICITLY_VISIBLE_TO_INSTANT_APP; } } else if (parser.getName().equals("meta-data")) { if ((a.metaData=parseMetaData(res, parser, a.metaData, Loading Loading @@ -4822,7 +4847,7 @@ public class PackageParser { final boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false); if (visibleToEphemeral) { p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL; p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; } Loading Loading @@ -4874,12 +4899,11 @@ public class PackageParser { intent, outError)) { return false; } outInfo.intents.add(intent); // adjust provider flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); if (intent.isVisibleToInstantApp()) { outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL; if (visibleToEphemeral) { intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP; } outInfo.intents.add(intent); } else if (parser.getName().equals("meta-data")) { if ((outInfo.metaData=parseMetaData(res, parser, Loading @@ -4889,11 +4913,12 @@ public class PackageParser { // we don't have an attribute [or it's false], but, we have meta-data if (!visibleToEphemeral && outInfo.metaData.getBoolean(META_DATA_INSTANT_APPS)) { visibleToEphemeral = true; // set in case there are more intent filters outInfo.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; outInfo.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; // cycle through any filters already seen for (int i = outInfo.intents.size() - 1; i >= 0; --i) { outInfo.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/); outInfo.intents.get(i) .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } } Loading Loading @@ -5149,7 +5174,7 @@ public class PackageParser { boolean visibleToEphemeral = sa.getBoolean(R.styleable.AndroidManifestService_visibleToInstantApps, false); if (visibleToEphemeral) { s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL; s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; } Loading Loading @@ -5180,10 +5205,9 @@ public class PackageParser { intent, outError)) { return null; } // adjust activity flags when we implicitly expose it via a browsable filter intent.setVisibleToInstantApp(visibleToEphemeral || isImplicitlyExposedIntent(intent)); if (intent.isVisibleToInstantApp()) { s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL; if (visibleToEphemeral) { intent.setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP; } s.intents.add(intent); } else if (parser.getName().equals("meta-data")) { Loading @@ -5194,11 +5218,12 @@ public class PackageParser { // we don't have an attribute [or it's false], but, we have meta-data if (!visibleToEphemeral && s.metaData.getBoolean(META_DATA_INSTANT_APPS)) { visibleToEphemeral = true; // set in case there are more intent filters s.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL; s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP; owner.visibleToInstantApps = true; // cycle through any filters already seen for (int i = s.intents.size() - 1; i >= 0; --i) { s.intents.get(i).setVisibleToInstantApp(true /*visibleToInstantApp*/); s.intents.get(i) .setVisibilityToInstantApp(IntentFilter.VISIBILITY_EXPLICIT); } } } else { Loading
core/java/android/content/pm/ProviderInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public final class ProviderInfo extends ComponentInfo * Bit in {@link #flags} indicating if the provider is visible to ephemeral applications. * @hide */ public static final int FLAG_VISIBLE_TO_EPHEMERAL = 0x100000; public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000; /** * Bit in {@link #flags}: If set, a single instance of the provider will Loading