Use launcher metadata to read provider authority

Instead of a hardcoded authority, obtain the grid provider
authority from Launcher's metadata.

Bug: 120560197
Change-Id: Ifcd3589c8ffc481a4795fe6453b7a35c18516d42
diff --git a/res/values/override.xml b/res/values/override.xml
index 8d2079c..de6e908 100644
--- a/res/values/override.xml
+++ b/res/values/override.xml
@@ -19,5 +19,8 @@
     <string name="themes_stub_package" translatable="false"/>
     <string name="clocks_stub_package" translatable="false"/>
 
-    <string name="grid_control_authority" translatable="false"/>
+    <!--Name of metadata in the main launcher Activity which values contains the authority
+        corresponding to a ContentProvider in launcher to provide available grids and
+        allow for changing them -->
+    <string name="grid_control_metadata_name" translatable="false">"com.android.launcher3.grid.control"</string>
 </resources>
\ No newline at end of file
diff --git a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
index 8e7450f..89c45bc 100644
--- a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
+++ b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
@@ -18,7 +18,10 @@
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.content.pm.ProviderInfo;
+import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.Uri;
@@ -56,8 +59,17 @@
 
     public LauncherGridOptionsProvider(Context context) {
         mContext = context;
-        // TODO: read this from Activity metadata instead
-        mGridProviderAuthority = mContext.getString(R.string.grid_control_authority);
+        Intent homeIntent =  new Intent(Intent.ACTION_MAIN)
+                .addCategory(Intent.CATEGORY_HOME);
+
+        ResolveInfo info = context.getPackageManager().resolveActivity(homeIntent,
+                PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_META_DATA);
+        if (info != null && info.activityInfo != null && info.activityInfo.metaData != null) {
+            mGridProviderAuthority = info.activityInfo.metaData.getString(
+                    mContext.getString(R.string.grid_control_metadata_name));
+        } else {
+            mGridProviderAuthority = null;
+        }
         // TODO: check permissions if needed
         mProviderInfo = TextUtils.isEmpty(mGridProviderAuthority) ? null
                 : mContext.getPackageManager().resolveContentProvider(mGridProviderAuthority, 0);