Browse Source

Merge pull request #211 from owncloud/bug_folder_size_delay

Fixed: slowdown in performance due to computation of folders size
David A. Velasco 12 years ago
parent
commit
7680159cd7

+ 3 - 0
src/com/owncloud/android/datamodel/DataStorageManager.java

@@ -46,4 +46,7 @@ public interface DataStorageManager {
     public void moveDirectory(OCFile dir, String newPath);
     public void moveDirectory(OCFile dir, String newPath);
 
 
     public Vector<OCFile> getDirectoryImages(OCFile mParentFolder);
     public Vector<OCFile> getDirectoryImages(OCFile mParentFolder);
+    
+    public void calculateFolderSize(long id);
+    
 }
 }

+ 184 - 90
src/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.List;
 import java.util.Vector;
 import java.util.Vector;
 
 
+import com.owncloud.android.DisplayUtils;
 import com.owncloud.android.Log_OC;
 import com.owncloud.android.Log_OC;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
@@ -46,9 +47,9 @@ public class FileDataStorageManager implements DataStorageManager {
     private ContentResolver mContentResolver;
     private ContentResolver mContentResolver;
     private ContentProviderClient mContentProvider;
     private ContentProviderClient mContentProvider;
     private Account mAccount;
     private Account mAccount;
-    
+
     private static String TAG = "FileDataStorageManager";
     private static String TAG = "FileDataStorageManager";
-    
+
     public FileDataStorageManager(Account account, ContentResolver cr) {
     public FileDataStorageManager(Account account, ContentResolver cr) {
         mContentProvider = null;
         mContentProvider = null;
         mContentResolver = cr;
         mContentResolver = cr;
@@ -75,7 +76,7 @@ public class FileDataStorageManager implements DataStorageManager {
         return file;
         return file;
     }
     }
 
 
-    
+
     private OCFile createRootDir() {
     private OCFile createRootDir() {
         OCFile file = new OCFile(OCFile.PATH_SEPARATOR);
         OCFile file = new OCFile(OCFile.PATH_SEPARATOR);
         file.setMimetype("DIR");
         file.setMimetype("DIR");
@@ -94,7 +95,7 @@ public class FileDataStorageManager implements DataStorageManager {
         c.close();
         c.close();
         return file;
         return file;
     }
     }
-    
+
     public OCFile getFileByLocalPath(String path) {
     public OCFile getFileByLocalPath(String path) {
         Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
         Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
         OCFile file = null;
         OCFile file = null;
@@ -136,13 +137,18 @@ public class FileDataStorageManager implements DataStorageManager {
         cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0);
         cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0);
 
 
         boolean sameRemotePath = fileExists(file.getRemotePath());
         boolean sameRemotePath = fileExists(file.getRemotePath());
+        boolean changesSizeOfAncestors = false;
         if (sameRemotePath ||
         if (sameRemotePath ||
-            fileExists(file.getFileId())        ) {           // for renamed files; no more delete and create
-            
+                fileExists(file.getFileId())        ) {           // for renamed files; no more delete and create
+
+            OCFile oldFile = null;
             if (sameRemotePath) {
             if (sameRemotePath) {
-                OCFile oldFile = getFileByPath(file.getRemotePath());
+                oldFile = getFileByPath(file.getRemotePath());
                 file.setFileId(oldFile.getFileId());
                 file.setFileId(oldFile.getFileId());
+            } else {
+                oldFile = getFileById(file.getFileId());
             }
             }
+            changesSizeOfAncestors = (oldFile.getFileLength() != file.getFileLength());
 
 
             overriden = true;
             overriden = true;
             if (getContentResolver() != null) {
             if (getContentResolver() != null) {
@@ -161,6 +167,7 @@ public class FileDataStorageManager implements DataStorageManager {
                 }
                 }
             }
             }
         } else {
         } else {
+            changesSizeOfAncestors = true;
             Uri result_uri = null;
             Uri result_uri = null;
             if (getContentResolver() != null) {
             if (getContentResolver() != null) {
                 result_uri = getContentResolver().insert(
                 result_uri = getContentResolver().insert(
@@ -179,20 +186,28 @@ public class FileDataStorageManager implements DataStorageManager {
                 long new_id = Long.parseLong(result_uri.getPathSegments()
                 long new_id = Long.parseLong(result_uri.getPathSegments()
                         .get(1));
                         .get(1));
                 file.setFileId(new_id);
                 file.setFileId(new_id);
-            }
+            }            
         }
         }
 
 
-        if (file.isDirectory() && file.needsUpdatingWhileSaving())
-            for (OCFile f : getDirectoryContent(file))
-                saveFile(f);
-
+        if (file.isDirectory()) {
+            calculateFolderSize(file.getFileId());
+            if (file.needsUpdatingWhileSaving()) {
+                for (OCFile f : getDirectoryContent(file))
+                    saveFile(f);
+            }
+        }
+        
+        if (changesSizeOfAncestors || file.isDirectory()) {
+            updateSizesToTheRoot(file.getParentId());
+        }
+        
         return overriden;
         return overriden;
     }
     }
 
 
 
 
     @Override
     @Override
     public void saveFiles(List<OCFile> files) {
     public void saveFiles(List<OCFile> files) {
-        
+
         Iterator<OCFile> filesIt = files.iterator();
         Iterator<OCFile> filesIt = files.iterator();
         ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(files.size());
         ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(files.size());
         OCFile file = null;
         OCFile file = null;
@@ -223,44 +238,44 @@ public class FileDataStorageManager implements DataStorageManager {
                 operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
                 operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
                         withValues(cv).
                         withValues(cv).
                         withSelection(  ProviderTableMeta._ID + "=?", 
                         withSelection(  ProviderTableMeta._ID + "=?", 
-                                        new String[] { String.valueOf(file.getFileId()) })
-                        .build());
-                
+                                new String[] { String.valueOf(file.getFileId()) })
+                                .build());
+
             } else if (fileExists(file.getFileId())) {
             } else if (fileExists(file.getFileId())) {
-                    OCFile oldFile = getFileById(file.getFileId());
-                    if (file.getStoragePath() == null && oldFile.getStoragePath() != null)
-                        file.setStoragePath(oldFile.getStoragePath());
-                    if (!file.isDirectory());
-                        cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
+                OCFile oldFile = getFileById(file.getFileId());
+                if (file.getStoragePath() == null && oldFile.getStoragePath() != null)
+                    file.setStoragePath(oldFile.getStoragePath());
+                if (!file.isDirectory());
+                cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
+
+                operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+                        withValues(cv).
+                        withSelection(  ProviderTableMeta._ID + "=?", 
+                                new String[] { String.valueOf(file.getFileId()) })
+                                .build());
 
 
-                    operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
-                            withValues(cv).
-                            withSelection(  ProviderTableMeta._ID + "=?", 
-                                            new String[] { String.valueOf(file.getFileId()) })
-                            .build());
-                    
             } else {
             } else {
                 operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).withValues(cv).build());
                 operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).withValues(cv).build());
             }
             }
         }
         }
-        
+
         // apply operations in batch
         // apply operations in batch
         ContentProviderResult[] results = null;
         ContentProviderResult[] results = null;
         try {
         try {
             if (getContentResolver() != null) {
             if (getContentResolver() != null) {
                 results = getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations);
                 results = getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations);
-            
+
             } else {
             } else {
                 results = getContentProvider().applyBatch(operations);
                 results = getContentProvider().applyBatch(operations);
             }
             }
-            
+
         } catch (OperationApplicationException e) {
         } catch (OperationApplicationException e) {
             Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage());
             Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage());
-            
+
         } catch (RemoteException e) {
         } catch (RemoteException e) {
             Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage());
             Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage());
         }
         }
-        
+
         // update new id in file objects for insertions
         // update new id in file objects for insertions
         if (results != null) {
         if (results != null) {
             long newId;
             long newId;
@@ -279,7 +294,7 @@ public class FileDataStorageManager implements DataStorageManager {
         }
         }
 
 
     }
     }
-    
+
     public void setAccount(Account account) {
     public void setAccount(Account account) {
         mAccount = account;
         mAccount = account;
     }
     }
