aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-11-07 16:06:30 +0100
committerTobias Brunner <tobias@strongswan.org>2012-11-21 18:57:40 +0100
commit127d83bb2128d2b10d7a5e394f8620c94a2a8107 (patch)
tree2af98602f8bbf5eddfa47191a6bb300d23aecc83 /src
parent7241102acefc1566071771cee1f7c76ec2fda1b1 (diff)
downloadstrongswan-127d83bb2128d2b10d7a5e394f8620c94a2a8107.tar.bz2
strongswan-127d83bb2128d2b10d7a5e394f8620c94a2a8107.tar.xz
android: Start a specific VPN profile based on special Intents
Diffstat (limited to 'src')
-rw-r--r--src/frontends/android/AndroidManifest.xml5
-rw-r--r--src/frontends/android/res/values-de/strings.xml1
-rw-r--r--src/frontends/android/res/values-pl/strings.xml1
-rw-r--r--src/frontends/android/res/values/strings.xml1
-rw-r--r--src/frontends/android/src/org/strongswan/android/ui/MainActivity.java49
5 files changed, 56 insertions, 1 deletions
diff --git a/src/frontends/android/AndroidManifest.xml b/src/frontends/android/AndroidManifest.xml
index 971b3073c..c191a9e52 100644
--- a/src/frontends/android/AndroidManifest.xml
+++ b/src/frontends/android/AndroidManifest.xml
@@ -35,9 +35,12 @@
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
-
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+ <intent-filter>
+ <action android:name="org.strongswan.android.action.START_PROFILE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
</activity>
<activity
android:name=".ui.VpnProfileDetailActivity" >
diff --git a/src/frontends/android/res/values-de/strings.xml b/src/frontends/android/res/values-de/strings.xml
index bb4cf5d3a..5c922ad51 100644
--- a/src/frontends/android/res/values-de/strings.xml
+++ b/src/frontends/android/res/values-de/strings.xml
@@ -27,6 +27,7 @@
<string name="vpn_not_supported">Ihr Gerät unterstützt keine VPN Anwendungen.\nBitte kontaktieren Sie den Hersteller.</string>
<string name="vpn_not_supported_during_lockdown">VPN Verbindungen sind nicht möglich im abgeriegelten Modus.</string>
<string name="loading">Laden&#8230;</string>
+ <string name="profile_not_found">Profil nicht gefunden</string>
<!-- Log view -->
<string name="log_title">Log</string>
diff --git a/src/frontends/android/res/values-pl/strings.xml b/src/frontends/android/res/values-pl/strings.xml
index 58d158b8e..80fab6350 100644
--- a/src/frontends/android/res/values-pl/strings.xml
+++ b/src/frontends/android/res/values-pl/strings.xml
@@ -29,6 +29,7 @@
<string name="vpn_not_supported">Urządzenie nie obsługuje aplikacji VPN.\nProszę skontaktować się z producentem.</string>
<string name="vpn_not_supported_during_lockdown">Polączenia nie sa możliwe w trybie zamkniętym</string>
<string name="loading">Wczytywanie&#8230;</string>
+ <string name="profile_not_found">Nie znaleziono profilu</string>
<!-- Log view -->
<string name="log_title">Log</string>
diff --git a/src/frontends/android/res/values/strings.xml b/src/frontends/android/res/values/strings.xml
index 4b332348d..84fdf382e 100644
--- a/src/frontends/android/res/values/strings.xml
+++ b/src/frontends/android/res/values/strings.xml
@@ -27,6 +27,7 @@
<string name="vpn_not_supported">Your device does not support VPN applications.\nPlease contact the manufacturer.</string>
<string name="vpn_not_supported_during_lockdown">VPN connections are not supported in lockdown mode.</string>
<string name="loading">Loading&#8230;</string>
+ <string name="profile_not_found">Profile not found</string>
<!-- Log view -->
<string name="log_title">Log</string>
diff --git a/src/frontends/android/src/org/strongswan/android/ui/MainActivity.java b/src/frontends/android/src/org/strongswan/android/ui/MainActivity.java
index 4ccf7d314..8a5d4fedb 100644
--- a/src/frontends/android/src/org/strongswan/android/ui/MainActivity.java
+++ b/src/frontends/android/src/org/strongswan/android/ui/MainActivity.java
@@ -42,10 +42,13 @@ import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.EditText;
+import android.widget.Toast;
public class MainActivity extends Activity implements OnVpnProfileSelectedListener
{
public static final String CONTACT_EMAIL = "android@strongswan.org";
+ public static final String START_PROFILE = "org.strongswan.android.action.START_PROFILE";
+ public static final String EXTRA_VPN_PROFILE_ID = "org.strongswan.android.VPN_PROFILE_ID";
private static final int PREPARE_VPN_SERVICE = 0;
private Bundle mProfileInfo;
@@ -62,6 +65,25 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
/* load CA certificates in a background task */
new CertificateLoadTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, false);
+
+ if (START_PROFILE.equals(getIntent().getAction()))
+ {
+ startVpnProfile(getIntent());
+ }
+ }
+
+ /**
+ * Due to launchMode=singleTop this is called if the Activity already exists
+ */
+ @Override
+ protected void onNewIntent(Intent intent)
+ {
+ super.onNewIntent(intent);
+
+ if (START_PROFILE.equals(intent.getAction()))
+ {
+ startVpnProfile(intent);
+ }
}
@Override
@@ -168,6 +190,33 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
}
/**
+ * Start the VPN profile referred to by the given intent. Displays an error
+ * if the profile doesn't exist.
+ * @param intent Intent that caused us to start this
+ */
+ private void startVpnProfile(Intent intent)
+ {
+ long profileId = intent.getLongExtra(EXTRA_VPN_PROFILE_ID, 0);
+ if (profileId <= 0)
+ { /* invalid invocation */
+ return;
+ }
+ VpnProfileDataSource dataSource = new VpnProfileDataSource(this);
+ dataSource.open();
+ VpnProfile profile = dataSource.getVpnProfile(profileId);
+ dataSource.close();
+
+ if (profile != null)
+ {
+ onVpnProfileSelected(profile);
+ }
+ else
+ {
+ Toast.makeText(this, R.string.profile_not_found, Toast.LENGTH_LONG).show();
+ }
+ }
+
+ /**
* Class that loads or reloads the cached CA certificates.
*/
private class CertificateLoadTask extends AsyncTask<Boolean, Void, TrustedCertificateManager>