diff options
author | Jeff Sharkey <jsharkey@android.com> | 2014-04-14 13:26:42 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2014-04-22 12:28:51 -0700 |
commit | 5aeef58131e1c330d1d9c1dfcacf2e6eea6ced4b (patch) | |
tree | b19471e6924d0cd3424fb5a8546e0212d1b49ae5 /src/com/android/launcher3/Partner.java | |
parent | 76ac344cb61a74267c04249c9e9feec41a82c504 (diff) | |
download | android_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.java | 84 |
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; + } +} |