aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java')
-rw-r--r--app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java183
1 files changed, 173 insertions, 10 deletions
diff --git a/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java b/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java
index 0fb8992..21bfc4c 100644
--- a/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java
+++ b/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java
@@ -23,9 +23,14 @@ package fil.libre.repwifiapp.activities;
import fil.libre.repwifiapp.ActivityLauncher;
import fil.libre.repwifiapp.Commons;
import fil.libre.repwifiapp.R;
+import fil.libre.repwifiapp.ActivityLauncher.RequestCode;
+import fil.libre.repwifiapp.helpers.AccessPointInfo;
import fil.libre.repwifiapp.helpers.ConnectionStatus;
+import fil.libre.repwifiapp.helpers.OpenVpnManager;
import fil.libre.repwifiapp.helpers.Utils;
+import android.content.Intent;
import android.os.Bundle;
+import android.os.RemoteException;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@@ -35,6 +40,8 @@ public class ShowStatusActivity extends MenuEnabledActivity {
private ConnectionStatus status;
+ // private AccessPointInfo info;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -45,14 +52,45 @@ public class ShowStatusActivity extends MenuEnabledActivity {
ActivityLauncher.EXTRA_CONSTATUS);
}
- showStatus(false);
+ try {
+ showStatus(false);
+ } catch (Exception e) {
+ Utils.logError("Exception on showStatus", e);
+ }
}
@Override
public void onRestart() {
super.onRestart();
- showStatus(true);
+ try {
+ showStatus(true);
+ } catch (Exception e) {
+ Utils.logError("Exception on showStatus", e);
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+
+ switch (requestCode) {
+
+ case RequestCode.VPN_PERMISSION:
+
+ if (resultCode == RESULT_OK) {
+ endLaunchVpn(true);
+ } else {
+ endLaunchVpn(false);
+ }
+
+ break;
+
+ default:
+
+ break;
+
+ }
+
}
private void setMessage(String msg) {
@@ -60,7 +98,7 @@ public class ShowStatusActivity extends MenuEnabledActivity {
view.setText(msg);
}
- private void showStatus(boolean refresh) {
+ private void showStatus(boolean refresh) throws Exception {
if (refresh || status == null) {
this.status = Commons.connectionEngine.getConnectionStatus();
@@ -71,12 +109,14 @@ public class ShowStatusActivity extends MenuEnabledActivity {
} else if (this.status.isConnected()) {
Utils.logDebug("StatusActivity isConnected,showing buttons");
- setMessage("Connected to " + status.SSID + "\n\n" + "IP Address: " + status.IP + "\n");
+ setMessage(getString(R.string.msg_connected_to) + " " + status.SSID + "\n\n"
+ + getString(R.string.text_ip_address) + ": " + status.IP + "\n");
toggleBtnDisconnect(true);
-
+ beginLauncVpn();
+
} else {
Utils.logDebug("StatusActivity status Else");
- setMessage("Status:\n" + status.status);
+ setMessage(getString(R.string.text_status) + ":\n" + status.status);
toggleBtnDisconnect(false);
}
@@ -103,21 +143,144 @@ public class ShowStatusActivity extends MenuEnabledActivity {
public void onBtnDisconnectClick(View v) {
+ disconnectVpn();
+
boolean res = Commons.connectionEngine.disconnect();
String msg = "";
if (res) {
- msg = "Disconnected.";
+ msg = getString(R.string.msg_disconnected);
} else {
- msg = "FAILED to disconnect!";
+ msg = getString(R.string.msg_disconnect_fail);
}
Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);
toast.show();
- showStatus(true);
+ try {
+ showStatus(true);
+ } catch (Exception e) {
+ Utils.logError("Exception on showStatus", e);
+ }
+
+ }
+
+ private void disconnectVpn() {
+
+ if (! OpenVpnManager.isVpnConnected()){
+ return;
+ }
+
+ if (OpenVpnManager.disconnect()) {
+ Toast t = Toast.makeText(this, getString(R.string.msg_vpn_disconnect),
+ Toast.LENGTH_LONG);
+ t.show();
+
+ } else {
+ Commons.showMessage(getString(R.string.msg_vpn_disconnect_error), this);
+ }
+
+ }
+
+ private void beginLauncVpn() throws Exception {
+
+ if (OpenVpnManager.isVpnConnected()){
+ // already connected;
+ return;
+ }
+
+ if (!OpenVpnManager.isExternalAppInstalled(this)) {
+ Utils.logDebug("External VPN app not installed.");
+ return;
+ }
+
+ if (getVpnNameIfAny() == null){
+ Utils.logDebug("No vpn profile set. Exiting beginLaunchVpn()");
+ return;
+ }
+
+ // first, we make sure we have permission to use the vpn service.
+ Intent pi;
+
+ try {
+ pi = OpenVpnManager.askApiPermissionsGetIntent();
+ } catch (RemoteException e) {
+ Utils.logError("Exception while asking for VPN permission", e);
+ Toast t = Toast.makeText(getApplicationContext(), getString(R.string.msg_vpn_connect_error), Toast.LENGTH_LONG);
+ t.show();
+ return;
+
+ }
+
+ if (pi == null){
+ // no need to ask for permission
+ Utils.logDebug("No need for vpn permission: going to endLaunchVpn.");
+ endLaunchVpn(true);
+
+ } else{
+ // launch the intent to ask permission
+ Utils.logDebug("Need to ask for vpn permission. Starting intent..");
+ startActivityForResult(pi, ActivityLauncher.RequestCode.VPN_PERMISSION);
+ }
}
+ private void endLaunchVpn(boolean permissionGranted) {
+
+ try {
+
+ if (!permissionGranted) {
+ // warn user that permission must be granted
+ Utils.logDebug("User rejected vpn permission.");
+ String msg = getString(R.string.msg_vpn_no_permission).replace(
+ OpenVpnManager.PLACEHOLDER_APPNAME, OpenVpnManager.APP_COMMON_NAME);
+ Commons.showMessage(msg, this);
+ return;
+ }
+
+ String profname = getVpnNameIfAny();
+
+ // check if profile exists
+ String profUuid = OpenVpnManager.getUuidFromName(profname);
+ if (profUuid == null){
+ // warn user that selected profile doesn't exist
+ Commons.showMessage(getString(R.string.msg_vpn_wrong_profile), this);
+ return;
+ }
+
+ if (OpenVpnManager.startVpn(profUuid)){
+ Toast t = Toast.makeText(this, getString(R.string.msg_vpn_launched), Toast.LENGTH_LONG);
+ t.show();
+ } else {
+ Commons.showMessage(getString(R.string.msg_vpn_connect_error),this);
+ }
+
+ } catch (Exception e) {
+ Utils.logError("Exception while endLaunchVpn", e);
+
+ }
+
+ }
+
+ private String getVpnNameIfAny(){
+
+ if (status == null) {
+ return null;
+ }
+
+ AccessPointInfo i = status.getNetworkDetails();
+ if (i == null) {
+ return null;
+ }
+
+ String profname = i.getVpnProfileName();
+ if (profname == null || profname.isEmpty()) {
+ return null;
+ } else {
+ return profname;
+ }
+
+ }
+
public void onBtnMainClick(View v) {
finish();
}
@@ -126,5 +289,5 @@ public class ShowStatusActivity extends MenuEnabledActivity {
public void onBackPressed() {
moveTaskToBack(true);
}
-
+
}