diff options
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt | 2 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt | 47 |
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() + } + } +} |
