diff options
11 files changed, 14 insertions, 120 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 109170615c94..38c8df6ab20c 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -12319,7 +12319,6 @@ package android.content.pm { method public void registerCallback(android.content.pm.LauncherApps.Callback, android.os.Handler); method public void registerPackageInstallerSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.content.pm.PackageInstaller.SessionCallback); method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle); - method @FlaggedApi("android.content.pm.archiving") public void setArchiveCompatibilityOptions(boolean, boolean); method public boolean shouldHideFromSuggestions(@NonNull String, @NonNull android.os.UserHandle); method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle); method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle); diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index ea37e7fbcce1..d8d136ae4df9 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -1548,24 +1548,9 @@ public class AppOpsManager { public static final int OP_READ_SYSTEM_GRAMMATICAL_GENDER = AppProtoEnums.APP_OP_READ_SYSTEM_GRAMMATICAL_GENDER; - /** - * Whether the app has enabled to receive the icon overlay for fetching archived apps. - * - * @hide - */ - public static final int OP_ARCHIVE_ICON_OVERLAY = AppProtoEnums.APP_OP_ARCHIVE_ICON_OVERLAY; - - /** - * Whether the app has enabled compatibility support for unarchival. - * - * @hide - */ - public static final int OP_UNARCHIVAL_CONFIRMATION = - AppProtoEnums.APP_OP_UNARCHIVAL_CONFIRMATION; - /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) - public static final int _NUM_OP = 146; + public static final int _NUM_OP = 144; /** * All app ops represented as strings. @@ -1715,8 +1700,6 @@ public class AppOpsManager { OPSTR_ENABLE_MOBILE_DATA_BY_USER, OPSTR_RESERVED_FOR_TESTING, OPSTR_RAPID_CLEAR_NOTIFICATIONS_BY_LISTENER, - OPSTR_ARCHIVE_ICON_OVERLAY, - OPSTR_UNARCHIVAL_CONFIRMATION, }) public @interface AppOpString {} @@ -2057,20 +2040,6 @@ public class AppOpsManager { public static final String OPSTR_MEDIA_ROUTING_CONTROL = "android:media_routing_control"; /** - * Whether the app has enabled to receive the icon overlay for fetching archived apps. - * - * @hide - */ - public static final String OPSTR_ARCHIVE_ICON_OVERLAY = "android:archive_icon_overlay"; - - /** - * Whether the app has enabled compatibility support for unarchival. - * - * @hide - */ - public static final String OPSTR_UNARCHIVAL_CONFIRMATION = "android:unarchival_support"; - - /** * AppOp granted to apps that we are started via {@code am instrument -e --no-isolated-storage} * * <p>MediaProvider is the only component (outside of system server) that should care about this @@ -2535,8 +2504,6 @@ public class AppOpsManager { OP_RECEIVE_SANDBOXED_DETECTION_TRAINING_DATA, OP_MEDIA_ROUTING_CONTROL, OP_READ_SYSTEM_GRAMMATICAL_GENDER, - OP_ARCHIVE_ICON_OVERLAY, - OP_UNARCHIVAL_CONFIRMATION, }; static final AppOpInfo[] sAppOpInfos = new AppOpInfo[]{ @@ -2993,12 +2960,6 @@ public class AppOpsManager { OPSTR_READ_SYSTEM_GRAMMATICAL_GENDER, "READ_SYSTEM_GRAMMATICAL_GENDER") .setPermission(Manifest.permission.READ_SYSTEM_GRAMMATICAL_GENDER) .build(), - new AppOpInfo.Builder(OP_ARCHIVE_ICON_OVERLAY, OPSTR_ARCHIVE_ICON_OVERLAY, - "ARCHIVE_ICON_OVERLAY") - .setDefaultMode(MODE_ALLOWED).build(), - new AppOpInfo.Builder(OP_UNARCHIVAL_CONFIRMATION, OPSTR_UNARCHIVAL_CONFIRMATION, - "UNARCHIVAL_CONFIRMATION") - .setDefaultMode(MODE_ALLOWED).build(), }; // The number of longs needed to form a full bitmask of app ops @@ -3133,7 +3094,7 @@ public class AppOpsManager { /** * Retrieve the permission associated with an operation, or null if there is not one. - + * * @param op The operation name. * * @hide diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 4f1db7d3784a..34c44f9489d5 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -4032,8 +4032,7 @@ public class ApplicationPackageManager extends PackageManager { private Drawable getArchivedAppIcon(String packageName) { try { return new BitmapDrawable(null, - mPM.getArchivedAppIcon(packageName, new UserHandle(getUserId()), - mContext.getPackageName())); + mPM.getArchivedAppIcon(packageName, new UserHandle(getUserId()))); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl index 62db65f15df3..a97de6368b8c 100644 --- a/core/java/android/content/pm/ILauncherApps.aidl +++ b/core/java/android/content/pm/ILauncherApps.aidl @@ -128,6 +128,4 @@ interface ILauncherApps { /** Unregister a callback, so that it won't be called when LauncherApps dumps. */ void unRegisterDumpCallback(IDumpCallback cb); - - void setArchiveCompatibilityOptions(boolean enableIconOverlay, boolean enableUnarchivalConfirmation); } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 380de965b143..6dc8d4738c87 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -840,7 +840,7 @@ interface IPackageManager { ArchivedPackageParcel getArchivedPackage(in String packageName, int userId); - Bitmap getArchivedAppIcon(String packageName, in UserHandle user, String callingPackageName); + Bitmap getArchivedAppIcon(String packageName, in UserHandle user); boolean isAppArchivable(String packageName, in UserHandle user); } diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index 50be983ec938..1d2b1aff46bc 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -1801,31 +1801,6 @@ public class LauncherApps { } } - /** - * Enable or disable different archive compatibility options of the launcher. - * - * @param enableIconOverlay Provides a cloud overlay for archived apps to ensure users are aware - * that a certain app is archived. True by default. - * Launchers might want to disable this operation if they want to provide custom user experience - * to differentiate archived apps. - * @param enableUnarchivalConfirmation If true, the user is shown a confirmation dialog when - * they click an archived app, which explains that the app will be downloaded and restored in - * the background. True by default. - * Launchers might want to disable this operation if they provide sufficient, alternative user - * guidance to highlight that an unarchival is starting and ongoing once an archived app is - * tapped. E.g., this could be achieved by showing the unarchival progress around the icon. - */ - @FlaggedApi(android.content.pm.Flags.FLAG_ARCHIVING) - public void setArchiveCompatibilityOptions(boolean enableIconOverlay, - boolean enableUnarchivalConfirmation) { - try { - mService.setArchiveCompatibilityOptions(enableIconOverlay, - enableUnarchivalConfirmation); - } catch (RemoteException re) { - throw re.rethrowFromSystemServer(); - } - } - /** @return position in mCallbacks for callback or -1 if not present. */ private int findCallbackLocked(Callback callback) { if (callback == null) { diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index 68c95b16d318..ac826afc1d22 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -18,10 +18,6 @@ package com.android.server.pm; import static android.Manifest.permission.READ_FRAME_BUFFER; import static android.app.ActivityOptions.KEY_SPLASH_SCREEN_THEME; -import static android.app.AppOpsManager.MODE_ALLOWED; -import static android.app.AppOpsManager.MODE_IGNORED; -import static android.app.AppOpsManager.OP_ARCHIVE_ICON_OVERLAY; -import static android.app.AppOpsManager.OP_UNARCHIVAL_CONFIRMATION; import static android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED; import static android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED; import static android.app.PendingIntent.FLAG_IMMUTABLE; @@ -47,7 +43,6 @@ import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.ActivityOptions; import android.app.AppGlobals; -import android.app.AppOpsManager; import android.app.IApplicationThread; import android.app.PendingIntent; import android.app.admin.DevicePolicyCache; @@ -218,7 +213,6 @@ public class LauncherAppsService extends SystemService { private final ActivityTaskManagerInternal mActivityTaskManagerInternal; private final ShortcutServiceInternal mShortcutServiceInternal; private final PackageManagerInternal mPackageManagerInternal; - private final AppOpsManager mAppOpsManager; private final PackageCallbackList<IOnAppsChangedListener> mListeners = new PackageCallbackList<IOnAppsChangedListener>(); private final DevicePolicyManager mDpm; @@ -259,7 +253,6 @@ public class LauncherAppsService extends SystemService { LocalServices.getService(ShortcutServiceInternal.class)); mPackageManagerInternal = Objects.requireNonNull( LocalServices.getService(PackageManagerInternal.class)); - mAppOpsManager = mContext.getSystemService(AppOpsManager.class); mShortcutServiceInternal.addListener(mPackageMonitor); mShortcutChangeHandler = new ShortcutChangeHandler(mUserManagerInternal); mShortcutServiceInternal.addShortcutChangeCallback(mShortcutChangeHandler); @@ -2005,23 +1998,6 @@ public class LauncherAppsService extends SystemService { } } - @Override - public void setArchiveCompatibilityOptions(boolean enableIconOverlay, - boolean enableUnarchivalConfirmation) { - int callingUid = Binder.getCallingUid(); - Binder.withCleanCallingIdentity( - () -> { - mAppOpsManager.setUidMode( - OP_ARCHIVE_ICON_OVERLAY, - callingUid, - enableIconOverlay ? MODE_ALLOWED : MODE_IGNORED); - mAppOpsManager.setUidMode( - OP_UNARCHIVAL_CONFIRMATION, - callingUid, - enableUnarchivalConfirmation ? MODE_ALLOWED : MODE_IGNORED); - }); - } - /** Checks if user is a profile of or same as listeningUser. * and the user is enabled. */ private boolean isEnabledProfileOf(UserHandle listeningUser, UserHandle user, diff --git a/services/core/java/com/android/server/pm/PackageArchiver.java b/services/core/java/com/android/server/pm/PackageArchiver.java index c1b3673865dc..1a20c8ddc32f 100644 --- a/services/core/java/com/android/server/pm/PackageArchiver.java +++ b/services/core/java/com/android/server/pm/PackageArchiver.java @@ -20,7 +20,6 @@ import static android.app.ActivityManager.START_ABORTED; import static android.app.ActivityManager.START_CLASS_NOT_FOUND; import static android.app.ActivityManager.START_PERMISSION_DENIED; import static android.app.ActivityManager.START_SUCCESS; -import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_IGNORED; import static android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED; import static android.content.pm.ArchivedActivityInfo.bytesFromBitmap; @@ -274,12 +273,11 @@ public class PackageArchiver { Slog.i(TAG, TextUtils.formatSimple("Unarchival is starting for: %s", packageName)); try { + // TODO(b/311709794) Make showUnarchivalConfirmation dependent on the compat options. requestUnarchive(packageName, callerPackageName, getOrCreateLauncherListener(userId, packageName), UserHandle.of(userId), - getAppOpsManager().checkOp( - AppOpsManager.OP_UNARCHIVAL_CONFIRMATION, callingUid, callerPackageName) - == MODE_ALLOWED); + false /* showUnarchivalConfirmation= */); } catch (Throwable t) { Slog.e(TAG, TextUtils.formatSimple( "Unexpected error occurred while unarchiving package %s: %s.", packageName, @@ -796,8 +794,7 @@ public class PackageArchiver { * <p> The icon is returned without any treatment/overlay. In the rare case the app had multiple * launcher activities, only one of the icons is returned arbitrarily. */ - public Bitmap getArchivedAppIcon(@NonNull String packageName, @NonNull UserHandle user, - String callingPackageName) { + public Bitmap getArchivedAppIcon(@NonNull String packageName, @NonNull UserHandle user) { Objects.requireNonNull(packageName); Objects.requireNonNull(user); @@ -820,13 +817,7 @@ public class PackageArchiver { // TODO(b/298452477) Handle monochrome icons. // In the rare case the archived app defined more than two launcher activities, we choose // the first one arbitrarily. - Bitmap icon = decodeIcon(archiveState.getActivityInfos().get(0)); - if (getAppOpsManager().checkOp( - AppOpsManager.OP_ARCHIVE_ICON_OVERLAY, callingUid, callingPackageName) - == MODE_ALLOWED) { - icon = includeCloudOverlay(icon); - } - return icon; + return includeCloudOverlay(decodeIcon(archiveState.getActivityInfos().get(0))); } /** diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index f09fa21792dd..609b3aa3f43d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6388,10 +6388,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService } @Override - public Bitmap getArchivedAppIcon(@NonNull String packageName, @NonNull UserHandle user, - @NonNull String callingPackageName) { - return mInstallerService.mPackageArchiver.getArchivedAppIcon(packageName, user, - callingPackageName); + public Bitmap getArchivedAppIcon(@NonNull String packageName, @NonNull UserHandle user) { + return mInstallerService.mPackageArchiver.getArchivedAppIcon(packageName, user); } @Override diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java index e989d7b060be..ec7e35982311 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java @@ -552,22 +552,20 @@ public class PackageArchiverTest { when(mComputer.getPackageStateFiltered(eq(PACKAGE), anyInt(), anyInt())).thenReturn( null); - assertThat(mArchiveManager.getArchivedAppIcon(PACKAGE, UserHandle.CURRENT, - CALLER_PACKAGE)).isNull(); + assertThat(mArchiveManager.getArchivedAppIcon(PACKAGE, UserHandle.CURRENT)).isNull(); } @Test public void getArchivedAppIcon_notArchived() { - assertThat(mArchiveManager.getArchivedAppIcon(PACKAGE, UserHandle.CURRENT, - CALLER_PACKAGE)).isNull(); + assertThat(mArchiveManager.getArchivedAppIcon(PACKAGE, UserHandle.CURRENT)).isNull(); } @Test public void getArchivedAppIcon_success() { mUserState.setArchiveState(createArchiveState()).setInstalled(false); - assertThat(mArchiveManager.getArchivedAppIcon(PACKAGE, UserHandle.CURRENT, - CALLER_PACKAGE)).isEqualTo(mIcon); + assertThat(mArchiveManager.getArchivedAppIcon(PACKAGE, UserHandle.CURRENT)).isEqualTo( + mIcon); } diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java index 81df597f3f33..080548520b0c 100644 --- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java @@ -157,7 +157,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { return mMockDevicePolicyManager; case Context.APP_SEARCH_SERVICE: case Context.ROLE_SERVICE: - case Context.APP_OPS_SERVICE: // RoleManager is final and cannot be mocked, so we only override the inject // accessor methods in ShortcutService. return getTestContext().getSystemService(name); |