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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user