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

Commit cffcdc5e authored by Danny Baumann's avatar Danny Baumann Committed by Gerrit Code Review
Browse files

Clean up battery handling.

Use a single observer for all battery meter and level views, and remove
no-longer used callback registrations.

Change-Id: I8f9db5e484628d7fbc74fe892d64bef5f08cea24
parent 16618a5c
Loading
Loading
Loading
Loading
+21 −69
Original line number Diff line number Diff line
@@ -16,18 +16,12 @@

package com.android.systemui;

import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;

import com.android.systemui.cm.UserContentObserver;
import com.android.systemui.statusbar.policy.BatteryController;

public class BatteryLevelTextView extends TextView implements
@@ -38,45 +32,16 @@ public class BatteryLevelTextView extends TextView implements

    private BatteryController mBatteryController;
    private boolean mBatteryCharging;
    private boolean mShow;
    private boolean mForceShow;
    private boolean mAttached;
    private int mRequestedVisibility;

    private SettingsObserver mObserver = new SettingsObserver(new Handler());

    private class SettingsObserver extends UserContentObserver {
        public SettingsObserver(Handler handler) {
            super(handler);
        }

        @Override
        protected void observe() {
            super.observe();

            getContext().getContentResolver().registerContentObserver(Settings.System.getUriFor(
                    STATUS_BAR_BATTERY_STYLE), false, this, UserHandle.USER_ALL);
            getContext().getContentResolver().registerContentObserver(Settings.System.getUriFor(
                    STATUS_BAR_SHOW_BATTERY_PERCENT), false, this, UserHandle.USER_ALL);
        }

        @Override
        protected void unobserve() {
            super.unobserve();

            getContext().getContentResolver().unregisterContentObserver(this);
        }

        @Override
        public void update() {
            loadShowBatteryTextSetting();
        }
    };
    private int mStyle;
    private int mPercentMode;

    public BatteryLevelTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mRequestedVisibility = getVisibility();
        loadShowBatteryTextSetting();
    }

    public void setForceShown(boolean forceShow) {
@@ -109,10 +74,9 @@ public class BatteryLevelTextView extends TextView implements
    @Override
    public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
        setText(getResources().getString(R.string.battery_level_template, level));
        boolean changed = mBatteryCharging != charging;
        if (mBatteryCharging != charging) {
            mBatteryCharging = charging;
        if (changed) {
            loadShowBatteryTextSetting();
            updateVisibility();
        }
    }

@@ -121,6 +85,13 @@ public class BatteryLevelTextView extends TextView implements
        // Not used
    }

    @Override
    public void onBatteryStyleChanged(int style, int percentMode) {
        mStyle = style;
        mPercentMode = percentMode;
        updateVisibility();
    }

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
@@ -128,7 +99,6 @@ public class BatteryLevelTextView extends TextView implements
        if (mBatteryController != null) {
            mBatteryController.addStateChangedCallback(this);
        }
        mObserver.observe();

        mAttached = true;
    }
@@ -137,7 +107,6 @@ public class BatteryLevelTextView extends TextView implements
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mAttached = false;
        mObserver.unobserve();

        if (mBatteryController != null) {
            mBatteryController.removeStateChangedCallback(this);
@@ -145,35 +114,18 @@ public class BatteryLevelTextView extends TextView implements
    }

    private void updateVisibility() {
        if (mShow || mForceShow) {
            super.setVisibility(mRequestedVisibility);
        } else {
            super.setVisibility(GONE);
        }
    }

    private void loadShowBatteryTextSetting() {
        ContentResolver resolver = getContext().getContentResolver();
        int currentUserId = ActivityManager.getCurrentUser();
        int mode = Settings.System.getIntForUser(resolver,
                Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, 0, currentUserId);

        boolean showNextPercent = (mBatteryCharging && mode == 1) || mode == 2;
        int batteryStyle = Settings.System.getIntForUser(resolver,
                Settings.System.STATUS_BAR_BATTERY_STYLE, 0, currentUserId);

        switch (batteryStyle) {
            case 4: //BATTERY_METER_GONE
        boolean showNextPercent = mPercentMode == BatteryController.PERCENTAGE_MODE_OUTSIDE
                || (mBatteryCharging && mPercentMode == BatteryController.PERCENTAGE_MODE_INSIDE);
        if (mStyle == BatteryController.STYLE_GONE) {
            showNextPercent = false;
                break;
            case 6: //BATTERY_METER_TEXT
        } else if (mStyle == BatteryController.STYLE_TEXT) {
            showNextPercent = true;
                break;
            default:
                break;
        }

        mShow = showNextPercent;
        updateVisibility();
        if (showNextPercent || mForceShow) {
            super.setVisibility(mRequestedVisibility);
        } else {
            super.setVisibility(GONE);
        }
    }
}
+29 −76
Original line number Diff line number Diff line
@@ -17,33 +17,26 @@

