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

Commit 0970de4a authored by Caitlin Cassidy's avatar Caitlin Cassidy Committed by Automerger Merge Worker
Browse files

Merge "[Dagger] Remove BroadcastDispatcher from BatteryMeterView" into...

Merge "[Dagger] Remove BroadcastDispatcher from BatteryMeterView" into sc-v2-dev am: 50c280c7 am: 705530d6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15373091

Change-Id: I3af4f33e23dfafe0cc0a19ab2b798762b9a7f878
parents 51423bd7 705530d6
Loading
Loading
Loading
Loading
+5 −53
Original line number Diff line number Diff line
@@ -24,17 +24,13 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.annotation.IntDef;
import android.app.ActivityManager;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
@@ -51,10 +47,8 @@ import com.android.systemui.Dependency;
import com.android.systemui.DualToneHandler;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;

@@ -76,11 +70,9 @@ public class BatteryMeterView extends LinearLayout implements

    private final ThemedBatteryDrawable mDrawable;
    private final ImageView mBatteryIconView;
    private final CurrentUserTracker mUserTracker;
    private TextView mBatteryPercentView;

    private BatteryController mBatteryController;
    private SettingObserver mSettingObserver;
    private final @StyleRes int mPercentageStyleId;
    private int mTextColor;
    private int mLevel;
@@ -93,7 +85,6 @@ public class BatteryMeterView extends LinearLayout implements
    private Drawable mUnknownStateDrawable;

    private DualToneHandler mDualToneHandler;
    private int mUser;

    private int mNonAdaptedSingleToneColor;
    private int mNonAdaptedForegroundColor;
@@ -105,7 +96,6 @@ public class BatteryMeterView extends LinearLayout implements

    public BatteryMeterView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        BroadcastDispatcher broadcastDispatcher = Dependency.get(BroadcastDispatcher.class);

        setOrientation(LinearLayout.HORIZONTAL);
        setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
@@ -118,7 +108,6 @@ public class BatteryMeterView extends LinearLayout implements
        mDrawable = new ThemedBatteryDrawable(context, frameColor);
        atts.recycle();

        mSettingObserver = new SettingObserver(new Handler(context.getMainLooper()));
        mShowPercentAvailable = context.getResources().getBoolean(
                com.android.internal.R.bool.config_battery_percentage_setting_available);

@@ -138,18 +127,6 @@ public class BatteryMeterView extends LinearLayout implements
        // Init to not dark at all.
        onDarkChanged(new Rect(), 0, DarkIconDispatcher.DEFAULT_ICON_TINT);

        mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
            @Override
            public void onUserSwitched(int newUserId) {
                mUser = newUserId;
                getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
                getContext().getContentResolver().registerContentObserver(
                        Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver,
                        newUserId);
                updateShowPercent();
            }
        };

        setClipChildren(false);
        setClipToPadding(false);
    }
@@ -206,22 +183,13 @@ public class BatteryMeterView extends LinearLayout implements
        super.onAttachedToWindow();
        mBatteryController = Dependency.get(BatteryController.class);
        mBatteryController.addCallback(this);
        mUser = ActivityManager.getCurrentUser();
        getContext().getContentResolver().registerContentObserver(
                Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver, mUser);
        getContext().getContentResolver().registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
                false, mSettingObserver);
        updateShowPercent();
        mUserTracker.startTracking();
    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mUserTracker.stopTracking();
        mBatteryController.removeCallback(this);
        getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
    }

    @Override
@@ -254,7 +222,7 @@ public class BatteryMeterView extends LinearLayout implements
        updateShowPercent();
    }

    private void updatePercentText() {
    void updatePercentText() {
        if (mBatteryStateUnknown) {
            setContentDescription(getContext().getString(R.string.accessibility_battery_unknown));
            return;
@@ -300,12 +268,12 @@ public class BatteryMeterView extends LinearLayout implements
                        : R.string.accessibility_battery_level, mLevel));
    }

    private void updateShowPercent() {
    void updateShowPercent() {
        final boolean showing = mBatteryPercentView != null;
        // TODO(b/140051051)
        final boolean systemSetting = 0 != whitelistIpcs(() -> Settings.System
                .getIntForUser(getContext().getContentResolver(),
                SHOW_BATTERY_PERCENT, 0, mUser));
                SHOW_BATTERY_PERCENT, 0, UserHandle.USER_CURRENT));
        boolean shouldShow =
                (mShowPercentAvailable && systemSetting && mShowPercentMode != MODE_OFF)
                || mShowPercentMode == MODE_ON
@@ -422,21 +390,5 @@ public class BatteryMeterView extends LinearLayout implements
        pw.println("    mLevel: " + mLevel);
        pw.println("    mMode: " + mShowPercentMode);
    }

    private final class SettingObserver extends ContentObserver {
        public SettingObserver(Handler handler) {
            super(handler);
}
        @Override
        public void onChange(boolean selfChange, Uri uri) {
            super.onChange(selfChange, uri);
            updateShowPercent();
            if (TextUtils.equals(uri.getLastPathSegment(),
                    Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME)) {
                // update the text for sure if the estimate in the cache was updated
                updatePercentText();
            }
        }
    }
}
+68 −2
Original line number Diff line number Diff line
@@ -15,9 +15,21 @@
 */
