@ -10,7 +10,6 @@ import androidx.activity.viewModels
import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.SearchView
import androidx.documentfile.provider.DocumentFile
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.LiveData
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.ItemTouchHelper
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.snackbar.Snackbar
import io.legado.app.R
import io.legado.app.R
@ -40,6 +39,9 @@ import io.legado.app.ui.widget.recycler.ItemTouchCallback
import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.*
import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import java.io.File
import java.io.File
class BookSourceActivity : VMBaseActivity < ActivityBookSourceBinding , BookSourceViewModel > ( ) ,
class BookSourceActivity : VMBaseActivity < ActivityBookSourceBinding , BookSourceViewModel > ( ) ,
@ -52,7 +54,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
private val importRecordKey = " bookSourceRecordKey "
private val importRecordKey = " bookSourceRecordKey "
private lateinit var adapter : BookSourceAdapter
private lateinit var adapter : BookSourceAdapter
private lateinit var searchView : SearchView
private lateinit var searchView : SearchView
private var bookSourceLiveDate : LiveData < List < BookSource > > ? = null
private var sourceFlowJob : Job ? = null
private val groups = linkedSetOf < String > ( )
private val groups = linkedSetOf < String > ( )
private var groupMenu : SubMenu ? = null
private var groupMenu : SubMenu ? = null
private var sort = Sort . Default
private var sort = Sort . Default
@ -94,7 +96,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
searchView = binding . titleBar . findViewById ( R . id . search _view )
searchView = binding . titleBar . findViewById ( R . id . search _view )
initRecyclerView ( )
initRecyclerView ( )
initSearchView ( )
initSearchView ( )
initLiveData BookSource( )
up BookSource( )
initLiveDataGroup ( )
initLiveDataGroup ( )
initSelectActionBar ( )
initSelectActionBar ( )
if ( ! LocalConfig . bookSourcesHelpVersionIsLast ) {
if ( ! LocalConfig . bookSourcesHelpVersionIsLast ) {
@ -134,32 +136,32 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
R . id . menu _sort _manual -> {
R . id . menu _sort _manual -> {
item . isChecked = true
item . isChecked = true
sortCheck ( Sort . Default )
sortCheck ( Sort . Default )
initLiveData BookSource( searchView . query ?. toString ( ) )
up BookSource( searchView . query ?. toString ( ) )
}
}
R . id . menu _sort _auto -> {
R . id . menu _sort _auto -> {
item . isChecked = true
item . isChecked = true
sortCheck ( Sort . Weight )
sortCheck ( Sort . Weight )
initLiveData BookSource( searchView . query ?. toString ( ) )
up BookSource( searchView . query ?. toString ( ) )
}
}
R . id . menu _sort _name -> {
R . id . menu _sort _name -> {
item . isChecked = true
item . isChecked = true
sortCheck ( Sort . Name )
sortCheck ( Sort . Name )
initLiveData BookSource( searchView . query ?. toString ( ) )
up BookSource( searchView . query ?. toString ( ) )
}
}
R . id . menu _sort _url -> {
R . id . menu _sort _url -> {
item . isChecked = true
item . isChecked = true
sortCheck ( Sort . Url )
sortCheck ( Sort . Url )
initLiveData BookSource( searchView . query ?. toString ( ) )
up BookSource( searchView . query ?. toString ( ) )
}
}
R . id . menu _sort _time -> {
R . id . menu _sort _time -> {
item . isChecked = true
item . isChecked = true
sortCheck ( Sort . Update )
sortCheck ( Sort . Update )
initLiveData BookSource( searchView . query ?. toString ( ) )
up BookSource( searchView . query ?. toString ( ) )
}
}
R . id . menu _sort _enable -> {
R . id . menu _sort _enable -> {
item . isChecked = true
item . isChecked = true
sortCheck ( Sort . Enable )
sortCheck ( Sort . Enable )
initLiveData BookSource( searchView . query ?. toString ( ) )
up BookSource( searchView . query ?. toString ( ) )
}
}
R . id . menu _enabled _group -> {
R . id . menu _enabled _group -> {
searchView . setQuery ( getString ( R . string . enabled ) , true )
searchView . setQuery ( getString ( R . string . enabled ) , true )
@ -199,27 +201,27 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
searchView . setOnQueryTextListener ( this )
searchView . setOnQueryTextListener ( this )
}
}
private fun initLiveData BookSource( searchKey : String ? = null ) {
private fun up BookSource( searchKey : String ? = null ) {
bookSourceLiveDate ?. removeObservers ( this )
sourceFlowJob ?. cancel ( )
bookSourceLiveDate = when {
sourceFlowJob = launch {
searchKey . isNullOrEmpty ( ) -> {
when {
appDb . bookSourceDao . liveDataAll ( )
searchKey . isNullOrEmpty ( ) -> {
}
appDb . bookSourceDao . liveDataAll ( )
searchKey == getString ( R . string . enabled ) -> {
}
appDb . bookSourceDao . liveDataEnabled ( )
searchKey == getString ( R . string . enabled ) -> {
}
appDb . bookSourceDao . liveDataEnabled ( )
searchKey == getString ( R . string . disabled ) -> {
}
appDb . bookSourceDao . liveDataDisabled ( )
searchKey == getString ( R . string . disabled ) -> {
}
appDb . bookSourceDao . liveDataDisabled ( )
searchKey . startsWith ( " group: " ) -> {
}
val key = searchKey . substringAfter ( " group: " )
searchKey . startsWith ( " group: " ) -> {
appDb . bookSourceDao . liveDataGroupSearch ( " % $key % " )
val key = searchKey . substringAfter ( " group: " )
}
appDb . bookSourceDao . liveDataGroupSearch ( " % $key % " )
else -> {
}
appDb . bookSourceDao . liveDataSearch ( " % $searchKey % " )
else -> {
}
appDb . bookSourceDao . liveDataSearch ( " % $searchKey % " )
} . apply {
}
observe ( this @BookSourceActivity , { data ->
} . collect { data ->
val sourceList =
val sourceList =
if ( sortAscending ) when ( sort ) {
if ( sortAscending ) when ( sort ) {
Sort . Weight -> data . sortedBy { it . weight }
Sort . Weight -> data . sortedBy { it . weight }
@ -254,7 +256,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
else -> data . reversed ( )
else -> data . reversed ( )
}
}
adapter . setItems ( sourceList , adapter . diffItemCallback )
adapter . setItems ( sourceList , adapter . diffItemCallback )
} )
}
}
}
}
}
@ -273,13 +275,16 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
}
}
private fun initLiveDataGroup ( ) {
private fun initLiveDataGroup ( ) {
appDb . bookSourceDao . liveGroup ( ) . observe ( this , {
launch {
groups . clear ( )
appDb . bookSourceDao . liveGroup ( )
it . forEach { group ->
. collect {
groups . addAll ( group . splitNotBlank ( AppPattern . splitGroupRegex ) )
groups . clear ( )
}
it . forEach { group ->
upGroupMenu ( )
groups . addAll ( group . splitNotBlank ( AppPattern . splitGroupRegex ) )
} )
}
upGroupMenu ( )
}
}
}
}
override fun selectAll ( selectAll : Boolean ) {
override fun selectAll ( selectAll : Boolean ) {
@ -453,7 +458,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
override fun onQueryTextChange ( newText : String ? ) : Boolean {
override fun onQueryTextChange ( newText : String ? ) : Boolean {
newText ?. let {
newText ?. let {
initLiveData BookSource( it )
up BookSource( it )
}
}
return false
return false
}
}