diff options
| -rw-r--r-- | AndroidManifest.xml | 4 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/LaunchVPN.java | 89 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/app/CreateShortcuts.java | 154 | 
3 files changed, 158 insertions, 89 deletions
| diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7e609c51..9e87e727 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -136,6 +136,7 @@          <activity              android:name=".LaunchVPN"              android:label="@string/vpn_launch_title" +              android:theme="@android:style/Theme.DeviceDefault.Light.Panel"              tools:ignore="ExportedActivity" >              <intent-filter> @@ -145,13 +146,14 @@              </intent-filter>          </activity> +          <activity-alias              android:name=".app.CreateShortcuts"              android:label="@string/vpn_shortcut" +            android:theme="@android:style/Theme.DeviceDefault.Light.DialogWhenLarge"              android:targetActivity=".LaunchVPN" >              <intent-filter>                  <action android:name="android.intent.action.CREATE_SHORTCUT" /> -                  <category android:name="android.intent.category.DEFAULT" />              </intent-filter>          </activity-alias> diff --git a/src/de/blinkt/openvpn/LaunchVPN.java b/src/de/blinkt/openvpn/LaunchVPN.java index 75c88300..92849dd0 100644 --- a/src/de/blinkt/openvpn/LaunchVPN.java +++ b/src/de/blinkt/openvpn/LaunchVPN.java @@ -52,7 +52,7 @@ import de.blinkt.openvpn.core.VPNLaunchHelper;   * In a real application, you would probably use the shortcut intent to display specific content   * or start a particular operation.   */ -public class LaunchVPN extends ListActivity implements OnItemClickListener { +public class LaunchVPN extends Activity {  	public static final String EXTRA_KEY = "de.blinkt.openvpn.shortcutProfileUUID";  	public static final String EXTRA_NAME = "de.blinkt.openvpn.shortcutProfileName"; @@ -107,96 +107,9 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  			mSelectedProfile = profileToConnect;  			launchVPN(); -		} else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) { -			createListView();  		}  	} -	private void createListView() { -		ListView lv = getListView(); -		//lv.setTextFilterEnabled(true); - -		Collection<VpnProfile> vpnlist = mPM.getProfiles(); - -		Vector<String> vpnnames=new Vector<String>(); -		for (VpnProfile vpnProfile : vpnlist) { -			vpnnames.add(vpnProfile.mName); -		} - - - -		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,vpnnames); -		lv.setAdapter(adapter); - -		lv.setOnItemClickListener(this); -	} - -	/** -	 * This function creates a shortcut and returns it to the caller.  There are actually two  -	 * intents that you will send back. -	 *  -	 * The first intent serves as a container for the shortcut and is returned to the launcher by  -	 * setResult().  This intent must contain three fields: -	 *  -	 * <ul> -	 * <li>{@link android.content.Intent#EXTRA_SHORTCUT_INTENT} The shortcut intent.</li> -	 * <li>{@link android.content.Intent#EXTRA_SHORTCUT_NAME} The text that will be displayed with -	 * the shortcut.</li> -	 * <li>{@link android.content.Intent#EXTRA_SHORTCUT_ICON} The shortcut's icon, if provided as a -	 * bitmap, <i>or</i> {@link android.content.Intent#EXTRA_SHORTCUT_ICON_RESOURCE} if provided as -	 * a drawable resource.</li> -	 * </ul> -	 *  -	 * If you use a simple drawable resource, note that you must wrapper it using -	 * {@link android.content.Intent.ShortcutIconResource}, as shown below.  This is required so -	 * that the launcher can access resources that are stored in your application's .apk file.  If  -	 * you return a bitmap, such as a thumbnail, you can simply put the bitmap into the extras  -	 * bundle using {@link android.content.Intent#EXTRA_SHORTCUT_ICON}. -	 *  -	 * The shortcut intent can be any intent that you wish the launcher to send, when the user  -	 * clicks on the shortcut.  Typically this will be {@link android.content.Intent#ACTION_VIEW}  -	 * with an appropriate Uri for your content, but any Intent will work here as long as it  -	 * triggers the desired action within your Activity. -	 * @param profile  -	 */ -	private void setupShortcut(VpnProfile profile) { -		// First, set up the shortcut intent.  For this example, we simply create an intent that -		// will bring us directly back to this activity.  A more typical implementation would use a  -		// data Uri in order to display a more specific result, or a custom action in order to  -		// launch a specific operation. - -		Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); -		shortcutIntent.setClass(this, LaunchVPN.class); -		shortcutIntent.putExtra(EXTRA_KEY,profile.getUUID().toString()); - -		// Then, set up the container intent (the response to the caller) - -		Intent intent = new Intent(); -		intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); -		intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, profile.getName()); -		Parcelable iconResource = Intent.ShortcutIconResource.fromContext( -				this,  R.drawable.icon); -		intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); - -		// Now, return the result to the launcher - -		setResult(RESULT_OK, intent); -	} - - -	@Override -	public void onItemClick(AdapterView<?> parent, View view, int position, -			long id) { -		String profilename = ((TextView) view).getText().toString(); - -		VpnProfile profile = mPM.getProfileByName(profilename); - -		setupShortcut(profile); -		finish(); -	} - - -  	private void askForPW(final int type) {  		final EditText entry = new EditText(this); diff --git a/src/de/blinkt/openvpn/app/CreateShortcuts.java b/src/de/blinkt/openvpn/app/CreateShortcuts.java new file mode 100644 index 00000000..69fa9a84 --- /dev/null +++ b/src/de/blinkt/openvpn/app/CreateShortcuts.java @@ -0,0 +1,154 @@ +package de.blinkt.openvpn.app; + +import android.app.ListActivity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Parcelable; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; +import de.blinkt.openvpn.LaunchVPN; +import de.blinkt.openvpn.R; +import de.blinkt.openvpn.VpnProfile; +import de.blinkt.openvpn.core.ProfileManager; + +import java.util.Collection; +import java.util.Vector; + +/** + * This Activity actually handles two stages of a launcher shortcut's life cycle. + * + * 1. Your application offers to provide shortcuts to the launcher.  When + *    the user installs a shortcut, an activity within your application + *    generates the actual shortcut and returns it to the launcher, where it + *    is shown to the user as an icon. + * + * 2. Any time the user clicks on an installed shortcut, an intent is sent. + *    Typically this would then be handled as necessary by an activity within + *    your application. + * + * We handle stage 1 (creating a shortcut) by simply sending back the information (in the form + * of an {@link android.content.Intent} that the launcher will use to create the shortcut. + * + * You can also implement this in an interactive way, by having your activity actually present + * UI for the user to select the specific nature of the shortcut, such as a contact, picture, URL, + * media item, or action. + * + * We handle stage 2 (responding to a shortcut) in this sample by simply displaying the contents + * of the incoming {@link android.content.Intent}. + * + * In a real application, you would probably use the shortcut intent to display specific content + * or start a particular operation. + */ +public class CreateShortcuts extends ListActivity implements OnItemClickListener { + + +    private static final int START_VPN_PROFILE= 70; + + +    private ProfileManager mPM; +    private VpnProfile mSelectedProfile; + +    @Override +    public void onCreate(Bundle icicle) { +        super.onCreate(icicle); + +        mPM =ProfileManager.getInstance(this); + +    } + +    @Override +    protected void onStart() { +        super.onStart(); +        // Resolve the intent + +            createListView(); +    } + +    private void createListView() { +        ListView lv = getListView(); +        //lv.setTextFilterEnabled(true); + +        Collection<VpnProfile> vpnList = mPM.getProfiles(); + +        Vector<String> vpnNames=new Vector<String>(); +        for (VpnProfile vpnProfile : vpnList) { +            vpnNames.add(vpnProfile.mName); +        } + + + +        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,vpnNames); +        lv.setAdapter(adapter); + +        lv.setOnItemClickListener(this); +    } + +    /** +     * This function creates a shortcut and returns it to the caller.  There are actually two +     * intents that you will send back. +     * +     * The first intent serves as a container for the shortcut and is returned to the launcher by +     * setResult().  This intent must contain three fields: +     * +     * <ul> +     * <li>{@link android.content.Intent#EXTRA_SHORTCUT_INTENT} The shortcut intent.</li> +     * <li>{@link android.content.Intent#EXTRA_SHORTCUT_NAME} The text that will be displayed with +     * the shortcut.</li> +     * <li>{@link android.content.Intent#EXTRA_SHORTCUT_ICON} The shortcut's icon, if provided as a +     * bitmap, <i>or</i> {@link android.content.Intent#EXTRA_SHORTCUT_ICON_RESOURCE} if provided as +     * a drawable resource.</li> +     * </ul> +     * +     * If you use a simple drawable resource, note that you must wrapper it using +     * {@link android.content.Intent.ShortcutIconResource}, as shown below.  This is required so +     * that the launcher can access resources that are stored in your application's .apk file.  If +     * you return a bitmap, such as a thumbnail, you can simply put the bitmap into the extras +     * bundle using {@link android.content.Intent#EXTRA_SHORTCUT_ICON}. +     * +     * The shortcut intent can be any intent that you wish the launcher to send, when the user +     * clicks on the shortcut.  Typically this will be {@link android.content.Intent#ACTION_VIEW} +     * with an appropriate Uri for your content, but any Intent will work here as long as it +     * triggers the desired action within your Activity. +     * @param profile +     */ +    private void setupShortcut(VpnProfile profile) { +        // First, set up the shortcut intent.  For this example, we simply create an intent that +        // will bring us directly back to this activity.  A more typical implementation would use a +        // data Uri in order to display a more specific result, or a custom action in order to +        // launch a specific operation. + +        Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); +        shortcutIntent.setClass(this, LaunchVPN.class); +        shortcutIntent.putExtra(LaunchVPN.EXTRA_KEY,profile.getUUID().toString()); + +        // Then, set up the container intent (the response to the caller) + +        Intent intent = new Intent(); +        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); +        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, profile.getName()); +        Parcelable iconResource = Intent.ShortcutIconResource.fromContext( +                this, R.drawable.icon); +        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); + +        // Now, return the result to the launcher + +        setResult(RESULT_OK, intent); +    } + + +    @Override +    public void onItemClick(AdapterView<?> parent, View view, int position, +                            long id) { +        String profileName = ((TextView) view).getText().toString(); + +        VpnProfile profile = mPM.getProfileByName(profileName); + +        setupShortcut(profile); +        finish(); +    } + +} | 
