diff options
Diffstat (limited to 'org.fox.ttrss')
11 files changed, 127 insertions, 236 deletions
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"> - <FrameLayout - android:id="@+id/article_fragment" + <androidx.coordinatorlayout.widget.CoordinatorLayout + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?articleBackground"> - </FrameLayout> + android:layout_height="match_parent"> + + <com.google.android.material.appbar.AppBarLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <include layout="@layout/toolbar" android:id="@+id/toolbar" /> + + </com.google.android.material.appbar.AppBarLayout> + + <FrameLayout + android:id="@+id/article_fragment" + app:layout_behavior="@string/appbar_scrolling_view_behavior" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?articleBackground"> + </FrameLayout> + + </androidx.coordinatorlayout.widget.CoordinatorLayout> <FrameLayout android:id="@+id/headlines_fragment" @@ -20,5 +36,4 @@ android:background="?headlinesBackground"> </FrameLayout> - <include layout="@layout/toolbar" android:id="@+id/toolbar" /> </FrameLayout>
\ 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"> - <FrameLayout + <androidx.coordinatorlayout.widget.CoordinatorLayout + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <com.google.android.material.appbar.AppBarLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <include layout="@layout/toolbar" android:id="@+id/toolbar" /> + + </com.google.android.material.appbar.AppBarLayout> + + <FrameLayout + android:id="@+id/headlines_fragment" + app:layout_behavior="@string/appbar_scrolling_view_behavior" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?headlinesBackground" /> + + </androidx.coordinatorlayout.widget.CoordinatorLayout> + + <!-- <FrameLayout android:fitsSystemWindows="true" android:animateLayoutChanges="true" android:layout_width="match_parent" @@ -19,7 +41,7 @@ <include layout="@layout/toolbar" android:id="@+id/toolbar" /> - </FrameLayout> + </FrameLayout> --> <org.fox.ttrss.util.ScrimInsetsFrameLayout xmlns:app="http://schemas.android.com/apk/res-auto" 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 da8b13d7..e9fea26c 100755 --- a/org.fox.ttrss/src/main/res/layout/fragment_article.xml +++ b/org.fox.ttrss/src/main/res/layout/fragment_article.xml @@ -10,32 +10,23 @@ android:id="@+id/article_fullscreen_video" android:visibility="invisible" android:layout_width="fill_parent" - android:layout_height="fill_parent"></FrameLayout> + android:layout_height="fill_parent"/> - <org.fox.ttrss.util.NoChildFocusScrollView - android:id="@+id/article_scrollview" - android:scrollbars="vertical|horizontal" + <com.otaliastudios.nestedscrollcoordinatorlayout.NestedScrollCoordinatorLayout android:layout_width="match_parent" - android:layout_height="match_parent" - android:fillViewport="false" > + android:layout_height="match_parent"> - <LinearLayout + <com.google.android.material.appbar.AppBarLayout + android:background="?articleHeader" + android:elevation="0dp" + app:elevation="0dp" android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" > - - <!-- hack for hiding actionbar on small devices --> - <FrameLayout - android:id="@+id/article_heading_spacer" - android:visibility="gone" - android:layout_marginTop="@dimen/abc_action_bar_default_height_material" - android:layout_width="match_parent" - android:layout_height="match_parent"/> + android:layout_height="wrap_content"> <LinearLayout + app:layout_scrollFlags="scroll|enterAlways" android:padding="16dp" android:id="@+id/article_header" - android:background="?articleHeader" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" @@ -87,14 +78,13 @@ android:layout_weight="1" android:fontFamily="sans-serif-light" android:paddingTop="8dp" - android:text="24 comments" android:textColor="?headlineSecondaryTextColor" android:textSize="12sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" + android:layout_weight="1" android:paddingTop="8dp"> <TextView @@ -105,7 +95,6 @@ android:ellipsize="middle" android:singleLine="true" android:fontFamily="sans-serif-light" - android:text="Example Feed" android:textColor="?headlineSecondaryTextColor" android:textSize="12sp" /> @@ -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 @@ </LinearLayout> - <View - android:layout_gravity="top|center_horizontal" - android:layout_width="match_parent" - android:layout_height="1dp" - android:background="?articleHeaderSeparator"/> + </com.google.android.material.appbar.AppBarLayout> - <TextView - android:id="@+id/note" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1" - android:background="?articleNoteBackground" - android:textColor="?articleNoteTextColor" - android:textSize="12sp" - android:text="[Article note]" - android:paddingLeft="16dp" - android:paddingTop="8dp" - android:paddingRight="16dp" - android:paddingBottom="8dp" /> - - <org.fox.ttrss.util.LessBrokenWebView - android:layout_margin="16dp" - android:id="@+id/article_content" - android:scrollbars="none" + <androidx.core.widget.NestedScrollView + android:id="@+id/article_scrollview" + android:scrollbars="vertical|horizontal" + app:layout_behavior="@string/appbar_scrolling_view_behavior" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fillViewport="false" > + + <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="match_parent" + android:orientation="vertical" > + + <View + android:layout_gravity="top|center_horizontal" + android:layout_width="match_parent" + android:layout_height="1dp" + android:background="?articleHeaderSeparator"/> + + <TextView + android:id="@+id/note" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:background="?articleNoteBackground" + android:textColor="?articleNoteTextColor" + android:textSize="12sp" + android:text="[Article note]" + android:paddingLeft="16dp" + android:paddingTop="8dp" + android:paddingRight="16dp" + android:paddingBottom="8dp" /> + + <org.fox.ttrss.util.LessBrokenWebView + android:layout_margin="16dp" + android:id="@+id/article_content" + android:scrollbars="none" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + </LinearLayout> + </androidx.core.widget.NestedScrollView> - </LinearLayout> - </org.fox.ttrss.util.NoChildFocusScrollView> + </com.otaliastudios.nestedscrollcoordinatorlayout.NestedScrollCoordinatorLayout> <com.shamanland.fab.FloatingActionButton android:id="@+id/article_fab" @@ -170,7 +175,6 @@ <TextView android:layout_width="match_parent" android:layout_height="match_parent" - android:text="[status message]" android:id="@+id/article_status_message" android:gravity="center" android:visibility="gone" /> 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" |