@@ -303,46 +318,56 @@ public class FileDataStorageManager implements DataStorageManager {
     public ContentProviderClient getContentProvider() {
     public ContentProviderClient getContentProvider() {
         return mContentProvider;
         return mContentProvider;
     }
     }
-
+    
     @Override
     @Override
     public Vector<OCFile> getDirectoryContent(OCFile f) {
     public Vector<OCFile> getDirectoryContent(OCFile f) {
-        Vector<OCFile> ret = new Vector<OCFile>();
         if (f != null && f.isDirectory() && f.getFileId() != -1) {
         if (f != null && f.isDirectory() && f.getFileId() != -1) {
+            return getDirectoryContent(f.getFileId());
 
 
-            Uri req_uri = Uri.withAppendedPath(
-                    ProviderTableMeta.CONTENT_URI_DIR,
-                    String.valueOf(f.getFileId()));
-            Cursor c = null;
+        } else {
+            return new Vector<OCFile>();
+        }
+    }
 
 
-            if (getContentProvider() != null) {
-                try {
-                    c = getContentProvider().query(req_uri, null,
-                            ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
-                            new String[] { mAccount.name }, null);
-                } catch (RemoteException e) {
-                    Log_OC.e(TAG, e.getMessage());
-                    return ret;
-                }
-            } else {
-                c = getContentResolver().query(req_uri, null,
-                        ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
-                        new String[] { mAccount.name }, null);
-            }
+    private Vector<OCFile> getDirectoryContent(long parentId) {
 
 
-            if (c.moveToFirst()) {
-                do {
-                    OCFile child = createFileInstance(c);
-                    ret.add(child);
-                } while (c.moveToNext());
+        Vector<OCFile> ret = new Vector<OCFile>();
+
+        Uri req_uri = Uri.withAppendedPath(
+                ProviderTableMeta.CONTENT_URI_DIR,
+                String.valueOf(parentId));
+        Cursor c = null;
+
+        if (getContentProvider() != null) {
+            try {
+                c = getContentProvider().query(req_uri, null, 
+                        ProviderTableMeta.FILE_PARENT + "=?" ,
+                        new String[] { String.valueOf(parentId)}, null);
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, e.getMessage());
+                return ret;
             }
             }
+        } else {
+            c = getContentResolver().query(req_uri, null, 
+                    ProviderTableMeta.FILE_PARENT + "=?" ,
+                    new String[] { String.valueOf(parentId)}, null);
+        }
 
 
-            c.close();
-            
-            Collections.sort(ret);
-            
+        if (c.moveToFirst()) {
+            do {
+                OCFile child = createFileInstance(c);
+                ret.add(child);
+            } while (c.moveToNext());
         }
         }
+
+        c.close();
+
+        Collections.sort(ret);
+
         return ret;
         return ret;
     }
     }
+    
+    
 
 
     private boolean fileExists(String cmp_key, String value) {
     private boolean fileExists(String cmp_key, String value) {
         Cursor c;
         Cursor c;
@@ -353,7 +378,7 @@ public class FileDataStorageManager implements DataStorageManager {
                             cmp_key + "=? AND "
                             cmp_key + "=? AND "
                                     + ProviderTableMeta.FILE_ACCOUNT_OWNER
                                     + ProviderTableMeta.FILE_ACCOUNT_OWNER
                                     + "=?",
                                     + "=?",
-                            new String[] { value, mAccount.name }, null);
+                                    new String[] { value, mAccount.name }, null);
         } else {
         } else {
             try {
             try {
                 c = getContentProvider().query(
                 c = getContentProvider().query(
@@ -361,7 +386,7 @@ public class FileDataStorageManager implements DataStorageManager {
                         null,
                         null,
                         cmp_key + "=? AND "
                         cmp_key + "=? AND "
                                 + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
                                 + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
-                        new String[] { value, mAccount.name }, null);
+                                new String[] { value, mAccount.name }, null);
             } catch (RemoteException e) {
             } catch (RemoteException e) {
                 Log_OC.e(TAG,
                 Log_OC.e(TAG,
                         "Couldn't determine file existance, assuming non existance: "
                         "Couldn't determine file existance, assuming non existance: "
@@ -383,14 +408,14 @@ public class FileDataStorageManager implements DataStorageManager {
                             key + "=? AND "
                             key + "=? AND "
                                     + ProviderTableMeta.FILE_ACCOUNT_OWNER
                                     + ProviderTableMeta.FILE_ACCOUNT_OWNER
                                     + "=?",
                                     + "=?",
-                            new String[] { value, mAccount.name }, null);
+                                    new String[] { value, mAccount.name }, null);
         } else {
         } else {
             try {
             try {
                 c = getContentProvider().query(
                 c = getContentProvider().query(
                         ProviderTableMeta.CONTENT_URI,
                         ProviderTableMeta.CONTENT_URI,
                         null,
                         null,
                         key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER
                         key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER
-                                + "=?", new String[] { value, mAccount.name },
+                        + "=?", new String[] { value, mAccount.name },
                         null);
                         null);
             } catch (RemoteException e) {
             } catch (RemoteException e) {
                 Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
                 Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
@@ -435,26 +460,26 @@ public class FileDataStorageManager implements DataStorageManager {
             file.setLastSyncDateForData(c.getLong(c.
             file.setLastSyncDateForData(c.getLong(c.
                     getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA)));
                     getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA)));
             file.setKeepInSync(c.getInt(
             file.setKeepInSync(c.getInt(
-                                c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false);
+                    c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false);
         }
         }
         return file;
         return file;
     }
     }
-    
+
     @Override
     @Override
     public void removeFile(OCFile file, boolean removeLocalCopy) {
     public void removeFile(OCFile file, boolean removeLocalCopy) {
         Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId());
         Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId());
         if (getContentProvider() != null) {
         if (getContentProvider() != null) {
             try {
             try {
                 getContentProvider().delete(file_uri,
                 getContentProvider().delete(file_uri,
-                                            ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
-                                            new String[]{mAccount.name});
+                        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                        new String[]{mAccount.name});
             } catch (RemoteException e) {
             } catch (RemoteException e) {
                 e.printStackTrace();
                 e.printStackTrace();
             }
             }
         } else {
         } else {
             getContentResolver().delete(file_uri,
             getContentResolver().delete(file_uri,
-                                        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
-                                        new String[]{mAccount.name});
+                    ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                    new String[]{mAccount.name});
         }
         }
         if (file.isDown() && removeLocalCopy) {
         if (file.isDown() && removeLocalCopy) {
             new File(file.getStoragePath()).delete();
             new File(file.getStoragePath()).delete();
@@ -465,6 +490,10 @@ public class FileDataStorageManager implements DataStorageManager {
                 f.delete();
                 f.delete();
             }
             }
         }
         }
+        
+        if (file.getFileLength() > 0) {
+            updateSizesToTheRoot(file.getParentId());
+        }
     }
     }
 
 
     @Override
     @Override
@@ -492,10 +521,14 @@ public class FileDataStorageManager implements DataStorageManager {
             if (removeDBData) {
             if (removeDBData) {
                 removeFile(dir, true);
                 removeFile(dir, true);
             }
             }
+            
+            if (dir.getFileLength() > 0) {
+                updateSizesToTheRoot(dir.getParentId());
+            }
         }
         }
     }
     }
