From 7ce7895e9fe418dd3f7bec63400ead7eff2da799 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 26 Dec 2011 12:01:12 +0100 Subject: [PATCH] CallQuality indicator in audio and conference views --- res/drawable/stat_sys_signal_0.png | Bin 587 -> 905 bytes res/layout/conf_callee.xml | 1 + src/org/linphone/AbstractCalleesActivity.java | 47 ++++++++++++++++++ .../linphone/ConferenceDetailsActivity.java | 2 + src/org/linphone/IncallActivity.java | 2 + 5 files changed, 52 insertions(+) diff --git a/res/drawable/stat_sys_signal_0.png b/res/drawable/stat_sys_signal_0.png index cb7b7b34bf087a626d8b46c388b69f05816f64f4..0b7a04f44c498a89af7c15399c363fdfec2eb839 100644 GIT binary patch delta 882 zcmV-&1C9L41c?WbB!2;OQb$4nuFf3k00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru+YA~C10Ish_rL%E0|`k)K~zY`y;e<2R8bgy&Y+Vn z92I6j#}Jee9BmfULJY$K4MG!5a0C_99L*0Bk_6r4XBgPZFn{oK(p18U9H9)$l>|!Q zW?ZEkg&h0=x$xe5?%V2~?ld!gpmyL{+~>UaJn!?q=Wq@qfI!4>Rf91yfQW%Hx+(z> zu_yqzotJm_J7bh#vt7#C27}?p&z+qdtwK=%kdTn@{$W`ec6~lPZfd%afGo?H_IPq0 z6c-ZPR$7WhuYWh}oQ6fO7iFcTqHLUVNRo6m zCmM>2ir`yb4&pL0GEh=d0^jm7ii?UM%Q93|6*!j@4fhHQ@p)xMe5a?UqrvUQ^wgB# zPIYpUfQCEy`S`ZB21%08(%OnQqoat8jTQ6y?W}Ryh|-+sw_K!gD>oM#>+5(uG6HZ8 zA`**n&VK;_s;UZSK~9d3k0Zivx5MRf!EU!>V{;QXolZPyZx`j!;`C=mfBuT=n;bA=O=nz@!%cXG#KpxymSybi z@1wu3Pn1E6)0Za2YQ^6Eeh?S-oai$oA`lS{0s&aeX2JdIM9*2wW<2ld35g35Q4~d# z%wn;iwXF>a@$o^N(P$JIhU2=sy3o_xE4Yv?EXy(&WAOX^Xl-jlOLMdM+3)wmX0u^y zYisLN?(6C*+>MQ3j0Kg85fQ9b>o2p}oZ{c!#x4A`-8Pt9q@l|MBkn0|@BIu6W0{u>b%707*qo IM6N<$f*_8d9RL6T delta 562 zcmV-20?qx22g?MIB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0005) zNklsj1L0kyAjAzIpa*1rcM!=OI_(Q~nt3(0{ zZvC5i4b^nU8O-=AXq$dLU9aj@f7Fi0Bi-Ayhmq9l_1F1){(pWr9ICf)s_S|?7K^>L zTCGov4g7>cp{5DO!{IP_z22(`w%aW&m&>ZzH_hRbBnbwCalhY>2x!0GU*tTUPE#tC zqUm%>lgWfut5uxm1PLTFr4sE@OD2RARYiF@oe9vaH7g>{9 zt=7or^D7^QVZ?9o#+y?842Q$U@~07*qoM6N<$f>+1{ A@Bjb+ diff --git a/res/layout/conf_callee.xml b/res/layout/conf_callee.xml index e46979919..f2fa06a33 100644 --- a/res/layout/conf_callee.xml +++ b/res/layout/conf_callee.xml @@ -23,6 +23,7 @@ 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 0147ba002..48d5e0b65 100644 --- a/src/org/linphone/AbstractCalleesActivity.java +++ b/src/org/linphone/AbstractCalleesActivity.java @@ -64,6 +64,8 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li private Set mChronometers = new HashSet(); + private float oldQuality = 0; + private Runnable mCallQualityUpdater; @Override /** * Called by the child classes AFTER their own onCreate. @@ -210,6 +212,26 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li timer.setBase(SystemClock.elapsedRealtime() - 1000 * callDuration); timer.start(); } + + protected final void registerCallQualityListener(final View v, final LinphoneCall call) { + final Handler callqualityHandler = new Handler(); + callqualityHandler.postDelayed(mCallQualityUpdater = new Runnable(){ + public void run() { + if (call==null){ + mCallQualityUpdater=null; + return; + } + + float newQuality = call.getCurrentQuality(); + if ((int) newQuality != oldQuality){ + updateQualityOfSignalIcon(v, newQuality); + oldQuality = newQuality; + } + + callqualityHandler.postDelayed(this, 1000); + } + },1000); + } } @Override @@ -248,4 +270,29 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li } }); } + + void updateQualityOfSignalIcon(View v, float quality) + { + ImageView qos = (ImageView) v.findViewById(R.id.QoS); + if (quality >= 4) // Good Quality + { + qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_4)); + } + else if (quality >= 3) // Average quality + { + qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_3)); + } + else if (quality >= 2) // Low quality + { + qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_2)); + } + else if (quality >= 1) // Very low quality + { + qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_1)); + } + else // Worst quality + { + qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_0)); + } + } } \ No newline at end of file diff --git a/src/org/linphone/ConferenceDetailsActivity.java b/src/org/linphone/ConferenceDetailsActivity.java index 07c2fd64f..08bcea633 100644 --- a/src/org/linphone/ConferenceDetailsActivity.java +++ b/src/org/linphone/ConferenceDetailsActivity.java @@ -101,6 +101,8 @@ public class ConferenceDetailsActivity extends AbstractCalleesActivity { setCalleePicture(pictureView, address); registerCallDurationTimer(v, call); + registerCallQualityListener(v, call); + return v; } diff --git a/src/org/linphone/IncallActivity.java b/src/org/linphone/IncallActivity.java index 6711cd0a3..91cda16cd 100644 --- a/src/org/linphone/IncallActivity.java +++ b/src/org/linphone/IncallActivity.java @@ -456,6 +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); final OnLongClickListener showCallActionsLongListener = new OnLongClickListener() { public boolean onLongClick(View v) { @@ -538,6 +539,7 @@ public class IncallActivity extends AbstractCalleesActivity implements } registerCallDurationTimer(v, call); + registerCallQualityListener(v, call); enableView(v, R.id.callee_status_details, showCallActionsSimpleListener, true);