Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1200)

Unified Diff: remoting/android/java/src/org/chromium/chromoting/Chromoting.java

Issue 102273006: Refactor Chromoting.java to pull out some nested classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add TODO Created 6 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | remoting/android/java/src/org/chromium/chromoting/HostListAdapter.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 cd258d2532bb4fafa6be1cd6545eba976d1e6725..520690d89d11f898185ca8553252b57496d9ae07 100644
--- a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java
+++ b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java
@@ -11,18 +11,14 @@ import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.app.Activity;
-import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
-import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
@@ -54,11 +50,9 @@ public class Chromoting extends Activity {
private static final String HOST_LIST_PATH =
"https://www.googleapis.com/chromoting/v1/@me/hosts?key=";
- /** Color to use for hosts that are online. */
- private static final String HOST_COLOR_ONLINE = "green";
-
- /** Color to use for hosts that are offline. */
- private static final String HOST_COLOR_OFFLINE = "red";
+ /** Lock to protect |mAccount| and |mToken|. */
+ // TODO(lambroslambrou): |mHosts| needs to be protected as well.
+ private Object mLock = new Object();
/** User's account details. */
private Account mAccount;
@@ -188,12 +182,37 @@ public class Chromoting extends Activity {
return true;
}
+ /** Called when the user taps on a host entry. */
+ public void connectToHost(JSONObject host) {
+ 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));
+ }
+ });
+ }
+ } catch (JSONException ex) {
+ Log.w("host", ex);
+ Toast.makeText(this, getString(R.string.error_reading_host),
+ Toast.LENGTH_LONG).show();
+ // Close the application.
+ finish();
+ }
+ }
+
/**
* Processes the authentication token once the system provides it. Once in possession of such a
* token, attempts to request a host list from the directory server. In case of a bad response,
* this is retried once in case the system's cached auth token had expired.
*/
private class HostListDirectoryGrabber implements AccountManagerCallback<Bundle> {
+ // TODO(lambroslambrou): Refactor this class to provide async interface usable on the UI
+ // thread.
+
/** Whether authentication has already been attempted. */
private boolean mAlreadyTried;
@@ -221,7 +240,7 @@ public class Chromoting extends Activity {
String authToken = result.getString(AccountManager.KEY_AUTHTOKEN);
Log.i("auth", "Received an auth token from system");
- synchronized (mUi) {
+ synchronized (mLock) {
mAccount = new Account(accountName, accountType);
mToken = authToken;
getPreferences(MODE_PRIVATE).edit().putString("account_name", accountName).
@@ -262,7 +281,7 @@ public class Chromoting extends Activity {
if (!mAlreadyTried) {
// This was our first connection attempt.
- synchronized (mUi) {
+ synchronized (mLock) {
if (mAccount != null) {
// We got an account, but couldn't log into it. We'll retry in case
// the system's cached authentication token had already expired.
@@ -289,7 +308,6 @@ public class Chromoting extends Activity {
}
} else if (ex instanceof JSONException) {
explanation = getString(R.string.error_unexpected_response);
- runOnUiThread(new HostListDisplayer(mUi));
}
mHosts = null;
@@ -298,126 +316,51 @@ public class Chromoting extends Activity {
}
// Share our findings with the user.
- runOnUiThread(new HostListDisplayer(mUi));
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ updateUi();
+ }
+ });
}
}
- /** Formats the host list and offers it to the user. */
- private class HostListDisplayer implements Runnable {
- /** Communication with the screen. */
- private Activity mUi;
-
- /** Constructor. */
- public HostListDisplayer(Activity ui) {
- mUi = ui;
- }
-
- /**
- * Updates the infotext and host list display.
- * This method affects the UI and must be run on its same thread.
- */
- @Override
- public void run() {
- synchronized (mUi) {
- mRefreshButton.setEnabled(mAccount != null);
- if (mAccount != null) {
- mAccountSwitcher.setTitle(mAccount.name);
- }
- }
-
- if (mHosts == null) {
- mGreeting.setText(getString(R.string.inst_empty_list));
- mList.setAdapter(null);
- return;
- }
-
- mGreeting.setText(getString(R.string.inst_host_list));
-
- ArrayAdapter<JSONObject> displayer = new HostListAdapter(mUi, R.layout.host);
- Log.i("hostlist", "About to populate host list display");
- try {
- int index = 0;
- while (!mHosts.isNull(index)) {
- displayer.add(mHosts.getJSONObject(index));
- ++index;
- }
- mList.setAdapter(displayer);
- }
- catch(JSONException ex) {
- Log.w("hostlist", ex);
- Toast.makeText(
- mUi, getString(R.string.error_cataloging_hosts), Toast.LENGTH_LONG).show();
-
- // Close the application.
- finish();
+ /**
+ * Updates the infotext and host list display.
+ * This method affects the UI and must be run on the main thread.
+ */
+ private void updateUi() {
+ synchronized (mLock) {
+ mRefreshButton.setEnabled(mAccount != null);
+ if (mAccount != null) {
+ mAccountSwitcher.setTitle(mAccount.name);
}
}
- }
- /** Describes the appearance and behavior of each host list entry. */
- private class HostListAdapter extends ArrayAdapter<JSONObject> {
- /** Constructor. */
- public HostListAdapter(Context context, int textViewResourceId) {
- super(context, textViewResourceId);
+ if (mHosts == null) {
+ mGreeting.setText(getString(R.string.inst_empty_list));
+ mList.setAdapter(null);
+ return;
}
- /** Generates a View corresponding to this particular host. */
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView target = (TextView)super.getView(position, convertView, parent);
+ mGreeting.setText(getString(R.string.inst_host_list));
- try {
- final JSONObject host = getItem(position);
- target.setText(Html.fromHtml(host.getString("hostName") + " (<font color = \"" +
- (host.getString("status").equals("ONLINE") ? HOST_COLOR_ONLINE :
- HOST_COLOR_OFFLINE) + "\">" + host.getString("status") + "</font>)"));
-
- if (host.getString("status").equals("ONLINE")) { // Host is online.
- target.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- synchronized (getContext()) {
- JniInterface.connectToHost(mAccount.name, mToken,
- host.getString("jabberId"),
- host.getString("hostId"),
- host.getString("publicKey"),
- new Runnable() {
- @Override
- public void run() {
- startActivity(
- new Intent(getContext(), Desktop.class));
- }
- });
- }
- }
- catch(JSONException ex) {
- Log.w("host", ex);
- Toast.makeText(getContext(),
- getString(R.string.error_reading_host),
- Toast.LENGTH_LONG).show();
-
- // Close the application.
- finish();
- }
- }
- });
- } else { // Host is offline.
- // Disallow interaction with this entry.
- target.setEnabled(false);
- }
+ ArrayAdapter<JSONObject> displayer = new HostListAdapter(this, R.layout.host);
+ Log.i("hostlist", "About to populate host list display");
+ try {
+ int index = 0;
+ while (!mHosts.isNull(index)) {
+ displayer.add(mHosts.getJSONObject(index));
+ ++index;
}
- catch(JSONException ex) {
- Log.w("hostlist", ex);
- Toast.makeText(getContext(),
- getString(R.string.error_displaying_host),
- Toast.LENGTH_LONG).show();
-
- // Close the application.
- finish();
- }
-
- return target;
+ mList.setAdapter(displayer);
+ } catch (JSONException ex) {
+ Log.w("hostlist", ex);
+ Toast.makeText(this, getString(R.string.error_cataloging_hosts),
+ Toast.LENGTH_LONG).show();
+
+ // Close the application.
+ finish();
}
}
}
« no previous file with comments | « no previous file | remoting/android/java/src/org/chromium/chromoting/HostListAdapter.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698