diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CollapsingToolbarScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/CollapsingToolbarScene.kt new file mode 100644 index 000000000..7b919044f --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CollapsingToolbarScene.kt @@ -0,0 +1,19 @@ +package com.hippo.ehviewer.ui.scene + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.hippo.ehviewer.R + +abstract class CollapsingToolbarScene : ToolbarScene() { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate(R.layout.scene_collapsing_toolbar, container, false) as ViewGroup + mToolbar = view.findViewById(R.id.toolbar) + val contentView = onCreateViewWithToolbar(inflater, view, savedInstanceState) + return view.apply { addView(contentView, 0) } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 331ef1707..b7f5a8cda 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -61,6 +61,7 @@ import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; +import androidx.core.widget.NestedScrollView; import com.google.android.material.progressindicator.CircularProgressIndicator; import com.google.android.material.snackbar.Snackbar; @@ -120,7 +121,6 @@ import com.hippo.yorozuya.AssertUtils; import com.hippo.yorozuya.FileUtils; import com.hippo.yorozuya.IOUtils; import com.hippo.yorozuya.IntIdGenerator; -import com.hippo.yorozuya.SimpleHandler; import com.hippo.yorozuya.ViewUtils; import com.hippo.yorozuya.collect.IntList; @@ -135,7 +135,7 @@ import java.util.List; import okhttp3.HttpUrl; import rikka.core.res.ResourcesKt; -public class GalleryDetailScene extends ToolbarScene implements View.OnClickListener, +public class GalleryDetailScene extends CollapsingToolbarScene implements View.OnClickListener, com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener, View.OnLongClickListener { public final static String KEY_ACTION = "action"; @@ -570,7 +570,7 @@ public class GalleryDetailScene extends ToolbarScene implements View.OnClickList View view = inflater.inflate(R.layout.scene_gallery_detail, container, false); ViewGroup main = (ViewGroup) ViewUtils.$$(view, R.id.main); - ScrollView mainView = (ScrollView) ViewUtils.$$(main, R.id.scroll_view); + NestedScrollView mainView = (NestedScrollView) ViewUtils.$$(main, R.id.scroll_view); View progressView = ViewUtils.$$(main, R.id.progress_view); mTip = (TextView) ViewUtils.$$(main, R.id.tip); mViewTransition = new ViewTransition(mainView, progressView, mTip); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt index fc6b2a1e2..0ea31ff9f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt @@ -35,7 +35,6 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.hippo.app.BaseDialogBuilder -import com.hippo.easyrecyclerview.EasyRecyclerView import com.hippo.easyrecyclerview.FastScroller import com.hippo.easyrecyclerview.HandlerDrawable import com.hippo.ehviewer.* @@ -61,7 +60,7 @@ import kotlinx.coroutines.launch import rikka.core.res.resolveColor class HistoryScene : ToolbarScene() { - private var mRecyclerView: EasyRecyclerView? = null + private var mRecyclerView: RecyclerView? = null private val mAdapter: HistoryAdapter by lazy { HistoryAdapter(object : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: HistoryInfo, newItem: HistoryInfo): Boolean { @@ -132,7 +131,7 @@ class HistoryScene : ToolbarScene() { ): View { val view = inflater.inflate(R.layout.scene_history, container, false) val content = ViewUtils.`$$`(view, R.id.content) - val recyclerView = ViewUtils.`$$`(content, R.id.recycler_view) as EasyRecyclerView + val recyclerView = ViewUtils.`$$`(content, R.id.recycler_view) as RecyclerView val mFastScroller = ViewUtils.`$$`(content, R.id.fast_scroller) as FastScroller val mTip = ViewUtils.`$$`(view, R.id.tip) as TextView ViewTransition(content, mTip) @@ -373,7 +372,6 @@ class HistoryScene : ToolbarScene() { private val mGi: GalleryInfo ) : DialogInterface.OnClickListener { override fun onClick(dialog: DialogInterface, which: Int) { - mRecyclerView?.outOfCustomChoiceMode() val downloadManager = EhApplication.getDownloadManager(requireContext()) val downloadInfo = downloadManager.getDownloadInfo(mGi.gid) ?: return val label = if (which == 0) null else mLabels[which] diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.kt index 498d3e49d..63166eb96 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.kt @@ -23,10 +23,11 @@ import android.view.ViewGroup import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.appcompat.widget.Toolbar +import com.google.android.material.appbar.AppBarLayout import com.hippo.ehviewer.R abstract class ToolbarScene : BaseScene() { - private var mToolbar: Toolbar? = null + protected var mToolbar: Toolbar? = null private var mTempTitle: CharSequence? = null abstract fun onCreateViewWithToolbar( @@ -41,7 +42,7 @@ abstract class ToolbarScene : BaseScene() { val view = inflater.inflate(R.layout.scene_toolbar, container, false) as ViewGroup mToolbar = view.findViewById(R.id.toolbar) val contentView = onCreateViewWithToolbar(inflater, view, savedInstanceState) - return view.apply { addView(contentView, 1) } + return view.apply { addView(contentView, 0) } } override fun onDestroyView() { diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index 37c63915d..6d12537e0 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -88,8 +88,12 @@ public class ContentLayout extends FrameLayout { init(context); } + protected int getLayout() { + return R.layout.widget_content_layout; + } + private void init(Context context) { - ((Activity) context).getLayoutInflater().inflate(R.layout.widget_content_layout, this); + ((Activity) context).getLayoutInflater().inflate(getLayout(), this); setClipChildren(false); setClipToPadding(false); diff --git a/app/src/main/java/com/hippo/widget/ContentLayout2.kt b/app/src/main/java/com/hippo/widget/ContentLayout2.kt new file mode 100644 index 000000000..0389bcca0 --- /dev/null +++ b/app/src/main/java/com/hippo/widget/ContentLayout2.kt @@ -0,0 +1,13 @@ +package com.hippo.widget + +import android.content.Context +import android.util.AttributeSet +import com.hippo.ehviewer.R + +class ContentLayout2 @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null +) : ContentLayout(context, attrs) { + override fun getLayout(): Int { + return R.layout.widget_content_layout_2 + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/scene_collapsing_toolbar.xml b/app/src/main/res/layout/scene_collapsing_toolbar.xml new file mode 100644 index 000000000..a2e888d25 --- /dev/null +++ b/app/src/main/res/layout/scene_collapsing_toolbar.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/scene_download.xml b/app/src/main/res/layout/scene_download.xml index 79e349b41..f8e8adb3d 100644 --- a/app/src/main/res/layout/scene_download.xml +++ b/app/src/main/res/layout/scene_download.xml @@ -17,7 +17,8 @@ + android:layout_height="match_parent" + app:fitsSystemWindowsInsets="top"> diff --git a/app/src/main/res/layout/scene_gallery_comments.xml b/app/src/main/res/layout/scene_gallery_comments.xml index 18bdbf030..9edbdefff 100644 --- a/app/src/main/res/layout/scene_gallery_comments.xml +++ b/app/src/main/res/layout/scene_gallery_comments.xml @@ -29,10 +29,11 @@ android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingTop="?actionBarSize" android:clipToPadding="false" android:paddingLeft="@dimen/keyline_margin" android:paddingRight="@dimen/keyline_margin" - app:fitsSystemWindowsInsets="bottom" /> + app:fitsSystemWindowsInsets="bottom|top" /> diff --git a/app/src/main/res/layout/scene_gallery_detail.xml b/app/src/main/res/layout/scene_gallery_detail.xml index e9ad0e3e1..682abd5fc 100644 --- a/app/src/main/res/layout/scene_gallery_detail.xml +++ b/app/src/main/res/layout/scene_gallery_detail.xml @@ -18,16 +18,20 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + app:fitsSystemWindowsInsets="top"> - + android:layout_height="match_parent" + android:paddingTop="?collapsingToolbarLayoutLargeSize" + android:clipToPadding="false" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + - + app:fitsSystemWindowsInsets="bottom|top" /> diff --git a/app/src/main/res/layout/scene_history.xml b/app/src/main/res/layout/scene_history.xml index 09df602ed..d90ae2150 100644 --- a/app/src/main/res/layout/scene_history.xml +++ b/app/src/main/res/layout/scene_history.xml @@ -17,7 +17,8 @@ + android:layout_height="match_parent" + app:fitsSystemWindowsInsets="top"> diff --git a/app/src/main/res/layout/scene_toolbar.xml b/app/src/main/res/layout/scene_toolbar.xml index 7882ca9c1..32bfa0538 100644 --- a/app/src/main/res/layout/scene_toolbar.xml +++ b/app/src/main/res/layout/scene_toolbar.xml @@ -14,24 +14,22 @@ ~ limitations under the License. --> - + android:layout_height="match_parent"> + app:fitsSystemWindowsInsets="top"> + app:layout_scrollFlags="scroll|enterAlways" /> - + diff --git a/app/src/main/res/layout/widget_content_layout_2.xml b/app/src/main/res/layout/widget_content_layout_2.xml new file mode 100644 index 000000000..7fe0fac89 --- /dev/null +++ b/app/src/main/res/layout/widget_content_layout_2.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + +