ADD week 5
This commit is contained in:
		| @@ -0,0 +1,263 @@ | ||||
| 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.cursoradapter.widget.CursorFilter; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| 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; | ||||
|     protected boolean mAutoRequery; | ||||
|     protected ChangeObserver mChangeObserver; | ||||
|     protected Context mContext; | ||||
|     protected Cursor mCursor; | ||||
|     protected CursorFilter mCursorFilter; | ||||
|     protected DataSetObserver mDataSetObserver; | ||||
|     protected boolean mDataValid; | ||||
|     protected FilterQueryProvider mFilterQueryProvider; | ||||
|     protected int mRowIDColumn; | ||||
|  | ||||
|     public abstract void bindView(View view, Context context, Cursor cursor); | ||||
|  | ||||
|     @Override // androidx.cursoradapter.widget.CursorFilter.CursorFilterClient | ||||
|     public Cursor getCursor() { | ||||
|         return this.mCursor; | ||||
|     } | ||||
|  | ||||
|     public FilterQueryProvider getFilterQueryProvider() { | ||||
|         return this.mFilterQueryProvider; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.BaseAdapter, android.widget.Adapter | ||||
|     public boolean hasStableIds() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public abstract View newView(Context context, Cursor cursor, ViewGroup viewGroup); | ||||
|  | ||||
|     public void setFilterQueryProvider(FilterQueryProvider filterQueryProvider) { | ||||
|         this.mFilterQueryProvider = filterQueryProvider; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public CursorAdapter(Context context, Cursor cursor) { | ||||
|         init(context, cursor, 1); | ||||
|     } | ||||
|  | ||||
|     public CursorAdapter(Context context, Cursor cursor, boolean z) { | ||||
|         init(context, cursor, z ? 1 : 2); | ||||
|     } | ||||
|  | ||||
|     public CursorAdapter(Context context, Cursor cursor, int i) { | ||||
|         init(context, cursor, i); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     protected void init(Context context, Cursor cursor, boolean z) { | ||||
|         init(context, cursor, z ? 1 : 2); | ||||
|     } | ||||
|  | ||||
|     void init(Context context, Cursor cursor, int i) { | ||||
|         if ((i & 1) == 1) { | ||||
|             i |= 2; | ||||
|             this.mAutoRequery = true; | ||||
|         } else { | ||||
|             this.mAutoRequery = false; | ||||
|         } | ||||
|         boolean z = cursor != null; | ||||
|         this.mCursor = cursor; | ||||
|         this.mDataValid = z; | ||||
|         this.mContext = context; | ||||
|         this.mRowIDColumn = z ? cursor.getColumnIndexOrThrow("_id") : -1; | ||||
|         if ((i & 2) == 2) { | ||||
|             this.mChangeObserver = new ChangeObserver(); | ||||
|             this.mDataSetObserver = new MyDataSetObserver(); | ||||
|         } else { | ||||
|             this.mChangeObserver = null; | ||||
|             this.mDataSetObserver = null; | ||||
|         } | ||||
|         if (z) { | ||||
|             ChangeObserver changeObserver = this.mChangeObserver; | ||||
|             if (changeObserver != null) { | ||||
|                 cursor.registerContentObserver(changeObserver); | ||||
|             } | ||||
|             DataSetObserver dataSetObserver = this.mDataSetObserver; | ||||
|             if (dataSetObserver != null) { | ||||
|                 cursor.registerDataSetObserver(dataSetObserver); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Adapter | ||||
|     public int getCount() { | ||||
|         Cursor cursor; | ||||
|         if (!this.mDataValid || (cursor = this.mCursor) == null) { | ||||
|             return 0; | ||||
|         } | ||||
|         return cursor.getCount(); | ||||
|     } | ||||
|  | ||||
|     @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 this.mCursor.getLong(this.mRowIDColumn); | ||||
|         } | ||||
|         return 0L; | ||||
|     } | ||||
|  | ||||
|     @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"); | ||||
|         } | ||||
|         if (!this.mCursor.moveToPosition(i)) { | ||||
|             throw new IllegalStateException("couldn't move cursor to position " + i); | ||||
|         } | ||||
|         if (view == null) { | ||||
|             view = newView(this.mContext, this.mCursor, viewGroup); | ||||
|         } | ||||
|         bindView(view, this.mContext, this.mCursor); | ||||
|         return view; | ||||
|     } | ||||
|  | ||||
|     @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; | ||||
|     } | ||||
|  | ||||
|     public View newDropDownView(Context context, Cursor cursor, ViewGroup viewGroup) { | ||||
|         return newView(context, cursor, viewGroup); | ||||
|     } | ||||
|  | ||||
|     public void changeCursor(Cursor cursor) { | ||||
|         Cursor swapCursor = swapCursor(cursor); | ||||
|         if (swapCursor != null) { | ||||
|             swapCursor.close(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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; | ||||
|     } | ||||
|  | ||||
|     public CharSequence convertToString(Cursor cursor) { | ||||
|         return cursor == null ? "" : cursor.toString(); | ||||
|     } | ||||
|  | ||||
|     public Cursor runQueryOnBackgroundThread(CharSequence charSequence) { | ||||
|         FilterQueryProvider filterQueryProvider = this.mFilterQueryProvider; | ||||
|         return filterQueryProvider != null ? filterQueryProvider.runQuery(charSequence) : this.mCursor; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Filterable | ||||
|     public Filter getFilter() { | ||||
|         if (this.mCursorFilter == null) { | ||||
|             this.mCursorFilter = new CursorFilter(this); | ||||
|         } | ||||
|         return this.mCursorFilter; | ||||
|     } | ||||
|  | ||||
|     protected void onContentChanged() { | ||||
|         Cursor cursor; | ||||
|         if (!this.mAutoRequery || (cursor = this.mCursor) == null || cursor.isClosed()) { | ||||
|             return; | ||||
|         } | ||||
|         this.mDataValid = this.mCursor.requery(); | ||||
|     } | ||||
|  | ||||
|     private class ChangeObserver extends ContentObserver { | ||||
|         @Override // android.database.ContentObserver | ||||
|         public boolean deliverSelfNotifications() { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         ChangeObserver() { | ||||
|             super(new Handler()); | ||||
|         } | ||||
|  | ||||
|         @Override // android.database.ContentObserver | ||||
|         public void onChange(boolean z) { | ||||
|             CursorAdapter.this.onContentChanged(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private class MyDataSetObserver extends DataSetObserver { | ||||
|         MyDataSetObserver() { | ||||
|         } | ||||
|  | ||||
|         @Override // android.database.DataSetObserver | ||||
|         public void onChanged() { | ||||
|             CursorAdapter.this.mDataValid = true; | ||||
|             CursorAdapter.this.notifyDataSetChanged(); | ||||
|         } | ||||
|  | ||||
|         @Override // android.database.DataSetObserver | ||||
|         public void onInvalidated() { | ||||
|             CursorAdapter.this.mDataValid = false; | ||||
|             CursorAdapter.this.notifyDataSetInvalidated(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user