Add an Activity that shows the log fragment
[strongswan.git] / src / frontends / android / src / org / strongswan / android / ui / MainActivity.java
index 35f8c65..f9d6c17 100644 (file)
@@ -26,14 +26,22 @@ import org.strongswan.android.ui.VpnProfileListFragment.OnVpnProfileSelectedList
 
 import android.app.ActionBar;
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.VpnService;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.view.LayoutInflater;
 import android.view.Menu;
-import android.view.MenuInflater;
 import android.view.MenuItem;
+import android.view.View;
 import android.view.Window;
+import android.widget.EditText;
 
 public class MainActivity extends Activity implements OnVpnProfileSelectedListener
 {
@@ -57,8 +65,7 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
-               MenuInflater inflater = getMenuInflater();
-               inflater.inflate(R.menu.main, menu);
+               getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
 
@@ -70,6 +77,10 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
                        case R.id.menu_reload_certs:
                                new CertificateLoadTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, true);
                                return true;
+                       case R.id.menu_show_log:
+                               Intent logIntent = new Intent(this, LogActivity.class);
+                               startActivity(logIntent);
+                               return true;
                        default:
                                return super.onOptionsItemSelected(item);
                }
@@ -102,6 +113,8 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
                                {
                                        Intent intent = new Intent(this, CharonVpnService.class);
                                        intent.putExtra(VpnProfileDataSource.KEY_ID, activeProfile.getId());
+                                       /* submit the password as the profile might not store one */
+                                       intent.putExtra(VpnProfileDataSource.KEY_PASSWORD, activeProfile.getPassword());
                                        this.startService(intent);
                                }
                                break;
@@ -114,7 +127,14 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
        public void onVpnProfileSelected(VpnProfile profile)
        {
                activeProfile = profile;
-               prepareVpnService();
+               if (activeProfile.getPassword() == null)
+               {
+                       new LoginDialog().show(getFragmentManager(), "LoginDialog");
+               }
+               else
+               {
+                       prepareVpnService();
+               }
        }
 
        /**
@@ -142,4 +162,39 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
                        setProgressBarIndeterminateVisibility(false);
                }
        }
+
+       private class LoginDialog extends DialogFragment
+       {
+               @Override
+               public Dialog onCreateDialog(Bundle savedInstanceState)
+               {
+                       LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+                       View view = inflater.inflate(R.layout.login_dialog, null);
+                       EditText username = (EditText)view.findViewById(R.id.username);
+                       username.setText(activeProfile.getUsername());
+                       final EditText password = (EditText)view.findViewById(R.id.password);
+
+                       Builder adb = new AlertDialog.Builder(MainActivity.this);
+                       adb.setView(view);
+                       adb.setTitle(getString(R.string.login_title));
+                       adb.setPositiveButton(R.string.login_confirm, new DialogInterface.OnClickListener() {
+                               @Override
+                               public void onClick(DialogInterface dialog, int whichButton)
+                               {
+                                       /* let's work on a clone of the profile when updating the password */
+                                       activeProfile = activeProfile.clone();
+                                       activeProfile.setPassword(password.getText().toString().trim());
+                                       prepareVpnService();
+                               }
+                       });
+                       adb.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+                               @Override
+                               public void onClick(DialogInterface dialog, int which)
+                               {
+                                       dismiss();
+                               }
+                       });
+                       return adb.create();
+               }
+       }
 }