Dantotsu/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt
2024-04-18 01:55:15 +05:30

275 lines
11 KiB
Kotlin

package ani.dantotsu.settings
import android.content.Intent
import android.graphics.drawable.Animatable
import android.os.Build.BRAND
import android.os.Build.DEVICE
import android.os.Build.SUPPORTED_ABIS
import android.os.Build.VERSION.CODENAME
import android.os.Build.VERSION.RELEASE
import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import android.view.ViewGroup
import android.widget.TextView
import androidx.activity.addCallback
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.BuildConfig
import ani.dantotsu.R
import ani.dantotsu.copyToClipboard
import ani.dantotsu.databinding.ActivitySettingsBinding
import ani.dantotsu.initActivity
import ani.dantotsu.navBarHeight
import ani.dantotsu.openLinkInBrowser
import ani.dantotsu.openLinkInYouTube
import ani.dantotsu.others.AppUpdater
import ani.dantotsu.others.CustomBottomDialog
import ani.dantotsu.pop
import ani.dantotsu.setSafeOnClickListener
import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.snackString
import ani.dantotsu.startMainActivity
import ani.dantotsu.statusBarHeight
import ani.dantotsu.themes.ThemeManager
import ani.dantotsu.toast
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.random.Random
class SettingsActivity : AppCompatActivity() {
lateinit var binding: ActivitySettingsBinding
private var cursedCounter = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ThemeManager(this).applyTheme()
initActivity(this)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
val context = this
binding.apply {
settingsVersion.apply {
text = getString(R.string.version_current, BuildConfig.VERSION_NAME)
settingsVersion.setOnLongClickListener {
copyToClipboard(getDeviceInfo(), false)
toast(getString(R.string.copied_device_info))
return@setOnLongClickListener true
}
}
settingsContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight
bottomMargin = navBarHeight
}
onBackPressedDispatcher.addCallback(context){
if (PrefManager.getCustomVal("reload", false)) {
startMainActivity(context)
PrefManager.setCustomVal("reload", false)
}else{
finish()
}
}
settingsBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.settingsRecyclerView.adapter = SettingsAdapter(
arrayListOf(
Settings(
type = 1,
name = getString(R.string.accounts),
desc = getString(R.string.accounts_desc),
icon = R.drawable.ic_round_person_24,
onClick = {
startActivity(Intent(context, SettingsAccountActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.theme),
desc = getString(R.string.theme_desc),
icon = R.drawable.ic_palette,
onClick = {
startActivity(Intent(context, SettingsThemeActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.common),
desc = getString(R.string.common_desc),
icon = R.drawable.ic_lightbulb_24,
onClick = {
startActivity(Intent(context, SettingsCommonActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.anime),
desc = getString(R.string.anime_desc),
icon = R.drawable.ic_round_movie_filter_24,
onClick = {
startActivity(Intent(context, SettingsAnimeActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.manga),
desc = getString(R.string.manga_desc),
icon = R.drawable.ic_round_import_contacts_24,
onClick = {
startActivity(Intent(context, SettingsMangaActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.extensions),
desc = getString(R.string.extensions_desc),
icon = R.drawable.ic_extension,
onClick = {
startActivity(Intent(context, SettingsExtensionsActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.notifications),
desc = getString(R.string.notifications_desc),
icon = R.drawable.ic_round_notifications_none_24,
onClick = {
startActivity(Intent(context, SettingsNotificationActivity::class.java))
},
isActivity = true
),
Settings(
type = 1,
name = getString(R.string.about),
desc = getString(R.string.about_desc),
icon = R.drawable.ic_round_info_24,
onClick = {
startActivity(Intent(context, SettingsAboutActivity::class.java))
},
isActivity = true
)
)
)
settingsRecyclerView.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
setHasFixedSize(true)
}
if (!BuildConfig.FLAVOR.contains("fdroid")) {
settingsLogo.setOnLongClickListener {
lifecycleScope.launch(Dispatchers.IO) {
AppUpdater.check(this@SettingsActivity, true)
}
true
}
}
settingBuyMeCoffee.setOnClickListener {
lifecycleScope.launch {
it.pop()
}
openLinkInBrowser(getString(R.string.coffee))
}
lifecycleScope.launch {
settingBuyMeCoffee.pop()
}
loginDiscord.setOnClickListener {
openLinkInBrowser(getString(R.string.discord))
}
loginGithub.setOnClickListener {
openLinkInBrowser(getString(R.string.github))
}
loginTelegram.setOnClickListener {
openLinkInBrowser(getString(R.string.telegram))
}
(settingsLogo.drawable as Animatable).start()
val array = resources.getStringArray(R.array.tips)
settingsLogo.setSafeOnClickListener {
cursedCounter++
(settingsLogo.drawable as Animatable).start()
if (cursedCounter % 7 == 0) {
toast(R.string.you_cursed)
openLinkInYouTube(getString(R.string.cursed_yt))
//PrefManager.setVal(PrefName.ImageUrl, !PrefManager.getVal(PrefName.ImageUrl, false))
} else {
snackString(array[(Math.random() * array.size).toInt()], context)
}
}
lifecycleScope.launch(Dispatchers.IO) {
delay(2000)
runOnUiThread {
if (Random.nextInt(0, 100) > 69) {
CustomBottomDialog.newInstance().apply {
title = this@SettingsActivity.getString(R.string.enjoying_app)
addView(TextView(this@SettingsActivity).apply {
text = context.getString(R.string.consider_donating)
})
setNegativeButton(this@SettingsActivity.getString(R.string.no_moners)) {
snackString(R.string.you_be_rich)
dismiss()
}
setPositiveButton(this@SettingsActivity.getString(R.string.donate)) {
settingBuyMeCoffee.performClick()
dismiss()
}
show(supportFragmentManager, "dialog")
}
}
}
}
}
}
companion object {
fun getDeviceInfo(): String {
return """
dantotsu Version: ${BuildConfig.VERSION_NAME}
Device: $BRAND $DEVICE
Architecture: ${getArch()}
OS Version: $CODENAME $RELEASE ($SDK_INT)
""".trimIndent()
}
private fun getArch(): String {
SUPPORTED_ABIS.forEach {
when (it) {
"arm64-v8a" -> return "aarch64"
"armeabi-v7a" -> return "arm"
"x86_64" -> return "x86_64"
"x86" -> return "i686"
}
}
return System.getProperty("os.arch") ?: System.getProperty("os.product.cpu.abi")
?: "Unknown Architecture"
}
}
override fun onResume() {
ThemeManager(this).applyTheme()
super.onResume()
}
}