summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherProvider.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2015-03-26 11:32:11 -0700
committerSunny Goyal <sunnygoyal@google.com>2015-03-27 13:00:44 -0700
commitb2d46ceaaa32ece85f18e049d9e30a5ccaf80e45 (patch)
tree09937cb0c0fac8f4c02599eb6a71c3853119319f /src/com/android/launcher3/LauncherProvider.java
parent28f4188bacad6a1e72cbed04ff3af1597d234cad (diff)
downloadandroid_packages_apps_Trebuchet-b2d46ceaaa32ece85f18e049d9e30a5ccaf80e45.tar.gz
android_packages_apps_Trebuchet-b2d46ceaaa32ece85f18e049d9e30a5ccaf80e45.tar.bz2
android_packages_apps_Trebuchet-b2d46ceaaa32ece85f18e049d9e30a5ccaf80e45.zip
Configuration of workspace through app restrictions
> Checking for a grid specific layout before loading the default layout Change-Id: I1e8d4176341e61d0876b0a9bea9ad8010e3a0f6a
Diffstat (limited to 'src/com/android/launcher3/LauncherProvider.java')
-rw-r--r--src/com/android/launcher3/LauncherProvider.java53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 6dd130505..dfacfa3e4 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -16,6 +16,7 @@
package com.android.launcher3;
+import android.annotation.TargetApi;
import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
@@ -29,6 +30,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.OperationApplicationException;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
@@ -36,7 +38,10 @@ import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
import android.os.StrictMode;
+import android.os.UserManager;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
@@ -70,6 +75,8 @@ public class LauncherProvider extends ContentProvider {
private static final String URI_PARAM_IS_EXTERNAL_ADD = "isExternalAdd";
+ private static final String RESTRICTION_PACKAGE_NAME = "workspace.configuration.package.name";
+
private LauncherProviderChangeListener mListener;
/**
@@ -267,9 +274,10 @@ public class LauncherProvider extends ContentProvider {
/**
* Loads the default workspace based on the following priority scheme:
- * 1) From a package provided by play store
- * 2) From a partner configuration APK, already in the system image
- * 3) The default configuration for the particular device
+ * 1) From the app restrictions
+ * 2) From a package provided by play store
+ * 3) From a partner configuration APK, already in the system image
+ * 4) The default configuration for the particular device
*/
synchronized public void loadDefaultFavoritesIfNecessary() {
String spKey = LauncherAppState.getSharedPreferencesKey();
@@ -278,9 +286,11 @@ public class LauncherProvider extends ContentProvider {
if (sp.getBoolean(EMPTY_DATABASE_CREATED, false)) {
Log.d(TAG, "loading default workspace");
- AutoInstallsLayout loader = AutoInstallsLayout.get(getContext(),
- mOpenHelper.mAppWidgetHost, mOpenHelper);
-
+ AutoInstallsLayout loader = createWorkspaceLoaderFromAppRestriction();
+ if (loader == null) {
+ loader = AutoInstallsLayout.get(getContext(),
+ mOpenHelper.mAppWidgetHost, mOpenHelper);
+ }
if (loader == null) {
final Partner partner = Partner.get(getContext().getPackageManager());
if (partner != null && partner.hasDefaultLayout()) {
@@ -314,6 +324,37 @@ public class LauncherProvider extends ContentProvider {
}
}
+ /**
+ * Creates workspace loader from an XML resource listed in the app restrictions.
+ *
+ * @return the loader if the restrictions are set and the resource exists; null otherwise.
+ */
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
+ private AutoInstallsLayout createWorkspaceLoaderFromAppRestriction() {
+ // UserManager.getApplicationRestrictions() requires minSdkVersion >= 18
+ if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ return null;
+ }
+
+ Context ctx = getContext();
+ UserManager um = (UserManager) ctx.getSystemService(Context.USER_SERVICE);
+ Bundle bundle = um.getApplicationRestrictions(ctx.getPackageName());
+ String packageName = bundle.getString(RESTRICTION_PACKAGE_NAME);
+
+ if (packageName != null) {
+ try {
+ Resources targetResources = ctx.getPackageManager()
+ .getResourcesForApplication(packageName);
+ return AutoInstallsLayout.get(ctx, packageName, targetResources,
+ mOpenHelper.mAppWidgetHost, mOpenHelper);
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Target package for restricted profile not found", e);
+ return null;
+ }
+ }
+ return null;
+ }
+
private DefaultLayoutParser getDefaultLayoutParser() {
int defaultLayout = LauncherAppState.getInstance()
.getDynamicGrid().getDeviceProfile().defaultLayoutId;