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

Commit 18d1056f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "SystemUI: Add support for charging animation"

parents cab6766c 381aacdf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -168,6 +168,7 @@
        <item>0</item>
    </integer-array>
    <bool name="config_showRsrpSignalLevelforLTE">false</bool>
    <bool name="config_show_battery_charging_anim">false</bool>

    <!-- The duration in seconds to wait before the dismiss buttons are shown. -->
    <integer name="recents_task_bar_dismiss_delay_seconds">1</integer>
+43 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.graphics.RectF;
import android.graphics.Typeface;
import android.os.BatteryManager;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.View;
@@ -45,7 +46,8 @@ public class BatteryMeterView extends View implements DemoMode,
    private static final boolean SHOW_100_PERCENT = false;

    private static final int FULL = 96;

    private static final int ADD_LEVEL = 10;
    private static final int ANIM_DURATION = 500;
    private static final float BOLT_LEVEL_THRESHOLD = 0.3f;  // opaque bolt below this fraction

    private final int[] mColors;
@@ -56,6 +58,8 @@ public class BatteryMeterView extends View implements DemoMode,
    private float mSubpixelSmoothingRight;
    private final Paint mFramePaint, mBatteryPaint, mWarningTextPaint, mTextPaint, mBoltPaint;
    private float mTextHeight, mWarningTextHeight;
    private int mAnimOffset;
    private boolean mIsCharging;

    private int mHeight;
    private int mWidth;
@@ -75,6 +79,7 @@ public class BatteryMeterView extends View implements DemoMode,

    private BatteryController mBatteryController;
    private boolean mPowerSaveEnabled;
    private final Handler mHandler;

    private class BatteryTracker extends BroadcastReceiver {
        public static final int UNKNOWN_LEVEL = -1;
@@ -150,6 +155,12 @@ public class BatteryMeterView extends View implements DemoMode,
    }

    BatteryTracker mTracker = new BatteryTracker();
    private final Runnable mInvalidate = new Runnable() {
        @Override
        public void run() {
            postInvalidate();
        }
    };

    @Override
    public void onAttachedToWindow() {
@@ -185,6 +196,7 @@ public class BatteryMeterView extends View implements DemoMode,
    public BatteryMeterView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        mHandler = new Handler();
        final Resources res = context.getResources();
        TypedArray atts = context.obtainStyledAttributes(attrs, R.styleable.BatteryMeterView,
                defStyle, 0);
@@ -297,10 +309,39 @@ public class BatteryMeterView extends View implements DemoMode,
        return color;
    }

    private int updateChargingAnimLevel(BatteryTracker tracker) {
        int curLevel = tracker.level;

        if (tracker.status != BatteryManager.BATTERY_STATUS_CHARGING) {
            if (mIsCharging) {
                mIsCharging = false;
                mAnimOffset = 0;
                mHandler.removeCallbacks(mInvalidate);
            }
        } else {
            mIsCharging = true;

            curLevel += mAnimOffset;
            if (curLevel >= FULL) {
                curLevel = 100;
                mAnimOffset = 0;
            } else {
                mAnimOffset += ADD_LEVEL;
            }

            mHandler.removeCallbacks(mInvalidate);
            mHandler.postDelayed(mInvalidate, ANIM_DURATION);
        }
        return curLevel;
    }

    @Override
    public void draw(Canvas c) {
        BatteryTracker tracker = mDemoMode ? mDemoTracker : mTracker;
        final int level = tracker.level;
        final int level =
                mContext.getResources().getBoolean(R.bool.config_show_battery_charging_anim)
                ? updateChargingAnimLevel(tracker)
                : tracker.level;

        if (level == BatteryTracker.UNKNOWN_LEVEL) return;