[skip ci] feat: theme crash fix

This commit is contained in:
aayush262 2024-04-18 01:55:15 +05:30
parent cd3bb20afd
commit 3d1040b280
15 changed files with 121 additions and 73 deletions

View file

@ -306,23 +306,18 @@ fun Activity.reloadActivity() {
initActivity(this)
}
fun Context.restartApp(view: View) {
fun Activity.restartApp() {
val mainIntent = Intent.makeRestartActivityTask(
packageManager.getLaunchIntentForPackage(this.packageName)!!.component
)
val component = ComponentName(this@restartApp.packageName, this@restartApp::class.qualifiedName!!)
Snackbar.make(view, R.string.restart_app, Snackbar.LENGTH_INDEFINITE).apply {
setAction(R.string.do_it) {
this.dismiss()
try {
startActivity(Intent().setComponent(component))
} catch (anything: Exception) {
} catch (e: Exception) {
startActivity(mainIntent)
}
Runtime.getRuntime().exit(0)
}
show()
}
finishAndRemoveTask()
PrefManager.setCustomVal("reload", true)
}
open class BottomSheetDialogFragment : BottomSheetDialogFragment() {

View file

@ -11,9 +11,9 @@ data class Settings(
val icon : Int,
val onClick: ((ItemSettingsBinding) -> Unit)? = null,
val onLongClick: (() -> Unit)? = null,
var isChecked : Boolean = false,
val switch: ((isChecked:Boolean , view: ItemSettingsSwitchBinding ) -> Unit)? = null,
val attach:((ItemSettingsBinding) -> Unit)? = null,
val isVisible: Boolean = true,
val isActivity: Boolean = false,
val attach:((ViewGroup) -> Unit)? = null
var isChecked : Boolean = false,
)

View file

@ -18,6 +18,7 @@ import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.statusBarHeight
import ani.dantotsu.themes.ThemeManager
import ani.dantotsu.util.Logger
class SettingsAboutActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsAboutBinding
@ -42,7 +43,7 @@ class SettingsAboutActivity : AppCompatActivity() {
Settings(
type = 1,
name = getString(R.string.faq),
desc = getString(R.string.faq),
desc = getString(R.string.faq_desc),
icon = R.drawable.ic_round_help_24,
onClick = {
startActivity(Intent(context, FAQActivity::class.java))
@ -52,7 +53,7 @@ class SettingsAboutActivity : AppCompatActivity() {
Settings(
type = 2,
name = getString(R.string.check_app_updates),
desc = getString(R.string.check_app_updates),
desc = getString(R.string.check_app_updates_desc),
icon = R.drawable.ic_round_new_releases_24,
isChecked = PrefManager.getVal(PrefName.CheckUpdate),
switch = { isChecked, _ ->
@ -63,7 +64,7 @@ class SettingsAboutActivity : AppCompatActivity() {
Settings(
type = 2,
name = getString(R.string.share_username_in_crash_reports),
desc = getString(R.string.share_username_in_crash_reports),
desc = getString(R.string.share_username_in_crash_reports_desc),
icon = R.drawable.ic_round_search_24,
isChecked = PrefManager.getVal(PrefName.SharedUserID),
switch = { isChecked, _ ->
@ -79,13 +80,19 @@ class SettingsAboutActivity : AppCompatActivity() {
isChecked = PrefManager.getVal(PrefName.LogToFile),
switch = { isChecked, _ ->
PrefManager.setVal(PrefName.LogToFile, isChecked)
restartApp(binding.root)
restartApp()
},
attach = {
it.settingsDesc.setOnLongClickListener {
Logger.shareLog(context)
true
}
}
),
Settings(
type = 1,
name = getString(R.string.devs),
desc= getString(R.string.devs),
desc= getString(R.string.devs_desc),
icon = R.drawable.ic_round_accessible_forward_24,
onClick = {
DevelopersDialogFragment().show(supportFragmentManager, "dialog")
@ -94,7 +101,7 @@ class SettingsAboutActivity : AppCompatActivity() {
Settings(
type = 1,
name = getString(R.string.forks),
desc = getString(R.string.forks),
desc = getString(R.string.forks_desc),
icon = R.drawable.ic_round_restaurant_24,
onClick = {
ForksDialogFragment().show(supportFragmentManager, "dialog")
@ -103,7 +110,7 @@ class SettingsAboutActivity : AppCompatActivity() {
Settings(
type = 1,
name = getString(R.string.disclaimer),
desc = getString(R.string.disclaimer),
desc = getString(R.string.disclaimer_desc),
icon = R.drawable.ic_round_info_24,
onClick = {
val text = TextView(context)

View file

@ -11,6 +11,7 @@ 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
@ -28,6 +29,7 @@ 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
@ -40,9 +42,6 @@ import kotlin.random.Random
class SettingsActivity : AppCompatActivity() {
private val restartMainActivity = object : OnBackPressedCallback(false) {
override fun handleOnBackPressed() = startMainActivity(this@SettingsActivity)
}
lateinit var binding: ActivitySettingsBinding
private var cursedCounter = 0
@ -70,7 +69,14 @@ class SettingsActivity : AppCompatActivity() {
bottomMargin = navBarHeight
}
onBackPressedDispatcher.addCallback(context, restartMainActivity)
onBackPressedDispatcher.addCallback(context){
if (PrefManager.getCustomVal("reload", false)) {
startMainActivity(context)
PrefManager.setCustomVal("reload", false)
}else{
finish()
}
}
settingsBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
@ -262,4 +268,8 @@ class SettingsActivity : AppCompatActivity() {
?: "Unknown Architecture"
}
}
override fun onResume() {
ThemeManager(this).applyTheme()
super.onResume()
}
}

View file

@ -64,7 +64,7 @@ class SettingsAdapter(private val settings: ArrayList<Settings>) :
b.settingsIconRight.visibility =
if (settings.isActivity) View.VISIBLE else View.GONE
b.attachView.visibility = if (settings.attach != null) View.VISIBLE else View.GONE
settings.attach?.invoke(b.attachView)
settings.attach?.invoke(b)
}
2 -> {

View file

@ -100,7 +100,7 @@ class SettingsAnimeActivity: AppCompatActivity(){
isChecked = PrefManager.getVal(PrefName.IncludeAnimeList),
switch = { isChecked, _ ->
PrefManager.setVal(PrefName.IncludeAnimeList, isChecked)
restartApp(binding.root)
restartApp()
}
),
)

View file

@ -73,14 +73,14 @@ class SettingsCommonActivity: AppCompatActivity(){
toast(getString(R.string.incorrect_password))
return@passwordAlertDialog
}
if (PreferencePackager.unpack(decryptedJson)) restartApp(binding.root)
if (PreferencePackager.unpack(decryptedJson)) restartApp()
} else {
toast(getString(R.string.password_cannot_be_empty))
}
}
} else if (name.endsWith(".ani")) {
val decryptedJson = jsonString.toString(Charsets.UTF_8)
if (PreferencePackager.unpack(decryptedJson)) restartApp(binding.root)
if (PreferencePackager.unpack(decryptedJson)) restartApp()
} else {
toast(getString(R.string.unknown_file_type))
}
@ -127,7 +127,7 @@ class SettingsCommonActivity: AppCompatActivity(){
settingsExtensionDns.setOnItemClickListener { _, _, i, _ ->
PrefManager.setVal(PrefName.DohProvider, i)
settingsExtensionDns.clearFocus()
restartApp(binding.root)
restartApp()
}
settingsRecyclerView.adapter = SettingsAdapter(
@ -294,7 +294,7 @@ class SettingsCommonActivity: AppCompatActivity(){
isChecked = PrefManager.getVal(PrefName.AdultOnly),
switch = {isChecked, _ ->
PrefManager.setVal(PrefName.AdultOnly, isChecked)
restartApp(binding.root)
restartApp()
},
isVisible = Anilist.adult

View file

@ -161,13 +161,12 @@ class SettingsExtensionsActivity: AppCompatActivity() {
desc = getString(R.string.anime_add_repository),
icon = R.drawable.ic_github,
onClick = {
val dialogView = layoutInflater.inflate(R.layout.dialog_user_agent, null)
val editText =
dialogView.findViewById<TextInputEditText>(R.id.userAgentTextBox).apply {
val dialogView = DialogUserAgentBinding.inflate(layoutInflater)
val editText = dialogView.userAgentTextBox.apply {
hint = getString(R.string.anime_add_repository)
}
val alertDialog = AlertDialog.Builder(context, R.style.MyPopup)
.setTitle(R.string.anime_add_repository).setView(dialogView)
.setTitle(R.string.anime_add_repository).setView(dialogView.root)
.setPositiveButton(getString(R.string.ok)) { dialog, _ ->
if (!editText.text.isNullOrBlank()) processUserInput(
editText.text.toString(),
@ -183,8 +182,8 @@ class SettingsExtensionsActivity: AppCompatActivity() {
alertDialog.show()
alertDialog.window?.setDimAmount(0.8f)
},
attach = { view ->
setExtensionOutput(view, MediaType.ANIME)
attach = {
setExtensionOutput(it.attachView, MediaType.ANIME)
}
),
Settings(
@ -193,13 +192,12 @@ class SettingsExtensionsActivity: AppCompatActivity() {
desc = getString(R.string.manga_add_repository),
icon = R.drawable.ic_github,
onClick = {
val dialogView = layoutInflater.inflate(R.layout.dialog_user_agent, null)
val editText =
dialogView.findViewById<TextInputEditText>(R.id.userAgentTextBox).apply {
val dialogView = DialogUserAgentBinding.inflate(layoutInflater)
val editText = dialogView.userAgentTextBox.apply {
hint = getString(R.string.manga_add_repository)
}
val alertDialog = AlertDialog.Builder(context, R.style.MyPopup)
.setTitle(R.string.manga_add_repository).setView(dialogView)
.setTitle(R.string.manga_add_repository).setView(dialogView.root)
.setPositiveButton(getString(R.string.ok)) { dialog, _ ->
if (!editText.text.isNullOrBlank()) processUserInput(
editText.text.toString(),
@ -215,8 +213,8 @@ class SettingsExtensionsActivity: AppCompatActivity() {
alertDialog.show()
alertDialog.window?.setDimAmount(0.8f)
},
attach = { view ->
setExtensionOutput(view, MediaType.MANGA)
attach = {
setExtensionOutput(it.attachView, MediaType.MANGA)
}
),
Settings(

View file

@ -123,7 +123,7 @@ class SettingsMangaActivity: AppCompatActivity(){
isChecked = PrefManager.getVal(PrefName.IncludeMangaList),
switch = {isChecked, _ ->
PrefManager.setVal(PrefName.IncludeMangaList, isChecked)
restartApp(binding.root)
restartApp()
}
),
)

View file

@ -1,10 +1,13 @@
package ani.dantotsu.settings
import android.content.ComponentName
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.activity.addCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.LinearLayoutManager
@ -37,8 +40,21 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
topMargin = statusBarHeight
bottomMargin = navBarHeight
}
themeSettingsBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
onBackPressedDispatcher.addCallback(context) {
val mainIntent = Intent.makeRestartActivityTask(
packageManager.getLaunchIntentForPackage(packageName)!!.component
)
val component = ComponentName(packageName, SettingsActivity::class.qualifiedName!!)
try {
startActivity(Intent().setComponent(component))
} catch (anything: Exception) {
startActivity(mainIntent)
}
finishAndRemoveTask()
}
themeSettingsBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
var previous: View = when (PrefManager.getVal<Int>(PrefName.DarkMode)) {
0 -> settingsUiAuto
1 -> settingsUiLight
@ -87,7 +103,7 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
ThemeManager.Companion.Theme.entries[i].theme
)
clearFocus()
restartApp(binding.root)
reload()
}
}
@ -101,7 +117,7 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
isChecked = PrefManager.getVal(PrefName.UseOLED),
switch = { isChecked, _ ->
PrefManager.setVal(PrefName.UseOLED, isChecked)
restartApp(binding.root)
reload()
}
),
Settings(
@ -113,7 +129,7 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
switch = { isChecked, _ ->
PrefManager.setVal(PrefName.UseMaterialYou, isChecked)
if (isChecked) PrefManager.setVal(PrefName.UseCustomTheme, false)
restartApp(binding.root)
reload()
},
isVisible = Build.VERSION.SDK_INT > Build.VERSION_CODES.R
),
@ -125,7 +141,6 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
isChecked = PrefManager.getVal(PrefName.UseSourceTheme),
switch = { isChecked, _ ->
PrefManager.setVal(PrefName.UseSourceTheme, isChecked)
restartApp(binding.root)
},
isVisible = Build.VERSION.SDK_INT > Build.VERSION_CODES.R
),
@ -138,7 +153,7 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
switch = { isChecked, _ ->
PrefManager.setVal(PrefName.UseCustomTheme, isChecked)
if (isChecked) PrefManager.setVal(PrefName.UseMaterialYou, false)
restartApp(binding.root)
reload()
},
isVisible = Build.VERSION.SDK_INT > Build.VERSION_CODES.R
),
@ -151,7 +166,7 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
val originalColor: Int = PrefManager.getVal(PrefName.CustomThemeInt)
class CustomColorDialog : SimpleColorDialog() {
override fun onPositiveButtonClick() {
restartApp(binding.root)
reload()
super.onPositiveButtonClick()
}
}
@ -183,4 +198,9 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
}
return true
}
fun reload(){
PrefManager.setCustomVal("reload", true)
restartApp()
}
}

View file

@ -48,7 +48,7 @@ class UserInterfaceSettingsActivity : AppCompatActivity() {
}
setPositiveButton("Done") { _, _ ->
PrefManager.setVal(PrefName.HomeLayoutShow, set)
restartApp(binding.root)
restartApp()
}
}.show()
dialog.window?.setDimAmount(0.8f)
@ -57,24 +57,24 @@ class UserInterfaceSettingsActivity : AppCompatActivity() {
binding.uiSettingsSmallView.isChecked = PrefManager.getVal(PrefName.SmallView)
binding.uiSettingsSmallView.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.SmallView, isChecked)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsImmersive.isChecked = PrefManager.getVal(PrefName.ImmersiveMode)
binding.uiSettingsImmersive.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.ImmersiveMode, isChecked)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsBannerAnimation.isChecked = PrefManager.getVal(PrefName.BannerAnimations)
binding.uiSettingsBannerAnimation.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.BannerAnimations, isChecked)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsLayoutAnimation.isChecked = PrefManager.getVal(PrefName.LayoutAnimations)
binding.uiSettingsLayoutAnimation.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.LayoutAnimations, isChecked)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsTrendingScroller.isChecked = PrefManager.getVal(PrefName.TrendingScroller)
@ -98,22 +98,22 @@ class UserInterfaceSettingsActivity : AppCompatActivity() {
mapReverse[PrefManager.getVal(PrefName.AnimationSpeed)] ?: 1f
binding.uiSettingsAnimationSpeed.addOnChangeListener { _, value, _ ->
PrefManager.setVal(PrefName.AnimationSpeed, map[value] ?: 1f)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsBlurBanners.isChecked = PrefManager.getVal(PrefName.BlurBanners)
binding.uiSettingsBlurBanners.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.BlurBanners, isChecked)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsBlurRadius.value = (PrefManager.getVal(PrefName.BlurRadius) as Float)
binding.uiSettingsBlurRadius.addOnChangeListener { _, value, _ ->
PrefManager.setVal(PrefName.BlurRadius, value)
restartApp(binding.root)
restartApp()
}
binding.uiSettingsBlurSampling.value = (PrefManager.getVal(PrefName.BlurSampling) as Float)
binding.uiSettingsBlurSampling.addOnChangeListener { _, value, _ ->
PrefManager.setVal(PrefName.BlurSampling, value)
restartApp(binding.root)
restartApp()
}
}
}

View file

@ -3,8 +3,17 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginBottom="16dp"
android:orientation="vertical">
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="3dp"
android:alpha="0.7"
android:fontFamily="@font/poppins_bold"
android:text="•"
android:textSize="16sp"
tools:ignore="HardcodedText,RtlSymmetry" />
<TextView
android:id="@+id/repositoryItem"
@ -12,8 +21,8 @@
android:layout_height="wrap_content"
android:textSize="12sp"
android:ellipsize="end"
android:layout_gravity="center"
android:alpha="0.66"
android:textAlignment="viewStart"
android:textColor="?attr/colorOnBackground"
android:singleLine="true"
tools:text="xyz repo"/>

View file

@ -6,13 +6,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:id="@+id/settingsIcon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="top"
android:layout_marginVertical="24dp"
android:layout_marginEnd="24dp"
app:srcCompat="@drawable/ic_circle_add"
@ -43,23 +43,26 @@
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/slogan"
android:textColor="?attr/colorOnSurfaceVariant" />
<LinearLayout
android:id="@+id/attachView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginTop="4dp"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
<ImageView
android:id="@+id/settingsIconRight"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginVertical="24dp"
android:rotation="180"
android:visibility="gone"
tools:visibility="visible"
app:srcCompat="@drawable/ic_round_arrow_back_ios_new_24"
app:tint="?attr/colorPrimary"
android:rotation="180"
tools:ignore="ContentDescription" />
tools:ignore="ContentDescription"
tools:visibility="visible" />
</LinearLayout>

View file

@ -6,13 +6,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:id="@+id/settingsIcon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="top"
android:layout_marginVertical="24dp"
android:layout_marginEnd="24dp"
app:srcCompat="@drawable/ic_circle_add"
@ -33,9 +33,9 @@
android:elegantTextHeight="true"
android:fontFamily="@font/poppins_bold"
android:text="@string/name"
android:textSize="16sp"
android:textAlignment="viewStart"
android:textColor="?attr/colorOnBackground"
android:textSize="16sp"
app:cornerRadius="0dp"
app:drawableTint="?attr/colorPrimary"
app:showText="false"

View file

@ -377,7 +377,7 @@
<string name="search_source_list">Search next available source</string>
<string name="timestamp_proxy_desc">Useful if you are getting Handshake Fails</string>
<string name="timestamp_proxy">Use Proxy for Timestamps</string>
<string name="check_app_updates">Always check for App Updates</string>
<string name="check_app_updates">Check for Updates</string>
<string name="author">Author</string>
<string name="forks">Versions</string>
<string name="faq">FAQ</string>
@ -716,7 +716,7 @@
<string name="purge_manga_downloads">Delete all Manga Downloads</string>
<string name="purge_novel_downloads">Delete all Novel Downloads</string>
<string name="requires_android_12">Requires Android 12+</string>
<string name="share_username_in_crash_reports">Share username in crash reports</string>
<string name="share_username_in_crash_reports">Share username</string>
<string name="pinned_sources">Pinned Sources</string>
<string name="backup_restore">Backup and Restore</string>
<string name="restore_settings">Import Settings</string>
@ -903,4 +903,10 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
<string name="anime_desc">Choose how you watch</string>
<string name="manga_desc">Choose how you read</string>
<string name="about_desc">Learn more about Dantotsu</string>
<string name="faq_desc">General questions about Dantotsu</string>
<string name="check_app_updates_desc">Check Github for app updates</string>
<string name="share_username_in_crash_reports_desc">Share username in crash reports</string>
<string name="devs_desc">Dantotsu\'s very own unpaid labours </string>
<string name="forks_desc">More like Dantotsu</string>
<string name="disclaimer_desc">Something to keep in mind</string>
</resources>