Support lift Appbar when scroll, use CollapsingAppbar on gallery detail for long title

This commit is contained in:
tarsin committed 2022-11-16 21:50:31 +08:00
1 parent 2da436189a
commit 545eed98a7
14 files changed
+206 -29

No files matched your search

@@ -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) }
}
}
@@ -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);
@@ -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<HistoryInfo>() {
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]
@@ -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() {
@@ -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);
@@ -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
}
}