@ -2,6 +2,7 @@ package io.legado.app.ui.book.source.manage
import android.annotation.SuppressLint
import android.annotation.SuppressLint
import android.app.Activity
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Intent
import android.content.Intent
import android.os.Bundle
import android.os.Bundle
import android.view.Menu
import android.view.Menu
@ -9,18 +10,23 @@ import android.view.MenuItem
import android.view.SubMenu
import android.view.SubMenu
import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.SearchView
import androidx.core.content.FileProvider
import androidx.documentfile.provider.DocumentFile
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.LiveData
import androidx.lifecycle.LiveData
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.App
import io.legado.app.App
import io.legado.app.BuildConfig
import io.legado.app.R
import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.AppPattern
import io.legado.app.constant.AppPattern
import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.BookSource
import io.legado.app.help.IntentDataHelp
import io.legado.app.help.IntentDataHelp
import io.legado.app.lib.dialogs.*
import io.legado.app.lib.dialogs.*
import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.noButton
import io.legado.app.lib.dialogs.okButton
import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.service.help.CheckSource
import io.legado.app.service.help.CheckSource
@ -41,6 +47,7 @@ import kotlinx.android.synthetic.main.view_search.*
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.startActivityForResult
import org.jetbrains.anko.startActivityForResult
import org.jetbrains.anko.toast
import org.jetbrains.anko.toast
import java.io.File
import java.io.File
import java.text.Collator
import java.text.Collator
@ -60,6 +67,7 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
private var groups = linkedSetOf < String > ( )
private var groups = linkedSetOf < String > ( )
private var groupMenu : SubMenu ? = null
private var groupMenu : SubMenu ? = null
private var sort = 0
private var sort = 0
private var sortAscending = 0
override fun onActivityCreated ( savedInstanceState : Bundle ? ) {
override fun onActivityCreated ( savedInstanceState : Bundle ? ) {
initRecyclerView ( )
initRecyclerView ( )
@ -86,6 +94,21 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
when ( item . itemId ) {
when ( item . itemId ) {
R . id . menu _add _book _source -> startActivity < BookSourceEditActivity > ( )
R . id . menu _add _book _source -> startActivity < BookSourceEditActivity > ( )
R . id . menu _import _source _qr -> startActivityForResult < QrCodeActivity > ( qrRequestCode )
R . id . menu _import _source _qr -> startActivityForResult < QrCodeActivity > ( qrRequestCode )
R . id . menu _share _source -> {
try {
val json = GSON . toJson ( adapter . getSelection ( ) )
val intent = Intent ( Intent . ACTION _SEND )
val file = FileUtils . createFileWithReplace ( " $filesDir /shareBookSource.json " )
file . writeText ( json )
val fileUri = FileProvider . getUriForFile ( this , BuildConfig . APPLICATION _ID + " .fileProvider " , file )
intent . type = " text/* "
intent . putExtra ( Intent . EXTRA _STREAM , fileUri )
intent . flags = Intent . FLAG _GRANT _READ _URI _PERMISSION
startActivity ( Intent . createChooser ( intent , getString ( R . string . share _selected _source ) ) )
} catch ( e : ActivityNotFoundException ) {
e . printStackTrace ( )
}
}
R . id . menu _group _manage ->
R . id . menu _group _manage ->
GroupManageDialog ( ) . show ( supportFragmentManager , " groupManage " )
GroupManageDialog ( ) . show ( supportFragmentManager , " groupManage " )
R . id . menu _import _source _local -> FilePicker
R . id . menu _import _source _local -> FilePicker
@ -93,22 +116,27 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
R . id . menu _import _source _onLine -> showImportDialog ( )
R . id . menu _import _source _onLine -> showImportDialog ( )
R . id . menu _sort _manual -> {
R . id . menu _sort _manual -> {
item . isChecked = true
item . isChecked = true
sort = 0
sortCheck ( 0 )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
}
}
R . id . menu _sort _auto -> {
R . id . menu _sort _auto -> {
item . isChecked = true
item . isChecked = true
sort = 2
sortCheck ( 1 )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
}
}
R . id . menu _sort _pin _yin -> {
R . id . menu _sort _pin _yin -> {
item . isChecked = true
item . isChecked = true
sort = 3
sortCheck ( 2 )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
}
}
R . id . menu _sort _url -> {
R . id . menu _sort _url -> {
item . isChecked = true
item . isChecked = true
sort = 4
sortCheck ( 3 )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
}
R . id . menu _sort _time -> {
item . isChecked = true
sortCheck ( 4 )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
initLiveDataBookSource ( search _view . query ?. toString ( ) )
}
}
R . id . menu _enabled _group -> {
R . id . menu _enabled _group -> {
@ -168,18 +196,38 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
}
}
}
}
bookSourceLiveDate ?. observe ( this , { data ->
bookSourceLiveDate ?. observe ( this , { data ->
val sourceList = when ( sort ) {
val sourceList = when ( sortAscending % 2 ) {
1 -> data . sortedBy { it . weight }
0 -> when ( sort ) {
2 -> data . sortedBy { it . bookSourceName }
1 -> data . sortedBy { it . weight }
3 -> data . sortedBy { it . bookSourceUrl }
2 -> data . sortedBy { it . bookSourceName }
else -> data
3 -> data . sortedBy { it . bookSourceUrl }
4 -> data . sortedByDescending { it . lastUpdateTime }
else -> data
}
else -> when ( sort ) {
1 -> data . sortedByDescending { it . weight }
2 -> data . sortedByDescending { it . bookSourceName }
3 -> data . sortedByDescending { it . bookSourceUrl }
4 -> data . sortedBy { it . lastUpdateTime }
else -> data . reversed ( )
}
}
}
recycler _view . scrollToPosition ( 0 )
val diffResult = DiffUtil
val diffResult = DiffUtil
. calculateDiff ( DiffCallBack ( ArrayList ( adapter . getItems ( ) ) , sourceList ) )
. calculateDiff ( DiffCallBack ( ArrayList ( adapter . getItems ( ) ) , sourceList ) )
adapter . setItems ( sourceList , diffResult )
adapter . setItems ( sourceList , diffResult )
upCountView ( )
upCountView ( )
} )
} )
}
}
private fun sortCheck ( sortId : Int ) {
if ( sort == sortId ) {
sortAscending += 1
}
else {
sortAscending = 0
sort = sortId
}
}
private fun initLiveDataGroup ( ) {
private fun initLiveDataGroup ( ) {
App . db . bookSourceDao ( ) . liveGroup ( ) . observe ( this , {
App . db . bookSourceDao ( ) . liveGroup ( ) . observe ( this , {
@ -226,12 +274,12 @@ class BookSourceActivity : VMBaseActivity<BookSourceViewModel>(R.layout.activity
R . id . menu _disable _selection -> viewModel . disableSelection ( adapter . getSelection ( ) )
R . id . menu _disable _selection -> viewModel . disableSelection ( adapter . getSelection ( ) )
R . id . menu _enable _explore -> viewModel . enableSelectExplore ( adapter . getSelection ( ) )
R . id . menu _enable _explore -> viewModel . enableSelectExplore ( adapter . getSelection ( ) )
R . id . menu _disable _explore -> viewModel . disableSelectExplore ( adapter . getSelection ( ) )
R . id . menu _disable _explore -> viewModel . disableSelectExplore ( adapter . getSelection ( ) )
R . id . menu _export _selection -> FilePicker . selectFolder ( this , exportRequestCode )
R . id . menu _check _source -> checkSource ( )
R . id . menu _check _source -> checkSource ( )
R . id . menu _top _sel -> viewModel . topSource ( * adapter . getSelection ( ) . toTypedArray ( ) )
R . id . menu _top _sel -> viewModel . topSource ( * adapter . getSelection ( ) . toTypedArray ( ) )
R . id . menu _bottom _sel -> viewModel . bottomSource ( * adapter . getSelection ( ) . toTypedArray ( ) )
R . id . menu _bottom _sel -> viewModel . bottomSource ( * adapter . getSelection ( ) . toTypedArray ( ) )
R . id . menu _add _group -> selectionAddToGroups ( )
R . id . menu _add _group -> selectionAddToGroups ( )
R . id . menu _remove _group -> selectionRemoveFromGroups ( )
R . id . menu _remove _group -> selectionRemoveFromGroups ( )
R . id . menu _export _selection -> FilePicker . selectFolder ( this , exportRequestCode )
}
}
return true
return true
}
}