summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/Partner.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-04-14 13:26:42 -0700
committerJeff Sharkey <jsharkey@android.com>2014-04-22 12:28:51 -0700
commit5aeef58131e1c330d1d9c1dfcacf2e6eea6ced4b (patch)
treeb19471e6924d0cd3424fb5a8546e0212d1b49ae5 /src/com/android/launcher3/Partner.java
parent76ac344cb61a74267c04249c9e9feec41a82c504 (diff)
downloadandroid_packages_apps_Trebuchet-5aeef58131e1c330d1d9c1dfcacf2e6eea6ced4b.tar.gz
android_packages_apps_Trebuchet-5aeef58131e1c330d1d9c1dfcacf2e6eea6ced4b.tar.bz2
android_packages_apps_Trebuchet-5aeef58131e1c330d1d9c1dfcacf2e6eea6ced4b.zip
Add support for partner customization.
Traditionally Launcher workspace customization is offered through overlays at build time, but we don't have access to partner-specific customization at build time. To solve this, this adds a new "partner-folder" tag which points at an XML resource provided by an external package. The external package XML can't depend on the binary XML attributes defined by Launcher3, so we switch to using manual string-based attribute lookups. Partners can also provide extra wallpapers. When a folder only results in a single item, promote that item into the folder location instead of deleting completely. Bug: 13340779 Change-Id: Ide558288bef4113565f288b700d8245055c0fee9
Diffstat (limited to 'src/com/android/launcher3/Partner.java')
-rw-r--r--src/com/android/launcher3/Partner.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/com/android/launcher3/Partner.java b/src/com/android/launcher3/Partner.java
new file mode 100644
index 000000000..79c763db9
--- /dev/null
+++ b/src/com/android/launcher3/Partner.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.util.Log;
+
+/**
+ * Utilities to discover and interact with partner customizations. There can
+ * only be one set of customizations on a device, and it must be bundled with
+ * the system.
+ */
+public class Partner {
+ private static final String TAG = "Partner";
+
+ /** Marker action used to discover partner */
+ private static final String
+ ACTION_PARTNER_CUSTOMIZATION = "com.android.launcher3.action.PARTNER_CUSTOMIZATION";
+
+ public static final String RESOURCE_FOLDER = "partner_folder";
+ public static final String RESOURCE_WALLPAPERS = "partner_wallpapers";
+
+ private static boolean sSearched = false;
+ private static Partner sPartner;
+
+ /**
+ * Find and return partner details, or {@code null} if none exists.
+ */
+ public static synchronized Partner get(PackageManager pm) {
+ if (!sSearched) {
+ final Intent intent = new Intent(ACTION_PARTNER_CUSTOMIZATION);
+ for (ResolveInfo info : pm.queryBroadcastReceivers(intent, 0)) {
+ if (info.activityInfo != null &&
+ (info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ final String packageName = info.activityInfo.packageName;
+ try {
+ final Resources res = pm.getResourcesForApplication(packageName);
+ sPartner = new Partner(packageName, res);
+ break;
+ } catch (NameNotFoundException e) {
+ Log.w(TAG, "Failed to find resources for " + packageName);
+ }
+ }
+ }
+ sSearched = true;
+ }
+ return sPartner;
+ }
+
+ private final String mPackageName;
+ private final Resources mResources;
+
+ private Partner(String packageName, Resources res) {
+ mPackageName = packageName;
+ mResources = res;
+ }
+
+ public String getPackageName() {
+ return mPackageName;
+ }
+
+ public Resources getResources() {
+ return mResources;
+ }
+}