Merge change 1565 into donut
* changes: Enable filtering <select> lists.
This commit is contained in:
@ -21,6 +21,7 @@ import android.content.Context;
|
|||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.DialogInterface.OnCancelListener;
|
import android.content.DialogInterface.OnCancelListener;
|
||||||
|
import android.database.DataSetObserver;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
@ -60,6 +61,7 @@ import android.view.inputmethod.InputMethodManager;
|
|||||||
import android.webkit.TextDialog.AutoCompleteAdapter;
|
import android.webkit.TextDialog.AutoCompleteAdapter;
|
||||||
import android.webkit.WebViewCore.EventHub;
|
import android.webkit.WebViewCore.EventHub;
|
||||||
import android.widget.AbsoluteLayout;
|
import android.widget.AbsoluteLayout;
|
||||||
|
import android.widget.Adapter;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
@ -4809,7 +4811,10 @@ public class WebView extends AbsoluteLayout
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasStableIds() {
|
public boolean hasStableIds() {
|
||||||
return true;
|
// AdapterView's onChanged method uses this to determine whether
|
||||||
|
// to restore the old state. Return false so that the old (out
|
||||||
|
// of date) state does not replace the new, valid state.
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Container item(int position) {
|
private Container item(int position) {
|
||||||
@ -4873,6 +4878,51 @@ public class WebView extends AbsoluteLayout
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Whenever the data set changes due to filtering, this class ensures
|
||||||
|
* that the checked item remains checked.
|
||||||
|
*/
|
||||||
|
private class SingleDataSetObserver extends DataSetObserver {
|
||||||
|
private long mCheckedId;
|
||||||
|
private ListView mListView;
|
||||||
|
private Adapter mAdapter;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a new observer.
|
||||||
|
* @param id The ID of the item to keep checked.
|
||||||
|
* @param l ListView for getting and clearing the checked states
|
||||||
|
* @param a Adapter for getting the IDs
|
||||||
|
*/
|
||||||
|
public SingleDataSetObserver(long id, ListView l, Adapter a) {
|
||||||
|
mCheckedId = id;
|
||||||
|
mListView = l;
|
||||||
|
mAdapter = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onChanged() {
|
||||||
|
// The filter may have changed which item is checked. Find the
|
||||||
|
// item that the ListView thinks is checked.
|
||||||
|
int position = mListView.getCheckedItemPosition();
|
||||||
|
long id = mAdapter.getItemId(position);
|
||||||
|
if (mCheckedId != id) {
|
||||||
|
// Clear the ListView's idea of the checked item, since
|
||||||
|
// it is incorrect
|
||||||
|
mListView.clearChoices();
|
||||||
|
// Search for mCheckedId. If it is in the filtered list,
|
||||||
|
// mark it as checked
|
||||||
|
int count = mAdapter.getCount();
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
if (mAdapter.getItemId(i) == mCheckedId) {
|
||||||
|
mListView.setItemChecked(i, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onInvalidate() {}
|
||||||
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
final ListView listView = (ListView) LayoutInflater.from(mContext)
|
final ListView listView = (ListView) LayoutInflater.from(mContext)
|
||||||
.inflate(com.android.internal.R.layout.select_dialog, null);
|
.inflate(com.android.internal.R.layout.select_dialog, null);
|
||||||
@ -4901,8 +4951,7 @@ public class WebView extends AbsoluteLayout
|
|||||||
// filtered. Do not allow filtering on multiple lists until
|
// filtered. Do not allow filtering on multiple lists until
|
||||||
// that bug is fixed.
|
// that bug is fixed.
|
||||||
|
|
||||||
// Disable filter altogether
|
listView.setTextFilterEnabled(!mMultiple);
|
||||||
// listView.setTextFilterEnabled(!mMultiple);
|
|
||||||
if (mMultiple) {
|
if (mMultiple) {
|
||||||
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||||
int length = mSelectedArray.length;
|
int length = mSelectedArray.length;
|
||||||
@ -4922,6 +4971,9 @@ public class WebView extends AbsoluteLayout
|
|||||||
listView.setSelection(mSelection);
|
listView.setSelection(mSelection);
|
||||||
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
|
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
|
||||||
listView.setItemChecked(mSelection, true);
|
listView.setItemChecked(mSelection, true);
|
||||||
|
DataSetObserver observer = new SingleDataSetObserver(
|
||||||
|
adapter.getItemId(mSelection), listView, adapter);
|
||||||
|
adapter.registerDataSetObserver(observer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||||
|
Reference in New Issue
Block a user