summaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java/com/wireguard/android/ServiceClientFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/wireguard/android/ServiceClientFragment.java')
-rw-r--r--app/src/main/java/com/wireguard/android/ServiceClientFragment.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/ServiceClientFragment.java b/app/src/main/java/com/wireguard/android/ServiceClientFragment.java
new file mode 100644
index 00000000..3b209438
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/ServiceClientFragment.java
@@ -0,0 +1,61 @@
+package com.wireguard.android;
+
+import android.app.Fragment;
+import android.content.Context;
+
+/**
+ * Base class for fragments in activities that maintain a connection to a background service.
+ */
+
+abstract class ServiceClientFragment<T> extends Fragment implements ServiceConnectionListener<T> {
+ private ServiceConnectionProvider<T> provider;
+ private T service;
+
+ protected T getService() {
+ return service;
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ @SuppressWarnings("unchecked")
+ final ServiceConnectionProvider<T> localContext = (ServiceConnectionProvider<T>) context;
+ provider = localContext;
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ provider = null;
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ provider.addServiceConnectionListener(this);
+ // Run the handler if the connection state changed while we were not paying attention.
+ final T localService = provider.getService();
+ if (localService != service) {
+ if (localService != null)
+ onServiceConnected(localService);
+ else
+ onServiceDisconnected();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ provider.removeServiceConnectionListener(this);
+ }
+
+ @Override
+ public void onServiceConnected(T service) {
+ this.service = service;
+ }
+
+ @Override
+ public void onServiceDisconnected() {
+ service = null;
+ }
+}