diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-15 17:57:22 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-15 17:57:22 -0300 |
| commit | 5e03db35829fb4489ad44fb52f604ae714eac8e6 (patch) | |
| tree | 5d9a73aeb253ba8af9da9b9ecca4e58b43f76de3 | |
| parent | 85755c98cb707a405e4483494118298ab6d10930 (diff) | |
| parent | fe0d7eb2986951bd0208a87d97c2f8ae94f71c7f (diff) | |
| download | mullvadvpn-5e03db35829fb4489ad44fb52f604ae714eac8e6.tar.xz mullvadvpn-5e03db35829fb4489ad44fb52f604ae714eac8e6.zip | |
Merge branch 'fix-app-version-info-crash'
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() } } |
