diff options
author | 2020-10-16 16:57:02 +0000 | |
---|---|---|
committer | 2020-10-16 16:57:02 +0000 | |
commit | db1a1524b5450b0b796e8f1a18f34b9c6487d975 (patch) | |
tree | a1e202661d424047ab8d2bba0418e639ef5b3373 | |
parent | 2ef3f14284c498c9f19f25ed3d9810fa6ff162b7 (diff) | |
parent | 69475be84755aa38839614c51e76689eae3cc51c (diff) |
Merge changes I2f7b198f,I229b39ce,Iaf8e2c07
* changes:
Revert "[incremental/pm] LauncherApps APIs for loading state and progress"
Revert "[pm/incremental/api] exposing package state names and reasons"
Revert "Fix LauncherAppsService queryIntentLauncherActivities"
17 files changed, 98 insertions, 400 deletions
diff --git a/api/current.txt b/api/current.txt index d282be1a83de..d20bff2da8eb 100644 --- a/api/current.txt +++ b/api/current.txt @@ -10668,15 +10668,12 @@ package android.content { field public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; field public static final String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED"; field public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH"; - field public static final String ACTION_PACKAGE_FULLY_LOADED = "android.intent.action.PACKAGE_FULLY_LOADED"; field public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED"; field @Deprecated public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; field public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION"; field public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; field public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED"; field public static final String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED"; - field public static final String ACTION_PACKAGE_STARTABLE = "android.intent.action.PACKAGE_STARTABLE"; - field public static final String ACTION_PACKAGE_UNSTARTABLE = "android.intent.action.PACKAGE_UNSTARTABLE"; field public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED"; field public static final String ACTION_PASTE = "android.intent.action.PASTE"; field public static final String ACTION_PICK = "android.intent.action.PICK"; @@ -10841,7 +10838,6 @@ package android.content { field public static final String EXTRA_TIMEZONE = "time-zone"; field public static final String EXTRA_TITLE = "android.intent.extra.TITLE"; field public static final String EXTRA_UID = "android.intent.extra.UID"; - field public static final String EXTRA_UNSTARTABLE_REASON = "android.intent.extra.UNSTARTABLE_REASON"; field public static final String EXTRA_USER = "android.intent.extra.USER"; field public static final int FILL_IN_ACTION = 1; // 0x1 field public static final int FILL_IN_CATEGORIES = 4; // 0x4 @@ -11715,10 +11711,7 @@ package android.content.pm { method public android.graphics.drawable.Drawable getIcon(int); method public CharSequence getLabel(); method public String getName(); - method public float getProgress(); method public android.os.UserHandle getUser(); - method public boolean isLoading(); - method public boolean isStartable(); } public class LauncherApps { @@ -11758,7 +11751,6 @@ package android.content.pm { ctor public LauncherApps.Callback(); method public abstract void onPackageAdded(String, android.os.UserHandle); method public abstract void onPackageChanged(String, android.os.UserHandle); - method public void onPackageProgressChanged(@NonNull String, @NonNull android.os.UserHandle, float); method public abstract void onPackageRemoved(String, android.os.UserHandle); method public abstract void onPackagesAvailable(String[], android.os.UserHandle, boolean); method public void onPackagesSuspended(String[], android.os.UserHandle); @@ -12305,9 +12297,6 @@ package android.content.pm { field public static final int SYNCHRONOUS = 2; // 0x2 field @Nullable public static final java.util.List<java.security.cert.Certificate> TRUST_ALL; field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_NONE; - field public static final int UNSTARTABLE_REASON_CONNECTION_ERROR = 1; // 0x1 - field public static final int UNSTARTABLE_REASON_INSUFFICIENT_STORAGE = 2; // 0x2 - field public static final int UNSTARTABLE_REASON_UNKNOWN = 0; // 0x0 field public static final int VERIFICATION_ALLOW = 1; // 0x1 field public static final int VERIFICATION_REJECT = -1; // 0xffffffff field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 653064d41bff..5622ccab3c20 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -2744,6 +2744,7 @@ public class Intent implements Parcelable, Cloneable { * </ul> * * <p class="note">This is a protected intent that can only be sent by the system. + * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_PACKAGE_STARTABLE = "android.intent.action.PACKAGE_STARTABLE"; @@ -2754,13 +2755,13 @@ public class Intent implements Parcelable, Cloneable { * <ul> * <li> {@link #EXTRA_UID} containing the integer uid assigned to the package. </li> * <li> {@link #EXTRA_PACKAGE_NAME} containing the package name. </li> - * <li> {@link #EXTRA_UNSTARTABLE_REASON} containing the integer indicating the reason for - * the state change, + * <li> {@link #EXTRA_REASON} containing the integer indicating the reason for the state change, * @see PackageManager.UnstartableReason * </li> * </ul> * * <p class="note">This is a protected intent that can only be sent by the system. + * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_PACKAGE_UNSTARTABLE = @@ -2775,6 +2776,7 @@ public class Intent implements Parcelable, Cloneable { * </ul> * * <p class="note">This is a protected intent that can only be sent by the system. + * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_PACKAGE_FULLY_LOADED = @@ -6013,13 +6015,6 @@ public class Intent implements Parcelable, Cloneable { */ public static final String EXTRA_LOCUS_ID = "android.intent.extra.LOCUS_ID"; - /** - * Intent extra: the reason that the package associated with this intent has become unstartable. - * - * <p>Type: String - */ - public static final String EXTRA_UNSTARTABLE_REASON = "android.intent.extra.UNSTARTABLE_REASON"; - // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Intent flags (see mFlags variable). diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl index d9ecf46069cd..389458b64fc1 100644 --- a/core/java/android/content/pm/ILauncherApps.aidl +++ b/core/java/android/content/pm/ILauncherApps.aidl @@ -21,9 +21,9 @@ import android.content.ComponentName; import android.content.Intent; import android.content.IntentSender; import android.content.LocusId; +import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IOnAppsChangedListener; -import android.content.pm.LauncherActivityInfoInternal; import android.content.pm.LauncherApps; import android.content.pm.ShortcutQueryWrapper; import android.content.pm.IPackageInstallerCallback; @@ -47,7 +47,7 @@ interface ILauncherApps { void removeOnAppsChangedListener(in IOnAppsChangedListener listener); ParceledListSlice getLauncherActivities( String callingPackage, String packageName, in UserHandle user); - LauncherActivityInfoInternal resolveLauncherActivityInternal( + ActivityInfo resolveActivity( String callingPackage, in ComponentName component, in UserHandle user); void startSessionDetailsActivityAsUser(in IApplicationThread caller, String callingPackage, String callingFeatureId, in PackageInstaller.SessionInfo sessionInfo, diff --git a/core/java/android/content/pm/IOnAppsChangedListener.aidl b/core/java/android/content/pm/IOnAppsChangedListener.aidl index f24ed80983f8..fcb1de016078 100644 --- a/core/java/android/content/pm/IOnAppsChangedListener.aidl +++ b/core/java/android/content/pm/IOnAppsChangedListener.aidl @@ -33,5 +33,4 @@ oneway interface IOnAppsChangedListener { in Bundle launcherExtras); void onPackagesUnsuspended(in UserHandle user, in String[] packageNames); void onShortcutChanged(in UserHandle user, String packageName, in ParceledListSlice shortcuts); - void onPackageProgressChanged(in UserHandle user, String packageName, float progress); } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index c32d34457889..30f3325cc11c 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -31,6 +31,7 @@ import android.content.pm.IPackageInstaller; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageDeleteObserver2; import android.content.pm.IPackageDataObserver; +import android.content.pm.IPackageLoadingProgressCallback; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IntentFilterVerificationInfo; diff --git a/core/java/android/content/pm/LauncherActivityInfo.java b/core/java/android/content/pm/LauncherActivityInfo.java index ead80d022542..67deb82f1fbb 100644 --- a/core/java/android/content/pm/LauncherActivityInfo.java +++ b/core/java/android/content/pm/LauncherActivityInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; @@ -34,19 +35,28 @@ public class LauncherActivityInfo { private static final String TAG = "LauncherActivityInfo"; private final PackageManager mPm; + + @UnsupportedAppUsage + private ActivityInfo mActivityInfo; + private ComponentName mComponentName; private UserHandle mUser; - private final LauncherActivityInfoInternal mInternal; /** * Create a launchable activity object for a given ResolveInfo and user. * * @param context The context for fetching resources. - + * @param info ResolveInfo from which to create the LauncherActivityInfo. + * @param user The UserHandle of the profile to which this activity belongs. */ - LauncherActivityInfo(Context context, UserHandle user, LauncherActivityInfoInternal internal) { - mPm = context.getPackageManager(); + LauncherActivityInfo(Context context, ActivityInfo info, UserHandle user) { + this(context); + mActivityInfo = info; + mComponentName = new ComponentName(info.packageName, info.name); mUser = user; - mInternal = internal; + } + + LauncherActivityInfo(Context context) { + mPm = context.getPackageManager(); } /** @@ -55,7 +65,7 @@ public class LauncherActivityInfo { * @return ComponentName of the activity */ public ComponentName getComponentName() { - return mInternal.getComponentName(); + return mComponentName; } /** @@ -80,28 +90,7 @@ public class LauncherActivityInfo { */ public CharSequence getLabel() { // TODO: Go through LauncherAppsService - return mInternal.getActivityInfo().loadLabel(mPm); - } - - /** - * @return whether the package is startable. - */ - public boolean isStartable() { - return mInternal.getIncrementalStatesInfo().isStartable(); - } - - /** - * @return whether the package is still loading. - */ - public boolean isLoading() { - return mInternal.getIncrementalStatesInfo().isLoading(); - } - - /** - * @return Package loading progress - */ - public float getProgress() { - return mInternal.getIncrementalStatesInfo().getProgress(); + return mActivityInfo.loadLabel(mPm); } /** @@ -114,20 +103,20 @@ public class LauncherActivityInfo { */ public Drawable getIcon(int density) { // TODO: Go through LauncherAppsService - final int iconRes = mInternal.getActivityInfo().getIconResource(); + final int iconRes = mActivityInfo.getIconResource(); Drawable icon = null; // Get the preferred density icon from the app's resources if (density != 0 && iconRes != 0) { try { - final Resources resources = mPm.getResourcesForApplication( - mInternal.getActivityInfo().applicationInfo); + final Resources resources + = mPm.getResourcesForApplication(mActivityInfo.applicationInfo); icon = resources.getDrawableForDensity(iconRes, density); } catch (NameNotFoundException | Resources.NotFoundException exc) { } } // Get the default density icon if (icon == null) { - icon = mInternal.getActivityInfo().loadIcon(mPm); + icon = mActivityInfo.loadIcon(mPm); } return icon; } @@ -139,7 +128,7 @@ public class LauncherActivityInfo { * @hide remove before shipping */ public int getApplicationFlags() { - return mInternal.getActivityInfo().flags; + return mActivityInfo.applicationInfo.flags; } /** @@ -147,7 +136,7 @@ public class LauncherActivityInfo { * @return */ public ApplicationInfo getApplicationInfo() { - return mInternal.getActivityInfo().applicationInfo; + return mActivityInfo.applicationInfo; } /** @@ -158,7 +147,7 @@ public class LauncherActivityInfo { public long getFirstInstallTime() { try { // TODO: Go through LauncherAppsService - return mPm.getPackageInfo(mInternal.getActivityInfo().packageName, + return mPm.getPackageInfo(mActivityInfo.packageName, PackageManager.MATCH_UNINSTALLED_PACKAGES).firstInstallTime; } catch (NameNotFoundException nnfe) { // Sorry, can't find package @@ -171,7 +160,7 @@ public class LauncherActivityInfo { * @return the name from android:name for the acitivity. */ public String getName() { - return mInternal.getActivityInfo().name; + return mActivityInfo.name; } /** diff --git a/core/java/android/content/pm/LauncherActivityInfoInternal.aidl b/core/java/android/content/pm/LauncherActivityInfoInternal.aidl deleted file mode 100644 index 5d98d54a27a0..000000000000 --- a/core/java/android/content/pm/LauncherActivityInfoInternal.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* -** -** Copyright 2020, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License") -** you may not use this file except in compliance with the License. -** 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; - -parcelable LauncherActivityInfoInternal;
\ No newline at end of file diff --git a/core/java/android/content/pm/LauncherActivityInfoInternal.java b/core/java/android/content/pm/LauncherActivityInfoInternal.java deleted file mode 100644 index 839b1761aadf..000000000000 --- a/core/java/android/content/pm/LauncherActivityInfoInternal.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * 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.compat.annotation.UnsupportedAppUsage; -import android.content.ComponentName; -import android.os.Parcel; -import android.os.Parcelable; - -/** - * @hide - */ -public class LauncherActivityInfoInternal implements Parcelable { - @UnsupportedAppUsage - private ActivityInfo mActivityInfo; - private ComponentName mComponentName; - @NonNull private IncrementalStatesInfo mIncrementalStatesInfo; - - /** - * @param info ActivityInfo from which to create the LauncherActivityInfo. - * @param incrementalStatesInfo The package's states. - */ - public LauncherActivityInfoInternal(ActivityInfo info, - @Nullable IncrementalStatesInfo incrementalStatesInfo) { - mActivityInfo = info; - mComponentName = new ComponentName(info.packageName, info.name); - if (incrementalStatesInfo == null) { - // default value for non-incremental apps - mIncrementalStatesInfo = new IncrementalStatesInfo( - true /* isStartable */, false /* isLoading */, 1 /* progress */); - } else { - mIncrementalStatesInfo = incrementalStatesInfo; - } - } - - public LauncherActivityInfoInternal(Parcel source) { - mActivityInfo = source.readParcelable(ActivityInfo.class.getClassLoader()); - mComponentName = new ComponentName(mActivityInfo.packageName, mActivityInfo.name); - mIncrementalStatesInfo = source.readParcelable( - IncrementalStatesInfo.class.getClassLoader()); - } - - public ComponentName getComponentName() { - return mComponentName; - } - - public ActivityInfo getActivityInfo() { - return mActivityInfo; - } - - public IncrementalStatesInfo getIncrementalStatesInfo() { - return mIncrementalStatesInfo; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(mActivityInfo, 0); - dest.writeParcelable(mIncrementalStatesInfo, 0); - } - - public static final @android.annotation.NonNull Creator<LauncherActivityInfoInternal> CREATOR = - new Creator<LauncherActivityInfoInternal>() { - public LauncherActivityInfoInternal createFromParcel(Parcel source) { - return new LauncherActivityInfoInternal(source); - } - public LauncherActivityInfoInternal[] newArray(int size) { - return new LauncherActivityInfoInternal[size]; - } - }; -} diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index b7af397cd36a..1a694b34474a 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -218,7 +218,6 @@ public class LauncherApps { * Indicates that a package was modified in the specified profile. * This can happen, for example, when the package is updated or when * one or more components are enabled or disabled. - * It can also happen if package state has changed, i.e., package becomes unstartable. * * @param packageName The name of the package that has changed. * @param user The UserHandle of the profile that generated the change. @@ -324,16 +323,6 @@ public class LauncherApps { public void onShortcutsChanged(@NonNull String packageName, @NonNull List<ShortcutInfo> shortcuts, @NonNull UserHandle user) { } - - /** - * Indicates that the loading progress of an installed package has changed. - * - * @param packageName The name of the package that has changed. - * @param user The UserHandle of the profile that generated the change. - * @param progress The new progress value, between [0, 1]. - */ - public void onPackageProgressChanged(@NonNull String packageName, - @NonNull UserHandle user, float progress) {} } /** @@ -726,15 +715,16 @@ public class LauncherApps { public LauncherActivityInfo resolveActivity(Intent intent, UserHandle user) { logErrorForInvalidProfileAccess(user); try { - LauncherActivityInfoInternal ai = mService.resolveLauncherActivityInternal( - mContext.getPackageName(), intent.getComponent(), user); - if (ai == null) { - return null; + ActivityInfo ai = mService.resolveActivity(mContext.getPackageName(), + intent.getComponent(), user); + if (ai != null) { + LauncherActivityInfo info = new LauncherActivityInfo(mContext, ai, user); + return info; } - return new LauncherActivityInfo(mContext, user, ai); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } + return null; } /** @@ -823,13 +813,13 @@ public class LauncherApps { } private List<LauncherActivityInfo> convertToActivityList( - @Nullable ParceledListSlice<LauncherActivityInfoInternal> internals, UserHandle user) { - if (internals == null || internals.getList().isEmpty()) { + @Nullable ParceledListSlice<ResolveInfo> activities, UserHandle user) { + if (activities == null) { return Collections.EMPTY_LIST; } ArrayList<LauncherActivityInfo> lais = new ArrayList<>(); - for (LauncherActivityInfoInternal internal : internals.getList()) { - LauncherActivityInfo lai = new LauncherActivityInfo(mContext, user, internal); + for (ResolveInfo ri : activities.getList()) { + LauncherActivityInfo lai = new LauncherActivityInfo(mContext, ri.activityInfo, user); if (DEBUG) { Log.v(TAG, "Returning activity for profile " + user + " : " + lai.getComponentName()); @@ -1677,19 +1667,6 @@ public class LauncherApps { } } } - - public void onPackageProgressChanged(UserHandle user, String packageName, - float progress) { - if (DEBUG) { - Log.d(TAG, "onPackageProgressChanged " + user.getIdentifier() + "," - + packageName + "," + progress); - } - synchronized (LauncherApps.this) { - for (CallbackMessageHandler callback : mCallbacks) { - callback.postOnPackageProgressChanged(user, packageName, progress); - } - } - } }; private static class CallbackMessageHandler extends Handler { @@ -1701,7 +1678,6 @@ public class LauncherApps { private static final int MSG_SUSPENDED = 6; private static final int MSG_UNSUSPENDED = 7; private static final int MSG_SHORTCUT_CHANGED = 8; - private static final int MSG_LOADING_PROGRESS_CHANGED = 9; private LauncherApps.Callback mCallback; @@ -1712,7 +1688,6 @@ public class LauncherApps { boolean replacing; UserHandle user; List<ShortcutInfo> shortcuts; - float mLoadingProgress; } public CallbackMessageHandler(Looper looper, LauncherApps.Callback callback) { @@ -1752,10 +1727,6 @@ public class LauncherApps { case MSG_SHORTCUT_CHANGED: mCallback.onShortcutsChanged(info.packageName, info.shortcuts, info.user); break; - case MSG_LOADING_PROGRESS_CHANGED: - mCallback.onPackageProgressChanged(info.packageName, info.user, - info.mLoadingProgress); - break; } } @@ -1822,15 +1793,6 @@ public class LauncherApps { info.shortcuts = shortcuts; obtainMessage(MSG_SHORTCUT_CHANGED, info).sendToTarget(); } - - public void postOnPackageProgressChanged(UserHandle user, String packageName, - float progress) { - CallbackInfo info = new CallbackInfo(); - info.packageName = packageName; - info.user = user; - info.mLoadingProgress = progress; - obtainMessage(MSG_LOADING_PROGRESS_CHANGED, info).sendToTarget(); - } } /** diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 923f8cb38d38..72499d54cfed 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3790,8 +3790,8 @@ public abstract class PackageManager { * @hide */ @IntDef({UNSTARTABLE_REASON_UNKNOWN, - UNSTARTABLE_REASON_CONNECTION_ERROR, - UNSTARTABLE_REASON_INSUFFICIENT_STORAGE + UNSTARTABLE_REASON_DATALOADER_TRANSPORT, + UNSTARTABLE_REASON_DATALOADER_STORAGE }) @Retention(RetentionPolicy.SOURCE) public @interface UnstartableReason {} @@ -3800,20 +3800,23 @@ public abstract class PackageManager { * Unstartable state with no root cause specified. E.g., data loader seeing missing pages but * unclear about the cause. This corresponds to a generic alert window shown to the user when * the user attempts to launch the app. + * @hide */ public static final int UNSTARTABLE_REASON_UNKNOWN = 0; /** - * Unstartable state due to connection issues that interrupt package loading. - * This corresponds to an alert window shown to the user indicating connection errors. + * Unstartable state after hint from dataloader of issues with the transport layer. + * This corresponds to an alert window shown to the user indicating network errors. + * @hide */ - public static final int UNSTARTABLE_REASON_CONNECTION_ERROR = 1; + public static final int UNSTARTABLE_REASON_DATALOADER_TRANSPORT = 1; /** * Unstartable state after encountering storage limitations. * This corresponds to an alert window indicating limited storage. + * @hide */ - public static final int UNSTARTABLE_REASON_INSUFFICIENT_STORAGE = 2; + public static final int UNSTARTABLE_REASON_DATALOADER_STORAGE = 2; /** {@hide} */ public int getUserId() { diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java index af666d87d6f1..3682b7bcd891 100644 --- a/core/java/com/android/internal/content/PackageMonitor.java +++ b/core/java/com/android/internal/content/PackageMonitor.java @@ -37,7 +37,6 @@ import java.util.Objects; * updating, and disappearing and reappearing on the SD card. */ public abstract class PackageMonitor extends android.content.BroadcastReceiver { - static final String TAG = "PackageMonitor"; static final IntentFilter sPackageFilt = new IntentFilter(); static final IntentFilter sNonDataFilt = new IntentFilter(); static final IntentFilter sExternalFilt = new IntentFilter(); @@ -49,9 +48,6 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { sPackageFilt.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART); sPackageFilt.addAction(Intent.ACTION_PACKAGE_RESTARTED); sPackageFilt.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED); - sPackageFilt.addAction(Intent.ACTION_PACKAGE_STARTABLE); - sPackageFilt.addAction(Intent.ACTION_PACKAGE_UNSTARTABLE); - sPackageFilt.addAction(Intent.ACTION_PACKAGE_FULLY_LOADED); sPackageFilt.addDataScheme("package"); sNonDataFilt.addAction(Intent.ACTION_UID_REMOVED); sNonDataFilt.addAction(Intent.ACTION_USER_STOPPED); @@ -309,13 +305,6 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageDataCleared(String packageName, int uid) { } - /** - * Callback to indicate the package's state has changed. - * @param packageName Name of an installed package - * @param uid The UID the package runs under. - */ - public void onPackageStateChanged(String packageName, int uid) {} - public int getChangingUserId() { return mChangeUserId; } @@ -463,21 +452,12 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { String[] pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); mSomePackagesChanged = true; onPackagesUnsuspended(pkgList); - } else if (Intent.ACTION_PACKAGE_STARTABLE.equals(action) - || Intent.ACTION_PACKAGE_UNSTARTABLE.equals(action) - || Intent.ACTION_PACKAGE_FULLY_LOADED.equals(action)) { - String pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); - int uid = intent.getIntExtra(Intent.EXTRA_UID, 0); - mSomePackagesChanged = false; - if (pkg != null) { - onPackageStateChanged(pkg, uid); - } } if (mSomePackagesChanged) { onSomePackagesChanged(); } - + onFinishPackageChanges(); mChangeUserId = UserHandle.USER_NULL; } diff --git a/non-updatable-api/current.txt b/non-updatable-api/current.txt index fb85c7c99053..74c79d76bb24 100644 --- a/non-updatable-api/current.txt +++ b/non-updatable-api/current.txt @@ -10668,15 +10668,12 @@ package android.content { field public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; field public static final String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED"; field public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH"; - field public static final String ACTION_PACKAGE_FULLY_LOADED = "android.intent.action.PACKAGE_FULLY_LOADED"; field public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED"; field @Deprecated public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; field public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION"; field public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; field public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED"; field public static final String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED"; - field public static final String ACTION_PACKAGE_STARTABLE = "android.intent.action.PACKAGE_STARTABLE"; - field public static final String ACTION_PACKAGE_UNSTARTABLE = "android.intent.action.PACKAGE_UNSTARTABLE"; field public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED"; field public static final String ACTION_PASTE = "android.intent.action.PASTE"; field public static final String ACTION_PICK = "android.intent.action.PICK"; @@ -10841,7 +10838,6 @@ package android.content { field public static final String EXTRA_TIMEZONE = "time-zone"; field public static final String EXTRA_TITLE = "android.intent.extra.TITLE"; field public static final String EXTRA_UID = "android.intent.extra.UID"; - field public static final String EXTRA_UNSTARTABLE_REASON = "android.intent.extra.UNSTARTABLE_REASON"; field public static final String EXTRA_USER = "android.intent.extra.USER"; field public static final int FILL_IN_ACTION = 1; // 0x1 field public static final int FILL_IN_CATEGORIES = 4; // 0x4 @@ -11715,10 +11711,7 @@ package android.content.pm { method public android.graphics.drawable.Drawable getIcon(int); method public CharSequence getLabel(); method public String getName(); - method public float getProgress(); method public android.os.UserHandle getUser(); - method public boolean isLoading(); - method public boolean isStartable(); } public class LauncherApps { @@ -11758,7 +11751,6 @@ package android.content.pm { ctor public LauncherApps.Callback(); method public abstract void onPackageAdded(String, android.os.UserHandle); method public abstract void onPackageChanged(String, android.os.UserHandle); - method public void onPackageProgressChanged(@NonNull String, @NonNull android.os.UserHandle, float); method public abstract void onPackageRemoved(String, android.os.UserHandle); method public abstract void onPackagesAvailable(String[], android.os.UserHandle, boolean); method public void onPackagesSuspended(String[], android.os.UserHandle); @@ -12305,9 +12297,6 @@ package android.content.pm { field public static final int SYNCHRONOUS = 2; // 0x2 field @Nullable public static final java.util.List<java.security.cert.Certificate> TRUST_ALL; field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_NONE; - field public static final int UNSTARTABLE_REASON_CONNECTION_ERROR = 1; // 0x1 - field public static final int UNSTARTABLE_REASON_INSUFFICIENT_STORAGE = 2; // 0x2 - field public static final int UNSTARTABLE_REASON_UNKNOWN = 0; // 0x0 field public static final int VERIFICATION_ALLOW = 1; // 0x1 field public static final int VERIFICATION_REJECT = -1; // 0xffffffff field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index 72a21522b545..43c54b4a97b3 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -1106,17 +1106,4 @@ public abstract class PackageManagerInternal { } } - /** - * Retrieve all of the information we know about a particular activity class including its - * package states. - * - * @param packageName a specific package - * @param filterCallingUid The results will be filtered in the context of this UID instead - * of the calling UID. - * @param userId The user for whom the package is installed - * @return IncrementalStatesInfo that contains information about package states. - */ - public abstract IncrementalStatesInfo getIncrementalStatesInfo(String packageName, - int filterCallingUid, int userId); - } diff --git a/services/core/java/com/android/server/pm/IncrementalStates.java b/services/core/java/com/android/server/pm/IncrementalStates.java index ababb8365c4f..dda5fafb8cb1 100644 --- a/services/core/java/com/android/server/pm/IncrementalStates.java +++ b/services/core/java/com/android/server/pm/IncrementalStates.java @@ -376,10 +376,10 @@ public final class IncrementalStates { case IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR: // fall through case IDataLoaderStatusListener.STREAM_SOURCE_ERROR: { - return PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR; + return PackageManager.UNSTARTABLE_REASON_DATALOADER_TRANSPORT; } case IDataLoaderStatusListener.STREAM_STORAGE_ERROR: { - return PackageManager.UNSTARTABLE_REASON_INSUFFICIENT_STORAGE; + return PackageManager.UNSTARTABLE_REASON_DATALOADER_STORAGE; } default: return PackageManager.UNSTARTABLE_REASON_UNKNOWN; diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index f8bb564f9021..9bb6f7892972 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -44,8 +44,6 @@ import android.content.pm.IOnAppsChangedListener; import android.content.pm.IPackageInstallerCallback; import android.content.pm.IPackageManager; import android.content.pm.IShortcutChangeCallback; -import android.content.pm.IncrementalStatesInfo; -import android.content.pm.LauncherActivityInfoInternal; import android.content.pm.LauncherApps; import android.content.pm.LauncherApps.ShortcutQuery; import android.content.pm.PackageInfo; @@ -371,13 +369,18 @@ public class LauncherAppsService extends SystemService { } } - private LauncherActivityInfoInternal getHiddenAppActivityInfo(String packageName, - int callingUid, UserHandle user) { + private ResolveInfo getHiddenAppActivityInfo(String packageName, int callingUid, + UserHandle user) { Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME)); - final List<LauncherActivityInfoInternal> apps = queryIntentLauncherActivities(intent, - callingUid, user); + final PackageManagerInternal pmInt = + LocalServices.getService(PackageManagerInternal.class); + List<ResolveInfo> apps = pmInt.queryIntentActivities(intent, + intent.resolveTypeIfNeeded(mContext.getContentResolver()), + PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, + callingUid, user.getIdentifier()); if (apps.size() > 0) { return apps.get(0); } @@ -396,14 +399,14 @@ public class LauncherAppsService extends SystemService { } @Override - public ParceledListSlice<LauncherActivityInfoInternal> getLauncherActivities( - String callingPackage, String packageName, UserHandle user) throws RemoteException { - ParceledListSlice<LauncherActivityInfoInternal> launcherActivities = - queryActivitiesForUser(callingPackage, - new Intent(Intent.ACTION_MAIN) - .addCategory(Intent.CATEGORY_LAUNCHER) - .setPackage(packageName), - user); + public ParceledListSlice<ResolveInfo> getLauncherActivities(String callingPackage, + String packageName, UserHandle user) throws RemoteException { + ParceledListSlice<ResolveInfo> launcherActivities = queryActivitiesForUser( + callingPackage, + new Intent(Intent.ACTION_MAIN) + .addCategory(Intent.CATEGORY_LAUNCHER) + .setPackage(packageName), + user); if (Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.SHOW_HIDDEN_LAUNCHER_ICON_APPS_ENABLED, 1) == 0) { return launcherActivities; @@ -425,8 +428,7 @@ public class LauncherAppsService extends SystemService { return launcherActivities; } - final ArrayList<LauncherActivityInfoInternal> result = new ArrayList<>( - launcherActivities.getList()); + final ArrayList<ResolveInfo> result = new ArrayList<>(launcherActivities.getList()); final PackageManagerInternal pmInt = LocalServices.getService(PackageManagerInternal.class); if (packageName != null) { @@ -438,8 +440,7 @@ public class LauncherAppsService extends SystemService { ApplicationInfo appInfo = pmInt.getApplicationInfo(packageName, /*flags*/ 0, callingUid, user.getIdentifier()); if (shouldShowSyntheticActivity(user, appInfo)) { - LauncherActivityInfoInternal info = getHiddenAppActivityInfo(packageName, - callingUid, user); + ResolveInfo info = getHiddenAppActivityInfo(packageName, callingUid, user); if (info != null) { result.add(info); } @@ -447,8 +448,8 @@ public class LauncherAppsService extends SystemService { return new ParceledListSlice<>(result); } final HashSet<String> visiblePackages = new HashSet<>(); - for (LauncherActivityInfoInternal info : result) { - visiblePackages.add(info.getActivityInfo().packageName); + for (ResolveInfo info : result) { + visiblePackages.add(info.activityInfo.packageName); } List<ApplicationInfo> installedPackages = pmInt.getInstalledApplications(0, user.getIdentifier(), callingUid); @@ -457,8 +458,8 @@ public class LauncherAppsService extends SystemService { if (!shouldShowSyntheticActivity(user, applicationInfo)) { continue; } - LauncherActivityInfoInternal info = getHiddenAppActivityInfo( - applicationInfo.packageName, callingUid, user); + ResolveInfo info = getHiddenAppActivityInfo(applicationInfo.packageName, + callingUid, user); if (info != null) { result.add(info); } @@ -532,7 +533,7 @@ public class LauncherAppsService extends SystemService { } @Override - public LauncherActivityInfoInternal resolveLauncherActivityInternal( + public ActivityInfo resolveActivity( String callingPackage, ComponentName component, UserHandle user) throws RemoteException { if (!canAccessProfile(user.getIdentifier(), "Cannot resolve activity")) { @@ -544,18 +545,10 @@ public class LauncherAppsService extends SystemService { try { final PackageManagerInternal pmInt = LocalServices.getService(PackageManagerInternal.class); - final ActivityInfo activityInfo = pmInt.getActivityInfo(component, + return pmInt.getActivityInfo(component, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, callingUid, user.getIdentifier()); - final IncrementalStatesInfo incrementalStatesInfo; - if (component.getPackageName() == null) { - incrementalStatesInfo = null; - } else { - incrementalStatesInfo = pmInt.getIncrementalStatesInfo( - component.getPackageName(), callingUid, user.getIdentifier()); - } - return new LauncherActivityInfoInternal(activityInfo, incrementalStatesInfo); } finally { Binder.restoreCallingIdentity(ident); } @@ -569,47 +562,28 @@ public class LauncherAppsService extends SystemService { new Intent(Intent.ACTION_CREATE_SHORTCUT).setPackage(packageName), user); } - private ParceledListSlice<LauncherActivityInfoInternal> queryActivitiesForUser( - String callingPackage, Intent intent, UserHandle user) { + private ParceledListSlice<ResolveInfo> queryActivitiesForUser(String callingPackage, + Intent intent, UserHandle user) { if (!canAccessProfile(user.getIdentifier(), "Cannot retrieve activities")) { return null; } + final int callingUid = injectBinderCallingUid(); long ident = injectClearCallingIdentity(); try { - return new ParceledListSlice<>(queryIntentLauncherActivities(intent, callingUid, - user)); + final PackageManagerInternal pmInt = + LocalServices.getService(PackageManagerInternal.class); + List<ResolveInfo> apps = pmInt.queryIntentActivities(intent, + intent.resolveTypeIfNeeded(mContext.getContentResolver()), + PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, + callingUid, user.getIdentifier()); + return new ParceledListSlice<>(apps); } finally { injectRestoreCallingIdentity(ident); } } - private List<LauncherActivityInfoInternal> queryIntentLauncherActivities( - Intent intent, int callingUid, UserHandle user) { - final PackageManagerInternal pmInt = - LocalServices.getService(PackageManagerInternal.class); - List<ResolveInfo> apps = pmInt.queryIntentActivities(intent, - intent.resolveTypeIfNeeded(mContext.getContentResolver()), - PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, - callingUid, user.getIdentifier()); - final int numResolveInfos = apps.size(); - List<LauncherActivityInfoInternal> results = new ArrayList<>(); - for (int i = 0; i < numResolveInfos; i++) { - final ResolveInfo ri = apps.get(i); - final IncrementalStatesInfo incrementalStatesInfo; - if (ri.resolvePackageName == null) { - incrementalStatesInfo = null; - } else { - incrementalStatesInfo = pmInt.getIncrementalStatesInfo( - ri.resolvePackageName, callingUid, user.getIdentifier()); - } - results.add(new LauncherActivityInfoInternal(ri.activityInfo, - incrementalStatesInfo)); - } - return results; - } - @Override public IntentSender getShortcutConfigActivityIntent(String callingPackage, ComponentName component, UserHandle user) throws RemoteException { @@ -1264,10 +1238,7 @@ public class LauncherAppsService extends SystemService { } finally { mListeners.finishBroadcast(); } - PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class); - pmi.registerInstalledLoadingProgressCallback(packageName, - new PackageLoadingProgressCallback(packageName, user), - user.getIdentifier()); + super.onPackageAdded(packageName, uid); } @@ -1295,11 +1266,6 @@ public class LauncherAppsService extends SystemService { @Override public void onPackageModified(String packageName) { - onPackageChanged(packageName); - super.onPackageModified(packageName); - } - - private void onPackageChanged(String packageName) { UserHandle user = new UserHandle(getChangingUserId()); final int n = mListeners.beginBroadcast(); try { @@ -1316,6 +1282,8 @@ public class LauncherAppsService extends SystemService { } finally { mListeners.finishBroadcast(); } + + super.onPackageModified(packageName); } @Override @@ -1467,7 +1435,6 @@ public class LauncherAppsService extends SystemService { } catch (RemoteException re) { Slog.d(TAG, "Callback failed ", re); } - } } catch (RuntimeException e) { // When the user is locked we get IllegalState, so just catch all. @@ -1476,12 +1443,6 @@ public class LauncherAppsService extends SystemService { mListeners.finishBroadcast(); } } - - @Override - public void onPackageStateChanged(String packageName, int uid) { - onPackageChanged(packageName); - super.onPackageStateChanged(packageName, uid); - } } class PackageCallbackList<T extends IInterface> extends RemoteCallbackList<T> { @@ -1490,38 +1451,5 @@ public class LauncherAppsService extends SystemService { checkCallbackCount(); } } - - class PackageLoadingProgressCallback extends - PackageManagerInternal.InstalledLoadingProgressCallback { - private String mPackageName; - private UserHandle mUser; - - PackageLoadingProgressCallback(String packageName, UserHandle user) { - super(mCallbackHandler); - mPackageName = packageName; - mUser = user; - } - - @Override - public void onLoadingProgressChanged(float progress) { - final int n = mListeners.beginBroadcast(); - try { - for (int i = 0; i < n; i++) { - IOnAppsChangedListener listener = mListeners.getBroadcastItem(i); - BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i); - if (!isEnabledProfileOf(cookie.user, mUser, "onLoadingProgressChanged")) { - continue; - } - try { - listener.onPackageProgressChanged(mUser, mPackageName, progress); - } catch (RemoteException re) { - Slog.d(TAG, "Callback failed ", re); - } - } - } finally { - mListeners.finishBroadcast(); - } - } - } } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 39423c71d757..d529f0e604f9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -180,7 +180,6 @@ import android.content.pm.IPackageManager; import android.content.pm.IPackageManagerNative; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; -import android.content.pm.IncrementalStatesInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.InstantAppInfo; import android.content.pm.InstantAppRequest; @@ -17334,7 +17333,7 @@ public class PackageManagerService extends IPackageManager.Stub Bundle extras = new Bundle(); extras.putInt(Intent.EXTRA_UID, mUid); extras.putString(Intent.EXTRA_PACKAGE_NAME, mPackageName); - extras.putInt(Intent.EXTRA_UNSTARTABLE_REASON, reason); + extras.putInt(Intent.EXTRA_REASON, reason); // send broadcast to users with this app installed sendPackageBroadcast(Intent.ACTION_PACKAGE_UNSTARTABLE, mPackageName, extras, 0 /*flags*/, @@ -25659,20 +25658,8 @@ public class PackageManagerService extends IPackageManager.Stub return mIncrementalManager.unregisterCallback(ps.getPathString(), (IPackageLoadingProgressCallback) callback.getBinder()); } - - @Override - public IncrementalStatesInfo getIncrementalStatesInfo( - @NonNull String packageName, int filterCallingUid, int userId) { - final PackageSetting ps = getPackageSettingForUser(packageName, filterCallingUid, - userId); - if (ps == null) { - return null; - } - return ps.getIncrementalStates(); - } } - @GuardedBy("mLock") private SparseArray<String> getAppsWithSharedUserIdsLocked() { final SparseArray<String> sharedUserIds = new SparseArray<>(); diff --git a/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java b/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java index c4c2f68e8219..62e135b09593 100644 --- a/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java @@ -146,7 +146,7 @@ public class IncrementalStatesTest { // Test that package is now unstartable assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); assertFalse(mIncrementalStates.isStartable()); - assertEquals(PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR, + assertEquals(PackageManager.UNSTARTABLE_REASON_DATALOADER_TRANSPORT, mUnstartableReason.get()); } @@ -160,7 +160,7 @@ public class IncrementalStatesTest { // Test that package is now unstartable assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); assertFalse(mIncrementalStates.isStartable()); - assertEquals(PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR, + assertEquals(PackageManager.UNSTARTABLE_REASON_DATALOADER_TRANSPORT, mUnstartableReason.get()); } @@ -181,7 +181,7 @@ public class IncrementalStatesTest { // Test that package is now unstartable assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); assertFalse(mIncrementalStates.isStartable()); - assertEquals(PackageManager.UNSTARTABLE_REASON_INSUFFICIENT_STORAGE, + assertEquals(PackageManager.UNSTARTABLE_REASON_DATALOADER_STORAGE, mUnstartableReason.get()); } @@ -202,7 +202,7 @@ public class IncrementalStatesTest { // Test that package is now unstartable assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS)); assertFalse(mIncrementalStates.isStartable()); - assertEquals(PackageManager.UNSTARTABLE_REASON_INSUFFICIENT_STORAGE, + assertEquals(PackageManager.UNSTARTABLE_REASON_DATALOADER_STORAGE, mUnstartableReason.get()); } |