diff --git a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java index 8ec66e4bcc301..45fc7563a5c38 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java +++ b/packages/SystemUI/src/com/android/systemui/volume/CaptionsToggleImageButton.java @@ -17,7 +17,10 @@ package com.android.systemui.volume; import android.content.Context; +import android.os.Handler; import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; import com.android.keyguard.AlphaOptimizedImageButton; import com.android.systemui.R; @@ -27,13 +30,33 @@ public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { private static final int[] OPTED_OUT_STATE = new int[] { R.attr.optedOut }; + private ConfirmedTapListener mConfirmedTapListener; private boolean mComponentEnabled = false; private boolean mOptedOut = false; + private GestureDetector mGestureDetector; + private GestureDetector.SimpleOnGestureListener mGestureListener = + new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if (mConfirmedTapListener != null) { + mConfirmedTapListener.onConfirmedTap(); + return true; + } + return false; + } + }; + public CaptionsToggleImageButton(Context context, AttributeSet attrs) { super(context, attrs); } + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mGestureDetector != null) mGestureDetector.onTouchEvent(event); + return super.onTouchEvent(event); + } + @Override public int[] onCreateDrawableState(int extraSpace) { int[] state = super.onCreateDrawableState(extraSpace + 1); @@ -64,4 +87,17 @@ public class CaptionsToggleImageButton extends AlphaOptimizedImageButton { boolean getOptedOut() { return this.mOptedOut; } + + void setOnConfirmedTapListener(ConfirmedTapListener listener, Handler handler) { + mConfirmedTapListener = listener; + + if (mGestureDetector == null) { + this.mGestureDetector = new GestureDetector(getContext(), mGestureListener, handler); + } + } + + /** Listener for confirmed taps rather than normal on click listener. */ + interface ConfirmedTapListener { + void onConfirmedTap(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 35a245000628a..ab512af24f029 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -515,11 +515,11 @@ public class VolumeDialogImpl implements VolumeDialog, private void initODICaptionsH() { if (mODICaptionsIcon != null) { - mODICaptionsIcon.setOnClickListener(v -> { + mODICaptionsIcon.setOnConfirmedTapListener(() -> { onCaptionIconClicked(); Events.writeEvent(mContext, Events.EVENT_ODI_CAPTIONS_CLICK); dismissH(DISMISS_REASON_ODI_CAPTIONS_CLICKED); - }); + }, mHandler); } mController.getCaptionsComponentState(false);