VersionPreference: account for checking state and move away from tools installer

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld
2018-06-07 03:27:06 +02:00
parent ca7f4e5be9
commit 7b59353910
4 changed files with 21 additions and 12 deletions
@@ -67,6 +67,8 @@ public class Application extends android.app.Application {
ToolsInstaller getToolsInstaller();
TunnelManager getTunnelManager();
RootShell getRootShell();
}
@Qualifier
@@ -16,6 +16,14 @@ import com.wireguard.android.BuildConfig;
import com.wireguard.android.R;
import com.wireguard.android.backend.GoBackend;
import com.wireguard.android.backend.WgQuickBackend;
import com.wireguard.android.util.RootShell;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import java9.util.concurrent.CompletionStage;
public class VersionPreference extends Preference {
private String versionSummary;
@@ -26,10 +34,17 @@ public class VersionPreference extends Preference {
if (Application.getComponent().getBackendType() == GoBackend.class) {
versionSummary = getContext().getString(R.string.version_userspace_summary, GoBackend.getVersion());
} else if (Application.getComponent().getBackendType() == WgQuickBackend.class) {
Application.getComponent().getToolsInstaller().getVersion().whenComplete((version, exception) -> {
versionSummary = getContext().getString(R.string.version_kernel_summary_checking);
Application.getComponent().getAsyncWorker().supplyAsync(() -> {
final List<String> output = new ArrayList<>();
if (Application.getComponent().getRootShell()
.run(output, "cat /sys/module/wireguard/version") != 0 || output.isEmpty())
throw new RuntimeException("Unable to determine kernel module version");
return output.get(0);
}).whenComplete((version, exception) -> {
versionSummary = exception == null
? getContext().getString(R.string.version_kernel_summary, version)
: getContext().getString(R.string.version_kernel_unknown_summary);
: getContext().getString(R.string.version_kernel_summary_unknown);
notifyChanged();
});
}
@@ -58,15 +58,6 @@ public final class ToolsInstaller {
this.rootShell = rootShell;
}
public CompletionStage<String> getVersion() {
return Application.getComponent().getAsyncWorker().supplyAsync(() -> {
final List<String> output = new ArrayList<>();
if (rootShell.run(output, "cat /sys/module/wireguard/version") != 0 || output.isEmpty())
throw new RuntimeException("Unable to determine kernel module version");
return output.get(0);
});
}
private static File getInstallDir() {
final String path = System.getenv("PATH");
if (path == null)