package androidx.cursoradapter.widget; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.database.DataSetObserver; import android.os.Handler; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.FilterQueryProvider; import android.widget.Filterable; import androidx.annotation.RestrictTo; import androidx.cursoradapter.widget.CursorFilter; import c.d.b.a.a; public abstract class CursorAdapter extends BaseAdapter implements Filterable, CursorFilter.CursorFilterClient { @Deprecated public static final int FLAG_AUTO_REQUERY = 1; public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public boolean mAutoRequery; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public ChangeObserver mChangeObserver; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public Context mContext; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public Cursor mCursor; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public CursorFilter mCursorFilter; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public DataSetObserver mDataSetObserver; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public boolean mDataValid; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public FilterQueryProvider mFilterQueryProvider; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public int mRowIDColumn; public class ChangeObserver extends ContentObserver { public ChangeObserver() { super(new Handler()); } @Override // android.database.ContentObserver public boolean deliverSelfNotifications() { return true; } @Override // android.database.ContentObserver public void onChange(boolean z2) { CursorAdapter.this.onContentChanged(); } } public class MyDataSetObserver extends DataSetObserver { public MyDataSetObserver() { } @Override // android.database.DataSetObserver public void onChanged() { CursorAdapter cursorAdapter = CursorAdapter.this; cursorAdapter.mDataValid = true; cursorAdapter.notifyDataSetChanged(); } @Override // android.database.DataSetObserver public void onInvalidated() { CursorAdapter cursorAdapter = CursorAdapter.this; cursorAdapter.mDataValid = false; cursorAdapter.notifyDataSetInvalidated(); } } @Deprecated public CursorAdapter(Context context, Cursor cursor) { init(context, cursor, 1); } public CursorAdapter(Context context, Cursor cursor, int i) { init(context, cursor, i); } public CursorAdapter(Context context, Cursor cursor, boolean z2) { init(context, cursor, z2 ? 1 : 2); } public abstract void bindView(View view, Context context, Cursor cursor); @Override // androidx.cursoradapter.widget.CursorFilter.CursorFilterClient public void changeCursor(Cursor cursor) { Cursor swapCursor = swapCursor(cursor); if (swapCursor != null) { swapCursor.close(); } } @Override // androidx.cursoradapter.widget.CursorFilter.CursorFilterClient public CharSequence convertToString(Cursor cursor) { return cursor == null ? "" : cursor.toString(); } @Override // android.widget.Adapter public int getCount() { Cursor cursor; if (!this.mDataValid || (cursor = this.mCursor) == null) { return 0; } return cursor.getCount(); } @Override // androidx.cursoradapter.widget.CursorFilter.CursorFilterClient public Cursor getCursor() { return this.mCursor; } @Override // android.widget.BaseAdapter, android.widget.SpinnerAdapter public View getDropDownView(int i, View view, ViewGroup viewGroup) { if (!this.mDataValid) { return null; } this.mCursor.moveToPosition(i); if (view == null) { view = newDropDownView(this.mContext, this.mCursor, viewGroup); } bindView(view, this.mContext, this.mCursor); return view; } @Override // android.widget.Filterable public Filter getFilter() { if (this.mCursorFilter == null) { this.mCursorFilter = new CursorFilter(this); } return this.mCursorFilter; } public FilterQueryProvider getFilterQueryProvider() { return this.mFilterQueryProvider; } @Override // android.widget.Adapter public Object getItem(int i) { Cursor cursor; if (!this.mDataValid || (cursor = this.mCursor) == null) { return null; } cursor.moveToPosition(i); return this.mCursor; } @Override // android.widget.Adapter public long getItemId(int i) { Cursor cursor; if (!this.mDataValid || (cursor = this.mCursor) == null || !cursor.moveToPosition(i)) { return 0; } return this.mCursor.getLong(this.mRowIDColumn); } @Override // android.widget.Adapter public View getView(int i, View view, ViewGroup viewGroup) { if (!this.mDataValid) { throw new IllegalStateException("this should only be called when the cursor is valid"); } else if (this.mCursor.moveToPosition(i)) { if (view == null) { view = newView(this.mContext, this.mCursor, viewGroup); } bindView(view, this.mContext, this.mCursor); return view; } else { throw new IllegalStateException(a.k("couldn't move cursor to position ", i)); } } @Override // android.widget.BaseAdapter, android.widget.Adapter public boolean hasStableIds() { return true; } public void init(Context context, Cursor cursor, int i) { boolean z2 = false; if ((i & 1) == 1) { i |= 2; this.mAutoRequery = true; } else { this.mAutoRequery = false; } if (cursor != null) { z2 = true; } this.mCursor = cursor; this.mDataValid = z2; this.mContext = context; this.mRowIDColumn = z2 ? cursor.getColumnIndexOrThrow("_id") : -1; if ((i & 2) == 2) { this.mChangeObserver = new ChangeObserver(); this.mDataSetObserver = new MyDataSetObserver(); } else { this.mChangeObserver = null; this.mDataSetObserver = null; } if (z2) { ChangeObserver changeObserver = this.mChangeObserver; if (changeObserver != null) { cursor.registerContentObserver(changeObserver); } DataSetObserver dataSetObserver = this.mDataSetObserver; if (dataSetObserver != null) { cursor.registerDataSetObserver(dataSetObserver); } } } @Deprecated public void init(Context context, Cursor cursor, boolean z2) { init(context, cursor, z2 ? 1 : 2); } public View newDropDownView(Context context, Cursor cursor, ViewGroup viewGroup) { return newView(context, cursor, viewGroup); } public abstract View newView(Context context, Cursor cursor, ViewGroup viewGroup); public void onContentChanged() { Cursor cursor; if (this.mAutoRequery && (cursor = this.mCursor) != null && !cursor.isClosed()) { this.mDataValid = this.mCursor.requery(); } } @Override // androidx.cursoradapter.widget.CursorFilter.CursorFilterClient public Cursor runQueryOnBackgroundThread(CharSequence charSequence) { FilterQueryProvider filterQueryProvider = this.mFilterQueryProvider; return filterQueryProvider != null ? filterQueryProvider.runQuery(charSequence) : this.mCursor; } public void setFilterQueryProvider(FilterQueryProvider filterQueryProvider) { this.mFilterQueryProvider = filterQueryProvider; } public Cursor swapCursor(Cursor cursor) { Cursor cursor2 = this.mCursor; if (cursor == cursor2) { return null; } if (cursor2 != null) { ChangeObserver changeObserver = this.mChangeObserver; if (changeObserver != null) { cursor2.unregisterContentObserver(changeObserver); } DataSetObserver dataSetObserver = this.mDataSetObserver; if (dataSetObserver != null) { cursor2.unregisterDataSetObserver(dataSetObserver); } } this.mCursor = cursor; if (cursor != null) { ChangeObserver changeObserver2 = this.mChangeObserver; if (changeObserver2 != null) { cursor.registerContentObserver(changeObserver2); } DataSetObserver dataSetObserver2 = this.mDataSetObserver; if (dataSetObserver2 != null) { cursor.registerDataSetObserver(dataSetObserver2); } this.mRowIDColumn = cursor.getColumnIndexOrThrow("_id"); this.mDataValid = true; notifyDataSetChanged(); } else { this.mRowIDColumn = -1; this.mDataValid = false; notifyDataSetInvalidated(); } return cursor2; } }