package com.evancharlton.mileage.views;
import com.evancharlton.mileage.R;
import com.evancharlton.mileage.adapters.SpinnerCursorAdapter;
import com.evancharlton.mileage.provider.FillUpsProvider;
import android.content.Context;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Spinner;
public class CursorSpinner extends Spinner {
private Cursor mCursor;
private SpinnerCursorAdapter mAdapter;
private final String mUriPath;
private final String mDisplayField;
private final boolean mAutoHide;
public CursorSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.CursorSpinner);
mDisplayField = arr.getString(R.styleable.CursorSpinner_display_field);
mUriPath = arr.getString(R.styleable.CursorSpinner_uri);
mAutoHide = arr.getBoolean(R.styleable.CursorSpinner_auto_hide, true);
filter(null, null);
}
public void filter(String selection, String[] selectionArgs) {
// TODO(3.2) - run this on a background thread
Uri uri = Uri.withAppendedPath(FillUpsProvider.BASE_URI, mUriPath);
mCursor = getContext().getContentResolver().query(uri, new String[] {
BaseColumns._ID,
mDisplayField
}, selection, selectionArgs, null);
if (mAdapter == null) {
mAdapter = new SpinnerCursorAdapter(getContext(), mCursor, mDisplayField);
} else {
mAdapter.changeCursor(mCursor);
mAdapter.notifyDataSetChanged();
}
setAdapter(mAdapter);
if (mAutoHide && mCursor.getCount() == 1) {
setVisibility(View.GONE);
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mCursor.close();
}
public void setSelectedId(long id) {
final SpinnerCursorAdapter adapter = mAdapter;
final int count = adapter.getCount();
for (int i = 0; i < count; i++) {
if (adapter.getItemId(i) == id) {
setSelection(i);
break;
}
}
}
}