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; |
+ } |
} |
} |