X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/d4b9b531d5c6e8b112bdd6dd3ab0e9fdc7afcb25..40b5fb815613c4cf9023c9c9ad93cda0d2521f86:/src/com/owncloud/android/providers/FileContentProvider.java diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index 54e67a24..fc038070 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -24,6 +24,7 @@ import java.util.HashMap; import com.owncloud.android.R; import com.owncloud.android.db.ProviderMeta; import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; +import com.owncloud.android.lib.resources.files.FileUtils; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.utils.Log_OC; @@ -99,6 +100,8 @@ public class FileContentProvider extends ContentProvider { private static final int DIRECTORY = 2; private static final int ROOT_DIRECTORY = 3; private static final int SHARES = 4; + + private static final String TAG = FileContentProvider.class.getSimpleName(); // Projection for ocshares table private static HashMap mOCSharesProjectionMap; @@ -139,20 +142,57 @@ public class FileContentProvider extends ContentProvider { @Override public int delete(Uri uri, String where, String[] whereArgs) { - //Log_OC.d(TAG, "Deleting " + uri + " at provider " + this); + Log_OC.d(TAG, "Deleting " + uri + " at provider " + this); int count = 0; SQLiteDatabase db = mDbHelper.getWritableDatabase(); db.beginTransaction(); + + // Get parentId to notify the change + long parentId = getParentId(uri); + + // Delete action try { count = delete(db, uri, where, whereArgs); db.setTransactionSuccessful(); } finally { db.endTransaction(); } + Log_OC.d(TAG, "Uri " + uri); getContext().getContentResolver().notifyChange(uri, null); + + // Notify the change to the parent folder + notifyChangeToParentUri(parentId); return count; } + private long getParentId(Uri uri) { + long parentId = -1; + + if (mUriMatcher.match(uri) == SINGLE_FILE || mUriMatcher.match(uri) == DIRECTORY) { + String fileId = uri.toString().substring(uri.toString().lastIndexOf(FileUtils.PATH_SEPARATOR) + 1); + Uri selectFileUri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, fileId); + String[] fileProjection = new String[] { ProviderTableMeta.FILE_PARENT }; + Cursor fileCursor = query(selectFileUri, fileProjection, null, null, null); + + if (fileCursor != null && fileCursor.moveToFirst()) { + parentId = fileCursor.getLong(fileCursor.getColumnIndex(ProviderTableMeta.FILE_PARENT)); + } + fileCursor.close(); + } + Log_OC.d(TAG, "getParentId = " + parentId); + return parentId; + } + + private void notifyChangeToParentUri(long parentId) { + if (parentId != -1) { + Uri parentUri = Uri.withAppendedPath( + ProviderTableMeta.CONTENT_URI_DIR, + String.valueOf(parentId)); + Log_OC.d(TAG, "ParentUri " + parentUri); + getContext().getContentResolver().notifyChange(parentUri, null); + } + } + private int delete(SQLiteDatabase db, Uri uri, String where, String[] whereArgs) { int count = 0; switch (mUriMatcher.match(uri)) { @@ -250,9 +290,12 @@ public class FileContentProvider extends ContentProvider { @Override public Uri insert(Uri uri, ContentValues values) { //Log_OC.d(TAG, "Inserting " + values.getAsString(ProviderTableMeta.FILE_PATH) + " at provider " + this); + Log_OC.d(TAG, "Uri " + uri); Uri newUri = null; SQLiteDatabase db = mDbHelper.getWritableDatabase(); db.beginTransaction(); + + // Insert action try { newUri = insert(db, uri, values); db.setTransactionSuccessful(); @@ -260,6 +303,12 @@ public class FileContentProvider extends ContentProvider { db.endTransaction(); } getContext().getContentResolver().notifyChange(newUri, null); + + // Get parentId to notify the change + long parentId = getParentId(newUri); + // Notify the change to the parent folder + notifyChangeToParentUri(parentId); + return newUri; } @@ -414,6 +463,7 @@ public class FileContentProvider extends ContentProvider { // DB case_sensitive db.execSQL("PRAGMA case_sensitive_like = true"); Cursor c = sqlQuery.query(db, projection, selection, selectionArgs, null, null, order); + Log_OC.d(TAG, "setting notification URI: " + uri); c.setNotificationUri(getContext().getContentResolver(), uri); return c; } @@ -421,7 +471,8 @@ public class FileContentProvider extends ContentProvider { @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { - //Log_OC.d(TAG, "Updating " + values.getAsString(ProviderTableMeta.FILE_PATH) + " at provider " + this); + Log_OC.d(TAG, "Updating " + values.getAsString(ProviderTableMeta.FILE_PATH) + " at provider " + this); + Log_OC.d(TAG, "Uri " + uri); int count = 0; SQLiteDatabase db = mDbHelper.getWritableDatabase(); db.beginTransaction(); @@ -432,6 +483,12 @@ public class FileContentProvider extends ContentProvider { db.endTransaction(); } getContext().getContentResolver().notifyChange(uri, null); + + // Get parentId to notify the change + long parentId = getParentId(uri); + // Notify the change to the parent folder + notifyChangeToParentUri(parentId); + return count; }