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/AccountCreationActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
deleted file mode 100644
index 93de02e..0000000
--- a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
- *
- * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Additional permission under GNU GPL version 3 section 7:
- *
- * If you modify this program, or any covered work, by linking or
- * combining it with the OpenSSL project's OpenSSL library (or a
- * modified version of that library), containing parts covered by the
- * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- * grants you additional permission to convey the resulting work.
- * Corresponding Source for a non-source form of such a combination
- * shall include the source code for the parts of OpenSSL used as well
- * as that of the covered work.
- */
-
-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.content.ServiceConnection;
-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.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.account.AccountDetail;
-import com.savoirfairelinux.sflphone.account.AccountDetailAdvanced;
-import com.savoirfairelinux.sflphone.account.AccountDetailBasic;
-import com.savoirfairelinux.sflphone.account.AccountDetailSrtp;
-import com.savoirfairelinux.sflphone.account.AccountDetailTls;
-import com.savoirfairelinux.sflphone.service.ISipService;
-import com.savoirfairelinux.sflphone.service.SipService;
-
-public class AccountCreationActivity extends PreferenceActivity
-{
- static final String TAG = "SFLPhonePreferenceActivity";
- private ISipService service;
- private boolean mBound = false;
- private PreferenceManager mPreferenceManager = null;
- private AccountDetailBasic basicDetails;
- private AccountDetailAdvanced advancedDetails;
- private AccountDetailSrtp srtpDetails;
- private AccountDetailTls tlsDetails;
- private MenuItem createAccountAction = null;
- private ArrayList<String> requiredFields = null;
-
- Preference.OnPreferenceChangeListener changeNewAccountPreferenceListener = new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
- return true;
- }
- };
-
- Preference.OnPreferenceChangeListener changeNewAccountTwoStateListener = new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- return true;
- }
- };
-
- private ServiceConnection mConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName className, IBinder binder) {
- service = ISipService.Stub.asInterface(binder);
- mBound = true;
- Log.d(TAG, "Service connected");
- }
-
- @Override
- public void onServiceDisconnected(ComponentName arg0) {
- mBound = false;
- Log.d(TAG, "Service disconnected");
- }
- };
-
- public AccountCreationActivity()
- {
- basicDetails = new AccountDetailBasic();
- advancedDetails = new AccountDetailAdvanced();
- srtpDetails = new AccountDetailSrtp();
- tlsDetails = new AccountDetailTls();
-
- 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 AlertDialog createAlertDialog()
- {
- 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 */
- }
- });
-
- AlertDialog alertDialog = builder.create();
- alertDialog.setOwnerActivity(ownerActivity);
-
- return alertDialog;
- }
-
- private AlertDialog createCouldNotValidateDialog(ArrayList<String> missingValue)
- {
- String message = "The following parameters are missing:";
-
- for(String s : missingValue)
- message += "\n - " + s;
-
- 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;
- }
-
- 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;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.account_creation_preferences);
- mPreferenceManager = getPreferenceManager();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- createAccountAction = menu.add("Create Account");
- createAccountAction.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- ArrayList<String> missingValue = new ArrayList<String>();
- if(validateAccountCreation(missingValue)) {
- createNewAccount();
- finish();
- }
- else {
- AlertDialog dialog = createCouldNotValidateDialog(missingValue);
- dialog.show();
- }
-
- return true;
- }
-
- private void addPreferenceListener(AccountDetail details) {
- for(AccountDetail.PreferenceEntry p : details.getDetailValues()) {
- Preference pref = mPreferenceManager.findPreference(p.mKey);
- if(pref != null) {
- if(!p.isTwoState) {
- pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
- }
- }
- }
- }
-
- @Override
- protected void onStart() {
- super.onStart();
-
- addPreferenceListener(basicDetails);
- addPreferenceListener(advancedDetails);
- addPreferenceListener(srtpDetails);
- addPreferenceListener(tlsDetails);
-
- if(!mBound) {
- Log.i(TAG, "onStart: Binding service...");
- Intent intent = new Intent(this, SipService.class);
- bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
-
- if(mBound) {
- Log.i(TAG, "onStop: Unbinding service...");
- unbindService(mConnection);
- mBound = false;
- }
- }
-
- @Override
- public void onBackPressed() {
-
- AlertDialog dialog = createAlertDialog();
- dialog.show();
- }
-
- 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 createNewAccount() {
-
- HashMap<String, String> accountDetails = new HashMap<String, String>();
-
- updateAccountDetails(accountDetails, basicDetails);
- updateAccountDetails(accountDetails, advancedDetails);
- updateAccountDetails(accountDetails, srtpDetails);
- updateAccountDetails(accountDetails, tlsDetails);
-
- try {
- Log.i(TAG, "ADD ACCOUNT");
- service.addAccount(accountDetails);
- } catch (RemoteException e) {
- Log.e(TAG, "Cannot call service method", e);
- }
- }
-}
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);
- }
}
-
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
index 26eb7b3..ad06924 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
@@ -48,26 +48,23 @@
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.ViewPager;
import android.util.Log;
-import android.view.Gravity;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
-import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.widget.EditText;
import android.widget.ImageButton;
-import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.account.AccountListReceiver;
-import com.savoirfairelinux.sflphone.client.receiver.CallList;
+import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
+import com.savoirfairelinux.sflphone.client.receiver.CallListReceiver;
import com.savoirfairelinux.sflphone.fragments.ButtonSectionFragment;
import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
+import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
import com.savoirfairelinux.sflphone.model.SipCall;
import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
@@ -82,12 +79,12 @@
static Animation animation;
private ContactListFragment mContactListFragment = null;
private CallElementListFragment mCallElementList = null;
- private HistorySectionFragment mHistorySectionFragment = null;
+ private HistoryFragment mHistorySectionFragment = null;
private ButtonSectionFragment mButtonSectionFragment = null;
private boolean mBound = false;
private ISipService service;
public AccountListReceiver mAccountList;
- public CallList mCallList = new CallList(this);
+ public CallListReceiver mCallList = new CallListReceiver(this);
private SFLphoneApplication mApplication;
private static final int ACTION_BAR_TAB_CONTACT = 0;
@@ -146,7 +143,7 @@
mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CONTACT));
mCallElementList = (CallElementListFragment) getFragmentManager().getFragment(savedInstanceState,
mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CALL));
- mHistorySectionFragment = (HistorySectionFragment) getFragmentManager().getFragment(savedInstanceState,
+ mHistorySectionFragment = (HistoryFragment) getFragmentManager().getFragment(savedInstanceState,
mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_HISTORY));
mButtonSectionFragment = (ButtonSectionFragment) getFragmentManager().getFragment(savedInstanceState,
mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_TEST));
@@ -161,7 +158,7 @@
Log.w(TAG, "Recreated mCallElementList=" + mCallElementList);
}
if (mHistorySectionFragment == null) {
- mHistorySectionFragment = new HistorySectionFragment();
+ mHistorySectionFragment = new HistoryFragment();
Log.w(TAG, "Recreated mHistorySectionFragment=" + mHistorySectionFragment);
}
if (mButtonSectionFragment == null) {
@@ -408,8 +405,8 @@
Log.w(TAG, "getItem() CallElementList=" + fragment);
break;
case 2:
- fragment = new HistorySectionFragment();
- Log.w(TAG, "getItem() HistorySectionFragment=" + fragment);
+ fragment = new HistoryFragment();
+ Log.w(TAG, "getItem() HistoryFragment=" + fragment);
break;
case 3:
fragment = new ButtonSectionFragment();
@@ -422,7 +419,7 @@
// Log.i(TAG, "getItem() fragment is " + fragment);
Bundle args = new Bundle();
- args.putInt(HistorySectionFragment.ARG_SECTION_NUMBER, i + 1);
+ args.putInt(HistoryFragment.ARG_SECTION_NUMBER, i + 1);
fragment.setArguments(args);
return fragment;
}
@@ -463,7 +460,7 @@
name = CallElementListFragment.class.getName();
break;
case 2:
- name = HistorySectionFragment.class.getName();
+ name = HistoryFragment.class.getName();
break;
case 3:
name = ButtonSectionFragment.class.getName();
@@ -501,25 +498,6 @@
}
}
- /**
- * A dummy fragment representing a section of the app, but that simply displays dummy text.
- */
- public static class HistorySectionFragment extends Fragment {
- public HistorySectionFragment() {
- setRetainInstance(true);
- }
-
- public static final String ARG_SECTION_NUMBER = "section_number";
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
- TextView textView = new TextView(getActivity());
- textView.setGravity(Gravity.CENTER);
- Bundle args = getArguments();
- textView.setText("ARG_SECTION_NUMBER=" + Integer.toString(args.getInt(ARG_SECTION_NUMBER)));
- return textView;
- }
- }
@Override
public void onClick(View view) {
@@ -555,7 +533,7 @@
info.mEmail = "coolGuy@coolGuy.com";
info.mCallType = SipCall.CALL_TYPE_OUTGOING;
- SipCall call = CallList.getCallInstance(info);
+ SipCall call = CallListReceiver.getCallInstance(info);
call.launchCallActivity(this);
call.placeCallUpdateUi();
call.notifyServicePlaceCall(service);
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
index 17bed3e..00d3023 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
@@ -49,14 +49,14 @@
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.fragments.AccountManagementFragment;
-import com.savoirfairelinux.sflphone.fragments.PrefManagementFragment;
+import com.savoirfairelinux.sflphone.fragments.AudioManagementFragment;
import com.savoirfairelinux.sflphone.service.ISipService;
import com.savoirfairelinux.sflphone.service.SipService;
public class SFLPhonePreferenceActivity extends Activity implements ActionBar.TabListener
{
static final int NUM_PAGES = 2;
- static final String TAG = "SFLPhonePreferenceActivity";
+ static final String TAG = SFLPhonePreferenceActivity.class.getSimpleName();
PreferencesPagerAdapter mPreferencesPagerAdapter;
private boolean mBound = false;
static boolean serviceIsOn = false;
@@ -185,7 +185,7 @@
fragment = new AccountManagementFragment();
break;
case 1:
- fragment = new PrefManagementFragment();
+ fragment = new AudioManagementFragment();
break;
default:
Log.i(TAG, "Get new fragment " + position + " is null");
@@ -211,32 +211,4 @@
}
}
- public static class ArrayListFragment extends ListFragment {
- int mNum;
-
- static ArrayListFragment newInstance(int num) {
- ArrayListFragment f = new ArrayListFragment();
-
- // Supply num input as an argument.
- Bundle args = new Bundle();
- args.putInt("num", num);
- f.setArguments(args);
-
- return f;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mNum = getArguments() != null ? getArguments().getInt("num") : 1;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- // setListAdapter(new ArrayAdapter<String>(getActivity(),
- // android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings));
- }
-
- }
}
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
index f7ef9c9..4fc4427 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
@@ -8,7 +8,7 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Log;
-import com.savoirfairelinux.sflphone.account.AccountListReceiver;
+import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
import com.savoirfairelinux.sflphone.service.ISipService;
import com.savoirfairelinux.sflphone.service.SipService;
diff --git a/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java b/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java
new file mode 100644
index 0000000..efd6c5b
--- /dev/null
+++ b/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
+ *
+ * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Additional permission under GNU GPL version 3 section 7:
+ *
+ * If you modify this program, or any covered work, by linking or
+ * combining it with the OpenSSL project's OpenSSL library (or a
+ * modified version of that library), containing parts covered by the
+ * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ * grants you additional permission to convey the resulting work.
+ * Corresponding Source for a non-source form of such a combination
+ * shall include the source code for the parts of OpenSSL used as well
+ * as that of the covered work.
+ */
+
+package com.savoirfairelinux.sflphone.client.receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Intent;
+import android.content.Context;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+import com.savoirfairelinux.sflphone.account.AccountManagementUI;
+import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
+import com.savoirfairelinux.sflphone.service.ISipService;
+
+public class AccountListReceiver extends BroadcastReceiver
+{
+ private static final long serialVersionUID = -9178386308804218835L;
+ static final String TAG = "AccountList";
+ private String currentAccountID = "";
+ private ArrayList<String> mList = new ArrayList<String>();
+ private ArrayList<AccountManagementUI> mUserInterfaceList = new ArrayList<AccountManagementUI>();
+ private static ISipService mService = null;
+ // private HashMap<String, AccountPreferenceScreen> mAccountList = new HashMap<String, AccountPreferenceScreen>();
+
+ public static final String DEFAULT_ACCOUNT_ID = "IP2IP";
+
+ public AccountListReceiver() {
+ }
+
+ public void setSipService(ISipService service) {
+ mService = service;
+ mList = getAccountListFromService();
+ }
+
+
+ public void addManagementUI(AccountManagementUI ui) {
+ mUserInterfaceList.add(ui);
+ }
+
+ public void accountSelected(String accountID, AccountManagementUI userInterface) {
+ if(!mUserInterfaceList.isEmpty()) {
+ for(AccountManagementUI ui : mUserInterfaceList) {
+ ui.setSelectedAccount(accountID);
+ }
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent)
+ {
+ String signalName = intent.getStringExtra(ConfigurationManagerCallback.SIGNAL_NAME);
+ Log.d(TAG, "Signal received: " + signalName);
+
+ if(signalName.equals(ConfigurationManagerCallback.ACCOUNTS_CHANGED)) {
+ processAccountsChangedSignal(intent);
+ } else if(signalName.equals(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED)) {
+ processAccountStateChanged(intent);
+ }
+ }
+
+ private ArrayList<String> getAccountListFromService() {
+ ArrayList<String> list = null;
+
+ try {
+ list = (ArrayList<String>)mService.getAccountList();
+ }
+ catch (RemoteException e) {
+ Log.e(TAG, "Remote exception", e);
+ }
+
+ list.remove(DEFAULT_ACCOUNT_ID);
+
+ return list;
+ }
+
+
+ private void processAccountsChangedSignal(Intent intent) {
+ ArrayList<String> newList = getAccountListFromService();
+
+ Log.i(TAG, "Process AccountsChanged signal in AccountList");
+
+ newList.remove(DEFAULT_ACCOUNT_ID);
+
+ if(!mUserInterfaceList.isEmpty()) {
+
+ if(newList.size() > mList.size()) {
+ for(AccountManagementUI ui : mUserInterfaceList) {
+ ui.accountAdded(newList);
+ }
+ }
+ }
+
+ mList = newList;
+ }
+
+ private void processAccountStateChanged(Intent intent) {
+ if(!mUserInterfaceList.isEmpty()) {
+ }
+ }
+}
diff --git a/src/com/savoirfairelinux/sflphone/client/receiver/CallList.java b/src/com/savoirfairelinux/sflphone/client/receiver/CallListReceiver.java
similarity index 97%
rename from src/com/savoirfairelinux/sflphone/client/receiver/CallList.java
rename to src/com/savoirfairelinux/sflphone/client/receiver/CallListReceiver.java
index bfec63a..ddf4efa 100644
--- a/src/com/savoirfairelinux/sflphone/client/receiver/CallList.java
+++ b/src/com/savoirfairelinux/sflphone/client/receiver/CallListReceiver.java
@@ -44,7 +44,7 @@
import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
import com.savoirfairelinux.sflphone.client.SFLPhoneHomeActivity;
-public class CallList extends BroadcastReceiver
+public class CallListReceiver extends BroadcastReceiver
{
static final String TAG = "CallList";
static ArrayList<SipCall> mList = new ArrayList<SipCall>();
@@ -81,7 +81,7 @@
return call;
}
- public CallList(SFLPhoneHomeActivity home) {
+ public CallListReceiver(SFLPhoneHomeActivity home) {
mHome = home;
}