-    
-    
+
+
     /**
     /**
      * Updates database for a folder that was moved to a different location.
      * Updates database for a folder that was moved to a different location.
      * 
      * 
@@ -505,24 +538,24 @@ public class FileDataStorageManager implements DataStorageManager {
     @Override
     @Override
     public void moveDirectory(OCFile dir, String newPath) {
     public void moveDirectory(OCFile dir, String newPath) {
         // TODO check newPath
         // TODO check newPath
-        
+
         if (dir != null && dir.isDirectory() && dir.fileExists() && !dir.getFileName().equals(OCFile.PATH_SEPARATOR)) {
         if (dir != null && dir.isDirectory() && dir.fileExists() && !dir.getFileName().equals(OCFile.PATH_SEPARATOR)) {
             /// 1. get all the descendants of 'dir' in a single QUERY (including 'dir')
             /// 1. get all the descendants of 'dir' in a single QUERY (including 'dir')
             Cursor c = null;
             Cursor c = null;
             if (getContentProvider() != null) {
             if (getContentProvider() != null) {
                 try {
                 try {
                     c = getContentProvider().query(ProviderTableMeta.CONTENT_URI, 
                     c = getContentProvider().query(ProviderTableMeta.CONTENT_URI, 
-                                                    null,
-                                                    ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?",
-                                                    new String[] { mAccount.name, dir.getRemotePath() + "%" }, null);
+                            null,
+                            ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?",
+                            new String[] { mAccount.name, dir.getRemotePath() + "%" }, null);
                 } catch (RemoteException e) {
                 } catch (RemoteException e) {
                     Log_OC.e(TAG, e.getMessage());
                     Log_OC.e(TAG, e.getMessage());
                 }
                 }
             } else {
             } else {
                 c = getContentResolver().query(ProviderTableMeta.CONTENT_URI, 
                 c = getContentResolver().query(ProviderTableMeta.CONTENT_URI, 
-                                                null,
-                                                ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?",
-                                                new String[] { mAccount.name, dir.getRemotePath() + "%" }, null);
+                        null,
+                        ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?",
+                        new String[] { mAccount.name, dir.getRemotePath() + "%" }, null);
             }
             }
 
 
             /// 2. prepare a batch of update operations to change all the descendants
             /// 2. prepare a batch of update operations to change all the descendants
@@ -539,30 +572,30 @@ public class FileDataStorageManager implements DataStorageManager {
                         cv.put(ProviderTableMeta.FILE_STORAGE_PATH, defaultSavePath + newPath + child.getStoragePath().substring(lengthOfOldStoragePath));
                         cv.put(ProviderTableMeta.FILE_STORAGE_PATH, defaultSavePath + newPath + child.getStoragePath().substring(lengthOfOldStoragePath));
                     }
                     }
                     operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
                     operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
-                                                                        withValues(cv).
-                                                                        withSelection(  ProviderTableMeta._ID + "=?", 
-                                                                                new String[] { String.valueOf(child.getFileId()) })
-                                                                                .build());
+                            withValues(cv).
+                            withSelection(  ProviderTableMeta._ID + "=?", 
+                                    new String[] { String.valueOf(child.getFileId()) })
+                                    .build());
                 } while (c.moveToNext());
                 } while (c.moveToNext());
             }
             }
             c.close();
             c.close();
-            
+
             /// 3. apply updates in batch
             /// 3. apply updates in batch
             try {
             try {
                 if (getContentResolver() != null) {
                 if (getContentResolver() != null) {
                     getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations);
                     getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations);
-                
+
                 } else {
                 } else {
                     getContentProvider().applyBatch(operations);
                     getContentProvider().applyBatch(operations);
                 }
                 }
-                
+
             } catch (OperationApplicationException e) {
             } catch (OperationApplicationException e) {
                 Log_OC.e(TAG, "Fail to update descendants of " + dir.getFileId() + " in database", e);
                 Log_OC.e(TAG, "Fail to update descendants of " + dir.getFileId() + " in database", e);
-                
+
             } catch (RemoteException e) {
             } catch (RemoteException e) {
                 Log_OC.e(TAG, "Fail to update desendants of " + dir.getFileId() + " in database", e);
                 Log_OC.e(TAG, "Fail to update desendants of " + dir.getFileId() + " in database", e);
             }
             }
-            
+
         }
         }
     }
     }
 
 
@@ -583,4 +616,65 @@ public class FileDataStorageManager implements DataStorageManager {
         return ret;
         return ret;
     }
     }
 
 
+    /**
+     * Calculate and save the folderSize on DB
+     * @param id
+     */
+    @Override
+    public void calculateFolderSize(long id) {
+        long folderSize = 0;
+        
+        Vector<OCFile> files = getDirectoryContent(id);
+        
+        for (OCFile f: files)
+        {
+            folderSize = folderSize + f.getFileLength();
+        }
+        
+        updateSize(id, folderSize);
+    }
+
+    /**
+     * Update the size value of an OCFile in DB
+     */
+    private int updateSize(long id, long size) {
+        ContentValues cv = new ContentValues();
+        cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, size);
+        int result = -1;
+        if (getContentResolver() != null) {
+             result = getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", 
+                     new String[] { String.valueOf(id) });
+        } else {
+            try {
+                result = getContentProvider().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", 
+                        new String[] { String.valueOf(id) });
+            } catch (RemoteException e) {
+                Log_OC.e(TAG,"Fail to update size column into database " + e.getMessage());
+            }
+        }
+        return result;
+    }
+
+    /** 
+     * Update the size of a subtree of folder from a file to the root
+     * @param parentId: parent of the file
+     */
+    private void updateSizesToTheRoot(long parentId) {
+        
+        OCFile file; 
+
+        while (parentId != 0) {
+            
+            Log_OC.d(TAG, "parent = " + parentId);
+            // Update the size of the parent
+            calculateFolderSize(parentId);
+            
+            // search the next parent
+            file = getFileById(parentId);            
+            parentId = file.getParentId();
+            
+        }              
+        
+    }
+    
 }
 }

+ 1 - 0
src/com/owncloud/android/operations/CreateFolderOperation.java

@@ -73,6 +73,7 @@ public class CreateFolderOperation extends RemoteOperation {
                 OCFile newDir = new OCFile(mRemotePath);
                 OCFile newDir = new OCFile(mRemotePath);
                 newDir.setMimetype("DIR");
                 newDir.setMimetype("DIR");
                 newDir.setParentId(mParentDirId);
                 newDir.setParentId(mParentDirId);
+                newDir.setModificationTimestamp(System.currentTimeMillis());
                 mStorageManager.saveFile(newDir);
                 mStorageManager.saveFile(newDir);
             }
             }
 
 

+ 6 - 0
src/com/owncloud/android/syncadapter/FileSyncAdapter.java

@@ -37,6 +37,8 @@ import com.owncloud.android.operations.SynchronizeFolderOperation;
 import com.owncloud.android.operations.UpdateOCVersionOperation;
 import com.owncloud.android.operations.UpdateOCVersionOperation;
 import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
 import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
 import com.owncloud.android.ui.activity.ErrorsWhileCopyingHandlerActivity;
 import com.owncloud.android.ui.activity.ErrorsWhileCopyingHandlerActivity;
+import com.owncloud.android.utils.FileStorageUtils;
+
 import android.accounts.Account;
 import android.accounts.Account;
 import android.accounts.AccountsException;
 import android.accounts.AccountsException;
 import android.app.Notification;
 import android.app.Notification;
@@ -263,8 +265,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
             OCFile newFile = files.get(i);
             OCFile newFile = files.get(i);
             if (newFile.isDirectory()) {
             if (newFile.isDirectory()) {
                 fetchData(newFile.getRemotePath(), newFile.getFileId());
                 fetchData(newFile.getRemotePath(), newFile.getFileId());
+                
+                // Update folder size on DB
+                getStorageManager().calculateFolderSize(newFile.getFileId());       
             }
             }
         }
         }
+       
         if (mCancellation && i <files.size()) Log_OC.d(TAG, "Leaving synchronization before synchronizing " + files.get(i).getRemotePath() + " because cancelation request");
         if (mCancellation && i <files.size()) Log_OC.d(TAG, "Leaving synchronization before synchronizing " + files.get(i).getRemotePath() + " because cancelation request");
     }
     }
 
 

+ 155 - 156
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -95,13 +95,13 @@ import com.owncloud.android.ui.preview.PreviewVideoActivity;
  */
  */
 
 
 public class FileDisplayActivity extends FileActivity implements
 public class FileDisplayActivity extends FileActivity implements
