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"); + } + } + } }