summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-12-11 15:54:35 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-07 15:01:22 +0000
commit44214ee5c319581155e3b62dbbc2642f3c468c70 (patch)
treef67498e5792d139ae60774e4c0e48124e82639fc /android/src
parenta714a0c95f5898b416cc965820c6dd63d38d45e8 (diff)
downloadmullvadvpn-44214ee5c319581155e3b62dbbc2642f3c468c70.tar.xz
mullvadvpn-44214ee5c319581155e3b62dbbc2642f3c468c70.zip
Handle no service connection in `SettingsFragment`
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt64
1 files changed, 46 insertions, 18 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
index fbaae8e557..df68241819 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
@@ -20,9 +20,6 @@ import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
import org.joda.time.DateTime
class SettingsFragment : ServiceAwareFragment() {
- private lateinit var accountCache: AccountCache
- private lateinit var versionInfoCache: AppVersionInfoCache
-
private lateinit var accountMenu: View
private lateinit var appVersionWarning: View
private lateinit var appVersionLabel: TextView
@@ -30,12 +27,25 @@ class SettingsFragment : ServiceAwareFragment() {
private lateinit var remainingTimeLabel: RemainingTimeLabel
private lateinit var wireguardKeysMenu: View
+ private var active = false
+
+ private var accountCache: AccountCache? = null
+ private var versionInfoCache: AppVersionInfoCache? = null
private var updateAccountInfoJob: Job? = null
private var updateVersionInfoJob: Job? = null
override fun onNewServiceConnection(serviceConnection: ServiceConnection) {
accountCache = serviceConnection.accountCache
versionInfoCache = serviceConnection.appVersionInfoCache
+
+ if (active) {
+ configureListeners()
+ }
+ }
+
+ override fun onNoServiceConnection() {
+ accountCache = null
+ versionInfoCache = null
}
override fun onCreateView(
@@ -82,20 +92,15 @@ class SettingsFragment : ServiceAwareFragment() {
override fun onResume() {
super.onResume()
- accountCache.onAccountDataChange = { account, expiry ->
- updateAccountInfoJob?.cancel()
- updateAccountInfoJob = updateAccountInfo(account != null, expiry)
- }
-
- versionInfoCache.onUpdate = {
- updateVersionInfoJob?.cancel()
- updateVersionInfoJob = updateVersionInfo()
- }
+ configureListeners()
+ active = true
}
override fun onPause() {
- versionInfoCache.onUpdate = null
- accountCache.onAccountDataChange = null
+ active = false
+ versionInfoCache?.onUpdate = null
+ accountCache?.onAccountDataChange = null
+
super.onPause()
}
@@ -105,6 +110,24 @@ class SettingsFragment : ServiceAwareFragment() {
super.onDestroyView()
}
+ private fun configureListeners() {
+ accountCache?.apply {
+ refetch()
+
+ onAccountDataChange = { account, expiry ->
+ updateAccountInfoJob?.cancel()
+ updateAccountInfoJob = updateAccountInfo(account != null, expiry)
+ }
+ }
+
+ versionInfoCache?.apply {
+ onUpdate = {
+ updateVersionInfoJob?.cancel()
+ updateVersionInfoJob = updateVersionInfo()
+ }
+ }
+ }
+
private fun openSubFragment(fragment: Fragment) {
fragmentManager?.beginTransaction()?.apply {
setCustomAnimations(
@@ -125,8 +148,10 @@ class SettingsFragment : ServiceAwareFragment() {
startActivity(intent)
}
- private fun updateAccountInfo(loggedIn: Boolean, expiry: DateTime?)
- = GlobalScope.launch(Dispatchers.Main) {
+ private fun updateAccountInfo(
+ loggedIn: Boolean,
+ expiry: DateTime?
+ ) = GlobalScope.launch(Dispatchers.Main) {
updateLoggedInStatus(loggedIn)
remainingTimeLabel.accountExpiry = expiry
}
@@ -143,9 +168,12 @@ class SettingsFragment : ServiceAwareFragment() {
}
private fun updateVersionInfo() = GlobalScope.launch(Dispatchers.Main) {
- appVersionLabel.setText(versionInfoCache.version ?: "")
+ val isOutdated = versionInfoCache?.isOutdated ?: false
+ val isSupported = versionInfoCache?.isSupported ?: true
+
+ appVersionLabel.setText(versionInfoCache?.version ?: "")
- if (!versionInfoCache.isOutdated && versionInfoCache.isSupported) {
+ if (!isOutdated && isSupported) {
appVersionWarning.visibility = View.GONE
appVersionFooter.visibility = View.GONE
} else {