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

Commit 237f80b0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Force externally injected tiles to use rounded icon."

parents 80df6f8b fde4f207
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
        android:title="@string/network_dashboard_title"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_network"
        android:order="-110"
        android:fragment="com.android.settings.network.NetworkDashboardFragment"
        settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/>

@@ -34,6 +35,7 @@
        android:title="@string/connected_devices_dashboard_title"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_connected_device"
        android:order="-100"
        android:fragment="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment"
        settings:controller="com.android.settings.connecteddevice.TopLevelConnectedDevicesPreferenceController"/>

@@ -42,6 +44,7 @@
        android:title="@string/app_and_notification_dashboard_title"
        android:summary="@string/app_and_notification_dashboard_summary"
        android:icon="@drawable/ic_homepage_apps"
        android:order="-90"
        android:fragment="com.android.settings.applications.AppAndNotificationDashboardFragment"/>

    <Preference
@@ -50,6 +53,7 @@
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_battery"
        android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
        android:order="-80"
        settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>

    <Preference
@@ -57,6 +61,7 @@
        android:title="@string/display_settings"
        android:summary="@string/display_dashboard_summary"
        android:icon="@drawable/ic_homepage_display"
        android:order="-70"
        android:fragment="com.android.settings.DisplaySettings"/>

    <Preference
@@ -64,6 +69,7 @@
        android:title="@string/sound_settings"
        android:summary="@string/sound_dashboard_summary"
        android:icon="@drawable/ic_homepage_sound"
        android:order="-60"
        android:fragment="com.android.settings.notification.SoundSettings"/>

    <Preference
@@ -71,6 +77,7 @@
        android:title="@string/storage_settings"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_storage"
        android:order="-50"
        android:fragment="com.android.settings.deviceinfo.StorageSettings"
        settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController"/>

@@ -79,6 +86,7 @@
        android:title="@string/security_settings_title"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_security"
        android:order="-40"
        android:fragment="com.android.settings.security.SecuritySettings"
        settings:controller="com.android.settings.security.TopLevelSecurityEntryPreferenceController"/>

@@ -87,6 +95,7 @@
        android:title="@string/account_dashboard_title"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_accounts"
        android:order="-30"
        android:fragment="com.android.settings.accounts.AccountDashboardFragment"
        settings:controller="com.android.settings.accounts.TopLevelAccountEntryPreferenceController"/>

@@ -95,6 +104,7 @@
        android:title="@string/accessibility_settings"
        android:summary="@string/accessibility_settings_summary"
        android:icon="@drawable/ic_homepage_accessibility"
        android:order="-20"
        android:fragment="com.android.settings.accessibility.AccessibilitySettings"/>

    <Preference
@@ -102,12 +112,14 @@
        android:title="@string/header_category_system"
        android:summary="@string/system_dashboard_summary"
        android:icon="@drawable/ic_homepage_system_dashboard"
        android:order="-10"
        android:fragment="com.android.settings.system.SystemDashboardFragment"/>

    <Preference
        android:key="top_level_support"
        android:summary="@string/support_summary"
        android:title="@string/page_tab_title_support"
        android:icon="@drawable/ic_homepage_support"/>
        android:icon="@drawable/ic_homepage_support"
        android:order="100"/>

</PreferenceScreen>
 No newline at end of file
+2 −32
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
package com.android.settings.dashboard;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.os.Bundle;
@@ -51,7 +50,6 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
import com.android.settingslib.drawer.TileUtils;
import com.android.settingslib.suggestions.SuggestionControllerMixinCompat;
import com.android.settingslib.utils.IconCache;

@@ -65,7 +63,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash

    @VisibleForTesting
    static final String STATE_CONDITION_EXPANDED = "condition_expanded";
    static final String META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB = "com.android.settings.bg.argb";

    private final IconCache mCache;
    private final Context mContext;
    private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -248,10 +246,6 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
        return mDashboardData.getItemEntityById(itemId);
    }

    public Suggestion getSuggestion(int position) {
        return mSuggestionAdapter.getSuggestion(position);
    }

    @VisibleForTesting
    void notifyDashboardDataChanged(DashboardData prevData) {
        if (mFirstFrameDrawn && prevData != null) {
@@ -322,31 +316,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
        if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
                && !(icon instanceof RoundedHomepageIcon)) {
            icon = new RoundedHomepageIcon(mContext, icon);
            final Bundle metaData = tile.getMetaData();
            try {
                if (metaData != null) {
                    // Load from bg.argb first
                    int bgColor = metaData.getInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB,
                            0 /* default */);
                    // Not found, load from bg.hint
                    if (bgColor == 0) {
                        final int colorRes = metaData.getInt(
                                TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
                                0 /* default */);
                        if (colorRes != 0) {
                            bgColor = mContext.getPackageManager()
                                    .getResourcesForApplication(tileIcon.getResPackage())
                                    .getColor(colorRes, null /* theme */);
                        }
                    }
                    // If found anything, use it.
                    if (bgColor != 0) {
                        ((RoundedHomepageIcon) icon).setBackgroundColor(bgColor);
                    }
                }
            } catch (PackageManager.NameNotFoundException e) {
                Log.e(TAG, "Failed to set background color for " + tile.getPackageName());
            }
            ((RoundedHomepageIcon) icon).setBackgroundColor(mContext, tile);
            mCache.updateIcon(tileIcon, icon);
        }
        holder.icon.setImageDrawable(icon);