package com.android.systemui.battery;

import static android.provider.Settings.System.SHOW_BATTERY_PERCENT;

import android.app.ActivityManager;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArraySet;
import android.view.View;

import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;
@@ -29,8 +41,11 @@ import javax.inject.Inject;
public class BatteryMeterViewController extends ViewController<BatteryMeterView> {
    private final ConfigurationController mConfigurationController;
    private final TunerService mTunerService;
    private final ContentResolver mContentResolver;

    private final String mSlotBattery;
    private final SettingObserver mSettingObserver;
    private final CurrentUserTracker mCurrentUserTracker;

    private final ConfigurationController.ConfigurationListener mConfigurationListener =
            new ConfigurationController.ConfigurationListener() {
@@ -59,18 +74,35 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
    public BatteryMeterViewController(
            BatteryMeterView view,
            ConfigurationController configurationController,
            TunerService tunerService) {
            TunerService tunerService,
            BroadcastDispatcher broadcastDispatcher,
            @Main Handler mainHandler,
            ContentResolver contentResolver) {
        super(view);
        mConfigurationController = configurationController;
        mTunerService = tunerService;
        mContentResolver = contentResolver;

        mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery);
        mSettingObserver = new SettingObserver(mainHandler);
        mCurrentUserTracker = new CurrentUserTracker(broadcastDispatcher) {
            @Override
            public void onUserSwitched(int newUserId) {
                contentResolver.unregisterContentObserver(mSettingObserver);
                registerShowBatteryPercentObserver(newUserId);
                mView.updateShowPercent();
            }
        };
    }

    @Override
    protected void onViewAttached() {
        mConfigurationController.addCallback(mConfigurationListener);
        subscribeForTunerUpdates();

        registerShowBatteryPercentObserver(ActivityManager.getCurrentUser());
        registerGlobalBatteryUpdateObserver();
        mCurrentUserTracker.startTracking();
    }

    @Override
@@ -83,6 +115,8 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
        super.destroy();
        mConfigurationController.removeCallback(mConfigurationListener);
        unsubscribeFromTunerUpdates();
        mCurrentUserTracker.stopTracking();
        mContentResolver.unregisterContentObserver(mSettingObserver);
    }

    /**
@@ -111,4 +145,36 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
        mTunerService.removeTunable(mTunable);
        mIsSubscribedForTunerUpdates = false;
    }

    private void registerShowBatteryPercentObserver(int user) {
        mContentResolver.registerContentObserver(
                Settings.System.getUriFor(SHOW_BATTERY_PERCENT),
                false,
                mSettingObserver,
                user);
    }

    private void registerGlobalBatteryUpdateObserver() {
        mContentResolver.registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
                false,
                mSettingObserver);
    }

    private final class SettingObserver extends ContentObserver {
        public SettingObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange, Uri uri) {
            super.onChange(selfChange, uri);
            mView.updateShowPercent();
            if (TextUtils.equals(uri.getLastPathSegment(),
                    Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME)) {
                // update the text for sure if the estimate in the cache was updated
                mView.updatePercentText();
            }
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -1218,7 +1218,10 @@ public class StatusBar extends SystemUI implements
                    mBatteryMeterViewController = new BatteryMeterViewController(
                            mStatusBarView.findViewById(R.id.battery),
                            mConfigurationController,
                            mTunerService
                            mTunerService,
                            mBroadcastDispatcher,
                            mMainThreadHandler,
                            mContext.getContentResolver()
                    );
                    mBatteryMeterViewController.init();

+30 −1
Original line number Diff line number Diff line
@@ -16,14 +16,25 @@

package com.android.systemui.battery;

import static android.provider.Settings.System.SHOW_BATTERY_PERCENT;

import static com.android.systemui.util.mockito.KotlinMockitoHelpersKt.eq;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.ContentResolver;
import android.os.Handler;
import android.provider.Settings;

import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;

@@ -41,6 +52,12 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
    private ConfigurationController mConfigurationController;
    @Mock
    private TunerService mTunerService;
    @Mock
    private BroadcastDispatcher mBroadcastDispatcher;
    @Mock
    private Handler mHandler;
    @Mock
    private ContentResolver mContentResolver;

    private BatteryMeterViewController mController;

@@ -54,7 +71,10 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
        mController = new BatteryMeterViewController(
                mBatteryMeterView,
                mConfigurationController,
                mTunerService
                mTunerService,
                mBroadcastDispatcher,
                mHandler,
                mContentResolver
        );
    }

@@ -64,6 +84,14 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {

        verify(mConfigurationController).addCallback(any());
        verify(mTunerService).addTunable(any(), any());
        verify(mContentResolver).registerContentObserver(
                eq(Settings.System.getUriFor(SHOW_BATTERY_PERCENT)), anyBoolean(), any(), anyInt()
        );
        verify(mContentResolver).registerContentObserver(
                eq(Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME)),
                anyBoolean(),
                any()
        );
    }

    @Test
@@ -75,6 +103,7 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {

        verify(mConfigurationController).removeCallback(any());
        verify(mTunerService).removeTunable(any());
        verify(mContentResolver).unregisterContentObserver(any());
    }

    @Test