diff --git a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt index b92e379ff..7b3f4e275 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt @@ -2,6 +2,8 @@ package io.legado.app.data.dao import androidx.paging.DataSource import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query import io.legado.app.data.entities.BookSource @@ -14,4 +16,6 @@ interface BookSourceDao { @Query("select * from book_sources where origin = :key") fun findByKey(key:String): BookSource? + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(bookSource: BookSource): Long } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditActivity.kt index 0bbe38f4f..048674ac9 100644 --- a/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditActivity.kt @@ -1,13 +1,19 @@ package io.legado.app.ui.sourceedit import android.os.Bundle +import android.view.Menu +import android.view.MenuItem import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager +import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseActivity import io.legado.app.data.entities.BookSource import io.legado.app.utils.getViewModel import kotlinx.android.synthetic.main.activity_source_edit.* +import kotlinx.coroutines.* +import org.jetbrains.anko.UI +import org.jetbrains.anko.toast class SourceEditActivity : BaseActivity() { override val viewModel: SourceEditViewModel @@ -16,7 +22,7 @@ class SourceEditActivity : BaseActivity() { get() = R.layout.activity_source_edit private val adapter = SourceEditAdapter() - private val sourceEditEntities:ArrayList = ArrayList() + private val sourceEditEntities: ArrayList = ArrayList() override fun onViewModelCreated(viewModel: SourceEditViewModel, savedInstanceState: Bundle?) { initRecyclerView() @@ -35,6 +41,28 @@ class SourceEditActivity : BaseActivity() { } } + override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.source_edit, menu) + return super.onCompatCreateOptionsMenu(menu) + } + + override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.action_save -> { + val bookSource = getSource() + if (bookSource == null) { + toast("书源名称和URL不能为空") + } else { + GlobalScope.launch { + App.db.bookSourceDao().insert(bookSource) + GlobalScope.launch(Dispatchers.Main) { finish() } + } + } + } + } + return super.onCompatOptionsItemSelected(item) + } + private fun initRecyclerView() { recycler_view.layoutManager = LinearLayoutManager(this) recycler_view.adapter = adapter @@ -49,5 +77,29 @@ class SourceEditActivity : BaseActivity() { adapter.notifyDataSetChanged() } - class SourceEditEntity(var key: String, var value:String?, var hint:Int) + private fun getSource(): BookSource? { + val bookSource = BookSource() + for (entity in adapter.sourceEditEntities) { + when (entity.key) { + "origin" -> { + if (entity.value == null) { + return null + } else { + bookSource.origin = entity.value!! + } + } + "name" -> { + if (entity.value == null) { + return null + } else { + bookSource.name = entity.value!! + } + } + "group" -> bookSource.group = entity.value + } + } + return bookSource + } + + class SourceEditEntity(var key: String, var value: String?, var hint: Int) } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditViewModel.kt index 7e0fd2958..1ec3a5258 100644 --- a/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/sourceedit/SourceEditViewModel.kt @@ -6,13 +6,18 @@ import androidx.lifecycle.MutableLiveData import io.legado.app.App import io.legado.app.data.dao.BookSourceDao import io.legado.app.data.entities.BookSource +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch class SourceEditViewModel(application: Application) : AndroidViewModel(application) { val sourceLiveData:MutableLiveData = MutableLiveData() fun setBookSource(key: String) { - sourceLiveData.value = App.db.bookSourceDao().findByKey(key) + GlobalScope.launch { + val source = App.db.bookSourceDao().findByKey(key) + sourceLiveData.postValue(source) + } } diff --git a/app/src/main/res/menu/source_edit.xml b/app/src/main/res/menu/source_edit.xml new file mode 100644 index 000000000..1c19b35fa --- /dev/null +++ b/app/src/main/res/menu/source_edit.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file