|
|
|
@ -1,19 +1,34 @@ |
|
|
|
|
package io.legado.app.ui.association |
|
|
|
|
|
|
|
|
|
import android.content.Context |
|
|
|
|
import android.content.DialogInterface |
|
|
|
|
import android.os.Bundle |
|
|
|
|
import android.util.DisplayMetrics |
|
|
|
|
import android.view.LayoutInflater |
|
|
|
|
import android.view.MenuItem |
|
|
|
|
import android.view.View |
|
|
|
|
import android.view.ViewGroup |
|
|
|
|
import androidx.appcompat.widget.Toolbar |
|
|
|
|
import androidx.lifecycle.Observer |
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager |
|
|
|
|
import io.legado.app.R |
|
|
|
|
import io.legado.app.base.BaseDialogFragment |
|
|
|
|
import io.legado.app.base.VMBaseActivity |
|
|
|
|
import io.legado.app.base.adapter.ItemViewHolder |
|
|
|
|
import io.legado.app.base.adapter.SimpleRecyclerAdapter |
|
|
|
|
import io.legado.app.constant.Theme |
|
|
|
|
import io.legado.app.data.entities.RssSource |
|
|
|
|
import io.legado.app.help.IntentDataHelp |
|
|
|
|
import io.legado.app.help.SourceHelp |
|
|
|
|
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.utils.applyTint |
|
|
|
|
import io.legado.app.utils.getViewModel |
|
|
|
|
import io.legado.app.utils.visible |
|
|
|
|
import kotlinx.android.synthetic.main.activity_translucence.* |
|
|
|
|
import kotlinx.android.synthetic.main.dialog_recycler_view.* |
|
|
|
|
import kotlinx.android.synthetic.main.item_source_import.view.* |
|
|
|
|
import org.jetbrains.anko.sdk27.listeners.onClick |
|
|
|
|
import org.jetbrains.anko.toast |
|
|
|
|
|
|
|
|
|
class ImportRssSourceActivity : VMBaseActivity<ImportRssSourceViewModel>( |
|
|
|
@ -32,7 +47,7 @@ class ImportRssSourceActivity : VMBaseActivity<ImportRssSourceViewModel>( |
|
|
|
|
}) |
|
|
|
|
viewModel.successLiveData.observe(this, Observer { |
|
|
|
|
rotate_loading.hide() |
|
|
|
|
successDialog(it) |
|
|
|
|
successDialog() |
|
|
|
|
}) |
|
|
|
|
initData() |
|
|
|
|
} |
|
|
|
@ -78,16 +93,133 @@ class ImportRssSourceActivity : VMBaseActivity<ImportRssSourceViewModel>( |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun successDialog(allSource: ArrayList<RssSource>) { |
|
|
|
|
alert("解析结果", "共${allSource.size}个订阅源,是否确认导入?") { |
|
|
|
|
okButton { |
|
|
|
|
SourceHelp.insertRssSource(*allSource.toTypedArray()) |
|
|
|
|
private fun successDialog() { |
|
|
|
|
val bundle = Bundle() |
|
|
|
|
val allSourceKey = IntentDataHelp.putData(viewModel.allSources, "source") |
|
|
|
|
bundle.putString("allSourceKey", allSourceKey) |
|
|
|
|
val checkStatusKey = IntentDataHelp.putData(viewModel.sourceCheckState, "check") |
|
|
|
|
bundle.putString("checkStatusKey", checkStatusKey) |
|
|
|
|
val selectStatusKey = IntentDataHelp.putData(viewModel.selectStatus, "select") |
|
|
|
|
bundle.putString("selectStatusKey", selectStatusKey) |
|
|
|
|
SourcesDialog().apply { |
|
|
|
|
arguments = bundle |
|
|
|
|
}.show(supportFragmentManager, "SourceDialog") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class SourcesDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickListener { |
|
|
|
|
|
|
|
|
|
lateinit var adapter: SourcesAdapter |
|
|
|
|
|
|
|
|
|
override fun onStart() { |
|
|
|
|
super.onStart() |
|
|
|
|
val dm = DisplayMetrics() |
|
|
|
|
activity?.windowManager?.defaultDisplay?.getMetrics(dm) |
|
|
|
|
dialog?.window?.setLayout( |
|
|
|
|
(dm.widthPixels * 0.9).toInt(), |
|
|
|
|
ViewGroup.LayoutParams.WRAP_CONTENT |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onCreateView( |
|
|
|
|
inflater: LayoutInflater, |
|
|
|
|
container: ViewGroup?, |
|
|
|
|
savedInstanceState: Bundle? |
|
|
|
|
): View? { |
|
|
|
|
return inflater.inflate(R.layout.dialog_recycler_view, container) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { |
|
|
|
|
tool_bar.title = "导入书源" |
|
|
|
|
initMenu() |
|
|
|
|
arguments?.let { |
|
|
|
|
adapter = SourcesAdapter(requireContext()) |
|
|
|
|
val allSources = |
|
|
|
|
IntentDataHelp.getData<ArrayList<RssSource>>(it.getString("allSourceKey")) |
|
|
|
|
adapter.sourceCheckState = |
|
|
|
|
IntentDataHelp.getData<ArrayList<Boolean>>(it.getString("checkStatusKey"))!! |
|
|
|
|
adapter.selectStatus = |
|
|
|
|
IntentDataHelp.getData<ArrayList<Boolean>>(it.getString("selectStatusKey"))!! |
|
|
|
|
|
|
|
|
|
recycler_view.layoutManager = LinearLayoutManager(requireContext()) |
|
|
|
|
recycler_view.adapter = adapter |
|
|
|
|
adapter.setItems(allSources) |
|
|
|
|
tv_cancel.visible() |
|
|
|
|
tv_cancel.onClick { |
|
|
|
|
dismiss() |
|
|
|
|
} |
|
|
|
|
tv_ok.visible() |
|
|
|
|
tv_ok.onClick { |
|
|
|
|
importSelect() |
|
|
|
|
dismiss() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
noButton { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun initMenu() { |
|
|
|
|
tool_bar.setOnMenuItemClickListener(this) |
|
|
|
|
tool_bar.inflateMenu(R.menu.import_source) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onMenuItemClick(item: MenuItem): Boolean { |
|
|
|
|
when (item.itemId) { |
|
|
|
|
R.id.menu_select_all -> { |
|
|
|
|
adapter.selectStatus.forEachIndexed { index, b -> |
|
|
|
|
if (!b) { |
|
|
|
|
adapter.selectStatus[index] = true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
adapter.notifyDataSetChanged() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}.show().applyTint().setOnDismissListener { |
|
|
|
|
finish() |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onDismiss(dialog: DialogInterface) { |
|
|
|
|
super.onDismiss(dialog) |
|
|
|
|
activity?.finish() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun importSelect() { |
|
|
|
|
val selectSource = arrayListOf<RssSource>() |
|
|
|
|
adapter.selectStatus.forEachIndexed { index, b -> |
|
|
|
|
if (b) { |
|
|
|
|
selectSource.add(adapter.getItem(index)!!) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
SourceHelp.insertRssSource(*selectSource.toTypedArray()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class SourcesAdapter(context: Context) : |
|
|
|
|
SimpleRecyclerAdapter<RssSource>(context, R.layout.item_source_import) { |
|
|
|
|
|
|
|
|
|
lateinit var sourceCheckState: ArrayList<Boolean> |
|
|
|
|
lateinit var selectStatus: ArrayList<Boolean> |
|
|
|
|
|
|
|
|
|
override fun convert(holder: ItemViewHolder, item: RssSource, payloads: MutableList<Any>) { |
|
|
|
|
holder.itemView.apply { |
|
|
|
|
cb_source_name.isChecked = selectStatus[holder.layoutPosition] |
|
|
|
|
cb_source_name.text = item.sourceName |
|
|
|
|
tv_source_state.text = if (sourceCheckState[holder.layoutPosition]) { |
|
|
|
|
"已存在" |
|
|
|
|
} else { |
|
|
|
|
"新订阅源" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun registerListener(holder: ItemViewHolder) { |
|
|
|
|
holder.itemView.apply { |
|
|
|
|
cb_source_name.setOnCheckedChangeListener { buttonView, isChecked -> |
|
|
|
|
if (buttonView.isPressed) { |
|
|
|
|
selectStatus[holder.layoutPosition] = isChecked |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |