Index: remoting/android/java/src/org/chromium/chromoting/Chromoting.java |
diff --git a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java |
index 520690d89d11f898185ca8553252b57496d9ae07..8ae7928e8b9a76f59c5325d56f28f09ebe0280c0 100644 |
--- a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java |
+++ b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java |
@@ -11,6 +11,8 @@ import android.accounts.AccountManagerFuture; |
import android.accounts.AuthenticatorException; |
import android.accounts.OperationCanceledException; |
import android.app.Activity; |
+import android.app.ProgressDialog; |
+import android.content.DialogInterface; |
import android.content.Intent; |
import android.content.SharedPreferences; |
import android.os.Bundle; |
@@ -38,7 +40,7 @@ import java.util.Scanner; |
* The user interface for querying and displaying a user's host list from the directory server. It |
* also requests and renews authentication tokens using the system account manager. |
*/ |
-public class Chromoting extends Activity { |
+public class Chromoting extends Activity implements JniInterface.ConnectionListener { |
/** Only accounts of this type will be selectable for authentication. */ |
private static final String ACCOUNT_TYPE = "com.google"; |
@@ -78,6 +80,9 @@ public class Chromoting extends Activity { |
/** Callback handler to be used for network operations. */ |
private Handler mNetwork; |
+ /** Dialog for reporting connection progress. */ |
+ private ProgressDialog mProgressIndicator; |
+ |
/** |
* Called when the activity is first created. Loads the native library and requests an |
* authentication token from the system. |
@@ -187,13 +192,7 @@ public class Chromoting extends Activity { |
try { |
synchronized (mLock) { |
JniInterface.connectToHost(mAccount.name, mToken, host.getString("jabberId"), |
- host.getString("hostId"), host.getString("publicKey"), |
- new Runnable() { |
- @Override |
- public void run() { |
- startActivity(new Intent(Chromoting.this, Desktop.class)); |
- } |
- }); |
+ host.getString("hostId"), host.getString("publicKey"), this); |
} |
} catch (JSONException ex) { |
Log.w("host", ex); |
@@ -363,4 +362,61 @@ public class Chromoting extends Activity { |
finish(); |
} |
} |
+ |
+ @Override |
+ public void onConnectionState(JniInterface.ConnectionListener.State state, |
+ JniInterface.ConnectionListener.Error error) { |
+ String stateText = getResources().getStringArray(R.array.protoc_states)[state.value()]; |
+ boolean dismissProgress = false; |
+ switch (state) { |
+ case INITIALIZING: |
+ case CONNECTING: |
+ case AUTHENTICATED: |
+ // The connection is still being established, so we'll report the current progress. |
+ if (mProgressIndicator == null) { |
+ mProgressIndicator = ProgressDialog.show(this, |
+ getString(R.string.progress_title), stateText, true, true, |
+ new DialogInterface.OnCancelListener() { |
+ @Override |
+ public void onCancel(DialogInterface dialog) { |
+ JniInterface.disconnectFromHost(); |
+ } |
+ }); |
+ } else { |
+ mProgressIndicator.setMessage(stateText); |
+ } |
+ break; |
+ |
+ case CONNECTED: |
+ dismissProgress = true; |
+ Toast.makeText(this, stateText, Toast.LENGTH_SHORT).show(); |
+ |
+ // Display the remote desktop. |
+ startActivityForResult(new Intent(this, Desktop.class), 0); |
+ break; |
+ |
+ case FAILED: |
+ dismissProgress = true; |
+ Toast.makeText(this, stateText + ": " |
+ + getResources().getStringArray(R.array.protoc_errors)[error.value()], |
+ Toast.LENGTH_LONG).show(); |
+ |
+ // Close the Desktop view, if it is currently running. |
+ finishActivity(0); |
+ break; |
+ |
+ case CLOSED: |
+ // No need to show toast in this case. Either the connection will have failed |
+ // because of an error, which will trigger toast already. Or the disconnection will |
+ // have been initiated by the user. |
+ dismissProgress = true; |
+ finishActivity(0); |
+ break; |
+ } |
frankf
2014/01/10 18:31:05
fidnbugs step on FYI bot is complaining about defa
phoglund_chromium
2014/01/13 16:19:49
+1: please fix.
|
+ |
+ if (dismissProgress && mProgressIndicator != null) { |
+ mProgressIndicator.dismiss(); |
+ mProgressIndicator = null; |
+ } |
+ } |
} |