@Test
public void testSortCloudFiles() {
List<OCFile> array = new ArrayList<>();
array.add(new OCFile("/Joplin/0ed1778f8f88414286c13b2cbff8664e.md"));
array.add(new OCFile("/Joplin/0edf70ab1b722172088257b3d73d6c46.md"));
array.add(new OCFile("/Joplin/0fb063d4d18128fdf464878d18439ca3.md"));
array.add(new OCFile("/Joplin/10e27391096748b187392f913da048f8.md"));
array.add(new OCFile("/Joplin/4093463de91947b990fccff4a1d13d8f.md"));
array.add(new OCFile("/Joplin/41742897324842849667274b2d1a0bb6.md"));
array.add(new OCFile("/Joplin/41890bd1b11a44f7a6b226120ee1efbc.md"));
array.add(new OCFile("/Joplin/41bd23f62ebb4d0b64c5f78b5ad13133.md"));
array.add(new OCFile("/Joplin/4292ef3223334677bed0ad0268e5bd4b.md"));
array.add(new OCFile("/Joplin/4307355783f4108aad5eba4d1b81ff91.md"));
array.add(new OCFile("/Joplin/448d96a6c76b48b68030c8c11339088d.md"));
array.add(new OCFile("/Joplin/4969e02c5c504899b17a355e61989bed.md"));
array.add(new OCFile("/Joplin/49bfe05d968c3c0612ddceb2250b3a18.md"));
array.add(new OCFile("/Joplin/701409a07ee4464fb82d9bc0c451f204.md"));
array.add(new OCFile("/Joplin/70ba2272c85353a0216577ec76d0d343.md"));
array.add(new OCFile("/Joplin/71563833027a49dcaa86208a3f621402.md"));
array.add(new OCFile("/Joplin/7172f37973434fe3aeb6ef96bb48d968.md"));
array.add(new OCFile("/Joplin/72068539d77c6e7b3271b653422d6e76.md"));
array.add(new OCFile("/Joplin/73098c81e1ae4831b3a90ffda82ddcec.md"));
array.add(new OCFile("/Joplin/730c09e169bc4289af163a34d7fe2553.md"));
array.add(new OCFile("/Joplin/736be455ce8aff18694649001a74722a.md"));
array.add(new OCFile("/Joplin/749c837930174e828620a99a9e7ad7bc.md"));
array.add(new OCFile("/Joplin/8a2d6a6461eb4979bb049837a8710a3d.md"));
array.add(new OCFile("/Joplin/8b7ff9081f5944399e1fc83c6191a09f.md"));
array.add(new OCFile("/Joplin/8c45ac421149a21f32edab06f0955839.md"));
array.add(new OCFile("/Joplin/8cd855a41cca4cbd8a0c20e79c4f2f9e.md"));
array.add(new OCFile("/Joplin/8f062be696e3488ca12a9d3f3f6aa10a.md"));
array.add(new OCFile("/Joplin/8f74a571a11b4709bb1cdf75b4a51a8e.md"));
array.add(new OCFile("/Joplin/90f61d36f4dd4ef79525b7b0812213e2.md"));
array.add(new OCFile("/Joplin/9846fdafaffa718ebcfa19474e8be251.md"));
array.add(new OCFile("/Joplin/a441cb730c22451aa4352129231fe898.md"));
array.add(new OCFile("/Joplin/a551ce1ae06e6f05669a0cadc4eb2f7b.md"));
array.add(new OCFile("/Joplin/a590cd1671b648c7a3bae0d6fbb7da81.md"));
FileSortOrderByName fileSortOrderByName = new FileSortOrderByName("test", true);
fileSortOrderByName.sortCloudFiles(array);
}
Nextcloud app version: 3.2.3 (from Google Play) and the latest version from master branch
Nextcloud server version: 13.0.6.1
09-01 18:06:13.533 1965-1965/com.nextcloud.android.beta E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nextcloud.android.beta, PID: 1965
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899)
at java.util.TimSort.mergeAt(TimSort.java:516)
at java.util.TimSort.mergeForceCollapse(TimSort.java:457)
at java.util.TimSort.sort(TimSort.java:254)
at java.util.Arrays.sort(Arrays.java:1498)
at java.util.ArrayList.sort(ArrayList.java:1470)
at java.util.Collections.sort(Collections.java:201)
at com.owncloud.android.utils.FileSortOrderByName.sortCloudFiles(FileSortOrderByName.java:55)
at com.owncloud.android.ui.adapter.OCFileListAdapter.swapDirectory(OCFileListAdapter.java:513)
at com.owncloud.android.ui.fragment.OCFileListFragment.listDirectory(OCFileListFragment.java:1080)
at com.owncloud.android.ui.fragment.OCFileListFragment.onItemClicked(OCFileListFragment.java:809)
at com.owncloud.android.ui.adapter.OCFileListAdapter.lambda$onBindViewHolder$0$OCFileListAdapter(OCFileListAdapter.java:276)
at com.owncloud.android.ui.adapter.OCFileListAdapter$$Lambda$0.onClick(Unknown Source:23)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24774)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:172)
at android.app.ActivityThread.main(ActivityThread.java:6590)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
GitMate.io thinks possibly related issues are https://github.com/nextcloud/android/issues/198 (IllegalArgumentException: Comparison method violates its general contract!), https://github.com/nextcloud/android/issues/1744 (AutoUpload - IllegalArgumentException: Comparison method violates its general contract!), https://github.com/nextcloud/android/issues/2529 (App crash), https://github.com/nextcloud/android/issues/2920 (Android app crashes when opening the menu), and https://github.com/nextcloud/android/issues/2461 (Crash on open GridView folder).
@maksim-m thanks a lot for the report and especially for the unit test :heart: This is a long existing crash we've seen in the developer console for quite a while and you are the first person who could provide us with more information and data when this would happen :tada:
cc @tobiasKaminsky - check it out, haven't run the test but we might finally be able to fix the sort issue :)
I sure will have a look today.
Thank you very much @maksim-m :tada:
merged and to be released with 3.3.0 :+1: