diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-11-07 16:06:30 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-11-21 18:57:40 +0100 |
commit | 127d83bb2128d2b10d7a5e394f8620c94a2a8107 (patch) | |
tree | 2af98602f8bbf5eddfa47191a6bb300d23aecc83 /src | |
parent | 7241102acefc1566071771cee1f7c76ec2fda1b1 (diff) | |
download | strongswan-127d83bb2128d2b10d7a5e394f8620c94a2a8107.tar.bz2 strongswan-127d83bb2128d2b10d7a5e394f8620c94a2a8107.tar.xz |
android: Start a specific VPN profile based on special Intents
Diffstat (limited to 'src')
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…</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…</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…</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> |