diff options
-rw-r--r-- | api/current.xml | 40 | ||||
-rw-r--r-- | core/java/android/app/ContextImpl.java | 15 | ||||
-rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 2 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 46 | ||||
-rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 12 | ||||
-rw-r--r-- | test-runner/src/android/test/mock/MockPackageManager.java | 6 |
6 files changed, 106 insertions, 15 deletions
diff --git a/api/current.xml b/api/current.xml index 9bedb67..1305bad 100644 --- a/api/current.xml +++ b/api/current.xml @@ -48120,7 +48120,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="className" type="android.content.ComponentName"> +<parameter name="component" type="android.content.ComponentName"> </parameter> <parameter name="flags" type="int"> </parameter> @@ -48516,6 +48516,23 @@ <parameter name="flags" type="int"> </parameter> </method> +<method name="getProviderInfo" + return="android.content.pm.ProviderInfo" + abstract="true" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="component" type="android.content.ComponentName"> +</parameter> +<parameter name="flags" type="int"> +</parameter> +<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> +</exception> +</method> <method name="getReceiverInfo" return="android.content.pm.ActivityInfo" abstract="true" @@ -48526,7 +48543,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="className" type="android.content.ComponentName"> +<parameter name="component" type="android.content.ComponentName"> </parameter> <parameter name="flags" type="int"> </parameter> @@ -48588,7 +48605,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="className" type="android.content.ComponentName"> +<parameter name="component" type="android.content.ComponentName"> </parameter> <parameter name="flags" type="int"> </parameter> @@ -158313,6 +158330,23 @@ <parameter name="flags" type="int"> </parameter> </method> +<method name="getProviderInfo" + return="android.content.pm.ProviderInfo" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="className" type="android.content.ComponentName"> +</parameter> +<parameter name="flags" type="int"> +</parameter> +<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> +</exception> +</method> <method name="getReceiverInfo" return="android.content.pm.ActivityInfo" abstract="false" diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index f6ce19d..879670e 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -1845,6 +1845,21 @@ class ContextImpl extends Context { } @Override + public ProviderInfo getProviderInfo(ComponentName className, int flags) + throws NameNotFoundException { + try { + ProviderInfo pi = mPM.getProviderInfo(className, flags); + if (pi != null) { + return pi; + } + } catch (RemoteException e) { + throw new RuntimeException("Package manager has died", e); + } + + throw new NameNotFoundException(className.toString()); + } + + @Override public String[] getSystemSharedLibraryNames() { try { return mPM.getSystemSharedLibraryNames(); diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 160a481..4cff3bb 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -68,6 +68,8 @@ interface IPackageManager { ServiceInfo getServiceInfo(in ComponentName className, int flags); + ProviderInfo getProviderInfo(in ComponentName className, int flags); + int checkPermission(String permName, String pkgName); int checkUidPermission(String permName, int uid); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index b14555a..7f166cf 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -996,9 +996,9 @@ public abstract class PackageManager { * <p>Throws {@link NameNotFoundException} if an activity with the given * class name can not be found on the system. * - * @param className The full name (i.e. - * com.google.apps.contacts.ContactsList) of an Activity - * class. + * @param component The full component name (i.e. + * com.google.apps.contacts/com.google.apps.contacts.ContactsList) of an Activity + * class. * @param flags Additional option flags. Use any combination of * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES}, * to modify the data (in ApplicationInfo) returned. @@ -1009,7 +1009,7 @@ public abstract class PackageManager { * @see #GET_META_DATA * @see #GET_SHARED_LIBRARY_FILES */ - public abstract ActivityInfo getActivityInfo(ComponentName className, + public abstract ActivityInfo getActivityInfo(ComponentName component, int flags) throws NameNotFoundException; /** @@ -1019,9 +1019,9 @@ public abstract class PackageManager { * <p>Throws {@link NameNotFoundException} if a receiver with the given * class name can not be found on the system. * - * @param className The full name (i.e. - * com.google.apps.contacts.CalendarAlarm) of a Receiver - * class. + * @param component The full component name (i.e. + * com.google.apps.calendar/com.google.apps.calendar.CalendarAlarm) of a Receiver + * class. * @param flags Additional option flags. Use any combination of * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES}, * to modify the data returned. @@ -1032,7 +1032,7 @@ public abstract class PackageManager { * @see #GET_META_DATA * @see #GET_SHARED_LIBRARY_FILES */ - public abstract ActivityInfo getReceiverInfo(ComponentName className, + public abstract ActivityInfo getReceiverInfo(ComponentName component, int flags) throws NameNotFoundException; /** @@ -1042,9 +1042,9 @@ public abstract class PackageManager { * <p>Throws {@link NameNotFoundException} if a service with the given * class name can not be found on the system. * - * @param className The full name (i.e. - * com.google.apps.media.BackgroundPlayback) of a Service - * class. + * @param component The full component name (i.e. + * com.google.apps.media/com.google.apps.media.BackgroundPlayback) of a Service + * class. * @param flags Additional option flags. Use any combination of * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES}, * to modify the data returned. @@ -1054,7 +1054,29 @@ public abstract class PackageManager { * @see #GET_META_DATA * @see #GET_SHARED_LIBRARY_FILES */ - public abstract ServiceInfo getServiceInfo(ComponentName className, + public abstract ServiceInfo getServiceInfo(ComponentName component, + int flags) throws NameNotFoundException; + + /** + * Retrieve all of the information we know about a particular content + * provider class. + * + * <p>Throws {@link NameNotFoundException} if a provider with the given + * class name can not be found on the system. + * + * @param component The full component name (i.e. + * com.google.providers.media/com.google.providers.media.MediaProvider) of a + * ContentProvider class. + * @param flags Additional option flags. Use any combination of + * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES}, + * to modify the data returned. + * + * @return ProviderInfo containing information about the service. + * + * @see #GET_META_DATA + * @see #GET_SHARED_LIBRARY_FILES + */ + public abstract ProviderInfo getProviderInfo(ComponentName component, int flags) throws NameNotFoundException; /** diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index ab50ba7..abf8b7c 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -1615,6 +1615,18 @@ class PackageManagerService extends IPackageManager.Stub { return null; } + public ProviderInfo getProviderInfo(ComponentName component, int flags) { + synchronized (mPackages) { + PackageParser.Provider p = mProvidersByComponent.get(component); + if (Config.LOGV) Log.v( + TAG, "getProviderInfo " + component + ": " + p); + if (p != null && mSettings.isEnabledLP(p.info, flags)) { + return PackageParser.generateProviderInfo(p, flags); + } + } + return null; + } + public String[] getSystemSharedLibraryNames() { Set<String> libSet; synchronized (mPackages) { diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index e96173b..f0cbaa0 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -127,6 +127,12 @@ public class MockPackageManager extends PackageManager { } @Override + public ProviderInfo getProviderInfo(ComponentName className, int flags) + throws NameNotFoundException { + throw new UnsupportedOperationException(); + } + + @Override public List<PackageInfo> getInstalledPackages(int flags) { throw new UnsupportedOperationException(); } |