package com.android.systemui;

import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.ContentObserver;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.BatteryManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.android.systemui.cm.UserContentObserver;
import com.android.systemui.statusbar.policy.BatteryController;

public class BatteryMeterView extends View implements DemoMode,
@@ -199,36 +192,6 @@ public class BatteryMeterView extends View implements DemoMode,
        }
    };

    SettingsObserver mObserver = new SettingsObserver(new Handler());

    private class SettingsObserver extends UserContentObserver {
        public SettingsObserver(Handler handler) {
            super(handler);
        }

        @Override
        protected void observe() {
            super.observe();

            getContext().getContentResolver().registerContentObserver(Settings.System.getUriFor(
                    STATUS_BAR_BATTERY_STYLE), false, this, UserHandle.USER_ALL);
            getContext().getContentResolver().registerContentObserver(Settings.System.getUriFor(
                    STATUS_BAR_SHOW_BATTERY_PERCENT), false, this, UserHandle.USER_ALL);
        }

        @Override
        protected void unobserve() {
            super.unobserve();
            getContext().getContentResolver().unregisterContentObserver(this);
        }

        @Override
        public void update() {
            loadShowBatterySetting();
            postInvalidate();
        }
    };

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
@@ -243,7 +206,6 @@ public class BatteryMeterView extends View implements DemoMode,
        }
        mBatteryController.addStateChangedCallback(this);
        mAttached = true;
        mObserver.observe();
    }

    @Override
@@ -252,44 +214,9 @@ public class BatteryMeterView extends View implements DemoMode,

        mAttached = false;
        getContext().unregisterReceiver(mTracker);
        mObserver.unobserve();
        mBatteryController.removeStateChangedCallback(this);
    }

    private void loadShowBatterySetting() {
        ContentResolver resolver = mContext.getContentResolver();
        int currentUserId = ActivityManager.getCurrentUser();

        boolean showInsidePercent = Settings.System.getIntForUser(resolver,
                Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, 0, currentUserId) == 1;

        int batteryStyle = Settings.System.getIntForUser(resolver,
                Settings.System.STATUS_BAR_BATTERY_STYLE, 0, currentUserId);
        BatteryMeterMode meterMode = BatteryMeterMode.BATTERY_METER_ICON_PORTRAIT;
        switch (batteryStyle) {
            case 2:
                meterMode = BatteryMeterMode.BATTERY_METER_CIRCLE;
                break;
            case 4:
                meterMode = BatteryMeterMode.BATTERY_METER_GONE;
                showInsidePercent = false;
                break;
            case 5:
                meterMode = BatteryMeterMode.BATTERY_METER_ICON_LANDSCAPE;
                break;
            case 6:
                meterMode = BatteryMeterMode.BATTERY_METER_TEXT;
                showInsidePercent = false;
                break;
            default:
                break;
        }

        setMode(meterMode);
        mShowPercent = showInsidePercent;
        invalidateIfVisible();
    }

    public BatteryMeterView(Context context) {
        this(context, null, 0);
    }
