搜索样式 #281
This commit is contained in:
@@ -4,13 +4,17 @@ package io.legado.app.ui.book.changesource
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.postDelayed
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle.State.STARTED
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
@@ -112,6 +116,7 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
viewModel.searchFinishCallback = null
|
||||
viewModel.stopSearch()
|
||||
}
|
||||
|
||||
private fun showTitle() {
|
||||
@@ -210,24 +215,31 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
|
||||
}
|
||||
}
|
||||
|
||||
private var switchHandler: Handler? = null
|
||||
private var switchRunnable: Runnable? = null
|
||||
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun initLiveData() {
|
||||
viewModel.searchStateData.observe(viewLifecycleOwner) {
|
||||
binding.refreshProgressBar.isVisible = it
|
||||
|
||||
if (it) {
|
||||
viewModel.searchStateData.observe(viewLifecycleOwner) { isSearching ->
|
||||
if (isSearching) {
|
||||
binding.refreshProgressBar.isInvisible = false
|
||||
startStopMenuItem?.let { item ->
|
||||
item.setIcon(R.drawable.ic_stop_black_24dp)
|
||||
item.setTitle(R.string.stop)
|
||||
}
|
||||
} else {
|
||||
binding.refreshProgressBar.isIndeterminate = false
|
||||
binding.refreshProgressBar.progress = 0
|
||||
binding.refreshProgressBar.isInvisible = true
|
||||
startStopMenuItem?.let { item ->
|
||||
item.setIcon(R.drawable.ic_refresh)
|
||||
item.setTitle(R.string.refresh)
|
||||
}
|
||||
}
|
||||
//binding.toolBar.menu.applyTint(requireContext())
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(STARTED) {
|
||||
viewModel.searchDataFlow.conflate().collect {
|
||||
@@ -243,16 +255,48 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(STARTED) {
|
||||
var canSwitchToDeterminate = false
|
||||
|
||||
switchHandler?.removeCallbacks(switchRunnable ?: Runnable { })
|
||||
switchHandler = Handler(Looper.getMainLooper())
|
||||
switchRunnable = Runnable { canSwitchToDeterminate = true }
|
||||
switchHandler?.postDelayed(switchRunnable!!, 5000)
|
||||
|
||||
viewModel.changeSourceProgress
|
||||
.drop(1)
|
||||
.collect { (count, name) ->
|
||||
val total = viewModel.totalSourceCount
|
||||
val progress = if (total > 0) (count * 100 / total) else 0
|
||||
val progressPercent = if (total > 0) (count * 100f / total) else 0f
|
||||
|
||||
binding.refreshProgressBar.isIndeterminate = true
|
||||
binding.refreshProgressBar.show()
|
||||
|
||||
binding.refreshProgressBar.isIndeterminate = false
|
||||
binding.refreshProgressBar.progress = progress
|
||||
binding.llInfo.visible()
|
||||
|
||||
if (count == 0) {
|
||||
canSwitchToDeterminate = false
|
||||
switchHandler?.removeCallbacks(switchRunnable!!)
|
||||
switchHandler?.postDelayed(switchRunnable!!, 5000)
|
||||
}
|
||||
|
||||
val shouldBeIndeterminate = when {
|
||||
!canSwitchToDeterminate -> true
|
||||
progressPercent in 10f..90f -> false
|
||||
else -> true
|
||||
}
|
||||
|
||||
if (shouldBeIndeterminate) {
|
||||
if (!binding.refreshProgressBar.isIndeterminate) {
|
||||
binding.refreshProgressBar.isIndeterminate = true
|
||||
binding.refreshProgressBar.show()
|
||||
}
|
||||
} else {
|
||||
if (binding.refreshProgressBar.isIndeterminate) {
|
||||
binding.refreshProgressBar.isIndeterminate = false
|
||||
}
|
||||
binding.refreshProgressBar.setProgressCompat(progressPercent.toInt(), true)
|
||||
}
|
||||
|
||||
binding.tvProgress.text = "$count / $total"
|
||||
binding.tvResult.text =
|
||||
getString(R.string.change_source_progress, adapter.itemCount)
|
||||
|
||||
Reference in New Issue
Block a user