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

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

Merge "Remove android.os.vibrator.fix_external_vibration_system_update_aware" into main

parents d45997fb af3eb181
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -115,16 +115,6 @@ flag {
    }
}

flag {
    namespace: "haptics"
    name: "fix_external_vibration_system_update_aware"
    description: "Fix the audio-coupled haptics handling of system updates."
    bug: "372241975"
    metadata {
      purpose: PURPOSE_BUGFIX
    }
}

flag {
    namespace: "haptics"
    name: "remove_hidl_support"
+5 −21
Original line number Diff line number Diff line
@@ -1024,11 +1024,6 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                return;
            }

            if (!Flags.fixExternalVibrationSystemUpdateAware()
                    && (mCurrentSession instanceof ExternalVibrationSession)) {
                return;
            }

            Status ignoreStatus = shouldIgnoreVibrationLocked(mCurrentSession.getCallerInfo());
            if (inputDevicesChanged || (ignoreStatus != null)) {
                if (DEBUG) {
@@ -2352,23 +2347,12 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
    @GuardedBy("mLock")
    private void maybeClearCurrentAndNextSessionsLocked(
            Predicate<VibrationSession> shouldEndSessionPredicate, Status endStatus) {
        if (Flags.fixExternalVibrationSystemUpdateAware()) {
        if (shouldEndSessionPredicate.test(mNextSession)) {
            clearNextSessionLocked(endStatus);
        }
        if (shouldEndSessionPredicate.test(mCurrentSession)) {
            mCurrentSession.requestEnd(endStatus);
        }
        } else {
            if (!(mNextSession instanceof ExternalVibrationSession)
                    && shouldEndSessionPredicate.test(mNextSession)) {
                clearNextSessionLocked(endStatus);
            }
            if (!(mCurrentSession instanceof ExternalVibrationSession)
                    && shouldEndSessionPredicate.test(mCurrentSession)) {
                mCurrentSession.requestEnd(endStatus);
            }
        }
    }

    /**
+0 −118
Original line number Diff line number Diff line
@@ -2772,31 +2772,6 @@ public class VibratorManagerServiceTest {
    }

    @Test
    @DisableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_legacyDeniedAppOps_doNotCancelVibration() throws Throwable {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
        VibratorManagerService service = createSystemReadyService();

        IExternalVibrationController externalVibrationControllerMock =
                mock(IExternalVibrationController.class);
        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
                AUDIO_ALARM_ATTRS, externalVibrationControllerMock, mock(IBinder.class));
        ExternalVibrationScale scale = mExternalVibratorService.onExternalVibrationStart(
                externalVibration);

        assertThat(scale.scaleLevel).isNotEqualTo(ExternalVibrationScale.ScaleLevel.SCALE_MUTE);

        when(mAppOpsManagerMock.checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
                eq(AudioAttributes.USAGE_ALARM), anyInt(), anyString()))
                .thenReturn(AppOpsManager.MODE_IGNORED);
        service.mAppOpsChangeListener.onOpChanged(AppOpsManager.OP_VIBRATE, null);

        verify(externalVibrationControllerMock, never()).mute();
    }

    @Test
    @EnableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_thenDeniedAppOps_cancelVibration() throws Throwable {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
@@ -2820,28 +2795,6 @@ public class VibratorManagerServiceTest {
    }

    @Test
    @DisableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_legacyPowerModeChanges_doNotCancelVibration() throws Exception {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
        createSystemReadyService();

        IExternalVibrationController externalVibrationControllerMock =
                mock(IExternalVibrationController.class);
        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
                AUDIO_HAPTIC_FEEDBACK_ATTRS, externalVibrationControllerMock, mock(IBinder.class));
        ExternalVibrationScale scale = mExternalVibratorService.onExternalVibrationStart(
                externalVibration);

        assertThat(scale.scaleLevel).isNotEqualTo(ExternalVibrationScale.ScaleLevel.SCALE_MUTE);

        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);

        verify(externalVibrationControllerMock, never()).mute();
    }

    @Test
    @EnableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_thenPowerModeChanges_cancelVibration() throws Exception {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
@@ -2862,30 +2815,6 @@ public class VibratorManagerServiceTest {
    }

    @Test
    @DisableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_legacySettingsChange_doNotCancelVibration() throws Exception {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
        VibratorManagerService service = createSystemReadyService();

        IExternalVibrationController externalVibrationControllerMock =
                mock(IExternalVibrationController.class);
        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
                AUDIO_ALARM_ATTRS, externalVibrationControllerMock, mock(IBinder.class));
        ExternalVibrationScale scale = mExternalVibratorService.onExternalVibrationStart(
                externalVibration);

        assertThat(scale.scaleLevel).isNotEqualTo(ExternalVibrationScale.ScaleLevel.SCALE_MUTE);

        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
        service.mVibrationSettings.mSettingObserver.onChange(false);
        service.updateServiceState();

        verify(externalVibrationControllerMock, never()).mute();
    }

    @Test
    @EnableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_thenSettingsChange_cancelVibration() throws Exception {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
@@ -2908,28 +2837,6 @@ public class VibratorManagerServiceTest {
    }

    @Test
    @DisableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_legacyScreenTurnsOff_doNotCancelVibration() throws Exception {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
        VibratorManagerService service = createSystemReadyService();

        IExternalVibrationController externalVibrationControllerMock =
                mock(IExternalVibrationController.class);
        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
                AUDIO_ALARM_ATTRS, externalVibrationControllerMock, mock(IBinder.class));
        ExternalVibrationScale scale = mExternalVibratorService.onExternalVibrationStart(
                externalVibration);

        assertThat(scale.scaleLevel).isNotEqualTo(ExternalVibrationScale.ScaleLevel.SCALE_MUTE);

        service.mIntentReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_SCREEN_OFF));

        verify(externalVibrationControllerMock, never()).mute();
    }

    @Test
    @EnableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_thenScreenTurnsOff_cancelVibration() throws Exception {
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
@@ -2950,31 +2857,6 @@ public class VibratorManagerServiceTest {
    }

    @Test
    @DisableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_legacyFgUserRequestsMute_doNotCancelVibration()
            throws Exception {
        assumeTrue(UserManagerInternal.shouldShowNotificationForBackgroundUserSounds());
        mockVibrators(1);
        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
        VibratorManagerService service = createSystemReadyService();

        IExternalVibrationController externalVibrationControllerMock =
                mock(IExternalVibrationController.class);
        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
                AUDIO_ALARM_ATTRS, externalVibrationControllerMock, mock(IBinder.class));
        ExternalVibrationScale scale = mExternalVibratorService.onExternalVibrationStart(
                externalVibration);

        assertThat(scale.scaleLevel).isNotEqualTo(ExternalVibrationScale.ScaleLevel.SCALE_MUTE);

        service.mIntentReceiver.onReceive(mContextSpy, new Intent(
                BackgroundUserSoundNotifier.ACTION_MUTE_SOUND));

        verify(externalVibrationControllerMock, never()).mute();
    }

    @Test
    @EnableFlags(android.os.vibrator.Flags.FLAG_FIX_EXTERNAL_VIBRATION_SYSTEM_UPDATE_AWARE)
    public void onExternalVibration_thenFgUserRequestsMute_cancelVibration() throws Exception {
        assumeTrue(UserManagerInternal.shouldShowNotificationForBackgroundUserSounds());
        mockVibrators(1);