-    OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, OnRemoteOperationListener, EditNameDialogListener {
-    
+OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, OnRemoteOperationListener, EditNameDialogListener {
+
     private ArrayAdapter<String> mDirectories;
     private ArrayAdapter<String> mDirectories;
 
 
     /** Access point to the cached database for the current ownCloud {@link Account} */
     /** Access point to the cached database for the current ownCloud {@link Account} */
     private DataStorageManager mStorageManager = null;
     private DataStorageManager mStorageManager = null;
-    
+
     private SyncBroadcastReceiver mSyncBroadcastReceiver;
     private SyncBroadcastReceiver mSyncBroadcastReceiver;
     private UploadFinishReceiver mUploadFinishReceiver;
     private UploadFinishReceiver mUploadFinishReceiver;
     private DownloadFinishReceiver mDownloadFinishReceiver;
     private DownloadFinishReceiver mDownloadFinishReceiver;
@@ -109,23 +109,23 @@ public class FileDisplayActivity extends FileActivity implements
     private FileUploaderBinder mUploaderBinder = null;
     private FileUploaderBinder mUploaderBinder = null;
     private ServiceConnection mDownloadConnection = null, mUploadConnection = null;
     private ServiceConnection mDownloadConnection = null, mUploadConnection = null;
     private RemoteOperationResult mLastSslUntrustedServerResult = null;
     private RemoteOperationResult mLastSslUntrustedServerResult = null;
-    
+
     private boolean mDualPane;
     private boolean mDualPane;
     private View mLeftFragmentContainer;
     private View mLeftFragmentContainer;
     private View mRightFragmentContainer;
     private View mRightFragmentContainer;
-    
+
     private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
     private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
-    
+
     public static final int DIALOG_SHORT_WAIT = 0;
     public static final int DIALOG_SHORT_WAIT = 0;
     private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1;
     private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1;
     private static final int DIALOG_SSL_VALIDATOR = 2;
     private static final int DIALOG_SSL_VALIDATOR = 2;
     private static final int DIALOG_CERT_NOT_SAVED = 3;
     private static final int DIALOG_CERT_NOT_SAVED = 3;
-    
+
     public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS";
     public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS";
-    
+
     private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;
     private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;
     private static final int ACTION_SELECT_MULTIPLE_FILES = 2;
     private static final int ACTION_SELECT_MULTIPLE_FILES = 2;
-    
+
     private static final String TAG = FileDisplayActivity.class.getSimpleName();
     private static final String TAG = FileDisplayActivity.class.getSimpleName();
 
 
     private static final String TAG_LIST_OF_FILES = "LIST_OF_FILES";
     private static final String TAG_LIST_OF_FILES = "LIST_OF_FILES";
@@ -137,10 +137,10 @@ public class FileDisplayActivity extends FileActivity implements
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.d(TAG, "onCreate() start");
         Log_OC.d(TAG, "onCreate() start");
-        super.onCreate(savedInstanceState);
-        
         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
-        
+
+        super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account is valid
+
         mHandler = new Handler();
         mHandler = new Handler();
 
 
         /// bindings to transference services
         /// bindings to transference services
@@ -158,7 +158,7 @@ public class FileDisplayActivity extends FileActivity implements
         Intent observer_intent = new Intent(this, FileObserverService.class);
         Intent observer_intent = new Intent(this, FileObserverService.class);
         observer_intent.putExtra(FileObserverService.KEY_FILE_CMD, FileObserverService.CMD_INIT_OBSERVED_LIST);
         observer_intent.putExtra(FileObserverService.KEY_FILE_CMD, FileObserverService.CMD_INIT_OBSERVED_LIST);
         startService(observer_intent);
         startService(observer_intent);
-            
+
         /// Load of saved instance state
         /// Load of saved instance state
         if(savedInstanceState != null) {
         if(savedInstanceState != null) {
             mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
             mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
@@ -166,9 +166,9 @@ public class FileDisplayActivity extends FileActivity implements
         } else {
         } else {
             mWaitingToPreview = null;
             mWaitingToPreview = null;
         }
         }
-        
+
         /// USER INTERFACE
         /// USER INTERFACE
-            
+
         // Inflate and set the layout view
         // Inflate and set the layout view
         setContentView(R.layout.files);    
         setContentView(R.layout.files);    
         mDualPane = getResources().getBoolean(R.bool.large_land_layout);
         mDualPane = getResources().getBoolean(R.bool.large_land_layout);
@@ -177,7 +177,7 @@ public class FileDisplayActivity extends FileActivity implements
         if (savedInstanceState == null) {
         if (savedInstanceState == null) {
             createMinFragments();
             createMinFragments();
         }
         }
-        
+
         // Action bar setup
         // Action bar setup
         mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
         mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
         getSupportActionBar().setHomeButtonEnabled(true);       // mandatory since Android ICS, according to the official documentation
         getSupportActionBar().setHomeButtonEnabled(true);       // mandatory since Android ICS, according to the official documentation
@@ -186,7 +186,7 @@ public class FileDisplayActivity extends FileActivity implements
         Log_OC.d(TAG, "onCreate() end");
         Log_OC.d(TAG, "onCreate() end");
     }
     }
 
 
-    
+
     @Override
     @Override
     protected void onDestroy() {
     protected void onDestroy() {
         super.onDestroy();
         super.onDestroy();
@@ -195,8 +195,8 @@ public class FileDisplayActivity extends FileActivity implements
         if (mUploadConnection != null)
         if (mUploadConnection != null)
             unbindService(mUploadConnection);
             unbindService(mUploadConnection);
     }
     }
-    
-    
+
+
     /**
     /**
      *  Called when the ownCloud {@link Account} associated to the Activity was just updated.
      *  Called when the ownCloud {@link Account} associated to the Activity was just updated.
      */ 
      */ 
@@ -204,7 +204,7 @@ public class FileDisplayActivity extends FileActivity implements
     protected void onAccountSet(boolean stateWasRecovered) {
     protected void onAccountSet(boolean stateWasRecovered) {
         if (getAccount() != null) {
         if (getAccount() != null) {
             mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
             mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
-            
+
             /// Check whether the 'main' OCFile handled by the Activity is contained in the current Account
             /// Check whether the 'main' OCFile handled by the Activity is contained in the current Account
             OCFile file = getFile();
             OCFile file = getFile();
             if (file != null) {
             if (file != null) {
@@ -245,8 +245,8 @@ public class FileDisplayActivity extends FileActivity implements
             Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!");
             Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!");
         }
         }
     }
     }
-    
-    
+
+
     private void createMinFragments() {
     private void createMinFragments() {
         OCFileListFragment listOfFiles = new OCFileListFragment();
         OCFileListFragment listOfFiles = new OCFileListFragment();
         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
@@ -275,7 +275,7 @@ public class FileDisplayActivity extends FileActivity implements
             } else {
             } else {
                 cleanSecondFragment();
                 cleanSecondFragment();
             }
             }
-            
+
         } else {
         } else {
             Log.wtf(TAG, "initFragments() called with invalid NULLs!");
             Log.wtf(TAG, "initFragments() called with invalid NULLs!");
             if (getAccount() == null) {
             if (getAccount() == null) {
@@ -296,7 +296,7 @@ public class FileDisplayActivity extends FileActivity implements
                 int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
                 int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
                 boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
                 boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
                 secondFragment = new PreviewMediaFragment(file, getAccount(), startPlaybackPosition, autoplay);
                 secondFragment = new PreviewMediaFragment(file, getAccount(), startPlaybackPosition, autoplay);
-                
+
             } else {
             } else {
                 secondFragment = new FileDetailFragment(file, getAccount());
                 secondFragment = new FileDetailFragment(file, getAccount());
             }
             }
@@ -304,7 +304,7 @@ public class FileDisplayActivity extends FileActivity implements
         return secondFragment;
         return secondFragment;
     }
     }
 
 
