package grevian.MediaLibrary;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnKeyListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class TextSearchAdapter extends BaseAdapter implements OnKeyListener {
private final static String TAG = "GrevianMedia";
private ListView _list;
private EditText _text;
private Uri _searchUri;
private ContentResolver cr;
private Cursor _cursor;
public TextSearchAdapter(ListView mList, EditText mText, ContentResolver contentResolver)
{
cr = contentResolver;
_list = mList;
_text = mText;
_searchUri = Media.SEARCH_URI;
Uri currentUri = _searchUri.buildUpon().appendPath( _text.getText().toString() ).build();
_cursor = cr.query(currentUri, null, null, null, null);
_text.setOnKeyListener(this);
_list.setAdapter(this);
}
@Override
public int getCount() {
return _cursor.getCount();
}
@Override
public Object getItem(int position) {
_cursor.moveToPosition(position);
return new Media(_cursor, cr);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// if the existing view is null, create it as a textview
if ( convertView == null )
convertView = new TextView(parent.getContext());
TextView mText = (TextView)convertView;
Media mMedia = (Media)getItem(position);
mText.setText(mMedia.getTitle());
if ( mMedia.getOwned() > 0 )
mText.setTextColor(Color.GREEN);
else
mText.setTextColor(Color.RED);
return mText;
}
public boolean update()
{
// Time and execute the search query
long sTime = System.currentTimeMillis();
_cursor.close(); // Close the old cursor
Uri currentUri = _searchUri.buildUpon().appendPath( _text.getText().toString() ).build();
_cursor = cr.query(currentUri, null, null, null, null);
// Probably not needed, but doesn't hurt
_cursor.moveToFirst();
long fTime = System.currentTimeMillis();
Log.i(TAG, "Search for term '" + _text.getText().toString() + "' returned " + _cursor.getCount() + " results in " + (fTime-sTime) + "ms");
this.notifyDataSetChanged();
return true;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
update();
return false;
}
}