4343import java .util .List ;
4444import java .util .Locale ;
4545import java .util .Set ;
46+ import java .util .concurrent .ExecutorService ;
4647import java .util .concurrent .Executors ;
4748
4849import androidx .annotation .NonNull ;
@@ -67,6 +68,7 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
6768 private Set <File > checkedFiles ;
6869 private ViewThemeUtils viewThemeUtils ;
6970 private boolean isWithinEncryptedFolder ;
71+ private final ExecutorService singleThreadExecutor = Executors .newSingleThreadExecutor ();
7072
7173 private static final int VIEWTYPE_ITEM = 0 ;
7274 private static final int VIEWTYPE_FOOTER = 1 ;
@@ -372,7 +374,7 @@ public void swapDirectory(final File directory) {
372374 mFiles .clear ();
373375 mFilesAll .clear ();
374376
375- Executors . newSingleThreadExecutor () .execute (() -> {
377+ singleThreadExecutor .execute (() -> {
376378 // Load first page of folders
377379 List <File > firstPage = FileHelper .INSTANCE .listDirectoryEntries (directory , currentOffset , PAGE_SIZE , true );
378380
@@ -445,12 +447,14 @@ private void notifyItemRange(List<File> updatedList) {
445447 @ SuppressLint ("NotifyDataSetChanged" )
446448 public void setSortOrder (FileSortOrder sortOrder ) {
447449 localFileListFragmentInterface .setLoading (true );
448- final Handler uiHandler = new Handler (Looper .getMainLooper ());
449- Executors .newSingleThreadExecutor ().execute (() -> {
450- preferences .setSortOrder (FileSortOrder .Type .localFileListView , sortOrder );
451- mFiles = sortOrder .sortLocalFiles (mFiles );
452-
453- uiHandler .post (() -> {
450+ singleThreadExecutor .execute (() -> {
451+ List <File > sortedCopy = new ArrayList <>(mFiles );
452+ sortedCopy = sortOrder .sortLocalFiles (sortedCopy );
453+
454+ final List <File > finalSortedCopy = sortedCopy ;
455+ new Handler (Looper .getMainLooper ()).post (() -> {
456+ mFiles = finalSortedCopy ;
457+ mFilesAll = new ArrayList <>(finalSortedCopy );
454458 notifyDataSetChanged ();
455459 localFileListFragmentInterface .setLoading (false );
456460 });
@@ -591,4 +595,8 @@ public void setFiles(List<File> newFiles) {
591595 notifyDataSetChanged ();
592596 localFileListFragmentInterface .setLoading (false );
593597 }
598+
599+ public void cleanup () {
600+ singleThreadExecutor .shutdown ();
601+ }
594602}
0 commit comments