summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--app/src/main/AndroidManifest.xml3
-rw-r--r--app/src/main/java/com/wireguard/android/ConfigAddActivity.java37
-rw-r--r--app/src/main/java/com/wireguard/android/ConfigEditFragment.java13
-rw-r--r--app/src/main/res/layout/config_add_activity.xml5
-rw-r--r--app/src/main/res/values/strings.xml1
5 files changed, 57 insertions, 2 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 69859655..11c6eecb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -20,6 +20,9 @@
</intent-filter>
</activity>
<activity
+ android:name=".ConfigAddActivity"
+ android:label="@string/edit_activity_title" />
+ <activity
android:name=".SettingsActivity"
android:label="@string/settings" />
diff --git a/app/src/main/java/com/wireguard/android/ConfigAddActivity.java b/app/src/main/java/com/wireguard/android/ConfigAddActivity.java
new file mode 100644
index 00000000..f299a67c
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/ConfigAddActivity.java
@@ -0,0 +1,37 @@
+package com.wireguard.android;
+
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+
+import com.wireguard.config.Config;
+
+/**
+ * Standalone activity for creating configurations.
+ */
+
+public class ConfigAddActivity extends BaseConfigActivity {
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.config_add_activity);
+ }
+
+ @Override
+ protected void onCurrentConfigChanged(final Config config) {
+ // This is the result of ConfigEditFragment signalling that a configuration was created.
+ if (config != null)
+ finish();
+ }
+
+ @Override
+ protected void onServiceAvailable() {
+ super.onServiceAvailable();
+ final FragmentManager fm = getFragmentManager();
+ if (fm.findFragmentById(R.id.master_fragment) == null) {
+ final FragmentTransaction transaction = fm.beginTransaction();
+ transaction.add(R.id.master_fragment, new ConfigEditFragment());
+ transaction.commit();
+ }
+ }
+}
diff --git a/app/src/main/java/com/wireguard/android/ConfigEditFragment.java b/app/src/main/java/com/wireguard/android/ConfigEditFragment.java
index 488d7915..7cbcfddd 100644
--- a/app/src/main/java/com/wireguard/android/ConfigEditFragment.java
+++ b/app/src/main/java/com/wireguard/android/ConfigEditFragment.java
@@ -12,6 +12,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
+import android.widget.Toast;
import com.wireguard.android.databinding.ConfigEditFragmentBinding;
import com.wireguard.config.Config;
@@ -73,7 +74,15 @@ public class ConfigEditFragment extends BaseConfigFragment {
private void saveConfig() {
// FIXME: validate input
- VpnService.getInstance().update(getCurrentConfig().getName(), localConfig);
+ try {
+ if (getCurrentConfig() != null)
+ VpnService.getInstance().update(getCurrentConfig().getName(), localConfig);
+ else
+ VpnService.getInstance().add(localConfig);
+ } catch (final IllegalStateException e) {
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
+ return;
+ }
// Hide the keyboard; it rarely goes away on its own.
final BaseConfigActivity activity = (BaseConfigActivity) getActivity();
final View focusedView = activity.getCurrentFocus();
@@ -83,7 +92,7 @@ public class ConfigEditFragment extends BaseConfigFragment {
inputManager.hideSoftInputFromWindow(focusedView.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
- // Tell the activity to go back to the detail view.
+ // Tell the activity to finish itself or go back to the detail view.
activity.setCurrentConfig(localConfig);
}
}
diff --git a/app/src/main/res/layout/config_add_activity.xml b/app/src/main/res/layout/config_add_activity.xml
new file mode 100644
index 00000000..d67e64bc
--- /dev/null
+++ b/app/src/main/res/layout/config_add_activity.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/master_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9b3d1448..ab82e7fe 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
<string name="disconnected">Disconnected</string>
<string name="dns_servers">DNS servers</string>
<string name="edit">Edit</string>
+ <string name="edit_activity_title">Add WireGuard Configuration</string>
<string name="generate">Generate</string>
<string name="hint_automatic">(auto)</string>
<string name="hint_generated">(generated)</string>