Loading api/system-current.txt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -8701,6 +8701,8 @@ package android.content { field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0 field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0 field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL"; field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL"; field public static final java.lang.String EXTRA_EPHEMERAL_FAILURE = "android.intent.extra.EPHEMERAL_FAILURE"; field public static final java.lang.String EXTRA_EPHEMERAL_SUCCESS = "android.intent.extra.EPHEMERAL_SUCCESS"; field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; Loading Loading @@ -9449,6 +9451,18 @@ package android.content.pm { field protected static final java.lang.String TAG = "ContainerEncryptionParams"; field protected static final java.lang.String TAG = "ContainerEncryptionParams"; } } public final class EphemeralResolveInfo implements android.os.Parcelable { ctor public EphemeralResolveInfo(android.net.Uri, java.lang.String, java.util.List<android.content.IntentFilter>); method public int describeContents(); method public byte[] getDigestBytes(); method public int getDigestPrefix(); method public java.util.List<android.content.IntentFilter> getFilters(); method public java.lang.String getPackageName(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralResolveInfo> CREATOR; field public static final java.lang.String SHA_ALGORITHM = "SHA-256"; } public final class FeatureGroupInfo implements android.os.Parcelable { public final class FeatureGroupInfo implements android.os.Parcelable { ctor public FeatureGroupInfo(); ctor public FeatureGroupInfo(); ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo); ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo); core/java/android/content/Intent.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -3686,6 +3686,20 @@ public class Intent implements Parcelable, Cloneable { */ */ public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; /** * A {@link IntentSender} to start after ephemeral installation success. * @hide */ @SystemApi public static final String EXTRA_EPHEMERAL_SUCCESS = "android.intent.extra.EPHEMERAL_SUCCESS"; /** * A {@link IntentSender} to start after ephemeral installation failure. * @hide */ @SystemApi public static final String EXTRA_EPHEMERAL_FAILURE = "android.intent.extra.EPHEMERAL_FAILURE"; /** /** * A Bundle forming a mapping of potential target package names to different extras Bundles * A Bundle forming a mapping of potential target package names to different extras Bundles * to add to the default intent extras in {@link #EXTRA_INTENT} when used with * to add to the default intent extras in {@link #EXTRA_INTENT} when used with Loading core/java/com/android/internal/app/EphemeralResolveInfo.java→core/java/android/content/pm/EphemeralResolveInfo.java +59 −33 Original line number Original line Diff line number Diff line Loading @@ -14,8 +14,10 @@ * limitations under the License. * limitations under the License. */ */ package com.android.internal.app; package android.content.pm; import android.annotation.NonNull; import android.annotation.SystemApi; import android.content.IntentFilter; import android.content.IntentFilter; import android.net.Uri; import android.net.Uri; import android.os.Parcel; import android.os.Parcel; Loading @@ -27,22 +29,47 @@ import java.util.ArrayList; import java.util.List; import java.util.List; /** /** * Information that is returned when resolving ephemeral * Information about an ephemeral application. * applications. * @hide */ */ @SystemApi public final class EphemeralResolveInfo implements Parcelable { public final class EphemeralResolveInfo implements Parcelable { /** Algorithm that will be used to generate the domain digest */ public static final String SHA_ALGORITHM = "SHA-256"; public static final String SHA_ALGORITHM = "SHA-256"; private byte[] mDigestBytes; private int mDigestPrefix; /** Full digest of the domain hash */ private final byte[] mDigestBytes; /** The first 4 bytes of the domain hash */ private final int mDigestPrefix; private final String mPackageName; /** The filters used to match domain */ private final List<IntentFilter> mFilters = new ArrayList<IntentFilter>(); private final List<IntentFilter> mFilters = new ArrayList<IntentFilter>(); public EphemeralResolveInfo(Uri uri, List<IntentFilter> filters) { public EphemeralResolveInfo(@NonNull Uri uri, @NonNull String packageName, generateDigest(uri); @NonNull List<IntentFilter> filters) { // validate arguments if (uri == null || packageName == null || filters == null || filters.size() == 0) { throw new IllegalArgumentException(); } mDigestBytes = generateDigest(uri); mDigestPrefix = mDigestBytes[0] << 24 | mDigestBytes[1] << 16 | mDigestBytes[2] << 8 | mDigestBytes[3] << 0; mFilters.addAll(filters); mFilters.addAll(filters); mPackageName = packageName; } } private EphemeralResolveInfo(Parcel in) { EphemeralResolveInfo(Parcel in) { readFromParcel(in); mDigestBytes = in.createByteArray(); mDigestPrefix = in.readInt(); mPackageName = in.readString(); in.readList(mFilters, null /*loader*/); } } public byte[] getDigestBytes() { public byte[] getDigestBytes() { Loading @@ -53,21 +80,19 @@ public final class EphemeralResolveInfo implements Parcelable { return mDigestPrefix; return mDigestPrefix; } } public String getPackageName() { return mPackageName; } public List<IntentFilter> getFilters() { public List<IntentFilter> getFilters() { return mFilters; return mFilters; } } private void generateDigest(Uri uri) { private static byte[] generateDigest(Uri uri) { try { try { final MessageDigest digest = MessageDigest.getInstance(SHA_ALGORITHM); final MessageDigest digest = MessageDigest.getInstance(SHA_ALGORITHM); final byte[] hostBytes = uri.getHost().getBytes(); final byte[] hostBytes = uri.getHost().getBytes(); final byte[] digestBytes = digest.digest(hostBytes); return digest.digest(hostBytes); mDigestBytes = digestBytes; mDigestPrefix = digestBytes[0] << 24 | digestBytes[1] << 16 | digestBytes[2] << 8 | digestBytes[3] << 0; } catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("could not find digest algorithm"); throw new IllegalStateException("could not find digest algorithm"); } } Loading @@ -80,26 +105,12 @@ public final class EphemeralResolveInfo implements Parcelable { @Override @Override public void writeToParcel(Parcel out, int flags) { public void writeToParcel(Parcel out, int flags) { if (mDigestBytes == null) { out.writeInt(0); } else { out.writeInt(mDigestBytes.length); out.writeByteArray(mDigestBytes); out.writeByteArray(mDigestBytes); } out.writeInt(mDigestPrefix); out.writeInt(mDigestPrefix); out.writeString(mPackageName); out.writeList(mFilters); out.writeList(mFilters); } } private void readFromParcel(Parcel in) { int digestBytesSize = in.readInt(); if (digestBytesSize > 0) { mDigestBytes = new byte[digestBytesSize]; in.readByteArray(mDigestBytes); } mDigestPrefix = in.readInt(); in.readList(mFilters, null /*loader*/); } public static final Parcelable.Creator<EphemeralResolveInfo> CREATOR public static final Parcelable.Creator<EphemeralResolveInfo> CREATOR = new Parcelable.Creator<EphemeralResolveInfo>() { = new Parcelable.Creator<EphemeralResolveInfo>() { public EphemeralResolveInfo createFromParcel(Parcel in) { public EphemeralResolveInfo createFromParcel(Parcel in) { Loading @@ -110,4 +121,19 @@ public final class EphemeralResolveInfo implements Parcelable { return new EphemeralResolveInfo[size]; return new EphemeralResolveInfo[size]; } } }; }; /** @hide */ public static final class EphemeralResolveIntentInfo extends IntentFilter { private final EphemeralResolveInfo mResolveInfo; public EphemeralResolveIntentInfo(@NonNull IntentFilter orig, @NonNull EphemeralResolveInfo resolveInfo) { super(orig); this.mResolveInfo = resolveInfo; } public EphemeralResolveInfo getEphemeralResolveInfo() { return mResolveInfo; } } } } core/java/android/content/pm/ResolveInfo.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,19 @@ public class ResolveInfo implements Parcelable { */ */ public ProviderInfo providerInfo; public ProviderInfo providerInfo; /** * The ephemeral application that corresponds to this resolution match. This will * only be set in specific circumstances. * @hide */ public EphemeralResolveInfo ephemeralResolveInfo; /** * A ResolveInfo that points at the ephemeral installer. * @hide */ public ResolveInfo ephemeralInstaller; /** /** * The IntentFilter that was matched for this ResolveInfo. * The IntentFilter that was matched for this ResolveInfo. */ */ Loading core/java/com/android/internal/app/EphemeralResolverService.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -16,9 +16,11 @@ package com.android.internal.app; package com.android.internal.app; import android.annotation.SystemApi; import android.app.Service; import android.app.Service; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.pm.EphemeralResolveInfo; import android.os.Bundle; import android.os.Bundle; import android.os.Handler; import android.os.Handler; import android.os.IBinder; import android.os.IBinder; Loading @@ -33,6 +35,7 @@ import java.util.List; * Base class for implementing the resolver service. * Base class for implementing the resolver service. * @hide * @hide */ */ @SystemApi public abstract class EphemeralResolverService extends Service { public abstract class EphemeralResolverService extends Service { public static final String EXTRA_RESOLVE_INFO = "com.android.internal.app.RESOLVE_INFO"; public static final String EXTRA_RESOLVE_INFO = "com.android.internal.app.RESOLVE_INFO"; public static final String EXTRA_SEQUENCE = "com.android.internal.app.SEQUENCE"; public static final String EXTRA_SEQUENCE = "com.android.internal.app.SEQUENCE"; Loading Loading
api/system-current.txt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -8701,6 +8701,8 @@ package android.content { field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0 field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0 field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL"; field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL"; field public static final java.lang.String EXTRA_EPHEMERAL_FAILURE = "android.intent.extra.EPHEMERAL_FAILURE"; field public static final java.lang.String EXTRA_EPHEMERAL_SUCCESS = "android.intent.extra.EPHEMERAL_SUCCESS"; field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; Loading Loading @@ -9449,6 +9451,18 @@ package android.content.pm { field protected static final java.lang.String TAG = "ContainerEncryptionParams"; field protected static final java.lang.String TAG = "ContainerEncryptionParams"; } } public final class EphemeralResolveInfo implements android.os.Parcelable { ctor public EphemeralResolveInfo(android.net.Uri, java.lang.String, java.util.List<android.content.IntentFilter>); method public int describeContents(); method public byte[] getDigestBytes(); method public int getDigestPrefix(); method public java.util.List<android.content.IntentFilter> getFilters(); method public java.lang.String getPackageName(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralResolveInfo> CREATOR; field public static final java.lang.String SHA_ALGORITHM = "SHA-256"; } public final class FeatureGroupInfo implements android.os.Parcelable { public final class FeatureGroupInfo implements android.os.Parcelable { ctor public FeatureGroupInfo(); ctor public FeatureGroupInfo(); ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo); ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo);
core/java/android/content/Intent.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -3686,6 +3686,20 @@ public class Intent implements Parcelable, Cloneable { */ */ public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; /** * A {@link IntentSender} to start after ephemeral installation success. * @hide */ @SystemApi public static final String EXTRA_EPHEMERAL_SUCCESS = "android.intent.extra.EPHEMERAL_SUCCESS"; /** * A {@link IntentSender} to start after ephemeral installation failure. * @hide */ @SystemApi public static final String EXTRA_EPHEMERAL_FAILURE = "android.intent.extra.EPHEMERAL_FAILURE"; /** /** * A Bundle forming a mapping of potential target package names to different extras Bundles * A Bundle forming a mapping of potential target package names to different extras Bundles * to add to the default intent extras in {@link #EXTRA_INTENT} when used with * to add to the default intent extras in {@link #EXTRA_INTENT} when used with Loading
core/java/com/android/internal/app/EphemeralResolveInfo.java→core/java/android/content/pm/EphemeralResolveInfo.java +59 −33 Original line number Original line Diff line number Diff line Loading @@ -14,8 +14,10 @@ * limitations under the License. * limitations under the License. */ */ package com.android.internal.app; package android.content.pm; import android.annotation.NonNull; import android.annotation.SystemApi; import android.content.IntentFilter; import android.content.IntentFilter; import android.net.Uri; import android.net.Uri; import android.os.Parcel; import android.os.Parcel; Loading @@ -27,22 +29,47 @@ import java.util.ArrayList; import java.util.List; import java.util.List; /** /** * Information that is returned when resolving ephemeral * Information about an ephemeral application. * applications. * @hide */ */ @SystemApi public final class EphemeralResolveInfo implements Parcelable { public final class EphemeralResolveInfo implements Parcelable { /** Algorithm that will be used to generate the domain digest */ public static final String SHA_ALGORITHM = "SHA-256"; public static final String SHA_ALGORITHM = "SHA-256"; private byte[] mDigestBytes; private int mDigestPrefix; /** Full digest of the domain hash */ private final byte[] mDigestBytes; /** The first 4 bytes of the domain hash */ private final int mDigestPrefix; private final String mPackageName; /** The filters used to match domain */ private final List<IntentFilter> mFilters = new ArrayList<IntentFilter>(); private final List<IntentFilter> mFilters = new ArrayList<IntentFilter>(); public EphemeralResolveInfo(Uri uri, List<IntentFilter> filters) { public EphemeralResolveInfo(@NonNull Uri uri, @NonNull String packageName, generateDigest(uri); @NonNull List<IntentFilter> filters) { // validate arguments if (uri == null || packageName == null || filters == null || filters.size() == 0) { throw new IllegalArgumentException(); } mDigestBytes = generateDigest(uri); mDigestPrefix = mDigestBytes[0] << 24 | mDigestBytes[1] << 16 | mDigestBytes[2] << 8 | mDigestBytes[3] << 0; mFilters.addAll(filters); mFilters.addAll(filters); mPackageName = packageName; } } private EphemeralResolveInfo(Parcel in) { EphemeralResolveInfo(Parcel in) { readFromParcel(in); mDigestBytes = in.createByteArray(); mDigestPrefix = in.readInt(); mPackageName = in.readString(); in.readList(mFilters, null /*loader*/); } } public byte[] getDigestBytes() { public byte[] getDigestBytes() { Loading @@ -53,21 +80,19 @@ public final class EphemeralResolveInfo implements Parcelable { return mDigestPrefix; return mDigestPrefix; } } public String getPackageName() { return mPackageName; } public List<IntentFilter> getFilters() { public List<IntentFilter> getFilters() { return mFilters; return mFilters; } } private void generateDigest(Uri uri) { private static byte[] generateDigest(Uri uri) { try { try { final MessageDigest digest = MessageDigest.getInstance(SHA_ALGORITHM); final MessageDigest digest = MessageDigest.getInstance(SHA_ALGORITHM); final byte[] hostBytes = uri.getHost().getBytes(); final byte[] hostBytes = uri.getHost().getBytes(); final byte[] digestBytes = digest.digest(hostBytes); return digest.digest(hostBytes); mDigestBytes = digestBytes; mDigestPrefix = digestBytes[0] << 24 | digestBytes[1] << 16 | digestBytes[2] << 8 | digestBytes[3] << 0; } catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("could not find digest algorithm"); throw new IllegalStateException("could not find digest algorithm"); } } Loading @@ -80,26 +105,12 @@ public final class EphemeralResolveInfo implements Parcelable { @Override @Override public void writeToParcel(Parcel out, int flags) { public void writeToParcel(Parcel out, int flags) { if (mDigestBytes == null) { out.writeInt(0); } else { out.writeInt(mDigestBytes.length); out.writeByteArray(mDigestBytes); out.writeByteArray(mDigestBytes); } out.writeInt(mDigestPrefix); out.writeInt(mDigestPrefix); out.writeString(mPackageName); out.writeList(mFilters); out.writeList(mFilters); } } private void readFromParcel(Parcel in) { int digestBytesSize = in.readInt(); if (digestBytesSize > 0) { mDigestBytes = new byte[digestBytesSize]; in.readByteArray(mDigestBytes); } mDigestPrefix = in.readInt(); in.readList(mFilters, null /*loader*/); } public static final Parcelable.Creator<EphemeralResolveInfo> CREATOR public static final Parcelable.Creator<EphemeralResolveInfo> CREATOR = new Parcelable.Creator<EphemeralResolveInfo>() { = new Parcelable.Creator<EphemeralResolveInfo>() { public EphemeralResolveInfo createFromParcel(Parcel in) { public EphemeralResolveInfo createFromParcel(Parcel in) { Loading @@ -110,4 +121,19 @@ public final class EphemeralResolveInfo implements Parcelable { return new EphemeralResolveInfo[size]; return new EphemeralResolveInfo[size]; } } }; }; /** @hide */ public static final class EphemeralResolveIntentInfo extends IntentFilter { private final EphemeralResolveInfo mResolveInfo; public EphemeralResolveIntentInfo(@NonNull IntentFilter orig, @NonNull EphemeralResolveInfo resolveInfo) { super(orig); this.mResolveInfo = resolveInfo; } public EphemeralResolveInfo getEphemeralResolveInfo() { return mResolveInfo; } } } }
core/java/android/content/pm/ResolveInfo.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,19 @@ public class ResolveInfo implements Parcelable { */ */ public ProviderInfo providerInfo; public ProviderInfo providerInfo; /** * The ephemeral application that corresponds to this resolution match. This will * only be set in specific circumstances. * @hide */ public EphemeralResolveInfo ephemeralResolveInfo; /** * A ResolveInfo that points at the ephemeral installer. * @hide */ public ResolveInfo ephemeralInstaller; /** /** * The IntentFilter that was matched for this ResolveInfo. * The IntentFilter that was matched for this ResolveInfo. */ */ Loading
core/java/com/android/internal/app/EphemeralResolverService.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -16,9 +16,11 @@ package com.android.internal.app; package com.android.internal.app; import android.annotation.SystemApi; import android.app.Service; import android.app.Service; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.pm.EphemeralResolveInfo; import android.os.Bundle; import android.os.Bundle; import android.os.Handler; import android.os.Handler; import android.os.IBinder; import android.os.IBinder; Loading @@ -33,6 +35,7 @@ import java.util.List; * Base class for implementing the resolver service. * Base class for implementing the resolver service. * @hide * @hide */ */ @SystemApi public abstract class EphemeralResolverService extends Service { public abstract class EphemeralResolverService extends Service { public static final String EXTRA_RESOLVE_INFO = "com.android.internal.app.RESOLVE_INFO"; public static final String EXTRA_RESOLVE_INFO = "com.android.internal.app.RESOLVE_INFO"; public static final String EXTRA_SEQUENCE = "com.android.internal.app.SEQUENCE"; public static final String EXTRA_SEQUENCE = "com.android.internal.app.SEQUENCE"; Loading