diff --git a/app/build.gradle b/app/build.gradle index 5c1f95c..9cea702 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,7 +25,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation project(':webrtc') - implementation 'org.webrtc:google-webrtc:1.0.24277' + implementation 'org.webrtc:google-webrtc:1.0.27485' implementation 'com.android.support:appcompat-v7:27.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' diff --git a/app/src/main/java/com/example/webrtc/android/CallActivity.java b/app/src/main/java/com/example/webrtc/android/CallActivity.java index 673d9e5..b0a8f7c 100644 --- a/app/src/main/java/com/example/webrtc/android/CallActivity.java +++ b/app/src/main/java/com/example/webrtc/android/CallActivity.java @@ -24,6 +24,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.support.annotation.Nullable; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; @@ -36,7 +37,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import javax.annotation.Nullable; import org.appspot.apprtc.AppRTCAudioManager; import org.appspot.apprtc.AppRTCAudioManager.AudioDevice; @@ -128,8 +128,6 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven public static final String EXTRA_NEGOTIATED = "org.appspot.apprtc.NEGOTIATED"; public static final String EXTRA_ID = "org.appspot.apprtc.ID"; public static final String EXTRA_ENABLE_RTCEVENTLOG = "org.appspot.apprtc.ENABLE_RTCEVENTLOG"; - public static final String EXTRA_USE_LEGACY_AUDIO_DEVICE = - "org.appspot.apprtc.USE_LEGACY_AUDIO_DEVICE"; private static final int CAPTURE_PERMISSION_REQUEST_CODE = 1; @@ -160,14 +158,12 @@ synchronized public void setTarget(VideoSink target) { private final ProxyVideoSink remoteProxyRenderer = new ProxyVideoSink(); private final ProxyVideoSink localProxyVideoSink = new ProxyVideoSink(); - @Nullable - private PeerConnectionClient peerConnectionClient = null; + @Nullable private PeerConnectionClient peerConnectionClient; @Nullable private AppRTCClient appRtcClient; @Nullable private SignalingParameters signalingParameters; - @Nullable - private AppRTCAudioManager audioManager = null; + @Nullable private AppRTCAudioManager audioManager; @Nullable private SurfaceViewRenderer pipRenderer; @Nullable @@ -181,12 +177,12 @@ synchronized public void setTarget(VideoSink target) { private RoomConnectionParameters roomConnectionParameters; @Nullable private PeerConnectionParameters peerConnectionParameters; - private boolean iceConnected; + private boolean connected; private boolean isError; private boolean callControlFragmentVisible = true; - private long callStartedTimeMs = 0; + private long callStartedTimeMs; private boolean micEnabled = true; - private boolean screencaptureEnabled = false; + private boolean screencaptureEnabled; private static Intent mediaProjectionPermissionResultData; private static int mediaProjectionPermissionResultCode; // True if local view is in the fullscreen renderer. @@ -213,7 +209,7 @@ public void onCreate(Bundle savedInstanceState) { getWindow().getDecorView().setSystemUiVisibility(getSystemUiVisibility()); setContentView(R.layout.activity_call); - iceConnected = false; + connected = false; signalingParameters = null; // Create UI controls. @@ -283,7 +279,7 @@ public void onClick(View view) { Uri roomUri = intent.getData(); if (roomUri == null) { - logAndToast(getString(org.appspot.apprtc.R.string.missing_url)); + logAndToast(getString(R.string.missing_url)); Log.e(TAG, "Didn't get any URL in intent!"); setResult(RESULT_CANCELED); finish(); @@ -294,7 +290,7 @@ public void onClick(View view) { String roomId = intent.getStringExtra(EXTRA_ROOMID); Log.d(TAG, "Room ID: " + roomId); if (roomId == null || roomId.length() == 0) { - logAndToast(getString(org.appspot.apprtc.R.string.missing_url)); + logAndToast(getString(R.string.missing_url)); Log.e(TAG, "Incorrect room ID in intent!"); setResult(RESULT_CANCELED); finish(); @@ -336,8 +332,7 @@ public void onClick(View view) { intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false), intent.getBooleanExtra(EXTRA_DISABLE_WEBRTC_AGC_AND_HPF, false), - intent.getBooleanExtra(EXTRA_ENABLE_RTCEVENTLOG, false), - intent.getBooleanExtra(EXTRA_USE_LEGACY_AUDIO_DEVICE, false), dataChannelParameters); + intent.getBooleanExtra(EXTRA_ENABLE_RTCEVENTLOG, false), dataChannelParameters); commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false); int runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0); @@ -563,7 +558,7 @@ public boolean onToggleMic() { // Helper functions. private void toggleCallControlFragmentVisibility() { - if (!iceConnected || !callFragment.isAdded()) { + if (!connected || !callFragment.isAdded()) { return; } // Show/hide call control fragment @@ -588,7 +583,7 @@ private void startCall() { callStartedTimeMs = System.currentTimeMillis(); // Start room connection. - logAndToast(getString(org.appspot.apprtc.R.string.connecting_to, roomConnectionParameters.roomUrl)); + logAndToast(getString(R.string.connecting_to, roomConnectionParameters.roomUrl)); appRtcClient.connectToRoom(roomConnectionParameters); // Create and audio manager that will take care of audio routing, @@ -659,7 +654,7 @@ private void disconnect() { audioManager.stop(); audioManager = null; } - if (iceConnected && !isError) { + if (connected && !isError) { setResult(RESULT_OK); } else { setResult(RESULT_CANCELED); @@ -673,10 +668,10 @@ private void disconnectWithErrorMessage(final String errorMessage) { disconnect(); } else { new AlertDialog.Builder(this) - .setTitle(getText(org.appspot.apprtc.R.string.channel_error_title)) + .setTitle(getText(R.string.channel_error_title)) .setMessage(errorMessage) .setCancelable(false) - .setNeutralButton(org.appspot.apprtc.R.string.ok, + .setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { @@ -725,7 +720,7 @@ public void run() { return createScreenCapturer(); } else if (useCamera2()) { if (!captureToTexture()) { - reportError(getString(org.appspot.apprtc.R.string.camera2_texture_only_error)); + reportError(getString(R.string.camera2_texture_only_error)); return null; } @@ -921,8 +916,6 @@ public void onIceConnected() { @Override public void run() { logAndToast("ICE connected, delay=" + delta + "ms"); - iceConnected = true; - callConnected(); } }); } @@ -933,7 +926,30 @@ public void onIceDisconnected() { @Override public void run() { logAndToast("ICE disconnected"); - iceConnected = false; + } + }); + } + + @Override + public void onConnected() { + final long delta = System.currentTimeMillis() - callStartedTimeMs; + runOnUiThread(new Runnable() { + @Override + public void run() { + logAndToast("DTLS connected, delay=" + delta + "ms"); + connected = true; + callConnected(); + } + }); + } + + @Override + public void onDisconnected() { + runOnUiThread(new Runnable() { + @Override + public void run() { + logAndToast("DTLS disconnected"); + connected = false; disconnect(); } }); @@ -947,7 +963,7 @@ public void onPeerConnectionStatsReady(final StatsReport[] reports) { runOnUiThread(new Runnable() { @Override public void run() { - if (!isError && iceConnected) { + if (!isError && connected) { hudFragment.updateEncoderStatistics(reports); } } diff --git a/app/src/main/java/com/example/webrtc/android/CaptureQualityController.java b/app/src/main/java/com/example/webrtc/android/CaptureQualityController.java index d5e674a..cf6996b 100644 --- a/app/src/main/java/com/example/webrtc/android/CaptureQualityController.java +++ b/app/src/main/java/com/example/webrtc/android/CaptureQualityController.java @@ -30,10 +30,10 @@ public class CaptureQualityController implements SeekBar.OnSeekBarChangeListener private static final int FRAMERATE_THRESHOLD = 15; private TextView captureFormatText; private CallFragment.OnCallEvents callEvents; - private int width = 0; - private int height = 0; - private int framerate = 0; - private double targetBandwidth = 0; + private int width; + private int height; + private int framerate; + private double targetBandwidth; public CaptureQualityController( TextView captureFormatText, CallFragment.OnCallEvents callEvents) { @@ -64,7 +64,7 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { width = 0; height = 0; framerate = 0; - captureFormatText.setText(org.appspot.apprtc.R.string.muted); + captureFormatText.setText(R.string.muted); return; } @@ -89,7 +89,7 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { height = bestFormat.height; framerate = calculateFramerate(targetBandwidth, bestFormat); captureFormatText.setText( - String.format(captureFormatText.getContext().getString(org.appspot.apprtc.R.string.format_description), width, + String.format(captureFormatText.getContext().getString(R.string.format_description), width, height, framerate)); } diff --git a/app/src/main/java/com/example/webrtc/android/ConnectActivity.java b/app/src/main/java/com/example/webrtc/android/ConnectActivity.java index 8d5cce1..be53df4 100644 --- a/app/src/main/java/com/example/webrtc/android/ConnectActivity.java +++ b/app/src/main/java/com/example/webrtc/android/ConnectActivity.java @@ -11,7 +11,6 @@ package com.example.webrtc.android; import android.Manifest; -import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -47,7 +46,6 @@ import org.json.JSONArray; import org.json.JSONException; - /** * Handles the initial setup where the user selects which room to join. */ @@ -55,7 +53,7 @@ public class ConnectActivity extends AppCompatActivity { private static final String TAG = "ConnectActivity"; private static final int CONNECTION_REQUEST = 1; private static final int REMOVE_FAVORITE_INDEX = 0; - private static boolean commandLineRun = false; + private static boolean commandLineRun; private ImageButton addFavoriteButton; private EditText roomEditText; @@ -78,17 +76,17 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get setting keys. - PreferenceManager.setDefaultValues(this, org.appspot.apprtc.R.xml.preferences, false); + PreferenceManager.setDefaultValues(this, R.xml.preferences, false); sharedPref = PreferenceManager.getDefaultSharedPreferences(this); - keyprefResolution = getString(org.appspot.apprtc.R.string.pref_resolution_key); - keyprefFps = getString(org.appspot.apprtc.R.string.pref_fps_key); - keyprefVideoBitrateType = getString(org.appspot.apprtc.R.string.pref_maxvideobitrate_key); - keyprefVideoBitrateValue = getString(org.appspot.apprtc.R.string.pref_maxvideobitratevalue_key); - keyprefAudioBitrateType = getString(org.appspot.apprtc.R.string.pref_startaudiobitrate_key); - keyprefAudioBitrateValue = getString(org.appspot.apprtc.R.string.pref_startaudiobitratevalue_key); - keyprefRoomServerUrl = getString(org.appspot.apprtc.R.string.pref_room_server_url_key); - keyprefRoom = getString(org.appspot.apprtc.R.string.pref_room_key); - keyprefRoomList = getString(org.appspot.apprtc.R.string.pref_room_list_key); + keyprefResolution = getString(R.string.pref_resolution_key); + keyprefFps = getString(R.string.pref_fps_key); + keyprefVideoBitrateType = getString(R.string.pref_maxvideobitrate_key); + keyprefVideoBitrateValue = getString(R.string.pref_maxvideobitratevalue_key); + keyprefAudioBitrateType = getString(R.string.pref_startaudiobitrate_key); + keyprefAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key); + keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key); + keyprefRoom = getString(R.string.pref_room_key); + keyprefRoomList = getString(R.string.pref_room_list_key); setContentView(R.layout.activity_connect); @@ -137,7 +135,7 @@ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMen if (v.getId() == R.id.room_listview) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; menu.setHeaderTitle(roomList.get(info.position)); - String[] menuItems = getResources().getStringArray(org.appspot.apprtc.R.array.roomListContextMenu); + String[] menuItems = getResources().getStringArray(R.array.roomListContextMenu); for (int i = 0; i < menuItems.length; i++) { menu.add(Menu.NONE, i, i, menuItems[i]); } @@ -287,75 +285,75 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba } String roomUrl = sharedPref.getString( - keyprefRoomServerUrl, getString(org.appspot.apprtc.R.string.pref_room_server_url_default)); + keyprefRoomServerUrl, getString(R.string.pref_room_server_url_default)); // Video call enabled flag. - boolean videoCallEnabled = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_videocall_key, - CallActivity.EXTRA_VIDEO_CALL, org.appspot.apprtc.R.string.pref_videocall_default, useValuesFromIntent); + boolean videoCallEnabled = sharedPrefGetBoolean(R.string.pref_videocall_key, + CallActivity.EXTRA_VIDEO_CALL, R.string.pref_videocall_default, useValuesFromIntent); // Use screencapture option. - boolean useScreencapture = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_screencapture_key, - CallActivity.EXTRA_SCREENCAPTURE, org.appspot.apprtc.R.string.pref_screencapture_default, useValuesFromIntent); + boolean useScreencapture = sharedPrefGetBoolean(R.string.pref_screencapture_key, + CallActivity.EXTRA_SCREENCAPTURE, R.string.pref_screencapture_default, useValuesFromIntent); // Use Camera2 option. - boolean useCamera2 = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_camera2_key, CallActivity.EXTRA_CAMERA2, - org.appspot.apprtc.R.string.pref_camera2_default, useValuesFromIntent); + boolean useCamera2 = sharedPrefGetBoolean(R.string.pref_camera2_key, CallActivity.EXTRA_CAMERA2, + R.string.pref_camera2_default, useValuesFromIntent); // Get default codecs. - String videoCodec = sharedPrefGetString(org.appspot.apprtc.R.string.pref_videocodec_key, - CallActivity.EXTRA_VIDEOCODEC, org.appspot.apprtc.R.string.pref_videocodec_default, useValuesFromIntent); - String audioCodec = sharedPrefGetString(org.appspot.apprtc.R.string.pref_audiocodec_key, - CallActivity.EXTRA_AUDIOCODEC, org.appspot.apprtc.R.string.pref_audiocodec_default, useValuesFromIntent); + String videoCodec = sharedPrefGetString(R.string.pref_videocodec_key, + CallActivity.EXTRA_VIDEOCODEC, R.string.pref_videocodec_default, useValuesFromIntent); + String audioCodec = sharedPrefGetString(R.string.pref_audiocodec_key, + CallActivity.EXTRA_AUDIOCODEC, R.string.pref_audiocodec_default, useValuesFromIntent); // Check HW codec flag. - boolean hwCodec = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_hwcodec_key, - CallActivity.EXTRA_HWCODEC_ENABLED, org.appspot.apprtc.R.string.pref_hwcodec_default, useValuesFromIntent); + boolean hwCodec = sharedPrefGetBoolean(R.string.pref_hwcodec_key, + CallActivity.EXTRA_HWCODEC_ENABLED, R.string.pref_hwcodec_default, useValuesFromIntent); // Check Capture to texture. - boolean captureToTexture = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_capturetotexture_key, - CallActivity.EXTRA_CAPTURETOTEXTURE_ENABLED, org.appspot.apprtc.R.string.pref_capturetotexture_default, + boolean captureToTexture = sharedPrefGetBoolean(R.string.pref_capturetotexture_key, + CallActivity.EXTRA_CAPTURETOTEXTURE_ENABLED, R.string.pref_capturetotexture_default, useValuesFromIntent); // Check FlexFEC. - boolean flexfecEnabled = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_flexfec_key, - CallActivity.EXTRA_FLEXFEC_ENABLED, org.appspot.apprtc.R.string.pref_flexfec_default, useValuesFromIntent); + boolean flexfecEnabled = sharedPrefGetBoolean(R.string.pref_flexfec_key, + CallActivity.EXTRA_FLEXFEC_ENABLED, R.string.pref_flexfec_default, useValuesFromIntent); // Check Disable Audio Processing flag. - boolean noAudioProcessing = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_noaudioprocessing_key, - CallActivity.EXTRA_NOAUDIOPROCESSING_ENABLED, org.appspot.apprtc.R.string.pref_noaudioprocessing_default, + boolean noAudioProcessing = sharedPrefGetBoolean(R.string.pref_noaudioprocessing_key, + CallActivity.EXTRA_NOAUDIOPROCESSING_ENABLED, R.string.pref_noaudioprocessing_default, useValuesFromIntent); - boolean aecDump = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_aecdump_key, - CallActivity.EXTRA_AECDUMP_ENABLED, org.appspot.apprtc.R.string.pref_aecdump_default, useValuesFromIntent); + boolean aecDump = sharedPrefGetBoolean(R.string.pref_aecdump_key, + CallActivity.EXTRA_AECDUMP_ENABLED, R.string.pref_aecdump_default, useValuesFromIntent); boolean saveInputAudioToFile = - sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_enable_save_input_audio_to_file_key, + sharedPrefGetBoolean(R.string.pref_enable_save_input_audio_to_file_key, CallActivity.EXTRA_SAVE_INPUT_AUDIO_TO_FILE_ENABLED, - org.appspot.apprtc.R.string.pref_enable_save_input_audio_to_file_default, useValuesFromIntent); + R.string.pref_enable_save_input_audio_to_file_default, useValuesFromIntent); // Check OpenSL ES enabled flag. - boolean useOpenSLES = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_opensles_key, - CallActivity.EXTRA_OPENSLES_ENABLED, org.appspot.apprtc.R.string.pref_opensles_default, useValuesFromIntent); + boolean useOpenSLES = sharedPrefGetBoolean(R.string.pref_opensles_key, + CallActivity.EXTRA_OPENSLES_ENABLED, R.string.pref_opensles_default, useValuesFromIntent); // Check Disable built-in AEC flag. - boolean disableBuiltInAEC = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_disable_built_in_aec_key, - CallActivity.EXTRA_DISABLE_BUILT_IN_AEC, org.appspot.apprtc.R.string.pref_disable_built_in_aec_default, + boolean disableBuiltInAEC = sharedPrefGetBoolean(R.string.pref_disable_built_in_aec_key, + CallActivity.EXTRA_DISABLE_BUILT_IN_AEC, R.string.pref_disable_built_in_aec_default, useValuesFromIntent); // Check Disable built-in AGC flag. - boolean disableBuiltInAGC = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_disable_built_in_agc_key, - CallActivity.EXTRA_DISABLE_BUILT_IN_AGC, org.appspot.apprtc.R.string.pref_disable_built_in_agc_default, + boolean disableBuiltInAGC = sharedPrefGetBoolean(R.string.pref_disable_built_in_agc_key, + CallActivity.EXTRA_DISABLE_BUILT_IN_AGC, R.string.pref_disable_built_in_agc_default, useValuesFromIntent); // Check Disable built-in NS flag. - boolean disableBuiltInNS = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_disable_built_in_ns_key, - CallActivity.EXTRA_DISABLE_BUILT_IN_NS, org.appspot.apprtc.R.string.pref_disable_built_in_ns_default, + boolean disableBuiltInNS = sharedPrefGetBoolean(R.string.pref_disable_built_in_ns_key, + CallActivity.EXTRA_DISABLE_BUILT_IN_NS, R.string.pref_disable_built_in_ns_default, useValuesFromIntent); // Check Disable gain control boolean disableWebRtcAGCAndHPF = sharedPrefGetBoolean( - org.appspot.apprtc.R.string.pref_disable_webrtc_agc_and_hpf_key, CallActivity.EXTRA_DISABLE_WEBRTC_AGC_AND_HPF, - org.appspot.apprtc.R.string.pref_disable_webrtc_agc_and_hpf_key, useValuesFromIntent); + R.string.pref_disable_webrtc_agc_and_hpf_key, CallActivity.EXTRA_DISABLE_WEBRTC_AGC_AND_HPF, + R.string.pref_disable_webrtc_agc_and_hpf_key, useValuesFromIntent); // Get video resolution from settings. int videoWidth = 0; @@ -366,7 +364,7 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba } if (videoWidth == 0 && videoHeight == 0) { String resolution = - sharedPref.getString(keyprefResolution, getString(org.appspot.apprtc.R.string.pref_resolution_default)); + sharedPref.getString(keyprefResolution, getString(R.string.pref_resolution_default)); String[] dimensions = resolution.split("[ x]+"); if (dimensions.length == 2) { try { @@ -386,7 +384,7 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba cameraFps = getIntent().getIntExtra(CallActivity.EXTRA_VIDEO_FPS, 0); } if (cameraFps == 0) { - String fps = sharedPref.getString(keyprefFps, getString(org.appspot.apprtc.R.string.pref_fps_default)); + String fps = sharedPref.getString(keyprefFps, getString(R.string.pref_fps_default)); String[] fpsValues = fps.split("[ x]+"); if (fpsValues.length == 2) { try { @@ -399,9 +397,9 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba } // Check capture quality slider flag. - boolean captureQualitySlider = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_capturequalityslider_key, + boolean captureQualitySlider = sharedPrefGetBoolean(R.string.pref_capturequalityslider_key, CallActivity.EXTRA_VIDEO_CAPTUREQUALITYSLIDER_ENABLED, - org.appspot.apprtc.R.string.pref_capturequalityslider_default, useValuesFromIntent); + R.string.pref_capturequalityslider_default, useValuesFromIntent); // Get video and audio start bitrate. int videoStartBitrate = 0; @@ -409,11 +407,11 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba videoStartBitrate = getIntent().getIntExtra(CallActivity.EXTRA_VIDEO_BITRATE, 0); } if (videoStartBitrate == 0) { - String bitrateTypeDefault = getString(org.appspot.apprtc.R.string.pref_maxvideobitrate_default); + String bitrateTypeDefault = getString(R.string.pref_maxvideobitrate_default); String bitrateType = sharedPref.getString(keyprefVideoBitrateType, bitrateTypeDefault); if (!bitrateType.equals(bitrateTypeDefault)) { String bitrateValue = sharedPref.getString( - keyprefVideoBitrateValue, getString(org.appspot.apprtc.R.string.pref_maxvideobitratevalue_default)); + keyprefVideoBitrateValue, getString(R.string.pref_maxvideobitratevalue_default)); videoStartBitrate = Integer.parseInt(bitrateValue); } } @@ -423,49 +421,45 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba audioStartBitrate = getIntent().getIntExtra(CallActivity.EXTRA_AUDIO_BITRATE, 0); } if (audioStartBitrate == 0) { - String bitrateTypeDefault = getString(org.appspot.apprtc.R.string.pref_startaudiobitrate_default); + String bitrateTypeDefault = getString(R.string.pref_startaudiobitrate_default); String bitrateType = sharedPref.getString(keyprefAudioBitrateType, bitrateTypeDefault); if (!bitrateType.equals(bitrateTypeDefault)) { String bitrateValue = sharedPref.getString( - keyprefAudioBitrateValue, getString(org.appspot.apprtc.R.string.pref_startaudiobitratevalue_default)); + keyprefAudioBitrateValue, getString(R.string.pref_startaudiobitratevalue_default)); audioStartBitrate = Integer.parseInt(bitrateValue); } } // Check statistics display option. - boolean displayHud = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_displayhud_key, - CallActivity.EXTRA_DISPLAY_HUD, org.appspot.apprtc.R.string.pref_displayhud_default, useValuesFromIntent); + boolean displayHud = sharedPrefGetBoolean(R.string.pref_displayhud_key, + CallActivity.EXTRA_DISPLAY_HUD, R.string.pref_displayhud_default, useValuesFromIntent); - boolean tracing = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_tracing_key, CallActivity.EXTRA_TRACING, - org.appspot.apprtc.R.string.pref_tracing_default, useValuesFromIntent); + boolean tracing = sharedPrefGetBoolean(R.string.pref_tracing_key, CallActivity.EXTRA_TRACING, + R.string.pref_tracing_default, useValuesFromIntent); // Check Enable RtcEventLog. - boolean rtcEventLogEnabled = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_enable_rtceventlog_key, - CallActivity.EXTRA_ENABLE_RTCEVENTLOG, org.appspot.apprtc.R.string.pref_enable_rtceventlog_default, - useValuesFromIntent); - - boolean useLegacyAudioDevice = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_use_legacy_audio_device_key, - CallActivity.EXTRA_USE_LEGACY_AUDIO_DEVICE, org.appspot.apprtc.R.string.pref_use_legacy_audio_device_default, + boolean rtcEventLogEnabled = sharedPrefGetBoolean(R.string.pref_enable_rtceventlog_key, + CallActivity.EXTRA_ENABLE_RTCEVENTLOG, R.string.pref_enable_rtceventlog_default, useValuesFromIntent); // Get datachannel options - boolean dataChannelEnabled = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_enable_datachannel_key, - CallActivity.EXTRA_DATA_CHANNEL_ENABLED, org.appspot.apprtc.R.string.pref_enable_datachannel_default, + boolean dataChannelEnabled = sharedPrefGetBoolean(R.string.pref_enable_datachannel_key, + CallActivity.EXTRA_DATA_CHANNEL_ENABLED, R.string.pref_enable_datachannel_default, useValuesFromIntent); - boolean ordered = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_ordered_key, CallActivity.EXTRA_ORDERED, - org.appspot.apprtc.R.string.pref_ordered_default, useValuesFromIntent); - boolean negotiated = sharedPrefGetBoolean(org.appspot.apprtc.R.string.pref_negotiated_key, - CallActivity.EXTRA_NEGOTIATED, org.appspot.apprtc.R.string.pref_negotiated_default, useValuesFromIntent); - int maxRetrMs = sharedPrefGetInteger(org.appspot.apprtc.R.string.pref_max_retransmit_time_ms_key, - CallActivity.EXTRA_MAX_RETRANSMITS_MS, org.appspot.apprtc.R.string.pref_max_retransmit_time_ms_default, + boolean ordered = sharedPrefGetBoolean(R.string.pref_ordered_key, CallActivity.EXTRA_ORDERED, + R.string.pref_ordered_default, useValuesFromIntent); + boolean negotiated = sharedPrefGetBoolean(R.string.pref_negotiated_key, + CallActivity.EXTRA_NEGOTIATED, R.string.pref_negotiated_default, useValuesFromIntent); + int maxRetrMs = sharedPrefGetInteger(R.string.pref_max_retransmit_time_ms_key, + CallActivity.EXTRA_MAX_RETRANSMITS_MS, R.string.pref_max_retransmit_time_ms_default, useValuesFromIntent); int maxRetr = - sharedPrefGetInteger(org.appspot.apprtc.R.string.pref_max_retransmits_key, CallActivity.EXTRA_MAX_RETRANSMITS, - org.appspot.apprtc.R.string.pref_max_retransmits_default, useValuesFromIntent); - int id = sharedPrefGetInteger(org.appspot.apprtc.R.string.pref_data_id_key, CallActivity.EXTRA_ID, - org.appspot.apprtc.R.string.pref_data_id_default, useValuesFromIntent); - String protocol = sharedPrefGetString(org.appspot.apprtc.R.string.pref_data_protocol_key, - CallActivity.EXTRA_PROTOCOL, org.appspot.apprtc.R.string.pref_data_protocol_default, useValuesFromIntent); + sharedPrefGetInteger(R.string.pref_max_retransmits_key, CallActivity.EXTRA_MAX_RETRANSMITS, + R.string.pref_max_retransmits_default, useValuesFromIntent); + int id = sharedPrefGetInteger(R.string.pref_data_id_key, CallActivity.EXTRA_ID, + R.string.pref_data_id_default, useValuesFromIntent); + String protocol = sharedPrefGetString(R.string.pref_data_protocol_key, + CallActivity.EXTRA_PROTOCOL, R.string.pref_data_protocol_default, useValuesFromIntent); // Start AppRTCMobile activity. Log.d(TAG, "Connecting to room " + roomId + " at URL " + roomUrl); @@ -502,8 +496,6 @@ private void connectToRoom(String roomId, boolean commandLineRun, boolean loopba intent.putExtra(CallActivity.EXTRA_ENABLE_RTCEVENTLOG, rtcEventLogEnabled); intent.putExtra(CallActivity.EXTRA_CMDLINE, commandLineRun); intent.putExtra(CallActivity.EXTRA_RUNTIME, runTimeMs); - intent.putExtra(CallActivity.EXTRA_USE_LEGACY_AUDIO_DEVICE, useLegacyAudioDevice); - intent.putExtra(CallActivity.EXTRA_DATA_CHANNEL_ENABLED, dataChannelEnabled); if (dataChannelEnabled) { @@ -604,10 +596,10 @@ private boolean validateUrl(String url) { } new AlertDialog.Builder(this) - .setTitle(getText(org.appspot.apprtc.R.string.invalid_url_title)) - .setMessage(getString(org.appspot.apprtc.R.string.invalid_url_text, url)) + .setTitle(getText(R.string.invalid_url_title)) + .setMessage(getString(R.string.invalid_url_text, url)) .setCancelable(false) - .setNeutralButton(org.appspot.apprtc.R.string.ok, + .setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { diff --git a/build.gradle b/build.gradle index 47825b2..af70df7 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.0' + classpath 'com.android.tools.build:gradle:3.3.2' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cbe466b..7523b16 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Aug 22 19:31:27 IST 2018 +#Tue Apr 16 18:26:13 IDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/webrtc/build.gradle b/webrtc/build.gradle index 9417e33..b8ebe2e 100644 --- a/webrtc/build.gradle +++ b/webrtc/build.gradle @@ -22,5 +22,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'org.webrtc:google-webrtc:1.0.24277' + implementation 'org.webrtc:google-webrtc:1.0.27485' + implementation 'com.android.support:support-annotations:28.0.0' + } diff --git a/webrtc/src/main/java/org/appspot/apprtc/AppRTCAudioManager.java b/webrtc/src/main/java/org/appspot/apprtc/AppRTCAudioManager.java index 1278004..b47b4b9 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/AppRTCAudioManager.java +++ b/webrtc/src/main/java/org/appspot/apprtc/AppRTCAudioManager.java @@ -20,11 +20,11 @@ import android.media.AudioManager; import android.os.Build; import android.preference.PreferenceManager; +import android.support.annotation.Nullable; import android.util.Log; import java.util.Collections; import java.util.HashSet; import java.util.Set; -import javax.annotation.Nullable; import org.appspot.apprtc.util.AppRTCUtils; import org.webrtc.ThreadUtils; @@ -54,7 +54,7 @@ public enum AudioManagerState { public interface AudioManagerEvents { // Callback fired once audio device is changed or list of available audio devices changed. void onAudioDeviceChanged( - AudioDevice selectedAudioDevice, Set availableAudioDevices); + AudioDevice selectedAudioDevice, Set availableAudioDevices); } private final Context apprtcContext; @@ -65,9 +65,9 @@ void onAudioDeviceChanged( private AudioManagerEvents audioManagerEvents; private AudioManagerState amState; private int savedAudioMode = AudioManager.MODE_INVALID; - private boolean savedIsSpeakerPhoneOn = false; - private boolean savedIsMicrophoneMute = false; - private boolean hasWiredHeadset = false; + private boolean savedIsSpeakerPhoneOn; + private boolean savedIsMicrophoneMute; + private boolean hasWiredHeadset; // Default audio device; speaker phone for video calls or earpiece for audio // only calls. @@ -93,8 +93,7 @@ void onAudioDeviceChanged( // relative to the view screen of a device and can therefore be used to // assist device switching (close to ear <=> use headset earpiece if // available, far from ear <=> use speaker phone). - @Nullable - private AppRTCProximitySensor proximitySensor = null; + @Nullable private AppRTCProximitySensor proximitySensor; // Handles all tasks related to Bluetooth headset devices. private final AppRTCBluetoothManager bluetoothManager; @@ -121,16 +120,16 @@ private void onProximitySensorChangedState() { // The proximity sensor should only be activated when there are exactly two // available audio devices. - if (audioDevices.size() == 2 && audioDevices.contains(AudioDevice.EARPIECE) - && audioDevices.contains(AudioDevice.SPEAKER_PHONE)) { + if (audioDevices.size() == 2 && audioDevices.contains(AppRTCAudioManager.AudioDevice.EARPIECE) + && audioDevices.contains(AppRTCAudioManager.AudioDevice.SPEAKER_PHONE)) { if (proximitySensor.sensorReportsNearState()) { // Sensor reports that a "handset is being held up to a person's ear", // or "something is covering the light sensor". - setAudioDeviceInternal(AudioDevice.EARPIECE); + setAudioDeviceInternal(AppRTCAudioManager.AudioDevice.EARPIECE); } else { // Sensor reports that a "handset is removed from a person's ear", or // "the light sensor is no longer covered". - setAudioDeviceInternal(AudioDevice.SPEAKER_PHONE); + setAudioDeviceInternal(AppRTCAudioManager.AudioDevice.SPEAKER_PHONE); } } } diff --git a/webrtc/src/main/java/org/appspot/apprtc/AppRTCBluetoothManager.java b/webrtc/src/main/java/org/appspot/apprtc/AppRTCBluetoothManager.java index 6720e92..936b549 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/AppRTCBluetoothManager.java +++ b/webrtc/src/main/java/org/appspot/apprtc/AppRTCBluetoothManager.java @@ -24,7 +24,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Process; -import javax.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.Log; import java.util.List; import java.util.Set; diff --git a/webrtc/src/main/java/org/appspot/apprtc/AppRTCProximitySensor.java b/webrtc/src/main/java/org/appspot/apprtc/AppRTCProximitySensor.java index ac03a80..a29b7ef 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/AppRTCProximitySensor.java +++ b/webrtc/src/main/java/org/appspot/apprtc/AppRTCProximitySensor.java @@ -16,7 +16,7 @@ import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; -import javax.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.Log; import org.appspot.apprtc.util.AppRTCUtils; import org.webrtc.ThreadUtils; @@ -40,9 +40,8 @@ public class AppRTCProximitySensor implements SensorEventListener { private final Runnable onSensorStateListener; private final SensorManager sensorManager; - @Nullable - private Sensor proximitySensor = null; - private boolean lastStateReportIsNear = false; + @Nullable private Sensor proximitySensor; + private boolean lastStateReportIsNear; /** Construction */ static AppRTCProximitySensor create(Context context, Runnable sensorStateListener) { diff --git a/webrtc/src/main/java/org/appspot/apprtc/CpuMonitor.java b/webrtc/src/main/java/org/appspot/apprtc/CpuMonitor.java index c5aa787..791f1dd 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/CpuMonitor.java +++ b/webrtc/src/main/java/org/appspot/apprtc/CpuMonitor.java @@ -17,6 +17,7 @@ import android.os.BatteryManager; import android.os.Build; import android.os.SystemClock; +import android.support.annotation.Nullable; import android.util.Log; import java.io.BufferedReader; import java.io.FileInputStream; @@ -31,7 +32,6 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import javax.annotation.Nullable; /** * Simple CPU monitor. The caller creates a CpuMonitor object which can then diff --git a/webrtc/src/main/java/org/appspot/apprtc/DirectRTCClient.java b/webrtc/src/main/java/org/appspot/apprtc/DirectRTCClient.java index f426148..24945e7 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/DirectRTCClient.java +++ b/webrtc/src/main/java/org/appspot/apprtc/DirectRTCClient.java @@ -10,9 +10,13 @@ package org.appspot.apprtc; -import javax.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.Log; - +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -20,12 +24,6 @@ import org.webrtc.PeerConnection; import org.webrtc.SessionDescription; -import java.util.ArrayList; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * Implementation of AppRTCClient that uses direct TCP connection as the signaling channel. * This eliminates the need for an external server. This class does not support loopback diff --git a/webrtc/src/main/java/org/appspot/apprtc/PeerConnectionClient.java b/webrtc/src/main/java/org/appspot/apprtc/PeerConnectionClient.java index 1945057..b4e065b 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/PeerConnectionClient.java +++ b/webrtc/src/main/java/org/appspot/apprtc/PeerConnectionClient.java @@ -14,6 +14,7 @@ import android.os.Environment; import android.os.ParcelFileDescriptor; import android.preference.PreferenceManager; +import android.support.annotation.Nullable; import android.util.Log; import java.io.File; import java.io.IOException; @@ -34,7 +35,6 @@ import java.util.concurrent.Executors; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.Nullable; import org.appspot.apprtc.AppRTCClient.SignalingParameters; import org.appspot.apprtc.RecordedAudioToFileController; import org.webrtc.AudioSource; @@ -52,6 +52,7 @@ import org.webrtc.MediaStreamTrack.MediaType; import org.webrtc.PeerConnection; import org.webrtc.PeerConnection.IceConnectionState; +import org.webrtc.PeerConnection.PeerConnectionState; import org.webrtc.PeerConnectionFactory; import org.webrtc.RtpParameters; import org.webrtc.RtpReceiver; @@ -74,14 +75,6 @@ import org.webrtc.audio.JavaAudioDeviceModule; import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordErrorCallback; import org.webrtc.audio.JavaAudioDeviceModule.AudioTrackErrorCallback; -import org.webrtc.audio.LegacyAudioDeviceModule; -import org.webrtc.voiceengine.WebRtcAudioManager; -import org.webrtc.voiceengine.WebRtcAudioRecord; -import org.webrtc.voiceengine.WebRtcAudioRecord.AudioRecordStartErrorCode; -import org.webrtc.voiceengine.WebRtcAudioRecord.WebRtcAudioRecordErrorCallback; -import org.webrtc.voiceengine.WebRtcAudioTrack; -import org.webrtc.voiceengine.WebRtcAudioTrack.AudioTrackStartErrorCode; -import org.webrtc.voiceengine.WebRtcAudioUtils; /** * Peer connection client implementation. @@ -182,8 +175,7 @@ public class PeerConnectionClient { private RtcEventLog rtcEventLog; // Implements the WebRtcAudioRecordSamplesReadyCallback interface and writes // recorded audio samples to an output file. - @Nullable - private RecordedAudioToFileController saveRecordedAudioToFile = null; + @Nullable private RecordedAudioToFileController saveRecordedAudioToFile; /** * Peer connection parameters. @@ -232,7 +224,6 @@ public static class PeerConnectionParameters { public final boolean disableBuiltInNS; public final boolean disableWebRtcAGCAndHPF; public final boolean enableRtcEventLog; - public final boolean useLegacyAudioDevice; private final DataChannelParameters dataChannelParameters; public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing, @@ -241,7 +232,7 @@ public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, bool String audioCodec, boolean noAudioProcessing, boolean aecDump, boolean saveInputAudioToFile, boolean useOpenSLES, boolean disableBuiltInAEC, boolean disableBuiltInAGC, boolean disableBuiltInNS, boolean disableWebRtcAGCAndHPF, boolean enableRtcEventLog, - boolean useLegacyAudioDevice, DataChannelParameters dataChannelParameters) { + DataChannelParameters dataChannelParameters) { this.videoCallEnabled = videoCallEnabled; this.loopback = loopback; this.tracing = tracing; @@ -263,7 +254,6 @@ public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, bool this.disableBuiltInNS = disableBuiltInNS; this.disableWebRtcAGCAndHPF = disableWebRtcAGCAndHPF; this.enableRtcEventLog = enableRtcEventLog; - this.useLegacyAudioDevice = useLegacyAudioDevice; this.dataChannelParameters = dataChannelParameters; } } @@ -294,11 +284,23 @@ public interface PeerConnectionEvents { void onIceConnected(); /** - * Callback fired once connection is closed (IceConnectionState is + * Callback fired once connection is disconnected (IceConnectionState is * DISCONNECTED). */ void onIceDisconnected(); + /** + * Callback fired once DTLS connection is established (PeerConnectionState + * is CONNECTED). + */ + void onConnected(); + + /** + * Callback fired once DTLS connection is disconnected (PeerConnectionState + * is DISCONNECTED). + */ + void onDisconnected(); + /** * Callback fired once peer connection is closed. */ @@ -418,9 +420,7 @@ private void createPeerConnectionFactoryInternal(PeerConnectionFactory.Options o } } - final AudioDeviceModule adm = peerConnectionParameters.useLegacyAudioDevice - ? createLegacyAudioDevice() - : createJavaAudioDevice(); + final AudioDeviceModule adm = createJavaAudioDevice(); // Create peer connection factory. if (options != null) { @@ -450,80 +450,6 @@ private void createPeerConnectionFactoryInternal(PeerConnectionFactory.Options o adm.release(); } - AudioDeviceModule createLegacyAudioDevice() { - // Enable/disable OpenSL ES playback. - if (!peerConnectionParameters.useOpenSLES) { - Log.d(TAG, "Disable OpenSL ES audio even if device supports it"); - WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(true /* enable */); - } else { - Log.d(TAG, "Allow OpenSL ES audio if device supports it"); - WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(false); - } - - if (peerConnectionParameters.disableBuiltInAEC) { - Log.d(TAG, "Disable built-in AEC even if device supports it"); - WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true); - } else { - Log.d(TAG, "Enable built-in AEC if device supports it"); - WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(false); - } - - if (peerConnectionParameters.disableBuiltInNS) { - Log.d(TAG, "Disable built-in NS even if device supports it"); - WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true); - } else { - Log.d(TAG, "Enable built-in NS if device supports it"); - WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(false); - } - - WebRtcAudioRecord.setOnAudioSamplesReady(saveRecordedAudioToFile); - - // Set audio record error callbacks. - WebRtcAudioRecord.setErrorCallback(new WebRtcAudioRecordErrorCallback() { - @Override - public void onWebRtcAudioRecordInitError(String errorMessage) { - Log.e(TAG, "onWebRtcAudioRecordInitError: " + errorMessage); - reportError(errorMessage); - } - - @Override - public void onWebRtcAudioRecordStartError( - AudioRecordStartErrorCode errorCode, String errorMessage) { - Log.e(TAG, "onWebRtcAudioRecordStartError: " + errorCode + ". " + errorMessage); - reportError(errorMessage); - } - - @Override - public void onWebRtcAudioRecordError(String errorMessage) { - Log.e(TAG, "onWebRtcAudioRecordError: " + errorMessage); - reportError(errorMessage); - } - }); - - WebRtcAudioTrack.setErrorCallback(new WebRtcAudioTrack.ErrorCallback() { - @Override - public void onWebRtcAudioTrackInitError(String errorMessage) { - Log.e(TAG, "onWebRtcAudioTrackInitError: " + errorMessage); - reportError(errorMessage); - } - - @Override - public void onWebRtcAudioTrackStartError( - AudioTrackStartErrorCode errorCode, String errorMessage) { - Log.e(TAG, "onWebRtcAudioTrackStartError: " + errorCode + ". " + errorMessage); - reportError(errorMessage); - } - - @Override - public void onWebRtcAudioTrackError(String errorMessage) { - Log.e(TAG, "onWebRtcAudioTrackError: " + errorMessage); - reportError(errorMessage); - } - }); - - return new LegacyAudioDeviceModule(); - } - AudioDeviceModule createJavaAudioDevice() { // Enable/disable OpenSL ES playback. if (!peerConnectionParameters.useOpenSLES) { @@ -1251,7 +1177,7 @@ public void onSignalingChange(PeerConnection.SignalingState newState) { } @Override - public void onIceConnectionChange(final IceConnectionState newState) { + public void onIceConnectionChange(final PeerConnection.IceConnectionState newState) { executor.execute(() -> { Log.d(TAG, "IceConnectionState: " + newState); if (newState == IceConnectionState.CONNECTED) { @@ -1264,6 +1190,20 @@ public void onIceConnectionChange(final IceConnectionState newState) { }); } + @Override + public void onConnectionChange(final PeerConnection.PeerConnectionState newState) { + executor.execute(() -> { + Log.d(TAG, "PeerConnectionState: " + newState); + if (newState == PeerConnectionState.CONNECTED) { + events.onConnected(); + } else if (newState == PeerConnectionState.DISCONNECTED) { + events.onDisconnected(); + } else if (newState == PeerConnectionState.FAILED) { + reportError("DTLS connection failed."); + } + }); + } + @Override public void onIceGatheringChange(PeerConnection.IceGatheringState newState) { Log.d(TAG, "IceGatheringState: " + newState); diff --git a/webrtc/src/main/java/org/appspot/apprtc/RecordedAudioToFileController.java b/webrtc/src/main/java/org/appspot/apprtc/RecordedAudioToFileController.java index ede9819..06943f7 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/RecordedAudioToFileController.java +++ b/webrtc/src/main/java/org/appspot/apprtc/RecordedAudioToFileController.java @@ -12,34 +12,30 @@ import android.media.AudioFormat; import android.os.Environment; -import javax.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.Log; import java.io.File; -import java.io.FileOutputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.concurrent.ExecutorService; import org.webrtc.audio.JavaAudioDeviceModule; import org.webrtc.audio.JavaAudioDeviceModule.SamplesReadyCallback; -import org.webrtc.voiceengine.WebRtcAudioRecord; -import org.webrtc.voiceengine.WebRtcAudioRecord.WebRtcAudioRecordSamplesReadyCallback; /** * Implements the AudioRecordSamplesReadyCallback interface and writes * recorded raw audio samples to an output file. */ -public class RecordedAudioToFileController - implements SamplesReadyCallback, WebRtcAudioRecordSamplesReadyCallback { +public class RecordedAudioToFileController implements SamplesReadyCallback { private static final String TAG = "RecordedAudioToFile"; private static final long MAX_FILE_SIZE_IN_BYTES = 58348800L; private final Object lock = new Object(); private final ExecutorService executor; - @Nullable - private OutputStream rawAudioFileOutputStream = null; + @Nullable private OutputStream rawAudioFileOutputStream; private boolean isRunning; - private long fileSizeInBytes = 0; + private long fileSizeInBytes; public RecordedAudioToFileController(ExecutorService executor) { Log.d(TAG, "ctor"); @@ -107,13 +103,6 @@ private void openRawAudioOutputFile(int sampleRate, int channelCount) { Log.d(TAG, "Opened file for recording: " + fileName); } - // Called when new audio samples are ready. - @Override - public void onWebRtcAudioRecordSamplesReady(WebRtcAudioRecord.AudioSamples samples) { - onWebRtcAudioRecordSamplesReady(new JavaAudioDeviceModule.AudioSamples(samples.getAudioFormat(), - samples.getChannelCount(), samples.getSampleRate(), samples.getData())); - } - // Called when new audio samples are ready. @Override public void onWebRtcAudioRecordSamplesReady(JavaAudioDeviceModule.AudioSamples samples) { diff --git a/webrtc/src/main/java/org/appspot/apprtc/TCPChannelClient.java b/webrtc/src/main/java/org/appspot/apprtc/TCPChannelClient.java index e9fd7be..d3094e7 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/TCPChannelClient.java +++ b/webrtc/src/main/java/org/appspot/apprtc/TCPChannelClient.java @@ -10,7 +10,7 @@ package org.appspot.apprtc; -import javax.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; diff --git a/webrtc/src/main/java/org/appspot/apprtc/WebSocketChannelClient.java b/webrtc/src/main/java/org/appspot/apprtc/WebSocketChannelClient.java index 07b7847..af9a5f3 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/WebSocketChannelClient.java +++ b/webrtc/src/main/java/org/appspot/apprtc/WebSocketChannelClient.java @@ -11,7 +11,7 @@ package org.appspot.apprtc; import android.os.Handler; -import javax.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.Log; import de.tavendo.autobahn.WebSocket.WebSocketConnectionObserver; import de.tavendo.autobahn.WebSocketConnection; diff --git a/webrtc/src/main/java/org/appspot/apprtc/WebSocketRTCClient.java b/webrtc/src/main/java/org/appspot/apprtc/WebSocketRTCClient.java index dbe34be..930f0ee 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/WebSocketRTCClient.java +++ b/webrtc/src/main/java/org/appspot/apprtc/WebSocketRTCClient.java @@ -10,17 +10,15 @@ package org.appspot.apprtc; -import javax.annotation.Nullable; +import android.os.Handler; +import android.os.HandlerThread; +import android.support.annotation.Nullable; +import android.util.Log; import org.appspot.apprtc.RoomParametersFetcher.RoomParametersFetcherEvents; import org.appspot.apprtc.WebSocketChannelClient.WebSocketChannelEvents; import org.appspot.apprtc.WebSocketChannelClient.WebSocketConnectionState; import org.appspot.apprtc.util.AsyncHttpURLConnection; import org.appspot.apprtc.util.AsyncHttpURLConnection.AsyncHttpEvents; - -import android.os.Handler; -import android.os.HandlerThread; -import android.util.Log; - import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; diff --git a/webrtc/src/main/java/org/appspot/apprtc/ui/SettingsActivity.java b/webrtc/src/main/java/org/appspot/apprtc/ui/SettingsActivity.java index 5a9e888..8eecafd 100644 --- a/webrtc/src/main/java/org/appspot/apprtc/ui/SettingsActivity.java +++ b/webrtc/src/main/java/org/appspot/apprtc/ui/SettingsActivity.java @@ -64,7 +64,6 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan private String keyprefDataProtocol; private String keyprefNegotiated; private String keyprefDataId; - private String keyprefUseLegacyAudioDevice; @Override protected void onCreate(Bundle savedInstanceState) { @@ -108,7 +107,6 @@ protected void onCreate(Bundle savedInstanceState) { keyPrefDisplayHud = getString(R.string.pref_displayhud_key); keyPrefTracing = getString(R.string.pref_tracing_key); keyprefEnabledRtcEventLog = getString(R.string.pref_enable_rtceventlog_key); - keyprefUseLegacyAudioDevice = getString(R.string.pref_use_legacy_audio_device_key); // Display the fragment as the main content. settingsFragment = new SettingsFragment(); @@ -166,7 +164,6 @@ protected void onResume() { updateSummaryB(sharedPreferences, keyPrefDisplayHud); updateSummaryB(sharedPreferences, keyPrefTracing); updateSummaryB(sharedPreferences, keyprefEnabledRtcEventLog); - updateSummaryB(sharedPreferences, keyprefUseLegacyAudioDevice); if (!Camera2Enumerator.isSupported(this)) { Preference camera2Preference = settingsFragment.findPreference(keyprefCamera2); @@ -244,8 +241,7 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin || key.equals(keyprefEnableDataChannel) || key.equals(keyprefOrdered) || key.equals(keyprefNegotiated) - || key.equals(keyprefEnabledRtcEventLog) - || key.equals(keyprefUseLegacyAudioDevice)) { + || key.equals(keyprefEnabledRtcEventLog)) { updateSummaryB(sharedPreferences, key); } else if (key.equals(keyprefSpeakerphone)) { updateSummaryList(sharedPreferences, key);