summaryrefslogtreecommitdiff
path: root/org.fox.ttrss/src
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2017-02-17 18:26:09 +0300
committerAndrew Dolgov <[email protected]>2017-02-17 18:26:09 +0300
commitb80e383511d2dd05069b3db95c62095c4dff2815 (patch)
treef0ca2091a76d6e7647e9272a3839eee2636c5b91 /org.fox.ttrss/src
parentefd940c88d4c51fa56bb9a1c77a3527df83a54b8 (diff)
implement swipe to dismiss
Diffstat (limited to 'org.fox.ttrss/src')
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java67
-rw-r--r--org.fox.ttrss/src/main/res/layout/fragment_headlines.xml4
-rw-r--r--org.fox.ttrss/src/main/res/layout/headlines_row_undo.xml29
-rwxr-xr-xorg.fox.ttrss/src/main/res/values/strings.xml2
-rwxr-xr-xorg.fox.ttrss/src/main/res/xml/preferences.xml6
5 files changed, 102 insertions, 6 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
index 63871a98..6dbd62c7 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
@@ -17,6 +17,8 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.app.Fragment;
@@ -34,6 +36,7 @@ import android.view.Display;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@@ -57,6 +60,10 @@ import com.amulyakhare.textdrawable.util.ColorGenerator;
import com.google.gson.JsonElement;
import com.nhaarman.listviewanimations.appearance.AnimationAdapter;
import com.nhaarman.listviewanimations.appearance.simple.SwingBottomInAnimationAdapter;
+import com.nhaarman.listviewanimations.itemmanipulation.DynamicListView;
+import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.OnDismissCallback;
+import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.undo.SimpleSwipeUndoAdapter;
+import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.undo.UndoAdapter;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
@@ -117,7 +124,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
private int m_maxImageSize = 0;
private boolean m_compactLayoutMode = false;
private int m_listPreviousVisibleItem;
- private ListView m_list;
+ private DynamicListView m_list;
private ImageLoader m_imageLoader = ImageLoader.getInstance();
private View m_listLoadingView;
private View m_topChangedView;
@@ -469,10 +476,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
}
});
- m_list = (ListView)view.findViewById(R.id.headlines_list);
+ m_list = (DynamicListView) view.findViewById(R.id.headlines_list);
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.headlines_fab);
+ boolean enableSwipeToDismiss = m_prefs.getBoolean("headlines_swipe_to_dismiss", true);
+
if (! (getActivity() instanceof DetailActivity)) {
m_list.setOnTouchListener(new ShowHideOnScroll(fab));
@@ -482,6 +491,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
refresh(false);
}
});
+
} else {
fab.setVisibility(View.GONE);
}
@@ -520,9 +530,41 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
m_animationAdapter.setAbsListView(m_list);
m_list.setAdapter(m_animationAdapter);
+ if (enableSwipeToDismiss) {
+
+ SimpleSwipeUndoAdapter swipeUndoAdapter = new SimpleSwipeUndoAdapter(m_adapter, m_activity,
+ new OnDismissCallback() {
+ @Override
+ public void onDismiss(final ViewGroup listView, final int[] reverseSortedPositions) {
+ for (int position : reverseSortedPositions) {
+ Article article = m_adapter.getItem(position);
+
+ Log.d(TAG, "onSwipeDismiss: " + article);
+
+ if (article != null) {
+ if (article.unread) {
+ article.unread = false;
+ m_activity.saveArticleUnread(article);
+ }
+
+ m_adapter.remove(article);
+ m_adapter.notifyDataSetChanged();
+ }
+ }
+ }
+ }
+ );
+
+ swipeUndoAdapter.setAbsListView(m_list);
+ m_list.setAdapter(swipeUndoAdapter);
+ m_list.enableSimpleSwipeUndo();
+ }
+
+
m_list.setOnItemClickListener(this);
m_list.setOnScrollListener(this);
- registerForContextMenu(m_list);
+
+ if (!enableSwipeToDismiss) registerForContextMenu(m_list);
if (m_activity.isSmallScreen()) {
m_activity.setTitle(m_feed.title);
@@ -838,7 +880,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public boolean flavorImageEmbedded;
}
- private class ArticleListAdapter extends ArrayAdapter<Article> {
+ private class ArticleListAdapter extends ArrayAdapter<Article> implements UndoAdapter {
private ArrayList<Article> items;
public static final int VIEW_NORMAL = 0;
@@ -1571,6 +1613,23 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
}
+
+ @NonNull
+ @Override
+ public View getUndoView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ View view = convertView;
+
+ if (view == null) {
+ view = LayoutInflater.from(m_activity).inflate(R.layout.headlines_row_undo, parent, false);
+ }
+ return view;
+ }
+
+ @NonNull
+ @Override
+ public View getUndoClickView(@NonNull View view) {
+ return view.findViewById(R.id.headlines_row_undo_button);
+ }
}
diff --git a/org.fox.ttrss/src/main/res/layout/fragment_headlines.xml b/org.fox.ttrss/src/main/res/layout/fragment_headlines.xml
index 7b7244a3..ddca91fd 100644
--- a/org.fox.ttrss/src/main/res/layout/fragment_headlines.xml
+++ b/org.fox.ttrss/src/main/res/layout/fragment_headlines.xml
@@ -11,12 +11,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent" >
- <ListView
+ <com.nhaarman.listviewanimations.itemmanipulation.DynamicListView
android:id="@+id/headlines_list"
android:drawSelectorOnTop="true"
android:layout_width="match_parent"
android:layout_height="match_parent" >
- </ListView>
+ </com.nhaarman.listviewanimations.itemmanipulation.DynamicListView>
</android.support.v4.widget.SwipeRefreshLayout>
<!-- <TextView
diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row_undo.xml b/org.fox.ttrss/src/main/res/layout/headlines_row_undo.xml
new file mode 100644
index 00000000..56c79056
--- /dev/null
+++ b/org.fox.ttrss/src/main/res/layout/headlines_row_undo.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/headlines_row_undo"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:background="?colorPrimaryDark"
+ android:orientation="horizontal"
+ android:paddingLeft="16dp"
+ android:weightSum="1">
+
+ <TextView
+ android:background="@drawable/ripple"
+ android:id="@+id/top_changed_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@android:color/primary_text_dark"
+ android:text="@string/headline_undo_row_prompt"
+ android:layout_weight="1" />
+
+ <Button
+ android:background="@drawable/ripple"
+ android:id="@+id/headlines_row_undo_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@android:color/primary_text_dark"
+ android:text="@string/headline_undo_row_button" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/org.fox.ttrss/src/main/res/values/strings.xml b/org.fox.ttrss/src/main/res/values/strings.xml
index a3de6fc6..1d44547b 100755
--- a/org.fox.ttrss/src/main/res/values/strings.xml
+++ b/org.fox.ttrss/src/main/res/values/strings.xml
@@ -243,4 +243,6 @@
<string name="open_with">Open with…</string>
<string name="confirm_catchup_above">Mark articles as read?</string>
<string name="dialog_ok">OK</string>
+ <string name="headline_undo_row_button">UNDO</string>
+ <string name="headline_undo_row_prompt">Marked as read</string>
</resources>
diff --git a/org.fox.ttrss/src/main/res/xml/preferences.xml b/org.fox.ttrss/src/main/res/xml/preferences.xml
index 2341cd78..711d18be 100755
--- a/org.fox.ttrss/src/main/res/xml/preferences.xml
+++ b/org.fox.ttrss/src/main/res/xml/preferences.xml
@@ -84,6 +84,12 @@
android:summary="@string/pref_headlines_show_content_long"
android:title="@string/pref_headlines_show_content" />
+ <org.fox.ttrss.util.LessBrokenSwitchPreference
+ android:defaultValue="true"
+ android:key="headlines_swipe_to_dismiss"
+ android:summary="Disables headlines context menu"
+ android:title="Swipe to dismiss" />
+
<!-- <org.fox.ttrss.util.LessBrokenSwitchPreference
android:defaultValue="true"
android:key="headlines_show_flavor_image"