Auto-add ReduceBrightColorsTile to QS panel.
Test: Manual, AutoTileManagerTest Bug: 128465252 Change-Id: I735724658be186415604c89e66cf2ca3d586d719
This commit is contained in:
@@ -59,6 +59,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.power.EnhancedEstimates;
|
||||
import com.android.systemui.power.PowerUI;
|
||||
import com.android.systemui.privacy.PrivacyItemController;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.screenrecord.RecordingController;
|
||||
@@ -246,6 +247,7 @@ public class Dependency {
|
||||
@Inject Lazy<KeyguardUpdateMonitor> mKeyguardUpdateMonitor;
|
||||
@Inject Lazy<BatteryController> mBatteryController;
|
||||
@Inject Lazy<NightDisplayListener> mNightDisplayListener;
|
||||
@Inject Lazy<ReduceBrightColorsController> mReduceBrightColorsController;
|
||||
@Inject Lazy<ManagedProfileController> mManagedProfileController;
|
||||
@Inject Lazy<NextAlarmController> mNextAlarmController;
|
||||
@Inject Lazy<DataSaverController> mDataSaverController;
|
||||
@@ -393,6 +395,8 @@ public class Dependency {
|
||||
|
||||
mProviders.put(NightDisplayListener.class, mNightDisplayListener::get);
|
||||
|
||||
mProviders.put(ReduceBrightColorsController.class, mReduceBrightColorsController::get);
|
||||
|
||||
mProviders.put(ManagedProfileController.class, mManagedProfileController::get);
|
||||
|
||||
mProviders.put(NextAlarmController.class, mNextAlarmController::get);
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.om.OverlayManager;
|
||||
import android.hardware.display.AmbientDisplayConfiguration;
|
||||
import android.hardware.display.ColorDisplayManager;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.Looper;
|
||||
@@ -60,6 +61,7 @@ import com.android.systemui.navigationbar.NavigationBarOverlayController;
|
||||
import com.android.systemui.navigationbar.NavigationModeController;
|
||||
import com.android.systemui.plugins.PluginInitializerImpl;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
@@ -82,6 +84,7 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.statusbar.policy.NetworkController;
|
||||
import com.android.systemui.theme.ThemeOverlayApplier;
|
||||
import com.android.systemui.util.leak.LeakDetector;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
|
||||
@@ -266,6 +269,15 @@ public class DependencyProvider {
|
||||
}
|
||||
|
||||
/** */
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
public ReduceBrightColorsController provideReduceBrightColorsListener(
|
||||
@Background Handler bgHandler, UserTracker userTracker,
|
||||
ColorDisplayManager colorDisplayManager, SecureSettings secureSettings) {
|
||||
return new ReduceBrightColorsController(userTracker, bgHandler,
|
||||
colorDisplayManager, secureSettings);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@SysUISingleton
|
||||
public ActivityManagerWrapper provideActivityManagerWrapper() {
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.qs;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.ContentObserver;
|
||||
import android.hardware.display.ColorDisplayManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerExecutor;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.statusbar.policy.CallbackController;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public class ReduceBrightColorsController implements
|
||||
CallbackController<ReduceBrightColorsController.Listener> {
|
||||
private final ColorDisplayManager mManager;
|
||||
private final UserTracker mUserTracker;
|
||||
private UserTracker.Callback mCurrentUserTrackerCallback;
|
||||
private final Handler mHandler;
|
||||
private final ContentObserver mContentObserver;
|
||||
private final SecureSettings mSecureSettings;
|
||||
private final ArrayList<ReduceBrightColorsController.Listener> mListeners = new ArrayList<>();
|
||||
|
||||
@Inject
|
||||
public ReduceBrightColorsController(UserTracker userTracker,
|
||||
@Background Handler handler,
|
||||
ColorDisplayManager colorDisplayManager,
|
||||
SecureSettings secureSettings) {
|
||||
mManager = colorDisplayManager;
|
||||
mUserTracker = userTracker;
|
||||
mHandler = handler;
|
||||
mSecureSettings = secureSettings;
|
||||
mContentObserver = new ContentObserver(mHandler) {
|
||||
@Override
|
||||
public void onChange(boolean selfChange, Uri uri) {
|
||||
super.onChange(selfChange, uri);
|
||||
final String setting = uri == null ? null : uri.getLastPathSegment();
|
||||
synchronized (mListeners) {
|
||||
if (setting != null && mListeners.size() != 0) {
|
||||
if (setting.equals(Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED)) {
|
||||
for (Listener listener : mListeners) {
|
||||
listener.onActivated(mManager.isReduceBrightColorsActivated());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
mCurrentUserTrackerCallback = new UserTracker.Callback() {
|
||||
@Override
|
||||
public void onUserChanged(int newUser, Context userContext) {
|
||||
synchronized (mListeners) {
|
||||
if (mListeners.size() > 0) {
|
||||
mSecureSettings.unregisterContentObserver(mContentObserver);
|
||||
mSecureSettings.registerContentObserverForUser(
|
||||
Settings.Secure.getUriFor(
|
||||
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED),
|
||||
false, mContentObserver, newUser);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
mUserTracker.addCallback(mCurrentUserTrackerCallback, new HandlerExecutor(handler));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCallback(@NonNull Listener listener) {
|
||||
synchronized (mListeners) {
|
||||
if (!mListeners.contains(listener)) {
|
||||
mListeners.add(listener);
|
||||
if (mListeners.size() == 1) {
|
||||
mSecureSettings.registerContentObserverForUser(
|
||||
Settings.Secure.getUriFor(
|
||||
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED),
|
||||
false, mContentObserver, mUserTracker.getUserId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCallback(@androidx.annotation.NonNull Listener listener) {
|
||||
synchronized (mListeners) {
|
||||
if (mListeners.remove(listener) && mListeners.size() == 0) {
|
||||
mSecureSettings.unregisterContentObserver(mContentObserver);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns {@code true} if Reduce Bright Colors is activated */
|
||||
public boolean isReduceBrightColorsActivated() {
|
||||
return mManager.isReduceBrightColorsActivated();
|
||||
}
|
||||
|
||||
/** Sets the activation state of Reduce Bright Colors */
|
||||
public void setReduceBrightColorsActivated(boolean activated) {
|
||||
mManager.setReduceBrightColorsActivated(activated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener invoked whenever the Reduce Bright Colors settings are changed.
|
||||
*/
|
||||
public interface Listener {
|
||||
/**
|
||||
* Listener invoked when the activated state changes.
|
||||
*
|
||||
* @param activated {@code true} if Reduce Bright Colors is activated.
|
||||
*/
|
||||
default void onActivated(boolean activated) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.qs.dagger;
|
||||
|
||||
import static com.android.systemui.qs.dagger.QSFlagsModule.RBC_AVAILABLE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.display.NightDisplayListener;
|
||||
import android.os.Handler;
|
||||
@@ -25,6 +27,7 @@ import com.android.systemui.media.dagger.MediaModule;
|
||||
import com.android.systemui.qs.AutoAddTracker;
|
||||
import com.android.systemui.qs.QSHost;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.statusbar.phone.AutoTileManager;
|
||||
import com.android.systemui.statusbar.phone.ManagedProfileController;
|
||||
import com.android.systemui.statusbar.policy.CastController;
|
||||
@@ -32,6 +35,8 @@ import com.android.systemui.statusbar.policy.DataSaverController;
|
||||
import com.android.systemui.statusbar.policy.HotspotController;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
|
||||
import javax.inject.Named;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
@@ -54,7 +59,9 @@ public interface QSModule {
|
||||
DataSaverController dataSaverController,
|
||||
ManagedProfileController managedProfileController,
|
||||
NightDisplayListener nightDisplayListener,
|
||||
CastController castController) {
|
||||
CastController castController,
|
||||
ReduceBrightColorsController reduceBrightColorsController,
|
||||
@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {
|
||||
AutoTileManager manager = new AutoTileManager(
|
||||
context,
|
||||
autoAddTrackerBuilder,
|
||||
@@ -65,7 +72,9 @@ public interface QSModule {
|
||||
dataSaverController,
|
||||
managedProfileController,
|
||||
nightDisplayListener,
|
||||
castController
|
||||
castController,
|
||||
reduceBrightColorsController,
|
||||
isReduceBrightColorsAvailable
|
||||
);
|
||||
manager.init();
|
||||
return manager;
|
||||
|
||||
@@ -33,46 +33,39 @@ import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.qs.QSHost;
|
||||
import com.android.systemui.qs.SecureSetting;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.qs.logging.QSLogger;
|
||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
/** Quick settings tile: Reduce Bright Colors **/
|
||||
public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> {
|
||||
public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState>
|
||||
implements ReduceBrightColorsController.Listener{
|
||||
|
||||
//TODO(b/170973645): get icon drawable
|
||||
private final Icon mIcon = null;
|
||||
private final SecureSetting mActivatedSetting;
|
||||
private final boolean mIsAvailable;
|
||||
private final ReduceBrightColorsController mReduceBrightColorsController;
|
||||
private boolean mIsListening;
|
||||
|
||||
@Inject
|
||||
public ReduceBrightColorsTile(
|
||||
@Named(RBC_AVAILABLE) boolean isAvailable,
|
||||
ReduceBrightColorsController reduceBrightColorsController,
|
||||
QSHost host,
|
||||
@Background Looper backgroundLooper,
|
||||
@Main Handler mainHandler,
|
||||
MetricsLogger metricsLogger,
|
||||
StatusBarStateController statusBarStateController,
|
||||
ActivityStarter activityStarter,
|
||||
QSLogger qsLogger,
|
||||
UserTracker userTracker,
|
||||
SecureSettings secureSettings
|
||||
QSLogger qsLogger
|
||||
) {
|
||||
super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController,
|
||||
activityStarter, qsLogger);
|
||||
|
||||
mActivatedSetting = new SecureSetting(secureSettings, mainHandler,
|
||||
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, userTracker.getUserId()) {
|
||||
@Override
|
||||
protected void handleValueChanged(int value, boolean observedChange) {
|
||||
refreshState();
|
||||
}
|
||||
};
|
||||
mReduceBrightColorsController = reduceBrightColorsController;
|
||||
mReduceBrightColorsController.observe(getLifecycle(), this);
|
||||
mIsAvailable = isAvailable;
|
||||
|
||||
}
|
||||
@@ -84,7 +77,6 @@ public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> {
|
||||
@Override
|
||||
protected void handleDestroy() {
|
||||
super.handleDestroy();
|
||||
mActivatedSetting.setListening(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -92,18 +84,6 @@ public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> {
|
||||
return new BooleanState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleSetListening(boolean listening) {
|
||||
super.handleSetListening(listening);
|
||||
mActivatedSetting.setListening(listening);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleUserSwitch(int newUserId) {
|
||||
mActivatedSetting.setUserId(newUserId);
|
||||
refreshState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Intent getLongClickIntent() {
|
||||
return new Intent(Settings.ACTION_REDUCE_BRIGHT_COLORS_SETTINGS);
|
||||
@@ -111,7 +91,7 @@ public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> {
|
||||
|
||||
@Override
|
||||
protected void handleClick() {
|
||||
mActivatedSetting.setValue(mState.value ? 0 : 1);
|
||||
mReduceBrightColorsController.setReduceBrightColorsActivated(!mState.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -121,7 +101,7 @@ public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> {
|
||||
|
||||
@Override
|
||||
protected void handleUpdateState(BooleanState state, Object arg) {
|
||||
state.value = mActivatedSetting.getValue() == 1;
|
||||
state.value = mReduceBrightColorsController.isReduceBrightColorsActivated();
|
||||
state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
|
||||
state.label = mContext.getString(R.string.quick_settings_reduce_bright_colors_label);
|
||||
state.expandedAccessibilityClassName = Switch.class.getName();
|
||||
@@ -132,4 +112,9 @@ public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> {
|
||||
public int getMetricsCategory() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivated(boolean activated) {
|
||||
refreshState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.qs.dagger.QSFlagsModule.RBC_AVAILABLE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.display.ColorDisplayManager;
|
||||
@@ -27,6 +29,7 @@ import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.qs.AutoAddTracker;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.qs.SecureSetting;
|
||||
import com.android.systemui.qs.external.CustomTile;
|
||||
import com.android.systemui.statusbar.policy.CastController;
|
||||
@@ -41,6 +44,8 @@ import com.android.systemui.util.settings.SecureSettings;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.inject.Named;
|
||||
|
||||
/**
|
||||
* Manages which tiles should be automatically added to QS.
|
||||
*/
|
||||
@@ -69,6 +74,8 @@ public class AutoTileManager implements UserAwareController {
|
||||
private final ManagedProfileController mManagedProfileController;
|
||||
private final NightDisplayListener mNightDisplayListener;
|
||||
private final CastController mCastController;
|
||||
private final ReduceBrightColorsController mReduceBrightColorsController;
|
||||
private final boolean mIsReduceBrightColorsAvailable;
|
||||
private final ArrayList<AutoAddSetting> mAutoAddSettingList = new ArrayList<>();
|
||||
|
||||
public AutoTileManager(Context context, AutoAddTracker.Builder autoAddTrackerBuilder,
|
||||
@@ -79,7 +86,9 @@ public class AutoTileManager implements UserAwareController {
|
||||
DataSaverController dataSaverController,
|
||||
ManagedProfileController managedProfileController,
|
||||
NightDisplayListener nightDisplayListener,
|
||||
CastController castController) {
|
||||
CastController castController,
|
||||
ReduceBrightColorsController reduceBrightColorsController,
|
||||
@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {
|
||||
mContext = context;
|
||||
mHost = host;
|
||||
mSecureSettings = secureSettings;
|
||||
@@ -91,6 +100,8 @@ public class AutoTileManager implements UserAwareController {
|
||||
mManagedProfileController = managedProfileController;
|
||||
mNightDisplayListener = nightDisplayListener;
|
||||
mCastController = castController;
|
||||
mReduceBrightColorsController = reduceBrightColorsController;
|
||||
mIsReduceBrightColorsAvailable = isReduceBrightColorsAvailable;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,9 +135,9 @@ public class AutoTileManager implements UserAwareController {
|
||||
if (!mAutoTracker.isAdded(CAST)) {
|
||||
mCastController.addCallback(mCastCallback);
|
||||
}
|
||||
|
||||
// TODO(b/170970675): Set a listener/controller and callback for Reduce Bright Colors
|
||||
// state changes. Call into ColorDisplayService to get availability/config status
|
||||
if (!mAutoTracker.isAdded(BRIGHTNESS) && mIsReduceBrightColorsAvailable) {
|
||||
mReduceBrightColorsController.addCallback(mReduceBrightColorsCallback);
|
||||
}
|
||||
|
||||
int settingsN = mAutoAddSettingList.size();
|
||||
for (int i = 0; i < settingsN; i++) {
|
||||
@@ -143,6 +154,9 @@ public class AutoTileManager implements UserAwareController {
|
||||
if (ColorDisplayManager.isNightDisplayAvailable(mContext)) {
|
||||
mNightDisplayListener.setCallback(null);
|
||||
}
|
||||
if (mIsReduceBrightColorsAvailable) {
|
||||
mReduceBrightColorsController.removeCallback(mReduceBrightColorsCallback);
|
||||
}
|
||||
mCastController.removeCallback(mCastCallback);
|
||||
int settingsN = mAutoAddSettingList.size();
|
||||
for (int i = 0; i < settingsN; i++) {
|
||||
@@ -286,6 +300,24 @@ public class AutoTileManager implements UserAwareController {
|
||||
}
|
||||
};
|
||||
|
||||
@VisibleForTesting
|
||||
final ReduceBrightColorsController.Listener mReduceBrightColorsCallback =
|
||||
new ReduceBrightColorsController.Listener() {
|
||||
@Override
|
||||
public void onActivated(boolean activated) {
|
||||
if (activated) {
|
||||
addReduceBrightColorsTile();
|
||||
}
|
||||
}
|
||||
|
||||
private void addReduceBrightColorsTile() {
|
||||
if (mAutoTracker.isAdded(BRIGHTNESS)) return;
|
||||
mHost.addTile(BRIGHTNESS);
|
||||
mAutoTracker.setTileAdded(BRIGHTNESS);
|
||||
mHandler.post(() -> mReduceBrightColorsController.removeCallback(this));
|
||||
}
|
||||
};
|
||||
|
||||
@VisibleForTesting
|
||||
final CastController.Callback mCastCallback = new CastController.Callback() {
|
||||
@Override
|
||||
|
||||
@@ -18,10 +18,12 @@ package com.android.systemui.qs.tiles;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
import android.service.quicksettings.Tile;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
@@ -34,9 +36,9 @@ import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.qs.logging.QSLogger;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.util.settings.FakeSettings;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -60,8 +62,9 @@ public class ReduceBrightColorsTileTest extends SysuiTestCase {
|
||||
private QSLogger mQSLogger;
|
||||
@Mock
|
||||
private UserTracker mUserTracker;
|
||||
@Mock
|
||||
private ReduceBrightColorsController mReduceBrightColorsController;
|
||||
|
||||
private FakeSettings mFakeSettings;
|
||||
private TestableLooper mTestableLooper;
|
||||
private ReduceBrightColorsTile mTile;
|
||||
|
||||
@@ -72,24 +75,23 @@ public class ReduceBrightColorsTileTest extends SysuiTestCase {
|
||||
mTestableLooper = TestableLooper.get(this);
|
||||
|
||||
when(mHost.getContext()).thenReturn(mContext);
|
||||
mFakeSettings = new FakeSettings();
|
||||
|
||||
mTile = new ReduceBrightColorsTile(
|
||||
true,
|
||||
mReduceBrightColorsController,
|
||||
mHost,
|
||||
mTestableLooper.getLooper(),
|
||||
new Handler(mTestableLooper.getLooper()),
|
||||
mMetricsLogger,
|
||||
mStatusBarStateController,
|
||||
mActivityStarter,
|
||||
mQSLogger,
|
||||
mUserTracker,
|
||||
mFakeSettings
|
||||
mQSLogger
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotActive() {
|
||||
when(mReduceBrightColorsController.isReduceBrightColorsActivated()).thenReturn(false);
|
||||
mTile.refreshState();
|
||||
mTestableLooper.processAllMessages();
|
||||
|
||||
@@ -100,33 +102,27 @@ public class ReduceBrightColorsTileTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void testActive() {
|
||||
mFakeSettings.putIntForUser(
|
||||
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED,
|
||||
1,
|
||||
mUserTracker.getUserId());
|
||||
when(mReduceBrightColorsController.isReduceBrightColorsActivated()).thenReturn(true);
|
||||
mTile.refreshState();
|
||||
mTestableLooper.processAllMessages();
|
||||
|
||||
assertActiveState();
|
||||
assertEquals(Tile.STATE_ACTIVE, mTile.getState().state);
|
||||
assertEquals(mTile.getState().label.toString(),
|
||||
mContext.getString(R.string.quick_settings_reduce_bright_colors_label));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testActive_clicked_isActive() {
|
||||
public void testActive_clicked_featureIsActivated() {
|
||||
when(mReduceBrightColorsController.isReduceBrightColorsActivated()).thenReturn(false);
|
||||
mTile.refreshState();
|
||||
mTestableLooper.processAllMessages();
|
||||
// Validity check
|
||||
assertEquals(Tile.STATE_INACTIVE, mTile.getState().state);
|
||||
|
||||
mTile.handleClick();
|
||||
mTile.refreshState();
|
||||
mTestableLooper.processAllMessages();
|
||||
|
||||
assertActiveState();
|
||||
verify(mReduceBrightColorsController, times(1))
|
||||
.setReduceBrightColorsActivated(eq(true));
|
||||
}
|
||||
|
||||
private void assertActiveState() {
|
||||
assertEquals(Tile.STATE_ACTIVE, mTile.getState().state);
|
||||
assertEquals(mTile.getState().label.toString(),
|
||||
mContext.getString(R.string.quick_settings_reduce_bright_colors_label));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.qs.dagger.QSFlagsModule.RBC_AVAILABLE;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNull;
|
||||
@@ -47,6 +49,7 @@ import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.qs.AutoAddTracker;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
import com.android.systemui.qs.SecureSetting;
|
||||
import com.android.systemui.statusbar.policy.CastController;
|
||||
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
||||
@@ -67,6 +70,8 @@ import org.mockito.MockitoAnnotations;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Named;
|
||||
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@RunWithLooper
|
||||
@SmallTest
|
||||
@@ -88,9 +93,11 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
@Mock private DataSaverController mDataSaverController;
|
||||
@Mock private ManagedProfileController mManagedProfileController;
|
||||
@Mock private NightDisplayListener mNightDisplayListener;
|
||||
@Mock private ReduceBrightColorsController mReduceBrightColorsController;
|
||||
@Mock(answer = Answers.RETURNS_SELF)
|
||||
private AutoAddTracker.Builder mAutoAddTrackerBuilder;
|
||||
@Mock private Context mUserContext;
|
||||
private final boolean mIsReduceBrightColorsAvailable = true;
|
||||
|
||||
private AutoTileManager mAutoTileManager;
|
||||
private SecureSettings mSecureSettings;
|
||||
@@ -130,7 +137,9 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
DataSaverController dataSaverController,
|
||||
ManagedProfileController managedProfileController,
|
||||
NightDisplayListener nightDisplayListener,
|
||||
CastController castController) {
|
||||
CastController castController,
|
||||
ReduceBrightColorsController reduceBrightColorsController,
|
||||
@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {
|
||||
return new AutoTileManager(context, autoAddTrackerBuilder, mQsTileHost,
|
||||
Handler.createAsync(TestableLooper.get(this).getLooper()),
|
||||
mSecureSettings,
|
||||
@@ -138,13 +147,15 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
dataSaverController,
|
||||
managedProfileController,
|
||||
nightDisplayListener,
|
||||
castController);
|
||||
castController,
|
||||
reduceBrightColorsController,
|
||||
isReduceBrightColorsAvailable);
|
||||
}
|
||||
|
||||
private AutoTileManager createAutoTileManager(Context context) {
|
||||
return createAutoTileManager(context, mAutoAddTrackerBuilder, mHotspotController,
|
||||
mDataSaverController, mManagedProfileController, mNightDisplayListener,
|
||||
mCastController);
|
||||
mCastController, mReduceBrightColorsController, mIsReduceBrightColorsAvailable);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -157,9 +168,11 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
ManagedProfileController mPC = mock(ManagedProfileController.class);
|
||||
NightDisplayListener nDS = mock(NightDisplayListener.class);
|
||||
CastController cC = mock(CastController.class);
|
||||
ReduceBrightColorsController rBC = mock(ReduceBrightColorsController.class);
|
||||
|
||||
AutoTileManager manager =
|
||||
createAutoTileManager(mock(Context.class), builder, hC, dSC, mPC, nDS, cC);
|
||||
createAutoTileManager(mock(Context.class), builder, hC, dSC, mPC, nDS, cC, rBC,
|
||||
true);
|
||||
|
||||
verify(tracker, never()).initialize();
|
||||
verify(hC, never()).addCallback(any());
|
||||
@@ -167,6 +180,7 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
verify(mPC, never()).addCallback(any());
|
||||
verify(nDS, never()).setCallback(any());
|
||||
verify(cC, never()).addCallback(any());
|
||||
verify(rBC, never()).addCallback(any());
|
||||
assertNull(manager.getSecureSettingForKey(TEST_SETTING));
|
||||
assertNull(manager.getSecureSettingForKey(TEST_SETTING_COMPONENT));
|
||||
}
|
||||
@@ -207,6 +221,10 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
inOrderNightDisplay.verify(mNightDisplayListener).setCallback(isNotNull());
|
||||
}
|
||||
|
||||
InOrder inOrderReduceBrightColors = inOrder(mReduceBrightColorsController);
|
||||
inOrderReduceBrightColors.verify(mReduceBrightColorsController).removeCallback(any());
|
||||
inOrderReduceBrightColors.verify(mReduceBrightColorsController).addCallback(any());
|
||||
|
||||
InOrder inOrderCast = inOrder(mCastController);
|
||||
inOrderCast.verify(mCastController).removeCallback(any());
|
||||
inOrderCast.verify(mCastController).addCallback(any());
|
||||
@@ -247,6 +265,10 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
inOrderNightDisplay.verify(mNightDisplayListener).setCallback(isNotNull());
|
||||
}
|
||||
|
||||
InOrder inOrderReduceBrightColors = inOrder(mReduceBrightColorsController);
|
||||
inOrderReduceBrightColors.verify(mReduceBrightColorsController).removeCallback(any());
|
||||
inOrderReduceBrightColors.verify(mReduceBrightColorsController).addCallback(any());
|
||||
|
||||
InOrder inOrderCast = inOrder(mCastController);
|
||||
inOrderCast.verify(mCastController).removeCallback(any());
|
||||
inOrderCast.verify(mCastController, never()).addCallback(any());
|
||||
@@ -315,6 +337,18 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
verify(mQsTileHost, never()).addTile("night");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reduceBrightColorsTileAdded_whenActivated() {
|
||||
mAutoTileManager.mReduceBrightColorsCallback.onActivated(true);
|
||||
verify(mQsTileHost).addTile("reduce_brightness");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reduceBrightColorsTileNotAdded_whenDeactivated() {
|
||||
mAutoTileManager.mReduceBrightColorsCallback.onActivated(false);
|
||||
verify(mQsTileHost, never()).addTile("reduce_brightness");
|
||||
}
|
||||
|
||||
private static List<CastDevice> buildFakeCastDevice(boolean isCasting) {
|
||||
CastDevice cd = new CastDevice();
|
||||
cd.state = isCasting ? CastDevice.STATE_CONNECTED : CastDevice.STATE_DISCONNECTED;
|
||||
|
||||
Reference in New Issue
Block a user