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

Commit 32dbc896 authored by Juan Sebastian Martinez's avatar Juan Sebastian Martinez
Browse files

Revert "Using View.performHapticFeedback on Volume Dialog Impl when the silent...

Revert "Using View.performHapticFeedback on Volume Dialog Impl when the silent and vibrate-only icons are pressed"

This reverts commit b8e689d1.
Reason for revert: Reverting to fix b/307872745

Test: atest SystemUITests:VolumeDialogImplTest
Bug: 307872745
Flag: NONE

Change-Id: I14b0c63d9ad54446ee03b21d01514307a39d3f99
parent a4dc2160
Loading
Loading
Loading
Loading
+2 −28
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;

import static com.android.internal.jank.InteractionJankMonitor.CUJ_VOLUME_CONTROL;
import static com.android.internal.jank.InteractionJankMonitor.Configuration.Builder;
import static com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION;
import static com.android.systemui.volume.Events.DISMISS_REASON_POSTURE_CHANGED;
import static com.android.systemui.volume.Events.DISMISS_REASON_SETTINGS_CLICKED;

@@ -83,7 +82,6 @@ import android.util.Slog;
import android.util.SparseBooleanArray;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.AccessibilityDelegate;
@@ -120,7 +118,6 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dumpable;
import com.android.systemui.Prefs;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.VolumeDialog;
@@ -304,7 +301,6 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
    private final DevicePostureController mDevicePostureController;
    private @DevicePostureController.DevicePostureInt int mDevicePosture;
    private int mOrientation;
    private final FeatureFlags mFeatureFlags;
    private final Lazy<SecureSettings> mSecureSettings;
    private int mDialogTimeoutMillis;

@@ -323,9 +319,7 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
            DevicePostureController devicePostureController,
            Looper looper,
            DumpManager dumpManager,
            FeatureFlags featureFlags,
            Lazy<SecureSettings> secureSettings) {
        mFeatureFlags = featureFlags;
        mContext =
                new ContextThemeWrapper(context, R.style.volume_dialog_theme);
        mHandler = new H(looper);
@@ -1373,14 +1367,12 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,

    private void provideTouchFeedbackH(int newRingerMode) {
        VibrationEffect effect = null;
        int hapticConstant = HapticFeedbackConstants.NO_HAPTICS;
        switch (newRingerMode) {
            case RINGER_MODE_NORMAL:
                mController.scheduleTouchFeedback();
                break;
            case RINGER_MODE_SILENT:
                effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
                hapticConstant = HapticFeedbackConstants.TOGGLE_OFF;
                break;
            case RINGER_MODE_VIBRATE:
                // Feedback handled by onStateChange, for feedback both when user toggles
@@ -1388,11 +1380,8 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
                break;
            default:
                effect = VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK);
                hapticConstant = HapticFeedbackConstants.TOGGLE_ON;
        }
        if (mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) {
            mDialogView.performHapticFeedback(hapticConstant);
        } else if (effect != null) {
        if (effect != null) {
            mController.vibrate(effect);
        }
    }
@@ -1820,23 +1809,8 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
                && mState.ringerModeInternal != -1
                && mState.ringerModeInternal != state.ringerModeInternal
                && state.ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE) {

            if (mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) {
                if (mShowing) {
                    // The dialog view is responsible for triggering haptics in the oneway API
                    mDialogView.performHapticFeedback(HapticFeedbackConstants.TOGGLE_ON);
                }
                /*
                TODO(b/290642122): If the dialog is not showing, we have the case where haptics is
                enabled by dragging the volume slider of Settings to a value of 0. This must be
                handled by view Slices in Settings whilst using the performHapticFeedback API.
                 */

            } else {
                // Old behavior only active if the oneway API is not used.
            mController.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK));
        }
        }
        mState = state;
        mDynamic.clear();
        // add any new dynamic rows
+0 −3
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.os.Looper;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.VolumeDialog;
@@ -65,7 +64,6 @@ public interface VolumeModule {
            CsdWarningDialog.Factory csdFactory,
            DevicePostureController devicePostureController,
            DumpManager dumpManager,
            FeatureFlags featureFlags,
            Lazy<SecureSettings> secureSettings) {
        VolumeDialogImpl impl = new VolumeDialogImpl(
                context,
@@ -82,7 +80,6 @@ public interface VolumeModule {
                devicePostureController,
                Looper.getMainLooper(),
                dumpManager,
                featureFlags,
                secureSettings);
        impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false);
        impl.setAutomute(true);
+1 −105
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.media.AudioManager.RINGER_MODE_NORMAL;
import static android.media.AudioManager.RINGER_MODE_SILENT;
import static android.media.AudioManager.RINGER_MODE_VIBRATE;

import static com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION;
import static com.android.systemui.volume.Events.DISMISS_REASON_UNKNOWN;
import static com.android.systemui.volume.Events.SHOW_REASON_UNKNOWN;
import static com.android.systemui.volume.VolumeDialogControllerImpl.STREAMS;
@@ -68,7 +67,6 @@ import com.android.systemui.Prefs;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.AnimatorTestRule;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.VolumeDialogController;
@@ -149,7 +147,6 @@ public class VolumeDialogImplTest extends SysuiTestCase {
        }
    };

    private FakeFeatureFlags mFeatureFlags;
    private int mLongestHideShowAnimationDuration = 250;
    private FakeSettings mSecureSettings;

