* #31230: improved swipe detection and scroll
diff --git a/src/org/sflphone/adapters/ContactsAdapter.java b/src/org/sflphone/adapters/ContactsAdapter.java
index 57ab39a..83492f9 100644
--- a/src/org/sflphone/adapters/ContactsAdapter.java
+++ b/src/org/sflphone/adapters/ContactsAdapter.java
@@ -110,6 +110,14 @@
}
});
+ entryView.quick_msg.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ parent.get().mCallbacks.onTextContact(item);
+ }
+ });
+
entryView.quick_starred.setOnClickListener(new OnClickListener() {
@Override
@@ -136,15 +144,9 @@
}
});
-
-
- entryView.quick_msg.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- parent.get().mCallbacks.onTextContact(item);
- }
- });
+ entryView.quick_edit.setClickable(false);
+ entryView.quick_discard.setClickable(false);
+ entryView.quick_starred.setClickable(false);
return convertView;
}
diff --git a/src/org/sflphone/fragments/CallListFragment.java b/src/org/sflphone/fragments/CallListFragment.java
index 3d39265..1289364 100644
--- a/src/org/sflphone/fragments/CallListFragment.java
+++ b/src/org/sflphone/fragments/CallListFragment.java
@@ -150,54 +150,54 @@
list.setDividerHeight(10);
list.setAdapter(mAdapter);
list.setOnItemClickListener(mItemClickListener);
- list.setOnTouchListener(new SwipeListViewTouchListener(list, new SwipeListViewTouchListener.OnSwipeCallback() {
- @Override
- public void onSwipeLeft(ListView listView, int[] reverseSortedPositions) {
- // Log.i(this.getClass().getName(), "swipe left : pos="+reverseSortedPositions[0]);
- // TODO : YOUR CODE HERE FOR LEFT ACTION
- Conference tmp = mAdapter.getItem(reverseSortedPositions[0]);
- try {
- if (tmp.hasMultipleParticipants()) {
- mCallbacks.getService().hangUpConference(tmp.getId());
- } else {
- mCallbacks.getService().hangUp(tmp.getParticipants().get(0).getCallId());
- }
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
-
- @Override
- public void onSwipeRight(ListView listView, int[] reverseSortedPositions) {
- // Log.i(ProfileMenuActivity.class.getClass().getName(), "swipe right : pos="+reverseSortedPositions[0]);
- // TODO : YOUR CODE HERE FOR RIGHT ACTION
-
- Conference tmp = mAdapter.getItem(reverseSortedPositions[0]);
- try {
- if (tmp.hasMultipleParticipants()) {
- if (tmp.isOnHold()) {
- mCallbacks.getService().unholdConference(tmp.getId());
- } else {
- mCallbacks.getService().holdConference(tmp.getId());
- }
- } else {
- if (tmp.isOnHold()) {
- Toast.makeText(getActivity(), "call is on hold, unholding", Toast.LENGTH_SHORT).show();
- mCallbacks.getService().unhold(tmp.getParticipants().get(0).getCallId());
- } else {
- Toast.makeText(getActivity(), "call is current, holding", Toast.LENGTH_SHORT).show();
- mCallbacks.getService().hold(tmp.getParticipants().get(0).getCallId());
- }
- }
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }, true, // example : left action = dismiss
- false)); // example : right action without dismiss animation);
+// list.setOnTouchListener(new SwipeListViewTouchListener(list, new SwipeListViewTouchListener.OnSwipeCallback() {
+// @Override
+// public void onSwipeLeft(ListView listView, int[] reverseSortedPositions) {
+// // Log.i(this.getClass().getName(), "swipe left : pos="+reverseSortedPositions[0]);
+// // TODO : YOUR CODE HERE FOR LEFT ACTION
+// Conference tmp = mAdapter.getItem(reverseSortedPositions[0]);
+// try {
+// if (tmp.hasMultipleParticipants()) {
+// mCallbacks.getService().hangUpConference(tmp.getId());
+// } else {
+// mCallbacks.getService().hangUp(tmp.getParticipants().get(0).getCallId());
+// }
+// } catch (RemoteException e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+//
+// }
+//
+// @Override
+// public void onSwipeRight(ListView listView, int[] reverseSortedPositions) {
+// // Log.i(ProfileMenuActivity.class.getClass().getName(), "swipe right : pos="+reverseSortedPositions[0]);
+// // TODO : YOUR CODE HERE FOR RIGHT ACTION
+//
+// Conference tmp = mAdapter.getItem(reverseSortedPositions[0]);
+// try {
+// if (tmp.hasMultipleParticipants()) {
+// if (tmp.isOnHold()) {
+// mCallbacks.getService().unholdConference(tmp.getId());
+// } else {
+// mCallbacks.getService().holdConference(tmp.getId());
+// }
+// } else {
+// if (tmp.isOnHold()) {
+// Toast.makeText(getActivity(), "call is on hold, unholding", Toast.LENGTH_SHORT).show();
+// mCallbacks.getService().unhold(tmp.getParticipants().get(0).getCallId());
+// } else {
+// Toast.makeText(getActivity(), "call is current, holding", Toast.LENGTH_SHORT).show();
+// mCallbacks.getService().hold(tmp.getParticipants().get(0).getCallId());
+// }
+// }
+// } catch (RemoteException e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+// }
+// }, true, // example : left action = dismiss
+// false)); // example : right action without dismiss animation);
list.setOnItemLongClickListener(mItemLongClickListener);
return rootView;
diff --git a/src/org/sflphone/fragments/ContactListFragment.java b/src/org/sflphone/fragments/ContactListFragment.java
index 939b325..848afff 100644
--- a/src/org/sflphone/fragments/ContactListFragment.java
+++ b/src/org/sflphone/fragments/ContactListFragment.java
@@ -183,9 +183,10 @@
}
@Override
- public void onSwipeRight(ListView listView, final int[] reverseSortedPositions) {
- // Log.i(ProfileMenuActivity.class.getClass().getName(), "swipe right : pos="+reverseSortedPositions[0]);
- // TODO : YOUR CODE HERE FOR RIGHT ACTION
+ public void onSwipeRight(ListView listView, View down) {
+ down.findViewById(R.id.quick_edit).setClickable(true);
+ down.findViewById(R.id.quick_discard).setClickable(true);
+ down.findViewById(R.id.quick_starred).setClickable(true);
}
}, true, false));
diff --git a/src/org/sflphone/views/SwipeListViewTouchListener.java b/src/org/sflphone/views/SwipeListViewTouchListener.java
index 38125b9..0ae0207 100644
--- a/src/org/sflphone/views/SwipeListViewTouchListener.java
+++ b/src/org/sflphone/views/SwipeListViewTouchListener.java
@@ -18,6 +18,7 @@
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ListView;
+import android.widget.Toast;
public class SwipeListViewTouchListener implements View.OnTouchListener {
// Cached ViewConfiguration and system-wide constant values
@@ -43,7 +44,7 @@
private boolean mSwiping;
private VelocityTracker mVelocityTracker;
private int mDownPosition;
- private View mDownView;
+ private View mDownView, mUnderDownView;
private boolean mPaused;
/**
@@ -61,7 +62,7 @@
*/
void onSwipeLeft(ListView listView, int[] reverseSortedPositions);
- void onSwipeRight(ListView listView, int[] reverseSortedPositions);
+ void onSwipeRight(ListView listView, View downView);
}
/**
@@ -161,6 +162,7 @@
child.getHitRect(rect);
if (rect.contains(x, y)) {
mDownView = child.findViewById(R.id.contactview);
+ mUnderDownView = child.findViewById(R.id.contact_underview);
break;
}
}
@@ -174,6 +176,7 @@
mVelocityTracker.addMovement(motionEvent);
mVelocityTracker.recycle();
}
+ Log.i(TAG, "item id "+item.getId());
item.onTouchEvent(motionEvent);
return true;
}
@@ -192,7 +195,7 @@
boolean swipe = false;
boolean swipeRight = false;
- if (Math.abs(deltaX) > mViewWidth / 2) {
+ if (mDownView.getTranslationX() > mViewWidth / 2) {
swipe = true;
swipeRight = deltaX > 0;
} else if (mMinFlingVelocity <= velocityX && velocityX <= mMaxFlingVelocity && velocityY < velocityX) {
@@ -211,7 +214,8 @@
@Override
public void onAnimationEnd(Animator animation) {
mListView.requestDisallowInterceptTouchEvent(false);
-// mCallback.onSwipeRight(mListView, swipePositions);
+// mCallback.onSwipeRight(mListView, mUnderDownView);
+ toggleUnderLayerState(true);
// performSwipeAction(downView, downPosition, toTheRight,dismissRight);
}
});
@@ -221,7 +225,13 @@
} else {
// cancel
- mDownView.animate().translationX(0).alpha(1).setDuration(mAnimationTime).setListener(null);
+ mDownView.animate().translationX(0).alpha(1).setDuration(mAnimationTime).setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ toggleUnderLayerState(false);
+ mUnderDownView = null;
+ }
+ });
}
mVelocityTracker = null;
mDownX = 0;
@@ -268,6 +278,14 @@
}
return false;
}
+
+ private void toggleUnderLayerState(boolean b) {
+ if(mUnderDownView == null)
+ return;
+ mUnderDownView.findViewById(R.id.quick_edit).setClickable(b);
+ mUnderDownView.findViewById(R.id.quick_discard).setClickable(b);
+ mUnderDownView.findViewById(R.id.quick_starred).setClickable(b);
+ }
class PendingSwipeData implements Comparable<PendingSwipeData> {
public int position;
@@ -313,10 +331,10 @@
for (int i = mPendingSwipes.size() - 1; i >= 0; i--) {
swipePositions[i] = mPendingSwipes.get(i).position;
}
- if (swipeRight)
- mCallback.onSwipeRight(mListView, swipePositions);
- else
- mCallback.onSwipeLeft(mListView, swipePositions);
+// if (swipeRight)
+// mCallback.onSwipeRight(mListView, swipePositions);
+// else
+// mCallback.onSwipeLeft(mListView, swipePositions);
ViewGroup.LayoutParams lp;
for (PendingSwipeData pendingDismiss : mPendingSwipes) {