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:
@@ -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(
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user