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

Commit 3e58eea9 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Simiplifying the Parner override definition so that it can be used

for multiple overrides

Bug: 257555083
Test: Presubmit
Change-Id: I14eb98edb19ccf109222d6806e27de707e485457
parent 1c744c99
Loading
Loading
Loading
Loading
+9 −13
Original line number Original line Diff line number Diff line
@@ -31,7 +31,6 @@ import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Log;
import android.util.Pair;
import android.util.Patterns;
import android.util.Patterns;
import android.util.Xml;
import android.util.Xml;


@@ -45,7 +44,7 @@ import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.qsb.QsbContainerView;
import com.android.launcher3.qsb.QsbContainerView;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.Partner;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.android.launcher3.widget.LauncherWidgetHolder;


@@ -76,19 +75,16 @@ public class AutoInstallsLayout {


    static AutoInstallsLayout get(Context context, LauncherWidgetHolder appWidgetHolder,
    static AutoInstallsLayout get(Context context, LauncherWidgetHolder appWidgetHolder,
            LayoutParserCallback callback) {
            LayoutParserCallback callback) {
        Pair<String, Resources> customizationApkInfo = PackageManagerHelper.findSystemApk(
        Partner partner = Partner.get(context.getPackageManager(), ACTION_LAUNCHER_CUSTOMIZATION);
                ACTION_LAUNCHER_CUSTOMIZATION, context.getPackageManager());
        if (partner == null) {
        if (customizationApkInfo == null) {
            return null;
            return null;
        }
        }
        String pkg = customizationApkInfo.first;
        Resources targetRes = customizationApkInfo.second;
        InvariantDeviceProfile grid = LauncherAppState.getIDP(context);
        InvariantDeviceProfile grid = LauncherAppState.getIDP(context);


        // Try with grid size and hotseat count
        // Try with grid size and hotseat count
        String layoutName = String.format(Locale.ENGLISH, FORMATTED_LAYOUT_RES_WITH_HOSTEAT,
        String layoutName = String.format(Locale.ENGLISH, FORMATTED_LAYOUT_RES_WITH_HOSTEAT,
                grid.numColumns, grid.numRows, grid.numDatabaseHotseatIcons);
                grid.numColumns, grid.numRows, grid.numDatabaseHotseatIcons);
        int layoutId = targetRes.getIdentifier(layoutName, "xml", pkg);
        int layoutId = partner.getXmlResId(layoutName);


        // Try with only grid size
        // Try with only grid size
        if (layoutId == 0) {
        if (layoutId == 0) {
@@ -96,21 +92,21 @@ public class AutoInstallsLayout {
                    + " not found. Trying layout without hosteat");
                    + " not found. Trying layout without hosteat");
            layoutName = String.format(Locale.ENGLISH, FORMATTED_LAYOUT_RES,
            layoutName = String.format(Locale.ENGLISH, FORMATTED_LAYOUT_RES,
                    grid.numColumns, grid.numRows);
                    grid.numColumns, grid.numRows);
            layoutId = targetRes.getIdentifier(layoutName, "xml", pkg);
            layoutId = partner.getXmlResId(layoutName);
        }
        }


        // Try the default layout
        // Try the default layout
        if (layoutId == 0) {
        if (layoutId == 0) {
            Log.d(TAG, "Formatted layout: " + layoutName + " not found. Trying the default layout");
            Log.d(TAG, "Formatted layout: " + layoutName + " not found. Trying the default layout");
            layoutId = targetRes.getIdentifier(LAYOUT_RES, "xml", pkg);
            layoutId = partner.getXmlResId(LAYOUT_RES);
        }
        }


        if (layoutId == 0) {
        if (layoutId == 0) {
            Log.e(TAG, "Layout definition not found in package: " + pkg);
            Log.e(TAG, "Layout definition not found in package: " + partner.getPackageName());
            return null;
            return null;
        }
        }
        return new AutoInstallsLayout(context, appWidgetHolder, callback, targetRes, layoutId,
        return new AutoInstallsLayout(context, appWidgetHolder, callback, partner.getResources(),
                TAG_WORKSPACE);
                layoutId, TAG_WORKSPACE);
    }
    }


    // Object Tags
    // Object Tags
