diff --git a/res/drawable/stat_sys_signal_0.png b/res/drawable/stat_sys_signal_0.png index cb7b7b34b..0b7a04f44 100644 Binary files a/res/drawable/stat_sys_signal_0.png and b/res/drawable/stat_sys_signal_0.png differ 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);