-    
+
     /**
     /**
      * Replaces the second fragment managed by the activity with the received as
      * Replaces the second fragment managed by the activity with the received as
      * a parameter.
      * a parameter.
@@ -318,8 +318,8 @@ public class FileDisplayActivity extends FileActivity implements
         transaction.replace(R.id.right_fragment_container, fragment, TAG_SECOND_FRAGMENT);
         transaction.replace(R.id.right_fragment_container, fragment, TAG_SECOND_FRAGMENT);
         transaction.commit();
         transaction.commit();
     }
     }
-    
-    
+
+
     private void updateFragmentsVisibility(boolean existsSecondFragment) {
     private void updateFragmentsVisibility(boolean existsSecondFragment) {
         if (mDualPane) {
         if (mDualPane) {
             if (mLeftFragmentContainer.getVisibility() != View.VISIBLE) {
             if (mLeftFragmentContainer.getVisibility() != View.VISIBLE) {
@@ -328,7 +328,7 @@ public class FileDisplayActivity extends FileActivity implements
             if (mRightFragmentContainer.getVisibility() != View.VISIBLE) {
             if (mRightFragmentContainer.getVisibility() != View.VISIBLE) {
                 mRightFragmentContainer.setVisibility(View.VISIBLE);
                 mRightFragmentContainer.setVisibility(View.VISIBLE);
             }
             }
-            
+
         } else if (existsSecondFragment) {
         } else if (existsSecondFragment) {
             if (mLeftFragmentContainer.getVisibility() != View.GONE) {
             if (mLeftFragmentContainer.getVisibility() != View.GONE) {
                 mLeftFragmentContainer.setVisibility(View.GONE);
                 mLeftFragmentContainer.setVisibility(View.GONE);
@@ -336,7 +336,7 @@ public class FileDisplayActivity extends FileActivity implements
             if (mRightFragmentContainer.getVisibility() != View.VISIBLE) {
             if (mRightFragmentContainer.getVisibility() != View.VISIBLE) {
                 mRightFragmentContainer.setVisibility(View.VISIBLE);
                 mRightFragmentContainer.setVisibility(View.VISIBLE);
             }
             }
-            
+
         } else {
         } else {
             if (mLeftFragmentContainer.getVisibility() != View.VISIBLE) {
             if (mLeftFragmentContainer.getVisibility() != View.VISIBLE) {
                 mLeftFragmentContainer.setVisibility(View.VISIBLE);
                 mLeftFragmentContainer.setVisibility(View.VISIBLE);
@@ -347,7 +347,7 @@ public class FileDisplayActivity extends FileActivity implements
         }
         }
     }
     }
 
 
-    
+
     private OCFileListFragment getListOfFilesFragment() {
     private OCFileListFragment getListOfFilesFragment() {
         Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_LIST_OF_FILES);
         Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_LIST_OF_FILES);
         if (listOfFiles != null) {
         if (listOfFiles != null) {
@@ -356,7 +356,7 @@ public class FileDisplayActivity extends FileActivity implements
         Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!");
         Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!");
         return null;
         return null;
     }
     }
-    
+
     protected FileFragment getSecondFragment() {
     protected FileFragment getSecondFragment() {
         Fragment second = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT);
         Fragment second = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT);
         if (second != null) {
         if (second != null) {
@@ -375,7 +375,7 @@ public class FileDisplayActivity extends FileActivity implements
         updateFragmentsVisibility(false);
         updateFragmentsVisibility(false);
         updateNavigationElementsInActionBar(null);
         updateNavigationElementsInActionBar(null);
     }
     }
-    
+
     protected void refeshListOfFilesFragment() {
     protected void refeshListOfFilesFragment() {
         OCFileListFragment fileListFragment = getListOfFilesFragment();
         OCFileListFragment fileListFragment = getListOfFilesFragment();
         if (fileListFragment != null) { 
         if (fileListFragment != null) { 
@@ -392,12 +392,12 @@ public class FileDisplayActivity extends FileActivity implements
             if (fileInFragment != null && !downloadedRemotePath.equals(fileInFragment.getRemotePath())) {
             if (fileInFragment != null && !downloadedRemotePath.equals(fileInFragment.getRemotePath())) {
                 // the user browsed to other file ; forget the automatic preview 
                 // the user browsed to other file ; forget the automatic preview 
                 mWaitingToPreview = null;
                 mWaitingToPreview = null;
-                
+
             } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_ADDED_MESSAGE)) {
             } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_ADDED_MESSAGE)) {
                 // grant that the right panel updates the progress bar
                 // grant that the right panel updates the progress bar
                 detailsFragment.listenForTransferProgress();
                 detailsFragment.listenForTransferProgress();
                 detailsFragment.updateFileDetails(true, false);
                 detailsFragment.updateFileDetails(true, false);
-                
+
             } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_FINISH_MESSAGE)) {
             } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_FINISH_MESSAGE)) {
                 //  update the right panel
                 //  update the right panel
                 boolean detailsFragmentChanged = false;
                 boolean detailsFragmentChanged = false;
@@ -432,35 +432,35 @@ public class FileDisplayActivity extends FileActivity implements
     public boolean onOptionsItemSelected(MenuItem item) {
     public boolean onOptionsItemSelected(MenuItem item) {
         boolean retval = true;
         boolean retval = true;
         switch (item.getItemId()) {
         switch (item.getItemId()) {
-            case R.id.action_create_dir: {
-                EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", -1, -1, this);
-                dialog.show(getSupportFragmentManager(), "createdirdialog");
-                break;
-            }
-            case R.id.action_sync_account: {
-                startSynchronization();
-                break;
-            }
-            case R.id.action_upload: {
-                showDialog(DIALOG_CHOOSE_UPLOAD_SOURCE);
-                break;
-            }
-            case R.id.action_settings: {
-                Intent settingsIntent = new Intent(this, Preferences.class);
-                startActivity(settingsIntent);
-                break;
-            }
-            case android.R.id.home: {
-                FileFragment second = getSecondFragment();
-                OCFile currentDir = getCurrentDir();
-                if((currentDir != null && currentDir.getParentId() != 0) || 
-                        (second != null && second.getFile() != null)) {
-                    onBackPressed(); 
-                }
-                break;
+        case R.id.action_create_dir: {
+            EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", -1, -1, this);
+            dialog.show(getSupportFragmentManager(), "createdirdialog");
+            break;
+        }
+        case R.id.action_sync_account: {
+            startSynchronization();
+            break;
+        }
+        case R.id.action_upload: {
+            showDialog(DIALOG_CHOOSE_UPLOAD_SOURCE);
+            break;
+        }
+        case R.id.action_settings: {
+            Intent settingsIntent = new Intent(this, Preferences.class);
+            startActivity(settingsIntent);
+            break;
+        }
+        case android.R.id.home: {
+            FileFragment second = getSecondFragment();
+            OCFile currentDir = getCurrentDir();
+            if((currentDir != null && currentDir.getParentId() != 0) || 
+                    (second != null && second.getFile() != null)) {
+                onBackPressed(); 
             }
             }
-            default:
-                retval = super.onOptionsItemSelected(item);
+            break;
+        }
+        default:
+            retval = super.onOptionsItemSelected(item);
         }
         }
         return retval;
         return retval;
     }
     }
@@ -494,13 +494,13 @@ public class FileDisplayActivity extends FileActivity implements
      */
      */
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
-        
+
         if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
         if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
             requestSimpleUpload(data, resultCode);
             requestSimpleUpload(data, resultCode);
-            
+
         } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
         } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
             requestMultipleUpload(data, resultCode);
             requestMultipleUpload(data, resultCode);
-            
+
         }
         }
     }
     }
 
 
@@ -526,7 +526,7 @@ public class FileDisplayActivity extends FileActivity implements
             if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
             if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
                 i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
                 i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
             startService(i);
             startService(i);
-            
+
         } else {
         } else {
             Log_OC.d(TAG, "User clicked on 'Update' with no selection");
             Log_OC.d(TAG, "User clicked on 'Update' with no selection");
             Toast t = Toast.makeText(this, getString(R.string.filedisplay_no_file_selected), Toast.LENGTH_LONG);
             Toast t = Toast.makeText(this, getString(R.string.filedisplay_no_file_selected), Toast.LENGTH_LONG);
@@ -548,11 +548,11 @@ public class FileDisplayActivity extends FileActivity implements
                 filepath = selectedImagePath;
                 filepath = selectedImagePath;
             else
             else
                 filepath = filemanagerstring;
                 filepath = filemanagerstring;
-            
+
         } catch (Exception e) {
         } catch (Exception e) {
             Log_OC.e(TAG, "Unexpected exception when trying to read the result of Intent.ACTION_GET_CONTENT", e);
             Log_OC.e(TAG, "Unexpected exception when trying to read the result of Intent.ACTION_GET_CONTENT", e);
             e.printStackTrace();
             e.printStackTrace();
-            
+
         } finally {
         } finally {
             if (filepath == null) {
             if (filepath == null) {
                 Log_OC.e(TAG, "Couldnt resolve path to file");
                 Log_OC.e(TAG, "Couldnt resolve path to file");
@@ -609,7 +609,6 @@ public class FileDisplayActivity extends FileActivity implements
         Log_OC.d(TAG, "onSaveInstanceState() end");
         Log_OC.d(TAG, "onSaveInstanceState() end");
     }
     }
 
 
-    
     @Override
     @Override
     protected void onResume() {
     protected void onResume() {
         super.onResume();
         super.onResume();
@@ -619,12 +618,12 @@ public class FileDisplayActivity extends FileActivity implements
         IntentFilter syncIntentFilter = new IntentFilter(FileSyncService.SYNC_MESSAGE);
         IntentFilter syncIntentFilter = new IntentFilter(FileSyncService.SYNC_MESSAGE);
         mSyncBroadcastReceiver = new SyncBroadcastReceiver();
         mSyncBroadcastReceiver = new SyncBroadcastReceiver();
         registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
         registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
-        
+
         // Listen for upload messages
         // Listen for upload messages
         IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
         IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
         mUploadFinishReceiver = new UploadFinishReceiver();
         mUploadFinishReceiver = new UploadFinishReceiver();
         registerReceiver(mUploadFinishReceiver, uploadIntentFilter);
         registerReceiver(mUploadFinishReceiver, uploadIntentFilter);
-        
+
         // Listen for download messages
         // Listen for download messages
         IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_ADDED_MESSAGE);
         IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_ADDED_MESSAGE);
         downloadIntentFilter.addAction(FileDownloader.DOWNLOAD_FINISH_MESSAGE);
         downloadIntentFilter.addAction(FileDownloader.DOWNLOAD_FINISH_MESSAGE);
@@ -634,7 +633,7 @@ public class FileDisplayActivity extends FileActivity implements
         Log_OC.d(TAG, "onResume() end");
         Log_OC.d(TAG, "onResume() end");
     }
     }
 
 
-    
+
     @Override
     @Override
     protected void onPause() {
     protected void onPause() {
         super.onPause();
         super.onPause();
@@ -651,11 +650,11 @@ public class FileDisplayActivity extends FileActivity implements
             unregisterReceiver(mDownloadFinishReceiver);
             unregisterReceiver(mDownloadFinishReceiver);
             mDownloadFinishReceiver = null;
             mDownloadFinishReceiver = null;
         }
         }
