diff options
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.java | 50 |
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(); |