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

Commit b74401fb authored by Juan Sebastian Martinez's avatar Juan Sebastian Martinez Committed by Android (Google) Code Review
Browse files

Merge "Accoding to MSDL specs, the bouncer emergency button delivers keypress haptics." into main

parents a263bfc6 038769cf
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()
    }
}