-        
+
         Log_OC.d(TAG, "onPause() end");
         Log_OC.d(TAG, "onPause() end");
     }
     }
 
 
-    
+
     @Override
     @Override
     protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
     protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
         if (id == DIALOG_SSL_VALIDATOR && mLastSslUntrustedServerResult != null) {
         if (id == DIALOG_SSL_VALIDATOR && mLastSslUntrustedServerResult != null) {
@@ -663,7 +662,7 @@ public class FileDisplayActivity extends FileActivity implements
         }
         }
     }
     }
 
 
-    
+
     @Override
     @Override
     protected Dialog onCreateDialog(int id) {
     protected Dialog onCreateDialog(int id) {
         Dialog dialog = null;
         Dialog dialog = null;
@@ -679,34 +678,34 @@ public class FileDisplayActivity extends FileActivity implements
             break;
             break;
         }
         }
         case DIALOG_CHOOSE_UPLOAD_SOURCE: {
         case DIALOG_CHOOSE_UPLOAD_SOURCE: {
-            
+
             String[] items = null;
             String[] items = null;
-            
+
             String[] allTheItems = { getString(R.string.actionbar_upload_files),
             String[] allTheItems = { getString(R.string.actionbar_upload_files),
-                                     getString(R.string.actionbar_upload_from_apps),
-                                     getString(R.string.actionbar_failed_instant_upload) };
-            
+                    getString(R.string.actionbar_upload_from_apps),
+                    getString(R.string.actionbar_failed_instant_upload) };
+
             String[] commonItems = { getString(R.string.actionbar_upload_files),
             String[] commonItems = { getString(R.string.actionbar_upload_files),
-                                     getString(R.string.actionbar_upload_from_apps) };
-            
+                    getString(R.string.actionbar_upload_from_apps) };
+
             if (InstantUploadActivity.IS_ENABLED)
             if (InstantUploadActivity.IS_ENABLED)
                 items = allTheItems;
                 items = allTheItems;
             else 
             else 
                 items = commonItems;
                 items = commonItems;
-            
+
             builder = new AlertDialog.Builder(this);
             builder = new AlertDialog.Builder(this);
             builder.setTitle(R.string.actionbar_upload);
             builder.setTitle(R.string.actionbar_upload);
             builder.setItems(items, new DialogInterface.OnClickListener() {
             builder.setItems(items, new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int item) {
                 public void onClick(DialogInterface dialog, int item) {
                     if (item == 0) {
                     if (item == 0) {
                         // if (!mDualPane) {
                         // if (!mDualPane) {
-                        Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class);
-                        action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT, FileDisplayActivity.this.getAccount());
-                        startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);
-                        // } else {
-                        // TODO create and handle new fragment
-                        // LocalFileListFragment
-                        // }
+                            Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class);
+                            action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT, FileDisplayActivity.this.getAccount());
+                            startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);
+                            // } else {
+                            // TODO create and handle new fragment
+                            // LocalFileListFragment
+                            // }
                     } else if (item == 1) {
                     } else if (item == 1) {
                         Intent action = new Intent(Intent.ACTION_GET_CONTENT);
                         Intent action = new Intent(Intent.ACTION_GET_CONTENT);
                         action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
                         action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
@@ -731,22 +730,22 @@ public class FileDisplayActivity extends FileActivity implements
             builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved));
             builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved));
             builder.setCancelable(false);
             builder.setCancelable(false);
             builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() {
             builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                    };
-                });
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                    dialog.dismiss();
+                };
+            });
             dialog = builder.create();
             dialog = builder.create();
             break;
             break;
         }
         }
         default:
         default:
             dialog = null;
             dialog = null;
         }
         }
-    
+
         return dialog;
         return dialog;
     }
     }
 
 
-    
+
     /**
     /**
      * Translates a content URI of an image to a physical path
      * Translates a content URI of an image to a physical path
      * on the disk
      * on the disk
@@ -764,7 +763,7 @@ public class FileDisplayActivity extends FileActivity implements
         } 
         } 
         return null;
         return null;
     }
     }
-    
+
     /**
     /**
      * Pushes a directory to the drop down list
      * Pushes a directory to the drop down list
      * @param directory to push
      * @param directory to push
@@ -789,29 +788,29 @@ public class FileDisplayActivity extends FileActivity implements
 
 
     // Custom array adapter to override text colors
     // Custom array adapter to override text colors
     private class CustomArrayAdapter<T> extends ArrayAdapter<T> {
     private class CustomArrayAdapter<T> extends ArrayAdapter<T> {
-    
+
         public CustomArrayAdapter(FileDisplayActivity ctx, int view) {
         public CustomArrayAdapter(FileDisplayActivity ctx, int view) {
             super(ctx, view);
             super(ctx, view);
         }
         }
-    
+
         public View getView(int position, View convertView, ViewGroup parent) {
         public View getView(int position, View convertView, ViewGroup parent) {
             View v = super.getView(position, convertView, parent);
             View v = super.getView(position, convertView, parent);
-    
+
             ((TextView) v).setTextColor(getResources().getColorStateList(
             ((TextView) v).setTextColor(getResources().getColorStateList(
                     android.R.color.white));
                     android.R.color.white));
             return v;
             return v;
         }
         }
-    
+
         public View getDropDownView(int position, View convertView,
         public View getDropDownView(int position, View convertView,
                 ViewGroup parent) {
                 ViewGroup parent) {
             View v = super.getDropDownView(position, convertView, parent);
             View v = super.getDropDownView(position, convertView, parent);
-    
+
             ((TextView) v).setTextColor(getResources().getColorStateList(
             ((TextView) v).setTextColor(getResources().getColorStateList(
                     android.R.color.white));
                     android.R.color.white));
-    
+
             return v;
             return v;
         }
         }
-    
+
     }
     }
 
 
     private class SyncBroadcastReceiver extends BroadcastReceiver {
     private class SyncBroadcastReceiver extends BroadcastReceiver {
@@ -827,14 +826,14 @@ public class FileDisplayActivity extends FileActivity implements
             Log_OC.d(TAG, "sync of account " + accountName + " is in_progress: " + inProgress);
             Log_OC.d(TAG, "sync of account " + accountName + " is in_progress: " + inProgress);
 
 
             if (getAccount() != null && accountName.equals(getAccount().name)) {  
             if (getAccount() != null && accountName.equals(getAccount().name)) {  
-            
+
                 String synchFolderRemotePath = intent.getStringExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH); 
                 String synchFolderRemotePath = intent.getStringExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH); 
-                 
+
                 boolean fillBlankRoot = false;
                 boolean fillBlankRoot = false;
                 OCFile currentDir = getCurrentDir();
                 OCFile currentDir = getCurrentDir();
                 if (currentDir == null) {
                 if (currentDir == null) {
                     currentDir = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);
                     currentDir = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);
-                    fillBlankRoot = (currentDir != null);
+                    fillBlankRoot = (currentDir != null);                   
                 }
                 }
 
 
                 if ((synchFolderRemotePath != null && currentDir != null && (currentDir.getRemotePath().equals(synchFolderRemotePath)))
                 if ((synchFolderRemotePath != null && currentDir != null && (currentDir.getRemotePath().equals(synchFolderRemotePath)))
@@ -851,9 +850,9 @@ public class FileDisplayActivity extends FileActivity implements
                 
                 
                 setSupportProgressBarIndeterminateVisibility(inProgress);
                 setSupportProgressBarIndeterminateVisibility(inProgress);
                 removeStickyBroadcast(intent);
                 removeStickyBroadcast(intent);
-                
+
             }
             }
-            
+
             RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT);
             RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT);
             if (synchResult != null) {
             if (synchResult != null) {
                 if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) {
                 if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) {
@@ -863,7 +862,7 @@ public class FileDisplayActivity extends FileActivity implements
             }
             }
         }
         }
     }
     }
-    
+
 
 
     private class UploadFinishReceiver extends BroadcastReceiver {
     private class UploadFinishReceiver extends BroadcastReceiver {
         /**
         /**
@@ -882,10 +881,10 @@ public class FileDisplayActivity extends FileActivity implements
                 refeshListOfFilesFragment();
                 refeshListOfFilesFragment();
             }
             }
         }
         }
-        
+
     }
     }
-    
-    
+
+
     /**
     /**
      * Class waiting for broadcast events from the {@link FielDownloader} service.
      * Class waiting for broadcast events from the {@link FielDownloader} service.
      * 
      * 
@@ -898,12 +897,12 @@ public class FileDisplayActivity extends FileActivity implements
             boolean sameAccount = isSameAccount(context, intent);
             boolean sameAccount = isSameAccount(context, intent);
             String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
             String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
             boolean isDescendant = isDescendant(downloadedRemotePath);
             boolean isDescendant = isDescendant(downloadedRemotePath);
-            
+
             if (sameAccount && isDescendant) {
             if (sameAccount && isDescendant) {
                 refeshListOfFilesFragment();
                 refeshListOfFilesFragment();
                 refreshSecondFragment(intent.getAction(), downloadedRemotePath, intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false));
                 refreshSecondFragment(intent.getAction(), downloadedRemotePath, intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false));
             }
             }
-            
+
             removeStickyBroadcast(intent);
             removeStickyBroadcast(intent);
         }
         }
 
 
@@ -917,8 +916,8 @@ public class FileDisplayActivity extends FileActivity implements
             return (accountName != null && getAccount() != null && accountName.equals(getAccount().name));
             return (accountName != null && getAccount() != null && accountName.equals(getAccount().name));
         }
         }
     }
     }
-    
-    
+
+
     /**
     /**
      * {@inheritDoc}
      * {@inheritDoc}
      */
      */
