diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java index d3f9cd4f90349..9d1b3cf116d90 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java @@ -7,6 +7,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.MediaStore; @@ -132,6 +133,44 @@ public class BluetoothUtils { */ public static Pair getBtRainbowDrawableWithDescription(Context context, CachedBluetoothDevice cachedDevice) { + final Resources resources = context.getResources(); + final Pair pair = BluetoothUtils.getBtDrawableWithDescription(context, + cachedDevice); + + if (pair.first instanceof BitmapDrawable) { + return new Pair<>(new AdaptiveOutlineDrawable( + resources, ((BitmapDrawable) pair.first).getBitmap()), pair.second); + } + + return new Pair<>(buildBtRainbowDrawable(context, + pair.first, cachedDevice.getAddress().hashCode()), pair.second); + } + + /** + * Build Bluetooth device icon with rainbow + */ + public static Drawable buildBtRainbowDrawable(Context context, Drawable drawable, + int hashCode) { + final Resources resources = context.getResources(); + + // Deal with normal headset + final int[] iconFgColors = resources.getIntArray(R.array.bt_icon_fg_colors); + final int[] iconBgColors = resources.getIntArray(R.array.bt_icon_bg_colors); + + // get color index based on mac address + final int index = Math.abs(hashCode % iconBgColors.length); + drawable.setTint(iconFgColors[index]); + final Drawable adaptiveIcon = new AdaptiveIcon(context, drawable); + ((AdaptiveIcon) adaptiveIcon).setBackgroundColor(iconBgColors[index]); + + return adaptiveIcon; + } + + /** + * Get bluetooth icon with description + */ + public static Pair getBtDrawableWithDescription(Context context, + CachedBluetoothDevice cachedDevice) { final Pair pair = BluetoothUtils.getBtClassDrawableWithDescription( context, cachedDevice); final BluetoothDevice bluetoothDevice = cachedDevice.getDevice(); @@ -159,9 +198,8 @@ public class BluetoothUtils { final Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, iconSize, iconSize, false); bitmap.recycle(); - final AdaptiveOutlineDrawable drawable = new AdaptiveOutlineDrawable( - resources, resizedBitmap); - return new Pair<>(drawable, pair.second); + return new Pair<>(new BitmapDrawable(resources, + resizedBitmap), pair.second); } } catch (IOException e) { Log.e(TAG, "Failed to get drawable for: " + iconUri, e); @@ -171,28 +209,7 @@ public class BluetoothUtils { } } - return new Pair<>(buildBtRainbowDrawable(context, - pair.first, cachedDevice.getAddress().hashCode()), pair.second); - } - - /** - * Build Bluetooth device icon with rainbow - */ - public static Drawable buildBtRainbowDrawable(Context context, Drawable drawable, - int hashCode) { - final Resources resources = context.getResources(); - - // Deal with normal headset - final int[] iconFgColors = resources.getIntArray(R.array.bt_icon_fg_colors); - final int[] iconBgColors = resources.getIntArray(R.array.bt_icon_bg_colors); - - // get color index based on mac address - final int index = Math.abs(hashCode % iconBgColors.length); - drawable.setTint(iconFgColors[index]); - final Drawable adaptiveIcon = new AdaptiveIcon(context, drawable); - ((AdaptiveIcon) adaptiveIcon).setBackgroundColor(iconBgColors[index]); - - return adaptiveIcon; + return new Pair<>(pair.first, pair.second); } /** diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java index 74a59399feee6..a2f77e2d5046b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java @@ -62,6 +62,11 @@ public class BluetoothMediaDevice extends MediaDevice { return pair.first; } + @Override + public Drawable getIconWithoutBackground() { + return BluetoothUtils.getBtDrawableWithDescription(mContext, mCachedDevice).first; + } + @Override public String getId() { return MediaDeviceUtils.getId(mCachedDevice); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java index 83a96716e2845..22dc90643128f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java @@ -60,6 +60,11 @@ public class InfoMediaDevice extends MediaDevice { mContext.getDrawable(getDrawableResId()), getId().hashCode()); } + @Override + public Drawable getIconWithoutBackground() { + return mContext.getDrawable(getDrawableResId()); + } + @VisibleForTesting int getDrawableResId() { int resId; diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java index 8a178a9a81f21..317077b14e30d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java @@ -152,6 +152,13 @@ public abstract class MediaDevice implements Comparable { */ public abstract Drawable getIcon(); + /** + * Get icon of MediaDevice without background. + * + * @return drawable of icon + */ + public abstract Drawable getIconWithoutBackground(); + /** * Get unique ID that represent MediaDevice * @return unique id of MediaDevice diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java index 9a3ae1be14c0b..c43a51246fb51 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java @@ -89,6 +89,11 @@ public class PhoneMediaDevice extends MediaDevice { mContext.getDrawable(getDrawableResId()), getId().hashCode()); } + @Override + public Drawable getIconWithoutBackground() { + return mContext.getDrawable(getDrawableResId()); + } + @VisibleForTesting int getDrawableResId() { int resId;