Replace unneeded activity restarts

This commit is contained in:
Bnyro 2023-02-18 10:14:05 +01:00
parent 97bd9da857
commit 933cff7ae6
6 changed files with 52 additions and 33 deletions

View File

@ -48,6 +48,7 @@ object PreferenceKeys {
const val CUSTOM_INSTANCE = "customInstance"
const val CLEAR_CUSTOM_INSTANCES = "clearCustomInstances"
const val LOGIN_REGISTER = "login_register"
const val LOGOUT = "logout"
const val DELETE_ACCOUNT = "delete_account"
/**

View File

@ -4,7 +4,6 @@ import android.app.Dialog
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
@ -15,7 +14,9 @@ import com.github.libretube.extensions.TAG
import com.github.libretube.helpers.PreferenceHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DeleteAccountDialog : DialogFragment() {
class DeleteAccountDialog(
private val onLogout: () -> Unit
) : DialogFragment() {
private lateinit var binding: DialogDeleteAccountBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@ -51,8 +52,7 @@ class DeleteAccountDialog : DialogFragment() {
}
Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show()
PreferenceHelper.setToken("")
ActivityCompat.recreate(requireActivity())
onLogout.invoke()
dialog?.dismiss()
}
}

View File

@ -4,7 +4,6 @@ import android.app.Dialog
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.github.libretube.R
@ -16,7 +15,9 @@ import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.util.TextUtils
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class LoginDialog : DialogFragment() {
class LoginDialog(
private val onLogin: () -> Unit
) : DialogFragment() {
private lateinit var binding: DialogLoginBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@ -96,8 +97,8 @@ class LoginDialog : DialogFragment() {
PreferenceHelper.setToken(response.token)
PreferenceHelper.setUsername(login.username)
onLogin.invoke()
dialog?.dismiss()
ActivityCompat.recreate(requireActivity())
}
}

View File

@ -4,14 +4,15 @@ import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.fragment.app.DialogFragment
import com.github.libretube.R
import com.github.libretube.databinding.DialogLogoutBinding
import com.github.libretube.helpers.PreferenceHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class LogoutDialog : DialogFragment() {
class LogoutDialog(
private val onLogout: () -> Unit
) : DialogFragment() {
private lateinit var binding: DialogLogoutBinding
@SuppressLint("SetTextI18n")
@ -24,9 +25,9 @@ class LogoutDialog : DialogFragment() {
binding.user.text.toString() + " (" + user + ")"
binding.logout.setOnClickListener {
Toast.makeText(context, R.string.loggedout, Toast.LENGTH_SHORT).show()
PreferenceHelper.setToken("")
onLogout.invoke()
dialog?.dismiss()
ActivityCompat.recreate(requireActivity())
}
return MaterialAlertDialogBuilder(requireContext())

View File

@ -27,6 +27,7 @@ import kotlinx.coroutines.withContext
class InstanceSettings : BasePreferenceFragment() {
override val titleResourceId: Int = R.string.instance
private val token get() = PreferenceHelper.getToken()
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.instance_settings, rootKey)
@ -37,7 +38,7 @@ class InstanceSettings : BasePreferenceFragment() {
RetrofitInstance.url = newValue.toString()
if (!PreferenceHelper.getBoolean(PreferenceKeys.AUTH_INSTANCE_TOGGLE, false)) {
RetrofitInstance.authUrl = newValue.toString()
logout()
logoutAndUpdateUI()
}
RetrofitInstance.lazyMgr.reset()
ActivityCompat.recreate(requireActivity())
@ -54,8 +55,7 @@ class InstanceSettings : BasePreferenceFragment() {
// save new auth url
RetrofitInstance.authUrl = newValue.toString()
RetrofitInstance.lazyMgr.reset()
logout()
ActivityCompat.recreate(requireActivity())
logoutAndUpdateUI()
true
}
@ -63,7 +63,6 @@ class InstanceSettings : BasePreferenceFragment() {
findPreference<SwitchPreferenceCompat>(PreferenceKeys.AUTH_INSTANCE_TOGGLE)
authInstanceToggle?.setOnPreferenceChangeListener { _, newValue ->
authInstance.isVisible = newValue == true
logout()
// either use new auth url or the normal api url if auth instance disabled
RetrofitInstance.authUrl = if (newValue == false) {
RetrofitInstance.url
@ -71,14 +70,14 @@ class InstanceSettings : BasePreferenceFragment() {
authInstance.value
}
RetrofitInstance.lazyMgr.reset()
ActivityCompat.recreate(requireActivity())
logoutAndUpdateUI()
true
}
val customInstance = findPreference<Preference>(PreferenceKeys.CUSTOM_INSTANCE)
customInstance?.setOnPreferenceClickListener {
val newFragment = CustomInstanceDialog()
newFragment.show(childFragmentManager, CustomInstanceDialog::class.java.name)
CustomInstanceDialog()
.show(childFragmentManager, CustomInstanceDialog::class.java.name)
true
}
@ -92,25 +91,32 @@ class InstanceSettings : BasePreferenceFragment() {
}
val login = findPreference<Preference>(PreferenceKeys.LOGIN_REGISTER)
val token = PreferenceHelper.getToken()
if (token != "") login?.setTitle(R.string.logout)
login?.setOnPreferenceClickListener {
if (token == "") {
val newFragment = LoginDialog()
newFragment.show(childFragmentManager, LoginDialog::class.java.name)
} else {
val newFragment = LogoutDialog()
newFragment.show(childFragmentManager, LogoutDialog::class.java.name)
}
val logout = findPreference<Preference>(PreferenceKeys.LOGOUT)
val deleteAccount = findPreference<Preference>(PreferenceKeys.DELETE_ACCOUNT)
login?.isVisible = token.isEmpty()
logout?.isVisible = token.isNotEmpty()
deleteAccount?.isEnabled = token.isNotEmpty()
login?.setOnPreferenceClickListener {
LoginDialog {
login.isVisible = false
logout?.isVisible = true
deleteAccount?.isEnabled = true
}
.show(childFragmentManager, LoginDialog::class.java.name)
true
}
logout?.setOnPreferenceClickListener {
LogoutDialog(this::logoutAndUpdateUI)
.show(childFragmentManager, LogoutDialog::class.java.name)
true
}
val deleteAccount = findPreference<Preference>(PreferenceKeys.DELETE_ACCOUNT)
deleteAccount?.isEnabled = PreferenceHelper.getToken() != ""
deleteAccount?.setOnPreferenceClickListener {
val newFragment = DeleteAccountDialog()
newFragment.show(childFragmentManager, DeleteAccountDialog::class.java.name)
DeleteAccountDialog(this::logoutAndUpdateUI)
.show(childFragmentManager, DeleteAccountDialog::class.java.name)
true
}
}
@ -153,8 +159,11 @@ class InstanceSettings : BasePreferenceFragment() {
}
}
private fun logout() {
private fun logoutAndUpdateUI() {
PreferenceHelper.setToken("")
Toast.makeText(context, getString(R.string.loggedout), Toast.LENGTH_SHORT).show()
findPreference<Preference>(PreferenceKeys.LOGIN_REGISTER)?.isVisible = true
findPreference<Preference>(PreferenceKeys.LOGOUT)?.isVisible = false
findPreference<Preference>(PreferenceKeys.DELETE_ACCOUNT)?.isEnabled = false
}
}

View File

@ -48,6 +48,13 @@
app:key="login_register"
app:title="@string/login_register" />
<Preference
android:icon="@drawable/ic_login_filled"
android:summary="@string/notgmail"
app:isPreferenceVisible="false"
app:key="logout"
app:title="@string/logout" />
<Preference
android:icon="@drawable/ic_reset"
android:summary="@string/deleteAccount_summary"