最近有一个需求,
现象:播放音乐时,点击多任务中的“全部清除”按钮,音乐未停止;
预期:音乐停止。
于是去看看这个按钮的点击事件,本来以为这就是一个简单的onclick事件,可是并没有这么简单,首先找到这个按钮:
com.android.systemui.recents.views.RecentsView中的mStackActionButton,这个就是按钮的对象了,可是这个按钮并没有找到onclick事件,所以猜测是不是在onTouchEvent中处理的
com.android.systemui.recents.views.RecentsView -> onTouchEvent()
@Override
public boolean onTouchEvent(MotionEvent ev) {
return mTouchHandler.onTouchEvent(ev);
}
继续跟,RecentsViewTouchHandler这个类很像是专门处理recentsView的touch事件的
com.android.systemui.recents.views.RecentsViewTouchHandler ->onTouchEvent();
public boolean onTouchEvent(MotionEvent ev) {
handleTouchEvent(ev);
if (ev.getAction() == MotionEvent.ACTION_UP && mRv.getStack().getStackTaskCount() == 0) {
EventBus.getDefault().send(new HideRecentsEvent(false, true));
}
return true;
}
在com.android.systemui.recents.views.RecentsViewTouchHandler -> handleTouchEvent(ev)
中的ACTION_UP事件中找到了
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
if (mRv.getStackActionButton().isPressed() && isWithinStackActionButton(evX, evY)) {
EventBus.getDefault().send(new DismissAllTaskViewsEvent());
consumed = true;
}
......
}
这里就是处理点击事件的地方了,继续跟到EventBus中
com.android.systemui.recents.events.EventBus -> send();
public void send(Event event) {
......
queueEvent(event);
}
com.android.systemui.recents.events.EventBus -> queueEvent();
private void queueEvent(final Event event) {
ArrayList<EventHan