Implementing TouchDelegate to make full chip clickable.
Bug: 166376182 Tested: Manual Change-Id: I36b2559908fbf7ab6a863fb6e550a88b5374aefa
This commit is contained in:
parent
c6890f8869
commit
fee2b25b9c
|
@ -79,7 +79,6 @@ import android.view.HapticFeedbackConstants;
|
|||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.TouchDelegate;
|
||||
import android.view.View;
|
||||
import android.view.ViewDebug;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -700,12 +699,9 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
|||
super.onTouchEvent(ev);
|
||||
|
||||
TaskView taskView = getCurrentPageTaskView();
|
||||
if (taskView != null) {
|
||||
TouchDelegate mChildTouchDelegate = taskView.getIconTouchDelegate(ev);
|
||||
if (mChildTouchDelegate != null && mChildTouchDelegate.onTouchEvent(ev)) {
|
||||
// Keep consuming events to pass to delegate
|
||||
return true;
|
||||
}
|
||||
if (taskView != null && taskView.offerTouchToChildren(ev)) {
|
||||
// Keep consuming events to pass to delegate
|
||||
return true;
|
||||
}
|
||||
|
||||
final int x = (int) ev.getX();
|
||||
|
|
|
@ -135,6 +135,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
|||
* delegated bounds only to be updated.
|
||||
*/
|
||||
private TransformingTouchDelegate mIconTouchDelegate;
|
||||
private TransformingTouchDelegate mChipTouchDelegate;
|
||||
|
||||
private static final List<Rect> SYSTEM_GESTURE_EXCLUSION_RECT =
|
||||
Collections.singletonList(new Rect());
|
||||
|
@ -200,6 +201,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
|||
private View mContextualChipWrapper;
|
||||
private View mContextualChip;
|
||||
private final float[] mIconCenterCoords = new float[2];
|
||||
private final float[] mChipCenterCoords = new float[2];
|
||||
|
||||
public TaskView(Context context) {
|
||||
this(context, null);
|
||||
|
@ -263,11 +265,22 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
|||
mIconTouchDelegate = new TransformingTouchDelegate(mIconView);
|
||||
}
|
||||
|
||||
public TouchDelegate getIconTouchDelegate(MotionEvent event) {
|
||||
/**
|
||||
* Whether the taskview should take the touch event from parent. Events passed to children
|
||||
* that might require special handling.
|
||||
*/
|
||||
public boolean offerTouchToChildren(MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
computeAndSetIconTouchDelegate();
|
||||
computeAndSetChipTouchDelegate();
|
||||
}
|
||||
return mIconTouchDelegate;
|
||||
if (mIconTouchDelegate != null && mIconTouchDelegate.onTouchEvent(event)) {
|
||||
return true;
|
||||
}
|
||||
if (mChipTouchDelegate != null && mChipTouchDelegate.onTouchEvent(event)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void computeAndSetIconTouchDelegate() {
|
||||
|
@ -282,6 +295,23 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
|||
(int) (mIconCenterCoords[1] + iconHalfSize));
|
||||
}
|
||||
|
||||
private void computeAndSetChipTouchDelegate() {
|
||||
if (mContextualChipWrapper != null) {
|
||||
float chipHalfWidth = mContextualChipWrapper.getWidth() / 2f;
|
||||
float chipHalfHeight = mContextualChipWrapper.getHeight() / 2f;
|
||||
mChipCenterCoords[0] = chipHalfWidth;
|
||||
mChipCenterCoords[1] = chipHalfHeight;
|
||||
getDescendantCoordRelativeToAncestor(mContextualChipWrapper, mActivity.getDragLayer(),
|
||||
mChipCenterCoords,
|
||||
false);
|
||||
mChipTouchDelegate.setBounds(
|
||||
(int) (mChipCenterCoords[0] - chipHalfWidth),
|
||||
(int) (mChipCenterCoords[1] - chipHalfHeight),
|
||||
(int) (mChipCenterCoords[0] + chipHalfWidth),
|
||||
(int) (mChipCenterCoords[1] + chipHalfHeight));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The modalness of this view is how it should be displayed when it is shown on its own in the
|
||||
* modal state of overview.
|
||||
|
@ -725,6 +755,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
|||
mContextualChip.animate().scaleX(1f).scaleY(1f).setDuration(50);
|
||||
}
|
||||
if (mContextualChipWrapper != null) {
|
||||
mChipTouchDelegate = new TransformingTouchDelegate(mContextualChipWrapper);
|
||||
mContextualChipWrapper.animate().alpha(1f).setDuration(50);
|
||||
}
|
||||
}
|
||||
|
@ -746,6 +777,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
|||
View oldContextualChipWrapper = mContextualChipWrapper;
|
||||
mContextualChipWrapper = null;
|
||||
mContextualChip = null;
|
||||
mChipTouchDelegate = null;
|
||||
return oldContextualChipWrapper;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue