Make the arrow buttons filter media
This commit is contained in:
parent
d9d78b0ea5
commit
53ea3c4fe1
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item type="id" name="list" />
|
||||
<item type="id" name="song" />
|
||||
<item type="id" name="id" />
|
||||
<item type="id" name="field" />
|
||||
</resources>
|
@ -43,14 +43,20 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
public static final int ONE_LINE = 0x1;
|
||||
|
||||
private Context mContext;
|
||||
private OnClickListener mExpanderListener;
|
||||
|
||||
private List<Song> mObjects;
|
||||
private Song[] mAllObjects;
|
||||
private ArrayFilter mFilter;
|
||||
private int mLimiterField = -1;
|
||||
private int mLimiterId = -1;
|
||||
private CharSequence mLastFilter;
|
||||
|
||||
private float mSize;
|
||||
private int mPadding;
|
||||
|
||||
private int mDrawFlags;
|
||||
private int mMediaField;
|
||||
private OnClickListener mExpanderListener;
|
||||
|
||||
public AbstractAdapter(Context context, Song[] allObjects, int drawFlags, int mediaField)
|
||||
{
|
||||
@ -100,8 +106,7 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
button.setImageResource(R.drawable.expander_arrow);
|
||||
button.setId(3);
|
||||
button.setLayoutParams(params);
|
||||
button.setTag(R.id.list, mMediaField);
|
||||
button.setTag(R.id.song, get(position));
|
||||
button.setTag(R.id.field, mMediaField);
|
||||
button.setOnClickListener(mExpanderListener);
|
||||
|
||||
view.addView(button);
|
||||
@ -135,6 +140,8 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
}
|
||||
|
||||
updateText(position, (TextView)view.findViewById(1),(TextView)view.findViewById(2));
|
||||
if (mExpanderListener != null)
|
||||
view.findViewById(3).setTag(R.id.id, (int)getItemId(position));
|
||||
|
||||
return view;
|
||||
}
|
||||
@ -168,14 +175,19 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
{
|
||||
FilterResults results = new FilterResults();
|
||||
|
||||
if (filter == null || filter.length() == 0) {
|
||||
boolean noFilter = filter == null || filter.length() == 0;
|
||||
|
||||
if (noFilter && mLimiterField == -1) {
|
||||
results.values = Arrays.asList(mAllObjects);
|
||||
results.count = mAllObjects.length;
|
||||
} else {
|
||||
String[] words = filter.toString().split("\\s+");
|
||||
Matcher[] matchers = new Matcher[words.length];
|
||||
for (int i = words.length; --i != -1; )
|
||||
matchers[i] = createMatcher(words[i]);
|
||||
Matcher[] matchers = null;
|
||||
if (!noFilter) {
|
||||
String[] words = filter.toString().split("\\s+");
|
||||
matchers = new Matcher[words.length];
|
||||
for (int i = words.length; --i != -1; )
|
||||
matchers[i] = createMatcher(words[i]);
|
||||
}
|
||||
|
||||
int count = mAllObjects.length;
|
||||
ArrayList<Song> newValues = new ArrayList<Song>();
|
||||
@ -185,14 +197,19 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
for (int i = 0; i != count; ++i) {
|
||||
Song song = mAllObjects[i];
|
||||
|
||||
for (int j = matchers.length; --j != -1; ) {
|
||||
if (matchers[j].reset(song.artist).find())
|
||||
continue;
|
||||
if (mMediaField > 1 && matchers[j].reset(song.album).find())
|
||||
continue;
|
||||
if (mMediaField > 2 && matchers[j].reset(song.title).find())
|
||||
continue;
|
||||
continue outer;
|
||||
if (mLimiterField != -1 && song.getFieldId(mLimiterField) != mLimiterId)
|
||||
continue;
|
||||
|
||||
if (!noFilter) {
|
||||
for (int j = matchers.length; --j != -1; ) {
|
||||
if (matchers[j].reset(song.artist).find())
|
||||
continue;
|
||||
if (mMediaField > 1 && matchers[j].reset(song.album).find())
|
||||
continue;
|
||||
if (mMediaField > 2 && matchers[j].reset(song.title).find())
|
||||
continue;
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
|
||||
newValues.add(song);
|
||||
@ -212,6 +229,7 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
protected void publishResults(CharSequence constraint, FilterResults results)
|
||||
{
|
||||
mObjects = (List<Song>)results.values;
|
||||
mLastFilter = constraint;
|
||||
if (results.count == 0)
|
||||
notifyDataSetInvalidated();
|
||||
else
|
||||
@ -219,6 +237,17 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable
|
||||
}
|
||||
}
|
||||
|
||||
public void setLimiter(int field, int id)
|
||||
{
|
||||
mLimiterField = field;
|
||||
mLimiterId = id;
|
||||
|
||||
mObjects = new ArrayList<Song>();
|
||||
notifyDataSetInvalidated();
|
||||
|
||||
getFilter().filter(mLastFilter);
|
||||
}
|
||||
|
||||
public int getCount()
|
||||
{
|
||||
if (mObjects == null) {
|
||||
|
@ -157,9 +157,14 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
|
||||
if (view == mClearButton) {
|
||||
mTextFilter.setText("");
|
||||
} else {
|
||||
Object list = view.getTag(R.id.list);
|
||||
if (list != null)
|
||||
mTabHost.setCurrentTab((Integer)list);
|
||||
Object fieldObj = view.getTag(R.id.field);
|
||||
if (fieldObj != null) {
|
||||
int field = (Integer)fieldObj;
|
||||
int id = (Integer)view.getTag(R.id.id);
|
||||
mTabHost.setCurrentTab(field);
|
||||
for (int i = field; i != 3; ++i)
|
||||
mAdapters[i].setLimiter(field, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user