mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 15:30:31 +05:30
Merge pull request #3112 from Bnyro/master
Better login/register error messages
This commit is contained in:
commit
ee1484fafa
@ -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"
|
||||
|
||||
/**
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -4,19 +4,24 @@ 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
|
||||
import com.github.libretube.api.JsonHelper
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.Login
|
||||
import com.github.libretube.api.obj.Token
|
||||
import com.github.libretube.databinding.DialogLoginBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.helpers.PreferenceHelper
|
||||
import com.github.libretube.util.TextUtils
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import retrofit2.HttpException
|
||||
|
||||
class LoginDialog : DialogFragment() {
|
||||
class LoginDialog(
|
||||
private val onLogin: () -> Unit
|
||||
) : DialogFragment() {
|
||||
private lateinit var binding: DialogLoginBinding
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
@ -75,6 +80,12 @@ class LoginDialog : DialogFragment() {
|
||||
} else {
|
||||
RetrofitInstance.authApi.login(login)
|
||||
}
|
||||
} catch (e: HttpException) {
|
||||
val errorMessage = e.response()?.errorBody()?.string()?.let {
|
||||
JsonHelper.json.decodeFromString<Token>(it).error
|
||||
} ?: context?.getString(R.string.server_error) ?: ""
|
||||
Toast.makeText(context, errorMessage, Toast.LENGTH_SHORT).show()
|
||||
return@launchWhenCreated
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG(), e.toString())
|
||||
Toast.makeText(context, e.localizedMessage, Toast.LENGTH_SHORT).show()
|
||||
@ -96,8 +107,8 @@ class LoginDialog : DialogFragment() {
|
||||
PreferenceHelper.setToken(response.token)
|
||||
PreferenceHelper.setUsername(login.username)
|
||||
|
||||
onLogin.invoke()
|
||||
dialog?.dismiss()
|
||||
ActivityCompat.recreate(requireActivity())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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())
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user