Loading api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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(); Loading @@ -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); Loading core/java/android/app/ApplicationPackageManager.java +18 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading core/java/android/content/pm/IPackageManager.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -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); } core/java/android/content/pm/PackageManager.java +33 −0 Original line number Diff line number Diff line Loading @@ -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"); } } core/java/android/content/pm/PackageUserState.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } /** Loading Loading @@ -247,6 +249,11 @@ public class PackageUserState { } } } if (harmfulAppWarning == null && oldState.harmfulAppWarning != null || (harmfulAppWarning != null && !harmfulAppWarning.equals(oldState.harmfulAppWarning))) { return false; } return true; } } Loading
api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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(); Loading @@ -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); Loading
core/java/android/app/ApplicationPackageManager.java +18 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
core/java/android/content/pm/IPackageManager.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -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); }
core/java/android/content/pm/PackageManager.java +33 −0 Original line number Diff line number Diff line Loading @@ -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"); } }
core/java/android/content/pm/PackageUserState.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } /** Loading Loading @@ -247,6 +249,11 @@ public class PackageUserState { } } } if (harmfulAppWarning == null && oldState.harmfulAppWarning != null || (harmfulAppWarning != null && !harmfulAppWarning.equals(oldState.harmfulAppWarning))) { return false; } return true; } }