@@ -926,7 +925,7 @@ public class FileDisplayActivity extends FileActivity implements
     public DataStorageManager getStorageManager() {
     public DataStorageManager getStorageManager() {
         return mStorageManager;
         return mStorageManager;
     }
     }
-    
+
 
 
     /**
     /**
      * {@inheritDoc}
      * {@inheritDoc}
@@ -938,7 +937,7 @@ public class FileDisplayActivity extends FileActivity implements
         pushDirname(directory);
         pushDirname(directory);
         cleanSecondFragment();
         cleanSecondFragment();
     }
     }
-    
+
     /**
     /**
      * Opens the image gallery showing the image {@link OCFile} received as parameter.
      * Opens the image gallery showing the image {@link OCFile} received as parameter.
      * 
      * 
@@ -951,7 +950,7 @@ public class FileDisplayActivity extends FileActivity implements
         showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
         showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
         startActivity(showDetailsIntent);
         startActivity(showDetailsIntent);
     }
     }
-    
+
     /**
     /**
      * Stars the preview of an already down media {@link OCFile}.
      * Stars the preview of an already down media {@link OCFile}.
      * 
      * 
@@ -967,7 +966,7 @@ public class FileDisplayActivity extends FileActivity implements
         updateNavigationElementsInActionBar(file);
         updateNavigationElementsInActionBar(file);
         setFile(file);
         setFile(file);
     }
     }
-    
+
     /**
     /**
      * Requests the download of the received {@link OCFile} , updates the UI
      * Requests the download of the received {@link OCFile} , updates the UI
      * to monitor the download progress and prepares the activity to preview
      * to monitor the download progress and prepares the activity to preview
@@ -986,7 +985,7 @@ public class FileDisplayActivity extends FileActivity implements
         setFile(file);
         setFile(file);
     }
     }
 
 
-    
+
     /**
     /**
      * Shows the information of the {@link OCFile} received as a 
      * Shows the information of the {@link OCFile} received as a 
      * parameter in the second fragment.
      * parameter in the second fragment.
@@ -1001,8 +1000,8 @@ public class FileDisplayActivity extends FileActivity implements
         updateNavigationElementsInActionBar(file);
         updateNavigationElementsInActionBar(file);
         setFile(file);
         setFile(file);
     }
     }
-    
-    
+
+
     /**
     /**
      * TODO
      * TODO
      */
      */
@@ -1015,7 +1014,7 @@ public class FileDisplayActivity extends FileActivity implements
             actionBar.setDisplayShowTitleEnabled(false);
             actionBar.setDisplayShowTitleEnabled(false);
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
             actionBar.setListNavigationCallbacks(mDirectories, this);   // assuming mDirectories is updated
             actionBar.setListNavigationCallbacks(mDirectories, this);   // assuming mDirectories is updated
-            
+
         } else {
         } else {
             actionBar.setDisplayHomeAsUpEnabled(true);
             actionBar.setDisplayHomeAsUpEnabled(true);
             actionBar.setDisplayShowTitleEnabled(true);
             actionBar.setDisplayShowTitleEnabled(true);
@@ -1023,8 +1022,8 @@ public class FileDisplayActivity extends FileActivity implements
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
         }
         }
     }
     }
-    
-    
+
+
     /**
     /**
      * {@inheritDoc}
      * {@inheritDoc}
      */
      */
@@ -1034,7 +1033,7 @@ public class FileDisplayActivity extends FileActivity implements
         updateNavigationElementsInActionBar(getSecondFragment().getFile());
         updateNavigationElementsInActionBar(getSecondFragment().getFile());
     }
     }
 
 
-    
+
     /**
     /**
      * {@inheritDoc}
      * {@inheritDoc}
      */
      */
@@ -1043,7 +1042,7 @@ public class FileDisplayActivity extends FileActivity implements
         return mDownloaderBinder;
         return mDownloaderBinder;
     }
     }
 
 
-    
+
     /**
     /**
      * {@inheritDoc}
      * {@inheritDoc}
      */
      */
@@ -1051,8 +1050,8 @@ public class FileDisplayActivity extends FileActivity implements
     public FileUploaderBinder getFileUploaderBinder() {
     public FileUploaderBinder getFileUploaderBinder() {
         return mUploaderBinder;
         return mUploaderBinder;
     }
     }
-    
-    
+
+
     /** Defines callbacks for service binding, passed to bindService() */
     /** Defines callbacks for service binding, passed to bindService() */
     private class ListServiceConnection implements ServiceConnection {
     private class ListServiceConnection implements ServiceConnection {
 
 
@@ -1064,7 +1063,7 @@ public class FileDisplayActivity extends FileActivity implements
                 if (mWaitingToPreview != null) {
                 if (mWaitingToPreview != null) {
                     requestForDownload();
                     requestForDownload();
                 }
                 }
-                
+
             } else if (component.equals(new ComponentName(FileDisplayActivity.this, FileUploader.class))) {
             } else if (component.equals(new ComponentName(FileDisplayActivity.this, FileUploader.class))) {
                 Log_OC.d(TAG, "Upload service connected");
                 Log_OC.d(TAG, "Upload service connected");
                 mUploaderBinder = (FileUploaderBinder) service;
                 mUploaderBinder = (FileUploaderBinder) service;
@@ -1096,8 +1095,8 @@ public class FileDisplayActivity extends FileActivity implements
         }
         }
     };    
     };    
 
 
-    
-    
+
+
     /**
     /**
      * Launch an intent to request the PIN code to the user before letting him use the app
      * Launch an intent to request the PIN code to the user before letting him use the app
      */
      */
@@ -1136,10 +1135,10 @@ public class FileDisplayActivity extends FileActivity implements
     public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
     public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
         if (operation instanceof RemoveFileOperation) {
         if (operation instanceof RemoveFileOperation) {
             onRemoveFileOperationFinish((RemoveFileOperation)operation, result);
             onRemoveFileOperationFinish((RemoveFileOperation)operation, result);
-                
+
         } else if (operation instanceof RenameFileOperation) {
         } else if (operation instanceof RenameFileOperation) {
             onRenameFileOperationFinish((RenameFileOperation)operation, result);
             onRenameFileOperationFinish((RenameFileOperation)operation, result);
-            
+
         } else if (operation instanceof SynchronizeFileOperation) {
         } else if (operation instanceof SynchronizeFileOperation) {
             onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
             onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
 
 
@@ -1170,7 +1169,7 @@ public class FileDisplayActivity extends FileActivity implements
             if (mStorageManager.getFileById(removedFile.getParentId()).equals(getCurrentDir())) {
             if (mStorageManager.getFileById(removedFile.getParentId()).equals(getCurrentDir())) {
                 refeshListOfFilesFragment();
                 refeshListOfFilesFragment();
             }
             }
-                
+
         } else {
         } else {
             Toast msg = Toast.makeText(this, R.string.remove_fail_msg, Toast.LENGTH_LONG); 
             Toast msg = Toast.makeText(this, R.string.remove_fail_msg, Toast.LENGTH_LONG); 
             msg.show();
             msg.show();
@@ -1191,20 +1190,20 @@ public class FileDisplayActivity extends FileActivity implements
         if (result.isSuccess()) {
         if (result.isSuccess()) {
             dismissDialog(DIALOG_SHORT_WAIT);
             dismissDialog(DIALOG_SHORT_WAIT);
             refeshListOfFilesFragment();
             refeshListOfFilesFragment();
-            
+
         } else {
         } else {
             dismissDialog(DIALOG_SHORT_WAIT);
             dismissDialog(DIALOG_SHORT_WAIT);
             try {
             try {
                 Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); 
                 Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); 
                 msg.show();
                 msg.show();
-                    
+
             } catch (NotFoundException e) {
             } catch (NotFoundException e) {
                 Log_OC.e(TAG, "Error while trying to show fail message " , e);
                 Log_OC.e(TAG, "Error while trying to show fail message " , e);
             }
             }
         }
         }
     }
     }
