Add Datachannel support to Android AppRTCMobile

BUG=webrtc:6647

Review-Url: https://codereview.webrtc.org/2464243002
Cr-Commit-Position: refs/heads/master@{#15145}
This commit is contained in:
hekra01
2016-11-18 00:10:57 -08:00
committed by Commit bot
parent 1acfbd22cc
commit 610c454cf9
7 changed files with 300 additions and 5 deletions

View File

@ -14,6 +14,7 @@ Colin Plumb
Eric Rescorla, RTFM Inc. <ekr@rtfm.com> Eric Rescorla, RTFM Inc. <ekr@rtfm.com>
Giji Gangadharan <giji.g@samsung.com> Giji Gangadharan <giji.g@samsung.com>
Graham Yoakum <gyoakum@skobalt.com> Graham Yoakum <gyoakum@skobalt.com>
Hugues Ekra <hekra01@gmail.com>
Jake Hilton <jakehilton@gmail.com> Jake Hilton <jakehilton@gmail.com>
James H. Brown <jbrown@burgoyne.com> James H. Brown <jbrown@burgoyne.com>
Jiawei Ou <jiawei.ou@gmail.com> Jiawei Ou <jiawei.ou@gmail.com>

View File

@ -152,6 +152,44 @@
<string name="pref_speakerphone_dlg">Speakerphone.</string> <string name="pref_speakerphone_dlg">Speakerphone.</string>
<string name="pref_speakerphone_default">auto</string> <string name="pref_speakerphone_default">auto</string>
<string name="pref_datasettings_key">data_settings_key</string>
<string name="pref_datasettings_title">WebRTC data channel settings.</string>
<string name="pref_enable_datachannel_key">enable_datachannel_preference</string>
<string name="pref_enable_datachannel_title">Enable datachannel.</string>
<string name="pref_enable_datachannel_dlg">Enable datachannel.</string>
<string name="pref_enable_datachannel_default" translatable="false">true</string>
<string name="pref_ordered_key">ordered_preference</string>
<string name="pref_ordered_title">Order messages.</string>
<string name="pref_ordered_dlg">Order messages.</string>
<string name="pref_ordered_default" translatable="false">true</string>
<string name="pref_data_protocol_key">Subprotocol</string>
<string name="pref_data_protocol_title">Subprotocol.</string>
<string name="pref_data_protocol_dlg">Enter subprotocol.</string>
<string name="pref_data_protocol_default" translatable="false"></string>
<string name="pref_negotiated_key">negotiated_preference</string>
<string name="pref_negotiated_title">Negotiated.</string>
<string name="pref_negotiated_dlg">Negotiated.</string>
<string name="pref_negotiated_default" translatable="false">false</string>
<string name="pref_max_retransmit_time_ms_key">max_retransmit_time_ms_preference</string>
<string name="pref_max_retransmit_time_ms_title">Max delay to retransmit.</string>
<string name="pref_max_retransmit_time_ms_dlg">Enter max delay to retransmit (in ms).</string>
<string name="pref_max_retransmit_time_ms_default" translatable="false">-1</string>
<string name="pref_max_retransmits_key">max_retransmits_preference</string>
<string name="pref_max_retransmits_title">Max attempts to retransmit.</string>
<string name="pref_max_retransmits_dlg">Enter max attempts to retransmit.</string>
<string name="pref_max_retransmits_default" translatable="false">-1</string>
<string name="pref_data_id_key">data_id_preference</string>
<string name="pref_data_id_title">Data id.</string>
<string name="pref_data_id_dlg">Enter data channel id.</string>
<string name="pref_data_id_default" translatable="false">-1</string>
<string name="pref_miscsettings_key">misc_settings_key</string> <string name="pref_miscsettings_key">misc_settings_key</string>
<string name="pref_miscsettings_title">Miscellaneous settings.</string> <string name="pref_miscsettings_title">Miscellaneous settings.</string>

View File

@ -155,6 +155,54 @@
android:entryValues="@array/speakerphoneValues" /> android:entryValues="@array/speakerphoneValues" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory
android:key="@string/pref_datasettings_key"
android:title="@string/pref_datasettings_title">
<CheckBoxPreference
android:key="@string/pref_enable_datachannel_key"
android:title="@string/pref_enable_datachannel_title"
android:defaultValue="@string/pref_enable_datachannel_default" />
<CheckBoxPreference
android:key="@string/pref_ordered_key"
android:title="@string/pref_ordered_title"
android:defaultValue="@string/pref_ordered_default" />
<EditTextPreference
android:key="@string/pref_data_protocol_key"
android:title="@string/pref_data_protocol_title"
android:inputType="text"
android:defaultValue="@string/pref_data_protocol_default"
android:dialogTitle="@string/pref_data_protocol_dlg" />
<CheckBoxPreference
android:key="@string/pref_negotiated_key"
android:title="@string/pref_negotiated_title"
android:defaultValue="@string/pref_negotiated_default" />
<EditTextPreference
android:key="@string/pref_max_retransmit_time_ms_key"
android:title="@string/pref_max_retransmit_time_ms_title"
android:inputType="number"
android:defaultValue="@string/pref_max_retransmit_time_ms_default"
android:dialogTitle="@string/pref_max_retransmit_time_ms_dlg" />
<EditTextPreference
android:key="@string/pref_max_retransmits_key"
android:title="@string/pref_max_retransmits_title"
android:inputType="number"
android:defaultValue="@string/pref_max_retransmits_default"
android:dialogTitle="@string/pref_max_retransmits_dlg" />
<EditTextPreference
android:key="@string/pref_data_id_key"
android:title="@string/pref_data_id_title"
android:inputType="number"
android:defaultValue="@string/pref_data_id_default"
android:dialogTitle="@string/pref_data_id_dlg" />
</PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="@string/pref_miscsettings_key" android:key="@string/pref_miscsettings_key"
android:title="@string/pref_miscsettings_title"> android:title="@string/pref_miscsettings_title">

View File

@ -36,6 +36,7 @@ import java.util.List;
import org.appspot.apprtc.AppRTCClient.RoomConnectionParameters; import org.appspot.apprtc.AppRTCClient.RoomConnectionParameters;
import org.appspot.apprtc.AppRTCClient.SignalingParameters; import org.appspot.apprtc.AppRTCClient.SignalingParameters;
import org.appspot.apprtc.PeerConnectionClient.PeerConnectionParameters; import org.appspot.apprtc.PeerConnectionClient.PeerConnectionParameters;
import org.appspot.apprtc.PeerConnectionClient.DataChannelParameters;
import org.webrtc.Camera1Enumerator; import org.webrtc.Camera1Enumerator;
import org.webrtc.Camera2Enumerator; import org.webrtc.Camera2Enumerator;
import org.webrtc.CameraEnumerator; import org.webrtc.CameraEnumerator;
@ -97,6 +98,14 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven
"org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT"; "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT";
public static final String EXTRA_USE_VALUES_FROM_INTENT = public static final String EXTRA_USE_VALUES_FROM_INTENT =
"org.appspot.apprtc.USE_VALUES_FROM_INTENT"; "org.appspot.apprtc.USE_VALUES_FROM_INTENT";
public static final String EXTRA_DATA_CHANNEL_ENABLED = "org.appspot.apprtc.DATA_CHANNEL_ENABLED";
public static final String EXTRA_ORDERED = "org.appspot.apprtc.ORDERED";
public static final String EXTRA_MAX_RETRANSMITS_MS = "org.appspot.apprtc.MAX_RETRANSMITS_MS";
public static final String EXTRA_MAX_RETRANSMITS = "org.appspot.apprtc.MAX_RETRANSMITS";
public static final String EXTRA_PROTOCOL = "org.appspot.apprtc.PROTOCOL";
public static final String EXTRA_NEGOTIATED = "org.appspot.apprtc.NEGOTIATED";
public static final String EXTRA_ID = "org.appspot.apprtc.ID";
private static final String TAG = "CallRTCClient"; private static final String TAG = "CallRTCClient";
private static final int CAPTURE_PERMISSION_REQUEST_CODE = 1; private static final int CAPTURE_PERMISSION_REQUEST_CODE = 1;
@ -264,7 +273,13 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven
videoWidth = displayMetrics.widthPixels; videoWidth = displayMetrics.widthPixels;
videoHeight = displayMetrics.heightPixels; videoHeight = displayMetrics.heightPixels;
} }
DataChannelParameters dataChannelParameters = null;
if (intent.getBooleanExtra(EXTRA_DATA_CHANNEL_ENABLED, true)) {
dataChannelParameters = new DataChannelParameters(intent.getBooleanExtra(EXTRA_ORDERED, true),
intent.getIntExtra(EXTRA_MAX_RETRANSMITS_MS, -1),
intent.getIntExtra(EXTRA_MAX_RETRANSMITS, -1), intent.getStringExtra(EXTRA_PROTOCOL),
intent.getBooleanExtra(EXTRA_NEGOTIATED, false), intent.getIntExtra(EXTRA_ID, -1));
}
peerConnectionParameters = peerConnectionParameters =
new PeerConnectionParameters(intent.getBooleanExtra(EXTRA_VIDEO_CALL, true), loopback, new PeerConnectionParameters(intent.getBooleanExtra(EXTRA_VIDEO_CALL, true), loopback,
tracing, videoWidth, videoHeight, intent.getIntExtra(EXTRA_VIDEO_FPS, 0), tracing, videoWidth, videoHeight, intent.getIntExtra(EXTRA_VIDEO_FPS, 0),
@ -277,7 +292,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven
intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AEC, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AEC, false),
intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false),
intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false), intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false),
intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false)); intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false), dataChannelParameters);
commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false); commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false);
runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0); runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0);

