diff --git a/.classpath b/.classpath
index aefe1a96e..b95f2cc1d 100644
--- a/.classpath
+++ b/.classpath
@@ -5,10 +5,10 @@
+
-
diff --git a/.gitmodules b/.gitmodules
index 9b6f29f6c..1704828bf 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -67,3 +67,6 @@
[submodule "submodules/externals/cunit"]
path = submodules/externals/cunit
url = gitosis@git.linphone.org:cunit.git
+[submodule "submodules/externals/axmlrpc"]
+ path = submodules/externals/axmlrpc
+ url = git://git.linphone.org/axmlrpc.git
diff --git a/ant.properties b/ant.properties
index 7ddeeeb30..7f65258e5 100644
--- a/ant.properties
+++ b/ant.properties
@@ -1,3 +1,3 @@
-source.dir=src:submodules/linphone/mediastreamer2/java/src:submodules/linphone/java/j2se:submodules/linphone/java/common:submodules/linphone/java/impl:submodules/linphone/coreapi/help/java
+source.dir=src:submodules/linphone/mediastreamer2/java/src:submodules/linphone/java/j2se:submodules/linphone/java/common:submodules/linphone/java/impl:submodules/linphone/coreapi/help/java:submodules/externals/axmlrpc/src/main/java
key.store=bc-android.keystore
key.alias=nw8000
diff --git a/custom_rules.xml b/custom_rules.xml
index 5ddacc5b0..9bf088275 100644
--- a/custom_rules.xml
+++ b/custom_rules.xml
@@ -62,7 +62,7 @@
destdir="${javadoc.dir}"
verbose="off"
use="true"
- classpath="${sdk.dir}/platforms/${target}/android.jar:libs/aXMLRPC.jar:libs/android-support-v4.jar:libs/gcm.jar"
+ classpath="${sdk.dir}/platforms/${target}/android.jar:libs/android-support-v4.jar:libs/gcm.jar"
sourcepath="${source.dir}:gen"
linkoffline="http://developer.android.com/reference file:/${sdk.dir}/docs/reference"
stylesheetfile="${sdk.dir}/docs/assets/android-developer-docs.css">
diff --git a/libs/aXMLRPC.jar b/libs/aXMLRPC.jar
deleted file mode 100644
index 9cf8f61e0..000000000
Binary files a/libs/aXMLRPC.jar and /dev/null differ
diff --git a/res/layout-FR/chat.xml b/res/layout-FR/chat.xml
index 0261f0a39..8acf785ba 100644
--- a/res/layout-FR/chat.xml
+++ b/res/layout-FR/chat.xml
@@ -81,6 +81,7 @@
android:paddingRight="5dp" />
-
-
+
+
+
+
+
+
+
+
@@ -104,6 +124,7 @@
android:layout_height="wrap_content">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index 56c2e3afc..0b8446b57 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -34,7 +34,7 @@
true
false
true
- true
+ true
true
false
@@ -64,5 +64,7 @@
linphone-android@belledonne-communications.com
linphone-android-photo-temp.jpg
linphone-android-photo-%s.jpg
+
+ true
diff --git a/src/org/linphone/AccountPreferencesFragment.java b/src/org/linphone/AccountPreferencesFragment.java
index 4414b4e9f..1da113e2a 100644
--- a/src/org/linphone/AccountPreferencesFragment.java
+++ b/src/org/linphone/AccountPreferencesFragment.java
@@ -103,12 +103,12 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
outboundProxy.setKey(getString(R.string.pref_enable_outbound_proxy_key) + key);
final Preference disable = advanced.getPreference(2);
- disable.setEnabled(prefs.getInt(getString(R.string.pref_default_account_key), 0) != n);
+ disable.setEnabled(true);
Compatibility.setPreferenceChecked(disable, prefs.getBoolean(getString(R.string.pref_disable_account_key) + key, false));
disable.setKey(getString(R.string.pref_disable_account_key) + key);
final Preference delete = advanced.getPreference(4);
- delete.setEnabled(prefs.getInt(getString(R.string.pref_default_account_key), 0) != n);
+ delete.setEnabled(true);
delete.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
int nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 1);
@@ -123,22 +123,29 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(i), prefs.getBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(i+1), false));
editor.putBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(i), prefs.getBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(i+1), false));
}
-
- int lastAccount = nbAccounts - 1;
- editor.putString(getString(R.string.pref_username_key) + getAccountNumber(lastAccount), null);
- editor.putString(getString(R.string.pref_auth_userid_key) + getAccountNumber(lastAccount), null);
- editor.putString(getString(R.string.pref_passwd_key) + getAccountNumber(lastAccount), null);
- editor.putString(getString(R.string.pref_domain_key) + getAccountNumber(lastAccount), null);
- editor.putString(getString(R.string.pref_proxy_key) + getAccountNumber(lastAccount), null);
- editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(lastAccount), false);
- editor.putBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(lastAccount), false);
-
- int defaultAccount = prefs.getInt(getString(R.string.pref_default_account_key), 0);
- if (defaultAccount > n) {
- editor.putInt(getString(R.string.pref_default_account_key), defaultAccount - 1);
- }
-
- editor.putInt(getString(R.string.pref_extra_accounts), nbAccounts - 1);
+
+ if (n != 0) {
+ int lastAccount = nbAccounts - 1;
+ editor.putString(getString(R.string.pref_username_key) + getAccountNumber(lastAccount), null);
+ editor.putString(getString(R.string.pref_passwd_key) + getAccountNumber(lastAccount), null);
+ editor.putString(getString(R.string.pref_domain_key) + getAccountNumber(lastAccount), null);
+ editor.putString(getString(R.string.pref_proxy_key) + getAccountNumber(lastAccount), null);
+ editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(lastAccount), false);
+ editor.putBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(lastAccount), false);
+
+ int defaultAccount = prefs.getInt(getString(R.string.pref_default_account_key), 0);
+ if (defaultAccount > n) {
+ editor.putInt(getString(R.string.pref_default_account_key), defaultAccount - 1);
+ }
+ editor.putInt(getString(R.string.pref_extra_accounts), nbAccounts - 1);
+ } else if (n == 0 && nbAccounts <= 1) {
+ editor.putString(getString(R.string.pref_username_key), "");
+ editor.putString(getString(R.string.pref_passwd_key), "");
+ editor.putString(getString(R.string.pref_domain_key), "");
+ } else {
+ editor.putInt(getString(R.string.pref_extra_accounts), nbAccounts - 1);
+ }
+
editor.commit();
LinphoneActivity.instance().displaySettings();
@@ -157,7 +164,6 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(getString(R.string.pref_default_account_key), n);
editor.commit();
- delete.setEnabled(false);
disable.setEnabled(false);
Compatibility.setPreferenceChecked(disable, false);
preference.setEnabled(false);
@@ -179,7 +185,7 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
int n = prefs.getInt(getString(R.string.pref_extra_accounts), 1);
- String keyUsername = getString(R.string.pref_username_key) + (n-1 == 0 ? "" : Integer.toString(n-1));
+ String keyUsername = getString(R.string.pref_username_key) + getAccountNumber(n-1);
if (prefs.getString(keyUsername, "").equals("")) {
//If not, we suppress it to not display a blank field
diff --git a/src/org/linphone/EditContactFragment.java b/src/org/linphone/EditContactFragment.java
index 54d5d729d..c9e34268a 100644
--- a/src/org/linphone/EditContactFragment.java
+++ b/src/org/linphone/EditContactFragment.java
@@ -235,7 +235,7 @@ public class EditContactFragment extends Fragment {
}
private View displayNumberOrAddress(final TableLayout controls, String numberOrAddress, boolean forceAddNumber) {
- final boolean isSip = numberOrAddress.startsWith("sip:");
+ boolean isSip = numberOrAddress.startsWith("sip:");
if (isSip) {
if (firstSipAddressIndex == -1) {
firstSipAddressIndex = controls.getChildCount();
@@ -243,7 +243,10 @@ public class EditContactFragment extends Fragment {
numberOrAddress = numberOrAddress.replace("sip:", "");
}
if ((getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) && !isSip) || (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor) && isSip)) {
- return null;
+ if (forceAddNumber)
+ isSip = !isSip; // If number can't be displayed because we hide a sort of number, change that category
+ else
+ return null;
}
NewOrUpdatedNumberOrAddress tempNounoa;
@@ -341,11 +344,6 @@ public class EditContactFragment extends Fragment {
if (isSip) {
controls.addView(view, controls.getChildCount());
- if (deleteContact != null) {
- // Move to the bottom the remove contact button
- controls.removeView(deleteContact);
- controls.addView(deleteContact, controls.getChildCount());
- }
} else {
if (firstSipAddressIndex != -1) {
controls.addView(view, firstSipAddressIndex);
@@ -353,6 +351,11 @@ public class EditContactFragment extends Fragment {
controls.addView(view);
}
}
+ if (deleteContact != null) {
+ // Move to the bottom the remove contact button
+ controls.removeView(deleteContact);
+ controls.addView(deleteContact, controls.getChildCount());
+ }
}
private void createNewContact() {
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index ffae79063..db4ab909f 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -762,6 +762,8 @@ public class LinphoneActivity extends FragmentActivity implements
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (lc != null && lc.getDefaultProxyConfig() != null)
statusFragment.registrationStateChanged(lc.getDefaultProxyConfig().getState());
+ else
+ statusFragment.registrationStateChanged(RegistrationState.RegistrationNone);
}
}
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index 232dd6b39..03ecb2e99 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -42,8 +42,10 @@ import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
+import org.linphone.LinphoneSimpleListener.ConnectivityChangedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener.AudioState;
+import org.linphone.LinphoneSimpleListener.LinphoneOnDTMFReceivedListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener;
import org.linphone.LinphoneSimpleListener.LinphoneServiceListener;
import org.linphone.core.CallDirection;
@@ -144,6 +146,7 @@ public final class LinphoneManager implements LinphoneCoreListener {
private String lastLcStatusMessage;
private String basePath;
private static boolean sExited;
+ private String contactParams;
private WakeLock mIncallWakeLock;
@@ -445,7 +448,8 @@ public final class LinphoneManager implements LinphoneCoreListener {
public void enableCamera(LinphoneCall call, boolean enable) {
if (call != null) {
call.enableCamera(enable);
- LinphoneService.instance().refreshIncallIcon(mLc.getCurrentCall());
+ if (mServiceContext.getResources().getBoolean(R.bool.enable_call_notification))
+ LinphoneService.instance().refreshIncallIcon(mLc.getCurrentCall());
}
}
@@ -663,7 +667,7 @@ public final class LinphoneManager implements LinphoneCoreListener {
}
LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig();
- if (lDefaultProxyConfig !=null) {
+ if (lDefaultProxyConfig != null) {
//prefix
String lPrefix = getPrefString(R.string.pref_prefix_key, null);
if (lPrefix != null) {
@@ -671,6 +675,8 @@ public final class LinphoneManager implements LinphoneCoreListener {
}
//escape +
lDefaultProxyConfig.setDialEscapePlus(getPrefBoolean(R.string.pref_escape_plus_key, false));
+ } else if (LinphoneService.isReady()) {
+ LinphoneService.instance().onRegistrationStateChanged(RegistrationState.RegistrationNone, null);
}
}
@@ -706,9 +712,11 @@ public final class LinphoneManager implements LinphoneCoreListener {
String regId = getPrefString(R.string.push_reg_id_key, null);
String appId = getString(R.string.push_sender_id);
if (regId != null && getPrefBoolean(R.string.pref_push_notification_key, mR.getBoolean(R.bool.pref_push_notification_default))) {
- String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId + ";pn-msg-str=IM_MSG;pn-call-str=IC_MSG;pn-call-snd=ring.caf;pn-msg-snd=msg.caf;";
+ String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId + ";pn-msg-str=IM_MSG;pn-call-str=IC_MSG;pn-call-snd=ring.caf;pn-msg-snd=msg.caf";
proxycon.setContactParameters(contactInfos);
}
+ } else if (contactParams != null) {
+ proxycon.setContactParameters(contactParams);
}
mLc.addProxyConfig(proxycon);
@@ -788,6 +796,10 @@ public final class LinphoneManager implements LinphoneCoreListener {
}
return defaultValue;
}
+
+ public void setContactParams(String params) {
+ contactParams = params;
+ }
public void initFromConf() throws LinphoneConfigException {
boolean isDebugLogEnabled = !(mR.getBoolean(R.bool.disable_every_log)) && getPrefBoolean(R.string.pref_debug_key, mR.getBoolean(R.bool.pref_debug_default));
@@ -1028,6 +1040,15 @@ public final class LinphoneManager implements LinphoneCoreListener {
Log.i(eventInfo.getTypeName()," connected: wifi only activated, setting network unreachable");
}
}
+
+ if (connectivityListener != null) {
+ connectivityListener.onConnectivityChanged(mServiceContext, eventInfo, cm);
+ }
+ }
+
+ private ConnectivityChangedListener connectivityListener;
+ public void addConnectivityChangedListener(ConnectivityChangedListener l) {
+ connectivityListener = l;
}
public interface EcCalibrationListener {
@@ -1062,6 +1083,18 @@ public final class LinphoneManager implements LinphoneCoreListener {
LinphoneAddress from, String message) {
//deprecated
}
+
+ @Override
+ public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) {
+ Log.d("DTMF received: " + dtmf);
+ if (dtmfReceivedListener != null)
+ dtmfReceivedListener.onDTMFReceived(call, dtmf);
+ }
+
+ private LinphoneOnDTMFReceivedListener dtmfReceivedListener;
+ public void setOnDTMFReceivedListener(LinphoneOnDTMFReceivedListener listener) {
+ dtmfReceivedListener = listener;
+ }
@Override
public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) {
@@ -1093,11 +1126,6 @@ public final class LinphoneManager implements LinphoneCoreListener {
}
}
- @Override
- public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) {
- Log.d("DTMF received: " + dtmf);
- }
-
public String getLastLcStatusMessage() {
return lastLcStatusMessage;
}
@@ -1396,6 +1424,16 @@ public final class LinphoneManager implements LinphoneCoreListener {
}
return false;
}
+
+ public boolean acceptCall(LinphoneCall call) {
+ try {
+ mLc.acceptCall(call);
+ return true;
+ } catch (LinphoneCoreException e) {
+ Log.i(e, "Accept call failed");
+ }
+ return false;
+ }
public boolean acceptCallWithParams(LinphoneCall call, LinphoneCallParams params) {
try {
diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java
index 5301b0982..257ea0b35 100644
--- a/src/org/linphone/LinphoneService.java
+++ b/src/org/linphone/LinphoneService.java
@@ -291,6 +291,11 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
notifyWrapper(CUSTOM_NOTIF_ID, mCustomNotif);
}
+ public void removeCustomNotification() {
+ mNM.cancel(CUSTOM_NOTIF_ID);
+ resetIntentLaunchedOnNotificationClick();
+ }
+
public void displayMessageNotification(String fromSipUri, String fromName, String message) {
Intent notifIntent = new Intent(this, LinphoneActivity.class);
notifIntent.putExtra("GoToChat", true);
@@ -513,6 +518,9 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
if ((state == RegistrationState.RegistrationFailed || state == RegistrationState.RegistrationCleared) && (LinphoneManager.getLc().getDefaultProxyConfig() == null || !LinphoneManager.getLc().getDefaultProxyConfig().isRegistered())) {
sendNotification(IC_LEVEL_OFFLINE, R.string.notification_register_failure);
}
+ if (state == RegistrationState.RegistrationNone) {
+ sendNotification(IC_LEVEL_OFFLINE, R.string.notification_started);
+ }
mHandler.post(new Runnable() {
public void run() {
@@ -567,10 +575,12 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
if (state == State.StreamsRunning) {
// Workaround bug current call seems to be updated after state changed to streams running
- refreshIncallIcon(call);
+ if (getResources().getBoolean(R.bool.enable_call_notification))
+ refreshIncallIcon(call);
mWifiLock.acquire();
} else {
- refreshIncallIcon(LinphoneManager.getLc().getCurrentCall());
+ if (getResources().getBoolean(R.bool.enable_call_notification))
+ refreshIncallIcon(LinphoneManager.getLc().getCurrentCall());
}
if ((state == State.CallEnd || state == State.Error) && LinphoneManager.getLc().getCallsNb() < 1) {
mWifiLock.release();
diff --git a/src/org/linphone/LinphoneSimpleListener.java b/src/org/linphone/LinphoneSimpleListener.java
index 3d2fe0d7f..7864a20ba 100644
--- a/src/org/linphone/LinphoneSimpleListener.java
+++ b/src/org/linphone/LinphoneSimpleListener.java
@@ -25,7 +25,10 @@ import org.linphone.core.LinphoneChatMessage;
import org.linphone.core.LinphoneCore.GlobalState;
import org.linphone.core.LinphoneCore.RegistrationState;
+import android.content.Context;
import android.media.MediaPlayer;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
public interface LinphoneSimpleListener {
@@ -67,4 +70,12 @@ public interface LinphoneSimpleListener {
public static interface LinphoneOnRegistrationStateChangedListener extends LinphoneSimpleListener {
void onRegistrationStateChanged(RegistrationState state);
}
+
+ public static interface ConnectivityChangedListener extends LinphoneSimpleListener {
+ void onConnectivityChanged(Context context, NetworkInfo eventInfo, ConnectivityManager cm);
+ }
+
+ public static interface LinphoneOnDTMFReceivedListener extends LinphoneSimpleListener {
+ void onDTMFReceived(LinphoneCall call, int dtmf);
+ }
}
diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java
index 822a3fbe7..97af9bda3 100644
--- a/src/org/linphone/LinphoneUtils.java
+++ b/src/org/linphone/LinphoneUtils.java
@@ -29,13 +29,12 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCore;
+import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.capture.hwconf.Hacks;
@@ -68,19 +67,15 @@ public final class LinphoneUtils {
private LinphoneUtils(){}
private static boolean preventVolumeBarToDisplay = false;
- private static final String sipAddressRegExp = "^(sip:)?(\\+)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}(:[0-9]{2,5})?$";
- private static final String strictSipAddressRegExp = "^sip:(\\+)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$";
+ //private static final String sipAddressRegExp = "^(sip:)?(\\+)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}(:[0-9]{2,5})?$";
+ //private static final String strictSipAddressRegExp = "^sip:(\\+)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$";
public static boolean isSipAddress(String numberOrAddress) {
- Pattern p = Pattern.compile(sipAddressRegExp);
- Matcher m = p.matcher(numberOrAddress);
- return m != null && m.matches();
+ return LinphoneCoreFactory.instance().createLinphoneAddress(numberOrAddress) != null;
}
public static boolean isStrictSipAddress(String numberOrAddress) {
- Pattern p = Pattern.compile(strictSipAddressRegExp);
- Matcher m = p.matcher(numberOrAddress);
- return m != null && m.matches();
+ return isSipAddress(numberOrAddress) && numberOrAddress.startsWith("sip:");
}
public static String getUsernameFromAddress(String address) {
diff --git a/src/org/linphone/PreferencesFragment.java b/src/org/linphone/PreferencesFragment.java
index daf98c696..417b966e4 100644
--- a/src/org/linphone/PreferencesFragment.java
+++ b/src/org/linphone/PreferencesFragment.java
@@ -281,6 +281,10 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa
addAccount.setTitle(getString(R.string.pref_add_account));
addAccount.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
+ SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+ nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 0);
+ prefs.edit().putInt(getString(R.string.pref_extra_accounts), nbAccounts+1).commit();
+
addExtraAccountPreferencesButton(accounts, nbAccounts, true);
LinphoneActivity.instance().displayAccountSettings(nbAccounts);
nbAccounts++;
diff --git a/src/org/linphone/StatusFragment.java b/src/org/linphone/StatusFragment.java
index 8f27c5e3b..0309ce5df 100644
--- a/src/org/linphone/StatusFragment.java
+++ b/src/org/linphone/StatusFragment.java
@@ -231,7 +231,7 @@ public class StatusFragment extends Fragment {
e.printStackTrace();
}
- return -1;
+ return R.drawable.led_disconnected;
}
private String getStatusIconText(LinphoneCore.RegistrationState state) {
@@ -253,7 +253,7 @@ public class StatusFragment extends Fragment {
e.printStackTrace();
}
- return null;
+ return context.getString(R.string.status_not_connected);
}
private void startCallQuality() {
diff --git a/src/org/linphone/setup/WizardFragment.java b/src/org/linphone/setup/WizardFragment.java
index 1e4240516..4309edff2 100644
--- a/src/org/linphone/setup/WizardFragment.java
+++ b/src/org/linphone/setup/WizardFragment.java
@@ -50,6 +50,7 @@ public class WizardFragment extends Fragment {
private boolean usernameOk = false;
private boolean passwordOk = false;
private boolean emailOk = false;
+ private boolean confirmPasswordOk = false;
private ImageView createAccount;
private TextView errorMessage;
@@ -66,7 +67,10 @@ public class WizardFragment extends Fragment {
passwordConfirm = (EditText) view.findViewById(R.id.setup_password_confirm);
ImageView passwordOkIV = (ImageView) view.findViewById(R.id.setup_password_ok);
- addXMLRPCPasswordHandler(password, passwordConfirm, passwordOkIV);
+ addXMLRPCPasswordHandler(password, passwordOkIV);
+
+ ImageView passwordConfirmOkIV = (ImageView) view.findViewById(R.id.setup_confirm_password_ok);
+ addXMLRPCConfirmPasswordHandler(password, passwordConfirm, passwordConfirmOkIV);
email = (EditText) view.findViewById(R.id.setup_email);
ImageView emailOkIV = (ImageView) view.findViewById(R.id.setup_email_ok);
@@ -95,7 +99,7 @@ public class WizardFragment extends Fragment {
errorMessage.setText(R.string.wizard_server_unavailable);
usernameOk = false;
icon.setImageResource(R.drawable.wizard_notok);
- createAccount.setEnabled(usernameOk && passwordOk && emailOk);
+ createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
}
};
@@ -108,7 +112,7 @@ public class WizardFragment extends Fragment {
errorMessage.setText(R.string.wizard_username_unavailable);
usernameOk = false;
icon.setImageResource(R.drawable.wizard_notok);
- createAccount.setEnabled(usernameOk && passwordOk && emailOk);
+ createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
}
};
@@ -117,7 +121,7 @@ public class WizardFragment extends Fragment {
errorMessage.setText("");
icon.setImageResource(R.drawable.wizard_ok);
usernameOk = true;
- createAccount.setEnabled(usernameOk && passwordOk && emailOk);
+ createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
}
};
@@ -253,12 +257,12 @@ public class WizardFragment extends Fragment {
errorMessage.setText(R.string.wizard_email_incorrect);
icon.setImageResource(R.drawable.wizard_notok);
}
- createAccount.setEnabled(usernameOk && passwordOk && emailOk);
+ createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
}
});
}
- private void addXMLRPCPasswordHandler(final EditText field1, final EditText field2, final ImageView icon) {
+ private void addXMLRPCPasswordHandler(final EditText field1, final ImageView icon) {
TextWatcher passwordListener = new TextWatcher() {
public void afterTextChanged(Editable arg0) {
@@ -271,21 +275,51 @@ public class WizardFragment extends Fragment {
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
{
passwordOk = false;
- if (isPasswordCorrect(field1.getText().toString()) && field1.getText().toString().equals(field2.getText().toString())) {
+ if (isPasswordCorrect(field1.getText().toString())) {
passwordOk = true;
icon.setImageResource(R.drawable.wizard_ok);
errorMessage.setText("");
}
else {
- if (isPasswordCorrect(field1.getText().toString())) {
- errorMessage.setText(R.string.wizard_passwords_unmatched);
- }
- else {
- errorMessage.setText(R.string.wizard_password_incorrect);
- }
+ errorMessage.setText(R.string.wizard_password_incorrect);
icon.setImageResource(R.drawable.wizard_notok);
}
- createAccount.setEnabled(usernameOk && passwordOk && emailOk);
+ createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
+ }
+ };
+
+ field1.addTextChangedListener(passwordListener);
+ }
+
+ private void addXMLRPCConfirmPasswordHandler(final EditText field1, final EditText field2, final ImageView icon) {
+ TextWatcher passwordListener = new TextWatcher() {
+ public void afterTextChanged(Editable arg0) {
+
+ }
+
+ public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
+
+ }
+
+ public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
+ {
+ confirmPasswordOk = false;
+ if (field1.getText().toString().equals(field2.getText().toString())) {
+ confirmPasswordOk = true;
+ icon.setImageResource(R.drawable.wizard_ok);
+
+ if (!isPasswordCorrect(field1.getText().toString())) {
+ errorMessage.setText(R.string.wizard_password_incorrect);
+ }
+ else {
+ errorMessage.setText("");
+ }
+ }
+ else {
+ errorMessage.setText(R.string.wizard_passwords_unmatched);
+ icon.setImageResource(R.drawable.wizard_notok);
+ }
+ createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
}
};
diff --git a/submodules/externals/axmlrpc b/submodules/externals/axmlrpc
new file mode 160000
index 000000000..c47eaa453
--- /dev/null
+++ b/submodules/externals/axmlrpc
@@ -0,0 +1 @@
+Subproject commit c47eaa453fb75d55d32304413672c16706af85e0
diff --git a/submodules/linphone b/submodules/linphone
index ff2563b24..e1552ee1e 160000
--- a/submodules/linphone
+++ b/submodules/linphone
@@ -1 +1 @@
-Subproject commit ff2563b24413a364ee1ce57d4aff260761f19771
+Subproject commit e1552ee1eef40ca9efeb0e814223cff17e580462