From 38a3dec60fada79cd4698569df6fb6553b400005 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 30 Dec 2011 17:00:28 +0100 Subject: [PATCH] Show who is talking in conf view --- res/drawable/conf_speaking.png | Bin 0 -> 1112 bytes res/layout/conf_callee.xml | 5 +-- src/org/linphone/AbstractCalleesActivity.java | 32 +++++++++++++++--- .../linphone/ConferenceDetailsActivity.java | 3 ++ src/org/linphone/IncallActivity.java | 2 +- src/org/linphone/core/LinphoneCallImpl.java | 5 +++ 6 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 res/drawable/conf_speaking.png diff --git a/res/drawable/conf_speaking.png b/res/drawable/conf_speaking.png new file mode 100644 index 0000000000000000000000000000000000000000..2324d81c34df87d3e64cd06db6e0972fe1e1234c GIT binary patch literal 1112 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s0wiy+h|2>hrX+877Y2q^y~;*F9%q3^WHFHT z0Ash4*>)hovI56+APv^b(7sV=3j+glf~SjPh{fsNDbXEMLq(3)XTN8WaMu$R|!V9LoC5JgS6=LJ{kYZbi>Ev`*>>&ny*Kyk-*3I{y5mfoy0WsOfWb146CY2d zE`M_AX?Mz;#jP$;8IxMhWV_6N;J#UVhgs3)%=(g7 zoZZ>e>NgoJpVpcg!Yr!3b;GWzPgnX^ip6-&icmN&@$2GgZ!V$Njsiml$O#?LV%z$2mkRQHAGOS*d(g`)|`u-ko_F4d$QJSa;qk zp6khZY0ZY6%j+Z7wuqb;TORe7;kT;(+iRx;r|9kAIHb|7X}EQd#qvrGo7mes!?QlV zJr(U!6cc>5a>JhaDJ`j&+piwq!rCqTzVzP47mjuEyp^W~SQyVwT z|1MJhO^{dj;!42?!|I*pZOk%HC1!3p87N$};~m%2I>lqLB7)1dJQ1Dke*6E6$@>{2 zb>~U0@o>8e%y_CLt`Q|Ei6yC4$wjF^iowXh&`{UVNY~gP#L&RX#L&vnQrE!L%D^CW z=cg$s8glbfGSez?YfyROr2*6+39=zLKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD PP!WTttDnm{r-UW|*0<$l literal 0 HcmV?d00001 diff --git a/res/layout/conf_callee.xml b/res/layout/conf_callee.xml index f2fa06a33..e3792b58d 100644 --- a/res/layout/conf_callee.xml +++ b/res/layout/conf_callee.xml @@ -23,8 +23,9 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_centerVertical="true"> - - + + + diff --git a/src/org/linphone/AbstractCalleesActivity.java b/src/org/linphone/AbstractCalleesActivity.java index 3b40cb296..c88db583b 100644 --- a/src/org/linphone/AbstractCalleesActivity.java +++ b/src/org/linphone/AbstractCalleesActivity.java @@ -67,6 +67,7 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li private Handler callqualityHandler; private List viewsToUpdateCallQuality; + private boolean shouldDisplayWhoIsTalking = false; @Override /** * Called by the child classes AFTER their own onCreate. @@ -215,6 +216,12 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li } protected final void initCallQualityListener() { + final int timeToRefresh; + if (shouldDisplayWhoIsTalking) + timeToRefresh = 100; + else + timeToRefresh = 1000; + callqualityHandler = new Handler(); viewsToUpdateCallQuality = new ArrayList(); callqualityHandler.postDelayed(new Runnable() { @@ -222,16 +229,24 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li if (viewsToUpdateCallQuality == null) { return; } - + for (View v : viewsToUpdateCallQuality) { LinphoneCall call = (LinphoneCall) v.getTag(); float newQuality = call.getCurrentQuality(); - updateQualityOfSignalIcon(v, newQuality); + updateQualityOfSignalIcon(v, newQuality); + + // We also use this handler to display the ones who speaks + ImageView speaking = (ImageView) v.findViewById(R.id.callee_status_speeking); + if (shouldDisplayWhoIsTalking && call.getPlayVolume() >= -20) { + speaking.setVisibility(View.VISIBLE); + } else if (speaking.getVisibility() != View.GONE) { + speaking.setVisibility(View.GONE); + } } - callqualityHandler.postDelayed(this, 1000); + callqualityHandler.postDelayed(this, timeToRefresh); } - },1000); + },timeToRefresh); } protected final void registerCallQualityListener(final View v, final LinphoneCall call) { @@ -241,6 +256,10 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li v.setTag(call); viewsToUpdateCallQuality.add(v); } + + protected final void registerCallSpeakerListener() { + shouldDisplayWhoIsTalking = true; + } } @Override @@ -282,7 +301,10 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li void updateQualityOfSignalIcon(View v, float quality) { - ImageView qos = (ImageView) v.findViewById(R.id.QoS); + ImageView qos = (ImageView) v.findViewById(R.id.callee_status_qos); + if (!(qos.getVisibility() == View.VISIBLE)) { + qos.setVisibility(View.VISIBLE); + } if (quality >= 4) // Good Quality { qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_4)); diff --git a/src/org/linphone/ConferenceDetailsActivity.java b/src/org/linphone/ConferenceDetailsActivity.java index 08bcea633..a0bb02d8b 100644 --- a/src/org/linphone/ConferenceDetailsActivity.java +++ b/src/org/linphone/ConferenceDetailsActivity.java @@ -95,6 +95,8 @@ public class ConferenceDetailsActivity extends AbstractCalleesActivity { dialog.show(); } }); + + setVisibility(v, R.id.callee_status_qos, true); // May be greatly sped up using a drawable cache ImageView pictureView = (ImageView) v.findViewById(R.id.picture); @@ -102,6 +104,7 @@ public class ConferenceDetailsActivity extends AbstractCalleesActivity { registerCallDurationTimer(v, call); registerCallQualityListener(v, call); + registerCallSpeakerListener(); return v; } diff --git a/src/org/linphone/IncallActivity.java b/src/org/linphone/IncallActivity.java index 91cda16cd..0f7738f8b 100644 --- a/src/org/linphone/IncallActivity.java +++ b/src/org/linphone/IncallActivity.java @@ -456,7 +456,7 @@ public class IncallActivity extends AbstractCalleesActivity implements boolean statusPaused = state== State.Paused || state == State.PausedByRemote; setVisibility(v, R.id.callee_status_paused, statusPaused); - setVisibility(v, R.id.QoS, !statusPaused); + setVisibility(v, R.id.callee_status_qos, !statusPaused); final OnLongClickListener showCallActionsLongListener = new OnLongClickListener() { public boolean onLongClick(View v) { diff --git a/src/org/linphone/core/LinphoneCallImpl.java b/src/org/linphone/core/LinphoneCallImpl.java index 802801155..b2b71dcb5 100644 --- a/src/org/linphone/core/LinphoneCallImpl.java +++ b/src/org/linphone/core/LinphoneCallImpl.java @@ -147,4 +147,9 @@ class LinphoneCallImpl implements LinphoneCall { public String toString() { return "Call " + nativePtr; } + + private native float getPlayVolume(long nativePtr); + public float getPlayVolume() { + return getPlayVolume(nativePtr); + } }