-    
-    
+
+
     /**
     /**
      * Updates the view associated to the activity after the finish of an operation trying to rename a 
      * Updates the view associated to the activity after the finish of an operation trying to rename a 
      * file. 
      * file. 
@@ -1225,7 +1224,7 @@ public class FileDisplayActivity extends FileActivity implements
             if (mStorageManager.getFileById(renamedFile.getParentId()).equals(getCurrentDir())) {
             if (mStorageManager.getFileById(renamedFile.getParentId()).equals(getCurrentDir())) {
                 refeshListOfFilesFragment();
                 refeshListOfFilesFragment();
             }
             }
-            
+
         } else {
         } else {
             if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) {
             if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) {
                 Toast msg = Toast.makeText(this, R.string.rename_local_fail_msg, Toast.LENGTH_LONG); 
                 Toast msg = Toast.makeText(this, R.string.rename_local_fail_msg, Toast.LENGTH_LONG); 
@@ -1252,17 +1251,17 @@ public class FileDisplayActivity extends FileActivity implements
                 i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile);
                 i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile);
                 i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount());
                 i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount());
                 startActivity(i);
                 startActivity(i);
-                
+
             } else {
             } else {
                 Toast msg = Toast.makeText(this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG); 
                 Toast msg = Toast.makeText(this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG); 
                 msg.show();
                 msg.show();
             }
             }
-            
+
         } else {
         } else {
             if (operation.transferWasRequested()) {
             if (operation.transferWasRequested()) {
                 refeshListOfFilesFragment();
                 refeshListOfFilesFragment();
                 onTransferStateChanged(syncedFile, true, true);
                 onTransferStateChanged(syncedFile, true, true);
-                
+
             } else {
             } else {
                 Toast msg = Toast.makeText(this, R.string.sync_file_nothing_to_do_msg, Toast.LENGTH_LONG); 
                 Toast msg = Toast.makeText(this, R.string.sync_file_nothing_to_do_msg, Toast.LENGTH_LONG); 
                 msg.show();
                 msg.show();
@@ -1295,22 +1294,22 @@ public class FileDisplayActivity extends FileActivity implements
             Log_OC.d(TAG, "'create directory' dialog dismissed with new name " + newDirectoryName);
             Log_OC.d(TAG, "'create directory' dialog dismissed with new name " + newDirectoryName);
             if (newDirectoryName.length() > 0) {
             if (newDirectoryName.length() > 0) {
                 String path = getCurrentDir().getRemotePath();
                 String path = getCurrentDir().getRemotePath();
-                
+
                 // Create directory
                 // Create directory
                 path += newDirectoryName + OCFile.PATH_SEPARATOR;
                 path += newDirectoryName + OCFile.PATH_SEPARATOR;
                 RemoteOperation operation = new CreateFolderOperation(path, getCurrentDir().getFileId(), mStorageManager);
                 RemoteOperation operation = new CreateFolderOperation(path, getCurrentDir().getFileId(), mStorageManager);
                 operation.execute(  getAccount(), 
                 operation.execute(  getAccount(), 
-                                    FileDisplayActivity.this, 
-                                    FileDisplayActivity.this, 
-                                    mHandler,
-                                    FileDisplayActivity.this);
-                
+                        FileDisplayActivity.this, 
+                        FileDisplayActivity.this, 
+                        mHandler,
+                        FileDisplayActivity.this);
+
                 showDialog(DIALOG_SHORT_WAIT);
                 showDialog(DIALOG_SHORT_WAIT);
             }
             }
         }
         }
     }
     }
-    
-    
+
+
     private void requestForDownload() {
     private void requestForDownload() {
         Account account = getAccount();
         Account account = getAccount();
         if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) {
         if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) {
@@ -1320,8 +1319,8 @@ public class FileDisplayActivity extends FileActivity implements
             startService(i);
             startService(i);
         }
         }
     }
     }
-    
-    
+
+
     private OCFile getCurrentDir() {
     private OCFile getCurrentDir() {
         OCFile file = getFile();
         OCFile file = getFile();
         if (file != null) {
         if (file != null) {

+ 6 - 49
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -98,7 +98,6 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         return 0;
         return 0;
     }
     }
 
 
-    
     @Override
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
     public View getView(int position, View convertView, ViewGroup parent) {
         View view = convertView;
         View view = convertView;
@@ -163,20 +162,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 
                 
             } 
             } 
             else {
             else {
-               
-               getDirectorySizeNumber(file,true);
-               if (lastModifiedOfAllSubdirectories == null)
-               {
-                   lastModV.setVisibility(View.GONE);
-                   fileSizeV.setVisibility(View.GONE);
-               }
-               else
-               {
-                   lastModV.setVisibility(View.VISIBLE);
-                   lastModV.setText(DisplayUtils.unixTimeToHumanReadable(lastModifiedOfAllSubdirectories));
-                   fileSizeV.setVisibility(View.VISIBLE);
-                   fileSizeV.setText(DisplayUtils.bytesToHumanReadable((totalSizeOfDirectoriesRecursive == null) ? 0 : totalSizeOfDirectoriesRecursive));
-               }
+                
+                fileSizeV.setVisibility(View.VISIBLE);
+                fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
+                lastModV.setVisibility(View.VISIBLE);
+                lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));
                checkBoxV.setVisibility(View.GONE);
                checkBoxV.setVisibility(View.GONE);
                view.findViewById(R.id.imageView3).setVisibility(View.GONE);
                view.findViewById(R.id.imageView3).setVisibility(View.GONE);
             }
             }
@@ -184,40 +174,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 
 
         return view;
         return view;
     }
     }
-    
-    
-    /**
-     * - This method counts recursively all subdirectories and their files from the root directory. 
-     * - It also shows a timestamp of the last modificated file inside the root directory
-     * 
-     *   @param OCFile  : startDirectory
-     *   @param boolean :  counting starts from here ?
-     */
-    private void getDirectorySizeNumber(OCFile directory,boolean startOfRecursive) {
-        if (startOfRecursive) {
-            totalSizeOfDirectoriesRecursive = null;
-        }
-        Vector<OCFile> files  = mStorageManager.getDirectoryContent(directory);
-        for (OCFile file : files) {
-            if(!file.isDirectory()) {
-                if (totalSizeOfDirectoriesRecursive == null) {
-                    totalSizeOfDirectoriesRecursive = file.getFileLength();
-                    lastModifiedOfAllSubdirectories = file.getModificationTimestamp();
-                    continue;
-                }
-                
-                totalSizeOfDirectoriesRecursive += file.getFileLength();
-                if (lastModifiedOfAllSubdirectories < file.getModificationTimestamp()) {
-                    lastModifiedOfAllSubdirectories = file.getModificationTimestamp();
-                }
-            }
-            else {
-                this.getDirectorySizeNumber(file, false);
-            }
-        }
-    }
-    
-    
+
     @Override
     @Override
     public int getViewTypeCount() {
     public int getViewTypeCount() {
         return 1;
         return 1;

+ 3 - 1
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -107,6 +107,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName
         getListView().setOnCreateContextMenuListener(this);        
         getListView().setOnCreateContextMenuListener(this);        
         
         
         mHandler = new Handler();
         mHandler = new Handler();
+
     }
     }
     
     
     /**
     /**
@@ -117,7 +118,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName
         super.onSaveInstanceState(outState);
         super.onSaveInstanceState(outState);
         outState.putParcelable(EXTRA_FILE, mFile);
         outState.putParcelable(EXTRA_FILE, mFile);
     }
     }
-    
+
 
 
     /**
     /**
      * Call this, when the user presses the up button
      * Call this, when the user presses the up button
@@ -370,6 +371,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName
                 mList.setSelectionFromTop(0, 0);
                 mList.setSelectionFromTop(0, 0);
             }
             }
             mFile = directory;
             mFile = directory;
+
         }
         }
     }
     }
     
     

+ 1 - 0
src/com/owncloud/android/utils/FileStorageUtils.java

@@ -74,4 +74,5 @@ public class FileStorageUtils {
         String value = uploadPath + OCFile.PATH_SEPARATOR +  (fileName == null ? "" : fileName);
         String value = uploadPath + OCFile.PATH_SEPARATOR +  (fileName == null ? "" : fileName);
         return value;
         return value;
     }
     }
+  
 }
 }