summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt1
-rw-r--r--core/java/android/app/ApplicationPackageManager.java13
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl5
-rw-r--r--core/java/android/content/pm/PackageManager.java9
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java31
5 files changed, 51 insertions, 8 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index cfb503757de1..bc0272fc4432 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -12039,6 +12039,7 @@ package android.content.pm {
method public boolean getSyntheticAppDetailsActivityEnabled(@NonNull String);
method @NonNull public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method @Nullable public abstract String[] getSystemSharedLibraryNames();
+ method @IntRange(from=0) public int getTargetSdkVersion(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
method @Nullable public abstract CharSequence getText(@NonNull String, @StringRes int, @Nullable android.content.pm.ApplicationInfo);
method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle, @Nullable android.graphics.Rect, int);
method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedIcon(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle);
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 425073c92045..17e527d7e617 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -451,6 +451,19 @@ public class ApplicationPackageManager extends PackageManager {
}
@Override
+ public int getTargetSdkVersion(@NonNull String packageName) throws NameNotFoundException {
+ try {
+ int version = mPM.getTargetSdkVersion(packageName);
+ if (version != -1) {
+ return version;
+ }
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ throw new PackageManager.NameNotFoundException(packageName);
+ }
+
+ @Override
public ActivityInfo getActivityInfo(ComponentName className, int flags)
throws NameNotFoundException {
final int userId = getUserId();
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 5f8754efb47f..7e082d583a1c 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -82,6 +82,11 @@ interface IPackageManager {
@UnsupportedAppUsage
ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId);
+ /**
+ * @return the target SDK for the given package name, or -1 if it cannot be retrieved
+ */
+ int getTargetSdkVersion(String packageName);
+
@UnsupportedAppUsage
ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId);
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index e699ee475279..7e17256f0229 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -4270,6 +4270,15 @@ public abstract class PackageManager {
}
/**
+ * @return The target SDK version for the given package name.
+ * @throws NameNotFoundException if a package with the given name cannot be found on the system.
+ */
+ @IntRange(from = 0)
+ public int getTargetSdkVersion(@NonNull String packageName) throws NameNotFoundException {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
* Retrieve all of the information we know about a particular activity
* class.
*
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 40e8f8558aba..8558ffcd66fc 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -5352,6 +5352,23 @@ public class PackageManagerService extends IPackageManager.Stub
}
@Override
+ public int getTargetSdkVersion(String packageName) {
+ synchronized (mLock) {
+ final AndroidPackage pkg = mPackages.get(packageName);
+ if (pkg == null) {
+ return -1;
+ }
+
+ final PackageSetting ps = getPackageSetting(pkg.getPackageName());
+ if (shouldFilterApplicationLocked(ps, Binder.getCallingUid(),
+ UserHandle.getCallingUserId())) {
+ return -1;
+ }
+ return pkg.getTargetSdkVersion();
+ }
+ }
+
+ @Override
public ActivityInfo getActivityInfo(ComponentName component, int flags, int userId) {
return getActivityInfoInternal(component, flags, Binder.getCallingUid(), userId);
}
@@ -24062,15 +24079,13 @@ public class PackageManagerService extends IPackageManager.Stub
}
@Override
- public int getTargetSdkVersionForPackage(String packageName)
- throws RemoteException {
- int callingUser = UserHandle.getUserId(Binder.getCallingUid());
- ApplicationInfo info = getApplicationInfo(packageName, 0, callingUser);
- if (info == null) {
- throw new RemoteException(
- "Couldn't get ApplicationInfo for package " + packageName);
+ public int getTargetSdkVersionForPackage(String packageName) throws RemoteException {
+ int targetSdk = getTargetSdkVersion(packageName);
+ if (targetSdk != -1) {
+ return targetSdk;
}
- return info.targetSdkVersion;
+
+ throw new RemoteException("Couldn't get targetSdkVersion for package " + packageName);
}
@Override