diff --git a/res/drawable/stat_sys_signal_0.png b/res/drawable/stat_sys_signal_0.png
new file mode 100644
index 000000000..cb7b7b34b
Binary files /dev/null and b/res/drawable/stat_sys_signal_0.png differ
diff --git a/res/drawable/stat_sys_signal_1.png b/res/drawable/stat_sys_signal_1.png
new file mode 100644
index 000000000..5376e9258
Binary files /dev/null and b/res/drawable/stat_sys_signal_1.png differ
diff --git a/res/drawable/stat_sys_signal_2.png b/res/drawable/stat_sys_signal_2.png
new file mode 100644
index 000000000..fd543636c
Binary files /dev/null and b/res/drawable/stat_sys_signal_2.png differ
diff --git a/res/drawable/stat_sys_signal_3.png b/res/drawable/stat_sys_signal_3.png
new file mode 100644
index 000000000..6c4873af3
Binary files /dev/null and b/res/drawable/stat_sys_signal_3.png differ
diff --git a/res/drawable/stat_sys_signal_4.png b/res/drawable/stat_sys_signal_4.png
new file mode 100644
index 000000000..a3320cbb4
Binary files /dev/null and b/res/drawable/stat_sys_signal_4.png differ
diff --git a/res/layout-land/videocall.xml b/res/layout-land/videocall.xml
old mode 100644
new mode 100755
index c73a3f935..2d39b8f84
--- a/res/layout-land/videocall.xml
+++ b/res/layout-land/videocall.xml
@@ -25,5 +25,14 @@ android:layout_alignParentRight="true"
android:layout_marginTop="15dip"
android:layout_marginRight="15dip" >
+
+
+
diff --git a/res/layout/videocall.xml b/res/layout/videocall.xml
old mode 100644
new mode 100755
index c05381913..268cf08d6
--- a/res/layout/videocall.xml
+++ b/res/layout/videocall.xml
@@ -26,5 +26,13 @@ android:layout_marginBottom="15dip"
android:layout_marginRight="15dip" >
-
+
+
+
\ No newline at end of file
diff --git a/src/org/linphone/VideoCallActivity.java b/src/org/linphone/VideoCallActivity.java
old mode 100644
new mode 100755
index 34e387f78..9474ada03
--- a/src/org/linphone/VideoCallActivity.java
+++ b/src/org/linphone/VideoCallActivity.java
@@ -23,11 +23,15 @@ package org.linphone;
import org.linphone.core.LinphoneCall;
import org.linphone.core.Log;
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
+import org.linphone.mediastream.video.capture.AndroidVideoApi5JniWrapper;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
import android.content.Context;
+import android.hardware.Camera;
+import android.hardware.Camera.CameraInfo;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
+import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.view.Menu;
@@ -36,6 +40,8 @@ import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageView;
/**
* For Android SDK >= 5
@@ -47,6 +53,7 @@ public class VideoCallActivity extends SoftVolumeActivity {
private SurfaceView mVideoCaptureViewReady;
public static boolean launched = false;
private WakeLock mWakeLock;
+ private Handler refreshHandler = new Handler();
AndroidVideoWindowImpl androidVideoWindowImpl;
@@ -111,6 +118,54 @@ public class VideoCallActivity extends SoftVolumeActivity {
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE,Log.TAG);
mWakeLock.acquire();
+
+ Runnable runnable = new Runnable() {
+ public void run() {
+ while (launched && LinphoneManager.getLc().isIncall())
+ {
+ refreshHandler.post(new Runnable() {
+ public void run() {
+ int oldQuality = 0;
+ float newQuality = LinphoneManager.getLc().getCurrentCall().getCurrentQuality();
+ if ((int) newQuality != oldQuality)
+ updateQualityOfSignalIcon(newQuality);
+ }
+ });
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ };
+ new Thread(runnable).start();
+ }
+
+ void updateQualityOfSignalIcon(float quality)
+ {
+ ImageView qos = (ImageView) 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));
+ }
}
void updatePreview(boolean cameraCaptureEnabled) {