diff options
author | Adam Cohen <adamcohen@google.com> | 2014-08-29 15:05:48 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2014-09-04 15:12:55 +0000 |
commit | 4ae96ce92df7aad3c767c68b8795b80734e01829 (patch) | |
tree | 05dfbd6b6aa3dc14e39986807eca46859e203cc9 /src/com/android/launcher3/Partner.java | |
parent | 6a2c77856f1cfa402363cfbb04b5718b431bbc6e (diff) | |
download | android_packages_apps_Trebuchet-4ae96ce92df7aad3c767c68b8795b80734e01829.tar.gz android_packages_apps_Trebuchet-4ae96ce92df7aad3c767c68b8795b80734e01829.tar.bz2 android_packages_apps_Trebuchet-4ae96ce92df7aad3c767c68b8795b80734e01829.zip |
Add ability for Partner customization apk to override certain DeviceProfile params
-> Workspace row / col counts
-> All apps row / col counts
-> Workspace icon size
issue 17208277
Change-Id: I25cfafede4da783083593b9bfeff4e5ba7751d36
Diffstat (limited to 'src/com/android/launcher3/Partner.java')
-rw-r--r-- | src/com/android/launcher3/Partner.java | 171 |
1 files changed, 171 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..e1913193b --- /dev/null +++ b/src/com/android/launcher3/Partner.java @@ -0,0 +1,171 @@ +/* + * 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.pm.PackageManager; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.Pair; + +import java.io.File; + +/** + * 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 { + + static final String TAG = "Launcher.Partner"; + + /** Marker action used to discover partner */ + private static final String + ACTION_PARTNER_CUSTOMIZATION = "com.android.launcher3.action.PARTNER_CUSTOMIZATION"; + + public static final String RES_FOLDER = "partner_folder"; + public static final String RES_WALLPAPERS = "partner_wallpapers"; + public static final String RES_DEFAULT_LAYOUT = "partner_default_layout"; + + public static final String RES_DEFAULT_WALLPAPER_HIDDEN = "default_wallpapper_hidden"; + public static final String RES_SYSTEM_WALLPAPER_DIR = "system_wallpaper_directory"; + + public static final String RES_REQUIRE_FIRST_RUN_FLOW = "requires_first_run_flow"; + + /** These resources are used to override the device profile */ + public static final String RES_GRID_AA_SHORT_EDGE_COUNT = "grid_aa_short_edge_count"; + public static final String RES_GRID_AA_LONG_EDGE_COUNT = "grid_aa_long_edge_count"; + public static final String RES_GRID_NUM_ROWS = "grid_num_rows"; + public static final String RES_GRID_NUM_COLUMNS = "grid_num_columns"; + public static final String RES_GRID_ICON_SIZE_DP = "grid_icon_size_dp"; + + 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) { + Pair<String, Resources> apkInfo = Utilities.findSystemApk(ACTION_PARTNER_CUSTOMIZATION, pm); + if (apkInfo != null) { + sPartner = new Partner(apkInfo.first, apkInfo.second); + } + 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; + } + + public boolean hasDefaultLayout() { + int defaultLayout = getResources().getIdentifier(Partner.RES_DEFAULT_LAYOUT, + "xml", getPackageName()); + return defaultLayout != 0; + } + + public boolean hasFolder() { + int folder = getResources().getIdentifier(Partner.RES_FOLDER, + "xml", getPackageName()); + return folder != 0; + } + + public boolean hideDefaultWallpaper() { + int resId = getResources().getIdentifier(RES_DEFAULT_WALLPAPER_HIDDEN, "bool", + getPackageName()); + return resId != 0 && getResources().getBoolean(resId); + } + + public File getWallpaperDirectory() { + int resId = getResources().getIdentifier(RES_SYSTEM_WALLPAPER_DIR, "string", + getPackageName()); + return (resId != 0) ? new File(getResources().getString(resId)) : null; + } + + public boolean requiresFirstRunFlow() { + int resId = getResources().getIdentifier(RES_REQUIRE_FIRST_RUN_FLOW, "bool", + getPackageName()); + return resId != 0 && getResources().getBoolean(resId); + } + + public DeviceProfile getDeviceProfileOverride(DisplayMetrics dm) { + boolean containsProfileOverrides = false; + + DeviceProfile dp = new DeviceProfile(); + + // We initialize customizable fields to be invalid + dp.numRows = -1; + dp.numColumns = -1; + dp.allAppsShortEdgeCount = -1; + dp.allAppsLongEdgeCount = -1; + + try { + int resId = getResources().getIdentifier(RES_GRID_NUM_ROWS, + "integer", getPackageName()); + if (resId > 0) { + containsProfileOverrides = true; + dp.numRows = getResources().getInteger(resId); + } + + resId = getResources().getIdentifier(RES_GRID_NUM_COLUMNS, + "integer", getPackageName()); + if (resId > 0) { + containsProfileOverrides = true; + dp.numColumns = getResources().getInteger(resId); + } + + resId = getResources().getIdentifier(RES_GRID_AA_SHORT_EDGE_COUNT, + "integer", getPackageName()); + if (resId > 0) { + containsProfileOverrides = true; + dp.allAppsShortEdgeCount = getResources().getInteger(resId); + } + + resId = getResources().getIdentifier(RES_GRID_AA_LONG_EDGE_COUNT, + "integer", getPackageName()); + if (resId > 0) { + containsProfileOverrides = true; + dp.allAppsLongEdgeCount = getResources().getInteger(resId); + } + + resId = getResources().getIdentifier(RES_GRID_ICON_SIZE_DP, + "dimen", getPackageName()); + if (resId > 0) { + containsProfileOverrides = true; + int px = getResources().getDimensionPixelSize(resId); + dp.iconSize = DynamicGrid.dpiFromPx(px, dm); + } + } catch (Resources.NotFoundException ex) { + Log.e(TAG, "Invalid Partner grid resource!", ex); + } + return containsProfileOverrides ? dp : null; + } +} |