Convert all kotlin fragment to databinding

This commit is contained in:
tarsin committed 2023-01-02 12:46:48 +08:00
1 parent 540d290be2
commit 7e0fc2e364
8 files changed
+132 -102

No files matched your search

@@ -22,41 +22,24 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.appcompat.widget.Toolbar
import androidx.core.view.size
import com.google.android.material.appbar.AppBarLayout
import com.hippo.ehviewer.R
import com.hippo.ehviewer.databinding.SceneToolbarBinding
abstract class ToolbarScene : BaseScene() {
protected var mToolbar: Toolbar? = null
protected var mAppBarLayout: AppBarLayout? = null
private var mTempTitle: CharSequence? = null
abstract fun onCreateViewWithToolbar(
inflater: LayoutInflater,
container: ViewGroup?, savedInstanceState: Bundle?
): View
abstract class BaseToolbarScene : BaseScene(), ToolBarScene {
private lateinit var binding: SceneToolbarBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.scene_toolbar, container, false) as ViewGroup
mToolbar = view.findViewById(R.id.toolbar)
mAppBarLayout = view.findViewById(R.id.appbar)
val contentView = onCreateViewWithToolbar(inflater, view, savedInstanceState)
return view.apply { addView(contentView, 0) }
}
override fun onDestroyView() {
super.onDestroyView()
mToolbar = null
): View {
binding = SceneToolbarBinding.inflate(inflater, container, false)
val contentView = onCreateViewWithToolbar(inflater, binding.root, savedInstanceState)
return binding.root.apply { addView(contentView, 0) }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mToolbar?.apply {
mTempTitle?.let { title = it }
binding.toolbar.apply {
val menuResId = getMenuResId()
if (menuResId != 0) {
inflateMenu(menuResId)
@@ -66,32 +49,28 @@ abstract class ToolbarScene : BaseScene() {
}
}
fun hideMenu() {
mToolbar?.menu?.clear()
}
fun showMenu(menuResId: Int) {
if (mToolbar?.menu?.size != 0) return
mToolbar?.apply {
if (binding.toolbar.menu?.size != 0) return
binding.toolbar.apply {
inflateMenu(menuResId)
setOnMenuItemClickListener { item: MenuItem -> onMenuItemClick(item) }
}
}
open fun getMenuResId(): Int {
override fun getMenuResId(): Int {
return 0
}
open fun onMenuItemClick(item: MenuItem): Boolean {
override fun onMenuItemClick(item: MenuItem): Boolean {
return false
}
open fun onNavigationClick() {
override fun onNavigationClick() {
requireActivity().onBackPressedDispatcher.onBackPressed()
}
fun setNavigationIcon(@DrawableRes resId: Int) {
mToolbar?.setNavigationIcon(resId)
binding.toolbar.setNavigationIcon(resId)
}
fun setTitle(@StringRes resId: Int) {
@@ -99,11 +78,10 @@ abstract class ToolbarScene : BaseScene() {
}
fun setTitle(title: CharSequence?) {
mToolbar?.title = title
mTempTitle = title
binding.toolbar.title = title
}
fun setLiftOnScrollTargetView(view: View?) {
mAppBarLayout?.setLiftOnScrollTargetView(view)
override fun setLiftOnScrollTargetView(view: View?) {
binding.appbar.setLiftOnScrollTargetView(view)
}
}
}
@@ -2,25 +2,49 @@ package com.hippo.ehviewer.ui.scene
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import com.hippo.ehviewer.R
import androidx.annotation.DrawableRes
import com.hippo.ehviewer.databinding.SceneCollapsingToolbarBinding
abstract class CollapsingToolbarScene : ToolbarScene() {
abstract class CollapsingToolbarScene : BaseScene(), ToolBarScene {
private lateinit var binding: SceneCollapsingToolbarBinding
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)
mAppBarLayout = view.findViewById(R.id.appbar)
val contentView = onCreateViewWithToolbar(inflater, view, savedInstanceState)
return view.apply { addView(contentView, 0) }
): View {
binding = SceneCollapsingToolbarBinding.inflate(inflater, container, false)
val contentView = onCreateViewWithToolbar(inflater, binding.root, savedInstanceState)
return binding.root.apply { addView(contentView, 0) }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mAppBarLayout?.setExpanded(false, true)
binding.toolbar.apply {
val menuResId = getMenuResId()
if (menuResId != 0) {
inflateMenu(menuResId)
setOnMenuItemClickListener { item: MenuItem -> onMenuItemClick(item) }
}
setNavigationOnClickListener { onNavigationClick() }
}
binding.appbar.setExpanded(false, true)
}
override fun onNavigationClick() {
requireActivity().onBackPressedDispatcher.onBackPressed()
}
fun setNavigationIcon(@DrawableRes resId: Int) {
binding.toolbar.setNavigationIcon(resId)
}
override fun setLiftOnScrollTargetView(view: View?) {
binding.appbar.setLiftOnScrollTargetView(view)
}
fun setTitle(title: CharSequence?) {
binding.toolbar.title = title
}
}
@@ -28,7 +28,6 @@ import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
@@ -93,7 +92,7 @@ import eu.kanade.tachiyomi.ui.reader.ReaderActivity;
import rikka.core.res.ResourcesKt;
@SuppressLint("RtlHardcoded")
public class DownloadsScene extends ToolbarScene
public class DownloadsScene extends BaseToolbarScene
implements DownloadManager.DownloadInfoListener,
FabLayout.OnClickFabListener, FastScroller.OnDragHandlerListener {
@@ -276,8 +275,6 @@ public class DownloadsScene extends ToolbarScene
if (mAdapter != null) {
mAdapter.notifyDataSetChanged();
}
updateTitle();
Settings.putRecentDownloadLabel(mLabel);
}
@@ -374,6 +371,7 @@ public class DownloadsScene extends ToolbarScene
mFabLayout.setOnClickFabListener(this);
addAboveSnackView(mFabLayout);
updateTitle();
updateView();
return view;
@@ -95,7 +95,7 @@ import java.util.List;
import rikka.core.res.ResourcesKt;
public final class GalleryCommentsScene extends ToolbarScene
public final class GalleryCommentsScene extends BaseToolbarScene
implements View.OnClickListener, SwipeRefreshLayout.OnRefreshListener {
public static final String TAG = GalleryCommentsScene.class.getSimpleName();
@@ -63,7 +63,7 @@ import java.util.Locale;
import eu.kanade.tachiyomi.ui.reader.ReaderActivity;
public class GalleryPreviewsScene extends ToolbarScene {
public class GalleryPreviewsScene extends BaseToolbarScene {
public static final String KEY_GALLERY_INFO = "gallery_info";
private final static String KEY_HAS_FIRST_REFRESH = "has_first_refresh";
@@ -60,7 +60,7 @@ import kotlinx.coroutines.launch
import rikka.core.res.resolveColor
@SuppressLint("NotifyDataSetChanged")
class HistoryScene : ToolbarScene() {
class HistoryScene : BaseToolbarScene() {
lateinit var binding: SceneHistoryBinding
private val mAdapter: HistoryAdapter by lazy {
HistoryAdapter(object : DiffUtil.ItemCallback<HistoryInfo>() {
@@ -1,11 +1,11 @@
package com.hippo.ehviewer.ui.scene
import android.annotation.SuppressLint
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.text.TextUtils
import android.view.Gravity
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
@@ -17,7 +17,6 @@ import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.search.SearchBar
import com.google.android.material.search.SearchView
import com.google.android.material.search.SearchView.TransitionListener
import com.google.android.material.shape.MaterialShapeDrawable
@@ -25,17 +24,16 @@ import com.hippo.app.BaseDialogBuilder
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhTagDatabase
import com.hippo.ehviewer.databinding.SceneSearchbarBinding
import com.hippo.ehviewer.widget.SearchDatabase
import com.hippo.scene.StageActivity
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.launch
abstract class SearchBarScene : ToolbarScene() {
private var mSearchView: SearchView? = null
private var mRecyclerView: RecyclerView? = null
abstract class SearchBarScene : BaseScene(), ToolBarScene {
private lateinit var binding: SceneSearchbarBinding
private var mSuggestionList: List<Suggestion>? = null
private var mSuggestionAdapter: SuggestionAdapter? = null
private var mSuggestionProvider: SuggestionProvider? = null
@@ -46,40 +44,46 @@ abstract class SearchBarScene : ToolbarScene() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val view =
inflater.inflate(R.layout.scene_searchbar, container, false) as ViewGroup
mToolbar = view.findViewById(R.id.toolbar)
mAppBarLayout = view.findViewById(R.id.appbar)
mAppBarLayout?.statusBarForeground =
): View {
binding = SceneSearchbarBinding.inflate(inflater, container, false)
binding.appbar.statusBarForeground =
MaterialShapeDrawable.createWithElevationOverlay(context)
mSearchView = view.findViewById(R.id.searchview)
mRecyclerView = view.findViewById(R.id.search_bar_list)
mSearchView?.editText?.addTextChangedListener {
binding.searchview.editText.addTextChangedListener {
updateSuggestions()
}
mSearchView?.editText?.setOnEditorActionListener { _, _, _ ->
(mToolbar as SearchBar).text = mSearchView!!.text
mSearchView?.hide()
binding.searchview.editText.setOnEditorActionListener { _, _, _ ->
binding.toolbar.text = binding.searchview.text
binding.searchview.hide()
onApplySearch()
true
}
mSuggestionList = ArrayList()
mSuggestionAdapter = SuggestionAdapter(LayoutInflater.from(context))
mRecyclerView?.adapter = mSuggestionAdapter
binding.searchBarList.adapter = mSuggestionAdapter
val layoutManager = LinearLayoutManager(context)
mRecyclerView?.layoutManager = layoutManager
mSearchView?.addTransitionListener { _, _, newState ->
binding.searchBarList.layoutManager = layoutManager
binding.searchview.addTransitionListener { _, _, newState ->
if (newState == SearchView.TransitionState.SHOWING)
onSearchViewExpanded()
else if (newState == SearchView.TransitionState.HIDING)
onSearchViewHidden()
}
mSearchView?.addTransitionListener(mSearchViewOnBackPressedCallback)
binding.searchview.addTransitionListener(mSearchViewOnBackPressedCallback)
requireActivity().onBackPressedDispatcher.addCallback(mSearchViewOnBackPressedCallback)
val contentView = onCreateViewWithToolbar(inflater, view, savedInstanceState)
return view.apply { addView(contentView, 0) }
val contentView = onCreateViewWithToolbar(inflater, binding.root, savedInstanceState)
return binding.root.apply { addView(contentView, 0) }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.toolbar.apply {
val menuResId = getMenuResId()
if (menuResId != 0) {
inflateMenu(menuResId)
setOnMenuItemClickListener { item: MenuItem -> onMenuItemClick(item) }
}
setNavigationOnClickListener { onNavigationClick() }
}
}
override fun onDestroyView() {
@@ -118,35 +122,39 @@ abstract class SearchBarScene : ToolbarScene() {
}
fun setSearchBarHint(hint: String?) {
(mToolbar as? SearchBar)?.hint = hint
binding.toolbar.hint = hint
}
fun setSearchBarText(text: String?) {
(mToolbar as? SearchBar)?.text = text
binding.toolbar.text = text
}
fun setEditTextHint(hint: String?) {
mSearchView?.editText?.hint = hint
}
fun setEditTextText(text: String?) {
mSearchView?.setText(text)
}
fun setNavigationDrawable(drawable: Drawable?) {
(mToolbar as? SearchBar)?.navigationIcon = drawable
binding.searchview.editText.hint = hint
}
override fun onNavigationClick() {
toggleDrawer(Gravity.START)
}
override fun getMenuResId(): Int {
return 0
}
override fun onMenuItemClick(item: MenuItem): Boolean {
return false
}
override fun setLiftOnScrollTargetView(view: View?) {
binding.appbar.setLiftOnScrollTargetView(view)
}
fun setOnApplySearch(lambda: (String) -> Unit) {
onApplySearch = lambda
}
fun onApplySearch() {
val query = (mToolbar as SearchBar).text.toString().trim()
val query = binding.toolbar.text.toString().trim()
if (!mAllowEmptySearch && query.isEmpty()) {
return
}
@@ -263,8 +271,8 @@ abstract class SearchBarScene : ToolbarScene() {
}
override fun onClick() {
val edittext = mSearchView?.editText
edittext?.let {
val edittext = binding.searchview.editText
edittext.let {
val text = it.text.toString()
var temp = wrapTagKeyword(mKeyword) + " "
if (text.contains(" ")) {
@@ -287,7 +295,7 @@ abstract class SearchBarScene : ToolbarScene() {
}
override fun onClick() {
mSearchView?.editText?.run {
binding.searchview.editText.run {
setText(mKeyword)
setSelection(length())
}
@@ -319,12 +327,12 @@ abstract class SearchBarScene : ToolbarScene() {
}
}
if (scrollToTop) {
mRecyclerView?.scrollToPosition(0)
binding.searchBarList.scrollToPosition(0)
}
}
private fun mergedSuggestionFlow(): Flow<Suggestion> = flow {
mSearchView?.editText?.text?.toString()?.let { text ->
binding.searchview.editText.text?.toString()?.let { text ->
mSuggestionProvider?.run { providerSuggestions(text)?.forEach { emit(it) } }
mSearchDatabase.getSuggestions(text, 128).forEach { emit(KeywordSuggestion(it)) }
EhTagDatabase.takeIf { it.isInitialized() }?.run {
@@ -351,14 +359,14 @@ abstract class SearchBarScene : ToolbarScene() {
}
fun showSearchBar() {
mAppBarLayout?.setExpanded(true)
binding.appbar.setExpanded(true)
}
private val mSearchViewOnBackPressedCallback =
object : OnBackPressedCallback(false), TransitionListener {
override fun handleOnBackPressed() {
mSearchView?.let { (mToolbar as SearchBar).text = it.text }
mSearchView?.hide()
binding.searchview.let { binding.toolbar.text = it.text }
binding.searchview.hide()
}
override fun onStateChanged(
@@ -0,0 +1,22 @@
package com.hippo.ehviewer.ui.scene
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
interface ToolBarScene {
fun onCreateViewWithToolbar(
inflater: LayoutInflater,
container: ViewGroup?, savedInstanceState: Bundle?
): View
fun onNavigationClick()
fun getMenuResId(): Int
fun onMenuItemClick(item: MenuItem): Boolean
fun setLiftOnScrollTargetView(view: View?)
}