summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt47
2 files changed, 48 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index 4780433223..f9c9f24bac 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -30,7 +30,7 @@ class MainActivity : FragmentActivity() {
val KEY_SHOULD_CONNECT = "should_connect"
}
- var serviceConnection: ServiceConnection? = null
+ private var serviceConnection: ServiceConnection? = null
private var serviceConnectionSubscription: Int? = null
var daemon = CompletableDeferred<MullvadDaemon>()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
new file mode 100644
index 0000000000..833f539a75
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
@@ -0,0 +1,47 @@
+package net.mullvad.mullvadvpn.ui
+
+import android.content.Context
+import android.support.v4.app.Fragment
+
+abstract class ServiceAwareFragment : Fragment() {
+ lateinit var parentActivity: MainActivity
+ private set
+
+ var serviceConnection: ServiceConnection? = null
+ private set
+
+ private var subscriptionId: Int? = null
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+
+ parentActivity = context as MainActivity
+
+ subscriptionId = parentActivity.serviceNotifier.subscribe { connection ->
+ configureServiceConnection(connection)
+ }
+ }
+
+ override fun onDetach() {
+ subscriptionId?.let { id ->
+ parentActivity.serviceNotifier.unsubscribe(id)
+ }
+
+ super.onDetach()
+ }
+
+ abstract fun onNewServiceConnection(serviceConnection: ServiceConnection)
+
+ open fun onNoServiceConnection() {
+ }
+
+ private fun configureServiceConnection(connection: ServiceConnection?) {
+ serviceConnection = connection
+
+ if (connection != null) {
+ onNewServiceConnection(connection)
+ } else {
+ onNoServiceConnection()
+ }
+ }
+}