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

Commit 025380e2 authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "Add haptic feedback on the kg lock icon" into sc-dev

parents 0473e3a8 286813a7
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -28,6 +28,9 @@ import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.media.AudioAttributes;
import android.os.Process;
import android.os.Vibrator;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
@@ -43,6 +46,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.UdfpsController;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.FalsingManager;
@@ -67,6 +71,13 @@ import javax.inject.Inject;
 */
@StatusBarComponent.StatusBarScope
public class LockIconViewController extends ViewController<LockIconView> implements Dumpable {

    private static final AudioAttributes VIBRATION_SONIFICATION_ATTRIBUTES =
            new AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
                .build();

    @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    @NonNull private final KeyguardViewController mKeyguardViewController;
    @NonNull private final StatusBarStateController mStatusBarStateController;
@@ -83,6 +94,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
    @NonNull private final Drawable mLockIcon;
    @NonNull private final CharSequence mUnlockedLabel;
    @NonNull private final CharSequence mLockedLabel;
    @Nullable private final Vibrator mVibrator;

    private boolean mIsDozing;
    private boolean mIsBouncerShowing;
@@ -119,7 +131,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
            @NonNull DumpManager dumpManager,
            @NonNull AccessibilityManager accessibilityManager,
            @NonNull ConfigurationController configurationController,
            @NonNull @Main DelayableExecutor executor
            @NonNull @Main DelayableExecutor executor,
            @Nullable Vibrator vibrator
    ) {
        super(view);
        mStatusBarStateController = statusBarStateController;
@@ -131,6 +144,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
        mAccessibilityManager = accessibilityManager;
        mConfigurationController = configurationController;
        mExecutor = executor;
        mVibrator = vibrator;

        final Context context = view.getContext();
        mLockIcon = mView.getContext().getResources().getDrawable(
@@ -459,6 +473,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
                    // intercept all following touches until we see MotionEvent.ACTION_CANCEL UP or
                    // MotionEvent.ACTION_UP (see #onTouchEvent)
                    mDownDetected = true;
                    if (mVibrator != null) {
                        mVibrator.vibrate(
                                Process.myUid(),
                                getContext().getOpPackageName(),
                                UdfpsController.EFFECT_CLICK,
                                "lockIcon-onDown",
                                VIBRATION_SONIFICATION_ATTRIBUTES);
                    }
                    return true;
                }

@@ -467,6 +489,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
                        return;
                    }

                    if (mVibrator != null) {
                        mVibrator.vibrate(
                                Process.myUid(),
                                getContext().getOpPackageName(),
                                UdfpsController.EFFECT_CLICK,
                                "lockIcon-onLongPress",
                                VIBRATION_SONIFICATION_ATTRIBUTES);
                    }
                    onAffordanceClick();
                }

+7 −1
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.media.AudioAttributes;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.Trace;
@@ -569,7 +570,12 @@ public class UdfpsController implements DozeReceiver {
    @VisibleForTesting
    public void playStartHaptic() {
        if (mVibrator != null) {
            mVibrator.vibrate(EFFECT_CLICK, VIBRATION_SONIFICATION_ATTRIBUTES);
            mVibrator.vibrate(
                    Process.myUid(),
                    mContext.getOpPackageName(),
                    EFFECT_CLICK,
                    "udfps-onStart",
                    VIBRATION_SONIFICATION_ATTRIBUTES);
        }
    }

+8 −2
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -444,7 +446,11 @@ public class UdfpsControllerTest extends SysuiTestCase {
        moveEvent.recycle();

        // THEN click haptic is played
        verify(mVibrator).vibrate(mUdfpsController.EFFECT_CLICK,
                UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES);
        verify(mVibrator).vibrate(
                anyInt(),
                anyString(),
                eq(mUdfpsController.EFFECT_CLICK),
                eq("udfps-onStart"),
                eq(UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES));
    }
}