aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/model/TunnelManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/wireguard/android/model/TunnelManager.java')
-rw-r--r--app/src/main/java/com/wireguard/android/model/TunnelManager.java50
1 files changed, 19 insertions, 31 deletions
diff --git a/app/src/main/java/com/wireguard/android/model/TunnelManager.java b/app/src/main/java/com/wireguard/android/model/TunnelManager.java
index 91d98842..6747d449 100644
--- a/app/src/main/java/com/wireguard/android/model/TunnelManager.java
+++ b/app/src/main/java/com/wireguard/android/model/TunnelManager.java
@@ -9,19 +9,16 @@ package com.wireguard.android.model;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.databinding.BaseObservable;
import android.databinding.Bindable;
import android.support.annotation.NonNull;
import com.wireguard.android.Application;
-import com.wireguard.android.Application.ApplicationScope;
import com.wireguard.android.BR;
import com.wireguard.android.backend.Backend;
import com.wireguard.android.configStore.ConfigStore;
import com.wireguard.android.model.Tunnel.State;
import com.wireguard.android.model.Tunnel.Statistics;
-import com.wireguard.android.util.AsyncWorker;
import com.wireguard.android.util.ExceptionLoggers;
import com.wireguard.android.util.ObservableKeyedList;
import com.wireguard.android.util.ObservableSortedKeyedArrayList;
@@ -33,8 +30,6 @@ import java.util.Collection;
import java.util.Comparator;
import java.util.Set;
-import javax.inject.Inject;
-
import java9.util.Comparators;
import java9.util.concurrent.CompletableFuture;
import java9.util.concurrent.CompletionStage;
@@ -45,7 +40,6 @@ import java9.util.stream.StreamSupport;
* Maintains and mediates changes to the set of available WireGuard tunnels,
*/
-@ApplicationScope
public final class TunnelManager extends BaseObservable {
private static final Comparator<String> COMPARATOR = Comparators.<String>thenComparing(
String.CASE_INSENSITIVE_ORDER, Comparators.naturalOrder());
@@ -53,23 +47,17 @@ public final class TunnelManager extends BaseObservable {
private static final String KEY_RESTORE_ON_BOOT = "restore_on_boot";
private static final String KEY_RUNNING_TUNNELS = "enabled_configs";
- private final AsyncWorker asyncWorker;
private final Backend backend;
private final ConfigStore configStore;
- private final SharedPreferences preferences;
private final ObservableSortedKeyedList<String, Tunnel> tunnels =
new ObservableSortedKeyedArrayList<>(COMPARATOR);
private Tunnel lastUsedTunnel;
private boolean haveLoaded;
private final ArrayList<CompletableFuture<Void>> delayedLoadRestoreTunnels = new ArrayList<>();
- @Inject
- public TunnelManager(final AsyncWorker asyncWorker, final Backend backend,
- final ConfigStore configStore, final SharedPreferences preferences) {
- this.asyncWorker = asyncWorker;
+ public TunnelManager(final Backend backend, final ConfigStore configStore) {
this.backend = backend;
this.configStore = configStore;
- this.preferences = preferences;
}
private Tunnel addToList(final String name, final Config config, final State state) {
@@ -85,7 +73,7 @@ public final class TunnelManager extends BaseObservable {
final String message = "Tunnel " + name + " already exists";
return CompletableFuture.failedFuture(new IllegalArgumentException(message));
}
- return asyncWorker.supplyAsync(() -> configStore.create(name, config))
+ return Application.getAsyncWorker().supplyAsync(() -> configStore.create(name, config))
.thenApply(savedConfig -> addToList(name, savedConfig, State.DOWN));
}
@@ -96,7 +84,7 @@ public final class TunnelManager extends BaseObservable {
if (wasLastUsed)
setLastUsedTunnel(null);
tunnels.remove(tunnel);
- return asyncWorker.runAsync(() -> {
+ return Application.getAsyncWorker().runAsync(() -> {
if (originalState == State.UP)
backend.setState(tunnel, State.DOWN);
try {
@@ -123,17 +111,17 @@ public final class TunnelManager extends BaseObservable {
}
CompletionStage<Config> getTunnelConfig(final Tunnel tunnel) {
- return asyncWorker.supplyAsync(() -> configStore.load(tunnel.getName()))
+ return Application.getAsyncWorker().supplyAsync(() -> configStore.load(tunnel.getName()))
.thenApply(tunnel::onConfigChanged);
}
CompletionStage<State> getTunnelState(final Tunnel tunnel) {
- return asyncWorker.supplyAsync(() -> backend.getState(tunnel))
+ return Application.getAsyncWorker().supplyAsync(() -> backend.getState(tunnel))
.thenApply(tunnel::onStateChanged);
}
CompletionStage<Statistics> getTunnelStatistics(final Tunnel tunnel) {
- return asyncWorker.supplyAsync(() -> backend.getStatistics(tunnel))
+ return Application.getAsyncWorker().supplyAsync(() -> backend.getStatistics(tunnel))
.thenApply(tunnel::onStatisticsChanged);
}
@@ -142,8 +130,8 @@ public final class TunnelManager extends BaseObservable {
}
public void onCreate() {
- asyncWorker.supplyAsync(configStore::enumerate)
- .thenAcceptBoth(asyncWorker.supplyAsync(backend::enumerate), this::onTunnelsLoaded)
+ Application.getAsyncWorker().supplyAsync(configStore::enumerate)
+ .thenAcceptBoth(Application.getAsyncWorker().supplyAsync(backend::enumerate), this::onTunnelsLoaded)
.whenComplete(ExceptionLoggers.E);
}
@@ -151,7 +139,7 @@ public final class TunnelManager extends BaseObservable {
private void onTunnelsLoaded(final Iterable<String> present, final Collection<String> running) {
for (final String name : present)
addToList(name, null, running.contains(name) ? State.UP : State.DOWN);
- final String lastUsedName = preferences.getString(KEY_LAST_USED_TUNNEL, null);
+ final String lastUsedName = Application.getSharedPreferences().getString(KEY_LAST_USED_TUNNEL, null);
if (lastUsedName != null)
setLastUsedTunnel(tunnels.get(lastUsedName));
final CompletableFuture<Void>[] toComplete;
@@ -171,7 +159,7 @@ public final class TunnelManager extends BaseObservable {
}
public void refreshTunnelStates() {
- asyncWorker.supplyAsync(backend::enumerate)
+ Application.getAsyncWorker().supplyAsync(backend::enumerate)
.thenAccept(running -> {
for (final Tunnel tunnel : tunnels)
tunnel.onStateChanged(running.contains(tunnel.getName()) ? State.UP : State.DOWN);
@@ -180,7 +168,7 @@ public final class TunnelManager extends BaseObservable {
}
public CompletionStage<Void> restoreState(final boolean force) {
- if (!force && !preferences.getBoolean(KEY_RESTORE_ON_BOOT, false))
+ if (!force && !Application.getSharedPreferences().getBoolean(KEY_RESTORE_ON_BOOT, false))
return CompletableFuture.completedFuture(null);
synchronized (delayedLoadRestoreTunnels) {
if (!haveLoaded) {
@@ -189,7 +177,7 @@ public final class TunnelManager extends BaseObservable {
return f;
}
}
- final Set<String> previouslyRunning = preferences.getStringSet(KEY_RUNNING_TUNNELS, null);
+ final Set<String> previouslyRunning = Application.getSharedPreferences().getStringSet(KEY_RUNNING_TUNNELS, null);
if (previouslyRunning == null)
return CompletableFuture.completedFuture(null);
return CompletableFuture.allOf(StreamSupport.stream(tunnels)
@@ -203,7 +191,7 @@ public final class TunnelManager extends BaseObservable {
.filter(tunnel -> tunnel.getState() == State.UP)
.map(Tunnel::getName)
.collect(Collectors.toUnmodifiableSet());
- preferences.edit().putStringSet(KEY_RUNNING_TUNNELS, runningTunnels).apply();
+ Application.getSharedPreferences().edit().putStringSet(KEY_RUNNING_TUNNELS, runningTunnels).apply();
}
private void setLastUsedTunnel(final Tunnel tunnel) {
@@ -212,13 +200,13 @@ public final class TunnelManager extends BaseObservable {
lastUsedTunnel = tunnel;
notifyPropertyChanged(BR.lastUsedTunnel);
if (tunnel != null)
- preferences.edit().putString(KEY_LAST_USED_TUNNEL, tunnel.getName()).apply();
+ Application.getSharedPreferences().edit().putString(KEY_LAST_USED_TUNNEL, tunnel.getName()).apply();
else
- preferences.edit().remove(KEY_LAST_USED_TUNNEL).apply();
+ Application.getSharedPreferences().edit().remove(KEY_LAST_USED_TUNNEL).apply();
}
CompletionStage<Config> setTunnelConfig(final Tunnel tunnel, final Config config) {
- return asyncWorker.supplyAsync(() -> {
+ return Application.getAsyncWorker().supplyAsync(() -> {
final Config appliedConfig = backend.applyConfig(tunnel, config);
return configStore.save(tunnel.getName(), appliedConfig);
}).thenApply(tunnel::onConfigChanged);
@@ -237,7 +225,7 @@ public final class TunnelManager extends BaseObservable {
if (wasLastUsed)
setLastUsedTunnel(null);
tunnels.remove(tunnel);
- return asyncWorker.supplyAsync(() -> {
+ return Application.getAsyncWorker().supplyAsync(() -> {
if (originalState == State.UP)
backend.setState(tunnel, State.DOWN);
configStore.rename(tunnel.getName(), name);
@@ -259,7 +247,7 @@ public final class TunnelManager extends BaseObservable {
CompletionStage<State> setTunnelState(final Tunnel tunnel, final State state) {
// Ensure the configuration is loaded before trying to use it.
return tunnel.getConfigAsync().thenCompose(x ->
- asyncWorker.supplyAsync(() -> backend.setState(tunnel, state))
+ Application.getAsyncWorker().supplyAsync(() -> backend.setState(tunnel, state))
).whenComplete((newState, e) -> {
// Ensure onStateChanged is always called (failure or not), and with the correct state.
tunnel.onStateChanged(e == null ? newState : tunnel.getState());
@@ -272,7 +260,7 @@ public final class TunnelManager extends BaseObservable {
public static final class IntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
- final TunnelManager manager = Application.getComponent().getTunnelManager();
+ final TunnelManager manager = Application.getTunnelManager();
if (intent == null)
return;
final String action = intent.getAction();