void init(Context context, Cursor c, int flags) { boolean cursorPresent = true; if ((flags & 1) == 1) { flags |= 2; this.mAutoRequery = true; } else { this.mAutoRequery = false; } if (c == null) { cursorPresent = false; } this.mCursor = c; this.mDataValid = cursorPresent; this.mContext = context; this.mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1; if ((flags & 2) == 2) { this.mChangeObserver = new ChangeObserver(); this.mDataSetObserver = new MyDataSetObserver(); } else { this.mChangeObserver = null; this.mDataSetObserver = null; } if (cursorPresent) { if (this.mChangeObserver != null) { c.registerContentObserver(this.mChangeObserver); } if (this.mDataSetObserver != null) { c.registerDataSetObserver(this.mDataSetObserver); } } }
/** * Swap in a new Cursor, returning the old Cursor. Unlike {@link #changeCursor(Cursor)}, the * returned old Cursor is <em>not</em> closed. * * @param newCursor The new cursor to be used. * @return Returns the previously set Cursor, or null if there wasa not one. If the given new * Cursor is the same instance is the previously set Cursor, null is also returned. */ public Cursor swapCursor(Cursor newCursor) { if (newCursor == mCursor) { return null; } Cursor oldCursor = mCursor; if (oldCursor != null) { if (mChangeObserver != null) oldCursor.unregisterContentObserver(mChangeObserver); if (mDataSetObserver != null) oldCursor.unregisterDataSetObserver(mDataSetObserver); } mCursor = newCursor; if (newCursor != null) { if (mChangeObserver != null) newCursor.registerContentObserver(mChangeObserver); if (mDataSetObserver != null) newCursor.registerDataSetObserver(mDataSetObserver); mRowIDColumn = newCursor.getColumnIndexOrThrow("_id"); mDataValid = true; // notify the observers about the new cursor notifyDataSetChanged(); } else { mRowIDColumn = -1; mDataValid = false; // notify the observers about the lack of a data set // There is no notifyDataSetInvalidated() method in RecyclerView.Adapter notifyDataSetChanged(); } return oldCursor; }
/** * Swap in a new Cursor, returning the old Cursor. Unlike {@link #changeCursor(Cursor)}, the * returned old Cursor is <em>not</em> closed. * * @param newCursor The new cursor to be used. * @return Returns the previously set Cursor, or null if there wasa not one. If the given new * Cursor is the same instance is the previously set Cursor, null is also returned. */ public Cursor swapCursor(Cursor newCursor) { if (newCursor == mCursor) { return null; } Cursor oldCursor = mCursor; if (oldCursor != null) { if (mChangeObserver != null) oldCursor.unregisterContentObserver(mChangeObserver); if (mDataSetObserver != null) oldCursor.unregisterDataSetObserver(mDataSetObserver); } mCursor = newCursor; if (newCursor != null) { if (mChangeObserver != null) newCursor.registerContentObserver(mChangeObserver); if (mDataSetObserver != null) newCursor.registerDataSetObserver(mDataSetObserver); mRowIDColumn = newCursor.getColumnIndexOrThrow("_id"); mDataValid = true; // notify the observers about the new cursor notifyDataSetChanged(); } else { mRowIDColumn = -1; mDataValid = false; // notify the observers about the lack of a data set // notifyDataSetInvalidated(); notifyItemRangeRemoved(0, getItemCount()); } return oldCursor; }
public void changeCursor(Cursor cursor) { if (cursor == mCursor) { return; } if (mCursor != null) { mCursor.unregisterContentObserver(mChangeObserver); mCursor.unregisterDataSetObserver(mDataSetObserver); mCursor.close(); } mCursor = cursor; resetCache(); findGroups(); if (cursor != null) { cursor.registerContentObserver(mChangeObserver); cursor.registerDataSetObserver(mDataSetObserver); mRowIdColumnIndex = cursor.getColumnIndexOrThrow("_id"); mDataValid = true; notifyDataSetChanged(); } else { mRowIdColumnIndex = -1; mDataValid = false; // notify the observers about the lack of a data set notifyDataSetInvalidated(); } }
@Override public void onCreate() { cursor = context .getContentResolver() .query( DatabaseContract.scores_table.buildScoreWithDate(), null, null, new String[] {Utilies.getFormatedDate(new Date(System.currentTimeMillis()))}, null); observer = new ContentObserver(new Handler(Looper.getMainLooper())) { public void onChange(boolean selfChange, Uri uri) { onChange(selfChange); } public void onChange(boolean selfChange) { Log.d(TAG, "WidgetService.observer.onChange()"); AppWidgetManager.getInstance(WidgetService.this) .notifyAppWidgetViewDataChanged(appWidgetId, R.id.scores_list); } }; cursor.registerContentObserver(observer); // }
@Override public void onCreate() { Timber.d("Create"); cursor = context .getContentResolver() .query( TravisDatabase.BUILD_MODEL.URI, TravisDatabase.BUILD_MODEL.FULL_PROJECTION, null, null, Build_Table.startedAt + "DESC"); observer = new ContentObserver(new Handler(Looper.getMainLooper())) { public void onChange(boolean selfChange, Uri uri) { onChange(selfChange); } public void onChange(boolean selfChange) { AppWidgetManager.getInstance(WidgetService.this) .notifyAppWidgetViewDataChanged(appWidgetId, R.id.build_list); } }; cursor.registerContentObserver(observer); }
public Cursor swapCursor(Cursor newCursor) { if (newCursor == this.mCursor) { return null; } Cursor oldCursor = this.mCursor; if (oldCursor != null) { if (this.mChangeObserver != null) { oldCursor.unregisterContentObserver(this.mChangeObserver); } if (this.mDataSetObserver != null) { oldCursor.unregisterDataSetObserver(this.mDataSetObserver); } } this.mCursor = newCursor; if (newCursor != null) { if (this.mChangeObserver != null) { newCursor.registerContentObserver(this.mChangeObserver); } if (this.mDataSetObserver != null) { newCursor.registerDataSetObserver(this.mDataSetObserver); } this.mRowIDColumn = newCursor.getColumnIndexOrThrow("_id"); this.mDataValid = true; notifyDataSetChanged(); return oldCursor; } this.mRowIDColumn = -1; this.mDataValid = false; notifyDataSetInvalidated(); return oldCursor; }
/* This test uses the provider to insert and then update the data. Uncomment this test to see if your update location is functioning correctly. */ public void testUpdateLocation() { // Create a new map of values, where column names are the keys ContentValues values = TestUtilities.createNorthPoleLocationValues(); Uri locationUri = mContext.getContentResolver().insert(LocationEntry.CONTENT_URI, values); long locationRowId = ContentUris.parseId(locationUri); // Verify we got a row back. assertTrue(locationRowId != -1); Log.d(LOG_TAG, "New row id: " + locationRowId); ContentValues updatedValues = new ContentValues(values); updatedValues.put(LocationEntry._ID, locationRowId); updatedValues.put(LocationEntry.CITY_NAME, "Santa's Village"); // Create a cursor with observer to make sure that the content provider is notifying // the observers as expected Cursor locationCursor = mContext.getContentResolver().query(LocationEntry.CONTENT_URI, null, null, null, null); TestUtilities.TestContentObserver tco = TestUtilities.getTestContentObserver(); locationCursor.registerContentObserver(tco); int count = mContext .getContentResolver() .update( LocationEntry.CONTENT_URI, updatedValues, LocationEntry._ID + "= ?", new String[] {Long.toString(locationRowId)}); assertEquals(count, 1); // Test to make sure our observer is called. If not, we throw an assertion. // // Students: If your code is failing here, it means that your content provider // isn't calling getContext().getContentResolver().notifyChange(uri, null); tco.waitForNotificationOrFail(); locationCursor.unregisterContentObserver(tco); // locationCursor.close(); // A cursor is your primary interface to the query results. Cursor cursor = mContext .getContentResolver() .query( LocationEntry.CONTENT_URI, null, // projection LocationEntry._ID + " = " + locationRowId, null, // Values for the "where" clause null // sort order ); TestUtilities.validateCursor( "testUpdateLocation. Error validating location entry update.", cursor, updatedValues); // cursor.close(); }
@Override protected void onResume() { super.onResume(); if (haveCursors()) { mDateSortedCursor.registerContentObserver(mContentObserver); mDateSortedCursor.registerDataSetObserver(mDataSetObserver); refresh(); } }
void init(Cursor c) { boolean cursorPresent = c != null; mCursor = c; mDataValid = cursorPresent; mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1; mChangeObserver = new ChangeObserver(); mDataSetObserver = new MyDataSetObserver(); if (cursorPresent) { if (mChangeObserver != null) c.registerContentObserver(mChangeObserver); if (mDataSetObserver != null) c.registerDataSetObserver(mDataSetObserver); } }
void init(Context paramContext, Cursor paramCursor, int paramInt) { int i = 1; label25: int j; if ((paramInt & 0x1) == i) { paramInt |= 0x2; this.mAutoRequery = i; if (paramCursor == null) { break label142; } this.mCursor = paramCursor; this.mDataValid = i; this.mContext = paramContext; if (i == 0) { break label148; } j = paramCursor.getColumnIndexOrThrow("_id"); label56: this.mRowIDColumn = j; if ((paramInt & 0x2) != 2) { break label154; } this.mChangeObserver = new ChangeObserver(); } for (this.mDataSetObserver = new MyDataSetObserver(null);; this.mDataSetObserver = null) { if (i != 0) { if (this.mChangeObserver != null) { paramCursor.registerContentObserver(this.mChangeObserver); } if (this.mDataSetObserver != null) { paramCursor.registerDataSetObserver(this.mDataSetObserver); } } return; this.mAutoRequery = false; break; label142: i = 0; break label25; label148: j = -1; break label56; label154: this.mChangeObserver = null; } }
/** * Default Constructor. * * @param c {@link ConversationListActivity} */ public ConversationAdapter(final Activity c) { super(c, R.layout.conversationlist_item, null, true); activity = c; SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(activity); useGridLayout = PreferencesActivity.getGridlayoutEnabled(activity); if (useGridLayout) { super.setViewResource(R.layout.conversation_square); } final ContentResolver cr = c.getContentResolver(); queryHandler = new BackgroundQueryHandler(cr); SpamDB spam = new SpamDB(c); spam.open(); blacklist = spam.getAllEntries(); spam.close(); defaultContactAvatar = c.getResources().getDrawable(R.drawable.ic_contact_picture); convertNCR = PreferencesActivity.decodeDecimalNCR(c); showEmoticons = PreferencesActivity.showEmoticons(c); textSize = PreferencesActivity.getTextsize(c); textColor = PreferencesActivity.getTextcolor(c); Cursor cursor = null; try { cursor = cr.query(Conversation.URI_SIMPLE, Conversation.PROJECTION_SIMPLE, null, null, null); } catch (SQLiteException e) { Log.e(TAG, "error getting conversations", e); } /* {@link Cursor} to the original Content to listen for changes. */ Cursor origCursor = cursor; if (origCursor != null) { origCursor.registerContentObserver( new ContentObserver(new Handler()) { @Override public void onChange(final boolean selfChange) { super.onChange(selfChange); if (!selfChange) { Log.d(TAG, "call startMsgListQuery();"); ConversationAdapter.this.startMsgListQuery(); Log.d(TAG, "invalidate cache"); Conversation.invalidate(); } } }); } // startMsgListQuery(); }
public synchronized void ini() { if (mSDKVersion >= VersionUtils.Android_SDK_4_2) { return; } String[] projection = new String[] {"apn", "name", "port", "proxy"}; unIni(); mCursor = mContext.getContentResolver().query(PREFERRED_APN_URI, projection, null, null, null); if (mCursor != null) { mCursor.registerContentObserver(mChangeObserver); // mCursor.registerDataSetObserver(observer) } }
/** Start address book monitoring */ public void start() { if (sLogger.isActivated()) { sLogger.info("Start address book monitoring"); } /* Instantiate background executor */ mCleanupExecutor = Executors.newSingleThreadExecutor(); if (!mObserverIsRegistered) { /* Instantiate content observer */ mContactsContractObserver = new ContactsContractObserver(new Handler()); mContactsContractCursor = mContentResolver.query(Phone.CONTENT_URI, null, null, null, null); CursorUtil.assertCursorIsNotNull(mContactsContractCursor, Phone.CONTENT_URI); mContactsContractCursor.registerContentObserver(mContactsContractObserver); mObserverIsRegistered = true; } }
void init(Context context, Cursor c, int flags) { boolean cursorPresent = c != null; mCursor = c; mDataValid = cursorPresent; mContext = context; mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1; if ((flags & FLAG_REGISTER_CONTENT_OBSERVER) == FLAG_REGISTER_CONTENT_OBSERVER) { mChangeObserver = new ChangeObserver(); mDataSetObserver = new MyDataSetObserver(); } else { mChangeObserver = null; mDataSetObserver = null; } if (cursorPresent) { if (mChangeObserver != null) c.registerContentObserver(mChangeObserver); if (mDataSetObserver != null) c.registerDataSetObserver(mDataSetObserver); } setHasStableIds(true); // 这个地方要注意一下,需要将表关联ID设置为true }
public void setUri(Uri myUri) { Log.d(TAG, "Loading comments for " + myUri); thisThread = myUri; c = getContext() .getContentResolver() .query(thisThread, Comment.PROJECTION, null, null, Comment.DEFAULT_SORT_BY); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { ProviderUtils.dumpCursorToLog(c, Comment.PROJECTION); } getContext().startService(new Intent(Intent.ACTION_SYNC, thisThread)); c.registerContentObserver( new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { c.requery(); } }); setAdapter(new DiscussionBoardAdapter(getContext(), c)); }
private void initNote() { final View userNoteView = View.inflate(this, R.layout.base_list_item, null); FrameLayout frameLayout = ((FrameLayout) findViewById(R.id.user_note)); frameLayout.addView(userNoteView); frameLayout.setOnClickListener(myNoteListener); cursor = getCursor(); updateUserNote(userNoteView, cursor); cursor.registerContentObserver( new ContentObserver(new Handler()) { @Override public boolean deliverSelfNotifications() { return true; } @Override public void onChange(boolean b) { cursor.requery(); if (cursor.getCount() > 0) { updateUserNote(userNoteView, cursor); } } }); }
public void registerContentObserver(ContentObserver observer) { mDatabaseCursor.registerContentObserver(observer); }
/** * Registers an observer to get notifications from the content mApp when the cursor needs to be * refreshed. */ void registerContentObserver(Cursor cursor, ContentObserver observer) { cursor.registerContentObserver(mObserver); }
public void onLoadFinished(Loader<Cursor> paramLoader, Cursor paramCursor) { int i = 1; Cursor localCursor = this.mFeedAdapter.getCursor(); switch (paramLoader.getId()) { default: case 1: case 2: label224: label226: do { while (true) { return; if (this.mCurrentTab == i) { if (localCursor != null) localCursor.unregisterContentObserver(this.mChangeObserver); if (paramCursor != null) paramCursor.registerContentObserver(this.mChangeObserver); this.mFeedAdapter.swapCursor(paramCursor); if ((this.mFeedAdapter.isEmpty()) && ((0x2 & this.mFetchFlags) == 0)) fetchContent(3, i); while (true) { if ((this.mFeedAdapter.isEmpty()) || (this.mLastFetchType != 7)) break label224; hideProgress(7); if (this.mFeedAdapter.getCursor() == null) break label226; if (this.mFeedAdapter.getCursor().getCount() > this.mCursorPreviousPosts) break; fetchContent(i, i); return; if (this.mRepostsToggled) { fetchContent(3, false); this.mRepostsToggled = false; } else { hideProgress(3); if (!this.mFeedAdapter.isEmpty()) showSadface(false); else showSadface(false); } } } } CrashUtil.logException(new VineException(), "Possible null cursor after swap.", new Object[0]); return; } while (this.mCurrentTab != 2); if (localCursor != null) localCursor.unregisterContentObserver(this.mChangeObserver); if (paramCursor != null) paramCursor.registerContentObserver(this.mChangeObserver); this.mFeedAdapter.swapCursor(paramCursor); if ((this.mFeedAdapter.isEmpty()) && ((0x4 & this.mFetchFlags) == 0)) fetchContent(3, i); while ((!this.mFeedAdapter.isEmpty()) && (this.mLastFetchType == 7)) { if (this.mFeedAdapter.getCursor().getCount() <= this.mCursorPreviousLikes) fetchContent(i, i); hideProgress(7); return; hideProgress(3); if (!this.mFeedAdapter.isEmpty()) showSadface(false); else showSadface(false); } case 3: } if ((paramCursor != null) && (paramCursor.moveToFirst())) if (paramCursor.getInt(0) <= 0); for (this.mHideProfileReposts = i; ; this.mHideProfileReposts = false) { this.mSectionAdapter = null; setup(); initProfile(); return; int j = 0; break; } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // must be at the beginning of any activity that can be called from an // external intent Log.i(t, "Starting up, creating directories"); try { MyStatus.createODKDirs(); } catch (RuntimeException e) { createErrorDialog(e.getMessage(), EXIT); return; } setContentView(R.layout.main_menu); { // dynamically construct the "ODK Collect vA.B" string TextView mainMenuMessageLabel = (TextView) findViewById(R.id.main_menu_header); mainMenuMessageLabel.setText(MyStatus.getInstance().getVersionedAppName()); } setTitle(getString(R.string.app_name) + " > " + getString(R.string.main_menu)); File f = new File(MyStatus.ODK_ROOT + "/collect.settings"); if (f.exists()) { boolean success = loadSharedPreferencesFromFile(f); if (success) { Toast.makeText(this, "Settings successfully loaded from file", Toast.LENGTH_LONG).show(); f.delete(); } else { Toast.makeText( this, "Sorry, settings file is corrupt and should be deleted or replaced", Toast.LENGTH_LONG) .show(); } } mReviewSpacer = findViewById(R.id.review_spacer); mGetFormsSpacer = findViewById(R.id.get_forms_spacer); mAdminPreferences = this.getSharedPreferences(AdminPreferencesActivity.ADMIN_PREFERENCES, 0); // enter data button. expects a result. mEnterDataButton = (Button) findViewById(R.id.enter_data); mEnterDataButton.setText(getString(R.string.enter_data_button)); mEnterDataButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { MyStatus.getInstance().getActivityLogger().logAction(this, "fillBlankForm", "click"); Intent i = new Intent(getApplicationContext(), FormChooserList.class); startActivity(i); } }); // review data button. expects a result. mReviewDataButton = (Button) findViewById(R.id.review_data); mReviewDataButton.setText(getString(R.string.review_data_button)); mReviewDataButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { MyStatus.getInstance().getActivityLogger().logAction(this, "editSavedForm", "click"); Intent i = new Intent(getApplicationContext(), InstanceChooserList.class); startActivity(i); } }); // send data button. expects a result. mSendDataButton = (Button) findViewById(R.id.send_data); mSendDataButton.setText(getString(R.string.send_data_button)); mSendDataButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { MyStatus.getInstance().getActivityLogger().logAction(this, "uploadForms", "click"); Intent i = new Intent(getApplicationContext(), InstanceUploaderList.class); startActivity(i); } }); // manage forms button. no result expected. mGetFormsButton = (Button) findViewById(R.id.get_forms); mGetFormsButton.setText(getString(R.string.get_forms)); mGetFormsButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { MyStatus.getInstance() .getActivityLogger() .logAction(this, "downloadBlankForms", "click"); Intent i = new Intent(getApplicationContext(), FormDownloadList.class); startActivity(i); } }); // manage forms button. no result expected. mManageFilesButton = (Button) findViewById(R.id.manage_forms); mManageFilesButton.setText(getString(R.string.manage_files)); mManageFilesButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { MyStatus.getInstance().getActivityLogger().logAction(this, "deleteSavedForms", "click"); Intent i = new Intent(getApplicationContext(), FileManagerTabs.class); startActivity(i); } }); // count for finalized instances String selection = InstanceColumns.STATUS + "=? or " + InstanceColumns.STATUS + "=?"; String selectionArgs[] = { InstanceProviderAPI.STATUS_COMPLETE, InstanceProviderAPI.STATUS_SUBMISSION_FAILED }; mFinalizedCursor = managedQuery(InstanceColumns.CONTENT_URI, null, selection, selectionArgs, null); startManagingCursor(mFinalizedCursor); mCompletedCount = mFinalizedCursor.getCount(); mFinalizedCursor.registerContentObserver(mContentObserver); // count for finalized instances String selectionSaved = InstanceColumns.STATUS + "=?"; String selectionArgsSaved[] = {InstanceProviderAPI.STATUS_INCOMPLETE}; mSavedCursor = managedQuery(InstanceColumns.CONTENT_URI, null, selectionSaved, selectionArgsSaved, null); startManagingCursor(mSavedCursor); mSavedCount = mFinalizedCursor.getCount(); // don't need to set a content observer because it can't change in the // background updateButtons(); }