Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22f71142 authored by Fred Quintana's avatar Fred Quintana Committed by The Android Open Source Project
Browse files

Automated import from //branches/master/...@141380,141380

parent ef0996ff
Loading
Loading
Loading
Loading
+287 −286
Original line number Diff line number Diff line
@@ -164,12 +164,15 @@ public abstract class AbstractTableMerger
            mDb.update(mDeletedTable, mSyncMarkValues, null, null);
        }

        Cursor localCursor = null;
        Cursor deletedCursor = null;
        Cursor diffsCursor = null;
        try {
            // load the local database entries, so we can merge them with the server
            final String[] accountSelectionArgs = new String[]{account};
        Cursor localCursor = mDb.query(mTable, syncDirtyProjection,
            localCursor = mDb.query(mTable, syncDirtyProjection,
                    SELECT_MARKED, accountSelectionArgs, null, null,
                    mTable + "." + _SYNC_ID);
        Cursor deletedCursor;
            if (mDeletedTable != null) {
                deletedCursor = mDb.query(mDeletedTable, syncIdAndVersionProjection,
                        SELECT_MARKED, accountSelectionArgs, null, null,
@@ -180,7 +183,7 @@ public abstract class AbstractTableMerger
            }

            // Apply updates and insertions from the server
        Cursor diffsCursor = serverDiffs.query(mTableURL,
            diffsCursor = serverDiffs.query(mTableURL,
                    null, null, null, mTable + "." + _SYNC_ID);
            int deletedSyncIDColumn = deletedCursor.getColumnIndexOrThrow(_SYNC_ID);
            int deletedSyncVersionColumn = deletedCursor.getColumnIndexOrThrow(_SYNC_VERSION);
@@ -195,9 +198,6 @@ public abstract class AbstractTableMerger
            deletedCursor.moveToFirst();
            while (diffsCursor.moveToNext()) {
                if (mIsMergeCancelled) {
                localCursor.close();
                deletedCursor.close();
                diffsCursor.close();
                    return;
                }
                mDb.yieldIfContended();
@@ -251,9 +251,6 @@ public abstract class AbstractTableMerger

                while (!localCursor.isAfterLast()) {
                    if (mIsMergeCancelled) {
                    localCursor.deactivate();
                    deletedCursor.deactivate();
                    diffsCursor.deactivate();
                        return;
                    }
                    localCount++;
@@ -418,9 +415,6 @@ public abstract class AbstractTableMerger
            if (!diffsArePartial) {
                while (!localCursor.isAfterLast() && !TextUtils.isEmpty(localCursor.getString(2))) {
                    if (mIsMergeCancelled) {
                    localCursor.deactivate();
                    deletedCursor.deactivate();
                    diffsCursor.deactivate();
                        return;
                    }
                    localCount++;
@@ -439,29 +433,32 @@ public abstract class AbstractTableMerger
                    mDb.yieldIfContended();
                }
            }

            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "checked " + localCount +
                    " local entries");
        diffsCursor.deactivate();
        localCursor.deactivate();
        deletedCursor.deactivate();
        } finally {
            if (diffsCursor != null) diffsCursor.close();
            if (localCursor != null) localCursor.close();
            if (deletedCursor != null) deletedCursor.close();
        }


        if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "applying deletions from the server");

        // Apply deletions from the server
        if (mDeletedTableURL != null) {
            diffsCursor = serverDiffs.query(mDeletedTableURL, null, null, null, null);

            try {
                while (diffsCursor.moveToNext()) {
                    if (mIsMergeCancelled) {
                    diffsCursor.deactivate();
                        return;
                    }
                    // delete all rows that match each element in the diffsCursor
                    fullyDeleteMatchingRows(diffsCursor, account, syncResult);
                    mDb.yieldIfContended();
                }
            diffsCursor.deactivate();
            } finally {
                diffsCursor.close();
            }
        }
    }

@@ -471,8 +468,9 @@ public abstract class AbstractTableMerger
        final boolean deleteBySyncId = !diffsCursor.isNull(serverSyncIdColumn);

        // delete the rows explicitly so that the delete operation can be overridden
        final Cursor c;
        final String[] selectionArgs;
        Cursor c = null;
        try {
            if (deleteBySyncId) {
                selectionArgs = new String[]{diffsCursor.getString(serverSyncIdColumn), account};
                c = mDb.query(mTable, new String[]{BaseColumns._ID}, SELECT_BY_SYNC_ID_AND_ACCOUNT,
@@ -483,14 +481,13 @@ public abstract class AbstractTableMerger
                c = mDb.query(mTable, new String[]{BaseColumns._ID}, SELECT_BY_ID, selectionArgs,
                        null, null, null);
            }
        try {
            c.moveToFirst();
            while (!c.isAfterLast()) {
                deleteRow(c); // advances the cursor
                syncResult.stats.numDeletes++;
            }
        } finally {
            c.deactivate();
          if (c != null) c.close();
        }
        if (deleteBySyncId && mDeletedTable != null) {
            mDb.delete(mDeletedTable, SELECT_BY_SYNC_ID_AND_ACCOUNT, selectionArgs);
@@ -526,12 +523,13 @@ public abstract class AbstractTableMerger

        // Generate the client updates and insertions
        // Create a cursor for dirty records
        long numInsertsOrUpdates = 0;
        Cursor localChangesCursor = mDb.query(mTable, null, SELECT_UNSYNCED, accountSelectionArgs,
                null, null, null);
        long numInsertsOrUpdates = localChangesCursor.getCount();
        try {
            numInsertsOrUpdates = localChangesCursor.getCount();
            while (localChangesCursor.moveToNext()) {
                if (mIsMergeCancelled) {
                localChangesCursor.close();
                    return;
                }
                if (clientDiffs == null) {
@@ -544,7 +542,9 @@ public abstract class AbstractTableMerger
                        _SYNC_LOCAL_ID);
                clientDiffs.insert(mTableURL, mValues);
            }
        } finally {
          localChangesCursor.close();
        }

        // Generate the client deletions
        if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "generating client deletions");
@@ -555,11 +555,10 @@ public abstract class AbstractTableMerger
                    syncIdAndVersionProjection,
                    _SYNC_ACCOUNT + "=? AND " + _SYNC_ID + " IS NOT NULL", accountSelectionArgs,
                    null, null, mDeletedTable + "." + _SYNC_ID);

            try {
                numDeletedEntries = deletedCursor.getCount();
                while (deletedCursor.moveToNext()) {
                    if (mIsMergeCancelled) {
                    deletedCursor.close();
                        return;
                    }
                    if (clientDiffs == null) {
@@ -569,8 +568,10 @@ public abstract class AbstractTableMerger
                    DatabaseUtils.cursorRowToContentValues(deletedCursor, mValues);
                    clientDiffs.insert(mDeletedTableURL, mValues);
                }
            } finally {
                deletedCursor.close();
            }
        }

        if (clientDiffs != null) {
            mergeResult.tempContentProvider = clientDiffs;
+17 −15
Original line number Diff line number Diff line
@@ -591,10 +591,12 @@ public class DatabaseUtils {
    public static long queryNumEntries(SQLiteDatabase db, String table) {
        Cursor cursor = db.query(table, countProjection,
                null, null, null, null, null);
        try {
            cursor.moveToFirst();
        long count = cursor.getLong(0);
        cursor.deactivate();
        return count;
            return cursor.getLong(0);
        } finally {
            cursor.close();
        }
    }

    /**
+9 −6
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ public class SubscribedFeedsIntentService extends IntentService {
        ContentResolver contentResolver = context.getContentResolver();
        Cursor c = contentResolver.query(SubscribedFeeds.Accounts.CONTENT_URI,
                sAccountProjection, null, null, null);
        try {
            while (c.moveToNext()) {
                String account = c.getString(0);
                if (TextUtils.isEmpty(account)) {
@@ -162,7 +163,9 @@ public class SubscribedFeedsIntentService extends IntentService {
                }
                accounts.add(account);
            }
        c.deactivate();
        } finally {
            c.close();
        }

        // Clear the auth tokens for all these accounts so that we are sure
        // they will still be valid until the next time we refresh them.