231 lines
11 KiB
Kotlin
231 lines
11 KiB
Kotlin
package ani.dantotsu.settings
|
|
|
|
import android.content.Intent
|
|
import android.os.Bundle
|
|
import android.view.HapticFeedbackConstants
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.view.animation.AnimationUtils
|
|
import android.widget.TextView
|
|
import androidx.activity.OnBackPressedCallback
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.core.view.updateLayoutParams
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import ani.dantotsu.R
|
|
import ani.dantotsu.connections.anilist.Anilist
|
|
import ani.dantotsu.connections.discord.Discord
|
|
import ani.dantotsu.connections.mal.MAL
|
|
import ani.dantotsu.databinding.ActivitySettingsAccountsBinding
|
|
import ani.dantotsu.initActivity
|
|
import ani.dantotsu.loadImage
|
|
import ani.dantotsu.navBarHeight
|
|
import ani.dantotsu.openLinkInBrowser
|
|
import ani.dantotsu.others.CustomBottomDialog
|
|
import ani.dantotsu.settings.saving.PrefManager
|
|
import ani.dantotsu.settings.saving.PrefName
|
|
import ani.dantotsu.startMainActivity
|
|
import ani.dantotsu.statusBarHeight
|
|
import ani.dantotsu.themes.ThemeManager
|
|
import io.noties.markwon.Markwon
|
|
import io.noties.markwon.SoftBreakAddsNewLinePlugin
|
|
import kotlinx.coroutines.launch
|
|
|
|
class SettingsAccountActivity : AppCompatActivity() {
|
|
private lateinit var binding: ActivitySettingsAccountsBinding
|
|
private val restartMainActivity = object : OnBackPressedCallback(false) {
|
|
override fun handleOnBackPressed() = startMainActivity(this@SettingsAccountActivity)
|
|
}
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
ThemeManager(this).applyTheme()
|
|
initActivity(this)
|
|
val context = this
|
|
|
|
binding = ActivitySettingsAccountsBinding.inflate(layoutInflater)
|
|
setContentView(binding.root)
|
|
|
|
binding.apply {
|
|
settingsAccountsLayout.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
|
topMargin = statusBarHeight
|
|
bottomMargin = navBarHeight
|
|
}
|
|
accountSettingsBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
|
|
|
|
settingsAccountHelp.setOnClickListener {
|
|
CustomBottomDialog.newInstance().apply {
|
|
setTitleText(context.getString(R.string.account_help))
|
|
addView(
|
|
TextView(it.context).apply {
|
|
val markWon = Markwon.builder(it.context)
|
|
.usePlugin(SoftBreakAddsNewLinePlugin.create()).build()
|
|
markWon.setMarkdown(this, context.getString(R.string.full_account_help))
|
|
}
|
|
)
|
|
}.show(supportFragmentManager, "dialog")
|
|
}
|
|
|
|
fun reload() {
|
|
if (Anilist.token != null) {
|
|
settingsAnilistLogin.setText(R.string.logout)
|
|
settingsAnilistLogin.setOnClickListener {
|
|
Anilist.removeSavedToken()
|
|
restartMainActivity.isEnabled = true
|
|
reload()
|
|
}
|
|
settingsAnilistUsername.visibility = View.VISIBLE
|
|
settingsAnilistUsername.text = Anilist.username
|
|
settingsAnilistAvatar.loadImage(Anilist.avatar)
|
|
settingsAnilistAvatar.setOnClickListener {
|
|
it.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
|
val anilistLink = getString(
|
|
R.string.anilist_link,
|
|
PrefManager.getVal<String>(PrefName.AnilistUserName)
|
|
)
|
|
openLinkInBrowser(anilistLink)
|
|
}
|
|
|
|
settingsMALLoginRequired.visibility = View.GONE
|
|
settingsMALLogin.visibility = View.VISIBLE
|
|
settingsMALUsername.visibility = View.VISIBLE
|
|
|
|
if (MAL.token != null) {
|
|
settingsMALLogin.setText(R.string.logout)
|
|
settingsMALLogin.setOnClickListener {
|
|
MAL.removeSavedToken()
|
|
restartMainActivity.isEnabled = true
|
|
reload()
|
|
}
|
|
settingsMALUsername.visibility = View.VISIBLE
|
|
settingsMALUsername.text = MAL.username
|
|
settingsMALAvatar.loadImage(MAL.avatar)
|
|
settingsMALAvatar.setOnClickListener {
|
|
it.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
|
openLinkInBrowser(getString(R.string.myanilist_link, MAL.username))
|
|
}
|
|
} else {
|
|
settingsMALAvatar.setImageResource(R.drawable.ic_round_person_24)
|
|
settingsMALUsername.visibility = View.GONE
|
|
settingsMALLogin.setText(R.string.login)
|
|
settingsMALLogin.setOnClickListener {
|
|
MAL.loginIntent(context)
|
|
}
|
|
}
|
|
} else {
|
|
settingsAnilistAvatar.setImageResource(R.drawable.ic_round_person_24)
|
|
settingsAnilistUsername.visibility = View.GONE
|
|
settingsRecyclerView.visibility = View.GONE
|
|
settingsAnilistLogin.setText(R.string.login)
|
|
settingsAnilistLogin.setOnClickListener {
|
|
Anilist.loginIntent(context)
|
|
}
|
|
settingsMALLoginRequired.visibility = View.VISIBLE
|
|
settingsMALLogin.visibility = View.GONE
|
|
settingsMALUsername.visibility = View.GONE
|
|
}
|
|
|
|
if (Discord.token != null) {
|
|
val id = PrefManager.getVal(PrefName.DiscordId, null as String?)
|
|
val avatar = PrefManager.getVal(PrefName.DiscordAvatar, null as String?)
|
|
val username = PrefManager.getVal(PrefName.DiscordUserName, null as String?)
|
|
if (id != null && avatar != null) {
|
|
settingsDiscordAvatar.loadImage("https://cdn.discordapp.com/avatars/$id/$avatar.png")
|
|
settingsDiscordAvatar.setOnClickListener {
|
|
it.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
|
val discordLink = getString(R.string.discord_link, id)
|
|
openLinkInBrowser(discordLink)
|
|
}
|
|
}
|
|
settingsDiscordUsername.visibility = View.VISIBLE
|
|
settingsDiscordUsername.text =
|
|
username ?: Discord.token?.replace(Regex("."), "*")
|
|
settingsDiscordLogin.setText(R.string.logout)
|
|
settingsDiscordLogin.setOnClickListener {
|
|
Discord.removeSavedToken(context)
|
|
restartMainActivity.isEnabled = true
|
|
reload()
|
|
}
|
|
|
|
settingsPresenceSwitcher.visibility = View.VISIBLE
|
|
var initialStatus = when (PrefManager.getVal<String>(PrefName.DiscordStatus)) {
|
|
"online" -> R.drawable.discord_status_online
|
|
"idle" -> R.drawable.discord_status_idle
|
|
"dnd" -> R.drawable.discord_status_dnd
|
|
"invisible" -> R.drawable.discord_status_invisible
|
|
else -> R.drawable.discord_status_online
|
|
}
|
|
settingsPresenceSwitcher.setImageResource(initialStatus)
|
|
|
|
val zoomInAnimation =
|
|
AnimationUtils.loadAnimation(context, R.anim.bounce_zoom)
|
|
settingsPresenceSwitcher.setOnClickListener {
|
|
var status = "online"
|
|
initialStatus = when (initialStatus) {
|
|
R.drawable.discord_status_online -> {
|
|
status = "idle"
|
|
R.drawable.discord_status_idle
|
|
}
|
|
|
|
R.drawable.discord_status_idle -> {
|
|
status = "dnd"
|
|
R.drawable.discord_status_dnd
|
|
}
|
|
|
|
R.drawable.discord_status_dnd -> {
|
|
status = "invisible"
|
|
R.drawable.discord_status_invisible
|
|
}
|
|
|
|
R.drawable.discord_status_invisible -> {
|
|
status = "online"
|
|
R.drawable.discord_status_online
|
|
}
|
|
|
|
else -> R.drawable.discord_status_online
|
|
}
|
|
|
|
PrefManager.setVal(PrefName.DiscordStatus, status)
|
|
settingsPresenceSwitcher.setImageResource(initialStatus)
|
|
settingsPresenceSwitcher.startAnimation(zoomInAnimation)
|
|
}
|
|
settingsPresenceSwitcher.setOnLongClickListener {
|
|
it.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
|
DiscordDialogFragment().show(supportFragmentManager, "dialog")
|
|
true
|
|
}
|
|
} else {
|
|
settingsPresenceSwitcher.visibility = View.GONE
|
|
settingsDiscordAvatar.setImageResource(R.drawable.ic_round_person_24)
|
|
settingsDiscordUsername.visibility = View.GONE
|
|
settingsDiscordLogin.setText(R.string.login)
|
|
settingsDiscordLogin.setOnClickListener {
|
|
Discord.warning(context)
|
|
.show(supportFragmentManager, "dialog")
|
|
}
|
|
}
|
|
}
|
|
reload()
|
|
}
|
|
binding.settingsRecyclerView.adapter = SettingsAdapter(
|
|
arrayListOf(
|
|
Settings(
|
|
type = 1,
|
|
name = getString(R.string.anilist_settings),
|
|
desc = getString(R.string.alsettings_desc),
|
|
icon = R.drawable.ic_anilist,
|
|
onClick = {
|
|
lifecycleScope.launch {
|
|
Anilist.query.getUserData()
|
|
startActivity(Intent(context, AnilistSettingsActivity::class.java))
|
|
}
|
|
},
|
|
isActivity = true
|
|
),
|
|
)
|
|
)
|
|
binding.settingsRecyclerView.layoutManager =
|
|
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
|
|
|
}
|
|
}
|