Merge "Fixes to remove controls for tablet" into tm-qpr-dev am: 68fcdeeba6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21121382 Change-Id: Ic5cfd43cc517d0edb525d7a27f1c9506f495d29c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -19,11 +19,11 @@ package com.android.systemui.controls.dagger
|
||||
import android.content.Context
|
||||
import com.android.internal.widget.LockPatternUtils
|
||||
import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
|
||||
import com.android.systemui.controls.settings.ControlsSettingsRepository
|
||||
import com.android.systemui.controls.controller.ControlsController
|
||||
import com.android.systemui.controls.controller.ControlsTileResourceConfiguration
|
||||
import com.android.systemui.controls.controller.ControlsTileResourceConfigurationImpl
|
||||
import com.android.systemui.controls.management.ControlsListingController
|
||||
import com.android.systemui.controls.settings.ControlsSettingsRepository
|
||||
import com.android.systemui.controls.ui.ControlsUiController
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.settings.UserTracker
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.content.Context;
|
||||
import android.hardware.display.NightDisplayListener;
|
||||
import android.os.Handler;
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.media.dagger.MediaModule;
|
||||
import com.android.systemui.qs.AutoAddTracker;
|
||||
@@ -53,6 +54,7 @@ import dagger.Provides;
|
||||
public interface QSModule {
|
||||
|
||||
@Provides
|
||||
@SysUISingleton
|
||||
static AutoTileManager provideAutoTileManager(
|
||||
Context context,
|
||||
AutoAddTracker.Builder autoAddTrackerBuilder,
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.util.Log;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
import com.android.systemui.qs.AutoAddTracker;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
@@ -47,6 +48,7 @@ import com.android.systemui.util.UserAwareController;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.inject.Named;
|
||||
@@ -165,9 +167,10 @@ public class AutoTileManager implements UserAwareController {
|
||||
if (!mAutoTracker.isAdded(BRIGHTNESS) && mIsReduceBrightColorsAvailable) {
|
||||
mReduceBrightColorsController.addCallback(mReduceBrightColorsCallback);
|
||||
}
|
||||
if (!mAutoTracker.isAdded(DEVICE_CONTROLS)) {
|
||||
mDeviceControlsController.setCallback(mDeviceControlsCallback);
|
||||
}
|
||||
// We always want this callback, because if the feature stops being supported,
|
||||
// we want to remove the tile from AutoAddTracker. That way it will be re-added when the
|
||||
// feature is reenabled (similar to work tile).
|
||||
mDeviceControlsController.setCallback(mDeviceControlsCallback);
|
||||
if (!mAutoTracker.isAdded(WALLET)) {
|
||||
initWalletController();
|
||||
}
|
||||
@@ -323,14 +326,30 @@ public class AutoTileManager implements UserAwareController {
|
||||
@Override
|
||||
public void onControlsUpdate(@Nullable Integer position) {
|
||||
if (mAutoTracker.isAdded(DEVICE_CONTROLS)) return;
|
||||
if (position != null) {
|
||||
if (position != null && !hasTile(DEVICE_CONTROLS)) {
|
||||
mHost.addTile(DEVICE_CONTROLS, position);
|
||||
mAutoTracker.setTileAdded(DEVICE_CONTROLS);
|
||||
}
|
||||
mAutoTracker.setTileAdded(DEVICE_CONTROLS);
|
||||
mHandler.post(() -> mDeviceControlsController.removeCallback());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeControlsAutoTracker() {
|
||||
mAutoTracker.setTileRemoved(DEVICE_CONTROLS);
|
||||
}
|
||||
};
|
||||
|
||||
private boolean hasTile(String tileSpec) {
|
||||
if (tileSpec == null) return false;
|
||||
Collection<QSTile> tiles = mHost.getTiles();
|
||||
for (QSTile tile : tiles) {
|
||||
if (tileSpec.equals(tile.getTileSpec())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void initWalletController() {
|
||||
if (mAutoTracker.isAdded(WALLET)) return;
|
||||
Integer position = mWalletController.getWalletPosition();
|
||||
|
||||
@@ -25,6 +25,8 @@ interface DeviceControlsController {
|
||||
* If controls become available, initiate this callback with the desired position
|
||||
*/
|
||||
fun onControlsUpdate(position: Int?)
|
||||
|
||||
fun removeControlsAutoTracker()
|
||||
}
|
||||
|
||||
/** Add callback, supporting only a single callback at once */
|
||||
|
||||
@@ -21,16 +21,15 @@ import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.provider.Settings
|
||||
import android.util.Log
|
||||
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.controls.ControlsServiceInfo
|
||||
import com.android.systemui.controls.dagger.ControlsComponent
|
||||
import com.android.systemui.controls.management.ControlsListingController
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.settings.UserContextProvider
|
||||
import com.android.systemui.statusbar.phone.AutoTileManager
|
||||
import com.android.systemui.statusbar.policy.DeviceControlsController.Callback
|
||||
import com.android.systemui.util.settings.SecureSettings
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
@@ -87,6 +86,10 @@ public class DeviceControlsControllerImpl @Inject constructor(
|
||||
* incorrect.
|
||||
*/
|
||||
override fun setCallback(callback: Callback) {
|
||||
if (!controlsComponent.isEnabled()) {
|
||||
callback.removeControlsAutoTracker()
|
||||
return
|
||||
}
|
||||
// Treat any additional call as a reset before recalculating
|
||||
removeCallback()
|
||||
this.callback = callback
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.qs.dagger.QSFlagsModule.RBC_AVAILABLE;
|
||||
import static com.android.systemui.statusbar.phone.AutoTileManager.DEVICE_CONTROLS;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
@@ -50,6 +51,7 @@ import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.plugins.qs.QSTile;
|
||||
import com.android.systemui.qs.AutoAddTracker;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
||||
@@ -70,6 +72,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Answers;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
@@ -77,6 +80,7 @@ import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.Spy;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -542,6 +546,61 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
||||
verify(mAutoAddTracker, times(1)).setTileRemoved(eq("work"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddControlsTileIfNotPresent() {
|
||||
String spec = DEVICE_CONTROLS;
|
||||
when(mAutoAddTracker.isAdded(eq(spec))).thenReturn(false);
|
||||
when(mQsTileHost.getTiles()).thenReturn(new ArrayList<>());
|
||||
|
||||
mAutoTileManager.init();
|
||||
ArgumentCaptor<DeviceControlsController.Callback> captor =
|
||||
ArgumentCaptor.forClass(DeviceControlsController.Callback.class);
|
||||
|
||||
verify(mDeviceControlsController).setCallback(captor.capture());
|
||||
|
||||
captor.getValue().onControlsUpdate(3);
|
||||
verify(mQsTileHost).addTile(spec, 3);
|
||||
verify(mAutoAddTracker).setTileAdded(spec);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDontAddControlsTileIfPresent() {
|
||||
String spec = DEVICE_CONTROLS;
|
||||
when(mAutoAddTracker.isAdded(eq(spec))).thenReturn(false);
|
||||
when(mQsTileHost.getTiles()).thenReturn(new ArrayList<>());
|
||||
|
||||
mAutoTileManager.init();
|
||||
ArgumentCaptor<DeviceControlsController.Callback> captor =
|
||||
ArgumentCaptor.forClass(DeviceControlsController.Callback.class);
|
||||
|
||||
verify(mDeviceControlsController).setCallback(captor.capture());
|
||||
|
||||
captor.getValue().removeControlsAutoTracker();
|
||||
verify(mQsTileHost, never()).addTile(spec, 3);
|
||||
verify(mAutoAddTracker, never()).setTileAdded(spec);
|
||||
verify(mAutoAddTracker).setTileRemoved(spec);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveControlsTileFromTrackerWhenRequested() {
|
||||
String spec = "controls";
|
||||
when(mAutoAddTracker.isAdded(eq(spec))).thenReturn(true);
|
||||
QSTile mockTile = mock(QSTile.class);
|
||||
when(mockTile.getTileSpec()).thenReturn(spec);
|
||||
when(mQsTileHost.getTiles()).thenReturn(List.of(mockTile));
|
||||
|
||||
mAutoTileManager.init();
|
||||
ArgumentCaptor<DeviceControlsController.Callback> captor =
|
||||
ArgumentCaptor.forClass(DeviceControlsController.Callback.class);
|
||||
|
||||
verify(mDeviceControlsController).setCallback(captor.capture());
|
||||
|
||||
captor.getValue().onControlsUpdate(3);
|
||||
verify(mQsTileHost, never()).addTile(spec, 3);
|
||||
verify(mAutoAddTracker, never()).setTileAdded(spec);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEmptyArray_doesNotCrash() {
|
||||
mContext.getOrCreateTestableResources().addOverride(
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Compan
|
||||
import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED
|
||||
import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.QS_DEFAULT_POSITION
|
||||
import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.QS_PRIORITY_POSITION
|
||||
import com.android.systemui.util.mockito.mock
|
||||
import com.android.systemui.util.settings.SecureSettings
|
||||
|
||||
import java.util.Optional
|
||||
@@ -102,6 +103,8 @@ class DeviceControlsControllerImplTest : SysuiTestCase() {
|
||||
`when`(controlsComponent.getControlsListingController())
|
||||
.thenReturn(Optional.of(controlsListingController))
|
||||
|
||||
`when`(controlsComponent.isEnabled()).thenReturn(true)
|
||||
|
||||
controller = DeviceControlsControllerImpl(
|
||||
mContext,
|
||||
controlsComponent,
|
||||
@@ -168,4 +171,15 @@ class DeviceControlsControllerImplTest : SysuiTestCase() {
|
||||
seedCallback.value.accept(SeedResponse(TEST_PKG, true))
|
||||
verify(callback).onControlsUpdate(QS_DEFAULT_POSITION)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testControlsDisabledRemoveFromAutoTracker() {
|
||||
`when`(controlsComponent.isEnabled()).thenReturn(false)
|
||||
val callback: DeviceControlsController.Callback = mock()
|
||||
|
||||
controller.setCallback(callback)
|
||||
|
||||
verify(callback).removeControlsAutoTracker()
|
||||
verify(callback, never()).onControlsUpdate(anyInt())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user