diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/android/ServiceClientFragment.java')
-rw-r--r-- | app/src/main/java/com/wireguard/android/ServiceClientFragment.java | 61 |
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; + } +} |