Merged AccountCreationActivity and AccountPreferenceActivity (redundant)
Fixed issues in account edition
Added layouts for action bar menus (+ icons)
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
index 72c8efd..a11b80c 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
@@ -31,24 +31,23 @@
package com.savoirfairelinux.sflphone.client;
+import java.util.ArrayList;
+import java.util.HashMap;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.content.ComponentName;
-import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
-import android.preference.PreferenceScreen;
-import android.preference.EditTextPreference;
-import android.preference.CheckBoxPreference;
import android.util.Log;
import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import com.savoirfairelinux.sflphone.R;
@@ -57,49 +56,73 @@
import com.savoirfairelinux.sflphone.account.AccountDetailBasic;
import com.savoirfairelinux.sflphone.account.AccountDetailSrtp;
import com.savoirfairelinux.sflphone.account.AccountDetailTls;
-import com.savoirfairelinux.sflphone.account.AccountDetailsHandler;
-import java.util.HashMap;
-import java.util.ArrayList;
-
-public class AccountPreferenceActivity extends PreferenceActivity
-{
+public class AccountPreferenceActivity extends PreferenceActivity {
private static final String TAG = "AccoutPreferenceActivity";
- public static final int ACCOUNT_MODIFIED = Activity.RESULT_FIRST_USER + 0;
- public static final int ACCOUNT_NOT_MODIFIED = Activity.RESULT_FIRST_USER + 1;
- public static final int ACCOUNT_DELETED = Activity.RESULT_FIRST_USER + 2;
+
+ public static final String KEY_MODE = "mode";
+
+ public interface mode {
+ static final int CREATION_MODE = 0;
+ static final int EDITION_MODE = 1;
+ }
+
+ public interface result {
+ static final int ACCOUNT_CREATED = Activity.RESULT_FIRST_USER + 0;
+ static final int ACCOUNT_MODIFIED = Activity.RESULT_FIRST_USER + 1;
+ static final int ACCOUNT_DELETED = Activity.RESULT_FIRST_USER + 2;
+ }
private AccountDetailBasic basicDetails = null;
private AccountDetailAdvanced advancedDetails = null;
private AccountDetailSrtp srtpDetails = null;
private AccountDetailTls tlsDetails = null;
private PreferenceManager mPreferenceManager;
- private HashMap<String, String> mPreferenceMap;
- private MenuItem deleteAccountAction = null;
private String mAccountID;
-
- Preference.OnPreferenceChangeListener changeBasicPreferenceListener =
- new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- preference.setSummary(getString(R.string.account_current_value_label)+(CharSequence)newValue);
-
- // String preferenceKey = basicDetailKeys.get(preference.getOrder()).mKey;
- // accountPreference.preferenceMap.put(preferenceKey, ((CharSequence)newValue).toString());
- basicDetails.setDetailString(preference.getOrder(), ((CharSequence)newValue).toString());
- // if(preferenceKey == AccountDetailBasic.CONFIG_ACCOUNT_ALIAS)
- // accountPreference.mScreen.setTitle(((CharSequence)newValue.toString()));
- return true;
- }
- };
+ private ArrayList<String> requiredFields = null;
- Preference.OnPreferenceChangeListener changeNewAccountTwoStateListener =
- new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- return true;
- }
- };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.account_creation_preferences);
+ mPreferenceManager = getPreferenceManager();
- private void init() {
+ Bundle b = getIntent().getExtras();
+
+ switch (b.getInt(KEY_MODE)) {
+ case mode.CREATION_MODE:
+ Log.i(TAG, "CREATION");
+ initCreation();
+ break;
+ case mode.EDITION_MODE:
+ Log.i(TAG, "ESDITION");
+ initEdition();
+ break;
+ }
+
+ requiredFields = new ArrayList<String>();
+ requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS);
+ requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME);
+ requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME);
+ requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD);
+
+ }
+
+ private void initCreation() {
+ basicDetails = new AccountDetailBasic();
+ advancedDetails = new AccountDetailAdvanced();
+ srtpDetails = new AccountDetailSrtp();
+ tlsDetails = new AccountDetailTls();
+
+ addPreferenceListener(basicDetails);
+ addPreferenceListener(advancedDetails);
+ addPreferenceListener(srtpDetails);
+ addPreferenceListener(tlsDetails);
+
+ }
+
+ private void initEdition() {
Bundle b = getIntent().getExtras();
mAccountID = b.getString("AccountID");
@@ -108,7 +131,7 @@
ArrayList<String> srtpPreferenceList = b.getStringArrayList(AccountDetailSrtp.BUNDLE_TAG);
ArrayList<String> tlsPreferenceList = b.getStringArrayList(AccountDetailTls.BUNDLE_TAG);
- basicDetails = new AccountDetailBasic(basicPreferenceList);
+ basicDetails = new AccountDetailBasic(basicPreferenceList);
advancedDetails = new AccountDetailAdvanced(advancedPreferenceList);
srtpDetails = new AccountDetailSrtp(srtpPreferenceList);
tlsDetails = new AccountDetailTls(tlsPreferenceList);
@@ -124,113 +147,225 @@
addPreferenceListener(tlsDetails);
}
- private void setPreferenceDetails(AccountDetail details) {
- for(AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+
+ Bundle b = getIntent().getExtras();
+
+ switch (b.getInt(KEY_MODE)) {
+ case mode.CREATION_MODE:
+ Log.i(TAG, "CREATION");
+ inflater.inflate(R.menu.account_creation, menu);
+ break;
+ case mode.EDITION_MODE:
+ Log.i(TAG, "onCreateOptionsMenu: " + mAccountID);
+
+ if (mAccountID.equals("IP2IP"))
+ return true;
+
+ inflater.inflate(R.menu.account_edition, menu);
+ break;
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onBackPressed() {
+ Bundle b = getIntent().getExtras();
+ switch (b.getInt(KEY_MODE)) {
+ case mode.CREATION_MODE:
+ Log.i(TAG, "CREATION");
+ AlertDialog dialog = createCancelDialog();
+ dialog.show();
+ break;
+ case mode.EDITION_MODE:
+ finish();
+ }
+
+ }
+
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.menuitem_delete:
+ AlertDialog dialog = createDeleteDialog();
+ dialog.show();
+ break;
+ case R.id.menuitem_create:
+ processAccount(result.ACCOUNT_CREATED);
+ break;
+ case R.id.menuitem_edit:
+ processAccount(result.ACCOUNT_MODIFIED);
+ break;
+
+ }
+
+ return true;
+ }
+
+ private void processAccount(int resultCode) {
+ AlertDialog dialog;
+ ArrayList<String> missingValue = new ArrayList<String>();
+ if (validateAccountCreation(missingValue)) {
+
+ Bundle bundle = new Bundle();
+ bundle.putString("AccountID", mAccountID);
+ HashMap<String, String> accountDetails = new HashMap<String, String>();
+
+ updateAccountDetails(accountDetails, basicDetails);
+ updateAccountDetails(accountDetails, advancedDetails);
+ updateAccountDetails(accountDetails, srtpDetails);
+ updateAccountDetails(accountDetails, tlsDetails);
+
+ bundle.putSerializable(AccountDetail.TAG, accountDetails);
+ Intent resultIntent = new Intent();
+ resultIntent.putExtras(bundle);
+
+ setResult(resultCode, resultIntent);
+ finish();
+ } else {
+ dialog = createCouldNotValidateDialog(missingValue);
+ dialog.show();
+ }
+
+ }
+
+ public boolean validateAccountCreation(ArrayList<String> missingValue) {
+ boolean valid = true;
+
+ for (String s : requiredFields) {
+ EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
+ Log.i(TAG, "Looking for " + s);
+ if (pref.getText().isEmpty()) {
+ Log.i(TAG, " INVALIDATED " + s + " " + pref.getText() + ";");
+ valid = false;
+ missingValue.add(pref.getTitle().toString());
+ }
+ }
+
+ return valid;
+ }
+
+
+ private void updateAccountDetails(HashMap<String, String> accountDetails, AccountDetail det) {
+ for (AccountDetail.PreferenceEntry p : det.getDetailValues()) {
Preference pref = mPreferenceManager.findPreference(p.mKey);
- if(pref != null) {
- if(!p.isTwoState) {
- ((EditTextPreference)pref).setText(p.mValue);
- pref.setSummary(getString(R.string.account_current_value_label) + p.mValue);
+ if (pref != null) {
+ if (p.isTwoState) {
+ CheckBoxPreference boxPref = (CheckBoxPreference) pref;
+ accountDetails.put(p.mKey, boxPref.isChecked() ? "true" : "false");
+ } else {
+ EditTextPreference textPref = (EditTextPreference) pref;
+ accountDetails.put(p.mKey, textPref.getText());
+ }
+ }
+ }
+ }
+
+ Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() {
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ preference.setSummary((CharSequence) newValue);
+ basicDetails.setDetailString(preference.getOrder(), ((CharSequence) newValue).toString());
+ return true;
+ }
+ };
+
+ private void setPreferenceDetails(AccountDetail details) {
+ for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+ Preference pref = mPreferenceManager.findPreference(p.mKey);
+ if (pref != null) {
+ if (!p.isTwoState) {
+ ((EditTextPreference) pref).setText(p.mValue);
+ pref.setSummary(p.mValue);
}
}
}
}
private void addPreferenceListener(AccountDetail details) {
- for(AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+ for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
Preference pref = mPreferenceManager.findPreference(p.mKey);
- if(pref != null) {
- if(!p.isTwoState) {
+ if (pref != null) {
+ if (!p.isTwoState) {
pref.setOnPreferenceChangeListener(changeBasicPreferenceListener);
}
}
}
}
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+
+
+
+
+ /******************************************
+ *
+ * AlertDialogs
+ *
+ ******************************************/
+
+ private AlertDialog createCouldNotValidateDialog(ArrayList<String> missingValue) {
+ String message = "The following parameters are missing:";
- addPreferencesFromResource(R.xml.account_creation_preferences);
- mPreferenceManager = getPreferenceManager();
+ for (String s : missingValue)
+ message += "\n - " + s;
- init();
+ Activity ownerActivity = this;
+ AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity);
+ builder.setMessage(message).setTitle("Missing Parameters").setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ /* Nothing to be done */
+ }
+ });
+
+ AlertDialog alertDialog = builder.create();
+ return alertDialog;
}
+
+ private AlertDialog createCancelDialog() {
+ Activity ownerActivity = this;
+ AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity);
+ builder.setMessage("All parameters will be lost").setTitle("Account Creation").setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ Activity activity = ((Dialog) dialog).getOwnerActivity();
+ activity.finish();
+ }
+ }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ /* Terminate with no action */
+ }
+ });
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- Log.i(TAG, "onCreateOptionsMenu: " + mAccountID);
- if(mAccountID.equals("IP2IP"))
- return true;
-
-
- deleteAccountAction = menu.add("Delete Account");
- deleteAccountAction.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
- return true;
+ AlertDialog alertDialog = builder.create();
+ alertDialog.setOwnerActivity(ownerActivity);
+
+ return alertDialog;
}
-
- @Override
- protected void onStart() {
- super.onStart();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- }
-
- @Override
- public void onBackPressed() {
- Bundle bundle = new Bundle();
- bundle.putString("AccountID", mAccountID);
- bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly());
-
- Intent resultIntent = new Intent();
- resultIntent.putExtras(bundle);
-
- setResult(ACCOUNT_MODIFIED, resultIntent);
- finish();
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- AlertDialog dialog = createAlertDialog();
- dialog.show();
-
- return true;
- }
-
- private AlertDialog createAlertDialog()
- {
+
+ private AlertDialog createDeleteDialog() {
Activity ownerActivity = this;
AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity);
builder.setMessage("Do you realy want to delete this account").setTitle("Delete Account")
- .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- Bundle bundle = new Bundle();
- bundle.putString("AccountID", mAccountID);
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ Bundle bundle = new Bundle();
+ bundle.putString("AccountID", mAccountID);
- Intent resultIntent = new Intent();
- resultIntent.putExtras(bundle);
+ Intent resultIntent = new Intent();
+ resultIntent.putExtras(bundle);
- Activity activity = ((Dialog)dialog).getOwnerActivity();
- activity.setResult(ACCOUNT_DELETED, resultIntent);
- activity.finish();
- }
- })
- .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- /* Terminate with no action */
- }
- });
+ Activity activity = ((Dialog) dialog).getOwnerActivity();
+ activity.setResult(result.ACCOUNT_DELETED, resultIntent);
+ activity.finish();
+ }
+ }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ /* Terminate with no action */
+ }
+ });
AlertDialog alertDialog = builder.create();
alertDialog.setOwnerActivity(ownerActivity);
@@ -238,29 +373,4 @@
return alertDialog;
}
- private void updateAccountDetails(HashMap<String, String> accountDetails, AccountDetail det) {
- for(AccountDetail.PreferenceEntry p : det.getDetailValues()) {
- Preference pref = mPreferenceManager.findPreference(p.mKey);
- if(pref != null) {
- if(p.isTwoState) {
- CheckBoxPreference boxPref = (CheckBoxPreference) pref;
- accountDetails.put(p.mKey, boxPref.isChecked() ? "true" : "false");
- }
- else {
- EditTextPreference textPref = (EditTextPreference)pref;
- accountDetails.put(p.mKey, textPref.getText());
- }
- }
- }
- }
-
- private void updateAccountDetails() {
- HashMap<String, String> accountDetails = new HashMap<String, String>();
-
- updateAccountDetails(accountDetails, basicDetails);
- updateAccountDetails(accountDetails, advancedDetails);
- updateAccountDetails(accountDetails, srtpDetails);
- updateAccountDetails(accountDetails, tlsDetails);
- }
}
-