Merge "[Dagger] Remove BroadcastDispatcher from BatteryMeterView" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
50c280c7bb
@@ -24,17 +24,13 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
|
|||||||
import android.animation.LayoutTransition;
|
import android.animation.LayoutTransition;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.database.ContentObserver;
|
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.os.UserHandle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
@@ -51,10 +47,8 @@ import com.android.systemui.Dependency;
|
|||||||
import com.android.systemui.DualToneHandler;
|
import com.android.systemui.DualToneHandler;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.animation.Interpolators;
|
import com.android.systemui.animation.Interpolators;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
|
||||||
import com.android.systemui.plugins.DarkIconDispatcher;
|
import com.android.systemui.plugins.DarkIconDispatcher;
|
||||||
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
|
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;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
|
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
|
||||||
|
|
||||||
@@ -76,11 +70,9 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
|
|
||||||
private final ThemedBatteryDrawable mDrawable;
|
private final ThemedBatteryDrawable mDrawable;
|
||||||
private final ImageView mBatteryIconView;
|
private final ImageView mBatteryIconView;
|
||||||
private final CurrentUserTracker mUserTracker;
|
|
||||||
private TextView mBatteryPercentView;
|
private TextView mBatteryPercentView;
|
||||||
|
|
||||||
private BatteryController mBatteryController;
|
private BatteryController mBatteryController;
|
||||||
private SettingObserver mSettingObserver;
|
|
||||||
private final @StyleRes int mPercentageStyleId;
|
private final @StyleRes int mPercentageStyleId;
|
||||||
private int mTextColor;
|
private int mTextColor;
|
||||||
private int mLevel;
|
private int mLevel;
|
||||||
@@ -93,7 +85,6 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
private Drawable mUnknownStateDrawable;
|
private Drawable mUnknownStateDrawable;
|
||||||
|
|
||||||
private DualToneHandler mDualToneHandler;
|
private DualToneHandler mDualToneHandler;
|
||||||
private int mUser;
|
|
||||||
|
|
||||||
private int mNonAdaptedSingleToneColor;
|
private int mNonAdaptedSingleToneColor;
|
||||||
private int mNonAdaptedForegroundColor;
|
private int mNonAdaptedForegroundColor;
|
||||||
@@ -105,7 +96,6 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
|
|
||||||
public BatteryMeterView(Context context, AttributeSet attrs, int defStyle) {
|
public BatteryMeterView(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
BroadcastDispatcher broadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
|
|
||||||
|
|
||||||
setOrientation(LinearLayout.HORIZONTAL);
|
setOrientation(LinearLayout.HORIZONTAL);
|
||||||
setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
|
setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
|
||||||
@@ -118,7 +108,6 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
mDrawable = new ThemedBatteryDrawable(context, frameColor);
|
mDrawable = new ThemedBatteryDrawable(context, frameColor);
|
||||||
atts.recycle();
|
atts.recycle();
|
||||||
|
|
||||||
mSettingObserver = new SettingObserver(new Handler(context.getMainLooper()));
|
|
||||||
mShowPercentAvailable = context.getResources().getBoolean(
|
mShowPercentAvailable = context.getResources().getBoolean(
|
||||||
com.android.internal.R.bool.config_battery_percentage_setting_available);
|
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.
|
// Init to not dark at all.
|
||||||
onDarkChanged(new Rect(), 0, DarkIconDispatcher.DEFAULT_ICON_TINT);
|
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);
|
setClipChildren(false);
|
||||||
setClipToPadding(false);
|
setClipToPadding(false);
|
||||||
}
|
}
|
||||||
@@ -206,22 +183,13 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
super.onAttachedToWindow();
|
super.onAttachedToWindow();
|
||||||
mBatteryController = Dependency.get(BatteryController.class);
|
mBatteryController = Dependency.get(BatteryController.class);
|
||||||
mBatteryController.addCallback(this);
|
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();
|
updateShowPercent();
|
||||||
mUserTracker.startTracking();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDetachedFromWindow() {
|
public void onDetachedFromWindow() {
|
||||||
super.onDetachedFromWindow();
|
super.onDetachedFromWindow();
|
||||||
mUserTracker.stopTracking();
|
|
||||||
mBatteryController.removeCallback(this);
|
mBatteryController.removeCallback(this);
|
||||||
getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -254,7 +222,7 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
updateShowPercent();
|
updateShowPercent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updatePercentText() {
|
void updatePercentText() {
|
||||||
if (mBatteryStateUnknown) {
|
if (mBatteryStateUnknown) {
|
||||||
setContentDescription(getContext().getString(R.string.accessibility_battery_unknown));
|
setContentDescription(getContext().getString(R.string.accessibility_battery_unknown));
|
||||||
return;
|
return;
|
||||||
@@ -300,12 +268,12 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
: R.string.accessibility_battery_level, mLevel));
|
: R.string.accessibility_battery_level, mLevel));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateShowPercent() {
|
void updateShowPercent() {
|
||||||
final boolean showing = mBatteryPercentView != null;
|
final boolean showing = mBatteryPercentView != null;
|
||||||
// TODO(b/140051051)
|
// TODO(b/140051051)
|
||||||
final boolean systemSetting = 0 != whitelistIpcs(() -> Settings.System
|
final boolean systemSetting = 0 != whitelistIpcs(() -> Settings.System
|
||||||
.getIntForUser(getContext().getContentResolver(),
|
.getIntForUser(getContext().getContentResolver(),
|
||||||
SHOW_BATTERY_PERCENT, 0, mUser));
|
SHOW_BATTERY_PERCENT, 0, UserHandle.USER_CURRENT));
|
||||||
boolean shouldShow =
|
boolean shouldShow =
|
||||||
(mShowPercentAvailable && systemSetting && mShowPercentMode != MODE_OFF)
|
(mShowPercentAvailable && systemSetting && mShowPercentMode != MODE_OFF)
|
||||||
|| mShowPercentMode == MODE_ON
|
|| mShowPercentMode == MODE_ON
|
||||||
@@ -422,21 +390,5 @@ public class BatteryMeterView extends LinearLayout implements
|
|||||||
pw.println(" mLevel: " + mLevel);
|
pw.println(" mLevel: " + mLevel);
|
||||||
pw.println(" mMode: " + mShowPercentMode);
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,21 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.systemui.battery;
|
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.util.ArraySet;
|
||||||
import android.view.View;
|
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.phone.StatusBarIconController;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
@@ -29,8 +41,11 @@ import javax.inject.Inject;
|
|||||||
public class BatteryMeterViewController extends ViewController<BatteryMeterView> {
|
public class BatteryMeterViewController extends ViewController<BatteryMeterView> {
|
||||||
private final ConfigurationController mConfigurationController;
|
private final ConfigurationController mConfigurationController;
|
||||||
private final TunerService mTunerService;
|
private final TunerService mTunerService;
|
||||||
|
private final ContentResolver mContentResolver;
|
||||||
|
|
||||||
private final String mSlotBattery;
|
private final String mSlotBattery;
|
||||||
|
private final SettingObserver mSettingObserver;
|
||||||
|
private final CurrentUserTracker mCurrentUserTracker;
|
||||||
|
|
||||||
private final ConfigurationController.ConfigurationListener mConfigurationListener =
|
private final ConfigurationController.ConfigurationListener mConfigurationListener =
|
||||||
new ConfigurationController.ConfigurationListener() {
|
new ConfigurationController.ConfigurationListener() {
|
||||||
@@ -59,18 +74,35 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
|
|||||||
public BatteryMeterViewController(
|
public BatteryMeterViewController(
|
||||||
BatteryMeterView view,
|
BatteryMeterView view,
|
||||||
ConfigurationController configurationController,
|
ConfigurationController configurationController,
|
||||||
TunerService tunerService) {
|
TunerService tunerService,
|
||||||
|
BroadcastDispatcher broadcastDispatcher,
|
||||||
|
@Main Handler mainHandler,
|
||||||
|
ContentResolver contentResolver) {
|
||||||
super(view);
|
super(view);
|
||||||
mConfigurationController = configurationController;
|
mConfigurationController = configurationController;
|
||||||
mTunerService = tunerService;
|
mTunerService = tunerService;
|
||||||
|
mContentResolver = contentResolver;
|
||||||
|
|
||||||
mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery);
|
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
|
@Override
|
||||||
protected void onViewAttached() {
|
protected void onViewAttached() {
|
||||||
mConfigurationController.addCallback(mConfigurationListener);
|
mConfigurationController.addCallback(mConfigurationListener);
|
||||||
subscribeForTunerUpdates();
|
subscribeForTunerUpdates();
|
||||||
|
|
||||||
|
registerShowBatteryPercentObserver(ActivityManager.getCurrentUser());
|
||||||
|
registerGlobalBatteryUpdateObserver();
|
||||||
|
mCurrentUserTracker.startTracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,6 +115,8 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
|
|||||||
super.destroy();
|
super.destroy();
|
||||||
mConfigurationController.removeCallback(mConfigurationListener);
|
mConfigurationController.removeCallback(mConfigurationListener);
|
||||||
unsubscribeFromTunerUpdates();
|
unsubscribeFromTunerUpdates();
|
||||||
|
mCurrentUserTracker.stopTracking();
|
||||||
|
mContentResolver.unregisterContentObserver(mSettingObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -111,4 +145,36 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
|
|||||||
mTunerService.removeTunable(mTunable);
|
mTunerService.removeTunable(mTunable);
|
||||||
mIsSubscribedForTunerUpdates = false;
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1218,7 +1218,10 @@ public class StatusBar extends SystemUI implements
|
|||||||
mBatteryMeterViewController = new BatteryMeterViewController(
|
mBatteryMeterViewController = new BatteryMeterViewController(
|
||||||
mStatusBarView.findViewById(R.id.battery),
|
mStatusBarView.findViewById(R.id.battery),
|
||||||
mConfigurationController,
|
mConfigurationController,
|
||||||
mTunerService
|
mTunerService,
|
||||||
|
mBroadcastDispatcher,
|
||||||
|
mMainThreadHandler,
|
||||||
|
mContext.getContentResolver()
|
||||||
);
|
);
|
||||||
mBatteryMeterViewController.init();
|
mBatteryMeterViewController.init();
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,25 @@
|
|||||||
|
|
||||||
package com.android.systemui.battery;
|
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.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
|
|
||||||
@@ -41,6 +52,12 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
|
|||||||
private ConfigurationController mConfigurationController;
|
private ConfigurationController mConfigurationController;
|
||||||
@Mock
|
@Mock
|
||||||
private TunerService mTunerService;
|
private TunerService mTunerService;
|
||||||
|
@Mock
|
||||||
|
private BroadcastDispatcher mBroadcastDispatcher;
|
||||||
|
@Mock
|
||||||
|
private Handler mHandler;
|
||||||
|
@Mock
|
||||||
|
private ContentResolver mContentResolver;
|
||||||
|
|
||||||
private BatteryMeterViewController mController;
|
private BatteryMeterViewController mController;
|
||||||
|
|
||||||
@@ -54,7 +71,10 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
|
|||||||
mController = new BatteryMeterViewController(
|
mController = new BatteryMeterViewController(
|
||||||
mBatteryMeterView,
|
mBatteryMeterView,
|
||||||
mConfigurationController,
|
mConfigurationController,
|
||||||
mTunerService
|
mTunerService,
|
||||||
|
mBroadcastDispatcher,
|
||||||
|
mHandler,
|
||||||
|
mContentResolver
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +84,14 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
verify(mConfigurationController).addCallback(any());
|
verify(mConfigurationController).addCallback(any());
|
||||||
verify(mTunerService).addTunable(any(), 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
|
@Test
|
||||||
@@ -75,6 +103,7 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
verify(mConfigurationController).removeCallback(any());
|
verify(mConfigurationController).removeCallback(any());
|
||||||
verify(mTunerService).removeTunable(any());
|
verify(mTunerService).removeTunable(any());
|
||||||
|
verify(mContentResolver).unregisterContentObserver(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user