parent
fdcb738ede
commit
76abf4a7f9
@ -0,0 +1,85 @@ |
|||||||
|
package io.legado.app.ui.book.read.config |
||||||
|
|
||||||
|
import android.os.Bundle |
||||||
|
import android.view.MenuItem |
||||||
|
import android.view.View |
||||||
|
import android.view.ViewGroup |
||||||
|
import androidx.appcompat.widget.Toolbar |
||||||
|
import androidx.fragment.app.viewModels |
||||||
|
import io.legado.app.R |
||||||
|
import io.legado.app.base.BaseDialogFragment |
||||||
|
import io.legado.app.data.entities.HttpTTS |
||||||
|
import io.legado.app.databinding.DialogHttpTtsEditBinding |
||||||
|
import io.legado.app.lib.theme.primaryColor |
||||||
|
import io.legado.app.ui.widget.dialog.TextDialog |
||||||
|
import io.legado.app.utils.* |
||||||
|
import io.legado.app.utils.viewbindingdelegate.viewBinding |
||||||
|
|
||||||
|
class SpeakEngineEditDialog() : BaseDialogFragment(R.layout.dialog_http_tts_edit), |
||||||
|
Toolbar.OnMenuItemClickListener { |
||||||
|
|
||||||
|
constructor(id: Long) : this() { |
||||||
|
arguments = Bundle().apply { |
||||||
|
putLong("id", id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private val binding by viewBinding(DialogHttpTtsEditBinding::bind) |
||||||
|
private val viewModel by viewModels<SpeakEngineEditViewModel>() |
||||||
|
|
||||||
|
override fun onStart() { |
||||||
|
super.onStart() |
||||||
|
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { |
||||||
|
binding.toolBar.setBackgroundColor(primaryColor) |
||||||
|
viewModel.initData(arguments) { |
||||||
|
initView(httpTTS = it) |
||||||
|
} |
||||||
|
initMenu() |
||||||
|
} |
||||||
|
|
||||||
|
fun initMenu() { |
||||||
|
binding.toolBar.inflateMenu(R.menu.speak_engine_edit) |
||||||
|
binding.toolBar.menu.applyTint(requireContext()) |
||||||
|
binding.toolBar.setOnMenuItemClickListener(this) |
||||||
|
} |
||||||
|
|
||||||
|
fun initView(httpTTS: HttpTTS) { |
||||||
|
binding.tvName.setText(httpTTS.name) |
||||||
|
binding.tvUrl.setText(httpTTS.url) |
||||||
|
binding.tvLoginUrl.setText(httpTTS.loginUrl) |
||||||
|
binding.tvLoginUi.setText(GSON.toJson(httpTTS.loginUi)) |
||||||
|
binding.tvLoginCheckJs.setText(httpTTS.loginCheckJs) |
||||||
|
binding.tvHeaders.setText(httpTTS.header) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onMenuItemClick(item: MenuItem?): Boolean { |
||||||
|
when (item?.itemId) { |
||||||
|
R.id.menu_save -> viewModel.save(dataFromView()) |
||||||
|
R.id.menu_help -> help() |
||||||
|
} |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
private fun dataFromView(): HttpTTS { |
||||||
|
return HttpTTS( |
||||||
|
id = viewModel.id ?: System.currentTimeMillis(), |
||||||
|
name = binding.tvName.text.toString(), |
||||||
|
url = binding.tvUrl.text.toString(), |
||||||
|
loginUrl = binding.tvLoginUrl.text?.toString(), |
||||||
|
loginUi = GSON.fromJsonArray(binding.tvLoginUi.text?.toString()), |
||||||
|
loginCheckJs = binding.tvLoginCheckJs.text?.toString(), |
||||||
|
header = binding.tvHeaders.text?.toString() |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
private fun help() { |
||||||
|
val helpStr = String( |
||||||
|
requireContext().assets.open("help/httpTTSHelp.md").readBytes() |
||||||
|
) |
||||||
|
showDialogFragment(TextDialog(helpStr, TextDialog.Mode.MD)) |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package io.legado.app.ui.book.read.config |
||||||
|
|
||||||
|
import android.app.Application |
||||||
|
import android.os.Bundle |
||||||
|
import io.legado.app.base.BaseViewModel |
||||||
|
import io.legado.app.data.appDb |
||||||
|
import io.legado.app.data.entities.HttpTTS |
||||||
|
import io.legado.app.model.ReadAloud |
||||||
|
|
||||||
|
class SpeakEngineEditViewModel(app: Application) : BaseViewModel(app) { |
||||||
|
|
||||||
|
var id: Long? = null |
||||||
|
|
||||||
|
fun initData(arguments: Bundle?, success: (httpTTS: HttpTTS) -> Unit) { |
||||||
|
execute { |
||||||
|
if (id == null) { |
||||||
|
id = arguments?.getLong("id") |
||||||
|
val httpTTS = id?.let { |
||||||
|
return@let appDb.httpTTSDao.get(it) |
||||||
|
} |
||||||
|
return@execute httpTTS |
||||||
|
} |
||||||
|
return@execute null |
||||||
|
}.onSuccess { |
||||||
|
it?.let { |
||||||
|
success.invoke(it) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun save(httpTTS: HttpTTS) { |
||||||
|
execute { |
||||||
|
appDb.httpTTSDao.insert(httpTTS) |
||||||
|
ReadAloud.upReadAloudClass() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||||
|
xmlns:tools="http://schemas.android.com/tools" |
||||||
|
tools:ignore="AlwaysShowAction"> |
||||||
|
|
||||||
|
<item |
||||||
|
android:id="@+id/menu_save" |
||||||
|
android:icon="@drawable/ic_save" |
||||||
|
android:title="@string/action_save" |
||||||
|
app:showAsAction="always" /> |
||||||
|
|
||||||
|
<item |
||||||
|
android:id="@+id/menu_login" |
||||||
|
android:title="@string/login" |
||||||
|
app:showAsAction="never" /> |
||||||
|
|
||||||
|
<item |
||||||
|
android:id="@+id/menu_help" |
||||||
|
android:title="@string/help" |
||||||
|
app:showAsAction="never" /> |
||||||
|
|
||||||
|
</menu> |
Loading…
Reference in new issue