17bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org/* 2a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * Copyright 2014 The WebRTC Project Authors. All rights reserved. 37bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * 4a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * Use of this source code is governed by a BSD-style license 5a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * that can be found in the LICENSE file in the root of the source 6a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * tree. An additional intellectual property rights grant can be found 7a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * in the file PATENTS. All contributing project authors may 8a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * be found in the AUTHORS file in the root of the source tree. 97bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org */ 107bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 117bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgpackage org.appspot.apprtc; 127bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 137bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.app.Activity; 147bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.app.AlertDialog; 157bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.content.DialogInterface; 167bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.content.Intent; 17243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.content.SharedPreferences; 187bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.net.Uri; 197bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.os.Bundle; 20243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.preference.PreferenceManager; 21243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.util.Log; 227bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.KeyEvent; 23243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.view.Menu; 24243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.view.MenuItem; 257bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.View; 267bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.View.OnClickListener; 277bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.view.inputmethod.EditorInfo; 287bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.webkit.URLUtil; 295f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.AdapterView; 305f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.ArrayAdapter; 317bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.widget.EditText; 325f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.ImageButton; 335f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport android.widget.ListView; 347bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgimport android.widget.TextView; 357bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 365f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport org.json.JSONArray; 375f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.orgimport org.json.JSONException; 38470988742a2ad2edbeba3a99b86481b4fb0cd0d3perkj@webrtc.org 395eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.orgimport java.util.ArrayList; 405eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.orgimport java.util.Random; 415f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 427bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org/** 437bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org * Handles the initial setup where the user selects which room to join. 447bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org */ 457bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.orgpublic class ConnectActivity extends Activity { 465eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org private static final String TAG = "ConnectActivity"; 475eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org private static final int CONNECTION_REQUEST = 1; 48369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org private static boolean commandLineRun = false; 496f6ef72950b9bda79392e83d7b1495d4ff07b4a2henrik.lundin@webrtc.org 505f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton addRoomButton; 515f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton removeRoomButton; 525f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton connectButton; 535f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ImageButton connectLoopbackButton; 547bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org private EditText roomEditText; 555f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ListView roomListView; 56243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org private SharedPreferences sharedPref; 57e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefVideoCallEnabled; 58243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org private String keyprefResolution; 595f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private String keyprefFps; 6067e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert private String keyprefCaptureQualitySlider; 61e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefVideoBitrateType; 62e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefVideoBitrateValue; 6344ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org private String keyprefVideoCodec; 64e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefAudioBitrateType; 65e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefAudioBitrateValue; 66e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org private String keyprefAudioCodec; 6744ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org private String keyprefHwCodecAcceleration; 68d48015364d1a3545ea503ce03ec49762a480d42cPer private String keyprefCaptureToTexture; 698a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom private String keyprefNoAudioProcessingPipeline; 700b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs private String keyprefAecDump; 71e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev private String keyprefOpenSLES; 72bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org private String keyprefDisplayHud; 736f28cf0b951a9d41246f022f48a6cd035fad151dPeter Boström private String keyprefTracing; 74a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org private String keyprefRoomServerUrl; 75243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org private String keyprefRoom; 765f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private String keyprefRoomList; 775f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ArrayList<String> roomList; 785f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private ArrayAdapter<String> adapter; 797bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 807bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org @Override 817bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org public void onCreate(Bundle savedInstanceState) { 827bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org super.onCreate(savedInstanceState); 837bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 84243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org // Get setting keys. 85243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 86243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 87e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoCallEnabled = getString(R.string.pref_videocall_key); 88243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org keyprefResolution = getString(R.string.pref_resolution_key); 895f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org keyprefFps = getString(R.string.pref_fps_key); 9067e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert keyprefCaptureQualitySlider = getString(R.string.pref_capturequalityslider_key); 91e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoBitrateType = getString(R.string.pref_startvideobitrate_key); 92e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoBitrateValue = getString(R.string.pref_startvideobitratevalue_key); 9344ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org keyprefVideoCodec = getString(R.string.pref_videocodec_key); 9444ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org keyprefHwCodecAcceleration = getString(R.string.pref_hwcodec_key); 95d48015364d1a3545ea503ce03ec49762a480d42cPer keyprefCaptureToTexture = getString(R.string.pref_capturetotexture_key); 96e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioBitrateType = getString(R.string.pref_startaudiobitrate_key); 97e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key); 98e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioCodec = getString(R.string.pref_audiocodec_key); 998a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom keyprefNoAudioProcessingPipeline = getString(R.string.pref_noaudioprocessing_key); 1000b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs keyprefAecDump = getString(R.string.pref_aecdump_key); 101e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev keyprefOpenSLES = getString(R.string.pref_opensles_key); 102bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org keyprefDisplayHud = getString(R.string.pref_displayhud_key); 1036f28cf0b951a9d41246f022f48a6cd035fad151dPeter Boström keyprefTracing = getString(R.string.pref_tracing_key); 104a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org keyprefRoomServerUrl = getString(R.string.pref_room_server_url_key); 105243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org keyprefRoom = getString(R.string.pref_room_key); 1065f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org keyprefRoomList = getString(R.string.pref_room_list_key); 107243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 1087bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org setContentView(R.layout.activity_connect); 1097bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 1107bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org roomEditText = (EditText) findViewById(R.id.room_edittext); 1117bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org roomEditText.setOnEditorActionListener( 112edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org new TextView.OnEditorActionListener() { 113edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org @Override 114edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org public boolean onEditorAction( 115edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org TextView textView, int i, KeyEvent keyEvent) { 116edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org if (i == EditorInfo.IME_ACTION_DONE) { 117edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org addRoomButton.performClick(); 118edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org return true; 1197bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 120edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org return false; 121edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 1227bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org }); 1237bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org roomEditText.requestFocus(); 1247bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 1255f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView = (ListView) findViewById(R.id.room_listview); 1265f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 127470988742a2ad2edbeba3a99b86481b4fb0cd0d3perkj@webrtc.org 1285f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org addRoomButton = (ImageButton) findViewById(R.id.add_room_button); 1295f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org addRoomButton.setOnClickListener(addRoomListener); 1305f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org removeRoomButton = (ImageButton) findViewById(R.id.remove_room_button); 1315f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org removeRoomButton.setOnClickListener(removeRoomListener); 1325f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectButton = (ImageButton) findViewById(R.id.connect_button); 1335f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectButton.setOnClickListener(connectListener); 1345f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectLoopbackButton = 1355f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org (ImageButton) findViewById(R.id.connect_loopback_button); 1365f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org connectLoopbackButton.setOnClickListener(connectListener); 137edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org 138edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org // If an implicit VIEW intent is launching the app, go directly to that URL. 139edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org final Intent intent = getIntent(); 1405eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org if ("android.intent.action.VIEW".equals(intent.getAction()) 1415eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org && !commandLineRun) { 142edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org commandLineRun = true; 143bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org boolean loopback = intent.getBooleanExtra( 144bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org CallActivity.EXTRA_LOOPBACK, false); 145bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int runTimeMs = intent.getIntExtra( 146bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org CallActivity.EXTRA_RUNTIME, 0); 147369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String room = sharedPref.getString(keyprefRoom, ""); 148369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org roomEditText.setText(room); 149369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org connectToRoom(loopback, runTimeMs); 150edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org return; 151edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 1527bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 1537bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 154243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 155243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public boolean onCreateOptionsMenu(Menu menu) { 156243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org getMenuInflater().inflate(R.menu.connect_menu, menu); 157243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org return true; 158243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 159243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 160243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 161243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public boolean onOptionsItemSelected(MenuItem item) { 162243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org // Handle presses on the action bar items. 163243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org if (item.getItemId() == R.id.action_settings) { 164243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org Intent intent = new Intent(this, SettingsActivity.class); 165243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org startActivity(intent); 166243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org return true; 167243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } else { 168243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org return super.onOptionsItemSelected(item); 169243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 170243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 171243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 172243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 173243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public void onPause() { 174243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org super.onPause(); 175243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org String room = roomEditText.getText().toString(); 1765f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String roomListJson = new JSONArray(roomList).toString(); 177243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org SharedPreferences.Editor editor = sharedPref.edit(); 178243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org editor.putString(keyprefRoom, room); 1795f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org editor.putString(keyprefRoomList, roomListJson); 180243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org editor.commit(); 181243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 182243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 183243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org @Override 184243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org public void onResume() { 185243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org super.onResume(); 186243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org String room = sharedPref.getString(keyprefRoom, ""); 187243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org roomEditText.setText(room); 1885f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomList = new ArrayList<String>(); 1895f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String roomListJson = sharedPref.getString(keyprefRoomList, null); 1905f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (roomListJson != null) { 1915f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org try { 1925f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org JSONArray jsonArray = new JSONArray(roomListJson); 1935f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org for (int i = 0; i < jsonArray.length(); i++) { 1945f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomList.add(jsonArray.get(i).toString()); 1955f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 1965f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } catch (JSONException e) { 1975f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org Log.e(TAG, "Failed to load room list: " + e.toString()); 1985f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 1995f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 2005f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter = new ArrayAdapter<String>( 2015f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org this, android.R.layout.simple_list_item_1, roomList); 2025f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.setAdapter(adapter); 2035f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (adapter.getCount() > 0) { 2045f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.requestFocus(); 2055f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org roomListView.setItemChecked(0, true); 2065f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 207243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org } 208243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org 209edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org @Override 210edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org protected void onActivityResult( 211edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org int requestCode, int resultCode, Intent data) { 212edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org if (requestCode == CONNECTION_REQUEST && commandLineRun) { 213edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org Log.d(TAG, "Return: " + resultCode); 214edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org setResult(resultCode); 215bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org commandLineRun = false; 216edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org finish(); 217edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 218edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org } 219edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org 2205f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private final OnClickListener connectListener = new OnClickListener() { 2215f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org @Override 2225f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org public void onClick(View view) { 2235f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org boolean loopback = false; 2245f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (view.getId() == R.id.connect_loopback_button) { 2255f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org loopback = true; 2265f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 227369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org commandLineRun = false; 228369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org connectToRoom(loopback, 0); 229369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 230369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org }; 231369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 232369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org private void connectToRoom(boolean loopback, int runTimeMs) { 233369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Get room name (random for loopback). 234bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org String roomId; 235369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (loopback) { 236bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org roomId = Integer.toString((new Random()).nextInt(100000000)); 237369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } else { 238bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org roomId = getSelectedItem(); 239bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org if (roomId == null) { 240bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org roomId = roomEditText.getText().toString(); 2416f6ef72950b9bda79392e83d7b1495d4ff07b4a2henrik.lundin@webrtc.org } 242369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 243369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 244bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org String roomUrl = sharedPref.getString( 245a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org keyprefRoomServerUrl, 246a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org getString(R.string.pref_room_server_url_default)); 247369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 248e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org // Video call enabled flag. 249e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org boolean videoCallEnabled = sharedPref.getBoolean(keyprefVideoCallEnabled, 250e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org Boolean.valueOf(getString(R.string.pref_videocall_default))); 251e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org 252e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org // Get default codecs. 25344ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org String videoCodec = sharedPref.getString(keyprefVideoCodec, 25444ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org getString(R.string.pref_videocodec_default)); 255e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String audioCodec = sharedPref.getString(keyprefAudioCodec, 256e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org getString(R.string.pref_audiocodec_default)); 25744ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org 258369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Check HW codec flag. 25944ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org boolean hwCodec = sharedPref.getBoolean(keyprefHwCodecAcceleration, 260369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Boolean.valueOf(getString(R.string.pref_hwcodec_default))); 261369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 262d48015364d1a3545ea503ce03ec49762a480d42cPer // Check Capture to texture. 263d48015364d1a3545ea503ce03ec49762a480d42cPer boolean captureToTexture = sharedPref.getBoolean(keyprefCaptureToTexture, 264d48015364d1a3545ea503ce03ec49762a480d42cPer Boolean.valueOf(getString(R.string.pref_capturetotexture_default))); 265d48015364d1a3545ea503ce03ec49762a480d42cPer 2668a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom // Check Disable Audio Processing flag. 2678a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom boolean noAudioProcessing = sharedPref.getBoolean( 2688a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom keyprefNoAudioProcessingPipeline, 2698a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom Boolean.valueOf(getString(R.string.pref_noaudioprocessing_default))); 2708a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom 2710b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs // Check Disable Audio Processing flag. 2720b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs boolean aecDump = sharedPref.getBoolean( 2730b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs keyprefAecDump, 2740b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs Boolean.valueOf(getString(R.string.pref_aecdump_default))); 2750b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs 276e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev // Check OpenSL ES enabled flag. 277e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev boolean useOpenSLES = sharedPref.getBoolean( 278e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev keyprefOpenSLES, 279e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev Boolean.valueOf(getString(R.string.pref_opensles_default))); 280e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev 281bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org // Get video resolution from settings. 282bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int videoWidth = 0; 283bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int videoHeight = 0; 284369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String resolution = sharedPref.getString(keyprefResolution, 285369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org getString(R.string.pref_resolution_default)); 286369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String[] dimensions = resolution.split("[ x]+"); 287369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (dimensions.length == 2) { 288369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org try { 289bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoWidth = Integer.parseInt(dimensions[0]); 290bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoHeight = Integer.parseInt(dimensions[1]); 291369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } catch (NumberFormatException e) { 292bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoWidth = 0; 293bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org videoHeight = 0; 294369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Log.e(TAG, "Wrong video resolution setting: " + resolution); 2955f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 296369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 297369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 298bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org // Get camera fps from settings. 299bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org int cameraFps = 0; 300369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String fps = sharedPref.getString(keyprefFps, 301369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org getString(R.string.pref_fps_default)); 302369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String[] fpsValues = fps.split("[ x]+"); 303369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (fpsValues.length == 2) { 304369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org try { 305bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org cameraFps = Integer.parseInt(fpsValues[0]); 306369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } catch (NumberFormatException e) { 307369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org Log.e(TAG, "Wrong camera fps setting: " + fps); 3085f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 309369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 310369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 31167e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert // Check capture quality slider flag. 31267e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert boolean captureQualitySlider = sharedPref.getBoolean(keyprefCaptureQualitySlider, 31367e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert Boolean.valueOf(getString(R.string.pref_capturequalityslider_default))); 31467e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert 315e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org // Get video and audio start bitrate. 316e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org int videoStartBitrate = 0; 317e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String bitrateTypeDefault = getString( 318e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org R.string.pref_startvideobitrate_default); 319369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org String bitrateType = sharedPref.getString( 320e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefVideoBitrateType, bitrateTypeDefault); 321e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org if (!bitrateType.equals(bitrateTypeDefault)) { 322e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String bitrateValue = sharedPref.getString(keyprefVideoBitrateValue, 323e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org getString(R.string.pref_startvideobitratevalue_default)); 324e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org videoStartBitrate = Integer.parseInt(bitrateValue); 325e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org } 326e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org int audioStartBitrate = 0; 327e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org bitrateTypeDefault = getString(R.string.pref_startaudiobitrate_default); 328e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org bitrateType = sharedPref.getString( 329e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org keyprefAudioBitrateType, bitrateTypeDefault); 330369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org if (!bitrateType.equals(bitrateTypeDefault)) { 331e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org String bitrateValue = sharedPref.getString(keyprefAudioBitrateValue, 332e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org getString(R.string.pref_startaudiobitratevalue_default)); 333e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org audioStartBitrate = Integer.parseInt(bitrateValue); 334369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org } 335369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 336bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org // Check statistics display option. 337bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org boolean displayHud = sharedPref.getBoolean(keyprefDisplayHud, 338bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Boolean.valueOf(getString(R.string.pref_displayhud_default))); 339369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org 3406f28cf0b951a9d41246f022f48a6cd035fad151dPeter Boström boolean tracing = sharedPref.getBoolean( 3416f28cf0b951a9d41246f022f48a6cd035fad151dPeter Boström keyprefTracing, Boolean.valueOf(getString(R.string.pref_tracing_default))); 3426f28cf0b951a9d41246f022f48a6cd035fad151dPeter Boström 343369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org // Start AppRTCDemo activity. 344bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Log.d(TAG, "Connecting to room " + roomId + " at URL " + roomUrl); 345bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org if (validateUrl(roomUrl)) { 346bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Uri uri = Uri.parse(roomUrl); 347bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org Intent intent = new Intent(this, CallActivity.class); 348369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org intent.setData(uri); 349bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_ROOMID, roomId); 350bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_LOOPBACK, loopback); 351e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_CALL, videoCallEnabled); 352bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_WIDTH, videoWidth); 353bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_HEIGHT, videoHeight); 354bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_FPS, cameraFps); 35567e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert intent.putExtra(CallActivity.EXTRA_VIDEO_CAPTUREQUALITYSLIDER_ENABLED, 35667e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert captureQualitySlider); 357e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEO_BITRATE, videoStartBitrate); 358e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_VIDEOCODEC, videoCodec); 359e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_HWCODEC_ENABLED, hwCodec); 360d48015364d1a3545ea503ce03ec49762a480d42cPer intent.putExtra(CallActivity.EXTRA_CAPTURETOTEXTURE_ENABLED, captureToTexture); 3618a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom intent.putExtra(CallActivity.EXTRA_NOAUDIOPROCESSING_ENABLED, 3628a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom noAudioProcessing); 3630b0a88b918062ee50a36a8e8b5d7f0cc040046fbaluebs intent.putExtra(CallActivity.EXTRA_AECDUMP_ENABLED, aecDump); 364e66339296b3d2a3f077bf96a7c221c18d96ae630glaznev intent.putExtra(CallActivity.EXTRA_OPENSLES_ENABLED, useOpenSLES); 365e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_AUDIO_BITRATE, audioStartBitrate); 366e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_AUDIOCODEC, audioCodec); 367bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_DISPLAY_HUD, displayHud); 3686f28cf0b951a9d41246f022f48a6cd035fad151dPeter Boström intent.putExtra(CallActivity.EXTRA_TRACING, tracing); 369bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_CMDLINE, commandLineRun); 370bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org intent.putExtra(CallActivity.EXTRA_RUNTIME, runTimeMs); 371bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org 372edc6e57a92d2b366871f4c2d2e926748326017b9glaznev@webrtc.org startActivityForResult(intent, CONNECTION_REQUEST); 3737bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3747bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3757bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 3767bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org private boolean validateUrl(String url) { 3775eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org if (URLUtil.isHttpsUrl(url) || URLUtil.isHttpUrl(url)) { 3787bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org return true; 3795eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org } 3807bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org 3817bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org new AlertDialog.Builder(this) 3827bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setTitle(getText(R.string.invalid_url_title)) 3837bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setMessage(getString(R.string.invalid_url_text, url)) 3847bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setCancelable(false) 3857bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org .setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() { 3867bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org public void onClick(DialogInterface dialog, int id) { 3877bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org dialog.cancel(); 3887bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3897bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org }).create().show(); 3907bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org return false; 3917bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org } 3925f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 3935f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private final OnClickListener addRoomListener = new OnClickListener() { 3945f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org @Override 3955f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org public void onClick(View view) { 3965f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String newRoom = roomEditText.getText().toString(); 3975f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (newRoom.length() > 0 && !roomList.contains(newRoom)) { 3985f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.add(newRoom); 3995f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.notifyDataSetChanged(); 4005f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4015f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4025f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org }; 4035f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 4045f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private final OnClickListener removeRoomListener = new OnClickListener() { 4055f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org @Override 4065f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org public void onClick(View view) { 4075f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org String selectedRoom = getSelectedItem(); 4085f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (selectedRoom != null) { 4095f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.remove(selectedRoom); 4105f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org adapter.notifyDataSetChanged(); 4115f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4125f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4135f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org }; 4145f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 4155f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org private String getSelectedItem() { 4165f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org int position = AdapterView.INVALID_POSITION; 4175f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (roomListView.getCheckedItemCount() > 0 && adapter.getCount() > 0) { 4185f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org position = roomListView.getCheckedItemPosition(); 4195f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (position >= adapter.getCount()) { 4205f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org position = AdapterView.INVALID_POSITION; 4215f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4225f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4235f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org if (position != AdapterView.INVALID_POSITION) { 4245f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org return adapter.getItem(position); 4255f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } else { 4265f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org return null; 4275f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4285f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org } 4295f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org 4307bb4a9881df1cd8b26391d9f15ef31117396ff19glaznev@webrtc.org} 431