diff options
-rw-r--r-- | app/src/main/AndroidManifest.xml | 3 | ||||
-rw-r--r-- | app/src/main/java/com/wireguard/android/ConfigAddActivity.java | 37 | ||||
-rw-r--r-- | app/src/main/java/com/wireguard/android/ConfigEditFragment.java | 13 | ||||
-rw-r--r-- | app/src/main/res/layout/config_add_activity.xml | 5 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 1 |
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> |