summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-15 17:57:22 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-15 17:57:22 -0300
commit5e03db35829fb4489ad44fb52f604ae714eac8e6 (patch)
tree5d9a73aeb253ba8af9da9b9ecca4e58b43f76de3
parent85755c98cb707a405e4483494118298ab6d10930 (diff)
parentfe0d7eb2986951bd0208a87d97c2f8ae94f71c7f (diff)
downloadmullvadvpn-5e03db35829fb4489ad44fb52f604ae714eac8e6.tar.xz
mullvadvpn-5e03db35829fb4489ad44fb52f604ae714eac8e6.zip
Merge branch 'fix-app-version-info-crash'
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt10
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt8
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt23
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt22
5 files changed, 43 insertions, 24 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt
index 09aadb0a7a..45dfb620a5 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt
@@ -103,6 +103,8 @@ class ConnectFragment : Fragment() {
override fun onResume() {
super.onResume()
+ notificationBanner.onResume()
+
locationInfo.isTunnelInfoExpanded = isTunnelInfoExpanded
keyStatusListener.onKeyStatusChange = { keyStatus ->
@@ -126,6 +128,8 @@ class ConnectFragment : Fragment() {
isTunnelInfoExpanded = locationInfo.isTunnelInfoExpanded
+ notificationBanner.onPause()
+
super.onPause()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
index 4af4d7d72d..15d33fbb04 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
@@ -39,9 +39,7 @@ class MainActivity : FragmentActivity() {
var service = CompletableDeferred<MullvadVpnService.LocalBinder>()
private set
- var currentVersion = fetchCurrentVersion()
-
- lateinit var appVersionInfoCache: AppVersionInfoCache
+ var appVersionInfoCache = AppVersionInfoCache(this)
val connectionProxy = ConnectionProxy(this)
val keyStatusListener = KeyStatusListener(daemon)
val problemReport = MullvadProblemReport()
@@ -81,7 +79,7 @@ class MainActivity : FragmentActivity() {
addInitialFragment()
}
- appVersionInfoCache = AppVersionInfoCache(this)
+ appVersionInfoCache.onCreate()
}
override fun onStart() {
@@ -173,8 +171,4 @@ class MainActivity : FragmentActivity() {
private fun fetchSettings() = GlobalScope.async(Dispatchers.Default) {
daemon.await().getSettings()
}
-
- private fun fetchCurrentVersion() = GlobalScope.async(Dispatchers.Default) {
- daemon.await().getCurrentVersion()
- }
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt
index 992945ecef..aa0aea2afe 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt
@@ -46,6 +46,14 @@ class NotificationBanner(
banner.setOnClickListener { onClick() }
}
+ fun onResume() {
+ versionInfoCache.onUpdate = { update() }
+ }
+
+ fun onPause() {
+ versionInfoCache.onUpdate = null
+ }
+
private fun update() {
externalLink = null
updateBasedOnKeyState() || updateBasedOnTunnelState() || updateBasedOnVersionInfo()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
index 5e36bfb268..ed9c2bf4ea 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
@@ -17,19 +17,24 @@ import android.widget.Button
import android.widget.ImageButton
import android.widget.TextView
+import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
+
class SettingsFragment : Fragment() {
private lateinit var parentActivity: MainActivity
+ private lateinit var versionInfoCache: AppVersionInfoCache
+
private lateinit var remainingTimeLabel: RemainingTimeLabel
private lateinit var appVersionWarning: View
private lateinit var appVersionLabel: TextView
private lateinit var appVersionFooter: View
- private var showCurrentVersionJob: Job? = null
+ private var updateVersionInfoJob: Job? = null
override fun onAttach(context: Context) {
super.onAttach(context)
parentActivity = context as MainActivity
+ versionInfoCache = parentActivity.appVersionInfoCache
}
override fun onCreateView(
@@ -62,23 +67,26 @@ class SettingsFragment : Fragment() {
appVersionLabel = view.findViewById<TextView>(R.id.app_version_label)
appVersionFooter = view.findViewById(R.id.app_version_footer)
- showCurrentVersionJob = showCurrentVersion()
-
return view
}
override fun onResume() {
super.onResume()
remainingTimeLabel.onResume()
+ versionInfoCache.onUpdate = {
+ updateVersionInfoJob?.cancel()
+ updateVersionInfoJob = updateVersionInfo()
+ }
}
override fun onPause() {
+ versionInfoCache.onUpdate = null
remainingTimeLabel.onPause()
super.onPause()
}
override fun onDestroyView() {
- showCurrentVersionJob?.cancel()
+ updateVersionInfoJob?.cancel()
super.onDestroyView()
}
@@ -102,11 +110,8 @@ class SettingsFragment : Fragment() {
startActivity(intent)
}
- private fun showCurrentVersion() = GlobalScope.launch(Dispatchers.Main) {
- val version = parentActivity.currentVersion.await()
- val versionInfoCache = parentActivity.appVersionInfoCache
-
- appVersionLabel.setText(version)
+ private fun updateVersionInfo() = GlobalScope.launch(Dispatchers.Main) {
+ appVersionLabel.setText(versionInfoCache.version ?: "")
if (versionInfoCache.isLatest && versionInfoCache.isSupported) {
appVersionWarning.visibility = View.GONE
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt
index cc5dff4417..ecd31e1e90 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt
@@ -19,10 +19,16 @@ class AppVersionInfoCache(val parentActivity: MainActivity) {
val SHARED_PREFERENCES = "app_version_info_cache"
}
- private val preferences =
- parentActivity.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
+ private val preferences: SharedPreferences
+ get() = parentActivity.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
- private val updateVersionJob = updateVersion()
+ private val fetchCurrentVersionJob = fetchCurrentVersion()
+
+ var onUpdate: (() -> Unit)? = null
+ set(value) {
+ field = value
+ value?.invoke()
+ }
var version: String? = null
private set
@@ -57,7 +63,7 @@ class AppVersionInfoCache(val parentActivity: MainActivity) {
}
}
- init {
+ fun onCreate() {
preferences.registerOnSharedPreferenceChangeListener(listener)
lastUpdated = preferences.getLong(KEY_LAST_UPDATED, 0L)
@@ -67,12 +73,12 @@ class AppVersionInfoCache(val parentActivity: MainActivity) {
}
fun onDestroy() {
- updateVersionJob.cancel()
+ fetchCurrentVersionJob.cancel()
preferences.unregisterOnSharedPreferenceChangeListener(listener)
}
- private fun updateVersion() = GlobalScope.launch(Dispatchers.Default) {
- val currentVersion = parentActivity.currentVersion.await()
+ private fun fetchCurrentVersion() = GlobalScope.launch(Dispatchers.Default) {
+ val currentVersion = parentActivity.daemon.await().getCurrentVersion()
version = currentVersion
isStable = !currentVersion.contains("-")
@@ -90,5 +96,7 @@ class AppVersionInfoCache(val parentActivity: MainActivity) {
isLatest = false
upgradeVersion = target
}
+
+ onUpdate?.invoke()
}
}