diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 93a785f127f..30b2d714bae 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -957,6 +957,22 @@ public final class Utils extends com.android.settingslib.Utils { return new BitmapDrawable(null, bitmap); } + /** + * Converts the {@link Drawable} to a {@link Bitmap}. + */ + public static Bitmap drawableToBitmap(Drawable drawable) { + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable)drawable).getBitmap(); + } + + final Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + final Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } + /** * Get the {@link Drawable} that represents the app icon */ diff --git a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java index ea2a30865ea..5673948dde8 100644 --- a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java +++ b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java @@ -21,9 +21,6 @@ import android.app.settings.SettingsEnums; import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; @@ -84,17 +81,6 @@ public class BluetoothDevicesSlice implements CustomSliceable { mContext = context; } - private static Bitmap getBitmapFromVectorDrawable(Drawable VectorDrawable) { - final Bitmap bitmap = Bitmap.createBitmap(VectorDrawable.getIntrinsicWidth(), - VectorDrawable.getIntrinsicHeight(), Config.ARGB_8888); - final Canvas canvas = new Canvas(bitmap); - - VectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - VectorDrawable.draw(canvas); - - return bitmap; - } - @Override public Uri getUri() { return CustomSliceRegistry.BLUETOOTH_DEVICES_SLICE_URI; @@ -234,7 +220,7 @@ public class BluetoothDevicesSlice implements CustomSliceable { .getBtClassDrawableWithDescription(mContext, device); if (pair.first != null) { - return IconCompat.createWithBitmap(getBitmapFromVectorDrawable(pair.first)); + return IconCompat.createWithBitmap(Utils.drawableToBitmap(pair.first)); } else { return IconCompat.createWithResource(mContext, com.android.internal.R.drawable.ic_settings_bluetooth); diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java index 016aa3261cc..692dc0a9b95 100644 --- a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java +++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java @@ -142,20 +142,6 @@ public class NotificationChannelSlice implements CustomSliceable { mNotificationBackend = new NotificationBackend(); } - private static Bitmap drawableToBitmap(Drawable drawable) { - if (drawable instanceof BitmapDrawable) { - return ((BitmapDrawable) drawable).getBitmap(); - } - - final Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), - drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - final Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - - return bitmap; - } - @Override public Slice getSlice() { final ListBuilder listBuilder = @@ -257,7 +243,7 @@ public class NotificationChannelSlice implements CustomSliceable { return null; } - return IconCompat.createWithBitmap(drawableToBitmap(drawable)); + return IconCompat.createWithBitmap(Utils.drawableToBitmap(drawable)); } @VisibleForTesting diff --git a/src/com/android/settings/wifi/slice/ContextualWifiSlice.java b/src/com/android/settings/wifi/slice/ContextualWifiSlice.java index fa8c2678e29..7a6d1fa5480 100644 --- a/src/com/android/settings/wifi/slice/ContextualWifiSlice.java +++ b/src/com/android/settings/wifi/slice/ContextualWifiSlice.java @@ -16,17 +16,26 @@ package com.android.settings.wifi.slice; +import android.annotation.ColorInt; import android.content.Context; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; +import android.net.NetworkInfo.State; import android.net.Uri; import android.net.wifi.WifiSsid; import android.text.TextUtils; import android.util.Log; import androidx.annotation.VisibleForTesting; +import androidx.core.graphics.drawable.IconCompat; import androidx.slice.Slice; +import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceable; +import com.android.settingslib.wifi.AccessPoint; /** * {@link CustomSliceable} for Wi-Fi, used by contextual homepage. @@ -56,6 +65,36 @@ public class ContextualWifiSlice extends WifiSlice { // keep showing this card to keep UI stable, even if wifi connects to a network later. mPreviouslyDisplayed = true; + // Reload theme for switching dark mode on/off + mContext.getTheme().applyStyle(R.style.Theme_Settings_Home, true /* force */); + return super.getSlice(); } + + @Override + protected IconCompat getAccessPointLevelIcon(AccessPoint accessPoint) { + final Drawable d = mContext.getDrawable( + com.android.settingslib.Utils.getWifiIconResource(accessPoint.getLevel())); + + @ColorInt int color; + if (accessPoint.isActive()) { + final State state = accessPoint.getNetworkInfo().getState(); + if (state == State.CONNECTED) { + color = Utils.getColorAccentDefaultColor(mContext); + } else { // connecting + color = Utils.getDisabled(mContext, Utils.getColorAttrDefaultColor(mContext, + android.R.attr.colorControlNormal)); + } + } else { + color = Utils.getColorAttrDefaultColor(mContext, android.R.attr.colorControlNormal); + } + + d.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)); + return IconCompat.createWithBitmap(Utils.drawableToBitmap(d)); + } + + @Override + protected int getSliceAccentColor() { + return -1; + } } diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java index bee643df363..6e30b9e21a0 100644 --- a/src/com/android/settings/wifi/slice/WifiSlice.java +++ b/src/com/android/settings/wifi/slice/WifiSlice.java @@ -64,8 +64,8 @@ public class WifiSlice implements CustomSliceable { @VisibleForTesting static final int DEFAULT_EXPANDED_ROW_COUNT = 3; + protected final Context mContext; protected final WifiManager mWifiManager; - private final Context mContext; public WifiSlice(Context context) { mContext = context; @@ -85,7 +85,7 @@ public class WifiSlice implements CustomSliceable { R.drawable.ic_settings_wireless); final String title = mContext.getString(R.string.wifi_settings); final CharSequence summary = getSummary(); - @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext); + @ColorInt final int color = getSliceAccentColor(); final PendingIntent toggleAction = getBroadcastIntent(mContext); final PendingIntent primaryAction = getPrimaryAction(); final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon, @@ -120,29 +120,22 @@ public class WifiSlice implements CustomSliceable { listBuilder.addRow(getAccessPointRow(results.get(i))); } else if (needLoadingRow) { listBuilder.addRow(new ListBuilder.RowBuilder() - .setTitle(mContext.getText(R.string.wifi_empty_list_wifi_on)) - .setSubtitle(placeholder)); + .setTitle(mContext.getText(R.string.wifi_empty_list_wifi_on))); needLoadingRow = false; } else { listBuilder.addRow(new ListBuilder.RowBuilder() - .setTitle(placeholder) - .setSubtitle(placeholder)); + .setTitle(placeholder)); } } return listBuilder.build(); } private ListBuilder.RowBuilder getAccessPointRow(AccessPoint accessPoint) { - final String title = accessPoint.getConfigName(); - final IconCompat levelIcon = IconCompat.createWithResource(mContext, - com.android.settingslib.Utils.getWifiIconResource(accessPoint.getLevel())); - final CharSequence apSummary = accessPoint.getSettingsSummary(); + final CharSequence title = accessPoint.getConfigName(); + final IconCompat levelIcon = getAccessPointLevelIcon(accessPoint); final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder() .setTitleItem(levelIcon, ListBuilder.ICON_IMAGE) .setTitle(title) - .setSubtitle(!TextUtils.isEmpty(apSummary) - ? apSummary - : null) .setPrimaryAction(SliceAction.create( getAccessPointAction(accessPoint), levelIcon, ListBuilder.ICON_IMAGE, title)); @@ -154,6 +147,16 @@ public class WifiSlice implements CustomSliceable { return rowBuilder; } + protected IconCompat getAccessPointLevelIcon(AccessPoint accessPoint) { + return IconCompat.createWithResource(mContext, + com.android.settingslib.Utils.getWifiIconResource(accessPoint.getLevel())); + } + + @ColorInt + protected int getSliceAccentColor() { + return Utils.getColorAccentDefaultColor(mContext); + } + private IconCompat getEndIcon(AccessPoint accessPoint) { if (accessPoint.isActive()) { return IconCompat.createWithResource(mContext, R.drawable.ic_settings);