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:
Anthony Tripaldi
2019-04-02 10:56:02 -04:00
parent 671aa4d618
commit 354bbde082
2 changed files with 38 additions and 2 deletions

View File

@@ -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();
}
}

View File

@@ -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);