Merge "PackageManagerNative: Implement getModuleMetadataPackageName" into qt-dev
diff --git a/services/core/java/com/android/server/pm/ModuleInfoProvider.java b/services/core/java/com/android/server/pm/ModuleInfoProvider.java
index 6499530..69510d9 100644
--- a/services/core/java/com/android/server/pm/ModuleInfoProvider.java
+++ b/services/core/java/com/android/server/pm/ModuleInfoProvider.java
@@ -64,6 +64,7 @@
 
     // TODO: Move this to an earlier boot phase if anybody requires it then.
     private volatile boolean mMetadataLoaded;
+    private volatile String mPackageName;
 
     ModuleInfoProvider(Context context, IPackageManager packageManager) {
         mContext = context;
@@ -81,9 +82,9 @@
 
     /** Called by the {@code PackageManager} when it has completed its boot sequence */
     public void systemReady() {
-        final String packageName = mContext.getResources().getString(
+        mPackageName = mContext.getResources().getString(
                 R.string.config_defaultModuleMetadataProvider);
-        if (TextUtils.isEmpty(packageName)) {
+        if (TextUtils.isEmpty(mPackageName)) {
             Slog.w(TAG, "No configured module metadata provider.");
             return;
         }
@@ -91,13 +92,13 @@
         final Resources packageResources;
         final PackageInfo pi;
         try {
-            pi = mPackageManager.getPackageInfo(packageName,
+            pi = mPackageManager.getPackageInfo(mPackageName,
                 PackageManager.GET_META_DATA, UserHandle.USER_SYSTEM);
 
-            Context packageContext = mContext.createPackageContext(packageName, 0);
+            Context packageContext = mContext.createPackageContext(mPackageName, 0);
             packageResources = packageContext.getResources();
         } catch (RemoteException | NameNotFoundException e) {
-            Slog.w(TAG, "Unable to discover metadata package: " + packageName, e);
+            Slog.w(TAG, "Unable to discover metadata package: " + mPackageName, e);
             return;
         }
 
@@ -201,4 +202,11 @@
 
         return mModuleInfo.get(packageName);
     }
+
+    String getPackageName() {
+        if (!mMetadataLoaded) {
+            throw new IllegalStateException("Call to getVersion before metadata loaded");
+        }
+        return mPackageName;
+    }
 }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e07a132..d4c8525 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -24074,6 +24074,11 @@
                     | (appInfo.isVendor() ? IPackageManagerNative.LOCATION_VENDOR : 0)
                     | (appInfo.isProduct() ? IPackageManagerNative.LOCATION_PRODUCT : 0));
         }
+
+        @Override
+        public String getModuleMetadataPackageName() throws RemoteException {
+            return PackageManagerService.this.mModuleInfoProvider.getPackageName();
+        }
     }
 
     private class PackageManagerInternalImpl extends PackageManagerInternal {