diff --git a/res/drawable/dialer_alt_back.xml b/res/drawable/dialer_alt_back.xml
new file mode 100644
index 000000000..cfdb1f87a
--- /dev/null
+++ b/res/drawable/dialer_alt_back.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/res/drawable/dialer_alt_back_default.png b/res/drawable/dialer_alt_back_default.png
new file mode 100644
index 000000000..bacd50f44
Binary files /dev/null and b/res/drawable/dialer_alt_back_default.png differ
diff --git a/res/drawable/dialer_alt_back_over.png b/res/drawable/dialer_alt_back_over.png
new file mode 100644
index 000000000..3e3a6dfd2
Binary files /dev/null and b/res/drawable/dialer_alt_back_over.png differ
diff --git a/res/drawable/dialer_alt_background.png b/res/drawable/dialer_alt_background.png
new file mode 100644
index 000000000..86b6c3f02
Binary files /dev/null and b/res/drawable/dialer_alt_background.png differ
diff --git a/res/layout/incall.xml b/res/layout/incall.xml
index 33237cd42..b01398f27 100644
--- a/res/layout/incall.xml
+++ b/res/layout/incall.xml
@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/topLayout"
android:layout_width="match_parent"
- android:layout_height="match_parent" >
+ android:layout_height="match_parent">
+ android:visibility="invisible" />
+
+
+
\ No newline at end of file
diff --git a/res/layout/numpad.xml b/res/layout/numpad.xml
index 0ee879559..5ac76226f 100644
--- a/res/layout/numpad.xml
+++ b/res/layout/numpad.xml
@@ -1,7 +1,7 @@
+ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1">
diff --git a/src/org/linphone/InCallActivity.java b/src/org/linphone/InCallActivity.java
index d233acb6a..eeba4f602 100644
--- a/src/org/linphone/InCallActivity.java
+++ b/src/org/linphone/InCallActivity.java
@@ -27,6 +27,7 @@ import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCallParams;
import org.linphone.core.LinphoneCore;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
+import org.linphone.ui.Numpad;
import android.app.Activity;
import android.content.SharedPreferences;
@@ -48,6 +49,7 @@ import android.widget.LinearLayout;
/**
* @author Sylvain Berfini
*/
+//TODO Prevent controls from being hidden while user is using numpad
public class InCallActivity extends FragmentActivity implements
LinphoneOnCallStateChangedListener,
LinphoneOnCallEncryptionChangedListener,
@@ -63,6 +65,7 @@ public class InCallActivity extends FragmentActivity implements
private VideoCallFragment videoCallFragment;
private boolean isSpeakerEnabled = false, isMicMuted = false, isVideoEnabled, isTransferAllowed;
private LinearLayout mControlsLayout;
+ private Numpad numpad;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -95,7 +98,7 @@ public class InCallActivity extends FragmentActivity implements
} else {
callFragment = new AudioCallFragment();
audioCallFragment = (AudioCallFragment) callFragment;
- switchCamera.setVisibility(View.GONE);
+ switchCamera.setVisibility(View.INVISIBLE);
}
callFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, callFragment).commitAllowingStateLoss();
@@ -131,6 +134,7 @@ public class InCallActivity extends FragmentActivity implements
dialer = (ImageView) findViewById(R.id.dialer);
dialer.setOnClickListener(this);
dialer.setEnabled(false);
+ numpad = (Numpad) findViewById(R.id.numpad);
switchCamera = (ImageView) findViewById(R.id.switchCamera);
switchCamera.setOnClickListener(this);
@@ -218,7 +222,7 @@ public class InCallActivity extends FragmentActivity implements
hangUp();
}
else if (id == R.id.dialer) {
-
+ hideOrDisplayNumpad();
}
else if (id == R.id.switchCamera) {
if (videoCallFragment != null) {
@@ -226,7 +230,7 @@ public class InCallActivity extends FragmentActivity implements
}
}
else if (id == R.id.transfer) {
-
+ //TODO Call Transfer
}
else if (id == R.id.options) {
hideOrDisplayCallOptions();
@@ -381,11 +385,13 @@ public class InCallActivity extends FragmentActivity implements
controlsHandler.postDelayed(mControls = new Runnable() {
public void run() {
+ hideNumpad();
+
if (InCallActivity.this.getResources().getBoolean(R.bool.disable_animations)) {
transfer.setVisibility(View.GONE);
addCall.setVisibility(View.GONE);
mControlsLayout.setVisibility(View.GONE);
- switchCamera.setVisibility(View.GONE);
+ switchCamera.setVisibility(View.INVISIBLE);
options.setImageResource(R.drawable.options);
} else {
Animation animation = AnimationUtils.loadAnimation(InCallActivity.this, R.anim.slide_out_top_to_bottom);
@@ -405,7 +411,7 @@ public class InCallActivity extends FragmentActivity implements
transfer.setVisibility(View.GONE);
addCall.setVisibility(View.GONE);
mControlsLayout.setVisibility(View.GONE);
- switchCamera.setVisibility(View.GONE);
+ switchCamera.setVisibility(View.INVISIBLE);
options.setImageResource(R.drawable.options);
}
});
@@ -424,7 +430,67 @@ public class InCallActivity extends FragmentActivity implements
}
mControlsLayout.setVisibility(View.VISIBLE);
- switchCamera.setVisibility(View.GONE);
+ switchCamera.setVisibility(View.INVISIBLE);
+ }
+
+ private void hideNumpad() {
+ if (numpad.getVisibility() != View.VISIBLE) {
+ return;
+ }
+
+ dialer.setImageResource(R.drawable.dialer_alt);
+ if (getResources().getBoolean(R.bool.disable_animations)) {
+ numpad.setVisibility(View.GONE);
+ } else {
+ Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide_out_top_to_bottom);
+ anim.setAnimationListener(new AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ numpad.setVisibility(View.GONE);
+ }
+ });
+ numpad.startAnimation(anim);
+ }
+ }
+
+ private void hideOrDisplayNumpad() {
+ if (numpad.getVisibility() == View.VISIBLE) {
+ hideNumpad();
+ } else {
+ dialer.setImageResource(R.drawable.dialer_alt_back);
+ if (getResources().getBoolean(R.bool.disable_animations)) {
+ numpad.setVisibility(View.VISIBLE);
+ } else {
+ Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide_in_bottom_to_top);
+ anim.setAnimationListener(new AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ numpad.setVisibility(View.VISIBLE);
+ }
+ });
+ numpad.startAnimation(anim);
+ }
+ }
}
private void hideOrDisplayCallOptions() {
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index bee76211a..59cc0983c 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -564,6 +564,46 @@ public final class LinphoneManager implements LinphoneCoreListener {
manageTunnelServer(info);
}
+ public void initAccount(String key, boolean cleanBefore, boolean defaultAccount) throws LinphoneCoreException {
+ if (cleanBefore) {
+ mLc.clearAuthInfos();
+ mLc.clearProxyConfigs();
+ }
+
+ String username = getPrefString(getString(R.string.pref_username_key) + key, null);
+ String password = getPrefString(getString(R.string.pref_passwd_key) + key, null);
+ if (username != null && username.length() > 0) {
+ LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(username, password, null);
+ mLc.addAuthInfo(lAuthInfo);
+
+ String domain = getPrefString(getString(R.string.pref_domain_key) + key, null);
+ if (domain != null && domain.length() > 0) {
+ String identity = "sip:" + username +"@" + domain;
+ String proxy = getPrefString(getString(R.string.pref_proxy_key) + key, null);
+ if (proxy == null || proxy.length() == 0) {
+ proxy = "sip:" + domain;
+ }
+ if (!proxy.startsWith("sip:")) {
+ proxy = "sip:" + proxy;
+ }
+ LinphoneProxyConfig defaultProxyConfig = LinphoneCoreFactory.instance().createProxyConfig(identity, proxy, null, true);
+ mLc.addProxyConfig(defaultProxyConfig);
+
+ //outbound proxy
+ if (getPrefBoolean(getString(R.string.pref_enable_outbound_proxy_key) + key, false)) {
+ defaultProxyConfig.setRoute(proxy);
+ } else {
+ defaultProxyConfig.setRoute(null);
+ }
+ defaultProxyConfig.done();
+
+ if (defaultAccount) {
+ mLc.setDefaultProxyConfig(defaultProxyConfig);
+ }
+ }
+ }
+ }
+
public void initFromConf() throws LinphoneConfigException {
@@ -609,110 +649,22 @@ public final class LinphoneManager implements LinphoneCoreListener {
}
boolean isVideoEnabled = isVideoEnabled();
mLc.enableVideo(isVideoEnabled, isVideoEnabled);
- //1 read proxy config from preferences
- String lUserName = getPrefString(R.string.pref_username_key, null);
- if (lUserName == null || lUserName.length()==0) {
- throw new LinphoneConfigException(getString(R.string.wrong_username));
- }
-
- String lPasswd = getPrefString(R.string.pref_passwd_key, null);
- // we have the right of having no password
- //if (lPasswd == null || lPasswd.length()==0) {
- // throw new LinphoneConfigException(getString(R.string.wrong_passwd));
- //}
-
- String lDomain = getPrefString(R.string.pref_domain_key, null);
- if (lDomain == null || lDomain.length()==0) {
- throw new LinphoneConfigException(getString(R.string.wrong_domain));
- }
-
- String lStun = getPrefString(R.string.pref_stun_server_key, null);
-
+
//stun server
+ String lStun = getPrefString(R.string.pref_stun_server_key, null);
mLc.setStunServer(lStun);
mLc.setFirewallPolicy((lStun!=null && lStun.length()>0) ? FirewallPolicy.UseStun : FirewallPolicy.NoFirewall);
- //auth
- mLc.clearAuthInfos();
- if (lPasswd!=null && lPasswd.length()>0){
- LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(lUserName, lPasswd,null);
- mLc.addAuthInfo(lAuthInfo);
- }
-
- //proxy
- mLc.clearProxyConfigs();
- String lProxy = getPrefString(R.string.pref_proxy_key,null);
- if (lProxy == null || lProxy.length() == 0) {
- lProxy = "sip:"+lDomain;
- }
- if (!lProxy.startsWith("sip:")) {
- lProxy = "sip:"+lProxy;
- }
- //get Default proxy if any
- LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig();
- String lIdentity = "sip:"+lUserName+"@"+lDomain;
+ //accounts
try {
- if (lDefaultProxyConfig == null) {
- lDefaultProxyConfig = LinphoneCoreFactory.instance().createProxyConfig(lIdentity, lProxy, null,true);
- mLc.addProxyConfig(lDefaultProxyConfig);
- int defaultAccount = getPrefInt(R.string.pref_default_account, 0);
- if (defaultAccount == 0 || defaultAccount >= getPrefInt(R.string.pref_extra_accounts, 0)) {
- //outbound proxy
- if (getPrefBoolean(R.string.pref_enable_outbound_proxy_key, false)) {
- lDefaultProxyConfig.setRoute(lProxy);
- } else {
- lDefaultProxyConfig.setRoute(null);
- }
- mLc.setDefaultProxyConfig(lDefaultProxyConfig);
- }
-
- } else {
- lDefaultProxyConfig.edit();
- lDefaultProxyConfig.setIdentity(lIdentity);
- lDefaultProxyConfig.setProxy(lProxy);
- lDefaultProxyConfig.enableRegister(true);
- lDefaultProxyConfig.done();
- }
-
- // Extra accounts
- for (int i = 1; i < getPrefExtraAccountsNumber(); i++) {
+ for (int i = 0; i < getPrefExtraAccountsNumber(); i++) {
if (getPrefBoolean(getString(R.string.pref_disable_account_key) + i, false)) {
continue;
}
- lUserName = getPrefString(getString(R.string.pref_username_key) + i, null);
- lPasswd = getPrefString(getString(R.string.pref_passwd_key) + i, null);
- if (lUserName != null && lUserName.length() > 0) {
- LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(lUserName, lPasswd, null);
- mLc.addAuthInfo(lAuthInfo);
-
- lDomain = getPrefString(getString(R.string.pref_domain_key) + i, null);
- if (lDomain != null && lDomain.length() > 0) {
- lIdentity = "sip:"+lUserName+"@"+lDomain;
- lProxy = getPrefString(getString(R.string.pref_proxy_key) + i, null);
- if (lProxy == null || lProxy.length() == 0) {
- lProxy = "sip:" + lDomain;
- }
- if (!lProxy.startsWith("sip:")) {
- lProxy = "sip:" + lProxy;
- }
- lDefaultProxyConfig = LinphoneCoreFactory.instance().createProxyConfig(lIdentity, lProxy, null, true);
- mLc.addProxyConfig(lDefaultProxyConfig);
-
- //outbound proxy
- if (getPrefBoolean(getString(R.string.pref_enable_outbound_proxy_key) + i, false)) {
- lDefaultProxyConfig.setRoute(lProxy);
- } else {
- lDefaultProxyConfig.setRoute(null);
- }
-
- if (i == getPrefInt(R.string.pref_default_account, 0)) {
- mLc.setDefaultProxyConfig(lDefaultProxyConfig);
- }
- }
- }
+ initAccount(i == 0 ? "" : String.valueOf(i), i == 0, i == getPrefInt(R.string.pref_default_account, 0));
}
- lDefaultProxyConfig = mLc.getDefaultProxyConfig();
+ LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig();
if (lDefaultProxyConfig !=null) {
//prefix
String lPrefix = getPrefString(R.string.pref_prefix_key, null);