View File

@ -80,6 +80,13 @@ public class ConnectActivity extends Activity {
private String keyprefRoomList; private String keyprefRoomList;
private ArrayList<String> roomList; private ArrayList<String> roomList;
private ArrayAdapter<String> adapter; private ArrayAdapter<String> adapter;
private String keyprefEnableDataChannel;
private String keyprefOrdered;
private String keyprefMaxRetransmitTimeMs;
private String keyprefMaxRetransmits;
private String keyprefDataProtocol;
private String keyprefNegotiated;
private String keyprefDataId;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@ -114,6 +121,13 @@ public class ConnectActivity extends Activity {
keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key); keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key);
keyprefRoom = getString(R.string.pref_room_key); keyprefRoom = getString(R.string.pref_room_key);
keyprefRoomList = getString(R.string.pref_room_list_key); keyprefRoomList = getString(R.string.pref_room_list_key);
keyprefEnableDataChannel = getString(R.string.pref_enable_datachannel_key);
keyprefOrdered = getString(R.string.pref_ordered_key);
keyprefMaxRetransmitTimeMs = getString(R.string.pref_max_retransmit_time_ms_key);
keyprefMaxRetransmits = getString(R.string.pref_max_retransmits_key);
keyprefDataProtocol = getString(R.string.pref_data_protocol_key);
keyprefNegotiated = getString(R.string.pref_negotiated_key);
keyprefDataId = getString(R.string.pref_data_id_key);
setContentView(R.layout.activity_connect); setContentView(R.layout.activity_connect);
@ -279,6 +293,28 @@ public class ConnectActivity extends Activity {
} }
} }
/**
* Get a value from the shared preference or from the intent, if it does not
* exist the default is used.
*/
private int sharedPrefGetInteger(
int attributeId, String intentName, int defaultId, boolean useFromIntent) {
String defaultString = getString(defaultId);
int defaultValue = Integer.parseInt(defaultString);
if (useFromIntent) {
return getIntent().getIntExtra(intentName, defaultValue);
} else {
String attributeName = getString(attributeId);
String value = sharedPref.getString(attributeName, defaultString);
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
Log.e(TAG, "Wrong setting for: " + attributeName + ":" + value);
return defaultValue;
}
}
}
private void connectToRoom(String roomId, boolean commandLineRun, boolean loopback, private void connectToRoom(String roomId, boolean commandLineRun, boolean loopback,
boolean useValuesFromIntent, int runTimeMs) { boolean useValuesFromIntent, int runTimeMs) {
this.commandLineRun = commandLineRun; this.commandLineRun = commandLineRun;
@ -433,6 +469,25 @@ public class ConnectActivity extends Activity {
boolean tracing = sharedPrefGetBoolean(R.string.pref_tracing_key, CallActivity.EXTRA_TRACING, boolean tracing = sharedPrefGetBoolean(R.string.pref_tracing_key, CallActivity.EXTRA_TRACING,
R.string.pref_tracing_default, useValuesFromIntent); R.string.pref_tracing_default, useValuesFromIntent);
// Get datachannel options
boolean dataChannelEnabled = sharedPrefGetBoolean(R.string.pref_enable_datachannel_key,
CallActivity.EXTRA_DATA_CHANNEL_ENABLED, R.string.pref_enable_datachannel_default,
useValuesFromIntent);
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(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. // Start AppRTCMobile activity.
Log.d(TAG, "Connecting to room " + roomId + " at URL " + roomUrl); Log.d(TAG, "Connecting to room " + roomId + " at URL " + roomUrl);
if (validateUrl(roomUrl)) { if (validateUrl(roomUrl)) {
@ -466,6 +521,17 @@ public class ConnectActivity extends Activity {
intent.putExtra(CallActivity.EXTRA_CMDLINE, commandLineRun); intent.putExtra(CallActivity.EXTRA_CMDLINE, commandLineRun);
intent.putExtra(CallActivity.EXTRA_RUNTIME, runTimeMs); intent.putExtra(CallActivity.EXTRA_RUNTIME, runTimeMs);
intent.putExtra(CallActivity.EXTRA_DATA_CHANNEL_ENABLED, dataChannelEnabled);
if (dataChannelEnabled) {
intent.putExtra(CallActivity.EXTRA_ORDERED, ordered);
intent.putExtra(CallActivity.EXTRA_MAX_RETRANSMITS_MS, maxRetrMs);
intent.putExtra(CallActivity.EXTRA_MAX_RETRANSMITS, maxRetr);
intent.putExtra(CallActivity.EXTRA_PROTOCOL, protocol);
intent.putExtra(CallActivity.EXTRA_NEGOTIATED, negotiated);
intent.putExtra(CallActivity.EXTRA_ID, id);
}
if (useValuesFromIntent) { if (useValuesFromIntent) {
if (getIntent().hasExtra(CallActivity.EXTRA_VIDEO_FILE_AS_CAMERA)) { if (getIntent().hasExtra(CallActivity.EXTRA_VIDEO_FILE_AS_CAMERA)) {
String videoFileAsCamera = String videoFileAsCamera =

View File

@ -16,6 +16,7 @@ import android.os.ParcelFileDescriptor;
import android.util.Log; import android.util.Log;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections; import java.util.Collections;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.LinkedList; import java.util.LinkedList;
@ -126,6 +127,30 @@ public class PeerConnectionClient {
// enableAudio is set to true if audio should be sent. // enableAudio is set to true if audio should be sent.
private boolean enableAudio; private boolean enableAudio;
private AudioTrack localAudioTrack; private AudioTrack localAudioTrack;
private DataChannel dataChannel;
private boolean dataChannelEnabled;
/**
* Peer connection parameters.
*/
public static class DataChannelParameters {
public final boolean ordered;
public final int maxRetransmitTimeMs;
public final int maxRetransmits;
public final String protocol;
public final boolean negotiated;
public final int id;
public DataChannelParameters(boolean ordered, int maxRetransmitTimeMs, int maxRetransmits,
String protocol, boolean negotiated, int id) {
this.ordered = ordered;
this.maxRetransmitTimeMs = maxRetransmitTimeMs;
this.maxRetransmits = maxRetransmits;
this.protocol = protocol;
this.negotiated = negotiated;
this.id = id;
}
}
/** /**
* Peer connection parameters. * Peer connection parameters.
@ -149,12 +174,25 @@ public class PeerConnectionClient {
public final boolean disableBuiltInAGC; public final boolean disableBuiltInAGC;
public final boolean disableBuiltInNS; public final boolean disableBuiltInNS;
public final boolean enableLevelControl; public final boolean enableLevelControl;
private final DataChannelParameters dataChannelParameters;
public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing, public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing,
int videoWidth, int videoHeight, int videoFps, int videoMaxBitrate, String videoCodec, int videoWidth, int videoHeight, int videoFps, int videoMaxBitrate, String videoCodec,
boolean videoCodecHwAcceleration, int audioStartBitrate, String audioCodec, boolean videoCodecHwAcceleration, int audioStartBitrate, String audioCodec,
boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES, boolean disableBuiltInAEC, boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES, boolean disableBuiltInAEC,
boolean disableBuiltInAGC, boolean disableBuiltInNS, boolean enableLevelControl) { boolean disableBuiltInAGC, boolean disableBuiltInNS, boolean enableLevelControl) {
this(videoCallEnabled, loopback, tracing, videoWidth, videoHeight, videoFps, videoMaxBitrate,
videoCodec, videoCodecHwAcceleration, audioStartBitrate, audioCodec, noAudioProcessing,
aecDump, useOpenSLES, disableBuiltInAEC, disableBuiltInAGC, disableBuiltInNS,
enableLevelControl, null);
}
public PeerConnectionParameters(boolean videoCallEnabled, boolean loopback, boolean tracing,
int videoWidth, int videoHeight, int videoFps, int videoMaxBitrate, String videoCodec,
boolean videoCodecHwAcceleration, int audioStartBitrate, String audioCodec,
boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES, boolean disableBuiltInAEC,
boolean disableBuiltInAGC, boolean disableBuiltInNS, boolean enableLevelControl,
DataChannelParameters dataChannelParameters) {
this.videoCallEnabled = videoCallEnabled; this.videoCallEnabled = videoCallEnabled;
this.loopback = loopback; this.loopback = loopback;
this.tracing = tracing; this.tracing = tracing;
@ -173,6 +211,7 @@ public class PeerConnectionClient {
this.disableBuiltInAGC = disableBuiltInAGC; this.disableBuiltInAGC = disableBuiltInAGC;
this.disableBuiltInNS = disableBuiltInNS; this.disableBuiltInNS = disableBuiltInNS;
this.enableLevelControl = enableLevelControl; this.enableLevelControl = enableLevelControl;
this.dataChannelParameters = dataChannelParameters;
} }
} }
@ -243,6 +282,7 @@ public class PeerConnectionClient {
this.peerConnectionParameters = peerConnectionParameters; this.peerConnectionParameters = peerConnectionParameters;
this.events = events; this.events = events;
videoCallEnabled = peerConnectionParameters.videoCallEnabled; videoCallEnabled = peerConnectionParameters.videoCallEnabled;
dataChannelEnabled = peerConnectionParameters.dataChannelParameters != null;
// Reset variables to initial states. // Reset variables to initial states.
this.context = null; this.context = null;
factory = null; factory = null;
@ -484,6 +524,17 @@ public class PeerConnectionClient {
rtcConfig.keyType = PeerConnection.KeyType.ECDSA; rtcConfig.keyType = PeerConnection.KeyType.ECDSA;
peerConnection = factory.createPeerConnection(rtcConfig, pcConstraints, pcObserver); peerConnection = factory.createPeerConnection(rtcConfig, pcConstraints, pcObserver);
if (dataChannelEnabled) {
DataChannel.Init init = new DataChannel.Init();
init.ordered = peerConnectionParameters.dataChannelParameters.ordered;
init.negotiated = peerConnectionParameters.dataChannelParameters.negotiated;
init.maxRetransmits = peerConnectionParameters.dataChannelParameters.maxRetransmits;
init.maxRetransmitTimeMs = peerConnectionParameters.dataChannelParameters.maxRetransmitTimeMs;
init.id = peerConnectionParameters.dataChannelParameters.id;
init.protocol = peerConnectionParameters.dataChannelParameters.protocol;
dataChannel = peerConnection.createDataChannel("ApprtcDemo data", init);
}
isInitiator = false; isInitiator = false;
// Set default WebRTC tracing and INFO libjingle logging. // Set default WebRTC tracing and INFO libjingle logging.
@ -524,6 +575,10 @@ public class PeerConnectionClient {
} }
Log.d(TAG, "Closing peer connection."); Log.d(TAG, "Closing peer connection.");
statsTimer.cancel(); statsTimer.cancel();
if (dataChannel != null) {
dataChannel.dispose();
dataChannel = null;
}
if (peerConnection != null) { if (peerConnection != null) {
peerConnection.dispose(); peerConnection.dispose();
peerConnection = null; peerConnection = null;
@ -1076,7 +1131,34 @@ public class PeerConnectionClient {
@Override @Override
public void onDataChannel(final DataChannel dc) { public void onDataChannel(final DataChannel dc) {
reportError("AppRTC doesn't use data channels, but got: " + dc.label() + " anyway!"); Log.d(TAG, "New Data channel " + dc.label());
if (!dataChannelEnabled)
return;
dc.registerObserver(new DataChannel.Observer() {
public void onBufferedAmountChange(long previousAmount) {
Log.d(TAG, "Data channel buffered amount changed: " + dc.label() + ": " + dc.state());
}
@Override
public void onStateChange() {
Log.d(TAG, "Data channel state changed: " + dc.label() + ": " + dc.state());
}
@Override
public void onMessage(final DataChannel.Buffer buffer) {
if (buffer.binary) {
Log.d(TAG, "Received binary msg over " + dc);
return;
}
ByteBuffer data = buffer.data;
final byte[] bytes = new byte[data.capacity()];
data.get(bytes);
String strData = new String(bytes);
Log.d(TAG, "Got msg: " + strData + " over " + dc);
}
});
} }
@Override @Override

View File

@ -52,6 +52,14 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
private String keyPrefDisplayHud; private String keyPrefDisplayHud;
private String keyPrefTracing; private String keyPrefTracing;
private String keyprefEnableDataChannel;
private String keyprefOrdered;
private String keyprefMaxRetransmitTimeMs;
private String keyprefMaxRetransmits;
private String keyprefDataProtocol;
private String keyprefNegotiated;
private String keyprefDataId;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -79,6 +87,14 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
keyprefEnableLevelControl = getString(R.string.pref_enable_level_control_key); keyprefEnableLevelControl = getString(R.string.pref_enable_level_control_key);
keyprefSpeakerphone = getString(R.string.pref_speakerphone_key); keyprefSpeakerphone = getString(R.string.pref_speakerphone_key);
keyprefEnableDataChannel = getString(R.string.pref_enable_datachannel_key);
keyprefOrdered = getString(R.string.pref_ordered_key);
keyprefMaxRetransmitTimeMs = getString(R.string.pref_max_retransmit_time_ms_key);
keyprefMaxRetransmits = getString(R.string.pref_max_retransmits_key);
keyprefDataProtocol = getString(R.string.pref_data_protocol_key);
keyprefNegotiated = getString(R.string.pref_negotiated_key);
keyprefDataId = getString(R.string.pref_data_id_key);
keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key); keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key);
keyPrefDisplayHud = getString(R.string.pref_displayhud_key); keyPrefDisplayHud = getString(R.string.pref_displayhud_key);
keyPrefTracing = getString(R.string.pref_tracing_key); keyPrefTracing = getString(R.string.pref_tracing_key);
@ -124,6 +140,15 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
updateSummaryB(sharedPreferences, keyprefEnableLevelControl); updateSummaryB(sharedPreferences, keyprefEnableLevelControl);
updateSummaryList(sharedPreferences, keyprefSpeakerphone); updateSummaryList(sharedPreferences, keyprefSpeakerphone);
updateSummaryB(sharedPreferences, keyprefEnableDataChannel);
updateSummaryB(sharedPreferences, keyprefOrdered);
updateSummary(sharedPreferences, keyprefMaxRetransmitTimeMs);
updateSummary(sharedPreferences, keyprefMaxRetransmits);
updateSummary(sharedPreferences, keyprefDataProtocol);
updateSummaryB(sharedPreferences, keyprefNegotiated);
updateSummary(sharedPreferences, keyprefDataId);
setDataChannelEnable(sharedPreferences);
updateSummary(sharedPreferences, keyPrefRoomServerUrl); updateSummary(sharedPreferences, keyPrefRoomServerUrl);
updateSummaryB(sharedPreferences, keyPrefDisplayHud); updateSummaryB(sharedPreferences, keyPrefDisplayHud);
updateSummaryB(sharedPreferences, keyPrefTracing); updateSummaryB(sharedPreferences, keyPrefTracing);
@ -182,7 +207,11 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
|| key.equals(keyPrefVideoCodec) || key.equals(keyPrefVideoCodec)
|| key.equals(keyprefStartAudioBitrateType) || key.equals(keyprefStartAudioBitrateType)
|| key.equals(keyPrefAudioCodec) || key.equals(keyPrefAudioCodec)
|| key.equals(keyPrefRoomServerUrl)) { || key.equals(keyPrefRoomServerUrl)
|| key.equals(keyprefMaxRetransmitTimeMs)
|| key.equals(keyprefMaxRetransmits)
|| key.equals(keyprefDataProtocol)
|| key.equals(keyprefDataId)) {
updateSummary(sharedPreferences, key); updateSummary(sharedPreferences, key);
} else if (key.equals(keyprefMaxVideoBitrateValue) } else if (key.equals(keyprefMaxVideoBitrateValue)
|| key.equals(keyprefStartAudioBitrateValue)) { || key.equals(keyprefStartAudioBitrateValue)) {
@ -201,7 +230,10 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
|| key.equals(keyprefDisableBuiltInAGC) || key.equals(keyprefDisableBuiltInAGC)
|| key.equals(keyprefDisableBuiltInNS) || key.equals(keyprefDisableBuiltInNS)
|| key.equals(keyprefEnableLevelControl) || key.equals(keyprefEnableLevelControl)
|| key.equals(keyPrefDisplayHud)) { || key.equals(keyPrefDisplayHud)
|| key.equals(keyprefEnableDataChannel)
|| key.equals(keyprefOrdered)
|| key.equals(keyprefNegotiated)) {
updateSummaryB(sharedPreferences, key); updateSummaryB(sharedPreferences, key);
} else if (key.equals(keyprefSpeakerphone)) { } else if (key.equals(keyprefSpeakerphone)) {
updateSummaryList(sharedPreferences, key); updateSummaryList(sharedPreferences, key);
@ -213,6 +245,9 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
if (key.equals(keyprefStartAudioBitrateType)) { if (key.equals(keyprefStartAudioBitrateType)) {
setAudioBitrateEnable(sharedPreferences); setAudioBitrateEnable(sharedPreferences);
} }
if (key.equals(keyprefEnableDataChannel)) {
setDataChannelEnable(sharedPreferences);
}
} }
private void updateSummary(SharedPreferences sharedPreferences, String key) { private void updateSummary(SharedPreferences sharedPreferences, String key) {
@ -263,4 +298,14 @@ public class SettingsActivity extends Activity implements OnSharedPreferenceChan
bitratePreferenceValue.setEnabled(true); bitratePreferenceValue.setEnabled(true);
} }
} }
private void setDataChannelEnable(SharedPreferences sharedPreferences) {
boolean enabled = sharedPreferences.getBoolean(keyprefEnableDataChannel, true);
settingsFragment.findPreference(keyprefOrdered).setEnabled(enabled);
settingsFragment.findPreference(keyprefMaxRetransmitTimeMs).setEnabled(enabled);
settingsFragment.findPreference(keyprefMaxRetransmits).setEnabled(enabled);
settingsFragment.findPreference(keyprefDataProtocol).setEnabled(enabled);
settingsFragment.findPreference(keyprefNegotiated).setEnabled(enabled);
settingsFragment.findPreference(keyprefDataId).setEnabled(enabled);
}
} }