From: Patrick Baumann Date: Tue, 30 Jan 2018 17:51:26 +0000 (-0800) Subject: Removes EphemrealResolverService and related X-Git-Tag: android-x86-9.0-r1~235^2~15^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5564f880db3292327872a07df8e230eee78be14b;p=android-x86%2Fframeworks-base.git Removes EphemrealResolverService and related This change removes deprecated classes and constants that were not renamed from ephemeral to instant prior to O. There were no consumers of these APIs as correctly named alternatives existed and were referenced in docs. No known consumers of these APIs exist on user builds. Fixes: 38137176 Fixes: 38121489 Test: manual; builds and instant apps launch Change-Id: I982f8a6edc5668dd42cea65e52a1433ec8d6f8ef --- diff --git a/api/current.txt b/api/current.txt index 5998e7194a16..b4adfe252e48 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11608,15 +11608,15 @@ package android.content.res { public final class AssetManager implements java.lang.AutoCloseable { method public void close(); - method public java.lang.String[] getLocales(); - method public java.lang.String[] list(java.lang.String) throws java.io.IOException; - method public java.io.InputStream open(java.lang.String) throws java.io.IOException; - method public java.io.InputStream open(java.lang.String, int) throws java.io.IOException; - method public android.content.res.AssetFileDescriptor openFd(java.lang.String) throws java.io.IOException; - method public android.content.res.AssetFileDescriptor openNonAssetFd(java.lang.String) throws java.io.IOException; - method public android.content.res.AssetFileDescriptor openNonAssetFd(int, java.lang.String) throws java.io.IOException; - method public android.content.res.XmlResourceParser openXmlResourceParser(java.lang.String) throws java.io.IOException; - method public android.content.res.XmlResourceParser openXmlResourceParser(int, java.lang.String) throws java.io.IOException; + method public final java.lang.String[] getLocales(); + method public final java.lang.String[] list(java.lang.String) throws java.io.IOException; + method public final java.io.InputStream open(java.lang.String) throws java.io.IOException; + method public final java.io.InputStream open(java.lang.String, int) throws java.io.IOException; + method public final android.content.res.AssetFileDescriptor openFd(java.lang.String) throws java.io.IOException; + method public final android.content.res.AssetFileDescriptor openNonAssetFd(java.lang.String) throws java.io.IOException; + method public final android.content.res.AssetFileDescriptor openNonAssetFd(int, java.lang.String) throws java.io.IOException; + method public final android.content.res.XmlResourceParser openXmlResourceParser(java.lang.String) throws java.io.IOException; + method public final android.content.res.XmlResourceParser openXmlResourceParser(int, java.lang.String) throws java.io.IOException; field public static final int ACCESS_BUFFER = 3; // 0x3 field public static final int ACCESS_RANDOM = 1; // 0x1 field public static final int ACCESS_STREAMING = 2; // 0x2 diff --git a/api/system-removed.txt b/api/system-removed.txt index b63703dc0035..48f43e0880da 100644 --- a/api/system-removed.txt +++ b/api/system-removed.txt @@ -1,13 +1,5 @@ package android.app { - public abstract deprecated class EphemeralResolverService extends android.app.InstantAppResolverService { - ctor public EphemeralResolverService(); - method public android.os.Looper getLooper(); - method public abstract deprecated java.util.List onEphemeralResolveInfoList(int[], int); - method public android.content.pm.EphemeralResolveInfo onGetEphemeralIntentFilter(java.lang.String); - method public java.util.List onGetEphemeralResolveInfo(int[]); - } - public class Notification implements android.os.Parcelable { method public static java.lang.Class getNotificationStyleClass(java.lang.String); } @@ -31,10 +23,7 @@ package android.content { public class Intent implements java.lang.Cloneable android.os.Parcelable { field public static final deprecated java.lang.String ACTION_DEVICE_INITIALIZATION_WIZARD = "android.intent.action.DEVICE_INITIALIZATION_WIZARD"; - field public static final deprecated java.lang.String ACTION_EPHEMERAL_RESOLVER_SETTINGS = "android.intent.action.EPHEMERAL_RESOLVER_SETTINGS"; - field public static final deprecated java.lang.String ACTION_INSTALL_EPHEMERAL_PACKAGE = "android.intent.action.INSTALL_EPHEMERAL_PACKAGE"; field public static final deprecated java.lang.String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR"; - field public static final deprecated java.lang.String ACTION_RESOLVE_EPHEMERAL_PACKAGE = "android.intent.action.RESOLVE_EPHEMERAL_PACKAGE"; field public static final deprecated java.lang.String ACTION_SERVICE_STATE = "android.intent.action.SERVICE_STATE"; field public static final deprecated java.lang.String EXTRA_CDMA_DEFAULT_ROAMING_INDICATOR = "cdmaDefaultRoamingIndicator"; field public static final deprecated java.lang.String EXTRA_CDMA_ROAMING_INDICATOR = "cdmaRoamingIndicator"; @@ -62,45 +51,6 @@ package android.content { } -package android.content.pm { - - public final deprecated class EphemeralIntentFilter implements android.os.Parcelable { - ctor public EphemeralIntentFilter(java.lang.String, java.util.List); - method public int describeContents(); - method public java.util.List getFilters(); - method public java.lang.String getSplitName(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; - } - - public final deprecated class EphemeralResolveInfo implements android.os.Parcelable { - ctor public deprecated EphemeralResolveInfo(android.net.Uri, java.lang.String, java.util.List); - ctor public deprecated EphemeralResolveInfo(android.content.pm.EphemeralResolveInfo.EphemeralDigest, java.lang.String, java.util.List); - ctor public EphemeralResolveInfo(android.content.pm.EphemeralResolveInfo.EphemeralDigest, java.lang.String, java.util.List, int); - ctor public EphemeralResolveInfo(java.lang.String, java.lang.String, java.util.List); - method public int describeContents(); - method public byte[] getDigestBytes(); - method public int getDigestPrefix(); - method public deprecated java.util.List getFilters(); - method public java.util.List getIntentFilters(); - method public java.lang.String getPackageName(); - method public int getVersionCode(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; - field public static final java.lang.String SHA_ALGORITHM = "SHA-256"; - } - - public static final class EphemeralResolveInfo.EphemeralDigest implements android.os.Parcelable { - ctor public EphemeralResolveInfo.EphemeralDigest(java.lang.String); - method public int describeContents(); - method public byte[][] getDigestBytes(); - method public int[] getDigestPrefix(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; - } - -} - package android.media.tv { public final class TvInputManager { diff --git a/core/java/android/app/EphemeralResolverService.java b/core/java/android/app/EphemeralResolverService.java deleted file mode 100644 index d1c244136ec9..000000000000 --- a/core/java/android/app/EphemeralResolverService.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2015 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.app; - -import android.annotation.SystemApi; -import android.content.pm.EphemeralResolveInfo; -import android.content.pm.InstantAppResolveInfo; -import android.os.Build; -import android.os.Looper; -import android.util.Log; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Base class for implementing the resolver service. - * @hide - * @removed - * @deprecated use InstantAppResolverService instead - */ -@Deprecated -@SystemApi -public abstract class EphemeralResolverService extends InstantAppResolverService { - private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; - private static final String TAG = "PackageManager"; - - /** - * Called to retrieve resolve info for ephemeral applications. - * - * @param digestPrefix The hash prefix of the ephemeral's domain. - * @param prefixMask A mask that was applied to each digest prefix. This should - * be used when comparing against the digest prefixes as all bits might - * not be set. - * @deprecated use {@link #onGetEphemeralResolveInfo(int[])} instead - */ - @Deprecated - public abstract List onEphemeralResolveInfoList( - int digestPrefix[], int prefix); - - /** - * Called to retrieve resolve info for ephemeral applications. - * - * @param digestPrefix The hash prefix of the ephemeral's domain. - */ - public List onGetEphemeralResolveInfo(int digestPrefix[]) { - return onEphemeralResolveInfoList(digestPrefix, 0xFFFFF000); - } - - /** - * Called to retrieve intent filters for ephemeral applications. - * - * @param hostName The name of the host to get intent filters for. - */ - public EphemeralResolveInfo onGetEphemeralIntentFilter(String hostName) { - throw new IllegalStateException("Must define"); - } - - @Override - public Looper getLooper() { - return super.getLooper(); - } - - void _onGetInstantAppResolveInfo(int[] digestPrefix, String token, - InstantAppResolutionCallback callback) { - if (DEBUG_EPHEMERAL) { - Log.d(TAG, "Legacy resolver; getInstantAppResolveInfo;" - + " prefix: " + Arrays.toString(digestPrefix)); - } - final List response = onGetEphemeralResolveInfo(digestPrefix); - final int responseSize = response == null ? 0 : response.size(); - final List resultList = new ArrayList<>(responseSize); - for (int i = 0; i < responseSize; i++) { - resultList.add(response.get(i).getInstantAppResolveInfo()); - } - callback.onInstantAppResolveInfo(resultList); - } - - void _onGetInstantAppIntentFilter(int[] digestPrefix, String token, - String hostName, InstantAppResolutionCallback callback) { - if (DEBUG_EPHEMERAL) { - Log.d(TAG, "Legacy resolver; getInstantAppIntentFilter;" - + " prefix: " + Arrays.toString(digestPrefix)); - } - final EphemeralResolveInfo response = onGetEphemeralIntentFilter(hostName); - final List resultList = new ArrayList<>(1); - resultList.add(response.getInstantAppResolveInfo()); - callback.onInstantAppResolveInfo(resultList); - } -} diff --git a/core/java/android/app/InstantAppResolverService.java b/core/java/android/app/InstantAppResolverService.java index 89aff36f883a..76a36820ed83 100644 --- a/core/java/android/app/InstantAppResolverService.java +++ b/core/java/android/app/InstantAppResolverService.java @@ -43,7 +43,7 @@ import java.util.List; */ @SystemApi public abstract class InstantAppResolverService extends Service { - private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; + private static final boolean DEBUG_INSTANT = Build.IS_DEBUGGABLE; private static final String TAG = "PackageManager"; /** @hide */ @@ -133,7 +133,7 @@ public abstract class InstantAppResolverService extends Service { @Override public void getInstantAppResolveInfoList(Intent sanitizedIntent, int[] digestPrefix, String token, int sequence, IRemoteCallback callback) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "[" + token + "] Phase1 called; posting"); } final SomeArgs args = SomeArgs.obtain(); @@ -148,7 +148,7 @@ public abstract class InstantAppResolverService extends Service { @Override public void getInstantAppIntentFilterList(Intent sanitizedIntent, int[] digestPrefix, String token, IRemoteCallback callback) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "[" + token + "] Phase2 called; posting"); } final SomeArgs args = SomeArgs.obtain(); @@ -203,7 +203,7 @@ public abstract class InstantAppResolverService extends Service { final String token = (String) args.arg3; final Intent intent = (Intent) args.arg4; final int sequence = message.arg1; - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "[" + token + "] Phase1 request;" + " prefix: " + Arrays.toString(digestPrefix)); } @@ -217,7 +217,7 @@ public abstract class InstantAppResolverService extends Service { final int[] digestPrefix = (int[]) args.arg2; final String token = (String) args.arg3; final Intent intent = (Intent) args.arg4; - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "[" + token + "] Phase2 request;" + " prefix: " + Arrays.toString(digestPrefix)); } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index b3c8737a2831..908465efa0c8 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1554,16 +1554,6 @@ public class Intent implements Parcelable, Cloneable { public static final String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE"; /** - * @hide - * @removed - * @deprecated Do not use. This will go away. - * Replace with {@link #ACTION_INSTALL_INSTANT_APP_PACKAGE}. - */ - @SystemApi - @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) - public static final String ACTION_INSTALL_EPHEMERAL_PACKAGE - = "android.intent.action.INSTALL_EPHEMERAL_PACKAGE"; - /** * Activity Action: Launch instant application installer. *

* This is a protected intent that can only be sent by the system. @@ -1577,16 +1567,6 @@ public class Intent implements Parcelable, Cloneable { = "android.intent.action.INSTALL_INSTANT_APP_PACKAGE"; /** - * @hide - * @removed - * @deprecated Do not use. This will go away. - * Replace with {@link #ACTION_RESOLVE_INSTANT_APP_PACKAGE}. - */ - @SystemApi - @SdkConstant(SdkConstantType.SERVICE_ACTION) - public static final String ACTION_RESOLVE_EPHEMERAL_PACKAGE - = "android.intent.action.RESOLVE_EPHEMERAL_PACKAGE"; - /** * Service Action: Resolve instant application. *

* The system will have a persistent connection to this service. @@ -1601,16 +1581,6 @@ public class Intent implements Parcelable, Cloneable { = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE"; /** - * @hide - * @removed - * @deprecated Do not use. This will go away. - * Replace with {@link #ACTION_INSTANT_APP_RESOLVER_SETTINGS}. - */ - @SystemApi - @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) - public static final String ACTION_EPHEMERAL_RESOLVER_SETTINGS - = "android.intent.action.EPHEMERAL_RESOLVER_SETTINGS"; - /** * Activity Action: Launch instant app settings. * *

diff --git a/core/java/android/content/pm/EphemeralIntentFilter.java b/core/java/android/content/pm/EphemeralIntentFilter.java deleted file mode 100644 index 1dbbf816ed93..000000000000 --- a/core/java/android/content/pm/EphemeralIntentFilter.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2016 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 android.annotation.NonNull; -import android.annotation.Nullable; -import android.annotation.SystemApi; -import android.content.IntentFilter; -import android.os.Parcel; -import android.os.Parcelable; - -import java.util.ArrayList; -import java.util.List; - -/** - * Information about an ephemeral application intent filter. - * @hide - * @removed - */ -@Deprecated -@SystemApi -public final class EphemeralIntentFilter implements Parcelable { - private final InstantAppIntentFilter mInstantAppIntentFilter; - - public EphemeralIntentFilter(@Nullable String splitName, @NonNull List filters) { - mInstantAppIntentFilter = new InstantAppIntentFilter(splitName, filters); - } - - EphemeralIntentFilter(@NonNull InstantAppIntentFilter intentFilter) { - mInstantAppIntentFilter = intentFilter; - } - - EphemeralIntentFilter(Parcel in) { - mInstantAppIntentFilter = in.readParcelable(null /*loader*/); - } - - public String getSplitName() { - return mInstantAppIntentFilter.getSplitName(); - } - - public List getFilters() { - return mInstantAppIntentFilter.getFilters(); - } - - /** @hide */ - InstantAppIntentFilter getInstantAppIntentFilter() { - return mInstantAppIntentFilter; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel out, int flags) { - out.writeParcelable(mInstantAppIntentFilter, flags); - } - - public static final Parcelable.Creator CREATOR - = new Parcelable.Creator() { - @Override - public EphemeralIntentFilter createFromParcel(Parcel in) { - return new EphemeralIntentFilter(in); - } - @Override - public EphemeralIntentFilter[] newArray(int size) { - return new EphemeralIntentFilter[size]; - } - }; -} diff --git a/core/java/android/content/pm/EphemeralResolveInfo.java b/core/java/android/content/pm/EphemeralResolveInfo.java deleted file mode 100644 index 12131a3ebc98..000000000000 --- a/core/java/android/content/pm/EphemeralResolveInfo.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (C) 2015 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 android.annotation.NonNull; -import android.annotation.Nullable; -import android.annotation.SystemApi; -import android.content.IntentFilter; -import android.content.pm.InstantAppResolveInfo.InstantAppDigest; -import android.net.Uri; -import android.os.Parcel; -import android.os.Parcelable; - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -/** - * Information about an ephemeral application. - * @hide - * @removed - */ -@Deprecated -@SystemApi -public final class EphemeralResolveInfo implements Parcelable { - /** Algorithm that will be used to generate the domain digest */ - public static final String SHA_ALGORITHM = "SHA-256"; - - private final InstantAppResolveInfo mInstantAppResolveInfo; - @Deprecated - private final List mLegacyFilters; - - @Deprecated - public EphemeralResolveInfo(@NonNull Uri uri, @NonNull String packageName, - @NonNull List filters) { - if (uri == null || packageName == null || filters == null || filters.isEmpty()) { - throw new IllegalArgumentException(); - } - final List ephemeralFilters = new ArrayList<>(1); - ephemeralFilters.add(new EphemeralIntentFilter(packageName, filters)); - mInstantAppResolveInfo = new InstantAppResolveInfo(uri.getHost(), packageName, - createInstantAppIntentFilterList(ephemeralFilters)); - mLegacyFilters = new ArrayList(filters.size()); - mLegacyFilters.addAll(filters); - } - - @Deprecated - public EphemeralResolveInfo(@NonNull EphemeralDigest digest, @Nullable String packageName, - @Nullable List filters) { - this(digest, packageName, filters, -1 /*versionCode*/); - } - - public EphemeralResolveInfo(@NonNull EphemeralDigest digest, @Nullable String packageName, - @Nullable List filters, int versionCode) { - mInstantAppResolveInfo = new InstantAppResolveInfo( - digest.getInstantAppDigest(), packageName, - createInstantAppIntentFilterList(filters), versionCode); - mLegacyFilters = null; - } - - public EphemeralResolveInfo(@NonNull String hostName, @Nullable String packageName, - @Nullable List filters) { - this(new EphemeralDigest(hostName), packageName, filters); - } - - EphemeralResolveInfo(Parcel in) { - mInstantAppResolveInfo = in.readParcelable(null /*loader*/); - mLegacyFilters = new ArrayList(); - in.readList(mLegacyFilters, null /*loader*/); - } - - /** @hide */ - public InstantAppResolveInfo getInstantAppResolveInfo() { - return mInstantAppResolveInfo; - } - - private static List createInstantAppIntentFilterList( - List filters) { - if (filters == null) { - return null; - } - final int filterCount = filters.size(); - final List returnList = new ArrayList<>(filterCount); - for (int i = 0; i < filterCount; i++) { - returnList.add(filters.get(i).getInstantAppIntentFilter()); - } - return returnList; - } - - public byte[] getDigestBytes() { - return mInstantAppResolveInfo.getDigestBytes(); - } - - public int getDigestPrefix() { - return mInstantAppResolveInfo.getDigestPrefix(); - } - - public String getPackageName() { - return mInstantAppResolveInfo.getPackageName(); - } - - public List getIntentFilters() { - final List filters = mInstantAppResolveInfo.getIntentFilters(); - final int filterCount = filters.size(); - final List returnList = new ArrayList<>(filterCount); - for (int i = 0; i < filterCount; i++) { - returnList.add(new EphemeralIntentFilter(filters.get(i))); - } - return returnList; - } - - public int getVersionCode() { - return mInstantAppResolveInfo.getVersionCode(); - } - - @Deprecated - public List getFilters() { - return mLegacyFilters; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel out, int flags) { - out.writeParcelable(mInstantAppResolveInfo, flags); - out.writeList(mLegacyFilters); - } - - public static final Parcelable.Creator CREATOR - = new Parcelable.Creator() { - @Override - public EphemeralResolveInfo createFromParcel(Parcel in) { - return new EphemeralResolveInfo(in); - } - @Override - public EphemeralResolveInfo[] newArray(int size) { - return new EphemeralResolveInfo[size]; - } - }; - - /** - * Helper class to generate and store each of the digests and prefixes - * sent to the Ephemeral Resolver. - *

- * Since intent filters may want to handle multiple hosts within a - * domain [eg “*.google.com”], the resolver is presented with multiple - * hash prefixes. For example, "a.b.c.d.e" generates digests for - * "d.e", "c.d.e", "b.c.d.e" and "a.b.c.d.e". - * - * @hide - */ - @SystemApi - public static final class EphemeralDigest implements Parcelable { - private final InstantAppDigest mInstantAppDigest; - - public EphemeralDigest(@NonNull String hostName) { - this(hostName, -1 /*maxDigests*/); - } - - /** @hide */ - public EphemeralDigest(@NonNull String hostName, int maxDigests) { - mInstantAppDigest = new InstantAppDigest(hostName, maxDigests); - } - - EphemeralDigest(Parcel in) { - mInstantAppDigest = in.readParcelable(null /*loader*/); - } - - /** @hide */ - InstantAppDigest getInstantAppDigest() { - return mInstantAppDigest; - } - - public byte[][] getDigestBytes() { - return mInstantAppDigest.getDigestBytes(); - } - - public int[] getDigestPrefix() { - return mInstantAppDigest.getDigestPrefix(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel out, int flags) { - out.writeParcelable(mInstantAppDigest, flags); - } - - @SuppressWarnings("hiding") - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public EphemeralDigest createFromParcel(Parcel in) { - return new EphemeralDigest(in); - } - @Override - public EphemeralDigest[] newArray(int size) { - return new EphemeralDigest[size]; - } - }; - } -} diff --git a/services/core/java/com/android/server/pm/InstantAppResolver.java b/services/core/java/com/android/server/pm/InstantAppResolver.java index 55212cc6b3d8..00fdb9d687d1 100644 --- a/services/core/java/com/android/server/pm/InstantAppResolver.java +++ b/services/core/java/com/android/server/pm/InstantAppResolver.java @@ -51,8 +51,8 @@ import android.util.Slog; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; -import com.android.server.pm.EphemeralResolverConnection.ConnectionException; -import com.android.server.pm.EphemeralResolverConnection.PhaseTwoCallback; +import com.android.server.pm.InstantAppResolverConnection.ConnectionException; +import com.android.server.pm.InstantAppResolverConnection.PhaseTwoCallback; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -66,7 +66,7 @@ import java.util.UUID; /** @hide */ public abstract class InstantAppResolver { - private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; + private static final boolean DEBUG_INSTANT = Build.IS_DEBUGGABLE; private static final String TAG = "PackageManager"; private static final int RESOLUTION_SUCCESS = 0; @@ -117,10 +117,10 @@ public abstract class InstantAppResolver { } public static AuxiliaryResolveInfo doInstantAppResolutionPhaseOne( - EphemeralResolverConnection connection, InstantAppRequest requestObj) { + InstantAppResolverConnection connection, InstantAppRequest requestObj) { final long startTime = System.currentTimeMillis(); final String token = UUID.randomUUID().toString(); - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Log.d(TAG, "[" + token + "] Phase1; resolving"); } final Intent origIntent = requestObj.origIntent; @@ -152,7 +152,7 @@ public abstract class InstantAppResolver { logMetrics(ACTION_INSTANT_APP_RESOLUTION_PHASE_ONE, startTime, token, resolutionStatus); } - if (DEBUG_EPHEMERAL && resolveInfo == null) { + if (DEBUG_INSTANT && resolveInfo == null) { if (resolutionStatus == RESOLUTION_BIND_TIMEOUT) { Log.d(TAG, "[" + token + "] Phase1; bind timed out"); } else if (resolutionStatus == RESOLUTION_CALL_TIMEOUT) { @@ -173,11 +173,11 @@ public abstract class InstantAppResolver { } public static void doInstantAppResolutionPhaseTwo(Context context, - EphemeralResolverConnection connection, InstantAppRequest requestObj, + InstantAppResolverConnection connection, InstantAppRequest requestObj, ActivityInfo instantAppInstaller, Handler callbackHandler) { final long startTime = System.currentTimeMillis(); final String token = requestObj.responseObj.token; - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Log.d(TAG, "[" + token + "] Phase2; resolving"); } final Intent origIntent = requestObj.origIntent; @@ -234,7 +234,7 @@ public abstract class InstantAppResolver { } logMetrics(ACTION_INSTANT_APP_RESOLUTION_PHASE_TWO, startTime, token, resolutionStatus); - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { if (resolutionStatus == RESOLUTION_BIND_TIMEOUT) { Log.d(TAG, "[" + token + "] Phase2; bind timed out"); } else { @@ -444,13 +444,13 @@ public abstract class InstantAppResolver { return null; } // No filters; we need to start phase two - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Log.d(TAG, "No app filters; go to phase 2"); } return Collections.emptyList(); } - final PackageManagerService.EphemeralIntentResolver instantAppResolver = - new PackageManagerService.EphemeralIntentResolver(); + final PackageManagerService.InstantAppIntentResolver instantAppResolver = + new PackageManagerService.InstantAppIntentResolver(); for (int j = instantAppFilters.size() - 1; j >= 0; --j) { final InstantAppIntentFilter instantAppFilter = instantAppFilters.get(j); final List splitFilters = instantAppFilter.getFilters(); @@ -481,11 +481,11 @@ public abstract class InstantAppResolver { instantAppResolver.queryIntent( origIntent, resolvedType, false /*defaultOnly*/, userId); if (!matchedResolveInfoList.isEmpty()) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Log.d(TAG, "[" + token + "] Found match(es); " + matchedResolveInfoList); } return matchedResolveInfoList; - } else if (DEBUG_EPHEMERAL) { + } else if (DEBUG_INSTANT) { Log.d(TAG, "[" + token + "] No matches found" + " package: " + instantAppInfo.getPackageName() + ", versionCode: " + instantAppInfo.getVersionCode()); diff --git a/services/core/java/com/android/server/pm/EphemeralResolverConnection.java b/services/core/java/com/android/server/pm/InstantAppResolverConnection.java similarity index 91% rename from services/core/java/com/android/server/pm/EphemeralResolverConnection.java rename to services/core/java/com/android/server/pm/InstantAppResolverConnection.java index 6d6c960eed7e..a9ee41162ae1 100644 --- a/services/core/java/com/android/server/pm/EphemeralResolverConnection.java +++ b/services/core/java/com/android/server/pm/InstantAppResolverConnection.java @@ -37,34 +37,29 @@ import android.util.Slog; import android.util.TimedRemoteCaller; import com.android.internal.annotations.GuardedBy; -import com.android.internal.os.TransferPipe; -import java.io.FileDescriptor; -import java.io.IOException; -import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.TimeoutException; /** - * Represents a remote ephemeral resolver. It is responsible for binding to the remote + * Represents a remote instant app resolver. It is responsible for binding to the remote * service and handling all interactions in a timely manner. * @hide */ -final class EphemeralResolverConnection implements DeathRecipient { +final class InstantAppResolverConnection implements DeathRecipient { private static final String TAG = "PackageManager"; // This is running in a critical section and the timeout must be sufficiently low private static final long BIND_SERVICE_TIMEOUT_MS = Build.IS_ENG ? 500 : 300; private static final long CALL_SERVICE_TIMEOUT_MS = Build.IS_ENG ? 200 : 100; - private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; + private static final boolean DEBUG_INSTANT = Build.IS_DEBUGGABLE; private final Object mLock = new Object(); - private final GetEphemeralResolveInfoCaller mGetEphemeralResolveInfoCaller = - new GetEphemeralResolveInfoCaller(); + private final GetInstantAppResolveInfoCaller mGetInstantAppResolveInfoCaller = + new GetInstantAppResolveInfoCaller(); private final ServiceConnection mServiceConnection = new MyServiceConnection(); private final Context mContext; /** Intent used to bind to the service */ @@ -79,7 +74,7 @@ final class EphemeralResolverConnection implements DeathRecipient { @GuardedBy("mLock") private IInstantAppResolver mRemoteInstance; - public EphemeralResolverConnection( + public InstantAppResolverConnection( Context context, ComponentName componentName, String action) { mContext = context; mIntent = new Intent(action).setComponent(componentName); @@ -98,8 +93,8 @@ final class EphemeralResolverConnection implements DeathRecipient { throw new ConnectionException(ConnectionException.FAILURE_INTERRUPTED); } try { - return mGetEphemeralResolveInfoCaller - .getEphemeralResolveInfoList(target, sanitizedIntent, hashPrefix, token); + return mGetInstantAppResolveInfoCaller + .getInstantAppResolveInfoList(target, sanitizedIntent, hashPrefix, token); } catch (TimeoutException e) { throw new ConnectionException(ConnectionException.FAILURE_CALL); } catch (RemoteException ignore) { @@ -171,7 +166,7 @@ final class EphemeralResolverConnection implements DeathRecipient { if (mBindState == STATE_PENDING) { // there is a pending bind, let's see if we can use it. - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.i(TAG, "[" + token + "] Previous bind timed out; waiting for connection"); } try { @@ -188,7 +183,7 @@ final class EphemeralResolverConnection implements DeathRecipient { if (mBindState == STATE_BINDING) { // someone was binding when we called bind(), or they raced ahead while we were // waiting in the PENDING case; wait for their result instead. Last chance! - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.i(TAG, "[" + token + "] Another thread is binding; waiting for connection"); } waitForBindLocked(token); @@ -206,12 +201,12 @@ final class EphemeralResolverConnection implements DeathRecipient { IInstantAppResolver instance = null; try { if (doUnbind) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.i(TAG, "[" + token + "] Previous connection never established; rebinding"); } mContext.unbindService(mServiceConnection); } - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "[" + token + "] Binding to instant app resolver"); } final int flags = Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE; @@ -247,7 +242,7 @@ final class EphemeralResolverConnection implements DeathRecipient { @Override public void binderDied() { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Binder to instant app resolver died"); } synchronized (mLock) { @@ -286,7 +281,7 @@ final class EphemeralResolverConnection implements DeathRecipient { private final class MyServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Connected to instant app resolver"); } synchronized (mLock) { @@ -295,7 +290,7 @@ final class EphemeralResolverConnection implements DeathRecipient { mBindState = STATE_IDLE; } try { - service.linkToDeath(EphemeralResolverConnection.this, 0 /*flags*/); + service.linkToDeath(InstantAppResolverConnection.this, 0 /*flags*/); } catch (RemoteException e) { handleBinderDiedLocked(); } @@ -305,7 +300,7 @@ final class EphemeralResolverConnection implements DeathRecipient { @Override public void onServiceDisconnected(ComponentName name) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Disconnected from instant app resolver"); } synchronized (mLock) { @@ -314,11 +309,11 @@ final class EphemeralResolverConnection implements DeathRecipient { } } - private static final class GetEphemeralResolveInfoCaller + private static final class GetInstantAppResolveInfoCaller extends TimedRemoteCaller> { private final IRemoteCallback mCallback; - public GetEphemeralResolveInfoCaller() { + public GetInstantAppResolveInfoCaller() { super(CALL_SERVICE_TIMEOUT_MS); mCallback = new IRemoteCallback.Stub() { @Override @@ -333,7 +328,7 @@ final class EphemeralResolverConnection implements DeathRecipient { }; } - public List getEphemeralResolveInfoList( + public List getInstantAppResolveInfoList( IInstantAppResolver target, Intent sanitizedIntent, int hashPrefix[], String token) throws RemoteException, TimeoutException { final int sequence = onBeforeRemoteCall(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6402b5d2e4b2..61569ae8c020 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -424,7 +424,7 @@ public class PackageManagerService extends IPackageManager.Stub public static final boolean DEBUG_DEXOPT = false; private static final boolean DEBUG_ABI_SELECTION = false; - private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; + private static final boolean DEBUG_INSTANT = Build.IS_DEBUGGABLE; private static final boolean DEBUG_TRIAGED_MISSING = false; private static final boolean DEBUG_APP_DATA = false; @@ -981,7 +981,7 @@ public class PackageManagerService extends IPackageManager.Stub private int mIntentFilterVerificationToken = 0; /** The service connection to the ephemeral resolver */ - final EphemeralResolverConnection mInstantAppResolverConnection; + final InstantAppResolverConnection mInstantAppResolverConnection; /** Component used to show resolver settings for Instant Apps */ final ComponentName mInstantAppResolverSettingsComponent; @@ -3149,10 +3149,10 @@ Slog.e("TODD", final Pair instantAppResolverComponent = getInstantAppResolverLPr(); if (instantAppResolverComponent != null) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Set ephemeral resolver: " + instantAppResolverComponent); } - mInstantAppResolverConnection = new EphemeralResolverConnection( + mInstantAppResolverConnection = new InstantAppResolverConnection( mContext, instantAppResolverComponent.first, instantAppResolverComponent.second); mInstantAppResolverSettingsComponent = @@ -3532,7 +3532,7 @@ Slog.e("TODD", final String[] packageArray = mContext.getResources().getStringArray(R.array.config_ephemeralResolverPackage); if (packageArray.length == 0 && !Build.IS_DEBUGGABLE) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Ephemeral resolver NOT found; empty package list"); } return null; @@ -3547,19 +3547,9 @@ Slog.e("TODD", final Intent resolverIntent = new Intent(actionName); List resolvers = queryIntentServicesInternal(resolverIntent, null, resolveFlags, UserHandle.USER_SYSTEM, callingUid, false /*includeInstantApps*/); - // temporarily look for the old action - if (resolvers.size() == 0) { - if (DEBUG_EPHEMERAL) { - Slog.d(TAG, "Ephemeral resolver not found with new action; try old one"); - } - actionName = Intent.ACTION_RESOLVE_EPHEMERAL_PACKAGE; - resolverIntent.setAction(actionName); - resolvers = queryIntentServicesInternal(resolverIntent, null, - resolveFlags, UserHandle.USER_SYSTEM, callingUid, false /*includeInstantApps*/); - } final int N = resolvers.size(); if (N == 0) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Ephemeral resolver NOT found; no matching intent filters"); } return null; @@ -3575,20 +3565,20 @@ Slog.e("TODD", final String packageName = info.serviceInfo.packageName; if (!possiblePackages.contains(packageName) && !Build.IS_DEBUGGABLE) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Ephemeral resolver not in allowed package list;" + " pkg: " + packageName + ", info:" + info); } continue; } - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Ephemeral resolver found;" + " pkg: " + packageName + ", info:" + info); } return new Pair<>(new ComponentName(packageName, info.serviceInfo.name), actionName); } - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Ephemeral resolver NOT found"); } return null; @@ -3598,11 +3588,9 @@ Slog.e("TODD", String[] orderedActions = Build.IS_ENG ? new String[]{ Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE + "_TEST", - Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE, - Intent.ACTION_INSTALL_EPHEMERAL_PACKAGE} + Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE} : new String[]{ - Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE, - Intent.ACTION_INSTALL_EPHEMERAL_PACKAGE}; + Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE}; final int resolveFlags = MATCH_DIRECT_BOOT_AWARE @@ -3618,7 +3606,7 @@ Slog.e("TODD", matches = queryIntentActivitiesInternal(intent, PACKAGE_MIME_TYPE, resolveFlags, UserHandle.USER_SYSTEM); if (matches.isEmpty()) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Instant App installer not found with " + action); } } else { @@ -3656,15 +3644,6 @@ Slog.e("TODD", final int resolveFlags = MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE; List matches = queryIntentActivitiesInternal(intent, null, resolveFlags, UserHandle.USER_SYSTEM); - // temporarily look for the old action - if (matches.isEmpty()) { - if (DEBUG_EPHEMERAL) { - Slog.d(TAG, "Ephemeral resolver settings not found with new action; try old one"); - } - intent.setAction(Intent.ACTION_EPHEMERAL_RESOLVER_SETTINGS); - matches = queryIntentActivitiesInternal(intent, null, resolveFlags, - UserHandle.USER_SYSTEM); - } if (matches.isEmpty()) { return null; } @@ -6007,7 +5986,7 @@ Slog.e("TODD", final int status = (int) (packedStatus >> 32); if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS || status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "DENY instant app;" + " pkg: " + packageName + ", status: " + status); } @@ -6015,7 +5994,7 @@ Slog.e("TODD", } } if (ps.getInstantApp(userId)) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "DENY instant app installed;" + " pkg: " + packageName); } @@ -6651,7 +6630,7 @@ Slog.e("TODD", // there's a local instant application installed, but, the user has // chosen to never use it; skip resolution and don't acknowledge // an instant application is even available - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Instant app marked to never run; pkg: " + packageName); } blockResolution = true; @@ -6659,7 +6638,7 @@ Slog.e("TODD", } else { // we have a locally installed instant application; skip resolution // but acknowledge there's an instant application available - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Found installed instant app; pkg: " + packageName); } localInstantApp = info; @@ -6717,7 +6696,7 @@ Slog.e("TODD", // make sure this resolver is the default ephemeralInstaller.isDefault = true; ephemeralInstaller.auxiliaryInfo = auxiliaryResponse; - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list"); } @@ -7604,7 +7583,7 @@ Slog.e("TODD", info.serviceInfo.splitName)) { // requested service is defined in a split that hasn't been installed yet. // add the installer to the resolve list - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list"); } final ResolveInfo installerInfo = new ResolveInfo( @@ -7726,7 +7705,7 @@ Slog.e("TODD", info.providerInfo.splitName)) { // requested provider is defined in a split that hasn't been installed yet. // add the installer to the resolve list - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list"); } final ResolveInfo installerInfo = new ResolveInfo( @@ -11768,14 +11747,14 @@ Slog.e("TODD", private void setUpInstantAppInstallerActivityLP(ActivityInfo installerActivity) { if (installerActivity == null) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Clear ephemeral installer activity"); } mInstantAppInstallerActivity = null; return; } - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.d(TAG, "Set ephemeral installer activity: " + installerActivity.getComponentName()); } @@ -13235,7 +13214,7 @@ Slog.e("TODD", private int mFlags; } - static final class EphemeralIntentResolver + static final class InstantAppIntentResolver extends IntentResolver { /** @@ -13605,7 +13584,7 @@ Slog.e("TODD", IPackageInstallObserver2 observer, PackageInstaller.SessionParams sessionParams, String installerPackageName, int installerUid, UserHandle user, PackageParser.SigningDetails signingDetails) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { if ((sessionParams.installFlags & PackageManager.INSTALL_INSTANT_APP) != 0) { Slog.d(TAG, "Ephemeral install of " + packageName); } @@ -15089,7 +15068,7 @@ Slog.e("TODD", pkgLite = mContainerService.getMinimalPackageInfo(origin.resolvedPath, installFlags, packageAbiOverride); - if (DEBUG_EPHEMERAL && ephemeral) { + if (DEBUG_INSTANT && ephemeral) { Slog.v(TAG, "pkgLite for install: " + pkgLite); } @@ -15156,7 +15135,7 @@ Slog.e("TODD", installFlags |= PackageManager.INSTALL_EXTERNAL; installFlags &= ~PackageManager.INSTALL_INTERNAL; } else if (loc == PackageHelper.RECOMMEND_INSTALL_EPHEMERAL) { - if (DEBUG_EPHEMERAL) { + if (DEBUG_INSTANT) { Slog.v(TAG, "...setting INSTALL_EPHEMERAL install flag"); } installFlags |= PackageManager.INSTALL_INSTANT_APP;