NetworkPreferences: Simplify proxy setup yet again

* Allow to view and edit proxy URL without turning it off and on
* Add a new disable button in proxy dialog
* Trim whitespace and disallow new lines in the proxy URL field
* Disable buttons when not applicable

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-02-18 14:46:42 +08:00
parent cff88b1e17
commit 076b6ad291
50 changed files with 50 additions and 199 deletions

View File

@@ -27,7 +27,6 @@ import com.aurora.store.R
import com.aurora.store.data.model.Algorithm
import com.aurora.store.data.model.ProxyInfo
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_ENABLED
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_INFO
import com.google.gson.Gson
import dagger.Module
@@ -97,10 +96,8 @@ object OkHttpClientModule {
@Provides
@Singleton
fun providesProxyInstance(@ApplicationContext context: Context, gson: Gson): Proxy? {
val proxyEnabled = Preferences.getBoolean(context, PREFERENCE_PROXY_ENABLED)
val proxyInfoString = Preferences.getString(context, PREFERENCE_PROXY_INFO)
if (proxyEnabled && proxyInfoString.isNotBlank() && proxyInfoString != "{}") {
if (proxyInfoString.isNotBlank() && proxyInfoString != "{}") {
val proxyInfo = gson.fromJson(proxyInfoString, ProxyInfo::class.java)
val proxy = Proxy(

View File

@@ -46,7 +46,6 @@ object Preferences {
const val PREFERENCE_PROXY_URL = "PREFERENCE_PROXY_URL"
const val PREFERENCE_PROXY_INFO = "PREFERENCE_PROXY_INFO"
const val PREFERENCE_PROXY_ENABLED = "PREFERENCE_PROXY_ENABLED"
const val PREFERENCE_MICROG_AUTH = "PREFERENCE_MICROG_AUTH"

View File

@@ -19,7 +19,6 @@
package com.aurora.store.view.ui.preferences
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
@@ -32,26 +31,17 @@ import com.aurora.store.R
import com.aurora.store.util.PackageUtil
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_MICROG_AUTH
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_ENABLED
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_INFO
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_URL
import com.aurora.store.util.remove
import com.aurora.store.util.Preferences.PREFERENCE_VENDING_VERSION
import com.aurora.store.util.save
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class NetworkPreference : BasePreferenceFragment(),
SharedPreferences.OnSharedPreferenceChangeListener {
private lateinit var sharedPreferences: SharedPreferences
class NetworkPreference : BasePreferenceFragment() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_network, rootKey)
val proxyURL = Preferences.getString(requireContext(), PREFERENCE_PROXY_URL)
sharedPreferences = Preferences.getPrefs(requireContext())
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
findPreference<Preference>(Preferences.PREFERENCE_DISPENSER_URLS)?.apply {
setOnPreferenceClickListener {
findNavController().navigate(R.id.dispenserFragment)
@@ -59,27 +49,14 @@ class NetworkPreference : BasePreferenceFragment(),
}
}
findPreference<Preference>(PREFERENCE_PROXY_URL)?.apply {
if (proxyURL.isNotBlank()) summary = proxyURL
findPreference<Preference>(PREFERENCE_PROXY_URL)?.setOnPreferenceClickListener { _ ->
findNavController().navigate(R.id.proxyURLDialog)
false
}
findPreference<SwitchPreferenceCompat>(PREFERENCE_PROXY_ENABLED)?.apply {
isChecked = proxyURL.isNotBlank()
setOnPreferenceChangeListener { _, newValue ->
if (newValue.toString().toBoolean()) {
findNavController().navigate(R.id.proxyURLDialog)
} else {
remove(PREFERENCE_PROXY_URL)
remove(PREFERENCE_PROXY_INFO)
findNavController().navigate(R.id.forceRestartDialog)
}
false
}
}
findPreference<Preference>(Preferences.PREFERENCE_VENDING_VERSION)?.let {
findPreference<Preference>(PREFERENCE_VENDING_VERSION)?.let {
it.setOnPreferenceChangeListener { _, newValue ->
save(Preferences.PREFERENCE_VENDING_VERSION, Integer.parseInt(newValue.toString()))
save(PREFERENCE_VENDING_VERSION, Integer.parseInt(newValue.toString()))
runOnUiThread {
requireContext().toast(R.string.insecure_anonymous_apply)
}
@@ -98,16 +75,4 @@ class NetworkPreference : BasePreferenceFragment(),
setNavigationOnClickListener { findNavController().navigateUp() }
}
}
override fun onDestroyView() {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onDestroyView()
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
if (key == PREFERENCE_PROXY_URL) {
findPreference<SwitchPreferenceCompat>(PREFERENCE_PROXY_ENABLED)?.isChecked =
Preferences.getString(requireContext(), PREFERENCE_PROXY_URL).isNotBlank()
}
}
}

View File

@@ -1,10 +1,10 @@
package com.aurora.store.view.ui.preferences
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.Dialog
import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AlertDialog
import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
@@ -15,6 +15,7 @@ import com.aurora.store.util.CommonUtil
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_INFO
import com.aurora.store.util.Preferences.PREFERENCE_PROXY_URL
import com.aurora.store.util.remove
import com.aurora.store.util.save
import com.aurora.store.viewmodel.preferences.ProxyURLViewModel
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -26,6 +27,8 @@ class ProxyURLDialog: DialogFragment() {
private val viewModel: ProxyURLViewModel by viewModels()
private val currentProxyUrl: String
get() = Preferences.getString(requireContext(), PREFERENCE_PROXY_URL)
private val textInputLayout: TextInputLayout?
get() = dialog?.findViewById(R.id.textInputLayout)
@@ -35,31 +38,41 @@ class ProxyURLDialog: DialogFragment() {
.setTitle(R.string.pref_network_proxy_url)
.setMessage(R.string.pref_network_proxy_url_message)
.setView(view)
.setPositiveButton(getString(R.string.add), null)
.setPositiveButton(getString(R.string.set), null)
.setNeutralButton(getString(R.string.disable), null)
.setNegativeButton(getString(android.R.string.cancel)) { _, _ -> dialog?.dismiss()}
.create()
alertDialog.setOnShowListener {
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { saveProxyUrl() }
val positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).apply {
isEnabled = currentProxyUrl.isNotBlank()
setOnClickListener { saveProxyUrl() }
}
textInputLayout?.editText?.doOnTextChanged { text, _, _, _ ->
positiveButton.isEnabled = !text.isNullOrBlank()
}
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).apply {
isEnabled = currentProxyUrl.isNotBlank()
setOnClickListener { deleteProxyUrl() }
}
}
return alertDialog
}
@SuppressLint("AuthLeak") // False-positive
override fun onResume() {
super.onResume()
textInputLayout?.editText?.apply {
hint = "protocol://user:password@host:port"
setText(Preferences.getString(context, PREFERENCE_PROXY_URL))
setText(currentProxyUrl)
showKeyboard()
}
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
}
private fun saveProxyUrl() {
val url = textInputLayout?.editText?.text?.toString()
val url = textInputLayout?.editText?.text?.toString()?.trim()
if (url.isNullOrEmpty()) {
toast(R.string.add_dispenser_error)
toast(R.string.toast_proxy_invalid)
return
}
@@ -74,4 +87,11 @@ class ProxyURLDialog: DialogFragment() {
toast(R.string.toast_proxy_failed)
}
}
private fun deleteProxyUrl() {
remove(PREFERENCE_PROXY_URL)
remove(PREFERENCE_PROXY_INFO)
toast(R.string.toast_proxy_disabled)
findNavController().navigate(R.id.forceRestartDialog)
}
}