Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab53289c authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Add API to mark apps that have an update available

Ostensibly for instant apps, we allow play to mark an app as having
an update available. This will trigger instant app resolution even
if the instant app is already installed on device.

Bug: 35143464
Test: Manual; launch URI of installed instant app, see it runs w/o resolution. set bit. launch URI of installed instant app, see it runs resolution
Change-Id: I511df2b2a3eab39377167c770255ccbe02d5dad2
parent 00de0e64
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -11241,6 +11241,7 @@ package android.content.pm {
    method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
    method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
    method public abstract boolean setInstantAppCookie(byte[]);
    method public abstract void setUpdateAvailable(java.lang.String, boolean);
    method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int);
    method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
    method public abstract void verifyIntentFilter(int, int, java.util.List<java.lang.String>);
@@ -44138,6 +44139,7 @@ package android.test.mock {
    method public boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
    method public void setInstallerPackageName(java.lang.String, java.lang.String);
    method public boolean setInstantAppCookie(byte[]);
    method public void setUpdateAvailable(java.lang.String, boolean);
    method public boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int);
    method public void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
    method public void verifyIntentFilter(int, int, java.util.List<java.lang.String>);
+9 −0
Original line number Diff line number Diff line
@@ -1813,6 +1813,15 @@ public class ApplicationPackageManager extends PackageManager {
        }
    }

    @Override
    public void setUpdateAvailable(String packageName, boolean updateAvailable) {
        try {
            mPM.setUpdateAvailable(packageName, updateAvailable);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @Override
    public String getInstallerPackageName(String packageName) {
        try {
+6 −0
Original line number Diff line number Diff line
@@ -608,6 +608,12 @@ interface IPackageManager {

    boolean setRequiredForSystemUser(String packageName, boolean systemUserApp);

    /**
     * Sets whether or not an update is available. Ostensibly for instant apps
     * to force exteranl resolution.
     */
    void setUpdateAvailable(String packageName, boolean updateAvaialble);

    String getServicesSystemSharedLibraryPackageName();
    String getSharedSystemSharedLibraryPackageName();

+5 −0
Original line number Diff line number Diff line
@@ -5286,6 +5286,11 @@ public abstract class PackageManager {
    public abstract void setInstallerPackageName(String targetPackage,
            String installerPackageName);

    /** @hide */
    @SystemApi
    @RequiresPermission(Manifest.permission.INSTALL_PACKAGES)
    public abstract void setUpdateAvailable(String packageName, boolean updateAvaialble);

    /**
     * Attempts to delete a package. Since this may take a little while, the
     * result will be posted back to the given observer. A deletion will fail if
+17 −0
Original line number Diff line number Diff line
@@ -12190,6 +12190,11 @@ public class PackageManagerService extends IPackageManager.Stub {
            if (!isInstantApp && userState.instantApp) {
                return null;
            }
            // throw out instant app filters if updates are available; will trigger
            // instant app resolution
            if (userState.instantApp && ps.isUpdateAvailable()) {
                return null;
            }
            final ResolveInfo res = new ResolveInfo();
            res.activityInfo = ai;
            if ((mFlags&PackageManager.GET_RESOLVED_FILTER) != 0) {
@@ -16885,6 +16890,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            final PackageSetting ps = mSettings.mPackages.get(pkgName);
            if (ps != null) {
                res.newUsers = ps.queryInstalledUsers(sUserManager.getUserIds(), true);
                ps.setUpdateAvailable(false /*updateAvailable*/);
            }
            final int childCount = (pkg.childPackages != null) ? pkg.childPackages.size() : 0;
@@ -19673,6 +19679,17 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
        setEnabledSetting(appPackageName, null, newState, flags, userId, callingPackage);
    }
    @Override
    public void setUpdateAvailable(String packageName, boolean updateAvailable) {
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
        synchronized (mPackages) {
            final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
            if (pkgSetting != null) {
                pkgSetting.setUpdateAvailable(updateAvailable);
            }
        }
    }
    @Override
    public void setComponentEnabledSetting(ComponentName componentName,
            int newState, int flags, int userId) {
Loading