+6 −3
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ import android.util.Log;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.util.Partner;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.android.launcher3.widget.LauncherWidgetHolder;


@@ -51,6 +52,9 @@ public class DefaultLayoutParser extends AutoInstallsLayout {
    private static final String ATTR_SHORTCUT_ID = "shortcutId";
    private static final String ATTR_SHORTCUT_ID = "shortcutId";
    private static final String ATTR_PACKAGE_NAME = "packageName";
    private static final String ATTR_PACKAGE_NAME = "packageName";


    public static final String RES_PARTNER_FOLDER = "partner_folder";
    public static final String RES_PARTNER_DEFAULT_LAYOUT = "partner_default_layout";

    // TODO: Remove support for this broadcast, instead use widget options to send bind time options
    // TODO: Remove support for this broadcast, instead use widget options to send bind time options
    private static final String ACTION_APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE =
    private static final String ACTION_APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE =
            "com.android.launcher.action.APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE";
            "com.android.launcher.action.APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE";
@@ -278,10 +282,9 @@ public class DefaultLayoutParser extends AutoInstallsLayout {
            // Folder contents come from an external XML resource
            // Folder contents come from an external XML resource
            final Partner partner = Partner.get(mPackageManager);
            final Partner partner = Partner.get(mPackageManager);
            if (partner != null) {
            if (partner != null) {
                final Resources partnerRes = partner.getResources();
                final int resId = partner.getXmlResId(RES_PARTNER_FOLDER);
                final int resId = partnerRes.getIdentifier(Partner.RES_FOLDER,
                        "xml", partner.getPackageName());
                if (resId != 0) {
                if (resId != 0) {
                    final Resources partnerRes = partner.getResources();
                    final XmlPullParser partnerParser = partnerRes.getXml(resId);
                    final XmlPullParser partnerParser = partnerRes.getXml(resId);
                    beginDocument(partnerParser, TAG_FOLDER);
                    beginDocument(partnerParser, TAG_FOLDER);


+24 −2
Original line number Original line Diff line number Diff line
@@ -60,6 +60,7 @@ import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.DisplayController.Info;
import com.android.launcher3.util.DisplayController.Info;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.Partner;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.util.window.WindowManagerProxy;
import com.android.launcher3.util.window.WindowManagerProxy;
@@ -112,6 +113,11 @@ public class InvariantDeviceProfile {
    static final int INDEX_TWO_PANEL_PORTRAIT = 2;
    static final int INDEX_TWO_PANEL_PORTRAIT = 2;
    static final int INDEX_TWO_PANEL_LANDSCAPE = 3;
    static final int INDEX_TWO_PANEL_LANDSCAPE = 3;


    /** These resources are used to override the device profile  */
    private static final String RES_GRID_NUM_ROWS = "grid_num_rows";
    private static final String RES_GRID_NUM_COLUMNS = "grid_num_columns";
    private static final String RES_GRID_ICON_SIZE_DP = "grid_icon_size_dp";

    /**
    /**
     * Number of icons per row and column in the workspace.
     * Number of icons per row and column in the workspace.
     */
     */
@@ -567,8 +573,24 @@ public class InvariantDeviceProfile {
     */
     */
    private void applyPartnerDeviceProfileOverrides(Context context, DisplayMetrics dm) {
    private void applyPartnerDeviceProfileOverrides(Context context, DisplayMetrics dm) {
        Partner p = Partner.get(context.getPackageManager());
        Partner p = Partner.get(context.getPackageManager());
        if (p != null) {
        if (p == null) {
            p.applyInvariantDeviceProfileOverrides(this, dm);
            return;
        }
        try {
            int numRows = p.getIntValue(RES_GRID_NUM_ROWS, -1);
            int numColumns = p.getIntValue(RES_GRID_NUM_COLUMNS, -1);
            float iconSizePx = p.getDimenValue(RES_GRID_ICON_SIZE_DP, -1);

            if (numRows > 0 && numColumns > 0) {
                this.numRows = numRows;
                this.numColumns = numColumns;
            }
            if (iconSizePx > 0) {
                this.iconSize[InvariantDeviceProfile.INDEX_DEFAULT] =
                        Utilities.dpiFromPx(iconSizePx, dm.densityDpi);
            }
        } catch (Resources.NotFoundException ex) {
            Log.e(TAG, "Invalid Partner grid resource!", ex);
        }
        }
    }
    }


+5 −6
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.launcher3;
package com.android.launcher3;


import static com.android.launcher3.DefaultLayoutParser.RES_PARTNER_DEFAULT_LAYOUT;
import static com.android.launcher3.provider.LauncherDbUtils.copyTable;
import static com.android.launcher3.provider.LauncherDbUtils.copyTable;
import static com.android.launcher3.provider.LauncherDbUtils.dropTable;
import static com.android.launcher3.provider.LauncherDbUtils.dropTable;
import static com.android.launcher3.provider.LauncherDbUtils.tableExists;
import static com.android.launcher3.provider.LauncherDbUtils.tableExists;
@@ -34,7 +35,6 @@ import android.content.Intent;
import android.content.OperationApplicationException;
import android.content.OperationApplicationException;
import android.content.SharedPreferences;
import android.content.SharedPreferences;
import android.content.pm.ProviderInfo;
import android.content.pm.ProviderInfo;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.DatabaseUtils;
import android.database.SQLException;
import android.database.SQLException;
@@ -70,6 +70,7 @@ import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.NoLocaleSQLiteHelper;
import com.android.launcher3.util.NoLocaleSQLiteHelper;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.Partner;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.android.launcher3.widget.LauncherWidgetHolder;


@@ -544,13 +545,11 @@ public class LauncherProvider extends ContentProvider {
            }
            }
            if (loader == null) {
            if (loader == null) {
                final Partner partner = Partner.get(getContext().getPackageManager());
                final Partner partner = Partner.get(getContext().getPackageManager());
                if (partner != null && partner.hasDefaultLayout()) {
                if (partner != null) {
                    final Resources partnerRes = partner.getResources();
                    int workspaceResId = partner.getXmlResId(RES_PARTNER_DEFAULT_LAYOUT);
                    int workspaceResId = partnerRes.getIdentifier(Partner.RES_DEFAULT_LAYOUT,
                            "xml", partner.getPackageName());
                    if (workspaceResId != 0) {
                    if (workspaceResId != 0) {
                        loader = new DefaultLayoutParser(getContext(), widgetHolder,
                        loader = new DefaultLayoutParser(getContext(), widgetHolder,
                                mOpenHelper, partnerRes, workspaceResId);
                                mOpenHelper, partner.getResources(), workspaceResId);
                    }
                    }
                }
                }
            }
            }
+0 −23
Original line number Original line Diff line number Diff line
@@ -16,8 +16,6 @@


package com.android.launcher3.util;
package com.android.launcher3.util;


import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;

import android.app.AppOpsManager;
import android.app.AppOpsManager;
import android.content.ActivityNotFoundException;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.ComponentName;
@@ -31,7 +29,6 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.Rect;
import android.net.Uri;
import android.net.Uri;
import android.os.Build;
import android.os.Build;
@@ -40,7 +37,6 @@ import android.os.PatternMatcher;
import android.os.UserHandle;
import android.os.UserHandle;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Log;
import android.util.Log;
import android.util.Pair;
import android.widget.Toast;
import android.widget.Toast;


import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
@@ -295,25 +291,6 @@ public class PackageManagerHelper {
        }
        }
    }
    }


    /**
     * Finds a system apk which had a broadcast receiver listening to a particular action.
     * @param action intent action used to find the apk
     * @return a pair of apk package name and the resources.
     */
    public static Pair<String, Resources> findSystemApk(String action, PackageManager pm) {
        final Intent intent = new Intent(action);
        for (ResolveInfo info : pm.queryBroadcastReceivers(intent, MATCH_SYSTEM_ONLY)) {
            final String packageName = info.activityInfo.packageName;
            try {
                final Resources res = pm.getResourcesForApplication(packageName);
                return Pair.create(packageName, res);
            } catch (NameNotFoundException e) {
                Log.w(TAG, "Failed to find resources for " + packageName);
            }
        }
        return null;
    }

    /**
    /**
     * Returns true if the intent is a valid launch intent for a launcher activity of an app.
     * Returns true if the intent is a valid launch intent for a launcher activity of an app.
     * This is used to identify shortcuts which are different from the ones exposed by the
     * This is used to identify shortcuts which are different from the ones exposed by the
Loading