Use a confirmedTap listener to guarantee a click. This eliminates the
overlapping component listener bug from the caption service. Bug:129608288 Test: manual Change-Id: I8836ebfbb9fb715f83e78da19433a53a13e4ceb9
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user