Revert commit 6cdd830a7be28b77688efc3cd62857c1e71a1342
[pub/Android/ownCloud.git] / src / com / owncloud / android / providers / FileContentProvider.java
index 54e67a2..fc03807 100644 (file)
@@ -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<String, String> 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;
     }