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

Commit 038769cf authored by Juan Sebastian Martinez's avatar Juan Sebastian Martinez
Browse files

Accoding to MSDL specs, the bouncer emergency button delivers keypress

haptics.

The keypress return MSDL token is delivered when pressing the emergency
button of the bouncer.

Test: atest EmergencyButtonControllerTest
Flag: com.android.systemui.msdl_feedback
Bug: 361321945
Change-Id: I5616963ea85d84ac3bf3b3483ec6d8da716c7102
parent a2e03265
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.keyguard;

import static com.android.systemui.DejankUtils.whitelistIpcs;
import static com.android.systemui.Flags.msdlFeedback;

import android.annotation.SuppressLint;
import android.app.ActivityOptions;
@@ -46,6 +47,9 @@ import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
import com.android.systemui.util.EmergencyDialerConstants;
import com.android.systemui.util.ViewController;

import com.google.android.msdl.data.model.MSDLToken;
import com.google.android.msdl.domain.MSDLPlayer;

import java.util.concurrent.Executor;

import javax.inject.Inject;
@@ -67,6 +71,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
    private final Executor mMainExecutor;
    private final Executor mBackgroundExecutor;
    private final SelectedUserInteractor mSelectedUserInteractor;
    private final MSDLPlayer mMSDLPlayer;

    private final KeyguardUpdateMonitorCallback mInfoCallback =
            new KeyguardUpdateMonitorCallback() {
@@ -99,7 +104,8 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
            MetricsLogger metricsLogger,
            LockPatternUtils lockPatternUtils,
            Executor mainExecutor, Executor backgroundExecutor,
            SelectedUserInteractor selectedUserInteractor) {
            SelectedUserInteractor selectedUserInteractor,
            MSDLPlayer msdlPlayer) {
        super(view);
        mConfigurationController = configurationController;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -112,6 +118,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
        mMainExecutor = mainExecutor;
        mBackgroundExecutor = backgroundExecutor;
        mSelectedUserInteractor = selectedUserInteractor;
        mMSDLPlayer = msdlPlayer;
    }

    @Override
@@ -165,6 +172,9 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
    @SuppressLint("MissingPermission")
    public void takeEmergencyCallAction() {
        mMetricsLogger.action(MetricsEvent.ACTION_EMERGENCY_CALL);
        if (msdlFeedback()) {
            mMSDLPlayer.playToken(MSDLToken.KEYPRESS_RETURN, null);
        }
        if (mPowerManager != null) {
            mPowerManager.userActivity(SystemClock.uptimeMillis(), true);
        }
@@ -221,6 +231,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
        private final Executor mMainExecutor;
        private final Executor mBackgroundExecutor;
        private final SelectedUserInteractor mSelectedUserInteractor;
        private final MSDLPlayer mMSDLPlayer;

        @Inject
        public Factory(ConfigurationController configurationController,
@@ -233,7 +244,8 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
                LockPatternUtils lockPatternUtils,
                @Main Executor mainExecutor,
                @Background Executor backgroundExecutor,
                SelectedUserInteractor selectedUserInteractor) {
                SelectedUserInteractor selectedUserInteractor,
                MSDLPlayer msdlPlayer) {

            mConfigurationController = configurationController;
            mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -246,6 +258,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
            mMainExecutor = mainExecutor;
            mBackgroundExecutor = backgroundExecutor;
            mSelectedUserInteractor = selectedUserInteractor;
            mMSDLPlayer = msdlPlayer;
        }

        /** Construct an {@link com.android.keyguard.EmergencyButtonController}. */
@@ -253,7 +266,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> {
            return new EmergencyButtonController(view, mConfigurationController,
                    mKeyguardUpdateMonitor, mPowerManager, mActivityTaskManager, mShadeController,
                    mTelecomManager, mMetricsLogger, mLockPatternUtils, mMainExecutor,
                    mBackgroundExecutor, mSelectedUserInteractor);
                    mBackgroundExecutor, mSelectedUserInteractor, mMSDLPlayer);
        }
    }
}
+19 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.keyguard
import android.app.ActivityTaskManager
import android.content.pm.PackageManager
import android.os.PowerManager
import android.platform.test.annotations.EnableFlags
import android.telecom.TelecomManager
import android.telephony.TelephonyManager
import android.testing.TestableLooper
@@ -26,14 +27,20 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.logging.MetricsLogger
import com.android.internal.widget.LockPatternUtils
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.haptics.msdl.FakeMSDLPlayer
import com.android.systemui.haptics.msdl.msdlPlayer
import com.android.systemui.shade.ShadeController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.testKosmos
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.google.android.msdl.data.model.MSDLToken
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -64,6 +71,8 @@ class EmergencyButtonControllerTest : SysuiTestCase() {
    val fakeSystemClock = FakeSystemClock()
    val mainExecutor = FakeExecutor(fakeSystemClock)
    val backgroundExecutor = FakeExecutor(fakeSystemClock)
    private val kosmos = testKosmos()
    private val msdlPlayer: FakeMSDLPlayer = kosmos.msdlPlayer

    lateinit var underTest: EmergencyButtonController

@@ -84,6 +93,7 @@ class EmergencyButtonControllerTest : SysuiTestCase() {
                mainExecutor,
                backgroundExecutor,
                mSelectedUserInteractor,
                msdlPlayer,
            )
        context.setMockPackageManager(packageManager)
        Mockito.`when`(emergencyButton.context).thenReturn(context)
@@ -113,4 +123,13 @@ class EmergencyButtonControllerTest : SysuiTestCase() {
                /* isSecure= */ eq(true)
            )
    }

    @Test
    @EnableFlags(Flags.FLAG_MSDL_FEEDBACK)
    fun takeEmergencyCallAction_withMSDLFeedback_playsEmergencyButtonTokenAndNullAttributes() {
        underTest.takeEmergencyCallAction()

        assertThat(msdlPlayer.latestTokenPlayed).isEqualTo(MSDLToken.KEYPRESS_RETURN)
        assertThat(msdlPlayer.latestPropertiesPlayed).isNull()
    }
}