@@ -328,9 +255,6 @@ public class BatteryMeterView extends View implements DemoMode,
                R.fraction.battery_subpixel_smoothing_left, 1, 1);
        mSubpixelSmoothingRight = context.getResources().getFraction(
                R.fraction.battery_subpixel_smoothing_right, 1, 1);

        loadShowBatterySetting();
        mBatteryMeterDrawable = createBatteryMeterDrawable(mMeterMode);
    }

    protected BatteryMeterDrawable createBatteryMeterDrawable(BatteryMeterMode mode) {
@@ -381,6 +305,35 @@ public class BatteryMeterView extends View implements DemoMode,
        invalidate();
    }

    @Override
    public void onBatteryStyleChanged(int style, int percentMode) {
        boolean showInsidePercent = percentMode == BatteryController.PERCENTAGE_MODE_INSIDE;
        BatteryMeterMode meterMode = BatteryMeterMode.BATTERY_METER_ICON_PORTRAIT;

        switch (style) {
            case BatteryController.STYLE_CIRCLE:
                meterMode = BatteryMeterMode.BATTERY_METER_CIRCLE;
                break;
            case BatteryController.STYLE_GONE:
                meterMode = BatteryMeterMode.BATTERY_METER_GONE;
                showInsidePercent = false;
                break;
            case BatteryController.STYLE_ICON_LANDSCAPE:
                meterMode = BatteryMeterMode.BATTERY_METER_ICON_LANDSCAPE;
                break;
            case BatteryController.STYLE_TEXT:
                meterMode = BatteryMeterMode.BATTERY_METER_TEXT;
                showInsidePercent = false;
                break;
            default:
                break;
        }

        setMode(meterMode);
        mShowPercent = showInsidePercent;
        invalidateIfVisible();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        mHeight = h;
+1 −25
Original line number Diff line number Diff line
@@ -39,11 +39,9 @@ import com.android.systemui.statusbar.policy.UserInfoController;
/**
 * The header group on Keyguard.
 */
public class KeyguardStatusBarView extends RelativeLayout
        implements BatteryController.BatteryStateChangeCallback {
public class KeyguardStatusBarView extends RelativeLayout {

    private boolean mKeyguardUserSwitcherShowing;
    private boolean mBatteryListening;

    private View mSystemIconsSuperContainer;
    private MultiUserSwitch mMultiUserSwitch;
@@ -101,18 +99,6 @@ public class KeyguardStatusBarView extends RelativeLayout
        }
    }

    public void setListening(boolean listening) {
        if (listening == mBatteryListening) {
            return;
        }
        mBatteryListening = listening;
        if (mBatteryListening) {
            mBatteryController.addStateChangedCallback(this);
        } else {
            mBatteryController.removeStateChangedCallback(this);
        }
    }

    private void updateUserSwitcher() {
        boolean keyguardSwitcherAvailable = mKeyguardUserSwitcher != null;
        mMultiUserSwitch.setClickable(keyguardSwitcherAvailable);
@@ -135,16 +121,6 @@ public class KeyguardStatusBarView extends RelativeLayout
        });
    }

    @Override
    public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
        // could not care less
    }

    @Override
    public void onPowerSaveChanged() {
        // could not care less
    }

    public void setKeyguardUserSwitcher(KeyguardUserSwitcher keyguardUserSwitcher) {
        mKeyguardUserSwitcher = keyguardUserSwitcher;
        mMultiUserSwitch.setKeyguardUserSwitcher(keyguardUserSwitcher);
+0 −1
Original line number Diff line number Diff line
@@ -1491,7 +1491,6 @@ public class NotificationPanelView extends PanelView implements

    private void setListening(boolean listening) {
        mHeader.setListening(listening);
        mKeyguardStatusBar.setListening(listening);
        mQsPanel.setListening(listening);
    }

+8 −1
Original line number Diff line number Diff line
@@ -1066,7 +1066,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

        // Other icons
        mLocationController = new LocationControllerImpl(mContext); // will post a notification
        mBatteryController = new BatteryController(mContext);
        mBatteryController = new BatteryController(mContext, mHandler);
        mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() {
            @Override
            public void onPowerSaveChanged() {
@@ -1079,6 +1079,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
                // noop
            }
            @Override
            public void onBatteryStyleChanged(int style, int percentMode) {
                // noop
            }
        });
        mHotspotController = new HotspotControllerImpl(mContext);
        mBluetoothController = new BluetoothControllerImpl(mContext);
@@ -3706,6 +3710,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        if (mMSimNetworkController != null) {
            mMSimNetworkController.setUserId(mCurrentUserId);
        }
        if (mBatteryController != null) {
            mBatteryController.setUserId(mCurrentUserId);
        }
    }

    private void resetUserSetupObserver() {
Loading