diff --git a/src/video_engine/test/android/AndroidManifest.xml b/src/video_engine/test/android/AndroidManifest.xml
index d660310bb3..8b4447789b 100644
--- a/src/video_engine/test/android/AndroidManifest.xml
+++ b/src/video_engine/test/android/AndroidManifest.xml
@@ -13,16 +13,11 @@
+
-
-
-
-
-
-
diff --git a/src/video_engine/test/android/jni/vie_android_java_api.cc b/src/video_engine/test/android/jni/vie_android_java_api.cc
index 6d6f55a39b..3443a3e87c 100644
--- a/src/video_engine/test/android/jni/vie_android_java_api.cc
+++ b/src/video_engine/test/android/jni/vie_android_java_api.cc
@@ -447,7 +447,6 @@ JNIEXPORT jint JNICALL Java_org_webrtc_videoengineapp_ViEAndroidJavaAPI_Terminat
return -1;
}
memset(&vieData, 0, sizeof(vieData));
- VideoEngine::SetAndroidObjects(NULL, NULL);
return 0;
}
else {
diff --git a/src/video_engine/test/android/res/layout/main.xml b/src/video_engine/test/android/res/layout/main.xml
index aa6bb88eec..a816800824 100644
--- a/src/video_engine/test/android/res/layout/main.xml
+++ b/src/video_engine/test/android/res/layout/main.xml
@@ -61,6 +61,12 @@
android:id="@+id/LinearLayout03"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
+
+
+
Remote IP address
Loopback
Stats
+CPULoad
Start Listen
Start Send
Start Both
diff --git a/src/video_engine/test/android/src/org/webrtc/videoengineapp/WebRTCDemo.java b/src/video_engine/test/android/src/org/webrtc/videoengineapp/WebRTCDemo.java
index 680dcd853a..9d94726a70 100644
--- a/src/video_engine/test/android/src/org/webrtc/videoengineapp/WebRTCDemo.java
+++ b/src/video_engine/test/android/src/org/webrtc/videoengineapp/WebRTCDemo.java
@@ -11,6 +11,7 @@
package org.webrtc.videoengineapp;
import java.io.File;
+import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
@@ -37,11 +38,12 @@ import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.hardware.SensorManager;
import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
-
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
@@ -51,15 +53,14 @@ import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Display;
+import android.view.OrientationEventListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
-
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
-
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
@@ -68,7 +69,6 @@ import android.widget.TabHost;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.TabHost.TabSpec;
-import android.view.OrientationEventListener;
public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
View.OnClickListener,
@@ -99,6 +99,7 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
private static final int SEND_CODEC_FRAMERATE = 15;
private static final int INIT_BITRATE = 500;
private static final String LOOPBACK_IP = "127.0.0.1";
+ private static final String RINGTONE_URL = "content://settings/system/ringtone";
private int volumeLevel = 204;
@@ -127,6 +128,8 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
private boolean loopbackMode = true;
private CheckBox cbStats;
private boolean isStatsOn = true;
+ private CheckBox cbCPULoad;
+ private boolean isCPULoadOn = true;
private boolean useOpenGLRender = true;
// Video settings
@@ -181,6 +184,9 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
"352x288", "640x480" };
private String[] mVoiceCodecsStrings = null;
+ private Thread mBackgroundLoad = null;
+ private boolean mIsBackgroudLoadRunning = false;
+
private OrientationEventListener orientationListener;
int currentOrientation = OrientationEventListener.ORIENTATION_UNKNOWN;
int currentCameraOrientation = 0;
@@ -241,14 +247,21 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
- if (am.isWiredHeadsetOn()) {
- enableSpeaker = false;
+ if (intent.getAction().compareTo(Intent.ACTION_HEADSET_PLUG)
+ == 0) {
+ int state = intent.getIntExtra("state", 0);
+ Log.v(TAG, "Intent.ACTION_HEADSET_PLUG state: " + state +
+ " microphone: " + intent.getIntExtra("microphone", 0));
+ if (voERunning) {
+ if (state == 1) {
+ enableSpeaker = true;
+ }
+ else {
+ enableSpeaker = false;
+ }
+ RouteAudio(enableSpeaker);
+ }
}
- else {
- enableSpeaker = true;
- }
- RouteAudio(enableSpeaker);
}
};
registerReceiver(receiver, receiverFilter );
@@ -309,6 +322,14 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
return;
}
+ // Called before the activity is destroyed.
+ @Override
+ public void onDestroy() {
+ Log.d(TAG, "onDestroy");
+ super.onDestroy();
+ unregisterReceiver(receiver);
+ }
+
private class StatsView extends View{
public StatsView(Context context){
super(context);
@@ -378,6 +399,9 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
Log.d(TAG, "StopAll");
if (ViEAndroidAPI != null) {
+
+ StopCPULoad();
+
if (voERunning) {
voERunning = false;
StopVoiceEngine();
@@ -506,6 +530,9 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
cbStats = (CheckBox) findViewById(R.id.cbStats);
cbStats.setChecked(isStatsOn);
+ cbCPULoad = (CheckBox) findViewById(R.id.cbCPULoad);
+ cbCPULoad.setChecked(isCPULoadOn);
+
cbVoice = (CheckBox) findViewById(R.id.cbVoice);
cbVoice.setChecked(enableVoice);
@@ -550,6 +577,7 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
etRemoteIp.setOnClickListener(this);
cbLoopback.setOnClickListener(this);
cbStats.setOnClickListener(this);
+ cbCPULoad.setOnClickListener(this);
cbEnableNack.setOnClickListener(this);
cbEnableSpeaker.setOnClickListener(this);
cbEnableAECM.setOnClickListener(this);
@@ -576,9 +604,23 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
return etRemoteIp.getText().toString();
}
+ private void StartPlayingRingtone() {
+ MediaPlayer mMediaPlayer = new MediaPlayer();
+ try {
+ mMediaPlayer.setDataSource(this, Uri.parse(RINGTONE_URL));
+ mMediaPlayer.prepare();
+ mMediaPlayer.seekTo(0);
+ mMediaPlayer.start();
+ } catch (IOException e) {
+ Log.v(TAG, "MediaPlayer Failed: " + e);
+ }
+ }
+
private void StartCall() {
int ret = 0;
+ StartPlayingRingtone();
+
if (enableVoice) {
StartVoiceEngine();
}
@@ -660,6 +702,14 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
RemoveSatsView();
}
+ isCPULoadOn = cbCPULoad.isChecked();
+ if (isCPULoadOn) {
+ StartCPULoad();
+ }
+ else {
+ StopCPULoad();
+ }
+
viERunning = true;
}
}
@@ -837,6 +887,15 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
RemoveSatsView();
}
break;
+ case R.id.cbCPULoad:
+ isCPULoadOn = cbCPULoad.isChecked();
+ if (isCPULoadOn) {
+ StartCPULoad();
+ }
+ else {
+ StopCPULoad();
+ }
+ break;
case R.id.radio_surface:
useOpenGLRender = false;
break;
@@ -1008,4 +1067,42 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
mTabHost.removeView(statsView);
statsView = null;
}
+
+ private void StartCPULoad() {
+ if (null == mBackgroundLoad) {
+ mBackgroundLoad = new Thread(new Runnable() {
+ public void run() {
+ Log.v(TAG, "Background load started");
+ mIsBackgroudLoadRunning = true;
+ try{
+ while (mIsBackgroudLoadRunning) {
+ // This while simulates cpu load.
+ // Log.v(TAG, "Runnable!!!");
+ }
+ }
+ catch(Throwable t) {
+ Log.v(TAG, "StartCPULoad failed");
+ }
+ }
+ });
+ mBackgroundLoad.start();
+ }
+ else {
+ if (mBackgroundLoad.getState() == Thread.State.TERMINATED) {
+ mBackgroundLoad.start();
+ }
+ }
+ }
+
+ private void StopCPULoad() {
+ if (null != mBackgroundLoad) {
+ mIsBackgroudLoadRunning = false;
+ try{
+ mBackgroundLoad.join();
+ }
+ catch(Throwable t) {
+ Log.v(TAG, "StopCPULoad failed");
+ }
+ }
+ }
}