diff options
| author | Arne Schwabe <arne@rfc2549.org> | 2013-04-16 20:17:45 +0200 | 
|---|---|---|
| committer | Arne Schwabe <arne@rfc2549.org> | 2013-04-16 20:17:45 +0200 | 
| commit | 7e3671e2bd04c0695d8b5bbdb1fe33b888253552 (patch) | |
| tree | f320bd26e0ce563238aa21f5af8843371d22f989 | |
| parent | c916abb6d015496cceb38c65d6912ec4454251cd (diff) | |
Add states when requiring user input
| -rw-r--r-- | res/values/untranslatable.xml | 14 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/LaunchVPN.java | 24 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/core/OpenVPN.java | 3 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/core/OpenVpnService.java | 6 | 
4 files changed, 34 insertions, 13 deletions
diff --git a/res/values/untranslatable.xml b/res/values/untranslatable.xml index 70ca6b7f..1b4fdd9b 100644 --- a/res/values/untranslatable.xml +++ b/res/values/untranslatable.xml @@ -19,9 +19,9 @@      <string name="openssl" translatable="false">OpenSSL</string>      <string name="unknown_state" translatable="false">Unknown state</string>      <string name="permission_description">Allows another app to control OpenVPN</string> -    <string name="bouncy_castle"  translatable="false">Bouncy Castle Crypto APIs</string> -    <string name="copyright_bouncycastle"  translatable="false">Copyright © 2000–2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)</string> -     +    <string name="bouncy_castle" translatable="false">Bouncy Castle Crypto APIs</string> +    <string name="copyright_bouncycastle" translatable="false">Copyright © 2000–2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)</string> +      <string-array name="tls_directions_values" translatable="false">          <item>0</item>          <item>1</item> @@ -43,4 +43,10 @@          <item>-1</item>      </string-array> -</resources> +    <!-- These strings should not be visible to the user --> +    <string name="state_user_vpn_permission" translatable="false">Waiting for user permission to use VPN API</string> +    <string name="state_user_vpn_password" translatable="false">Waiting for user VPN password</string> +    <string name="state_user_vpn_password_cancelled" translatable="false">VPN password input dialog cancelled</string> +    <string name="state_user_vpn_permission_cancelled" translatable="false">VPN API permission dialog cancelled</string> +     +</resources>
\ No newline at end of file diff --git a/src/de/blinkt/openvpn/LaunchVPN.java b/src/de/blinkt/openvpn/LaunchVPN.java index f07a77b9..80075086 100644 --- a/src/de/blinkt/openvpn/LaunchVPN.java +++ b/src/de/blinkt/openvpn/LaunchVPN.java @@ -26,6 +26,7 @@ import android.widget.EditText;  import android.widget.ListView;  import android.widget.TextView;  import de.blinkt.openvpn.core.OpenVPN; +import de.blinkt.openvpn.core.OpenVPN.ConnectionStatus;  import de.blinkt.openvpn.core.ProfileManager;  import de.blinkt.openvpn.core.VPNLaunchHelper; @@ -61,7 +62,7 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  	public static final String EXTRA_HIDELOG =  "de.blinkt.openvpn.showNoLogWindow";;  	private static final int START_VPN_PROFILE= 70; -	 +  	private ProfileManager mPM;  	private VpnProfile mSelectedProfile; @@ -74,7 +75,7 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  		super.onCreate(icicle);  		mPM =ProfileManager.getInstance(this); -	 +  	}	  	@Override @@ -84,10 +85,10 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  		final Intent intent = getIntent();  		final String action = intent.getAction(); -		 +  		// If the intent is a request to create a shortcut, we'll do that and exit -		 +  		if(Intent.ACTION_MAIN.equals(action)) {  			// we got called to be the starting point, most likely a shortcut  			String shortcutUUID = intent.getStringExtra( EXTRA_KEY); @@ -201,7 +202,7 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  	} -	 +  	private void askForPW(final int type) { @@ -234,6 +235,8 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  				new DialogInterface.OnClickListener() {  			@Override  			public void onClick(DialogInterface dialog, int which) { +				OpenVPN.updateStateString("USER_VPN_PASSWORD_CANCELLED", "", R.string.state_user_vpn_password_cancelled,  +						ConnectionStatus.LEVEL_NOTCONNECTED);  				finish();  			}  		}); @@ -242,24 +245,29 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  	}  	@Override -	protected void onActivityResult(int requestCode, int resultCode, Intent data) { +	protected void onActivityResult (int requestCode, int resultCode, Intent data) {  		super.onActivityResult(requestCode, resultCode, data);  		if(requestCode==START_VPN_PROFILE) {  			if(resultCode == Activity.RESULT_OK) {  				int needpw = mSelectedProfile.needUserPWInput();  				if(needpw !=0) { +					OpenVPN.updateStateString("USER_VPN_PASSWORD", "", R.string.state_user_vpn_password, +							ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT);  					askForPW(needpw);  				} else {  					SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);          					boolean showlogwindow = prefs.getBoolean("showlogwindow", true); -					 +  					if(!mhideLog && showlogwindow)  						showLogWindow();  					new startOpenVpnThread().start();  				}  			} else if (resultCode == Activity.RESULT_CANCELED) {  				// User does not want us to start, so we just vanish +				OpenVPN.updateStateString("USER_VPN_PERMISSION_CANCELLED", "", R.string.state_user_vpn_permission_cancelled,  +						ConnectionStatus.LEVEL_NOTCONNECTED); +  				finish();  			}  		} @@ -309,6 +317,8 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener {  		if (intent != null) { +			OpenVPN.updateStateString("USER_VPN_PERMISSION", "", R.string.state_user_vpn_password, +					ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT);  			// Start the query  			try {  				startActivityForResult(intent, START_VPN_PROFILE); diff --git a/src/de/blinkt/openvpn/core/OpenVPN.java b/src/de/blinkt/openvpn/core/OpenVPN.java index 2bc4cf6b..982a1e62 100644 --- a/src/de/blinkt/openvpn/core/OpenVPN.java +++ b/src/de/blinkt/openvpn/core/OpenVPN.java @@ -44,7 +44,8 @@ public class OpenVPN {  	public enum ConnectionStatus {  		LEVEL_NONETWORK (3),  		LEVEL_NOTCONNECTED  (4), -		LEVEL_AUTH_FAILED ( 5), +		LEVEL_AUTH_FAILED (5), +		LEVEL_WAITING_FOR_USER_INPUT (6),  		LEVEL_CONNECTING_SERVER_REPLIED ( 1),  		LEVEL_CONNECTING_NO_SERVER_REPLY_YET (2),  		LEVEL_CONNECTED (0), UNKNOWN_LEVEL(-1); diff --git a/src/de/blinkt/openvpn/core/OpenVpnService.java b/src/de/blinkt/openvpn/core/OpenVpnService.java index 4dba80f1..d86ae92b 100644 --- a/src/de/blinkt/openvpn/core/OpenVpnService.java +++ b/src/de/blinkt/openvpn/core/OpenVpnService.java @@ -541,7 +541,11 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac  		// Display byte count only after being connected  		{ -			if(level == ConnectionStatus.LEVEL_CONNECTED) { +			if (level == ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT) { +				// The user is presented a dialog of some kind, no need to inform the user  +				// with a notifcation +				return; +			} else if(level == ConnectionStatus.LEVEL_CONNECTED) {  				mDisplayBytecount = true;  				mConnecttime = System.currentTimeMillis();  			} else {  | 
