VpnService: Remember and optionally restore enabled configs
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
08992185ec
commit
b753ae09ca
@ -18,8 +18,10 @@ import java.io.FilenameFilter;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service that handles config state coordination and all background processing for the application.
|
* Service that handles config state coordination and all background processing for the application.
|
||||||
@ -27,7 +29,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public class VpnService extends Service
|
public class VpnService extends Service
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
private static final String KEY_ENABLED_CONFIGS = "enabled_configs";
|
||||||
private static final String KEY_PRIMARY_CONFIG = "primary_config";
|
private static final String KEY_PRIMARY_CONFIG = "primary_config";
|
||||||
|
private static final String KEY_RESTORE_ON_BOOT = "restore_on_boot";
|
||||||
private static final String TAG = "VpnService";
|
private static final String TAG = "VpnService";
|
||||||
|
|
||||||
private static VpnService instance;
|
private static VpnService instance;
|
||||||
@ -38,6 +42,7 @@ public class VpnService extends Service
|
|||||||
|
|
||||||
private final IBinder binder = new Binder();
|
private final IBinder binder = new Binder();
|
||||||
private final ObservableArrayMap<String, Config> configurations = new ObservableArrayMap<>();
|
private final ObservableArrayMap<String, Config> configurations = new ObservableArrayMap<>();
|
||||||
|
private final Set<String> enabledConfigs = new HashSet<>();
|
||||||
private SharedPreferences preferences;
|
private SharedPreferences preferences;
|
||||||
private Config primaryConfig;
|
private Config primaryConfig;
|
||||||
private RootShell rootShell;
|
private RootShell rootShell;
|
||||||
@ -205,6 +210,8 @@ public class VpnService extends Service
|
|||||||
if (!result)
|
if (!result)
|
||||||
return;
|
return;
|
||||||
config.setIsEnabled(false);
|
config.setIsEnabled(false);
|
||||||
|
enabledConfigs.remove(config.getName());
|
||||||
|
preferences.edit().putStringSet(KEY_ENABLED_CONFIGS, enabledConfigs).apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +234,8 @@ public class VpnService extends Service
|
|||||||
if (!result)
|
if (!result)
|
||||||
return;
|
return;
|
||||||
config.setIsEnabled(true);
|
config.setIsEnabled(true);
|
||||||
|
enabledConfigs.add(config.getName());
|
||||||
|
preferences.edit().putStringSet(KEY_ENABLED_CONFIGS, enabledConfigs).apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,6 +285,17 @@ public class VpnService extends Service
|
|||||||
if (primaryConfig != null)
|
if (primaryConfig != null)
|
||||||
primaryConfig.setIsPrimary(true);
|
primaryConfig.setIsPrimary(true);
|
||||||
}
|
}
|
||||||
|
if (preferences.getBoolean(KEY_RESTORE_ON_BOOT, false)) {
|
||||||
|
final Set<String> configsToEnable =
|
||||||
|
preferences.getStringSet(KEY_ENABLED_CONFIGS, null);
|
||||||
|
if (configsToEnable != null) {
|
||||||
|
for (final String name : configsToEnable) {
|
||||||
|
final Config config = configurations.get(name);
|
||||||
|
if (config != null && !config.isEnabled())
|
||||||
|
new ConfigEnabler(config).execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user