Esempio n. 1
0
 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);
    }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
  /*
     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();
  }
Esempio n. 9
0
 @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);
    }
  }
Esempio n. 11
0
 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();
  }
Esempio n. 13
0
  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)
    }
  }
Esempio n. 14
0
  /** 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));
  }
Esempio n. 17
0
  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);
 }
Esempio n. 20
0
 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;
   }
 }
Esempio n. 21
0
  @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();
  }