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

Commit 1ab3d6e5 authored by Ben Gruver's avatar Ben Gruver
Browse files

Implement harmful app warning at activity launch

Bug: 63909431
Test: manual

Change-Id: I8a5497421cb8130af8cdd5129b0f6e1707a01e36
parent 464eb00e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ package android {
    field public static final java.lang.String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH";
    field public static final java.lang.String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE";
    field public static final java.lang.String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP";
    field public static final java.lang.String SET_HARMFUL_APP_WARNINGS = "android.permission.SET_HARMFUL_APP_WARNINGS";
    field public static final java.lang.String SET_MEDIA_KEY_LISTENER = "android.permission.SET_MEDIA_KEY_LISTENER";
    field public static final java.lang.String SET_ORIENTATION = "android.permission.SET_ORIENTATION";
    field public static final java.lang.String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED";
@@ -896,6 +897,7 @@ package android.content.pm {
    method public abstract java.util.List<android.content.IntentFilter> getAllIntentFilters(java.lang.String);
    method public android.content.pm.dex.ArtManager getArtManager();
    method public abstract java.lang.String getDefaultBrowserPackageNameAsUser(int);
    method public java.lang.CharSequence getHarmfulAppWarning(java.lang.String);
    method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
    method public abstract android.graphics.drawable.Drawable getInstantAppIcon(java.lang.String);
    method public abstract android.content.ComponentName getInstantAppInstallerComponent();
@@ -912,6 +914,7 @@ package android.content.pm {
    method public abstract void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
    method public abstract void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
    method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
    method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence);
    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);
+18 −0
Original line number Diff line number Diff line
@@ -2737,6 +2737,24 @@ public class ApplicationPackageManager extends PackageManager {
        }
    }

    @Override
    public CharSequence getHarmfulAppWarning(String packageName) {
        try {
            return mPM.getHarmfulAppWarning(packageName, mContext.getUserId());
        } catch (RemoteException e) {
            throw e.rethrowAsRuntimeException();
        }
    }

    @Override
    public void setHarmfulAppWarning(String packageName, CharSequence warning) {
        try {
            mPM.setHarmfulAppWarning(packageName, warning, mContext.getUserId());
        } catch (RemoteException e) {
            throw e.rethrowAsRuntimeException();
        }
    }

    @Override
    public ArtManager getArtManager() {
        synchronized (mLock) {
+4 −0
Original line number Diff line number Diff line
@@ -652,4 +652,8 @@ interface IPackageManager {
    String getInstantAppAndroidId(String packageName, int userId);

    IArtManager getArtManager();

    void setHarmfulAppWarning(String packageName, CharSequence warning, int userId);

    CharSequence getHarmfulAppWarning(String packageName, int userId);
}
+33 −0
Original line number Diff line number Diff line
@@ -5862,4 +5862,37 @@ public abstract class PackageManager {
    public @NonNull ArtManager getArtManager() {
        throw new UnsupportedOperationException("getArtManager not implemented in subclass");
    }

    /**
     * Sets or clears the harmful app warning details for the given app.
     *
     * When set, any attempt to launch an activity in this package will be intercepted and a
     * warning dialog will be shown to the user instead, with the given warning. The user
     * will have the option to proceed with the activity launch, or to uninstall the application.
     *
     * @param packageName The full name of the package to warn on.
     * @param warning A warning string to display to the user describing the threat posed by the
     *                application, or null to clear the warning.
     *
     * @hide
     */
    @RequiresPermission(Manifest.permission.SET_HARMFUL_APP_WARNINGS)
    @SystemApi
    public void setHarmfulAppWarning(@NonNull String packageName, @Nullable CharSequence warning) {
        throw new UnsupportedOperationException("setHarmfulAppWarning not implemented in subclass");
    }

    /**
     * Returns the harmful app warning string for the given app, or null if there is none set.
     *
     * @param packageName The full name of the desired package.
     *
     * @hide
     */
    @RequiresPermission(Manifest.permission.SET_HARMFUL_APP_WARNINGS)
    @Nullable
    @SystemApi
    public CharSequence getHarmfulAppWarning(@NonNull String packageName) {
        throw new UnsupportedOperationException("getHarmfulAppWarning not implemented in subclass");
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ public class PackageUserState {
    public int appLinkGeneration;
    public int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED;
    public int installReason;
    public String harmfulAppWarning;

    public ArraySet<String> disabledComponents;
    public ArraySet<String> enabledComponents;
@@ -87,6 +88,7 @@ public class PackageUserState {
        enabledComponents = ArrayUtils.cloneOrNull(o.enabledComponents);
        overlayPaths =
            o.overlayPaths == null ? null : Arrays.copyOf(o.overlayPaths, o.overlayPaths.length);
        harmfulAppWarning = o.harmfulAppWarning;
    }

    /**
@@ -247,6 +249,11 @@ public class PackageUserState {
                }
            }
        }
        if (harmfulAppWarning == null && oldState.harmfulAppWarning != null
                || (harmfulAppWarning != null
                        && !harmfulAppWarning.equals(oldState.harmfulAppWarning))) {
            return false;
        }
        return true;
    }
}
Loading