ConnectActivity.java revision e3fccd4268d8e46c737f27a431c1dd263f312395
17bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org/* 27bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2014 Google Inc. 47bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 57bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * Redistribution and use in source and binary forms, with or without 67bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * modification, are permitted provided that the following conditions are met: 77bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 87bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 97bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * this list of conditions and the following disclaimer. 107bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 117bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * this list of conditions and the following disclaimer in the documentation 127bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * and/or other materials provided with the distribution. 137bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 3. The name of the author may not be used to endorse or promote products 147bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * derived from this software without specific prior written permission. 157bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 167bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 177bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 187bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 197bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 207bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 217bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 227bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 237bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 247bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 257bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 267bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org */ 277bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 287bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgpackage org.appspot.apprtc; 297bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 307bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.app.Activity; 317bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.app.AlertDialog; 327bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.content.DialogInterface; 337bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.content.Intent; 34243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.content.SharedPreferences; 357bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.net.Uri; 367bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.os.Bundle; 37243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.preference.PreferenceManager; 38243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.util.Log; 397bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.KeyEvent; 40243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.view.Menu; 41243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.view.MenuItem; 427bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.View; 437bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.View.OnClickListener; 447bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.inputmethod.EditorInfo; 457bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.webkit.URLUtil; 465f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.AdapterView; 475f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.ArrayAdapter; 487bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.widget.EditText; 495f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.ImageButton; 505f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.ListView; 517bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.widget.TextView; 527bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 535f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport org.json.JSONArray; 545f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport org.json.JSONException; 55470988742a2ad2edbeba3a99b86481b4fb0cd0d3perkj@webrtc.org 565eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.orgimport java.util.ArrayList; 575eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.orgimport java.util.Random; 585f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 597bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org/** 607bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * Handles the initial setup where the user selects which room to join. 617bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org */ 627bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgpublic class ConnectActivity extends Activity { 635eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org private static final String TAG = "ConnectActivity"; 645eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org private static final int CONNECTION_REQUEST = 1; 65369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org private static boolean commandLineRun = false; 666f6ef72950b9bda79392e83d7b1495d4ff07b4a2henrik.lundin@webrtc.org 675f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton addRoomButton; 685f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton removeRoomButton; 695f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton connectButton; 705f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton connectLoopbackButton; 717bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org private EditText roomEditText; 725f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ListView roomListView; 73243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org private SharedPreferences sharedPref; 74e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefVideoCallEnabled; 75243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org private String keyprefResolution; 765f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private String keyprefFps; 77e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefVideoBitrateType; 78e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefVideoBitrateValue; 7944ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org private String keyprefVideoCodec; 80e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefAudioBitrateType; 81e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefAudioBitrateValue; 82e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefAudioCodec; 8344ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org private String keyprefHwCodecAcceleration; 842176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org private String keyprefCpuUsageDetection; 85bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org private String keyprefDisplayHud; 86a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org private String keyprefRoomServerUrl; 87243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org private String keyprefRoom; 885f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private String keyprefRoomList; 895f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ArrayList<String> roomList; 905f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ArrayAdapter<String> adapter; 917bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 927bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org @Override 937bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org public void onCreate(Bundle savedInstanceState) { 947bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org super.onCreate(savedInstanceState); 957bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 96243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org // Get setting keys. 97243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 98243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 99e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoCallEnabled = getString(R.string.pref_videocall_key); 100243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org keyprefResolution = getString(R.string.pref_resolution_key); 1015f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org keyprefFps = getString(R.string.pref_fps_key); 102e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoBitrateType = getString(R.string.pref_startvideobitrate_key); 103e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoBitrateValue = getString(R.string.pref_startvideobitratevalue_key); 10444ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org keyprefVideoCodec = getString(R.string.pref_videocodec_key); 10544ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org keyprefHwCodecAcceleration = getString(R.string.pref_hwcodec_key); 106e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioBitrateType = getString(R.string.pref_startaudiobitrate_key); 107e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key); 108e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioCodec = getString(R.string.pref_audiocodec_key); 1092176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org keyprefCpuUsageDetection = getString(R.string.pref_cpu_usage_detection_key); 110bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org keyprefDisplayHud = getString(R.string.pref_displayhud_key); 111a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key); 112243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org keyprefRoom = getString(R.string.pref_room_key); 1135f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org keyprefRoomList = getString(R.string.pref_room_list_key); 114243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 1157bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org setContentView(R.layout.activity_connect); 1167bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 1177bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org roomEditText = (EditText) findViewById(R.id.room_edittext); 1187bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org roomEditText.setOnEditorActionListener( 119edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org new TextView.OnEditorActionListener() { 120edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org @Override 121edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org public boolean onEditorAction( 122edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org TextView textView, int i, KeyEvent keyEvent) { 123edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org if (i == EditorInfo.IME_ACTION_DONE) { 124edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org addRoomButton.performClick(); 125edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org return true; 1267bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 127edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org return false; 128edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 1297bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org }); 1307bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org roomEditText.requestFocus(); 1317bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 1325f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView = (ListView) findViewById(R.id.room_listview); 1335f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 134470988742a2ad2edbeba3a99b86481b4fb0cd0d3perkj@webrtc.org 1355f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org addRoomButton = (ImageButton) findViewById(R.id.add_room_button); 1365f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org addRoomButton.setOnClickListener(addRoomListener); 1375f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org removeRoomButton = (ImageButton) findViewById(R.id.remove_room_button); 1385f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org removeRoomButton.setOnClickListener(removeRoomListener); 1395f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectButton = (ImageButton) findViewById(R.id.connect_button); 1405f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectButton.setOnClickListener(connectListener); 1415f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectLoopbackButton = 1425f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org (ImageButton) findViewById(R.id.connect_loopback_button); 1435f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectLoopbackButton.setOnClickListener(connectListener); 144edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org 145edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org // If an implicit VIEW intent is launching the app, go directly to that URL. 146edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org final Intent intent = getIntent(); 1475eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org if ("android.intent.action.VIEW".equals(intent.getAction()) 1485eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org && !commandLineRun) { 149edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org commandLineRun = true; 150bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org boolean loopback = intent.getBooleanExtra( 151bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org CallActivity.EXTRA_LOOPBACK, false); 152bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int runTimeMs = intent.getIntExtra( 153bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org CallActivity.EXTRA_RUNTIME, 0); 154369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String room = sharedPref.getString(keyprefRoom, ""); 155369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org roomEditText.setText(room); 156369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org connectToRoom(loopback, runTimeMs); 157edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org return; 158edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 1597bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 1607bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 161243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 162243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public boolean onCreateOptionsMenu(Menu menu) { 163243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org getMenuInflater().inflate(R.menu.connect_menu, menu); 164243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org return true; 165243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 166243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 167243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 168243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public boolean onOptionsItemSelected(MenuItem item) { 169243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org // Handle presses on the action bar items. 170243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org if (item.getItemId() == R.id.action_settings) { 171243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org Intent intent = new Intent(this, SettingsActivity.class); 172243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org startActivity(intent); 173243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org return true; 174243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } else { 175243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org return super.onOptionsItemSelected(item); 176243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 177243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 178243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 179243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 180243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public void onPause() { 181243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org super.onPause(); 182243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org String room = roomEditText.getText().toString(); 1835f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String roomListJson = new JSONArray(roomList).toString(); 184243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org SharedPreferences.Editor editor = sharedPref.edit(); 185243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org editor.putString(keyprefRoom, room); 1865f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org editor.putString(keyprefRoomList, roomListJson); 187243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org editor.commit(); 188243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 189243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 190243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 191243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public void onResume() { 192243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org super.onResume(); 193243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org String room = sharedPref.getString(keyprefRoom, ""); 194243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org roomEditText.setText(room); 1955f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomList = new ArrayList<String>(); 1965f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String roomListJson = sharedPref.getString(keyprefRoomList, null); 1975f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (roomListJson != null) { 1985f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org try { 1995f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org JSONArray jsonArray = new JSONArray(roomListJson); 2005f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org for (int i = 0; i < jsonArray.length(); i++) { 2015f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomList.add(jsonArray.get(i).toString()); 2025f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 2035f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } catch (JSONException e) { 2045f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org Log.e(TAG, "Failed to load room list: " + e.toString()); 2055f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 2065f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 2075f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter = new ArrayAdapter<String>( 2085f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org this, android.R.layout.simple_list_item_1, roomList); 2095f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.setAdapter(adapter); 2105f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (adapter.getCount() > 0) { 2115f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.requestFocus(); 2125f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.setItemChecked(0, true); 2135f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 214243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 215243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 216edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org @Override 217edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org protected void onActivityResult( 218edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org int requestCode, int resultCode, Intent data) { 219edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org if (requestCode == CONNECTION_REQUEST && commandLineRun) { 220edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org Log.d(TAG, "Return: " + resultCode); 221edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org setResult(resultCode); 222bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org commandLineRun = false; 223edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org finish(); 224edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 225edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 226edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org 2275f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private final OnClickListener connectListener = new OnClickListener() { 2285f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org @Override 2295f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org public void onClick(View view) { 2305f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org boolean loopback = false; 2315f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (view.getId() == R.id.connect_loopback_button) { 2325f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org loopback = true; 2335f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 234369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org commandLineRun = false; 235369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org connectToRoom(loopback, 0); 236369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 237369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org }; 238369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 239369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org private void connectToRoom(boolean loopback, int runTimeMs) { 240369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Get room name (random for loopback). 241bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org String roomId; 242369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (loopback) { 243bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org roomId = Integer.toString((new Random()).nextInt(100000000)); 244369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } else { 245bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org roomId = getSelectedItem(); 246bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org if (roomId == null) { 247bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org roomId = roomEditText.getText().toString(); 2486f6ef72950b9bda79392e83d7b1495d4ff07b4a2henrik.lundin@webrtc.org } 249369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 250369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 251bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org String roomUrl = sharedPref.getString( 252a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org keyprefRoomServerUrl, 253a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org getString(R.string.pref_room_server_url_default)); 254369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 255e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org // Video call enabled flag. 256e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org boolean videoCallEnabled = sharedPref.getBoolean(keyprefVideoCallEnabled, 257e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org Boolean.valueOf(getString(R.string.pref_videocall_default))); 258e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org 259e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org // Get default codecs. 26044ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org String videoCodec = sharedPref.getString(keyprefVideoCodec, 26144ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org getString(R.string.pref_videocodec_default)); 262e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String audioCodec = sharedPref.getString(keyprefAudioCodec, 263e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org getString(R.string.pref_audiocodec_default)); 26444ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org 265369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Check HW codec flag. 26644ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org boolean hwCodec = sharedPref.getBoolean(keyprefHwCodecAcceleration, 267369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Boolean.valueOf(getString(R.string.pref_hwcodec_default))); 268369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 269bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org // Get video resolution from settings. 270bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int videoWidth = 0; 271bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int videoHeight = 0; 272369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String resolution = sharedPref.getString(keyprefResolution, 273369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org getString(R.string.pref_resolution_default)); 274369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String[] dimensions = resolution.split("[ x]+"); 275369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (dimensions.length == 2) { 276369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org try { 277bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoWidth = Integer.parseInt(dimensions[0]); 278bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoHeight = Integer.parseInt(dimensions[1]); 279369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } catch (NumberFormatException e) { 280bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoWidth = 0; 281bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoHeight = 0; 282369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Log.e(TAG, "Wrong video resolution setting: " + resolution); 2835f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 284369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 285369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 286bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org // Get camera fps from settings. 287bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int cameraFps = 0; 288369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String fps = sharedPref.getString(keyprefFps, 289369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org getString(R.string.pref_fps_default)); 290369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String[] fpsValues = fps.split("[ x]+"); 291369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (fpsValues.length == 2) { 292369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org try { 293bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org cameraFps = Integer.parseInt(fpsValues[0]); 294369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } catch (NumberFormatException e) { 295369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Log.e(TAG, "Wrong camera fps setting: " + fps); 2965f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 297369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 298369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 299e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org // Get video and audio start bitrate. 300e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org int videoStartBitrate = 0; 301e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String bitrateTypeDefault = getString( 302e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org R.string.pref_startvideobitrate_default); 303369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String bitrateType = sharedPref.getString( 304e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoBitrateType, bitrateTypeDefault); 305e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org if (!bitrateType.equals(bitrateTypeDefault)) { 306e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String bitrateValue = sharedPref.getString(keyprefVideoBitrateValue, 307e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org getString(R.string.pref_startvideobitratevalue_default)); 308e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org videoStartBitrate = Integer.parseInt(bitrateValue); 309e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org } 310e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org int audioStartBitrate = 0; 311e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org bitrateTypeDefault = getString(R.string.pref_startaudiobitrate_default); 312e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org bitrateType = sharedPref.getString( 313e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioBitrateType, bitrateTypeDefault); 314369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (!bitrateType.equals(bitrateTypeDefault)) { 315e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String bitrateValue = sharedPref.getString(keyprefAudioBitrateValue, 316e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org getString(R.string.pref_startaudiobitratevalue_default)); 317e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org audioStartBitrate = Integer.parseInt(bitrateValue); 318369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 319369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 320369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Test if CpuOveruseDetection should be disabled. By default is on. 321369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org boolean cpuOveruseDetection = sharedPref.getBoolean( 322369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org keyprefCpuUsageDetection, 323369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Boolean.valueOf( 324369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org getString(R.string.pref_cpu_usage_detection_default))); 325bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org 326bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org // Check statistics display option. 327bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org boolean displayHud = sharedPref.getBoolean(keyprefDisplayHud, 328bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Boolean.valueOf(getString(R.string.pref_displayhud_default))); 329369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 330369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Start AppRTCDemo activity. 331bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Log.d(TAG, "Connecting to room " + roomId + " at URL " + roomUrl); 332bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org if (validateUrl(roomUrl)) { 333bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Uri uri = Uri.parse(roomUrl); 334bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Intent intent = new Intent(this, CallActivity.class); 335369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org intent.setData(uri); 336bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_ROOMID, roomId); 337bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_LOOPBACK, loopback); 338e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_CALL, videoCallEnabled); 339bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_WIDTH, videoWidth); 340bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_HEIGHT, videoHeight); 341bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_FPS, cameraFps); 342e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_BITRATE, videoStartBitrate); 343e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEOCODEC, videoCodec); 344e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_HWCODEC_ENABLED, hwCodec); 345e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_AUDIO_BITRATE, audioStartBitrate); 346e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_AUDIOCODEC, audioCodec); 347bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_CPUOVERUSE_DETECTION, 348bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org cpuOveruseDetection); 349bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_DISPLAY_HUD, displayHud); 350bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_CMDLINE, commandLineRun); 351bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_RUNTIME, runTimeMs); 352bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org 353edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org startActivityForResult(intent, CONNECTION_REQUEST); 3547bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3557bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3567bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 3577bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org private boolean validateUrl(String url) { 3585eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org if (URLUtil.isHttpsUrl(url) || URLUtil.isHttpUrl(url)) { 3597bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org return true; 3605eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org } 3617bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 3627bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org new AlertDialog.Builder(this) 3637bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setTitle(getText(R.string.invalid_url_title)) 3647bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setMessage(getString(R.string.invalid_url_text, url)) 3657bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setCancelable(false) 3667bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() { 3677bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org public void onClick(DialogInterface dialog, int id) { 3687bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org dialog.cancel(); 3697bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3707bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org }).create().show(); 3717bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org return false; 3727bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3735f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 3745f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private final OnClickListener addRoomListener = new OnClickListener() { 3755f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org @Override 3765f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org public void onClick(View view) { 3775f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String newRoom = roomEditText.getText().toString(); 3785f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (newRoom.length() > 0 && !roomList.contains(newRoom)) { 3795f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.add(newRoom); 3805f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.notifyDataSetChanged(); 3815f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 3825f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 3835f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org }; 3845f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 3855f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private final OnClickListener removeRoomListener = new OnClickListener() { 3865f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org @Override 3875f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org public void onClick(View view) { 3885f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String selectedRoom = getSelectedItem(); 3895f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (selectedRoom != null) { 3905f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.remove(selectedRoom); 3915f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.notifyDataSetChanged(); 3925f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 3935f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 3945f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org }; 3955f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 3965f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private String getSelectedItem() { 3975f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org int position = AdapterView.INVALID_POSITION; 3985f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (roomListView.getCheckedItemCount() > 0 && adapter.getCount() > 0) { 3995f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org position = roomListView.getCheckedItemPosition(); 4005f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (position >= adapter.getCount()) { 4015f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org position = AdapterView.INVALID_POSITION; 4025f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4035f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4045f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (position != AdapterView.INVALID_POSITION) { 4055f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org return adapter.getItem(position); 4065f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } else { 4075f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org return null; 4085f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4095f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4105f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 4117bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org} 412