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

Commit 3bef2929 authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Add ability to colorize status bar"

parents 406e1ed9 dd0107a0
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