Merge "Add restriction to BluetoothTile" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3a4774d2c6
@@ -116,7 +116,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
|
|||||||
|
|
||||||
private String mTileSpec;
|
private String mTileSpec;
|
||||||
@Nullable
|
@Nullable
|
||||||
private EnforcedAdmin mEnforcedAdmin;
|
@VisibleForTesting
|
||||||
|
protected EnforcedAdmin mEnforcedAdmin;
|
||||||
private boolean mShowingDetail;
|
private boolean mShowingDetail;
|
||||||
private int mIsFullQs;
|
private int mIsFullQs;
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.content.Intent;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.service.quicksettings.Tile;
|
import android.service.quicksettings.Tile;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -114,6 +115,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleUpdateState(BooleanState state, Object arg) {
|
protected void handleUpdateState(BooleanState state, Object arg) {
|
||||||
|
checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_BLUETOOTH);
|
||||||
final boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING;
|
final boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING;
|
||||||
final boolean enabled = transientEnabling || mController.isBluetoothEnabled();
|
final boolean enabled = transientEnabling || mController.isBluetoothEnabled();
|
||||||
final boolean connected = mController.isBluetoothConnected();
|
final boolean connected = mController.isBluetoothConnected();
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import android.content.Intent;
|
|||||||
import android.metrics.LogMaker;
|
import android.metrics.LogMaker;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.service.quicksettings.Tile;
|
import android.service.quicksettings.Tile;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper;
|
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.MetricsLogger;
|
||||||
import com.android.internal.logging.UiEventLogger;
|
import com.android.internal.logging.UiEventLogger;
|
||||||
import com.android.internal.logging.testing.UiEventLoggerFake;
|
import com.android.internal.logging.testing.UiEventLoggerFake;
|
||||||
|
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.classifier.FalsingManagerFake;
|
import com.android.systemui.classifier.FalsingManagerFake;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
@@ -101,6 +103,7 @@ public class QSTileImplTest extends SysuiTestCase {
|
|||||||
private StatusBarStateController mStatusBarStateController;
|
private StatusBarStateController mStatusBarStateController;
|
||||||
@Mock
|
@Mock
|
||||||
private ActivityStarter mActivityStarter;
|
private ActivityStarter mActivityStarter;
|
||||||
|
|
||||||
private UiEventLoggerFake mUiEventLoggerFake;
|
private UiEventLoggerFake mUiEventLoggerFake;
|
||||||
private InstanceId mInstanceId = InstanceId.fakeInstanceId(5);
|
private InstanceId mInstanceId = InstanceId.fakeInstanceId(5);
|
||||||
|
|
||||||
@@ -113,7 +116,7 @@ public class QSTileImplTest extends SysuiTestCase {
|
|||||||
mTestableLooper = TestableLooper.get(this);
|
mTestableLooper = TestableLooper.get(this);
|
||||||
mUiEventLoggerFake = new UiEventLoggerFake();
|
mUiEventLoggerFake = new UiEventLoggerFake();
|
||||||
when(mHost.indexOf(SPEC)).thenReturn(POSITION);
|
when(mHost.indexOf(SPEC)).thenReturn(POSITION);
|
||||||
when(mHost.getContext()).thenReturn(mContext.getBaseContext());
|
when(mHost.getContext()).thenReturn(mContext);
|
||||||
when(mHost.getUiEventLogger()).thenReturn(mUiEventLoggerFake);
|
when(mHost.getUiEventLogger()).thenReturn(mUiEventLoggerFake);
|
||||||
when(mHost.getNewInstanceId()).thenReturn(mInstanceId);
|
when(mHost.getNewInstanceId()).thenReturn(mInstanceId);
|
||||||
|
|
||||||
@@ -342,6 +345,22 @@ public class QSTileImplTest extends SysuiTestCase {
|
|||||||
mTestableLooper.processAllMessages();
|
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,
|
private void assertEvent(UiEventLogger.UiEventEnum eventType,
|
||||||
UiEventLoggerFake.FakeUiEvent fakeEvent) {
|
UiEventLoggerFake.FakeUiEvent fakeEvent) {
|
||||||
assertEquals(eventType.getId(), fakeEvent.eventId);
|
assertEquals(eventType.getId(), fakeEvent.eventId);
|
||||||
@@ -400,6 +419,10 @@ public class QSTileImplTest extends SysuiTestCase {
|
|||||||
getState().state = Tile.STATE_ACTIVE;
|
getState().state = Tile.STATE_ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setEnforcedAdmin(EnforcedAdmin admin) {
|
||||||
|
mEnforcedAdmin = admin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BooleanState newTileState() {
|
public BooleanState newTileState() {
|
||||||
return new BooleanState();
|
return new BooleanState();
|
||||||
@@ -412,7 +435,6 @@ public class QSTileImplTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleUpdateState(BooleanState state, Object arg) {
|
protected void handleUpdateState(BooleanState state, Object arg) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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