| Index: chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| index 6c92d6240828507a80d4aea4012f7601389e50fa..d7002eca4ac84617aceca12ce50573759c106aec 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| @@ -75,20 +75,36 @@ public class ItemChooserDialog {
|
| public final SpannableString mNoneFound;
|
| // A status message to show above the button row.
|
| public final SpannableString mStatus;
|
| + // An error state.
|
| + public final SpannableString mErrorMessage;
|
| + // A status message to go with the error state.
|
| + public final SpannableString mErrorStatus;
|
| // The label for the positive button (e.g. Select/Pair).
|
| public final String mPositiveButton;
|
|
|
| public ItemChooserLabels(SpannableString title, String searching, SpannableString noneFound,
|
| - SpannableString status, String positiveButton) {
|
| + SpannableString status, SpannableString errorMessage, SpannableString errorStatus,
|
| + String positiveButton) {
|
| mTitle = title;
|
| mSearching = searching;
|
| mNoneFound = noneFound;
|
| mStatus = status;
|
| + mErrorMessage = errorMessage;
|
| + mErrorStatus = errorStatus;
|
| mPositiveButton = positiveButton;
|
| }
|
| }
|
|
|
| /**
|
| + * The various states the dialog can represent.
|
| + */
|
| + private enum State {
|
| + STARTING,
|
| + PROGRESS_UPDATE_AVAILABLE,
|
| + SHOWING_ERROR,
|
| + }
|
| +
|
| + /**
|
| * An adapter for keeping track of which items to show in the dialog.
|
| */
|
| private class ItemAdapter extends ArrayAdapter<ItemChooserRow>
|
| @@ -185,7 +201,7 @@ public class ItemChooserDialog {
|
|
|
| // Individual UI elements.
|
| private TextViewWithClickableSpans mTitle;
|
| - private TextViewWithClickableSpans mNotFoundMessage;
|
| + private TextViewWithClickableSpans mEmptyMessage;
|
| private ProgressBar mProgressBar;
|
| private ListView mListView;
|
| private TextView mStatus;
|
| @@ -225,17 +241,14 @@ public class ItemChooserDialog {
|
| mStatus = (TextView) dialogContainer.findViewById(R.id.status);
|
| mTitle = (TextViewWithClickableSpans) dialogContainer.findViewById(
|
| R.id.dialog_title);
|
| - mNotFoundMessage =
|
| + mEmptyMessage =
|
| (TextViewWithClickableSpans) dialogContainer.findViewById(
|
| R.id.not_found_message);
|
|
|
| mTitle.setText(labels.mTitle);
|
| mTitle.setMovementMethod(LinkMovementMethod.getInstance());
|
|
|
| - mNotFoundMessage.setText(labels.mNoneFound);
|
| - mNotFoundMessage.setMovementMethod(LinkMovementMethod.getInstance());
|
| -
|
| - mStatus.setText(labels.mSearching);
|
| + mEmptyMessage.setMovementMethod(LinkMovementMethod.getInstance());
|
| mStatus.setMovementMethod(LinkMovementMethod.getInstance());
|
|
|
| mConfirmButton = (Button) dialogContainer.findViewById(R.id.positive);
|
| @@ -252,10 +265,10 @@ public class ItemChooserDialog {
|
|
|
| mItemAdapter = new ItemAdapter(mContext, R.layout.item_chooser_dialog_row);
|
| mListView.setAdapter(mItemAdapter);
|
| - mListView.setEmptyView(mNotFoundMessage);
|
| - mNotFoundMessage.setVisibility(View.GONE);
|
| + mListView.setEmptyView(mEmptyMessage);
|
| mListView.setOnItemClickListener(mItemAdapter);
|
| mListView.setDivider(null);
|
| + setState(State.STARTING);
|
|
|
| // The list is the main element in the dialog and it should grow and
|
| // shrink according to the size of the screen available (clamped to a
|
| @@ -306,17 +319,26 @@ public class ItemChooserDialog {
|
| */
|
| public void showList(List<ItemChooserRow> list) {
|
| mProgressBar.setVisibility(View.GONE);
|
| - mStatus.setText(mLabels.mStatus);
|
| -
|
| - if (list.isEmpty()) {
|
| - boolean showEmptyMessage = mItemAdapter.isEmpty();
|
| - mNotFoundMessage.setVisibility(
|
| - showEmptyMessage ? View.VISIBLE : View.GONE);
|
| - mListView.setVisibility(showEmptyMessage ? View.GONE : View.VISIBLE);
|
| - } else {
|
| - mListView.setVisibility(View.VISIBLE);
|
| +
|
| + if (!list.isEmpty()) {
|
| mItemAdapter.addAll(list);
|
| }
|
| + setState(State.PROGRESS_UPDATE_AVAILABLE);
|
| + }
|
| +
|
| + /**
|
| + * Remove a single item from the list.
|
| + * @param id The id of the item to remove.
|
| + */
|
| + public void remove(String id) {
|
| + ItemChooserRow row;
|
| + for (int i = 0; i < mItemAdapter.getCount(); ++i) {
|
| + row = mItemAdapter.getItem(i);
|
| + if (row.mKey == id) {
|
| + mItemAdapter.remove(row);
|
| + break;
|
| + }
|
| + }
|
| }
|
|
|
| /**
|
| @@ -324,5 +346,38 @@ public class ItemChooserDialog {
|
| */
|
| public void clear() {
|
| mItemAdapter.clear();
|
| + setState(State.STARTING);
|
| + }
|
| +
|
| + /**
|
| + * Set the error state for the dialog.
|
| + */
|
| + public void setErrorState() {
|
| + setState(State.SHOWING_ERROR);
|
| + }
|
| +
|
| + private void setState(State state) {
|
| + switch (state) {
|
| + case STARTING:
|
| + mStatus.setText(mLabels.mSearching);
|
| + mListView.setVisibility(View.GONE);
|
| + mProgressBar.setVisibility(View.VISIBLE);
|
| + break;
|
| + case SHOWING_ERROR:
|
| + mProgressBar.setVisibility(View.GONE);
|
| + mEmptyMessage.setText(mLabels.mErrorMessage);
|
| + mStatus.setText(mLabels.mErrorStatus);
|
| + break;
|
| + case PROGRESS_UPDATE_AVAILABLE:
|
| + mStatus.setText(mLabels.mStatus);
|
| + mProgressBar.setVisibility(View.GONE);
|
| + mListView.setVisibility(View.VISIBLE);
|
| +
|
| + boolean showEmptyMessage = mItemAdapter.isEmpty();
|
| + mEmptyMessage.setText(mLabels.mNoneFound);
|
| + mEmptyMessage.setVisibility(
|
| + showEmptyMessage ? View.VISIBLE : View.GONE);
|
| + break;
|
| + }
|
| }
|
| }
|
|
|