blob: 761f96ce294e877b90030420f1970d69de02de7c [file] [log] [blame]
/*
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
package org.webrtc.webrtcdemo;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class SettingsMenuFragment extends Fragment
implements RadioGroup.OnCheckedChangeListener {
private String TAG;
private MenuStateProvider stateProvider;
EditText etRemoteIp;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.settingsmenu, container, false);
TAG = getResources().getString(R.string.tag);
CheckBox cbAudio = (CheckBox) v.findViewById(R.id.cbAudio);
cbAudio.setChecked(getEngine().audioEnabled());
cbAudio.setOnClickListener(new View.OnClickListener() {
public void onClick(View checkBox) {
CheckBox cbAudio = (CheckBox) checkBox;
getEngine().setAudio(cbAudio.isChecked());
cbAudio.setChecked(getEngine().audioEnabled());
}
});
boolean loopback =
getResources().getBoolean(R.bool.loopback_enabled_default);
CheckBox cbLoopback = (CheckBox) v.findViewById(R.id.cbLoopback);
cbLoopback.setChecked(loopback);
cbLoopback.setOnClickListener(new View.OnClickListener() {
public void onClick(View checkBox) {
loopbackChanged((CheckBox) checkBox);
}
});
etRemoteIp = (EditText) v.findViewById(R.id.etRemoteIp);
etRemoteIp.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View editText, boolean hasFocus) {
if (!hasFocus) {
getEngine().setRemoteIp(etRemoteIp.getText().toString());
}
}
});
// Has to be after remote IP as loopback changes it.
loopbackChanged(cbLoopback);
return v;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception.
try {
stateProvider = (MenuStateProvider) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity +
" must implement MenuStateProvider");
}
}
private void loopbackChanged(CheckBox cbLoopback) {
boolean loopback = cbLoopback.isChecked();
etRemoteIp.setText(loopback ? getLoopbackIPString() : getLocalIpAddress());
getEngine().setRemoteIp(etRemoteIp.getText().toString());
}
private String getLoopbackIPString() {
return getResources().getString(R.string.loopbackIp);
}
private String getLocalIpAddress() {
String localIp = "";
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr =
intf.getInetAddresses();
enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
// Set the remote ip address the same as
// the local ip address of the last netif
localIp = inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException e) {
Log.e(TAG, "Unable to get local IP address. Not the end of the world", e);
}
return localIp;
}
private MediaEngine getEngine() {
return stateProvider.getEngine();
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
}
}