Loading packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java +16 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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() { Loading Loading @@ -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; Loading @@ -112,6 +118,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { mMainExecutor = mainExecutor; mBackgroundExecutor = backgroundExecutor; mSelectedUserInteractor = selectedUserInteractor; mMSDLPlayer = msdlPlayer; } @Override Loading Loading @@ -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); } Loading Loading @@ -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, Loading @@ -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; Loading @@ -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}. */ Loading @@ -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); } } } packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading @@ -84,6 +93,7 @@ class EmergencyButtonControllerTest : SysuiTestCase() { mainExecutor, backgroundExecutor, mSelectedUserInteractor, msdlPlayer, ) context.setMockPackageManager(packageManager) Mockito.`when`(emergencyButton.context).thenReturn(context) Loading Loading @@ -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() } } Loading
packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java +16 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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() { Loading Loading @@ -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; Loading @@ -112,6 +118,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { mMainExecutor = mainExecutor; mBackgroundExecutor = backgroundExecutor; mSelectedUserInteractor = selectedUserInteractor; mMSDLPlayer = msdlPlayer; } @Override Loading Loading @@ -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); } Loading Loading @@ -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, Loading @@ -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; Loading @@ -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}. */ Loading @@ -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); } } }
packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading @@ -84,6 +93,7 @@ class EmergencyButtonControllerTest : SysuiTestCase() { mainExecutor, backgroundExecutor, mSelectedUserInteractor, msdlPlayer, ) context.setMockPackageManager(packageManager) Mockito.`when`(emergencyButton.context).thenReturn(context) Loading Loading @@ -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() } }