Merge "[Dagger] Remove BroadcastDispatcher from BatteryMeterView" into sc-v2-dev

This commit is contained in:
Caitlin Cassidy
2021-08-10 14:33:06 +00:00
committed by Android (Google) Code Review
4 changed files with 107 additions and 57 deletions

View File

@@ -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();
}
}
}
}

View File

@@ -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();
}
}
}
}

View File

@@ -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();

View File

@@ -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