/* * 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 en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration 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) { } }