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

Commit dd0107a0 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Add ability to colorize status bar

Bug: 19233606
Change-Id: I756599395c202c4d0dd04c44beac706fc19bfe17
parent c37fa833
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
    <color name="notification_list_shadow_top">#80000000</color>
    <drawable name="recents_callout_line">#99ffffff</drawable>
    <drawable name="heads_up_notification_bg_pressed">#ff33B5E5</drawable>
    <color name="batterymeter_frame_color">#66FFFFFF</color><!-- 40% white -->
    <color name="batterymeter_frame_color">#4DFFFFFF</color><!-- 30% white -->
    <color name="batterymeter_charge_color">#FFFFFFFF</color>
    <color name="batterymeter_bolt_color">#FFFFFFFF</color>
    <color name="qs_batterymeter_frame_color">#FF404040</color>
+6 −0
Original line number Diff line number Diff line
@@ -40,5 +40,11 @@
    <item type="id" name="notification_power"/>
    <item type="id" name="notification_screenshot"/>
    <item type="id" name="notification_hidden"/>

    <!-- Whether the icon is from a notification for which targetSdk < L -->
    <item type="id" name="icon_is_pre_L"/>

    <!-- For notification icons for which targetSdk < L, this caches whether the icon is grayscale -->
    <item type="id" name="icon_is_grayscale" />
</resources>
+23 −2
Original line number Diff line number Diff line
@@ -23,8 +23,12 @@ import android.content.IntentFilter;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.os.BatteryManager;
@@ -56,12 +60,13 @@ public class BatteryMeterView extends View implements DemoMode,
    private float mSubpixelSmoothingRight;
    private final Paint mFramePaint, mBatteryPaint, mWarningTextPaint, mTextPaint, mBoltPaint;
    private float mTextHeight, mWarningTextHeight;
    private int mIconTint = Color.WHITE;

    private int mHeight;
    private int mWidth;
    private String mWarningString;
    private final int mCriticalLevel;
    private final int mChargeColor;
    private int mChargeColor;
    private final float[] mBoltPoints;
    private final Path mBoltPath = new Path();

@@ -292,11 +297,27 @@ public class BatteryMeterView extends View implements DemoMode,
        for (int i=0; i<mColors.length; i+=2) {
            thresh = mColors[i];
            color = mColors[i+1];
            if (percent <= thresh) return color;
            if (percent <= thresh) {

                // Respect tinting for "normal" level
                if (i == mColors.length-2) {
                    return mIconTint;
                } else {
                    return color;
                }
            }
        }
        return color;
    }

    public void setIconTint(int tint) {
        mIconTint = tint;
        mFramePaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.SRC_ATOP));
        mBoltPaint.setColor(tint);
        mChargeColor = tint;
        invalidate();
    }

    @Override
    public void draw(Canvas c) {
        BatteryTracker tracker = mDemoMode ? mDemoTracker : mTracker;
+1 −5
Original line number Diff line number Diff line
@@ -773,11 +773,7 @@ public abstract class BaseStatusBar extends SystemUI implements
        }

        if (entry.icon != null) {
            if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
                entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
            } else {
                entry.icon.setColorFilter(null);
            }
            entry.icon.setTag(R.id.icon_is_pre_L, entry.targetSdk < Build.VERSION_CODES.LOLLIPOP);
        }
    }

+36 −0
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@
package com.android.systemui.statusbar;

import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.telephony.SubscriptionInfo;
import android.util.AttributeSet;
import android.util.Log;
@@ -55,6 +58,7 @@ public class SignalClusterView
    private int mAirplaneContentDescription;
    private String mWifiDescription;
    private ArrayList<PhoneState> mPhoneStates = new ArrayList<PhoneState>();
    private int mIconTint = Color.WHITE;

    ViewGroup mWifiGroup;
    ImageView mVpn, mWifi, mAirplane, mNoSims;
@@ -121,6 +125,7 @@ public class SignalClusterView
        }

        apply();
        applyIconTint();
    }

    @Override
@@ -187,6 +192,9 @@ public class SignalClusterView
        for (int i = 0; i < n; i++) {
            inflatePhoneState(subs.get(i).getSubscriptionId());
        }
        if (isAttachedToWindow()) {
            applyIconTint();
        }
    }

    private PhoneState getOrInflateState(int subId) {
@@ -315,6 +323,29 @@ public class SignalClusterView
        setPaddingRelative(0, 0, anythingVisible ? mEndPadding : mEndPaddingNothingVisible, 0);
    }

    public void setIconTint(int tint) {
        boolean changed = tint != mIconTint;
        mIconTint = tint;
        if (changed && isAttachedToWindow()) {
            applyIconTint();
        }
    }

    private void applyIconTint() {
        setTint(mVpn, mIconTint);
        setTint(mWifi, mIconTint);
        setTint(mNoSims, mIconTint);
        setTint(mAirplane, mIconTint);
        for (int i = 0; i < mPhoneStates.size(); i++) {
            mPhoneStates.get(i).setIconTint(mIconTint);
        }
    }

    private void setTint(ImageView v, int tint) {
        v.setImageTintMode(PorterDuff.Mode.SRC_ATOP);
        v.setImageTintList(ColorStateList.valueOf(tint));
    }

    private class PhoneState {
        private final int mSubId;
        private boolean mMobileVisible = false;
@@ -369,6 +400,11 @@ public class SignalClusterView
                event.getText().add(mMobileGroup.getContentDescription());
            }
        }

        public void setIconTint(int tint) {
            setTint(mMobile, tint);
            setTint(mMobileType, tint);
        }
    }
}
Loading