| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chromoting; | 5 package org.chromium.chromoting; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.app.AlertDialog; | 8 import android.app.AlertDialog; |
| 9 import android.app.ProgressDialog; | 9 import android.app.ProgressDialog; |
| 10 import android.content.DialogInterface; | 10 import android.content.DialogInterface; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 import android.widget.LinearLayout; | 29 import android.widget.LinearLayout; |
| 30 import android.widget.ListView; | 30 import android.widget.ListView; |
| 31 import android.widget.Toast; | 31 import android.widget.Toast; |
| 32 | 32 |
| 33 import org.chromium.base.ApiCompatibilityUtils; | 33 import org.chromium.base.ApiCompatibilityUtils; |
| 34 import org.chromium.base.Log; | 34 import org.chromium.base.Log; |
| 35 import org.chromium.chromoting.accountswitcher.AccountSwitcher; | 35 import org.chromium.chromoting.accountswitcher.AccountSwitcher; |
| 36 import org.chromium.chromoting.accountswitcher.AccountSwitcherFactory; | 36 import org.chromium.chromoting.accountswitcher.AccountSwitcherFactory; |
| 37 import org.chromium.chromoting.help.HelpContext; | 37 import org.chromium.chromoting.help.HelpContext; |
| 38 import org.chromium.chromoting.help.HelpSingleton; | 38 import org.chromium.chromoting.help.HelpSingleton; |
| 39 import org.chromium.chromoting.jni.Client; |
| 39 import org.chromium.chromoting.jni.ConnectionListener; | 40 import org.chromium.chromoting.jni.ConnectionListener; |
| 40 import org.chromium.chromoting.jni.JniInterface; | 41 import org.chromium.chromoting.jni.JniInterface; |
| 41 | 42 |
| 42 import java.util.ArrayList; | 43 import java.util.ArrayList; |
| 43 import java.util.Arrays; | 44 import java.util.Arrays; |
| 44 | 45 |
| 45 /** | 46 /** |
| 46 * The user interface for querying and displaying a user's host list from the di
rectory server. It | 47 * The user interface for querying and displaying a user's host list from the di
rectory server. It |
| 47 * also requests and renews authentication tokens using the system account manag
er. | 48 * also requests and renews authentication tokens using the system account manag
er. |
| 48 */ | 49 */ |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 * while a token is being fetched. | 111 * while a token is being fetched. |
| 111 */ | 112 */ |
| 112 private boolean mWaitingForAuthToken = false; | 113 private boolean mWaitingForAuthToken = false; |
| 113 | 114 |
| 114 private DrawerLayout mDrawerLayout; | 115 private DrawerLayout mDrawerLayout; |
| 115 | 116 |
| 116 private ActionBarDrawerToggle mDrawerToggle; | 117 private ActionBarDrawerToggle mDrawerToggle; |
| 117 | 118 |
| 118 private AccountSwitcher mAccountSwitcher; | 119 private AccountSwitcher mAccountSwitcher; |
| 119 | 120 |
| 121 /** The currently-connected Client, if any. */ |
| 122 private Client mClient; |
| 123 |
| 120 /** Shows a warning explaining that a Google account is required, then close
s the activity. */ | 124 /** Shows a warning explaining that a Google account is required, then close
s the activity. */ |
| 121 private void showNoAccountsDialog() { | 125 private void showNoAccountsDialog() { |
| 122 AlertDialog.Builder builder = new AlertDialog.Builder(this); | 126 AlertDialog.Builder builder = new AlertDialog.Builder(this); |
| 123 builder.setMessage(R.string.noaccounts_message); | 127 builder.setMessage(R.string.noaccounts_message); |
| 124 builder.setPositiveButton(R.string.noaccounts_add_account, | 128 builder.setPositiveButton(R.string.noaccounts_add_account, |
| 125 new DialogInterface.OnClickListener() { | 129 new DialogInterface.OnClickListener() { |
| 126 @SuppressLint("InlinedApi") | 130 @SuppressLint("InlinedApi") |
| 127 @Override | 131 @Override |
| 128 public void onClick(DialogInterface dialog, int id) { | 132 public void onClick(DialogInterface dialog, int id) { |
| 129 Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT); | 133 Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 preferences.putString(prefName, recents[i]); | 346 preferences.putString(prefName, recents[i]); |
| 343 } | 347 } |
| 344 | 348 |
| 345 preferences.apply(); | 349 preferences.apply(); |
| 346 } | 350 } |
| 347 | 351 |
| 348 /** Called when the activity is finally finished. */ | 352 /** Called when the activity is finally finished. */ |
| 349 @Override | 353 @Override |
| 350 public void onDestroy() { | 354 public void onDestroy() { |
| 351 super.onDestroy(); | 355 super.onDestroy(); |
| 352 JniInterface.disconnectFromHost(); | |
| 353 mAccountSwitcher.destroy(); | 356 mAccountSwitcher.destroy(); |
| 357 |
| 358 // TODO(lambroslambrou): Determine whether we really need to tear down t
he connection here, |
| 359 // so we can remove this code. |
| 360 if (mClient != null) { |
| 361 mClient.destroy(); |
| 362 mClient = null; |
| 363 } |
| 354 } | 364 } |
| 355 | 365 |
| 356 /** Called when a child Activity exits and sends a result back to this Activ
ity. */ | 366 /** Called when a child Activity exits and sends a result back to this Activ
ity. */ |
| 357 @Override | 367 @Override |
| 358 public void onActivityResult(int requestCode, int resultCode, Intent data) { | 368 public void onActivityResult(int requestCode, int resultCode, Intent data) { |
| 359 mAccountSwitcher.onActivityResult(requestCode, resultCode, data); | 369 mAccountSwitcher.onActivityResult(requestCode, resultCode, data); |
| 360 | 370 |
| 361 if (requestCode == OAuthTokenFetcher.REQUEST_CODE_RECOVER_FROM_OAUTH_ERR
OR) { | 371 if (requestCode == OAuthTokenFetcher.REQUEST_CODE_RECOVER_FROM_OAUTH_ERR
OR) { |
| 362 if (resultCode == RESULT_OK) { | 372 if (resultCode == RESULT_OK) { |
| 363 // User gave OAuth permission to this app (or recovered from any
OAuth failure), | 373 // User gave OAuth permission to this app (or recovered from any
OAuth failure), |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 HostInfo host = mHosts[index]; | 447 HostInfo host = mHosts[index]; |
| 438 if (host.isOnline) { | 448 if (host.isOnline) { |
| 439 connectToHost(host); | 449 connectToHost(host); |
| 440 } else { | 450 } else { |
| 441 String tooltip = host.getHostOfflineReasonText(this); | 451 String tooltip = host.getHostOfflineReasonText(this); |
| 442 Toast.makeText(this, tooltip, Toast.LENGTH_SHORT).show(); | 452 Toast.makeText(this, tooltip, Toast.LENGTH_SHORT).show(); |
| 443 } | 453 } |
| 444 } | 454 } |
| 445 | 455 |
| 446 private void connectToHost(HostInfo host) { | 456 private void connectToHost(HostInfo host) { |
| 457 if (mClient != null) { |
| 458 mClient.destroy(); |
| 459 } |
| 460 |
| 461 mClient = new Client(); |
| 447 mProgressIndicator = ProgressDialog.show( | 462 mProgressIndicator = ProgressDialog.show( |
| 448 this, | 463 this, |
| 449 host.name, | 464 host.name, |
| 450 getString(R.string.footer_connecting), | 465 getString(R.string.footer_connecting), |
| 451 true, | 466 true, |
| 452 true, | 467 true, |
| 453 new DialogInterface.OnCancelListener() { | 468 new DialogInterface.OnCancelListener() { |
| 454 @Override | 469 @Override |
| 455 public void onCancel(DialogInterface dialog) { | 470 public void onCancel(DialogInterface dialog) { |
| 456 JniInterface.disconnectFromHost(); | 471 if (mClient != null) { |
| 472 mClient.destroy(); |
| 473 mClient = null; |
| 474 } |
| 457 } | 475 } |
| 458 }); | 476 }); |
| 459 SessionConnector connector = new SessionConnector(this, this, mHostListL
oader); | 477 |
| 460 mAuthenticator = new SessionAuthenticator(this, host); | 478 SessionConnector connector = new SessionConnector(mClient, this, this, m
HostListLoader); |
| 479 mAuthenticator = new SessionAuthenticator(this, mClient, host); |
| 461 connector.connectToHost(mAccount, mToken, host, mAuthenticator, | 480 connector.connectToHost(mAccount, mToken, host, mAuthenticator, |
| 462 getPreferences(MODE_PRIVATE).getString(PREFERENCE_EXPERIMENTAL_F
LAGS, "")); | 481 getPreferences(MODE_PRIVATE).getString(PREFERENCE_EXPERIMENTAL_F
LAGS, "")); |
| 463 } | 482 } |
| 464 | 483 |
| 465 private void refreshHostList() { | 484 private void refreshHostList() { |
| 466 if (mWaitingForAuthToken) { | 485 if (mWaitingForAuthToken) { |
| 467 return; | 486 return; |
| 468 } | 487 } |
| 469 | 488 |
| 470 mTriedNewAuthToken = false; | 489 mTriedNewAuthToken = false; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 // Unreachable, but required by Google Java style and findbugs. | 640 // Unreachable, but required by Google Java style and findbugs. |
| 622 assert false : "Unreached"; | 641 assert false : "Unreached"; |
| 623 } | 642 } |
| 624 | 643 |
| 625 if (dismissProgress && mProgressIndicator != null) { | 644 if (dismissProgress && mProgressIndicator != null) { |
| 626 mProgressIndicator.dismiss(); | 645 mProgressIndicator.dismiss(); |
| 627 mProgressIndicator = null; | 646 mProgressIndicator = null; |
| 628 } | 647 } |
| 629 } | 648 } |
| 630 } | 649 } |
| OLD | NEW |