Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a3b8866c authored by Adam Cohen's avatar Adam Cohen Committed by Android (Google) Code Review
Browse files

Merge "Add ability for Partner customization apk to override certain...

Merge "Add ability for Partner customization apk to override certain DeviceProfile params" into ub-now-porkchop
parents 0d2adfbb 4ae96ce9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -925,7 +925,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
        Partner partner = Partner.get(pm);
        if (partner != null) {
            final Resources partnerRes = partner.getResources();
            final int resId = partnerRes.getIdentifier(Partner.RESOURCE_WALLPAPERS, "array",
            final int resId = partnerRes.getIdentifier(Partner.RES_WALLPAPERS, "array",
                    partner.getPackageName());
            if (resId != 0) {
                addWallpapers(bundled, partnerRes, partner.getPackageName(), resId);
+49 −7
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ public class DeviceProfile {
    float numRows;
    float numColumns;
    float numHotseatIcons;
    private float iconSize;
    float iconSize;
    private float iconTextSize;
    private int iconDrawablePaddingOriginalPx;
    private float hotseatIconSize;
@@ -130,6 +130,9 @@ public class DeviceProfile {

    float dragViewScale;

    int allAppsShortEdgeCount = -1;
    int allAppsLongEdgeCount = -1;

    private ArrayList<DeviceProfileCallbacks> mCallbacks = new ArrayList<DeviceProfileCallbacks>();

    DeviceProfile(String n, float w, float h, float r, float c,
@@ -152,6 +155,9 @@ public class DeviceProfile {
        defaultNoAllAppsLayoutId = dnalId;
    }

    DeviceProfile() {
    }

    DeviceProfile(Context context,
                  ArrayList<DeviceProfile> profiles,
                  float minWidth, float minHeight,
@@ -218,6 +224,7 @@ public class DeviceProfile {
            points.add(new DeviceProfileQuery(p, p.iconSize));
        }
        iconSize = invDistWeightedInterpolate(minWidth, minHeight, points);

        // AllApps uses the original non-scaled icon size
        allAppsIconSizePx = DynamicGrid.pxFromDp(iconSize, dm);

@@ -240,12 +247,42 @@ public class DeviceProfile {
        // Hotseat
        hotseatIconSize = invDistWeightedInterpolate(minWidth, minHeight, points);

        // If the partner customization apk contains any grid overrides, apply them
        applyPartnerDeviceProfileOverrides(context, dm);

        // Calculate the remaining vars
        updateFromConfiguration(context, res, wPx, hPx, awPx, ahPx);
        updateAvailableDimensions(context);
        computeAllAppsButtonSize(context);
    }

    /**
     * Apply any Partner customization grid overrides.
     *
     * Currently we support: all apps row / column count.
     */
    private void applyPartnerDeviceProfileOverrides(Context ctx, DisplayMetrics dm) {
        Partner p = Partner.get(ctx.getPackageManager());
        if (p != null) {
            DeviceProfile partnerDp = p.getDeviceProfileOverride(dm);
            if (partnerDp != null) {
                if (partnerDp.numRows > 0 && partnerDp.numColumns > 0) {
                    numRows = partnerDp.numRows;
                    numColumns = partnerDp.numColumns;
                }
                if (partnerDp.allAppsShortEdgeCount > 0 && partnerDp.allAppsLongEdgeCount > 0) {
                    allAppsShortEdgeCount = partnerDp.allAppsShortEdgeCount;
                    allAppsLongEdgeCount = partnerDp.allAppsLongEdgeCount;
                }
                if (partnerDp.iconSize > 0) {
                    iconSize = partnerDp.iconSize;
                    // AllApps uses the original non-scaled icon size
                    allAppsIconSizePx = DynamicGrid.pxFromDp(iconSize, dm);
                }
            }
        }
    }

    /**
     * Determine the exact visual footprint of the all apps button, taking into account scaling
     * and internal padding of the drawable.
@@ -380,6 +417,10 @@ public class DeviceProfile {
        int maxRows = (isLandscape ? maxShortEdgeCellCount : maxLongEdgeCellCount);
        int maxCols = (isLandscape ? maxLongEdgeCellCount : maxShortEdgeCellCount);

        if (allAppsShortEdgeCount > 0 && allAppsLongEdgeCount > 0) {
            allAppsNumRows = isLandscape ? allAppsShortEdgeCount : allAppsLongEdgeCount;
            allAppsNumCols = isLandscape ? allAppsLongEdgeCount : allAppsShortEdgeCount;
        } else {
            allAppsNumRows = (availableHeightPx - pageIndicatorHeightPx) /
                    (allAppsCellHeightPx + allAppsCellPaddingPx);
            allAppsNumRows = Math.max(minEdgeCellCount, Math.min(maxRows, allAppsNumRows));
@@ -387,6 +428,7 @@ public class DeviceProfile {
                    (allAppsCellWidthPx + allAppsCellPaddingPx);
            allAppsNumCols = Math.max(minEdgeCellCount, Math.min(maxCols, allAppsNumCols));
        }
    }

    void updateFromConfiguration(Context context, Resources resources, int wPx, int hPx,
                                 int awPx, int ahPx) {
+2 −2
Original line number Diff line number Diff line
@@ -327,7 +327,7 @@ public class LauncherProvider extends ContentProvider {
                final Partner partner = Partner.get(getContext().getPackageManager());
                if (partner != null && partner.hasDefaultLayout()) {
                    final Resources partnerRes = partner.getResources();
                    int workspaceResId = partnerRes.getIdentifier(Partner.RESOURCE_DEFAULT_LAYOUT,
                    int workspaceResId = partnerRes.getIdentifier(Partner.RES_DEFAULT_LAYOUT,
                            "xml", partner.getPackageName());
                    if (workspaceResId != 0) {
                        loader = new SimpleWorkspaceLoader(mOpenHelper, partnerRes, workspaceResId);
@@ -1509,7 +1509,7 @@ public class LauncherProvider extends ContentProvider {
                        final Partner partner = Partner.get(mPackageManager);
                        if (partner != null) {
                            final Resources partnerRes = partner.getResources();
                            final int resId = partnerRes.getIdentifier(Partner.RESOURCE_FOLDER,
                            final int resId = partnerRes.getIdentifier(Partner.RES_FOLDER,
                                    "xml", partner.getPackageName());
                            if (resId != 0) {
                                final XmlResourceParser partnerParser = partnerRes.getXml(resId);
+171 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ 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;
@@ -28,18 +30,28 @@ import java.io.File;
 * 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 RESOURCE_FOLDER = "partner_folder";
    public static final String RESOURCE_WALLPAPERS = "partner_wallpapers";
    public static final String RESOURCE_DEFAULT_LAYOUT = "partner_default_layout";
    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 RESOURCE_DEFAULT_WALLPAPER_HIDDEN = "default_wallpapper_hidden";
    public static final String RESOURCE_SYSTEM_WALLPAPER_DIR = "system_wallpaper_directory";
    public static final String RES_REQUIRE_FIRST_RUN_FLOW = "requires_first_run_flow";

    public static final String RESOURCE_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;
@@ -75,32 +87,85 @@ public class Partner {
    }

    public boolean hasDefaultLayout() {
        int defaultLayout = getResources().getIdentifier(Partner.RESOURCE_DEFAULT_LAYOUT,
        int defaultLayout = getResources().getIdentifier(Partner.RES_DEFAULT_LAYOUT,
                "xml", getPackageName());
        return defaultLayout != 0;
    }

    public boolean hasFolder() {
        int folder = getResources().getIdentifier(Partner.RESOURCE_FOLDER,
        int folder = getResources().getIdentifier(Partner.RES_FOLDER,
                "xml", getPackageName());
        return folder != 0;
    }

    public boolean hideDefaultWallpaper() {
        int resId = getResources().getIdentifier(RESOURCE_DEFAULT_WALLPAPER_HIDDEN, "bool",
        int resId = getResources().getIdentifier(RES_DEFAULT_WALLPAPER_HIDDEN, "bool",
                getPackageName());
        return resId != 0 && getResources().getBoolean(resId);
    }

    public File getWallpaperDirectory() {
        int resId = getResources().getIdentifier(RESOURCE_SYSTEM_WALLPAPER_DIR, "string",
        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(RESOURCE_REQUIRE_FIRST_RUN_FLOW, "bool",
        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;
    }
}