Loading packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; Loading packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +24 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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(); Loading @@ -412,7 +435,6 @@ public class QSTileImplTest extends SysuiTestCase { @Override protected void handleUpdateState(BooleanState state, Object arg) { } @Override Loading packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt 0 → 100644 +117 −0 Original line number Diff line number Diff line 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 } } } No newline at end of file Loading
packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +24 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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(); Loading @@ -412,7 +435,6 @@ public class QSTileImplTest extends SysuiTestCase { @Override protected void handleUpdateState(BooleanState state, Object arg) { } @Override Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt 0 → 100644 +117 −0 Original line number Diff line number Diff line 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 } } } No newline at end of file