aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrianBlade <n.gelbertz@gmail.com>2015-04-03 00:06:37 +0200
committerBrianBlade <n.gelbertz@gmail.com>2015-04-03 19:16:46 +0200
commitba58a426ac15c0051ea164fffd26fbb3a360f8ba (patch)
treedf815e75e853b67aaf5f9b4ec95156560ec862b8
parent59ea143147548ee15211d7c334076a158757c85f (diff)
Enable end-conversation by swipe gesture
Add EnhancedListView library de.timroes.android:EnhancedListView:0.3.4 to enable swipe-out for ListViews
-rw-r--r--build.gradle1
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationActivity.java70
-rw-r--r--src/main/res/layout-w960dp/fragment_conversations_overview.xml2
-rw-r--r--src/main/res/layout/conversation_list_row.xml132
-rw-r--r--src/main/res/layout/fragment_conversations_overview.xml2
-rw-r--r--src/main/res/values-de/strings.xml1
-rw-r--r--src/main/res/values/strings.xml2
7 files changed, 139 insertions, 71 deletions
diff --git a/build.gradle b/build.gradle
index 8f7bb914..cdbb5a98 100644
--- a/build.gradle
+++ b/build.gradle
@@ -34,6 +34,7 @@ dependencies {
compile 'com.google.zxing:core:3.1.0'
compile 'com.google.zxing:android-integration:3.1.0'
compile 'de.measite.minidns:minidns:0.1.3'
+ compile 'de.timroes.android:EnhancedListView:0.3.4'
}
android {
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
index 82afda07..364e2ce4 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
@@ -22,12 +22,12 @@ import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
-import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.Toast;
import net.java.otr4j.session.SessionStatus;
+import de.timroes.android.listview.EnhancedListView;
import java.util.ArrayList;
import java.util.List;
@@ -77,7 +77,7 @@ public class ConversationActivity extends XmppActivity
private List<Conversation> conversationList = new ArrayList<>();
private Conversation mSelectedConversation = null;
- private ListView listView;
+ private EnhancedListView listView;
private ConversationFragment mConversationFragment;
private ArrayAdapter<Conversation> listAdapter;
@@ -156,7 +156,7 @@ public class ConversationActivity extends XmppActivity
transaction.replace(R.id.selected_conversation, this.mConversationFragment, "conversation");
transaction.commit();
- listView = (ListView) findViewById(R.id.list);
+ listView = (EnhancedListView) findViewById(R.id.list);
this.listAdapter = new ConversationAdapter(this, conversationList);
listView.setAdapter(this.listAdapter);
@@ -178,6 +178,49 @@ public class ConversationActivity extends XmppActivity
openConversation();
}
});
+
+ listView.setDismissCallback(new EnhancedListView.OnDismissCallback() {
+
+ @Override
+ public EnhancedListView.Undoable onDismiss(EnhancedListView enhancedListView, final int position) {
+ final Conversation item = listAdapter.getItem(position);
+ listAdapter.remove(item);
+ listAdapter.notifyDataSetChanged();
+
+ if (position == 0 && listAdapter.getCount() == 0) {
+ endConversation(item, false, true);
+ return null;
+ }
+ else if (getSelectedConversation() == item) {
+ setSelectedConversation(listAdapter.getItem(0));
+ endConversation(item, false, true);
+ }
+
+ return new EnhancedListView.Undoable() {
+ @Override
+ public void undo() {
+ listAdapter.insert(item, position);
+ listAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void discard() {
+ endConversation(item, false, false);
+ }
+
+ @Override
+ public String getTitle() {
+ return getResources().getString(R.string.title_undo_swipe_out_conversation);
+ }
+ };
+ }
+ });
+ listView.enableSwipeToDismiss();
+ listView.setSwipingLayout(R.id.swipeable_item);
+ listView.setUndoStyle(EnhancedListView.UndoStyle.SINGLE_POPUP);
+ listView.setUndoHideDelay(3000);
+ listView.setRequireTouchBeforeDismiss(false);
+
mContentView = findViewById(R.id.content_view_spl);
if (mContentView == null) {
mContentView = findViewById(R.id.content_view_ll);
@@ -485,13 +528,21 @@ public class ConversationActivity extends XmppActivity
}
public void endConversation(Conversation conversation) {
- showConversationsOverview();
+ endConversation(conversation, true, true);
+ }
+
+ public void endConversation(Conversation conversation, boolean showOverview, boolean reinit) {
+ if (showOverview) {
+ showConversationsOverview();
+ }
xmppConnectionService.archiveConversation(conversation);
- if (conversationList.size() > 0) {
- setSelectedConversation(conversationList.get(0));
- this.mConversationFragment.reInit(getSelectedConversation());
- } else {
- setSelectedConversation(null);
+ if (reinit) {
+ if (conversationList.size() > 0) {
+ setSelectedConversation(conversationList.get(0));
+ this.mConversationFragment.reInit(getSelectedConversation());
+ } else {
+ setSelectedConversation(null);
+ }
}
}
@@ -744,6 +795,7 @@ public class ConversationActivity extends XmppActivity
@Override
public void onPause() {
+ listView.discardUndo();
super.onPause();
this.mActivityPaused = true;
if (this.xmppConnectionServiceBound) {
diff --git a/src/main/res/layout-w960dp/fragment_conversations_overview.xml b/src/main/res/layout-w960dp/fragment_conversations_overview.xml
index 2744f38e..50039c03 100644
--- a/src/main/res/layout-w960dp/fragment_conversations_overview.xml
+++ b/src/main/res/layout-w960dp/fragment_conversations_overview.xml
@@ -12,7 +12,7 @@
android:background="@color/primarybackground"
android:orientation="vertical" >
- <ListView
+ <de.timroes.android.listview.EnhancedListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
diff --git a/src/main/res/layout/conversation_list_row.xml b/src/main/res/layout/conversation_list_row.xml
index 21147b4a..3656528c 100644
--- a/src/main/res/layout/conversation_list_row.xml
+++ b/src/main/res/layout/conversation_list_row.xml
@@ -1,68 +1,80 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="8dp" >
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/divider">
- <ImageView
- android:id="@+id/conversation_image"
- android:layout_width="56dp"
- android:layout_height="56dp"
- android:layout_alignParentLeft="true"
- android:scaleType="centerCrop" />
+ <View
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="@color/divider"/>
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_toRightOf="@+id/conversation_image"
- android:paddingLeft="8dp" >
+ <RelativeLayout
+ android:id="@+id/swipeable_item"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/primarybackground"
+ android:orientation="horizontal"
+ android:padding="8dp" >
- <TextView
- android:id="@+id/conversation_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignLeft="@+id/conversation_lastwrapper"
- android:layout_toLeftOf="@+id/conversation_lastupdate"
- android:singleLine="true"
- android:textColor="@color/primarytext"
- android:textSize="?attr/TextSizeHeadline"
- android:typeface="sans" />
+ <ImageView
+ android:id="@+id/conversation_image"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_alignParentLeft="true"
+ android:scaleType="centerCrop" />
- <LinearLayout
- android:id="@+id/conversation_lastwrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/conversation_name"
- android:orientation="vertical"
- android:paddingTop="3dp" >
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_toRightOf="@+id/conversation_image"
+ android:paddingLeft="8dp" >
- <TextView
- android:id="@+id/conversation_lastmsg"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:scrollHorizontally="false"
- android:singleLine="true"
- android:textColor="@color/primarytext"
- android:textSize="?attr/TextSizeBody" />
+ <TextView
+ android:id="@+id/conversation_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignLeft="@+id/conversation_lastwrapper"
+ android:layout_toLeftOf="@+id/conversation_lastupdate"
+ android:singleLine="true"
+ android:textColor="@color/primarytext"
+ android:textSize="?attr/TextSizeHeadline"
+ android:typeface="sans" />
- <ImageView
- android:id="@+id/conversation_lastimage"
- android:layout_width="fill_parent"
- android:layout_height="36dp"
- android:background="@color/primarytext"
- android:scaleType="centerCrop" />
- </LinearLayout>
+ <LinearLayout
+ android:id="@+id/conversation_lastwrapper"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/conversation_name"
+ android:orientation="vertical"
+ android:paddingTop="3dp" >
- <TextView
- android:id="@+id/conversation_lastupdate"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignBaseline="@+id/conversation_name"
- android:layout_alignParentRight="true"
- android:gravity="right"
- android:textColor="@color/secondarytext"
- android:textSize="?attr/TextSizeInfo" />
- </RelativeLayout>
+ <TextView
+ android:id="@+id/conversation_lastmsg"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:scrollHorizontally="false"
+ android:singleLine="true"
+ android:textColor="@color/primarytext"
+ android:textSize="?attr/TextSizeBody" />
-</RelativeLayout> \ No newline at end of file
+ <ImageView
+ android:id="@+id/conversation_lastimage"
+ android:layout_width="fill_parent"
+ android:layout_height="36dp"
+ android:background="@color/primarytext"
+ android:scaleType="centerCrop" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/conversation_lastupdate"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignBaseline="@+id/conversation_name"
+ android:layout_alignParentRight="true"
+ android:gravity="right"
+ android:textColor="@color/secondarytext"
+ android:textSize="?attr/TextSizeInfo" />
+ </RelativeLayout>
+ </RelativeLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/src/main/res/layout/fragment_conversations_overview.xml b/src/main/res/layout/fragment_conversations_overview.xml
index 69570028..24c653ae 100644
--- a/src/main/res/layout/fragment_conversations_overview.xml
+++ b/src/main/res/layout/fragment_conversations_overview.xml
@@ -10,7 +10,7 @@
android:background="@color/primarybackground"
android:orientation="vertical" >
- <ListView
+ <de.timroes.android.listview.EnhancedListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index b8266182..e9ef5c66 100644
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -427,6 +427,7 @@
<string name="no_application_found_to_display_location">Keine App für die Standort-Anzeige gefunden</string>
<string name="location">Standort</string>
<string name="received_location">Standort empfangen</string>
+ <string name="title_undo_swipe_out_conversation">Unterhaltung beendet</string>
<plurals name="select_contact">
<item quantity="one">%d Kontakt ausgewählt</item>
<item quantity="other">%d Kontakte ausgewählt</item>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index af56c014..4cd7415a 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -296,6 +296,7 @@
\n\nhttps://developer.android.com/tools/support-library\n(Apache License, Version 2.0)
\n\nhttps://github.com/zxing/zxing\n(Apache License, Version 2.0)
\n\nhttps://github.com/google/material-design-icons\n(CC BY 4.0)
+ \n\nhttps://github.com/timroes/EnhancedListView\n(Apache License, Version 2.0)
</string>
<string name="title_pref_quiet_hours">Quiet Hours</string>
<string name="title_pref_quiet_hours_start_time">Start time</string>
@@ -454,6 +455,7 @@
<string name="no_application_found_to_display_location">No application found to display location</string>
<string name="location">Location</string>
<string name="received_location">Received location</string>
+ <string name="title_undo_swipe_out_conversation">Conversation closed</string>
<plurals name="select_contact">
<item quantity="one">Select %d contact</item>
<item quantity="other">Select %d contacts</item>