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

Commit c7c28eca authored by Juan Sebastian Martinez's avatar Juan Sebastian Martinez Committed by Automerger Merge Worker
Browse files

Merge "Adding performHapticFeedback to ShadeViewController." into udc-qpr-dev am: 005d9699

parents 886544ad 005d9699
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3198,6 +3198,11 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        }
    }

    @Override
    public void performHapticFeedback(int constant) {
        mVibratorHelper.performHapticFeedback(mView, constant);
    }

    private class ShadeHeadsUpTrackerImpl implements ShadeHeadsUpTracker {
        @Override
        public void addTrackingHeadsUpListener(Consumer<ExpandableNotificationRow> listener) {
+10 −0
Original line number Diff line number Diff line
@@ -248,6 +248,16 @@ interface ShadeViewController {
    /** Starts tracking a shade expansion gesture that originated from the status bar. */
    fun startTrackingExpansionFromStatusBar()

    /**
     * Performs haptic feedback from a view with a haptic feedback constant.
     *
     * The implementation of this method should use the [android.view.View.performHapticFeedback]
     * method with the provided constant.
     *
     * @param[constant] One of [android.view.HapticFeedbackConstants]
     */
    fun performHapticFeedback(constant: Int)

    // ******* End Keyguard Section *********

    /** Returns the ShadeHeadsUpTracker. */
+2 −0
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ class ShadeViewControllerEmptyImpl @Inject constructor() : ShadeViewController {
        return false
    }
    override fun startTrackingExpansionFromStatusBar() {}
    override fun performHapticFeedback(constant: Int) {}

    override val shadeHeadsUpTracker = ShadeHeadsUpTrackerEmptyImpl()
    override val shadeFoldAnimator = ShadeFoldAnimatorEmptyImpl()
}
+21 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.phone;

import static com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;

@@ -33,12 +34,15 @@ import android.os.VibrationEffect;
import android.os.Vibrator;
import android.util.Log;
import android.util.Slog;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.WindowInsets;
import android.view.WindowInsets.Type.InsetsType;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;

import androidx.annotation.VisibleForTesting;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.statusbar.LetterboxDetails;
@@ -49,6 +53,7 @@ import com.android.systemui.assist.AssistManager;
import com.android.systemui.camera.CameraIntents;
import com.android.systemui.dagger.qualifiers.DisplayId;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.QSHost;
@@ -107,6 +112,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
    private final Lazy<CameraLauncher> mCameraLauncherLazy;
    private final QuickSettingsController mQsController;
    private final QSHost mQSHost;
    private final FeatureFlags mFeatureFlags;

    private static final VibrationAttributes HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES =
            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_HARDWARE_FEEDBACK);
@@ -144,7 +150,8 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
            Lazy<CameraLauncher> cameraLauncherLazy,
            UserTracker userTracker,
            QSHost qsHost,
            ActivityStarter activityStarter) {
            ActivityStarter activityStarter,
            FeatureFlags featureFlags) {
        mCentralSurfaces = centralSurfaces;
        mQsController = quickSettingsController;
        mContext = context;
@@ -171,6 +178,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
        mCameraLauncherLazy = cameraLauncherLazy;
        mUserTracker = userTracker;
        mQSHost = qsHost;
        mFeatureFlags = featureFlags;

        mVibrateOnOpening = resources.getBoolean(R.bool.config_vibrateOnIconAnimation);
        mCameraLaunchGestureVibrationEffect = getCameraGestureVibrationEffect(
@@ -314,7 +322,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
            mMetricsLogger.action(MetricsEvent.ACTION_SYSTEM_NAVIGATION_KEY_DOWN);
            if (mShadeViewController.isFullyCollapsed()) {
                if (mVibrateOnOpening) {
                    mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK);
                    vibrateOnNavigationKeyDown();
                }
                mShadeViewController.expand(true /* animate */);
                mNotificationStackScrollLayoutController.setWillExpand(true);
@@ -587,4 +595,15 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
        }
        return VibrationEffect.createWaveform(timings, /* repeat= */ -1);
    }

    @VisibleForTesting
    void vibrateOnNavigationKeyDown() {
        if (mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) {
            mShadeViewController.performHapticFeedback(
                    HapticFeedbackConstants.GESTURE_START
            );
        } else {
            mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK);
        }
    }
}
+28 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.statusbar.phone;

import static android.view.Display.DEFAULT_DISPLAY;

import static com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
@@ -29,8 +31,10 @@ import android.app.ActivityManager;
import android.app.StatusBarManager;
import android.os.PowerManager;
import android.os.UserHandle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.testing.AndroidTestingRunner;
import android.view.HapticFeedbackConstants;
import android.view.WindowInsets;

import androidx.test.filters.SmallTest;
@@ -42,6 +46,7 @@ import com.android.internal.view.AppearanceRegion;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.QSHost;
@@ -98,6 +103,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
    @Mock private UserTracker mUserTracker;
    @Mock private QSHost mQSHost;
    @Mock private ActivityStarter mActivityStarter;
    private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();

    CentralSurfacesCommandQueueCallbacks mSbcqCallbacks;

@@ -134,7 +140,8 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
                mCameraLauncherLazy,
                mUserTracker,
                mQSHost,
                mActivityStarter);
                mActivityStarter,
                mFeatureFlags);

        when(mUserTracker.getUserHandle()).thenReturn(
                UserHandle.of(ActivityManager.getCurrentUser()));
@@ -241,4 +248,24 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {

        verifyZeroInteractions(mSystemBarAttributesListener);
    }

    @Test
    public void vibrateOnNavigationKeyDown_oneWayHapticsDisabled_usesVibrate() {
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false);

        mSbcqCallbacks.vibrateOnNavigationKeyDown();

        verify(mVibratorHelper).vibrate(VibrationEffect.EFFECT_TICK);
    }

    @Test
    public void vibrateOnNavigationKeyDown_oneWayHapticsEnabled_usesPerformHapticFeedback() {
        mFeatureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true);

        mSbcqCallbacks.vibrateOnNavigationKeyDown();

        verify(mShadeViewController).performHapticFeedback(
                HapticFeedbackConstants.GESTURE_START
        );
    }
}