From f44e5a67123d47c1637fcc8f7b25537c4fabe8ea Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 2 Oct 2020 16:11:14 +0300 Subject: fix headlines fab --- org.fox.ttrss/build.gradle | 1 - .../main/java/org/fox/ttrss/ArticleFragment.java | 4 +- .../main/java/org/fox/ttrss/HeadlinesFragment.java | 22 ++++---- .../fox/ttrss/offline/OfflineArticleFragment.java | 4 +- .../ttrss/offline/OfflineHeadlinesFragment.java | 3 +- .../ttrss/util/FabAwareScrollingViewBehavior.java | 61 ++++++++++++++++++++++ .../src/main/res/layout/fragment_article.xml | 45 +++++++--------- .../src/main/res/layout/fragment_headlines.xml | 19 ++++--- .../main/res/layout/fragment_headlines_offline.xml | 19 ++++--- org.fox.ttrss/src/main/res/values-night/style.xml | 2 +- org.fox.ttrss/src/main/res/values/style.xml | 6 +-- 11 files changed, 119 insertions(+), 67 deletions(-) create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/util/FabAwareScrollingViewBehavior.java (limited to 'org.fox.ttrss') diff --git a/org.fox.ttrss/build.gradle b/org.fox.ttrss/build.gradle index a211b0d7..5eda4c64 100755 --- a/org.fox.ttrss/build.gradle +++ b/org.fox.ttrss/build.gradle @@ -64,7 +64,6 @@ dependencies { implementation 'com.otaliastudios:nestedscrollcoordinatorlayout:1.0.3' implementation 'com.google.android.material:material:1.0.0' implementation 'com.google.code.gson:gson:2.8.5' - implementation 'com.shamanland:fab:0.0.8' implementation 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar' implementation 'me.relex:circleindicator:1.2.2@aar' implementation 'com.viewpagerindicator:library:2.4.1' diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java index cdb424c3..40250046 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java @@ -29,8 +29,6 @@ import android.widget.TextView; import androidx.core.widget.NestedScrollView; -import com.shamanland.fab.ShowHideOnScroll; - import org.fox.ttrss.types.Article; import org.fox.ttrss.types.Attachment; @@ -188,7 +186,7 @@ public class ArticleFragment extends StateSavedFragment { if (scrollView != null && m_fab != null) { if (m_prefs.getBoolean("enable_article_fab", true)) { - scrollView.setOnTouchListener(new ShowHideOnScroll(m_fab)); + //scrollView.setOnTouchListener(new ShowHideOnScroll(m_fab)); m_fab.setOnClickListener(new OnClickListener() { @Override 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 6d04096b..3365b3f0 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 @@ -68,10 +68,9 @@ import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; import com.bumptech.glide.request.target.Target; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import com.google.gson.JsonElement; -import com.shamanland.fab.FloatingActionButton; -import com.shamanland.fab.ShowHideOnScroll; import org.fox.ttrss.glide.ProgressTarget; import org.fox.ttrss.types.Article; @@ -126,6 +125,7 @@ public class HeadlinesFragment extends StateSavedFragment { @State boolean m_compactLayoutMode = false; private RecyclerView m_list; private LinearLayoutManager m_layoutManager; + private FloatingActionButton m_fab; private MediaPlayer m_mediaPlayer; private TextureView m_activeTexture; @@ -342,7 +342,7 @@ public class HeadlinesFragment extends StateSavedFragment { m_list.setAdapter(m_adapter); - FloatingActionButton fab = view.findViewById(R.id.headlines_fab); + m_fab = view.findViewById(R.id.headlines_fab); if (m_prefs.getBoolean("headlines_swipe_to_dismiss", true) && !m_prefs.getBoolean("headlines_mark_read_scroll", false) ) { @@ -418,17 +418,14 @@ public class HeadlinesFragment extends StateSavedFragment { } if (! (getActivity() instanceof DetailActivity)) { - - m_list.setOnTouchListener(new ShowHideOnScroll(fab)); - fab.setOnClickListener(new OnClickListener() { + m_fab.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { refresh(false); } }); - } else { - fab.setVisibility(View.GONE); + m_fab.hide(); } /*if (m_activity.isSmallScreen()) { @@ -476,6 +473,14 @@ public class HeadlinesFragment extends StateSavedFragment { public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); + if (! (getActivity() instanceof DetailActivity)) { + if (dy > 0) { + m_fab.hide(); + } else if (dy < 0) { + m_fab.show(); + } + } + int firstVisibleItem = m_layoutManager.findFirstVisibleItemPosition(); int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition(); @@ -505,7 +510,6 @@ public class HeadlinesFragment extends StateSavedFragment { refresh(true); } }, 100); - } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java index efeb6b71..f34449f5 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java @@ -31,8 +31,6 @@ import android.widget.TextView; import androidx.core.widget.NestedScrollView; import androidx.fragment.app.Fragment; -import com.shamanland.fab.ShowHideOnScroll; - import org.fox.ttrss.R; import org.fox.ttrss.util.ImageCacheService; import org.jsoup.Jsoup; @@ -212,7 +210,7 @@ public class OfflineArticleFragment extends Fragment { if (scrollView != null && m_fab != null) { if (m_prefs.getBoolean("enable_article_fab", true)) { - scrollView.setOnTouchListener(new ShowHideOnScroll(m_fab)); + //scrollView.setOnTouchListener(new ShowHideOnScroll(m_fab)); m_fab.setOnClickListener(new OnClickListener() { @Override diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java index d488a42b..aab2d5db 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java @@ -57,7 +57,6 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; -import com.shamanland.fab.FloatingActionButton; import org.fox.ttrss.Application; import org.fox.ttrss.CommonActivity; @@ -356,7 +355,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis m_list = view.findViewById(R.id.headlines_list); - FloatingActionButton fab = view.findViewById(R.id.headlines_fab); + View fab = view.findViewById(R.id.headlines_fab); fab.setVisibility(View.GONE); if (m_activity.isSmallScreen()) { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FabAwareScrollingViewBehavior.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FabAwareScrollingViewBehavior.java new file mode 100644 index 00000000..0868e6ea --- /dev/null +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/FabAwareScrollingViewBehavior.java @@ -0,0 +1,61 @@ +package org.fox.ttrss.util; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.ViewCompat; + +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.List; + +public class FabAwareScrollingViewBehavior extends AppBarLayout.ScrollingViewBehavior { + + public FabAwareScrollingViewBehavior(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { + return super.layoutDependsOn(parent, child, dependency) || + dependency instanceof FloatingActionButton; + } + + @Override + public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, + @NonNull View child, @NonNull View directTargetChild, + @NonNull View target, int axes, int type) { + // Ensure we react to vertical scrolling + return axes == ViewCompat.SCROLL_AXIS_VERTICAL || + super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, axes, type); + } + + @Override + public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, + @NonNull View child, @NonNull View target, int dx, int dy, + @NonNull int[] consumed, int type) { + super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type); + + if (dy > 0) { + // User scrolled down -> hide the FAB + List dependencies = coordinatorLayout.getDependencies(child); + for (View view : dependencies) { + if (view instanceof FloatingActionButton) { + ((FloatingActionButton) view).hide(); + } + } + } else if (dy < 0) { + // User scrolled up -> show the FAB + List dependencies = coordinatorLayout.getDependencies(child); + for (View view : dependencies) { + if (view instanceof FloatingActionButton) { + ((FloatingActionButton) view).show(); + } + } + } + } +} \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/fragment_article.xml b/org.fox.ttrss/src/main/res/layout/fragment_article.xml index e9fea26c..d14f6d88 100755 --- a/org.fox.ttrss/src/main/res/layout/fragment_article.xml +++ b/org.fox.ttrss/src/main/res/layout/fragment_article.xml @@ -5,7 +5,6 @@ android:layout_height="match_parent" android:background="?articleBackground"> - + android:layout_height="wrap_content"> + + + android:layout_height="match_parent"> @@ -114,27 +122,26 @@ + + + android:layout_height="match_parent"> - - - - - + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/fragment_headlines_offline.xml b/org.fox.ttrss/src/main/res/layout/fragment_headlines_offline.xml index 56a1137a..170eab8d 100755 --- a/org.fox.ttrss/src/main/res/layout/fragment_headlines_offline.xml +++ b/org.fox.ttrss/src/main/res/layout/fragment_headlines_offline.xml @@ -18,15 +18,14 @@ android:layout_height="match_parent" /> - + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/values-night/style.xml b/org.fox.ttrss/src/main/res/values-night/style.xml index c81d4b31..e9b143df 100644 --- a/org.fox.ttrss/src/main/res/values-night/style.xml +++ b/org.fox.ttrss/src/main/res/values-night/style.xml @@ -29,7 +29,7 @@ @android:color/white @android:color/transparent @android:color/white - @style/FabTheme + #e0e0e0 ?colorPrimary #303030 diff --git a/org.fox.ttrss/src/main/res/values/style.xml b/org.fox.ttrss/src/main/res/values/style.xml index 6dbda125..ecc13527 100755 --- a/org.fox.ttrss/src/main/res/values/style.xml +++ b/org.fox.ttrss/src/main/res/values/style.xml @@ -36,7 +36,7 @@ @android:color/transparent @android:color/black @android:color/black - @style/FabTheme + ?colorPrimary #cccccc @@ -142,8 +142,8 @@ - + --> \ No newline at end of file -- cgit v1.2.3