2018-01-04 19:52:25 +01:00
|
|
|
package jp.juggler.subwaytooter
|
|
|
|
|
|
|
|
import android.app.Activity
|
|
|
|
import android.content.Intent
|
|
|
|
import android.media.RingtoneManager
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.text.Editable
|
|
|
|
import android.text.TextWatcher
|
|
|
|
import android.view.View
|
2021-05-22 00:03:16 +02:00
|
|
|
import androidx.annotation.ColorInt
|
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
2018-01-04 19:52:25 +01:00
|
|
|
import com.jrummyapps.android.colorpicker.ColorPickerDialog
|
|
|
|
import com.jrummyapps.android.colorpicker.ColorPickerDialogListener
|
2020-02-02 15:19:57 +01:00
|
|
|
import jp.juggler.subwaytooter.api.entity.Acct
|
2022-08-11 09:51:49 +02:00
|
|
|
import jp.juggler.subwaytooter.databinding.ActNicknameBinding
|
2018-01-04 19:52:25 +01:00
|
|
|
import jp.juggler.subwaytooter.table.AcctColor
|
2023-02-04 21:52:26 +01:00
|
|
|
import jp.juggler.subwaytooter.table.daoAcctColor
|
2023-01-13 13:22:25 +01:00
|
|
|
import jp.juggler.util.backPressed
|
2023-01-14 21:37:23 +01:00
|
|
|
import jp.juggler.util.boolean
|
2023-02-04 21:52:26 +01:00
|
|
|
import jp.juggler.util.coroutine.launchAndShowError
|
2023-01-13 13:22:25 +01:00
|
|
|
import jp.juggler.util.data.mayUri
|
|
|
|
import jp.juggler.util.data.notEmpty
|
|
|
|
import jp.juggler.util.data.notZero
|
|
|
|
import jp.juggler.util.log.LogCategory
|
2023-01-14 21:37:23 +01:00
|
|
|
import jp.juggler.util.string
|
2023-01-13 13:22:25 +01:00
|
|
|
import jp.juggler.util.ui.*
|
2019-01-21 00:00:59 +01:00
|
|
|
import org.jetbrains.anko.backgroundColor
|
|
|
|
import org.jetbrains.anko.textColor
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
class ActNickname : AppCompatActivity(), View.OnClickListener, ColorPickerDialogListener {
|
2021-05-22 00:03:16 +02:00
|
|
|
|
|
|
|
companion object {
|
|
|
|
private val log = LogCategory("ActNickname")
|
|
|
|
|
|
|
|
internal const val EXTRA_ACCT_ASCII = "acctAscii"
|
|
|
|
internal const val EXTRA_ACCT_PRETTY = "acctPretty"
|
|
|
|
internal const val EXTRA_SHOW_NOTIFICATION_SOUND = "show_notification_sound"
|
|
|
|
|
|
|
|
fun createIntent(
|
|
|
|
activity: Activity,
|
|
|
|
fullAcct: Acct,
|
2021-06-20 15:12:25 +02:00
|
|
|
bShowNotificationSound: Boolean,
|
2021-05-22 00:03:16 +02:00
|
|
|
) = Intent(activity, ActNickname::class.java).apply {
|
|
|
|
putExtra(EXTRA_ACCT_ASCII, fullAcct.ascii)
|
|
|
|
putExtra(EXTRA_ACCT_PRETTY, fullAcct.pretty)
|
|
|
|
putExtra(EXTRA_SHOW_NOTIFICATION_SOUND, bShowNotificationSound)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-11 09:51:49 +02:00
|
|
|
private val views by lazy {
|
|
|
|
ActNicknameBinding.inflate(layoutInflater)
|
|
|
|
}
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2023-01-14 21:37:23 +01:00
|
|
|
private val acctAscii by lazy {
|
|
|
|
intent?.string(EXTRA_ACCT_ASCII)!!
|
|
|
|
}
|
|
|
|
private val acctPretty by lazy {
|
|
|
|
intent?.string(EXTRA_ACCT_PRETTY)!!
|
|
|
|
}
|
|
|
|
private val showNotificationSound by lazy {
|
|
|
|
intent?.boolean(EXTRA_SHOW_NOTIFICATION_SOUND) ?: false
|
|
|
|
}
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
private var colorFg = 0
|
|
|
|
private var colorBg = 0
|
|
|
|
private var notificationSoundUri: String? = null
|
|
|
|
private var loadingBusy = false
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2022-08-06 00:52:31 +02:00
|
|
|
private val arNotificationSound = ActivityResultHandler(log) { r ->
|
2023-01-13 13:22:25 +01:00
|
|
|
r.decodeRingtonePickerResult?.let { uri ->
|
2022-08-06 00:52:31 +02:00
|
|
|
notificationSoundUri = uri.toString()
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
2022-09-10 23:09:26 +02:00
|
|
|
backPressed {
|
|
|
|
setResult(RESULT_OK)
|
|
|
|
finish()
|
|
|
|
}
|
2022-08-06 00:52:31 +02:00
|
|
|
arNotificationSound.register(this)
|
2021-05-22 00:03:16 +02:00
|
|
|
App1.setActivityTheme(this)
|
|
|
|
|
|
|
|
initUI()
|
|
|
|
load()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun initUI() {
|
2023-01-14 21:37:23 +01:00
|
|
|
setContentView(views.root)
|
|
|
|
setSupportActionBar(views.toolbar)
|
|
|
|
setNavigationBack(views.toolbar)
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2023-01-14 21:37:23 +01:00
|
|
|
supportActionBar?.subtitle = getString(
|
2021-06-20 15:12:25 +02:00
|
|
|
when {
|
|
|
|
showNotificationSound -> R.string.nickname_and_color_and_notification_sound
|
|
|
|
else -> R.string.nickname_and_color
|
|
|
|
}
|
2021-05-22 00:03:16 +02:00
|
|
|
)
|
2023-01-14 21:37:23 +01:00
|
|
|
fixHorizontalMargin(views.llContent)
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2022-08-11 09:51:49 +02:00
|
|
|
views.btnTextColorEdit.setOnClickListener(this)
|
|
|
|
views.btnTextColorReset.setOnClickListener(this)
|
|
|
|
views.btnBackgroundColorEdit.setOnClickListener(this)
|
|
|
|
views.btnBackgroundColorReset.setOnClickListener(this)
|
|
|
|
views.btnSave.setOnClickListener(this)
|
|
|
|
views.btnDiscard.setOnClickListener(this)
|
|
|
|
|
|
|
|
views.btnNotificationSoundEdit.setOnClickListener(this)
|
|
|
|
views.btnNotificationSoundReset.setOnClickListener(this)
|
|
|
|
|
|
|
|
views.btnNotificationSoundEdit.isEnabledAlpha = false
|
|
|
|
views.btnNotificationSoundReset.isEnabledAlpha = false
|
|
|
|
|
|
|
|
views.etNickname.addTextChangedListener(object : TextWatcher {
|
2021-05-22 00:03:16 +02:00
|
|
|
override fun beforeTextChanged(
|
|
|
|
s: CharSequence,
|
|
|
|
start: Int,
|
|
|
|
count: Int,
|
2021-06-20 15:12:25 +02:00
|
|
|
after: Int,
|
2021-05-22 00:03:16 +02:00
|
|
|
) {
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun afterTextChanged(s: Editable) {
|
|
|
|
show()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun load() {
|
2021-06-20 15:12:25 +02:00
|
|
|
loadingBusy = true
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2023-01-14 21:37:23 +01:00
|
|
|
views.llNotificationSound.vg(showNotificationSound)
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2022-08-11 09:51:49 +02:00
|
|
|
views.tvAcct.text = acctPretty
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2023-02-04 21:52:26 +01:00
|
|
|
val ac = daoAcctColor.load(acctAscii)
|
|
|
|
colorBg = ac.colorBg
|
|
|
|
colorFg = ac.colorFg
|
2022-08-11 09:51:49 +02:00
|
|
|
views.etNickname.setText(ac.nickname)
|
2023-02-04 21:52:26 +01:00
|
|
|
notificationSoundUri = ac.notificationSound
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
loadingBusy = false
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun save() {
|
2021-06-20 15:12:25 +02:00
|
|
|
if (loadingBusy) return
|
2023-02-04 21:52:26 +01:00
|
|
|
launchAndShowError {
|
|
|
|
daoAcctColor.save(
|
|
|
|
System.currentTimeMillis(),
|
|
|
|
AcctColor(
|
2023-02-10 09:44:41 +01:00
|
|
|
acctAscii = acctAscii,
|
2023-02-04 21:52:26 +01:00
|
|
|
nicknameSave = views.etNickname.text.toString().trim { it <= ' ' },
|
|
|
|
colorFg = colorFg,
|
|
|
|
colorBg = colorBg,
|
|
|
|
notificationSoundSaved = notificationSoundUri ?: "",
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun show() {
|
2022-08-11 09:51:49 +02:00
|
|
|
val s = views.etNickname.text.toString().trim { it <= ' ' }
|
|
|
|
views.tvPreview.text = s.notEmpty() ?: acctPretty
|
|
|
|
views.tvPreview.textColor = colorFg.notZero() ?: attrColor(R.attr.colorTimeSmall)
|
|
|
|
views.tvPreview.backgroundColor = colorBg
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onClick(v: View) {
|
|
|
|
val builder: ColorPickerDialog.Builder
|
|
|
|
when (v.id) {
|
|
|
|
R.id.btnTextColorEdit -> {
|
2022-08-11 09:51:49 +02:00
|
|
|
views.etNickname.hideKeyboard()
|
2021-05-22 00:03:16 +02:00
|
|
|
builder = ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(false)
|
|
|
|
.setDialogId(1)
|
2021-06-20 15:12:25 +02:00
|
|
|
if (colorFg != 0) builder.setColor(colorFg)
|
2021-05-22 00:03:16 +02:00
|
|
|
builder.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnTextColorReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
colorFg = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnBackgroundColorEdit -> {
|
2022-08-11 09:51:49 +02:00
|
|
|
views.etNickname.hideKeyboard()
|
2021-05-22 00:03:16 +02:00
|
|
|
builder = ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(false)
|
|
|
|
.setDialogId(2)
|
2021-06-20 15:12:25 +02:00
|
|
|
if (colorBg != 0) builder.setColor(colorBg)
|
2021-05-22 00:03:16 +02:00
|
|
|
builder.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnBackgroundColorReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
colorBg = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnSave -> {
|
|
|
|
save()
|
|
|
|
setResult(Activity.RESULT_OK)
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnDiscard -> {
|
|
|
|
setResult(Activity.RESULT_CANCELED)
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnNotificationSoundEdit -> openNotificationSoundPicker()
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
R.id.btnNotificationSoundReset -> notificationSoundUri = ""
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-20 13:16:56 +01:00
|
|
|
override fun onColorSelected(dialogId: Int, @ColorInt newColor: Int) {
|
2021-05-22 00:03:16 +02:00
|
|
|
when (dialogId) {
|
2021-11-20 13:16:56 +01:00
|
|
|
1 -> colorFg = -0x1000000 or newColor
|
|
|
|
2 -> colorBg = -0x1000000 or newColor
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDialogDismissed(dialogId: Int) {}
|
|
|
|
|
|
|
|
private fun openNotificationSoundPicker() {
|
|
|
|
val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
|
|
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION)
|
|
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, R.string.notification_sound)
|
|
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false)
|
|
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false)
|
2021-06-20 15:12:25 +02:00
|
|
|
notificationSoundUri.mayUri()?.let {
|
2021-05-22 00:03:16 +02:00
|
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, it)
|
|
|
|
}
|
|
|
|
val chooser = Intent.createChooser(intent, getString(R.string.notification_sound))
|
|
|
|
arNotificationSound.launch(chooser)
|
|
|
|
}
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|