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);