diff options
| author | 2024-09-03 14:58:39 -0700 | |
|---|---|---|
| committer | 2024-09-03 15:01:36 -0700 | |
| commit | 038769cfca7b60da9976c3b6702e8ff6579129bf (patch) | |
| tree | b1d43ce570a79162b3c834c5a2c07220a4770731 | |
| parent | a2e032650788f64be5147223d2bf8df0eba97c8d (diff) | |
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
| -rw-r--r-- | packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java | 19 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt | 19 |
2 files changed, 35 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java index 77338410642c..5e36539ecbec 100644 --- a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java +++ b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java @@ -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); } } } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt index 347605de6616..43a780357027 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt @@ -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() + } } |