264 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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();
 | |
|         }
 | |
|     }
 | |
| }
 |