diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java index 9c58135215451..e67b100d840dd 100755 --- a/media/java/android/mtp/MtpDatabase.java +++ b/media/java/android/mtp/MtpDatabase.java @@ -266,6 +266,12 @@ public class MtpDatabase implements AutoCloseable { if (MtpDatabase.this.mServer != null) MtpDatabase.this.mServer.sendObjectRemoved(id); } + + @Override + public void sendObjectInfoChanged(int id) { + if (MtpDatabase.this.mServer != null) + MtpDatabase.this.mServer.sendObjectInfoChanged(id); + } }, subDirectories == null ? null : Sets.newHashSet(subDirectories)); initDeviceProperties(context); diff --git a/media/java/android/mtp/MtpServer.java b/media/java/android/mtp/MtpServer.java index 8af5ff7ac1fc1..a555d37df40df 100644 --- a/media/java/android/mtp/MtpServer.java +++ b/media/java/android/mtp/MtpServer.java @@ -77,6 +77,10 @@ public class MtpServer implements Runnable { native_send_object_removed(handle); } + public void sendObjectInfoChanged(int handle) { + native_send_object_info_changed(handle); + } + public void sendDevicePropertyChanged(int property) { native_send_device_property_changed(property); } @@ -106,6 +110,7 @@ public class MtpServer implements Runnable { private native final void native_cleanup(); private native final void native_send_object_added(int handle); private native final void native_send_object_removed(int handle); + private native final void native_send_object_info_changed(int handle); private native final void native_send_device_property_changed(int property); private native final void native_add_storage(MtpStorage storage); private native final void native_remove_storage(int storageId); diff --git a/media/java/android/mtp/MtpStorageManager.java b/media/java/android/mtp/MtpStorageManager.java index 756e942c33c5e..f14e7d704ea1b 100644 --- a/media/java/android/mtp/MtpStorageManager.java +++ b/media/java/android/mtp/MtpStorageManager.java @@ -55,7 +55,8 @@ public class MtpStorageManager { MtpObjectObserver(MtpObject object) { super(object.getPath().toString(), - MOVED_FROM | MOVED_TO | DELETE | CREATE | IN_ONLYDIR); + MOVED_FROM | MOVED_TO | DELETE | CREATE | IN_ONLYDIR + | CLOSE_WRITE); mObject = object; } @@ -85,6 +86,10 @@ public class MtpStorageManager { if (mObject.mObserver != null) mObject.mObserver.stopWatching(); mObject.mObserver = null; + } else if ((event & CLOSE_WRITE) != 0) { + if (sDebug) + Log.i(TAG, "inotify for " + mObject.getPath() + " CLOSE_WRITE: " + path); + handleChangedObject(mObject, path); } else { Log.w(TAG, "Got unrecognized event " + path + " " + event); } @@ -302,6 +307,11 @@ public class MtpStorageManager { * Called when an object is deleted. */ public abstract void sendObjectRemoved(int id); + + /** + * Called when an object info is changed. + */ + public abstract void sendObjectInfoChanged(int id); } private MtpNotifier mMtpNotifier; @@ -733,6 +743,25 @@ public class MtpStorageManager { Log.i(TAG, state + " transitioned to " + obj.getState() + " in op " + op); } + private synchronized void handleChangedObject(MtpObject parent, String path) { + MtpOperation op = MtpOperation.NONE; + MtpObject obj = parent.getChild(path); + if (obj != null) { + // Only handle files for size change notification event + if ((!obj.isDir()) && (obj.getSize() > 0)) + { + MtpObjectState state = obj.getState(); + op = obj.getOperation(); + MtpStorageManager.this.mMtpNotifier.sendObjectInfoChanged(obj.getId()); + if (sDebug) + Log.d(TAG, "sendObjectInfoChanged: id=" + obj.getId() + ",size=" + obj.getSize()); + } + } else { + if (sDebug) + Log.w(TAG, "object " + path + " null"); + } + } + /** * Block the caller until all events currently in the event queue have been * read and processed. Used for testing purposes. diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp index c60590a748e0d..39ff04ab2a0a5 100644 --- a/media/jni/android_mtp_MtpServer.cpp +++ b/media/jni/android_mtp_MtpServer.cpp @@ -134,6 +134,18 @@ android_mtp_MtpServer_send_object_removed(JNIEnv *env, jobject thiz, jint handle ALOGE("server is null in send_object_removed"); } +static void +android_mtp_MtpServer_send_object_info_changed(JNIEnv *env, jobject thiz, jint handle) +{ + Mutex::Autolock autoLock(sMutex); + + MtpServer* server = getMtpServer(env, thiz); + if (server) + server->sendObjectInfoChanged(handle); + else + ALOGE("server is null in send_object_info_changed"); +} + static void android_mtp_MtpServer_send_device_property_changed(JNIEnv *env, jobject thiz, jint property) { @@ -202,6 +214,7 @@ static const JNINativeMethod gMethods[] = { {"native_cleanup", "()V", (void *)android_mtp_MtpServer_cleanup}, {"native_send_object_added", "(I)V", (void *)android_mtp_MtpServer_send_object_added}, {"native_send_object_removed", "(I)V", (void *)android_mtp_MtpServer_send_object_removed}, + {"native_send_object_info_changed", "(I)V", (void *)android_mtp_MtpServer_send_object_info_changed}, {"native_send_device_property_changed", "(I)V", (void *)android_mtp_MtpServer_send_device_property_changed}, {"native_add_storage", "(Landroid/mtp/MtpStorage;)V", diff --git a/media/tests/MtpTests/src/android/mtp/MtpStorageManagerTest.java b/media/tests/MtpTests/src/android/mtp/MtpStorageManagerTest.java index d7833cc4e905c..566d1c63fff32 100644 --- a/media/tests/MtpTests/src/android/mtp/MtpStorageManagerTest.java +++ b/media/tests/MtpTests/src/android/mtp/MtpStorageManagerTest.java @@ -58,6 +58,7 @@ public class MtpStorageManagerTest { private ArrayList objectsAdded; private ArrayList objectsRemoved; + private ArrayList objectsInfoChanged; private File mainStorageDir; private File secondaryStorageDir; @@ -73,15 +74,42 @@ public class MtpStorageManagerTest { Log.d(TAG, Thread.currentThread().getStackTrace()[3].getMethodName()); } + private static void logMethodValue(String szVar, int iValue) + { + Log.d(TAG, szVar + "=" + iValue + ": " + Thread.currentThread().getStackTrace()[3].getMethodName()); + } + + private static void vWriteNewFile(File newFile) { + try { + new FileOutputStream(newFile).write(new byte[] {0, 0, 0}); + } catch (IOException e) { + Assert.fail(); + } + } + private static File createNewFile(File parent) { - return createNewFile(parent, UUID.randomUUID().toString()); + return createNewFile(parent, "file-" + UUID.randomUUID().toString()); + } + + private static File createNewFileNonZero(File parent) { + return createNewFileNonZero(parent, "file-" + UUID.randomUUID().toString()); } private static File createNewFile(File parent, String name) { + return createNewFile(parent, name, false); + } + + private static File createNewFileNonZero(File parent, String name) { + return createNewFile(parent, name, true); + } + + private static File createNewFile(File parent, String name, boolean fgNonZero) { try { File ret = new File(parent, name); if (!ret.createNewFile()) throw new AssertionError("Failed to create file"); + if (fgNonZero) + vWriteNewFile(ret); // create non-zero size file return ret; } catch (IOException e) { throw new AssertionError(e.getMessage()); @@ -96,11 +124,12 @@ public class MtpStorageManagerTest { } private static File createNewDir(File parent) { - return createNewDir(parent, UUID.randomUUID().toString()); + return createNewDir(parent, "dir-" + UUID.randomUUID().toString()); } @Before public void before() { + FileUtils.deleteContentsAndDir(TEMP_DIR_FILE); Assert.assertTrue(TEMP_DIR_FILE.mkdir()); mainStorageDir = createNewDir(TEMP_DIR_FILE); secondaryStorageDir = createNewDir(TEMP_DIR_FILE); @@ -112,17 +141,26 @@ public class MtpStorageManagerTest { objectsAdded = new ArrayList<>(); objectsRemoved = new ArrayList<>(); + objectsInfoChanged = new ArrayList<>(); manager = new MtpStorageManager(new MtpStorageManager.MtpNotifier() { @Override public void sendObjectAdded(int id) { + Log.d(TAG, "sendObjectAdded " + id); objectsAdded.add(id); } @Override public void sendObjectRemoved(int id) { + Log.d(TAG, "sendObjectRemoved " + id); objectsRemoved.add(id); } + + @Override + public void sendObjectInfoChanged(int id) { + Log.d(TAG, "sendObjectInfoChanged: " + id); + objectsInfoChanged.add(id); + } }, null); mainMtpStorage = manager.addMtpStorage(mainStorage); @@ -469,11 +507,16 @@ public class MtpStorageManagerTest { mainMtpStorage.getStorageId()); Assert.assertEquals(stream.size(), 0); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertEquals(manager.getObject(objectsAdded.get(0)).getPath().toString(), newFile.getPath()); + + logMethodValue("objectsInfoChanged.size", objectsInfoChanged.size()); + if (objectsInfoChanged.size() > 0) + Assert.assertEquals(objectsAdded.get(0).intValue(), objectsInfoChanged.get(0).intValue()); + Assert.assertTrue(manager.checkConsistency()); } @@ -491,6 +534,7 @@ public class MtpStorageManagerTest { Assert.assertEquals(manager.getObject(objectsAdded.get(0)).getPath().toString(), newDir.getPath()); Assert.assertTrue(manager.getObject(objectsAdded.get(0)).isDir()); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -508,6 +552,7 @@ public class MtpStorageManagerTest { Assert.assertEquals(manager.getObject(objectsAdded.get(2)).getPath().toString(), newDir.getPath()); Assert.assertTrue(manager.getObject(objectsAdded.get(2)).isDir()); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -531,7 +576,7 @@ public class MtpStorageManagerTest { @SmallTest public void testObjectMoved() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); List stream = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()); Assert.assertEquals(stream.size(), 1); @@ -544,6 +589,7 @@ public class MtpStorageManagerTest { Assert.assertEquals(manager.getObject(objectsAdded.get(0)).getPath().toString(), toFile.getPath()); Assert.assertNull(manager.getObject(objectsRemoved.get(0))); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -561,7 +607,7 @@ public class MtpStorageManagerTest { "newFile", MtpConstants.FORMAT_UNDEFINED); Assert.assertEquals(id, 1); - File newFile = createNewFile(mainStorageDir, "newFile"); + File newFile = createNewFileNonZero(mainStorageDir, "newFile"); manager.flushEvents(); MtpStorageManager.MtpObject obj = manager.getObject(id); Assert.assertTrue(manager.endSendObject(obj, true)); @@ -586,11 +632,12 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endSendObject(obj, true)); Assert.assertEquals(obj.getPath().toString(), newFile.getPath()); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(obj.getFormat(), MtpConstants.FORMAT_ASSOCIATION); Assert.assertTrue(manager.checkConsistency()); // Check that new dir receives events - File newerFile = createNewFile(newFile); + File newerFile = createNewFileNonZero(newFile); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertEquals(manager.getObject(objectsAdded.get(0)).getPath().toString(), @@ -609,7 +656,7 @@ public class MtpStorageManagerTest { MtpStorageManager.MtpObject obj = manager.getObject(id); Assert.assertTrue(manager.endSendObject(obj, true)); - File newFile = createNewFile(mainStorageDir, "newFile"); + File newFile = createNewFileNonZero(mainStorageDir, "newFile"); manager.flushEvents(); Assert.assertEquals(obj.getPath().toString(), newFile.getPath()); Assert.assertEquals(objectsAdded.size(), 0); @@ -632,11 +679,12 @@ public class MtpStorageManagerTest { manager.flushEvents(); Assert.assertEquals(obj.getPath().toString(), newFile.getPath()); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(obj.getFormat(), MtpConstants.FORMAT_ASSOCIATION); Assert.assertTrue(manager.checkConsistency()); // Check that new dir receives events - File newerFile = createNewFile(newFile); + File newerFile = createNewFileNonZero(newFile); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertEquals(manager.getObject(objectsAdded.get(0)).getPath().toString(), @@ -689,12 +737,13 @@ public class MtpStorageManagerTest { Assert.assertEquals(id, 1); MtpStorageManager.MtpObject obj = manager.getObject(id); - File newFile = createNewFile(mainStorageDir, "newFile"); + File newFile = createNewFileNonZero(mainStorageDir, "newFile"); Assert.assertTrue(newFile.delete()); manager.flushEvents(); Assert.assertTrue(manager.endSendObject(obj, false)); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -713,15 +762,21 @@ public class MtpStorageManagerTest { manager.flushEvents(); Assert.assertTrue(manager.endSendObject(obj, false)); Assert.assertNotEquals(objectsAdded.get(0).intValue(), id); + logMethodValue("objectsInfoChanged.size", objectsInfoChanged.size()); + if (objectsInfoChanged.size() > 0) + Assert.assertNotEquals(objectsInfoChanged.get(0).intValue(), id); Assert.assertNull(manager.getObject(id)); Assert.assertEquals(manager.getObject(objectsAdded.get(0)).getPath().toString(), newDir.getPath()); Assert.assertTrue(manager.checkConsistency()); // Expect events in new dir - createNewFile(newDir); + createNewFileNonZero(newDir); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 2); + logMethodValue("objectsInfoChanged.size", objectsInfoChanged.size()); + if (objectsInfoChanged.size() == 1) + Assert.assertEquals(objectsAdded.get(1).intValue(), objectsInfoChanged.get(0).intValue()); Assert.assertTrue(manager.checkConsistency()); } @@ -764,13 +819,13 @@ public class MtpStorageManagerTest { public void testRemoveObjectDir() { logMethodName(); File newDir = createNewDir(mainStorageDir); - createNewFile(createNewDir(newDir)); + createNewFileNonZero(createNewDir(newDir)); MtpStorageManager.MtpObject obj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); manager.getObjects(obj.getId(), 0, mainMtpStorage.getStorageId()); Assert.assertTrue(manager.beginRemoveObject(obj)); - createNewFile(newDir); + createNewFileNonZero(newDir); Assert.assertTrue(FileUtils.deleteContentsAndDir(newDir)); manager.flushEvents(); Assert.assertTrue(manager.endRemoveObject(obj, true)); @@ -811,13 +866,16 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.beginRemoveObject(obj)); Assert.assertTrue(newFile.delete()); - createNewFile(mainStorageDir, newFile.getName()); + createNewFileNonZero(mainStorageDir, newFile.getName()); manager.flushEvents(); Assert.assertTrue(manager.endRemoveObject(obj, true)); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertNull(manager.getObject(id)); Assert.assertNotEquals(objectsAdded.get(0).intValue(), id); + logMethodValue("objectsInfoChanged.size", objectsInfoChanged.size()); + if (objectsInfoChanged.size() > 0) + Assert.assertNotEquals(objectsInfoChanged.get(0).intValue(), objectsAdded.get(0).intValue()); Assert.assertTrue(manager.checkConsistency()); } @@ -850,6 +908,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endRemoveObject(obj, false)); Assert.assertEquals(manager.getObject(obj.getId()), obj); Assert.assertEquals(objectsAdded.size(), 1); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -875,7 +934,7 @@ public class MtpStorageManagerTest { @SmallTest public void testCopyObjectSuccess() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File newDir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()) @@ -886,7 +945,7 @@ public class MtpStorageManagerTest { int id = manager.beginCopyObject(fileObj, dirObj); Assert.assertNotEquals(id, -1); - createNewFile(newDir, newFile.getName()); + createNewFileNonZero(newDir, newFile.getName()); manager.flushEvents(); MtpStorageManager.MtpObject obj = manager.getObject(id); Assert.assertTrue(manager.endCopyObject(obj, true)); @@ -900,9 +959,9 @@ public class MtpStorageManagerTest { logMethodName(); File newDirFrom = createNewDir(mainStorageDir); File newDirFrom1 = createNewDir(newDirFrom); - File newDirFrom2 = createNewFile(newDirFrom1); - File delayedFile = createNewFile(newDirFrom); - File deletedFile = createNewFile(newDirFrom); + File newDirFrom2 = createNewFileNonZero(newDirFrom1); + File delayedFile = createNewFileNonZero(newDirFrom); + File deletedFile = createNewFileNonZero(newDirFrom); File newDirTo = createNewDir(mainStorageDir); MtpStorageManager.MtpObject toObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -916,9 +975,9 @@ public class MtpStorageManagerTest { Assert.assertNotEquals(id, -1); File copiedDir = createNewDir(newDirTo, newDirFrom.getName()); File copiedDir1 = createNewDir(copiedDir, newDirFrom1.getName()); - createNewFile(copiedDir1, newDirFrom2.getName()); - createNewFile(copiedDir, "extraFile"); - File toDelete = createNewFile(copiedDir, deletedFile.getName()); + createNewFileNonZero(copiedDir1, newDirFrom2.getName()); + createNewFileNonZero(copiedDir, "extraFile"); + File toDelete = createNewFileNonZero(copiedDir, deletedFile.getName()); manager.flushEvents(); Assert.assertTrue(toDelete.delete()); manager.flushEvents(); @@ -927,13 +986,13 @@ public class MtpStorageManagerTest { Assert.assertEquals(objectsAdded.size(), 1); Assert.assertEquals(objectsRemoved.size(), 1); - createNewFile(copiedDir, delayedFile.getName()); + createNewFileNonZero(copiedDir, delayedFile.getName()); manager.flushEvents(); Assert.assertTrue(manager.checkConsistency()); // Expect events in the visited dir, but not the unvisited dir. - createNewFile(copiedDir); - createNewFile(copiedDir1); + createNewFileNonZero(copiedDir); + createNewFileNonZero(copiedDir1); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 2); Assert.assertEquals(objectsAdded.size(), 2); @@ -947,7 +1006,7 @@ public class MtpStorageManagerTest { @SmallTest public void testCopyObjectFailed() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File newDir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -962,6 +1021,7 @@ public class MtpStorageManagerTest { MtpStorageManager.MtpObject obj = manager.getObject(id); Assert.assertTrue(manager.endCopyObject(obj, false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -969,7 +1029,7 @@ public class MtpStorageManagerTest { @SmallTest public void testCopyObjectFailedAdded() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File newDir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -989,7 +1049,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.checkConsistency()); // Expect events in new dir - createNewFile(addedDir); + createNewFileNonZero(addedDir); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 2); Assert.assertTrue(manager.checkConsistency()); @@ -999,7 +1059,7 @@ public class MtpStorageManagerTest { @SmallTest public void testCopyObjectFailedDeleted() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File newDir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -1010,7 +1070,7 @@ public class MtpStorageManagerTest { int id = manager.beginCopyObject(fileObj, dirObj); Assert.assertNotEquals(id, -1); - Assert.assertTrue(createNewFile(newDir, newFile.getName()).delete()); + Assert.assertTrue(createNewFileNonZero(newDir, newFile.getName()).delete()); manager.flushEvents(); MtpStorageManager.MtpObject obj = manager.getObject(id); Assert.assertTrue(manager.endCopyObject(obj, false)); @@ -1022,7 +1082,7 @@ public class MtpStorageManagerTest { @SmallTest public void testRenameObjectSuccess() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject obj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginRenameObject(obj, "renamed")); @@ -1033,6 +1093,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endRenameObject(obj, newFile.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(obj.getPath().toString(), renamed.getPath()); @@ -1054,6 +1115,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endRenameObject(obj, newDir.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(obj.getPath().toString(), renamed.getPath()); @@ -1063,6 +1125,7 @@ public class MtpStorageManagerTest { createNewFile(renamed); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -1082,13 +1145,14 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endRenameObject(obj, newDir.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(obj.getPath().toString(), renamed.getPath()); Assert.assertTrue(manager.checkConsistency()); // Expect events since the dir was visited - createNewFile(renamed); + createNewFileNonZero(renamed); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1098,7 +1162,7 @@ public class MtpStorageManagerTest { @SmallTest public void testRenameObjectDelayed() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject obj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginRenameObject(obj, "renamed")); @@ -1109,6 +1173,7 @@ public class MtpStorageManagerTest { manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(obj.getPath().toString(), renamed.getPath()); @@ -1131,13 +1196,14 @@ public class MtpStorageManagerTest { manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(obj.getPath().toString(), renamed.getPath()); Assert.assertTrue(manager.checkConsistency()); // Expect events since the dir was visited - createNewFile(renamed); + createNewFileNonZero(renamed); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1147,7 +1213,7 @@ public class MtpStorageManagerTest { @SmallTest public void testRenameObjectFailed() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject obj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginRenameObject(obj, "renamed")); @@ -1155,6 +1221,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endRenameObject(obj, newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertTrue(manager.checkConsistency()); @@ -1164,7 +1231,7 @@ public class MtpStorageManagerTest { @SmallTest public void testRenameObjectFailedOldRemoved() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject obj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginRenameObject(obj, "renamed")); @@ -1174,6 +1241,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.endRenameObject(obj, newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1183,16 +1251,19 @@ public class MtpStorageManagerTest { @SmallTest public void testRenameObjectFailedNewAdded() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject obj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginRenameObject(obj, "renamed")); - createNewFile(mainStorageDir, "renamed"); + createNewFileNonZero(mainStorageDir, "renamed"); manager.flushEvents(); Assert.assertTrue(manager.endRenameObject(obj, newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 1); + logMethodValue("objectsInfoChanged.size", objectsInfoChanged.size()); + if (objectsInfoChanged.size() > 0) + Assert.assertNotEquals(objectsAdded.get(0).intValue(), objectsInfoChanged.get(0).intValue()); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertTrue(manager.checkConsistency()); @@ -1202,7 +1273,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectSuccess() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File dir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -1220,6 +1291,7 @@ public class MtpStorageManagerTest { dirObj, newFile.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(fileObj.getPath().toString(), moved.getPath()); @@ -1248,6 +1320,7 @@ public class MtpStorageManagerTest { dirObj, movedDir.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(movedObj.getPath().toString(), renamed.getPath()); @@ -1257,6 +1330,7 @@ public class MtpStorageManagerTest { createNewFile(renamed); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -1283,13 +1357,14 @@ public class MtpStorageManagerTest { dirObj, movedDir.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(movedObj.getPath().toString(), renamed.getPath()); Assert.assertTrue(manager.checkConsistency()); // Expect events since the dir was visited - createNewFile(renamed); + createNewFileNonZero(renamed); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1299,7 +1374,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectDelayed() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File dir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -1348,13 +1423,14 @@ public class MtpStorageManagerTest { manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(movedObj.getPath().toString(), renamed.getPath()); Assert.assertTrue(manager.checkConsistency()); // Expect events since the dir was visited - createNewFile(renamed); + createNewFileNonZero(renamed); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1364,7 +1440,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectFailed() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File dir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -1379,6 +1455,7 @@ public class MtpStorageManagerTest { dirObj, newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertTrue(manager.checkConsistency()); @@ -1388,7 +1465,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectFailedOldRemoved() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File dir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -1405,6 +1482,7 @@ public class MtpStorageManagerTest { dirObj, newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1414,7 +1492,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectFailedNewAdded() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); File dir = createNewDir(mainStorageDir); MtpStorageManager.MtpObject dirObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).stream() @@ -1424,7 +1502,7 @@ public class MtpStorageManagerTest { .filter(o -> !o.isDir()).findFirst().get(); Assert.assertTrue(manager.beginMoveObject(fileObj, dirObj)); - createNewFile(dir, newFile.getName()); + createNewFileNonZero(dir, newFile.getName()); manager.flushEvents(); Assert.assertTrue(manager.endMoveObject( manager.getStorageRoot(mainMtpStorage.getStorageId()), @@ -1440,14 +1518,14 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectXStorageSuccess() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject fileObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginMoveObject(fileObj, manager.getStorageRoot(secondaryMtpStorage.getStorageId()))); Assert.assertTrue(newFile.delete()); - File moved = createNewFile(secondaryStorageDir, newFile.getName()); + File moved = createNewFileNonZero(secondaryStorageDir, newFile.getName()); manager.flushEvents(); Assert.assertTrue(manager.endMoveObject( manager.getStorageRoot(mainMtpStorage.getStorageId()), @@ -1481,6 +1559,7 @@ public class MtpStorageManagerTest { movedDir.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(manager.getObject(movedObj.getId()).getPath().toString(), moved.getPath()); @@ -1491,6 +1570,7 @@ public class MtpStorageManagerTest { createNewFile(moved); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertTrue(manager.checkConsistency()); } @@ -1514,6 +1594,7 @@ public class MtpStorageManagerTest { movedDir.getName(), true)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(manager.getObject(movedObj.getId()).getPath().toString(), moved.getPath()); @@ -1521,7 +1602,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.checkConsistency()); // Expect events since the dir was visited - createNewFile(moved); + createNewFileNonZero(moved); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1531,7 +1612,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectXStorageDelayed() { logMethodName(); - File movedFile = createNewFile(mainStorageDir); + File movedFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject movedObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginMoveObject(movedObj, @@ -1543,7 +1624,7 @@ public class MtpStorageManagerTest { movedFile.getName(), true)); Assert.assertTrue(movedFile.delete()); - File moved = createNewFile(secondaryStorageDir, movedFile.getName()); + File moved = createNewFileNonZero(secondaryStorageDir, movedFile.getName()); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); @@ -1575,6 +1656,7 @@ public class MtpStorageManagerTest { manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertEquals(manager.getObject(movedObj.getId()).getPath().toString(), moved.getPath()); @@ -1582,7 +1664,7 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.checkConsistency()); // Expect events since the dir was visited - createNewFile(moved); + createNewFileNonZero(moved); manager.flushEvents(); Assert.assertEquals(objectsAdded.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1592,7 +1674,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectXStorageFailed() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject fileObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginMoveObject(fileObj, @@ -1604,6 +1686,7 @@ public class MtpStorageManagerTest { newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 0); Assert.assertTrue(manager.checkConsistency()); @@ -1613,7 +1696,7 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectXStorageFailedOldRemoved() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject fileObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginMoveObject(fileObj, @@ -1627,6 +1710,7 @@ public class MtpStorageManagerTest { newFile.getName(), false)); Assert.assertEquals(objectsAdded.size(), 0); + Assert.assertEquals(objectsInfoChanged.size(), 0); Assert.assertEquals(objectsRemoved.size(), 1); Assert.assertTrue(manager.checkConsistency()); @@ -1636,13 +1720,13 @@ public class MtpStorageManagerTest { @SmallTest public void testMoveObjectXStorageFailedNewAdded() { logMethodName(); - File newFile = createNewFile(mainStorageDir); + File newFile = createNewFileNonZero(mainStorageDir); MtpStorageManager.MtpObject fileObj = manager.getObjects(0xFFFFFFFF, 0, mainMtpStorage.getStorageId()).get(0); Assert.assertTrue(manager.beginMoveObject(fileObj, manager.getStorageRoot(secondaryMtpStorage.getStorageId()))); - createNewFile(secondaryStorageDir, newFile.getName()); + createNewFileNonZero(secondaryStorageDir, newFile.getName()); manager.flushEvents(); Assert.assertTrue(manager.endMoveObject( manager.getStorageRoot(mainMtpStorage.getStorageId()), @@ -1654,4 +1738,4 @@ public class MtpStorageManagerTest { Assert.assertTrue(manager.checkConsistency()); } -} \ No newline at end of file +}