@@ -179,8 +176,6 @@ public class VolumeDialogImplTest extends SysuiTestCase {

        mConfigurationController = new FakeConfigurationController();

        mFeatureFlags = new FakeFeatureFlags();

        mSecureSettings = new FakeSettings();

        when(mLazySecureSettings.get()).thenReturn(mSecureSettings);
@@ -200,7 +195,6 @@ public class VolumeDialogImplTest extends SysuiTestCase {
                mPostureController,
                mTestableLooper.getLooper(),
                mDumpManager,
                mFeatureFlags,
                mLazySecureSettings);
        mDialog.init(0, null);
        State state = createShellState();
@@ -328,7 +322,6 @@ public class VolumeDialogImplTest extends SysuiTestCase {

    @Test
    public void testVibrateOnRingerChangedToVibrate() {
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false);
        final State initialSilentState = new State();
        initialSilentState.ringerModeInternal = AudioManager.RINGER_MODE_SILENT;

@@ -348,31 +341,8 @@ public class VolumeDialogImplTest extends SysuiTestCase {
        verify(mVolumeDialogController).vibrate(any());
    }

    @Test
    public void testControllerDoesNotVibrateOnRingerChangedToVibrate_OnewayAPI_On() {
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);
        final State initialSilentState = new State();
        initialSilentState.ringerModeInternal = AudioManager.RINGER_MODE_SILENT;

        final State vibrateState = new State();
        vibrateState.ringerModeInternal = AudioManager.RINGER_MODE_VIBRATE;

        // change ringer to silent
        mDialog.onStateChangedH(initialSilentState);

        // expected: shouldn't call vibrate yet
        verify(mVolumeDialogController, never()).vibrate(any());

        // changed ringer to vibrate
        mDialog.onStateChangedH(vibrateState);

        // expected: vibrate method of controller is not used
        verify(mVolumeDialogController, never()).vibrate(any());
    }

    @Test
    public void testNoVibrateOnRingerInitialization() {
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = -1;

@@ -389,30 +359,10 @@ public class VolumeDialogImplTest extends SysuiTestCase {
        verify(mVolumeDialogController, never()).vibrate(any());
    }

    @Test
    public void testControllerDoesNotVibrateOnRingerInitialization_OnewayAPI_On() {
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = -1;

        // ringer not initialized yet:
        mDialog.onStateChangedH(initialUnsetState);

        final State vibrateState = new State();
        vibrateState.ringerModeInternal = AudioManager.RINGER_MODE_VIBRATE;

        // changed ringer to vibrate
        mDialog.onStateChangedH(vibrateState);

        // shouldn't call vibrate on the controller either
        verify(mVolumeDialogController, never()).vibrate(any());
    }

    @Test
    public void testSelectVibrateFromDrawer() {
        assumeHasDrawer();

        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = AudioManager.RINGER_MODE_NORMAL;
        mDialog.onStateChangedH(initialUnsetState);
@@ -425,28 +375,10 @@ public class VolumeDialogImplTest extends SysuiTestCase {
                AudioManager.RINGER_MODE_VIBRATE, false);
    }

    @Test
    public void testSelectVibrateFromDrawer_OnewayAPI_On() {
        assumeHasDrawer();

        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = RINGER_MODE_NORMAL;
        mDialog.onStateChangedH(initialUnsetState);

        mActiveRinger.performClick();
        mDrawerVibrate.performClick();

        // Make sure we've actually changed the ringer mode.
        verify(mVolumeDialogController, times(1)).setRingerMode(
                AudioManager.RINGER_MODE_VIBRATE, false);
    }

    @Test
    public void testSelectMuteFromDrawer() {
        assumeHasDrawer();

        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = AudioManager.RINGER_MODE_NORMAL;
        mDialog.onStateChangedH(initialUnsetState);
@@ -459,28 +391,10 @@ public class VolumeDialogImplTest extends SysuiTestCase {
                AudioManager.RINGER_MODE_SILENT, false);
    }

    @Test
    public void testSelectMuteFromDrawer_OnewayAPI_On() {
        assumeHasDrawer();

        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = RINGER_MODE_NORMAL;
        mDialog.onStateChangedH(initialUnsetState);

        mActiveRinger.performClick();
        mDrawerMute.performClick();

        // Make sure we've actually changed the ringer mode.
        verify(mVolumeDialogController, times(1)).setRingerMode(
                AudioManager.RINGER_MODE_SILENT, false);
    }

    @Test
    public void testSelectNormalFromDrawer() {
        assumeHasDrawer();

        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = AudioManager.RINGER_MODE_VIBRATE;
        mDialog.onStateChangedH(initialUnsetState);
@@ -493,23 +407,6 @@ public class VolumeDialogImplTest extends SysuiTestCase {
                AudioManager.RINGER_MODE_NORMAL, false);
    }

    @Test
    public void testSelectNormalFromDrawer_OnewayAPI_On() {
        assumeHasDrawer();

        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);
        final State initialUnsetState = new State();
        initialUnsetState.ringerModeInternal = AudioManager.RINGER_MODE_VIBRATE;
        mDialog.onStateChangedH(initialUnsetState);

        mActiveRinger.performClick();
        mDrawerNormal.performClick();

        // Make sure we've actually changed the ringer mode.
        verify(mVolumeDialogController, times(1)).setRingerMode(
                RINGER_MODE_NORMAL, false);
    }

    /**
     * Ideally we would look at the ringer ImageView and check its assigned drawable id, but that
     * API does not exist. So we do the next best thing; we check the cached icon id.
@@ -682,7 +579,6 @@ public class VolumeDialogImplTest extends SysuiTestCase {

        State state = createShellState();
        state.ringerModeInternal = ringerMode;
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);
        mDialog.onStateChangedH(state);

        mDialog.show(SHOW_REASON_UNKNOWN);