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

Commit 4b7f43bc authored by jackqdyulei's avatar jackqdyulei
Browse files

Reuse the BluetoothBatteryDrawable in QS detail

BluetoothBatteryDrawable creates the drawable lazily using
the latest(and most correct) context. So it could get the
correct color from the theme.

Also add iconScale field in BluetoothBatteryDrawable so the size
of the battery icon could be scaled.

Bug: 67377756
Test: Manual - connected to bluetooth headphone and open the qs
page and detail page. Retest it after changing it to dark theme.
Change-Id: Ic6c871985a89a503221755eed4bc2605ab53f630
parent db768d45
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile;

/**
 * Quick settings common detail view with line items.
@@ -185,7 +186,7 @@ public class QSDetailItems extends FrameLayout {
            view.setVisibility(mItemsVisible ? VISIBLE : INVISIBLE);
            final ImageView iv = (ImageView) view.findViewById(android.R.id.icon);
            if (item.iconDrawable != null) {
                iv.setImageDrawable(item.iconDrawable);
                iv.setImageDrawable(item.iconDrawable.getDrawable(iv.getContext()));
            } else {
                iv.setImageResource(item.icon);
            }
@@ -258,7 +259,7 @@ public class QSDetailItems extends FrameLayout {

    public static class Item {
        public int icon;
        public Drawable iconDrawable;
        public QSTile.Icon iconDrawable;
        public Drawable overlay;
        public CharSequence line1;
        public CharSequence line2;
+11 −6
Original line number Diff line number Diff line
@@ -134,7 +134,9 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
                if (lastDevice != null) {
                    int batteryLevel = lastDevice.getBatteryLevel();
                    if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) {
                        state.icon = new BluetoothBatteryDrawable(batteryLevel);
                        state.icon = new BluetoothBatteryDrawable(batteryLevel,
                                mContext.getResources().getFraction(
                                        R.fraction.bt_battery_scale_fraction, 1, 1));
                    }
                }
                state.contentDescription = mContext.getString(
@@ -212,17 +214,21 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {

    private class BluetoothBatteryDrawable extends Icon {
        private int mLevel;
        private float mIconScale;

        BluetoothBatteryDrawable(int level) {
            this(level, 1 /* iconScale */);
        }

        BluetoothBatteryDrawable(int level, float iconScale) {
            mLevel = level;
            mIconScale = iconScale;
        }

        @Override
        public Drawable getDrawable(Context context) {
            return createLayerDrawable(context,
                    R.drawable.ic_qs_bluetooth_connected, mLevel,
                    context.getResources().getFraction(
                            R.fraction.bt_battery_scale_fraction, 1, 1));
                    R.drawable.ic_qs_bluetooth_connected, mLevel, mIconScale);
        }
    }

@@ -304,8 +310,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
                        item.icon = R.drawable.ic_qs_bluetooth_connected;
                        int batteryLevel = device.getBatteryLevel();
                        if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) {
                            item.iconDrawable = createLayerDrawable(mContext, item.icon,
                                    batteryLevel);
                            item.iconDrawable = new BluetoothBatteryDrawable(batteryLevel);
                            item.line2 = mContext.getString(
                                    R.string.quick_settings_connected_battery_level,
                                    Utils.formatPercentage(batteryLevel));