Allow a limiter set by an expander to be removed
This commit is contained in:
parent
1d6ca04568
commit
7c087cc6af
@ -37,6 +37,11 @@
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:fastScrollEnabled="true" />
|
||||
<LinearLayout
|
||||
android:id="@+id/limiter_layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|left" />
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</TabHost>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item type="id" name="id" />
|
||||
<item type="id" name="media" />
|
||||
<item type="id" name="field" />
|
||||
<item type="id" name="limiter_field" />
|
||||
</resources>
|
@ -41,7 +41,7 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
||||
private Song[] mAllObjects;
|
||||
private ArrayFilter mFilter;
|
||||
private int mLimiterField = -1;
|
||||
private int mLimiterId = -1;
|
||||
private Song mLimiterMedia;
|
||||
private CharSequence mLastFilter;
|
||||
|
||||
private int mPrimaryField;
|
||||
@ -135,6 +135,8 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
||||
matchers[i] = createMatcher(words[i]);
|
||||
}
|
||||
|
||||
int limiterId = mLimiterField == -1 ? 0 : mLimiterMedia.getFieldId(mLimiterField);
|
||||
|
||||
int count = mAllObjects.length;
|
||||
ArrayList<Song> newValues = new ArrayList<Song>();
|
||||
newValues.ensureCapacity(count);
|
||||
@ -143,7 +145,7 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
||||
for (int i = 0; i != count; ++i) {
|
||||
Song song = mAllObjects[i];
|
||||
|
||||
if (mLimiterField != -1 && song.getFieldId(mLimiterField) != mLimiterId)
|
||||
if (mLimiterField != -1 && song.getFieldId(mLimiterField) != limiterId)
|
||||
continue;
|
||||
|
||||
if (!noFilter) {
|
||||
@ -183,10 +185,10 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
||||
}
|
||||
}
|
||||
|
||||
public void setLimiter(int field, int id)
|
||||
public void setLimiter(int field, Song media)
|
||||
{
|
||||
mLimiterField = field;
|
||||
mLimiterId = id;
|
||||
mLimiterMedia = media;
|
||||
|
||||
mObjects = new ArrayList<Song>();
|
||||
notifyDataSetInvalidated();
|
||||
@ -194,6 +196,16 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
||||
getFilter().filter(mLastFilter);
|
||||
}
|
||||
|
||||
public int getLimiterField()
|
||||
{
|
||||
return mLimiterField;
|
||||
}
|
||||
|
||||
public Song getLimiterMedia()
|
||||
{
|
||||
return mLimiterMedia;
|
||||
}
|
||||
|
||||
public int getCount()
|
||||
{
|
||||
if (mObjects == null) {
|
||||
|
@ -141,6 +141,6 @@ public class MediaView extends ViewGroup {
|
||||
if (mSecondaryLine != null)
|
||||
mSecondaryLine.setText(song.getField(secondaryField));
|
||||
if (mExpander != null)
|
||||
mExpander.setTag(R.id.id, song.getFieldId(primaryField));
|
||||
mExpander.setTag(R.id.media, song);
|
||||
}
|
||||
}
|
@ -26,28 +26,34 @@ import android.app.TabActivity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.PaintDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.Editable;
|
||||
import android.text.InputType;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TabHost;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class SongSelector extends TabActivity implements AdapterView.OnItemClickListener, TextWatcher, View.OnClickListener {
|
||||
public class SongSelector extends TabActivity implements AdapterView.OnItemClickListener, TextWatcher, View.OnClickListener, TabHost.OnTabChangeListener {
|
||||
private TabHost mTabHost;
|
||||
private TextView mTextFilter;
|
||||
private View mClearButton;
|
||||
private ViewGroup mLimiters;
|
||||
private MediaAdapter[] mAdapters = new MediaAdapter[3];
|
||||
|
||||
private int mDefaultAction;
|
||||
@ -71,6 +77,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
|
||||
setContentView(R.layout.song_selector);
|
||||
|
||||
mTabHost = getTabHost();
|
||||
mTabHost.setOnTabChangedListener(this);
|
||||
|
||||
Resources res = getResources();
|
||||
mTabHost.addTab(mTabHost.newTabSpec("tab_artists").setIndicator(res.getText(R.string.artists), res.getDrawable(R.drawable.tab_artists)).setContent(R.id.artist_list));
|
||||
@ -83,6 +90,8 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
|
||||
mClearButton = findViewById(R.id.clear_button);
|
||||
mClearButton.setOnClickListener(this);
|
||||
|
||||
mLimiters = (ViewGroup)findViewById(R.id.limiter_layout);
|
||||
|
||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
int inputType;
|
||||
if (settings.getBoolean("phone_input", false))
|
||||
@ -164,6 +173,47 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
|
||||
adapter.getFilter().filter(s);
|
||||
}
|
||||
|
||||
private void updateLimiterViews()
|
||||
{
|
||||
if (mLimiters == null)
|
||||
return;
|
||||
|
||||
mLimiters.removeAllViews();
|
||||
|
||||
MediaAdapter adapter = mAdapters[mTabHost.getCurrentTab()];
|
||||
if (adapter == null)
|
||||
return;
|
||||
|
||||
int field = adapter.getLimiterField();
|
||||
if (field == -1)
|
||||
return;
|
||||
|
||||
Song media = adapter.getLimiterMedia();
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
params.leftMargin = 5;
|
||||
for (int i = Song.FIELD_ARTIST; i <= field; ++i) {
|
||||
PaintDrawable background = new PaintDrawable(Color.GRAY);
|
||||
background.setCornerRadius(5);
|
||||
|
||||
TextView view = new TextView(this);
|
||||
view.setSingleLine();
|
||||
view.setEllipsize(TextUtils.TruncateAt.MARQUEE);
|
||||
view.setText(media.getField(i) + " | X");
|
||||
view.setTextColor(Color.WHITE);
|
||||
view.setBackgroundDrawable(background);
|
||||
view.setLayoutParams(params);
|
||||
view.setPadding(5, 2, 5, 2);
|
||||
view.setTag(R.id.limiter_field, i);
|
||||
view.setOnClickListener(this);
|
||||
mLimiters.addView(view);
|
||||
}
|
||||
}
|
||||
|
||||
public void onTabChanged(String tabId)
|
||||
{
|
||||
updateLimiterViews();
|
||||
}
|
||||
|
||||
public void onClick(View view)
|
||||
{
|
||||
if (view == mClearButton) {
|
||||
@ -172,10 +222,21 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
|
||||
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);
|
||||
Song media = (Song)view.getTag(R.id.media);
|
||||
for (int i = field; i != 3; ++i)
|
||||
mAdapters[i].setLimiter(field, id);
|
||||
mAdapters[i].setLimiter(field, media);
|
||||
mTabHost.setCurrentTab(field);
|
||||
} else {
|
||||
fieldObj = view.getTag(R.id.limiter_field);
|
||||
if (fieldObj != null) {
|
||||
int field = (Integer)fieldObj;
|
||||
int newField = field == Song.FIELD_ARTIST ? -1 : field - 1;
|
||||
for (int i = mAdapters.length; --i != -1; ) {
|
||||
if (mAdapters[i].getLimiterField() >= field)
|
||||
mAdapters[i].setLimiter(newField, mAdapters[i].getLimiterMedia());
|
||||
}
|
||||
updateLimiterViews();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user