/** * Wire * Copyright (C) 2016 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.waz.zclient.pages.main.pickuser; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import com.waz.api.IConversation; import com.waz.api.User; import com.waz.zclient.pages.main.pickuser.views.ConversationRowView; import com.waz.zclient.pages.main.pickuser.views.UserRowView; public class SearchResultOnItemTouchListener implements RecyclerView.OnItemTouchListener { private Callback callback; private GestureDetector gestureDetector; private int position = -1; private View rowView; public SearchResultOnItemTouchListener(Context context, Callback listener) { callback = listener; gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { if (rowView instanceof UserRowView) { callback.onUserDoubleClicked(((UserRowView) rowView).getUser(), position, rowView); } return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { if (rowView instanceof UserRowView) { ((UserRowView) rowView).onClicked(); callback.onUserClicked(((UserRowView) rowView).getUser(), position, rowView); } if (rowView instanceof ConversationRowView) { callback.onConversationClicked(((ConversationRowView) rowView).getConversation(), position); } return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { rowView = rv.findChildViewUnder(e.getX(), e.getY()); position = rv.getChildAdapterPosition(rowView); if (rowView instanceof RecyclerView) { return false; } position = rv.getChildAdapterPosition(rowView); if (rowView != null && callback != null) { gestureDetector.onTouchEvent(e); } return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } public interface Callback { void onUserClicked(User user, int position, View anchorView); void onConversationClicked(IConversation conversation, int position); void onUserDoubleClicked(User user, int position, View anchorView); } }