Chromium Code Reviews| 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..da389fe74807040a53ca9c8547f7e521498dfeef 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 |
| @@ -296,6 +309,10 @@ public class ItemChooserDialog { |
| mDialog.show(); |
| } |
| + public void dismiss() { |
| + mDialog.dismiss(); |
| + } |
| + |
| /** |
| * Add items to show in the dialog. |
| * |
| @@ -306,17 +323,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); |
|
Jeffrey Yasskin
2015/08/31 17:03:53
When the Bluetooth adapter reports than a device h
Finnur
2015/09/01 11:53:50
Changed it (for now) so that it grays it out inste
|
| + break; |
| + } |
| + } |
| } |
| /** |
| @@ -324,5 +350,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; |
| + } |
| } |
| } |