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 { 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() } }