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

Commit ff0ed3c3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix issues with CTS in new QS" into main

parents 48aab91f 38509f65
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.systemui.qs.fgsManagerController
import com.android.systemui.qs.panels.domain.interactor.tileSquishinessInteractor
import com.android.systemui.qs.panels.ui.viewmodel.setConfigurationForMediaInRow
import com.android.systemui.res.R
import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.largeScreenHeaderHelper
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository
@@ -436,6 +437,28 @@ class QSFragmentComposeViewModelTest : AbstractQSFragmentComposeViewModelTest()
            }
        }

    @Test
    fun qsVisibleAndAnyShadeVisible() =
        with(kosmos) {
            testScope.testWithinLifecycle {
                underTest.isQsVisible = false
                fakeShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(false)
                assertThat(underTest.isQsVisibleAndAnyShadeExpanded).isFalse()

                underTest.isQsVisible = true
                fakeShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(false)
                assertThat(underTest.isQsVisibleAndAnyShadeExpanded).isFalse()

                underTest.isQsVisible = false
                fakeShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(true)
                assertThat(underTest.isQsVisibleAndAnyShadeExpanded).isFalse()

                underTest.isQsVisible = true
                fakeShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(true)
                assertThat(underTest.isQsVisibleAndAnyShadeExpanded).isTrue()
            }
        }

    private fun TestScope.setMediaState(state: MediaState) {
        with(kosmos) {
            val activeMedia = state == ACTIVE_MEDIA
+51 −3
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import android.content.ComponentName;
import android.os.PowerManager;
import android.os.UserHandle;
import android.os.Vibrator;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.view.HapticFeedbackConstants;

import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -45,6 +47,8 @@ import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.QSPanelController;
import com.android.systemui.qs.flags.QSComposeFragment;
import com.android.systemui.recents.ScreenPinningRequest;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.CameraLauncher;
@@ -54,15 +58,14 @@ import com.android.systemui.shade.ShadeHeaderController;
import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.shade.shared.flag.DualShade;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;

import dagger.Lazy;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -72,6 +75,8 @@ import org.mockito.stubbing.Answer;

import java.util.Optional;

import dagger.Lazy;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
@@ -105,6 +110,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
    @Mock private ActivityStarter mActivityStarter;
    @Mock private EmergencyGestureIntentFactory mEmergencyGestureIntentFactory;
    @Mock private KeyguardInteractor mKeyguardInteractor;
    @Mock private QSPanelController mQSPanelController;

    CentralSurfacesCommandQueueCallbacks mSbcqCallbacks;

@@ -150,6 +156,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
        when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(true);
        when(mRemoteInputQuickSettingsDisabler.adjustDisableFlags(anyInt()))
                .thenAnswer((Answer<Integer>) invocation -> invocation.getArgument(0));
        when(mCentralSurfaces.getQSPanelController()).thenReturn(mQSPanelController);
    }

    @Test
@@ -230,4 +237,45 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {

        verify(mQSHost).addTile(c, false);
    }

    @Test
    @DisableFlags(value = {QSComposeFragment.FLAG_NAME, DualShade.FLAG_NAME})
    public void clickQsTile_flagsDisabled_callsQSPanelController() {
        ComponentName c = new ComponentName("testpkg", "testcls");

        mSbcqCallbacks.clickTile(c);
        verify(mQSPanelController).clickTile(c);
    }

    @Test
    @DisableFlags(DualShade.FLAG_NAME)
    @EnableFlags(QSComposeFragment.FLAG_NAME)
    public void clickQsTile_onlyQSComposeFlag_callsQSHost() {
        ComponentName c = new ComponentName("testpkg", "testcls");

        mSbcqCallbacks.clickTile(c);
        verify(mQSPanelController, never()).clickTile(c);
        verify(mQSHost).clickTile(c);
    }

    @Test
    @EnableFlags(DualShade.FLAG_NAME)
    @DisableFlags(QSComposeFragment.FLAG_NAME)
    public void clickQsTile_onlyDualShadeFlag_callsQSHost() {
        ComponentName c = new ComponentName("testpkg", "testcls");

        mSbcqCallbacks.clickTile(c);
        verify(mQSPanelController, never()).clickTile(c);
        verify(mQSHost).clickTile(c);
    }

    @Test
    @EnableFlags(value = {QSComposeFragment.FLAG_NAME, DualShade.FLAG_NAME})
    public void clickQsTile_qsComposeAndDualShadeFlags_callsQSHost() {
        ComponentName c = new ComponentName("testpkg", "testcls");

        mSbcqCallbacks.clickTile(c);
        verify(mQSPanelController, never()).clickTile(c);
        verify(mQSHost).clickTile(c);
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ import android.content.Context;
import android.content.res.Resources;
import android.provider.Settings;

import androidx.annotation.NonNull;

import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.res.R;

@@ -79,6 +81,12 @@ public interface QSHost {
    void addTile(String spec, int requestPosition);
    void addTile(ComponentName tile);

    /**
     * Click on a tile. Used by external commands
     * @param tile the component name of the {@link android.service.quicksettings.TileService}
     */
    void clickTile(@NonNull ComponentName tile);

    /**
     * Adds a custom tile to the set of current tiles.
     * @param tile the component name of the {@link android.service.quicksettings.TileService}
+10 −1
Original line number Diff line number Diff line
@@ -19,11 +19,13 @@ package com.android.systemui.qs
import android.content.ComponentName
import android.content.Context
import androidx.annotation.GuardedBy
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.qs.QSTile
import com.android.systemui.qs.external.TileServiceRequestController
import com.android.systemui.qs.flags.QsInCompose
import com.android.systemui.qs.pipeline.data.repository.TileSpecRepository.Companion.POSITION_AT_END
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
import com.android.systemui.qs.pipeline.shared.QSPipelineFlagsRepository
@@ -32,7 +34,6 @@ import com.android.systemui.shade.ShadeDisplayAware
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import com.android.app.tracing.coroutines.launchTraced as launch

/**
 * Adapter to determine what real class to use for classes that depend on [QSHost].
@@ -135,4 +136,12 @@ constructor(
    override fun indexOf(tileSpec: String): Int {
        return specs.indexOf(tileSpec)
    }

    override fun clickTile(tile: ComponentName) {
        if (QsInCompose.isUnexpectedlyInLegacyMode()) {
            return
        }
        val spec = TileSpec.create(tile)
        interactor.currentTiles.value.firstOrNull { it.spec == spec }?.tile?.click(null)
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -248,7 +248,7 @@ constructor(
        PlatformTheme(isDarkTheme = true) {
            ProvideShortcutHelperIndication(interactionsConfig = interactionsConfig()) {
                AnimatedVisibility(
                    visible = viewModel.isQsVisible,
                    visible = viewModel.isQsVisibleAndAnyShadeExpanded,
                    modifier =
                        Modifier.graphicsLayer { alpha = viewModel.viewAlpha }
                            // Clipping before translation to match QSContainerImpl.onDraw
Loading