Add public API to check if current app is auto-revoke exempt am: 2ac02b0d3e

Change-Id: Ibc08f0165d0f91071cfd0674fb303cf644253812
This commit is contained in:
Automerger Merge Worker
2020-03-13 22:54:54 +00:00
5 changed files with 41 additions and 0 deletions

View File

@@ -12025,6 +12025,7 @@ package android.content.pm {
method public boolean hasSigningCertificate(int, @NonNull byte[], int);
method public abstract boolean hasSystemFeature(@NonNull String);
method public abstract boolean hasSystemFeature(@NonNull String, int);
method public boolean isAutoRevokeWhitelisted();
method public boolean isDefaultApplicationIcon(@NonNull android.graphics.drawable.Drawable);
method public boolean isDeviceUpgrading();
method public abstract boolean isInstantApp();

View File

@@ -3337,6 +3337,15 @@ public class ApplicationPackageManager extends PackageManager {
}
}
@Override
public boolean isAutoRevokeWhitelisted() {
try {
return mPM.isAutoRevokeWhitelisted(mContext.getPackageName());
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
}
public void setMimeGroup(String mimeGroup, Set<String> mimeTypes) {
try {
mPM.setMimeGroup(mContext.getPackageName(), mimeGroup,

View File

@@ -748,4 +748,6 @@ interface IPackageManager {
void clearMimeGroup(String packageName, String group);
List<String> getMimeGroup(String packageName, String group);
boolean isAutoRevokeWhitelisted(String packageName);
}

View File

@@ -7834,6 +7834,15 @@ public abstract class PackageManager {
"sendDeviceCustomizationReadyBroadcast not implemented in subclass");
}
/**
* @return whether this package is whitelisted from having its runtime permission be
* auto-revoked if unused for an extended period of time.
*/
public boolean isAutoRevokeWhitelisted() {
throw new UnsupportedOperationException(
"isAutoRevokeWhitelisted not implemented in subclass");
}
/**
* Returns if the provided drawable represents the default activity icon provided by the system.
*

View File

@@ -24,6 +24,8 @@ import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.REQUEST_DELETE_PACKAGES;
import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_IGNORED;
import static android.content.Intent.ACTION_MAIN;
import static android.content.Intent.CATEGORY_DEFAULT;
import static android.content.Intent.CATEGORY_HOME;
@@ -24360,6 +24362,24 @@ public class PackageManagerService extends IPackageManager.Stub
mCompilerStats.deletePackageStats(pkgName);
}
@Override
public boolean isAutoRevokeWhitelisted(String packageName) {
int mode = mInjector.getAppOpsManager().checkOpNoThrow(
AppOpsManager.OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED,
Binder.getCallingUid(), packageName);
if (mode == MODE_ALLOWED) {
return false;
} else if (mode == MODE_IGNORED) {
return true;
} else {
synchronized (mLock) {
boolean manifestWhitelisted =
mPackages.get(packageName).isAllowDontAutoRevokePermmissions();
return manifestWhitelisted;
}
}
}
@Override
public int getInstallReason(String packageName, int userId) {
final int callingUid = Binder.getCallingUid();