From 6384a8b28745fffb81636848e4063d9020bb01ce Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 30 Jul 2012 17:09:53 +0200 Subject: [PATCH] Numpad added to incall controls to be able to send dtmfs --- res/drawable/dialer_alt_back.xml | 8 ++ res/drawable/dialer_alt_back_default.png | Bin 0 -> 5674 bytes res/drawable/dialer_alt_back_over.png | Bin 0 -> 4158 bytes res/drawable/dialer_alt_background.png | Bin 0 -> 4450 bytes res/layout/incall.xml | 14 ++- res/layout/numpad.xml | 2 +- src/org/linphone/InCallActivity.java | 78 ++++++++++++- src/org/linphone/LinphoneManager.java | 140 ++++++++--------------- 8 files changed, 139 insertions(+), 103 deletions(-) create mode 100644 res/drawable/dialer_alt_back.xml create mode 100644 res/drawable/dialer_alt_back_default.png create mode 100644 res/drawable/dialer_alt_back_over.png create mode 100644 res/drawable/dialer_alt_background.png 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 0000000000000000000000000000000000000000..bacd50f442c1ed8e86d481b894ff581afeb2a734 GIT binary patch literal 5674 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 literal 0 HcmV?d00001 diff --git a/res/drawable/dialer_alt_background.png b/res/drawable/dialer_alt_background.png new file mode 100644 index 0000000000000000000000000000000000000000..86b6c3f02312fa0738ffcd7ee6b9b0b16e3798f2 GIT binary patch literal 4450 zcmeI0c~BF17RNgQSx}LP41>sO6H$>P2S);dU@$>IiK~EuBN>QEL$Z*B96%5cE;+;z zR6s{S5d}v@1rI=ifP&+yI|N6(07pR`k01yrQ5o3nAOz!ryS0B=wVSF`zxVrn-uJ!t z>(^DCq_0}(sXx_pDgXfb-d;3c06-eT-x<0(0D#z!X}Jb(%$9frO8f+&k{G540^Hex z4G`$fV}?P#5R)A%yau@ffEJqTA1Dc=`;b@y9)_u6Fj8J591Q@jOQexZRyZU9H$Y)r zJ{jF3t3!iaHW?k@NXOA5sSt#EWm>#Oi;>;;EPF8 zGI~Up1ly`*EE*g^B;jQA$D#u1t3awi1c8nioGlASz<~rj25;{`Bob{vI~*Q|#o1x; zcD8sT$=;5H!-1n8G@MPu4kh{0mW}3uJu;djkwlWP*qE3YOpHB7APU3cot>Rk8g_QJ zFkvf>3`FAzkG zo#HBvKq3%x1d$-s&k>|ESzNx#AK~eAk~d#0Ve(m!H;s&j6);>b8$L~UXM&@LBh}g2 z36J-{yAvE~RA;AUI3kWfSVq8&#nJ?$_o+{tUPpHy!&mOXhb4wJ@W;bO3=8~e$P9$SK^M`fzV7IxHw5Aoq?7r|p~o?j9N zKWcZpY3}~g)~@!OdPz7V%FRZyStEZz_aSkWmn=QJ(eiy3SUkjWcm8(nwJ?#66klvK z+L^Wb3J7PjjpPQOp8LHl_(c@WFSJx(8Kf(xmSM`-Cx|J+EKWF00GKj(vr z-d(ZVb?EQ6TXVB^bRIZ4@3HV_*) zte~7-o<6(HKYIU~+74gOO0+`J!@q7%<@on<69EKLTNedV;=gPpe`()qU!8|(%t2yP z#4-F02gJP#NwahkEVmbxAgs$1%I9TF8^AB74Vu)k+ta3*>n>|bNOg}9Es$OKK-=~9 zN^v#j&R=^LDG;Dv1iyCC$tNdjXQXa_RHwBXoJvcuL`^B87^NZA4xqL)mMKOP(kf;G zk&)1NSbI^;^2MIYwtJ`*<-dh*JYqJ7)pK@r`!!>zm65kZmvC2Ml&9#Cci(?ygDeY9 zU8IX-0x8_g{6am6f$-`=PNFy=ALPUvm$_8U^VD9;;kp`Z3LIYC9fxmSYSfdw$EulPs$PF3lCos*Xm&x&K`Tqy{~K1E?DanJE*R9eg0@JSQZ1 zzS)Zr?i7A->c|1zcA<~=J2d@a{i|K-hVshd1E}!T-<*{zU!vj@!)M+sThmK!Ve@975Yo1XOiVN*gz=L)dtnb*T%N{!!e z{F?dC>RyAQU}nap4X?~P&$n`mE)V1g2!A=d-0$aD2yr=wgnoOIarI=Te2dGoHbhC? zVUm9BdMsKf$&AMj-vww$lpe(b*fnl^?yHDT_tga6f|ZFHq1K$b!Bh2S(|v} z;sD;G!YLynfgs%M+k`9&Pp#BbJxDK*)fATm1~6b?Q#gx5il25*_QVGhz~S7MKI*sl z_8qI}$U{W}BhDh%xg3`>in9Jdag$1GiIM@J2SLnebr0! zO=!KOVMbKr0=FB^#r5rPBEqZ;8K&zS!z&iFC%S`Mpm~5q^KHCxC|W zUH}@ArmZ$U_eVB9+5b90%^pT;RG0dR@s)uch7%O@)t@#zBR+AmAPmE)g1h<1l$r{+ zQflB)lk^MN?fCo2=VuuOc0HQ+_))53@_7S=YuKXRpNK8Rth_5v?F+Oj4L0pb8OpDH zJLvg<-!jlaT;~&gA8%k#%4_at1>edm#TzOO8_xU^ZBL(RCNmv&X?agM_^WYkb%${} zDcdD4+QJ`7YkX1L@ZAiayp52BT7*JlFT*P9jxrm+H6?%1N`3!0C;<>q@7wClK4+ZvlbNq literal 0 HcmV?d00001 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);