Dismiss just the text from the leave behind instead of the whole item.
Leaves the BG there so the change isn't as "shocking"
Change-Id: I95b6929dadbf9b5e7c80931a3f65111fc4a695ff
diff --git a/res/layout/swipe_leavebehind.xml b/res/layout/swipe_leavebehind.xml
index 8461be3..97d42c9 100644
--- a/res/layout/swipe_leavebehind.xml
+++ b/res/layout/swipe_leavebehind.xml
@@ -19,49 +19,53 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/swiped_bg"
- android:clickable="true"
- android:gravity="center_vertical"
- android:minHeight="@dimen/conversation_item_height"
- android:orientation="horizontal" >
+ android:minHeight="@dimen/conversation_item_height" >
- <TextView
- android:id="@+id/undo_descriptionview"
- android:layout_width="0dip"
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1"
- android:ellipsize="end"
- android:singleLine="true"
- android:text="@string/no_conversations"
- android:textColor="@android:color/white"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginLeft="16dip" />
-
- <View
- android:id="@+id/undo_separator"
- android:layout_width="1dip"
- android:layout_height="match_parent"
- android:layout_marginBottom="20dip"
- android:layout_marginRight="12dip"
- android:layout_marginTop="20dip"
- android:background="@android:color/white" />
-
- <ImageView
- android:id="@+id/undo_icon"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginRight="8dip"
- android:src="@drawable/ic_menu_revert_holo_dark" />
-
- <TextView
- android:id="@+id/undo_text"
- style="@style/UndoTextStyle"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:paddingRight="16dip"
- android:text="@string/undo"
- android:textAllCaps="true"
android:clickable="true"
android:gravity="center_vertical"
- android:textColor="@android:color/white" />
+ android:orientation="horizontal"
+ android:id="@+id/swipeable_content">
+ <TextView
+ android:id="@+id/undo_descriptionview"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:text="@string/no_conversations"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:paddingLeft="16dip" />
+ <View
+ android:id="@+id/undo_separator"
+ android:layout_width="1dip"
+ android:layout_height="match_parent"
+ android:layout_marginBottom="20dip"
+ android:layout_marginRight="12dip"
+ android:layout_marginTop="20dip"
+ android:background="@android:color/white" />
+
+ <ImageView
+ android:id="@+id/undo_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_marginRight="8dip"
+ android:src="@drawable/ic_menu_revert_holo_dark" />
+
+ <TextView
+ android:id="@+id/undo_text"
+ style="@style/UndoTextStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingRight="16dip"
+ android:text="@string/undo"
+ android:textAllCaps="true"
+ android:clickable="true"
+ android:gravity="center_vertical"
+ android:textColor="@android:color/white" />
+ </LinearLayout>
</com.android.mail.ui.LeaveBehindItem>
\ No newline at end of file
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java
index 0e85ef8..6800ca2 100644
--- a/src/com/android/mail/browse/ConversationItemView.java
+++ b/src/com/android/mail/browse/ConversationItemView.java
@@ -64,6 +64,7 @@
import com.android.mail.ui.ConversationSelectionSet;
import com.android.mail.ui.FolderDisplayer;
import com.android.mail.ui.SwipeableItemView;
+import com.android.mail.ui.SwipeableListView;
import com.android.mail.ui.ViewMode;
import com.android.mail.utils.LogTag;
import com.android.mail.utils.Utils;
@@ -1197,12 +1198,14 @@
return x > mCoordinates.starX - sTouchSlop;
}
- /**
- * Cancel any potential tap handling on this view.
- */
@Override
- public void cancelTap() {
- // Do nothing.
+ public boolean canChildBeDismissed() {
+ return true;
+ }
+
+ @Override
+ public void dismiss() {
+ getListView().dismissChild(this);
}
/**
@@ -1257,8 +1260,8 @@
return handled;
}
- private ListView getListView() {
- return ((SwipeableConversationItemView) getParent()).getListView();
+ private SwipeableListView getListView() {
+ return (SwipeableListView)((SwipeableConversationItemView) getParent()).getListView();
}
private boolean onTouchEventNoSwipe(MotionEvent event) {
@@ -1452,7 +1455,7 @@
}
@Override
- public View getView() {
+ public View getSwipeableView() {
return this;
}
}
diff --git a/src/com/android/mail/ui/LeaveBehindItem.java b/src/com/android/mail/ui/LeaveBehindItem.java
index 9ff11c2..b1b5976 100644
--- a/src/com/android/mail/ui/LeaveBehindItem.java
+++ b/src/com/android/mail/ui/LeaveBehindItem.java
@@ -27,6 +27,7 @@
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.DecelerateInterpolator;
+import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -38,7 +39,7 @@
import com.android.mail.providers.Folder;
import com.google.common.collect.ImmutableList;
-public class LeaveBehindItem extends LinearLayout implements OnClickListener,
+public class LeaveBehindItem extends FrameLayout implements OnClickListener,
SwipeableItemView {
private ToastBarOperation mUndoOp;
@@ -46,6 +47,7 @@
private AnimatedAdapter mAdapter;
private ConversationCursor mConversationCursor;
private TextView mText;
+ private View mSwipeableContent;
private static int sShrinkAnimationDuration = -1;
private static int sFadeInAnimationDuration = -1;
private static int sSwipedBgColor = -1;
@@ -95,6 +97,7 @@
mAdapter = adapter;
mConversationCursor = (ConversationCursor) adapter.getCursor();
setData(target);
+ mSwipeableContent = findViewById(R.id.swipeable_content);
mText = ((TextView) findViewById(R.id.undo_descriptionview));
mText.setText(Html.fromHtml(mUndoOp
.getSingularDescription(getContext(), folder)));
@@ -108,6 +111,7 @@
}
}
+ @Override
public void dismiss() {
if (mAdapter != null) {
mAdapter.fadeOutLeaveBehindItems();
@@ -120,13 +124,13 @@
}
@Override
- public View getView() {
- return this;
+ public View getSwipeableView() {
+ return mSwipeableContent;
}
@Override
- public void cancelTap() {
- // Do nothing.
+ public boolean canChildBeDismissed() {
+ return true;
}
public LeaveBehindData getLeaveBehindData() {
diff --git a/src/com/android/mail/ui/SwipeHelper.java b/src/com/android/mail/ui/SwipeHelper.java
index 4e23f96..03b5811 100644
--- a/src/com/android/mail/ui/SwipeHelper.java
+++ b/src/com/android/mail/ui/SwipeHelper.java
@@ -207,7 +207,7 @@
}
mVelocityTracker.clear();
if (mCurrView != null) {
- mCurrAnimView = mCurrView.getView();
+ mCurrAnimView = mCurrView.getSwipeableView();
mCanCurrViewBeDimissed = mCallback.canChildBeDismissed(mCurrView);
mVelocityTracker.addMovement(ev);
mInitialTouchPosX = ev.getX();
@@ -224,7 +224,6 @@
float deltaX = Math.abs(currX - mInitialTouchPosX);
if (deltaY > SCROLL_SLOP && deltaY > (FACTOR * deltaX)) {
mLastY = ev.getY();
- mCurrView.cancelTap();
return false;
}
}
@@ -232,11 +231,10 @@
float pos = ev.getX();
float delta = pos - mInitialTouchPosX;
if (Math.abs(delta) > mPagingTouchSlop) {
- mCallback.onBeginDrag(mCurrView.getView());
+ mCallback.onBeginDrag(mCurrView.getSwipeableView());
mDragging = true;
mInitialTouchPosX = ev.getX() - mCurrAnimView.getTranslationX();
mInitialTouchPosY = ev.getY();
- mCurrView.cancelTap();
}
}
mLastY = ev.getY();
@@ -258,7 +256,7 @@
* move
*/
private void dismissChild(final SwipeableItemView view, float velocity) {
- final View animView = mCurrView.getView();
+ final View animView = mCurrView.getSwipeableView();
final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
float newPos = determinePos(animView, velocity);
int duration = determineDuration(animView, newPos, velocity);
@@ -286,7 +284,7 @@
private void dismissChildren(final Collection<ConversationItemView> views, float velocity,
AnimatorListenerAdapter listener) {
- final View animView = mCurrView.getView();
+ final View animView = mCurrView.getSwipeableView();
final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(mCurrView);
float newPos = determinePos(animView, velocity);
int duration = DISMISS_ANIMATION_DURATION;
@@ -344,7 +342,7 @@
}
public void snapChild(final SwipeableItemView view, float velocity) {
- final View animView = view.getView();
+ final View animView = view.getSwipeableView();
final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
ObjectAnimator anim = createTranslationAnimation(animView, 0);
int duration = SNAP_ANIM_LEN;
@@ -381,11 +379,6 @@
if (!mDragging) {
return false;
}
- // If this item is being dragged, cancel any tap handlers/ events/
- // actions for this item.
- if (mCurrView != null) {
- mCurrView.cancelTap();
- }
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
switch (action) {
@@ -423,7 +416,7 @@
if (FADE_OUT_DURING_SWIPE && mCanCurrViewBeDimissed) {
mCurrAnimView.setAlpha(getAlphaForOffset(mCurrAnimView));
}
- invalidateGlobalRegion(mCurrView.getView());
+ invalidateGlobalRegion(mCurrView.getSwipeableView());
}
break;
case MotionEvent.ACTION_UP:
diff --git a/src/com/android/mail/ui/SwipeableItemView.java b/src/com/android/mail/ui/SwipeableItemView.java
index f98f0c4..76d3f90 100644
--- a/src/com/android/mail/ui/SwipeableItemView.java
+++ b/src/com/android/mail/ui/SwipeableItemView.java
@@ -23,7 +23,9 @@
* Represents an item that can be dismissed by the SwipeableListView.
*/
public interface SwipeableItemView {
- public View getView();
+ public View getSwipeableView();
- public void cancelTap();
+ public boolean canChildBeDismissed();
+
+ public void dismiss();
}
diff --git a/src/com/android/mail/ui/SwipeableListView.java b/src/com/android/mail/ui/SwipeableListView.java
index 55ade43..26aa0a1 100644
--- a/src/com/android/mail/ui/SwipeableListView.java
+++ b/src/com/android/mail/ui/SwipeableListView.java
@@ -150,20 +150,12 @@
@Override
public boolean canChildBeDismissed(SwipeableItemView v) {
- View view = v.getView();
- return view instanceof ConversationItemView || view instanceof LeaveBehindItem;
+ return v.canChildBeDismissed();
}
@Override
public void onChildDismissed(SwipeableItemView v) {
- View view = v!= null ? v.getView() : null;
- if (view != null) {
- if (view instanceof ConversationItemView) {
- dismissChild((ConversationItemView) view);
- } else if (view instanceof LeaveBehindItem) {
- ((LeaveBehindItem) view).dismiss();
- }
- }
+ v.dismiss();
}
// Call this whenever a new action is taken; this forces a commit of any
@@ -175,7 +167,7 @@
}
}
- private void dismissChild(final ConversationItemView target) {
+ public void dismissChild(final ConversationItemView target) {
final Context context = getContext();
final ToastBarOperation undoOp;