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);