From: masensio Date: Thu, 29 Jan 2015 10:22:47 +0000 (+0100) Subject: Fix bug: When renaming a folder, in the photos apps both folder are shown X-Git-Tag: oc-android-1.7.0_signed~17^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/4354329b46778d50175eeac178bae1cdbc6fb1f2 Fix bug: When renaming a folder, in the photos apps both folder are shown --- diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index 900d59cf..c24c94b7 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -494,7 +494,7 @@ public class FileDataStorageManager { if (removeLocalCopy && file.isDown() && localPath != null && success) { success = new File(localPath).delete(); if (success) { - deleteFileInMediaScan(file); + deleteFileInMediaScan(localPath); } if (!removeDBData && success) { // maybe unnecessary, but should be checked TODO remove if unnecessary @@ -556,7 +556,8 @@ public class FileDataStorageManager { File localFile = new File(file.getStoragePath()); success &= localFile.delete(); if (success) { - deleteFileInMediaScan(file); // notify MediaScanner about removed file + // notify MediaScanner about removed file + deleteFileInMediaScan(file.getStoragePath()); file.setStoragePath(null); saveFile(file); } @@ -716,13 +717,11 @@ public class FileDataStorageManager { Iterator it = originalPathsToTriggerMediaScan.iterator(); while (it.hasNext()) { // Notify MediaScanner about removed file - deleteFileInMediaScan(file); - triggerMediaScan(it.next()); + deleteFileInMediaScan(it.next()); } it = newPathsToTriggerMediaScan.iterator(); while (it.hasNext()) { // Notify MediaScanner about new file/folder - deleteFileInMediaScan(file); triggerMediaScan(it.next()); } } @@ -1500,22 +1499,23 @@ public class FileDataStorageManager { MainApp.getAppContext().sendBroadcast(intent); } - public void deleteFileInMediaScan(OCFile file) { + public void deleteFileInMediaScan(String path) { - String path = file.getStoragePath(); - if (file.isImage()) { + String mimetypeString = FileStorageUtils.getMimeTypeFromName(path); + if (mimetypeString.startsWith("image/")) { // Images getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.DATA + "=?", new String[]{path}); - } else if (file.isAudio()) { + } else if (mimetypeString.startsWith("audio/")) { // Audio getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, MediaStore.Audio.Media.DATA + "=?", new String[]{path}); - } else if (file.isVideo()) { + } else if (mimetypeString.startsWith("video/")) { // Video getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, MediaStore.Video.Media.DATA + "=?", new String[]{path}); } + } } diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index e6fd4141..78bdc84f 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -20,9 +20,9 @@ package com.owncloud.android.datamodel; import android.os.Parcel; import android.os.Parcelable; -import android.webkit.MimeTypeMap; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.utils.FileStorageUtils; import java.io.File; @@ -538,17 +538,7 @@ public class OCFile implements Parcelable, Comparable { */ public boolean isImage() { return ((mMimeType != null && mMimeType.startsWith("image/")) || - getMimeTypeFromName().startsWith("image/")); - } - - public String getMimeTypeFromName() { - String extension = ""; - int pos = mRemotePath.lastIndexOf('.'); - if (pos >= 0) { - extension = mRemotePath.substring(pos + 1); - } - String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase()); - return (result != null) ? result : ""; + FileStorageUtils.getMimeTypeFromName(mRemotePath).startsWith("image/")); } public String getPermissions() { diff --git a/src/com/owncloud/android/operations/RenameFileOperation.java b/src/com/owncloud/android/operations/RenameFileOperation.java index 2fdc8f18..aa986079 100644 --- a/src/com/owncloud/android/operations/RenameFileOperation.java +++ b/src/com/owncloud/android/operations/RenameFileOperation.java @@ -51,7 +51,6 @@ public class RenameFileOperation extends SyncOperation { * Constructor * * @param remotePath RemotePath of the OCFile instance describing the remote file or folder to rename - * @param account OwnCloud account containing the remote file * @param newName New name to set as the name of file. */ public RenameFileOperation(String remotePath, String newName) { @@ -117,7 +116,7 @@ public class RenameFileOperation extends SyncOperation { private void saveLocalFile() { mFile.setFileName(mNewName); - + // try to rename the local copy of the file if (mFile.isDown()) { String oldPath = mFile.getStoragePath(); @@ -129,8 +128,8 @@ public class RenameFileOperation extends SyncOperation { String newPath = parentStoragePath + mNewName; mFile.setStoragePath(newPath); - // notify MediaScanner about removed file - TODO really works? - getStorageManager().triggerMediaScan(oldPath); + // notify MediaScanner about removed file + getStorageManager().deleteFileInMediaScan(oldPath); // notify to scan about new file getStorageManager().triggerMediaScan(newPath); } diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index b462cd95..b0c337d6 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -36,6 +36,7 @@ import android.preference.PreferenceManager; import android.net.Uri; import android.os.Environment; import android.os.StatFs; +import android.webkit.MimeTypeMap; /** @@ -135,7 +136,7 @@ public class FileStorageUtils { /** * Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}. * - * @param oCFile OCFile + * @param ocFile OCFile * @return New RemoteFile instance representing the resource described by ocFile. */ public static RemoteFile fillRemoteFile(OCFile ocFile){ @@ -171,7 +172,7 @@ public class FileStorageUtils { /** * Sorts list by Date - * @param sortAscending true: ascending, false: descending + * @param files */ public static Vector sortByDate(Vector files){ final Integer val; @@ -239,7 +240,7 @@ public class FileStorageUtils { /** * Sorts list by Name - * @param sortAscending true: ascending, false: descending + * @param files files to sort */ public static Vector sortByName(Vector files){ final Integer val; @@ -284,6 +285,21 @@ public class FileStorageUtils { return result; } return 0; - } + } + + /** + * Mimetype String of a file + * @param path + * @return + */ + public static String getMimeTypeFromName(String path) { + String extension = ""; + int pos = path.lastIndexOf('.'); + if (pos >= 0) { + extension = path.substring(pos + 1); + } + String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase()); + return (result != null) ? result : ""; + } }