From 39d707061fc481ca8163444f224339fe6b2314b1 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 2 Oct 2020 15:16:55 +0300 Subject: use coordinator layout / appbarlayout to deal with collapsing toolbars and article header --- org.fox.ttrss/build.gradle | 2 + .../main/java/org/fox/ttrss/ArticleFragment.java | 25 +---- .../main/java/org/fox/ttrss/HeadlinesFragment.java | 42 +++------ .../fox/ttrss/offline/OfflineArticleFragment.java | 28 +----- .../ttrss/offline/OfflineHeadlinesFragment.java | 32 ++----- .../org/fox/ttrss/util/NoChildFocusScrollView.java | 33 ------- .../org/fox/ttrss/util/NotifyingScrollView.java | 45 --------- .../src/main/res/layout/activity_detail_phone.xml | 27 ++++-- .../src/main/res/layout/activity_master_phone.xml | 26 +++++- .../src/main/res/layout/fragment_article.xml | 102 +++++++++++---------- org.fox.ttrss/src/main/res/layout/toolbar.xml | 1 + 11 files changed, 127 insertions(+), 236 deletions(-) delete mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/util/NoChildFocusScrollView.java delete mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/util/NotifyingScrollView.java (limited to 'org.fox.ttrss') diff --git a/org.fox.ttrss/build.gradle b/org.fox.ttrss/build.gradle index 2e8e7918..a211b0d7 100755 --- a/org.fox.ttrss/build.gradle +++ b/org.fox.ttrss/build.gradle @@ -60,6 +60,8 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.browser:browser:1.0.0' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' + 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' 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 132810b8..cdb424c3 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 @@ -25,14 +25,14 @@ import android.webkit.WebView.HitTestResult; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.ScrollView; 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; -import org.fox.ttrss.util.NotifyingScrollView; import java.net.MalformedURLException; import java.net.URL; @@ -40,7 +40,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import androidx.appcompat.app.ActionBar; import icepick.State; public class ArticleFragment extends StateSavedFragment { @@ -184,27 +183,9 @@ public class ArticleFragment extends StateSavedFragment { return view; } */ - NotifyingScrollView scrollView = view.findViewById(R.id.article_scrollview); + NestedScrollView scrollView = view.findViewById(R.id.article_scrollview); m_fab = view.findViewById(R.id.article_fab); - if (scrollView != null && m_activity.isSmallScreen()) { - view.findViewById(R.id.article_heading_spacer).setVisibility(View.VISIBLE); - - scrollView.setOnScrollChangedListener(new NotifyingScrollView.OnScrollChangedListener() { - @Override - public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) { - ActionBar ab = m_activity.getSupportActionBar(); - - if (t >= oldt && t >= ab.getHeight()) { - ab.hide(); - } else if (t <= ab.getHeight() || oldt - t >= 10) { - ab.show(); - } - - } - }); - } - if (scrollView != null && m_fab != null) { if (m_prefs.getBoolean("enable_article_fab", true)) { scrollView.setOnTouchListener(new ShowHideOnScroll(m_fab)); 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 71fbdd08..6d04096b 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 @@ -50,6 +50,16 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.core.app.ActivityCompat; +import androidx.core.app.ActivityOptionsCompat; +import androidx.core.view.ViewCompat; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; import com.bumptech.glide.Glide; @@ -81,16 +91,6 @@ import java.util.HashMap; import java.util.List; import java.util.TimeZone; -import androidx.appcompat.app.ActionBar; -import androidx.core.app.ActivityCompat; -import androidx.core.app.ActivityOptionsCompat; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.ItemTouchHelper; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import icepick.State; import jp.wasabeef.glide.transformations.CropCircleTransformation; @@ -431,18 +431,16 @@ public class HeadlinesFragment extends StateSavedFragment { fab.setVisibility(View.GONE); } - if (m_activity.isSmallScreen()) { + /*if (m_activity.isSmallScreen()) { View layout = inflater.inflate(R.layout.headlines_heading_spacer, m_list, false); m_adapter.addHeaderView(layout); m_swipeLayout.setProgressViewOffset(false, 0, m_activity.getResources().getDimensionPixelSize(R.dimen.abc_action_bar_default_height_material) + m_activity.getResources().getDimensionPixelSize(R.dimen.abc_action_bar_default_padding_end_material) + 15); - } + }*/ m_list.setOnScrollListener(new RecyclerView.OnScrollListener() { - boolean m_forcePhoneLayout = m_prefs.getBoolean("force_phone_layout", false); - @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); @@ -499,22 +497,6 @@ public class HeadlinesFragment extends StateSavedFragment { } } - if ((m_forcePhoneLayout || !m_activity.isTablet()) && m_articles.size() > 0) { - m_amountScrolled += dy; - ActionBar bar = m_activity.getSupportActionBar(); - - if (dy > 0 && m_amountScrolled >= m_scrollToToggleBar) { - bar.hide(); - m_amountScrolled = 0; - } else if (dy < 0 && m_amountScrolled <= -m_scrollToToggleBar) { - bar.show(); - m_amountScrolled = 0; - } - - } - - //Log.d(TAG, "onScrolled: " + m_refreshInProgress + " " + m_lazyLoadDisabled + " " + lastVisibleItem + " " + m_articles.size()); - if (!m_refreshInProgress && !m_lazyLoadDisabled && lastVisibleItem >= m_articles.size() - 5) { m_refreshInProgress = true; new Handler().postDelayed(new Runnable() { 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 eae50dcb..efeb6b71 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 @@ -26,14 +26,15 @@ import android.webkit.WebView.HitTestResult; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.ScrollView; 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.fox.ttrss.util.NotifyingScrollView; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -46,9 +47,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import androidx.appcompat.app.ActionBar; -import androidx.fragment.app.Fragment; - public class OfflineArticleFragment extends Fragment { private final String TAG = this.getClass().getSimpleName(); @@ -209,27 +207,9 @@ public class OfflineArticleFragment extends Fragment { final String link = m_cursor.getString(m_cursor.getColumnIndex("link")); - NotifyingScrollView scrollView = view.findViewById(R.id.article_scrollview); + NestedScrollView scrollView = view.findViewById(R.id.article_scrollview); m_fab = view.findViewById(R.id.article_fab); - if (scrollView != null && m_activity.isSmallScreen()) { - view.findViewById(R.id.article_heading_spacer).setVisibility(View.VISIBLE); - - scrollView.setOnScrollChangedListener(new NotifyingScrollView.OnScrollChangedListener() { - @Override - public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) { - ActionBar ab = m_activity.getSupportActionBar(); - - if (t >= oldt && t >= ab.getHeight()) { - ab.hide(); - } else if (t <= ab.getHeight() || oldt - t >= 10) { - ab.show(); - } - - } - }); - } - if (scrollView != null && m_fab != null) { if (m_prefs.getBoolean("enable_article_fab", true)) { scrollView.setOnTouchListener(new ShowHideOnScroll(m_fab)); 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 811cc015..d488a42b 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 @@ -43,6 +43,13 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.core.app.ActivityCompat; +import androidx.core.app.ActivityOptionsCompat; +import androidx.core.view.ViewCompat; +import androidx.cursoradapter.widget.SimpleCursorAdapter; +import androidx.fragment.app.Fragment; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; import com.bumptech.glide.Glide; @@ -70,12 +77,6 @@ import java.util.HashMap; import java.util.List; import java.util.TimeZone; -import androidx.core.app.ActivityCompat; -import androidx.core.app.ActivityOptionsCompat; -import androidx.core.view.ViewCompat; -import androidx.cursoradapter.widget.SimpleCursorAdapter; -import androidx.fragment.app.Fragment; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import jp.wasabeef.glide.transformations.CropCircleTransformation; public class OfflineHeadlinesFragment extends Fragment implements OnItemClickListener, AbsListView.OnScrollListener { @@ -105,9 +106,6 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis private boolean m_compactLayoutMode = false; private ListView m_list; - private int m_listPreviousVisibleItem; - - boolean m_forcePhoneLayout; public void initialize(int feedId, boolean isCat, boolean compactMode) { m_feedId = feedId; @@ -358,8 +356,6 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis m_list = view.findViewById(R.id.headlines_list); - m_forcePhoneLayout = m_prefs.getBoolean("force_phone_layout", false); - FloatingActionButton fab = view.findViewById(R.id.headlines_fab); fab.setVisibility(View.GONE); @@ -1323,20 +1319,6 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis } } } - - if (m_forcePhoneLayout || !m_activity.isTablet()) { - if (m_adapter.getCount() > 0) { - if (firstVisibleItem > m_listPreviousVisibleItem) { - m_activity.getSupportActionBar().hide(); - } else if (firstVisibleItem < m_listPreviousVisibleItem) { - m_activity.getSupportActionBar().show(); - } - } else { - m_activity.getSupportActionBar().show(); - } - - m_listPreviousVisibleItem = firstVisibleItem; - } } @Override diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/NoChildFocusScrollView.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/NoChildFocusScrollView.java deleted file mode 100644 index d7fafc80..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/NoChildFocusScrollView.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.fox.ttrss.util; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.webkit.WebView; - -public class NoChildFocusScrollView extends NotifyingScrollView { - - public NoChildFocusScrollView(Context context) { - super(context); - // TODO Auto-generated constructor stub - } - - - public NoChildFocusScrollView(Context context, AttributeSet attrs) { - super(context, attrs); - // TODO Auto-generated constructor stub - } - - public NoChildFocusScrollView(Context context, AttributeSet attrs, - int defStyle) { - super(context, attrs, defStyle); - // TODO Auto-generated constructor stub - } - - @Override - public void requestChildFocus(View child, View focused) { - if (focused instanceof WebView ) - return; - super.requestChildFocus(child, focused); - } -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/NotifyingScrollView.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/NotifyingScrollView.java deleted file mode 100644 index e128856f..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/NotifyingScrollView.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.fox.ttrss.util; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.ScrollView; - -/** - * @author Cyril Mottier - */ -public class NotifyingScrollView extends ScrollView { - - /** - * @author Cyril Mottier - */ - public interface OnScrollChangedListener { - void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt); - } - - private OnScrollChangedListener mOnScrollChangedListener; - - public NotifyingScrollView(Context context) { - super(context); - } - - public NotifyingScrollView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public NotifyingScrollView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onScrollChanged(int l, int t, int oldl, int oldt) { - super.onScrollChanged(l, t, oldl, oldt); - if (mOnScrollChangedListener != null) { - mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt); - } - } - - public void setOnScrollChangedListener(OnScrollChangedListener listener) { - mOnScrollChangedListener = listener; - } - -} \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/activity_detail_phone.xml b/org.fox.ttrss/src/main/res/layout/activity_detail_phone.xml index e9cfdc35..157ad794 100644 --- a/org.fox.ttrss/src/main/res/layout/activity_detail_phone.xml +++ b/org.fox.ttrss/src/main/res/layout/activity_detail_phone.xml @@ -5,12 +5,28 @@ android:layout_width="fill_parent" android:layout_height="fill_parent"> - - + android:layout_height="match_parent"> + + + + + + + + + + + - \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/activity_master_phone.xml b/org.fox.ttrss/src/main/res/layout/activity_master_phone.xml index de3db618..d63d9fb9 100644 --- a/org.fox.ttrss/src/main/res/layout/activity_master_phone.xml +++ b/org.fox.ttrss/src/main/res/layout/activity_master_phone.xml @@ -5,7 +5,29 @@ android:layout_width="fill_parent" android:layout_height="fill_parent"> - + + + + + + + + + + + + + android:layout_height="fill_parent"/> - + android:layout_height="match_parent"> - - - - + android:layout_height="wrap_content"> @@ -117,7 +106,6 @@ android:gravity="right" android:layout_marginLeft="10dp" android:fontFamily="sans-serif-light" - android:text="Jan 01, 12:00" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="?headlineSecondaryTextColor" android:textSize="12sp" /> @@ -126,35 +114,52 @@ - + - - - + + + android:layout_height="match_parent" + android:orientation="vertical" > + + + + + + + + + - - + diff --git a/org.fox.ttrss/src/main/res/layout/toolbar.xml b/org.fox.ttrss/src/main/res/layout/toolbar.xml index 99235ca2..f5fb7654 100755 --- a/org.fox.ttrss/src/main/res/layout/toolbar.xml +++ b/org.fox.ttrss/src/main/res/layout/toolbar.xml @@ -4,6 +4,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:elevation="4dp" + app:layout_scrollFlags="scroll|enterAlways" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:layout_height="wrap_content" -- cgit v1.2.3