Merge "Add restriction to BluetoothTile" into tm-dev am: 3a4774d2c6

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

Change-Id: Id45cbcc3c4f03967fb5d8363cabc1e56b13546cb
This commit is contained in:
TreeHugger Robot
2022-02-24 09:43:25 +00:00
committed by Automerger Merge Worker
4 changed files with 145 additions and 3 deletions

View File

@@ -116,7 +116,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
private String mTileSpec;
@Nullable
private EnforcedAdmin mEnforcedAdmin;
@VisibleForTesting
protected EnforcedAdmin mEnforcedAdmin;
private boolean mShowingDetail;
private int mIsFullQs;

View File

@@ -24,6 +24,7 @@ import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.os.UserManager;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.text.TextUtils;
@@ -114,6 +115,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_BLUETOOTH);
final boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING;
final boolean enabled = transientEnabling || mController.isBluetoothEnabled();
final boolean connected = mController.isBluetoothConnected();

View File

@@ -45,6 +45,7 @@ import android.content.Intent;
import android.metrics.LogMaker;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -58,6 +59,7 @@ import com.android.internal.logging.InstanceId;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.testing.UiEventLoggerFake;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.classifier.FalsingManagerFake;
import com.android.systemui.plugins.ActivityStarter;
@@ -101,6 +103,7 @@ public class QSTileImplTest extends SysuiTestCase {
private StatusBarStateController mStatusBarStateController;
@Mock
private ActivityStarter mActivityStarter;
private UiEventLoggerFake mUiEventLoggerFake;
private InstanceId mInstanceId = InstanceId.fakeInstanceId(5);
@@ -113,7 +116,7 @@ public class QSTileImplTest extends SysuiTestCase {
mTestableLooper = TestableLooper.get(this);
mUiEventLoggerFake = new UiEventLoggerFake();
when(mHost.indexOf(SPEC)).thenReturn(POSITION);
when(mHost.getContext()).thenReturn(mContext.getBaseContext());
when(mHost.getContext()).thenReturn(mContext);
when(mHost.getUiEventLogger()).thenReturn(mUiEventLoggerFake);
when(mHost.getNewInstanceId()).thenReturn(mInstanceId);
@@ -342,6 +345,22 @@ public class QSTileImplTest extends SysuiTestCase {
mTestableLooper.processAllMessages();
}
@Test
public void testClickOnDisabledByPolicyDoesntClickLaunchesIntent() {
String restriction = "RESTRICTION";
mTile.getState().disabledByPolicy = true;
EnforcedAdmin admin = EnforcedAdmin.createDefaultEnforcedAdminWithRestriction(restriction);
mTile.setEnforcedAdmin(admin);
mTile.click(null);
mTestableLooper.processAllMessages();
assertFalse(mTile.mClicked);
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
verify(mActivityStarter).postStartActivityDismissingKeyguard(captor.capture(), anyInt());
assertEquals(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS, captor.getValue().getAction());
}
private void assertEvent(UiEventLogger.UiEventEnum eventType,
UiEventLoggerFake.FakeUiEvent fakeEvent) {
assertEquals(eventType.getId(), fakeEvent.eventId);
@@ -400,6 +419,10 @@ public class QSTileImplTest extends SysuiTestCase {
getState().state = Tile.STATE_ACTIVE;
}
public void setEnforcedAdmin(EnforcedAdmin admin) {
mEnforcedAdmin = admin;
}
@Override
public BooleanState newTileState() {
return new BooleanState();
@@ -412,7 +435,6 @@ public class QSTileImplTest extends SysuiTestCase {
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
}
@Override

View File

@@ -0,0 +1,117 @@
package com.android.systemui.qs.tiles
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.os.UserManager
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.qs.QSTile
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.qs.QSTileHost
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.statusbar.policy.BluetoothController
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
@RunWith(AndroidTestingRunner::class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
class BluetoothTileTest : SysuiTestCase() {
@Mock
private lateinit var mockContext: Context
@Mock
private lateinit var qsLogger: QSLogger
@Mock
private lateinit var qsHost: QSTileHost
@Mock
private lateinit var metricsLogger: MetricsLogger
private val falsingManager = FalsingManagerFake()
@Mock
private lateinit var statusBarStateController: StatusBarStateController
@Mock
private lateinit var activityStarter: ActivityStarter
@Mock
private lateinit var bluetoothController: BluetoothController
private val uiEventLogger = UiEventLoggerFake()
private lateinit var testableLooper: TestableLooper
private lateinit var tile: FakeBluetoothTile
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
testableLooper = TestableLooper.get(this)
Mockito.`when`(qsHost.context).thenReturn(mockContext)
Mockito.`when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
tile = FakeBluetoothTile(
qsHost,
testableLooper.looper,
Handler(testableLooper.looper),
falsingManager,
metricsLogger,
statusBarStateController,
activityStarter,
qsLogger,
bluetoothController
)
tile.initialize()
testableLooper.processAllMessages()
}
@Test
fun testRestrictionChecked() {
tile.refreshState()
testableLooper.processAllMessages()
assertThat(tile.restrictionChecked).isEqualTo(UserManager.DISALLOW_BLUETOOTH)
}
private class FakeBluetoothTile(
qsTileHost: QSTileHost,
backgroundLooper: Looper,
mainHandler: Handler,
falsingManager: FalsingManager,
metricsLogger: MetricsLogger,
statusBarStateController: StatusBarStateController,
activityStarter: ActivityStarter,
qsLogger: QSLogger,
bluetoothController: BluetoothController
) : BluetoothTile(
qsTileHost,
backgroundLooper,
mainHandler,
falsingManager,
metricsLogger,
statusBarStateController,
activityStarter,
qsLogger,
bluetoothController
) {
var restrictionChecked: String? = null
override fun checkIfRestrictionEnforcedByAdminOnly(
state: QSTile.State?,
userRestriction: String?
) {
restrictionChecked = userRestriction
}
}
}