+11 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.Context;
import android.content.IContentProvider;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.provider.Settings;
@@ -42,6 +43,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.RoundedHomepageIcon;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
import com.android.settingslib.drawer.DashboardCategory;
@@ -49,7 +51,6 @@ import com.android.settingslib.drawer.Tile;
import com.android.settingslib.drawer.TileUtils;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@@ -112,7 +113,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
            pref.setKey(getDashboardKeyForTile(tile));
        }
        bindSummary(pref, tile);
        bindIcon(pref, tile);
        bindIcon(pref, tile, forceRoundedIcon);
        final Bundle metadata = tile.getMetaData();
        String clsName = null;
        String action = null;
@@ -192,10 +193,16 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
    }

    @VisibleForTesting
    void bindIcon(Preference preference, Tile tile) {
    void bindIcon(Preference preference, Tile tile, boolean forceRoundedIcon) {
        final Icon tileIcon = tile.getIcon(mContext);
        if (tileIcon != null) {
            preference.setIcon(tileIcon.loadDrawable(preference.getContext()));
            Drawable iconDrawable = tileIcon.loadDrawable(preference.getContext());
            if (forceRoundedIcon
                    && !TextUtils.equals(mContext.getPackageName(), tile.getPackageName())) {
                iconDrawable = new RoundedHomepageIcon(mContext, iconDrawable);
                ((RoundedHomepageIcon) iconDrawable).setBackgroundColor(mContext, tile);
            }
            preference.setIcon(iconDrawable);
        } else if (tile.getMetaData() != null
                && tile.getMetaData().containsKey(META_DATA_PREFERENCE_ICON_URI)) {
            ThreadUtils.postOnBackgroundThread(() -> {
+3 −2
Original line number Diff line number Diff line
@@ -62,8 +62,9 @@ public class DashboardFragmentRegistry {

    static {
        PARENT_TO_CATEGORY_KEY_MAP = new ArrayMap<>();
        PARENT_TO_CATEGORY_KEY_MAP.put(TopLevelSettings.class.getName(),
                CategoryKey.CATEGORY_HOMEPAGE);
        // TODO(b/110405144): Add the mapping when IA.homepage intent-filter is  is removed.
        //        PARENT_TO_CATEGORY_KEY_MAP.put(TopLevelSettings.class.getName(),
        //                CategoryKey.CATEGORY_HOMEPAGE);
        PARENT_TO_CATEGORY_KEY_MAP.put(
                NetworkDashboardFragment.class.getName(), CategoryKey.CATEGORY_NETWORK);
        PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragment.class.getName(),
+37 −4
Original line number Diff line number Diff line
@@ -18,22 +18,28 @@ package com.android.settings.widget;

import static androidx.annotation.VisibleForTesting.NONE;

import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.util.Log;

import com.android.settings.R;

import androidx.annotation.VisibleForTesting;

import com.android.settings.R;
import com.android.settingslib.drawer.Tile;

public class RoundedHomepageIcon extends LayerDrawable {

    private static final String TAG = "RoundedHomepageIcon";

    @VisibleForTesting(otherwise = NONE)
    public int mBackgroundColor = -1;
    int mBackgroundColor = -1;

    public RoundedHomepageIcon(Context context, Drawable foreground) {
        super(new Drawable[]{
@@ -45,6 +51,33 @@ public class RoundedHomepageIcon extends LayerDrawable {
        setLayerInset(1 /* index */, insetPx, insetPx, insetPx, insetPx);
    }

    public void setBackgroundColor(Context context, Tile tile) {
        final Bundle metaData = tile.getMetaData();
        try {
            if (metaData != null) {
                // Load from bg.argb first
                int bgColor = metaData.getInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB,
                        0 /* default */);
                // Not found, load from bg.hint
                if (bgColor == 0) {
                    final int colorRes = metaData.getInt(META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
                            0 /* default */);
                    if (colorRes != 0) {
                        bgColor = context.getPackageManager()
                                .getResourcesForApplication(tile.getPackageName())
                                .getColor(colorRes, null /* theme */);
                    }
                }
                // If found anything, use it.
                if (bgColor != 0) {
                    setBackgroundColor(bgColor);
                }
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "Failed to set background color for " + tile.getPackageName());
        }
    }

    public void setBackgroundColor(int color) {
        mBackgroundColor = color;
        getDrawable(0).setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
Loading