diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/android')
3 files changed, 73 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/backend/GoBackend.java b/app/src/main/java/com/wireguard/android/backend/GoBackend.java index 4963f759..e1accdad 100644 --- a/app/src/main/java/com/wireguard/android/backend/GoBackend.java +++ b/app/src/main/java/com/wireguard/android/backend/GoBackend.java @@ -56,6 +56,10 @@ public final class GoBackend implements Backend { private static native int wgTurnOn(String ifName, int tunFd, String settings); + private static native String wgVersion(); + + public static String getVersion() { return wgVersion(); } + @Override public Config applyConfig(final Tunnel tunnel, final Config config) throws Exception { if (tunnel.getState() == State.UP) { diff --git a/app/src/main/java/com/wireguard/android/preference/VersionPreference.java b/app/src/main/java/com/wireguard/android/preference/VersionPreference.java new file mode 100644 index 00000000..c0fb986b --- /dev/null +++ b/app/src/main/java/com/wireguard/android/preference/VersionPreference.java @@ -0,0 +1,56 @@ +/* + * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +package com.wireguard.android.preference; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.support.v7.preference.Preference; +import android.util.AttributeSet; + +import com.wireguard.android.Application; +import com.wireguard.android.BuildConfig; +import com.wireguard.android.R; +import com.wireguard.android.backend.GoBackend; +import com.wireguard.android.backend.WgQuickBackend; + +public class VersionPreference extends Preference { + private String versionSummary; + + public VersionPreference(final Context context, final AttributeSet attrs) { + super(context, attrs); + + 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) -> { + if (exception == null) + versionSummary = getContext().getString(R.string.version_kernel_summary, version); + else + versionSummary = getContext().getString(R.string.version_kernel_unknown_summary); + notifyChanged(); + }); + } + } + + @Override + public CharSequence getSummary() { + return versionSummary; + } + + @Override + public CharSequence getTitle() { + return getContext().getString(R.string.version_title, BuildConfig.VERSION_NAME); + } + + @Override + protected void onClick() { + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse("https://www.wireguard.com/")); + getContext().startActivity(intent); + } + +} diff --git a/app/src/main/java/com/wireguard/android/util/ToolsInstaller.java b/app/src/main/java/com/wireguard/android/util/ToolsInstaller.java index fc2897b3..f101bb32 100644 --- a/app/src/main/java/com/wireguard/android/util/ToolsInstaller.java +++ b/app/src/main/java/com/wireguard/android/util/ToolsInstaller.java @@ -10,6 +10,7 @@ import android.content.Context; import android.system.OsConstants; import android.util.Log; +import com.wireguard.android.Application; import com.wireguard.android.Application.ApplicationContext; import com.wireguard.android.Application.ApplicationScope; import com.wireguard.android.util.RootShell.NoRootException; @@ -17,11 +18,14 @@ import com.wireguard.android.util.RootShell.NoRootException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.inject.Inject; +import java9.util.concurrent.CompletionStage; + /** * Helper to install WireGuard tools to the system partition. */ @@ -52,6 +56,15 @@ public final class ToolsInstaller { this.rootShell = rootShell; } + public CompletionStage<String> getVersion() { + return Application.getComponent().getAsyncWorker().supplyAsync(() -> { + final ArrayList<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) |