Convert all kotlin fragment to databinding
This commit is contained in:
1 parent
540d290be2
commit
7e0fc2e364
8 files changed
+132
-102
No files matched your search
+18
-40
@@ -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?)
|
||||
}
|
||||
Reference in new issue
Block a user