144 lines
5.0 KiB
Kotlin
144 lines
5.0 KiB
Kotlin
package net.accelf.yuito
|
|
|
|
import android.content.Context
|
|
import android.text.Editable
|
|
import android.text.TextWatcher
|
|
import android.util.AttributeSet
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|
import androidx.lifecycle.LifecycleOwner
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.preference.PreferenceManager
|
|
import com.keylesspalace.tusky.R
|
|
import com.keylesspalace.tusky.appstore.Event
|
|
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent
|
|
import com.keylesspalace.tusky.appstore.QuickReplyEvent
|
|
import com.keylesspalace.tusky.components.compose.ComposeActivity
|
|
import com.keylesspalace.tusky.components.compose.ComposeActivity.Companion.PREF_DEFAULT_TAG
|
|
import com.keylesspalace.tusky.components.compose.ComposeActivity.Companion.PREF_USE_DEFAULT_TAG
|
|
import com.keylesspalace.tusky.databinding.ViewQuickTootBinding
|
|
import com.keylesspalace.tusky.settings.PrefKeys.USE_QUICK_TOOT
|
|
import com.keylesspalace.tusky.util.ThemeUtils
|
|
import kotlinx.coroutines.launch
|
|
import kotlin.properties.Delegates
|
|
|
|
class QuickTootView @JvmOverloads constructor(
|
|
context: Context,
|
|
attrs: AttributeSet? = null,
|
|
defStyleAttr: Int = 0,
|
|
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
|
|
|
private val binding = ViewQuickTootBinding.inflate(LayoutInflater.from(context), this, true)
|
|
|
|
private val preference = PreferenceManager.getDefaultSharedPreferences(context)
|
|
|
|
private lateinit var viewModel: QuickTootViewModel
|
|
|
|
private var bypass by Delegates.notNull<Boolean>()
|
|
|
|
fun attachViewModel(viewModel: QuickTootViewModel, owner: LifecycleOwner) {
|
|
this.viewModel = viewModel
|
|
|
|
syncBypass()
|
|
|
|
binding.buttonVisibility.attachViewModel(viewModel, owner)
|
|
|
|
owner.lifecycleScope.launch {
|
|
viewModel.content.collect { content ->
|
|
if (binding.editTextContent.text.toString() != content) {
|
|
binding.editTextContent.setText(content)
|
|
}
|
|
}
|
|
}
|
|
binding.editTextContent.addTextChangedListener(object : TextWatcher {
|
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
|
override fun afterTextChanged(s: Editable?) {
|
|
viewModel.content.value = s.toString()
|
|
}
|
|
})
|
|
|
|
owner.lifecycleScope.launch {
|
|
viewModel.inReplyTo.collect { inReplyTo ->
|
|
binding.textQuickReply.text =
|
|
inReplyTo?.let { "Reply to ${it.account.username}" } ?: ""
|
|
}
|
|
}
|
|
|
|
owner.lifecycleScope.launch {
|
|
viewModel.defaultTag.collect { defaultTag ->
|
|
binding.textDefaultTag.text =
|
|
defaultTag?.let { "${context.getString(R.string.hint_default_text)} : $it" }
|
|
?: "${context.getString(R.string.hint_default_text)} inactive"
|
|
binding.textDefaultTag.setTextColor(
|
|
ThemeUtils.getColor(
|
|
context,
|
|
defaultTag?.let { R.attr.colorInfo }
|
|
?: android.R.attr.textColorTertiary
|
|
)
|
|
)
|
|
}
|
|
}
|
|
syncDefaultTag()
|
|
|
|
owner.lifecycleScope.launch {
|
|
viewModel.visibility.collect { visibility ->
|
|
binding.buttonToot.setStatusVisibility(visibility)
|
|
}
|
|
}
|
|
binding.buttonToot.setOnClickListener {
|
|
val intent = ComposeActivity.startIntent(it.context, viewModel.composeOptions(true))
|
|
viewModel.reset()
|
|
it.context.startActivity(intent)
|
|
}
|
|
}
|
|
|
|
private fun syncDefaultTag() {
|
|
viewModel.defaultTag.value = if (preference.getBoolean(PREF_USE_DEFAULT_TAG, false)) {
|
|
preference.getString(PREF_DEFAULT_TAG, null)
|
|
} else {
|
|
null
|
|
}
|
|
}
|
|
|
|
private fun syncBypass() {
|
|
bypass = !preference.getBoolean(USE_QUICK_TOOT, true)
|
|
visibility = when (bypass) {
|
|
true -> GONE
|
|
false -> VISIBLE
|
|
}
|
|
if (bypass) {
|
|
viewModel.reset()
|
|
}
|
|
}
|
|
|
|
fun onFABClicked(view: View) {
|
|
startCompose(view.context)
|
|
}
|
|
|
|
private fun startCompose(context: Context) {
|
|
val intent = ComposeActivity.startIntent(context, viewModel.composeOptions(false))
|
|
viewModel.reset()
|
|
context.startActivity(intent)
|
|
}
|
|
|
|
fun handleEvent(event: Event?) {
|
|
when (event) {
|
|
is QuickReplyEvent -> {
|
|
viewModel.reply(event.status.actionableStatus)
|
|
if (bypass) {
|
|
startCompose(context)
|
|
}
|
|
}
|
|
is PreferenceChangedEvent -> {
|
|
when (event.preferenceKey) {
|
|
PREF_DEFAULT_TAG,
|
|
PREF_USE_DEFAULT_TAG -> syncDefaultTag()
|
|
USE_QUICK_TOOT -> syncBypass()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|