Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3fdc6d4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: Id45cbcc3c4f03967fb5d8363cabc1e56b13546cb
parents 6c63dbea 3a4774d2
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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;


+2 −0
Original line number Original line Diff line number Diff line
@@ -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();
+24 −2
Original line number Original line Diff line number Diff line
@@ -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
+117 −0
Original line number Original line 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