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

Commit 3111a92f authored by Beverly Tai's avatar Beverly Tai Committed by Automerger Merge Worker
Browse files

Merge "Add haptic feedback on the kg lock icon" into sc-dev am: 025380e2 am: 35d2c1ff

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15301522

Change-Id: Iacffcc4dcfe48432712839a1f6f40298c9817a7d
parents 7be33a62 35d2c1ff
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));
    }
}