瀏覽代碼

Move sort order preferences to AppPreferences interface

Signed-off-by: Chris Narkiewicz <hello@ezaquarii.com>
Chris Narkiewicz 6 年之前
父節點
當前提交
e521d25d63

+ 2 - 0
build.gradle

@@ -251,6 +251,8 @@ dependencies {
     // dependencies for local unit tests
     testImplementation 'junit:junit:4.12'
     testImplementation 'org.mockito:mockito-core:2.25.0'
+    testImplementation 'androidx.test:core:1.1.0'
+
     // dependencies for instrumented tests
     // JUnit4 Rules
     androidTestImplementation 'androidx.test.ext:junit:1.1.0'

+ 32 - 0
src/main/java/com/nextcloud/client/preferences/AppPreferences.java

@@ -20,6 +20,9 @@
 
 package com.nextcloud.client.preferences;
 
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.utils.FileSortOrder;
+
 public interface AppPreferences {
     boolean instantPictureUploadEnabled();
     boolean instantVideoUploadEnabled();
@@ -117,6 +120,35 @@ public interface AppPreferences {
     boolean isAutoUploadInitialized();
     void setAutoUploadInit(boolean autoUploadInit);
 
+    /**
+     * Get preferred folder sort order.
+     *
+     * @return sort order     the sort order, default is {@link FileSortOrder#sort_a_to_z} (sort by name)
+     */
+    FileSortOrder getSortOrderByFolder(OCFile folder);
+
+    /**
+     * Set preferred folder sort order.
+     *
+     * @param sortOrder the sort order
+     */
+    void setSortOrder(OCFile folder, FileSortOrder sortOrder);
+
+    /**
+     * Set preferred folder sort order.
+     *
+     * @param sortOrder the sort order
+     */
+    void setSortOrder(FileSortOrder.Type type, FileSortOrder sortOrder);
+
+    /**
+     * Get preferred folder sort order.
+     *
+     * @return sort order     the sort order, default is {@link FileSortOrder#sort_a_to_z} (sort by name)
+     */
+    FileSortOrder getSortOrderByType(FileSortOrder.Type type, FileSortOrder defaultOrder);
+    FileSortOrder getSortOrderByType(FileSortOrder.Type type);
+
     boolean isShowDetailedTimestampEnabled();
     void setShowDetailedTimestampEnabled(boolean showDetailedTimestamp);
 

+ 18 - 41
src/main/java/com/nextcloud/client/preferences/PreferenceManager.java

@@ -27,7 +27,6 @@ import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.ui.activity.SettingsActivity;
 import com.owncloud.android.utils.FileSortOrder;
 
@@ -69,14 +68,17 @@ public final class PreferenceManager implements AppPreferences {
     public static final String PREF__LOCK_TIMESTAMP = "lock_timestamp";
     private static final String PREF__SHOW_MEDIA_SCAN_NOTIFICATIONS = "show_media_scan_notifications";
 
+    private final Context context;
     private final SharedPreferences preferences;
 
     public static AppPreferences fromContext(Context context) {
-        SharedPreferences prefs = getDefaultSharedPreferences(context.getApplicationContext());
-        return new PreferenceManager(prefs);
+        Context appContext = context.getApplicationContext();
+        SharedPreferences prefs = getDefaultSharedPreferences(appContext);
+        return new PreferenceManager(appContext, prefs);
     }
 
-    PreferenceManager(SharedPreferences preferences) {
+    PreferenceManager(Context appContext, SharedPreferences preferences) {
+        this.context = appContext;
         this.preferences = preferences;
     }
 
@@ -218,39 +220,24 @@ public final class PreferenceManager implements AppPreferences {
         setFolderPreference(context, PREF__FOLDER_LAYOUT, folder, layout_name);
     }
 
-    /**
-     * Get preferred folder sort order.
-     *
-     * @param context Caller {@link Context}, used to access to shared preferences manager.
-     * @return sort order     the sort order, default is {@link FileSortOrder#sort_a_to_z} (sort by name)
-     */
-    public static FileSortOrder getSortOrderByFolder(Context context, OCFile folder) {
+    @Override
+    public FileSortOrder getSortOrderByFolder(OCFile folder) {
         return FileSortOrder.sortOrders.get(getFolderPreference(context, PREF__FOLDER_SORT_ORDER, folder,
             FileSortOrder.sort_a_to_z.name));
     }
 
-    /**
-     * Set preferred folder sort order.
-     *
-     * @param context   Caller {@link Context}, used to access to shared preferences manager.
-     * @param sortOrder the sort order
-     */
-    public static void setSortOrder(Context context, OCFile folder, FileSortOrder sortOrder) {
+    @Override
+    public void setSortOrder(OCFile folder, FileSortOrder sortOrder) {
         setFolderPreference(context, PREF__FOLDER_SORT_ORDER, folder, sortOrder.name);
     }
 
-    public static FileSortOrder getSortOrderByType(Context context, FileSortOrder.Type type) {
-        return getSortOrderByType(context, type, FileSortOrder.sort_a_to_z);
+    @Override
+    public FileSortOrder getSortOrderByType(FileSortOrder.Type type) {
+        return getSortOrderByType(type, FileSortOrder.sort_a_to_z);
     }
 
-    /**
-     * Get preferred folder sort order.
-     *
-     * @param context Caller {@link Context}, used to access to shared preferences manager.
-     * @return sort order     the sort order, default is {@link FileSortOrder#sort_a_to_z} (sort by name)
-     */
-    public static FileSortOrder getSortOrderByType(Context context, FileSortOrder.Type type,
-                                                   FileSortOrder defaultOrder) {
+    @Override
+    public FileSortOrder getSortOrderByType(FileSortOrder.Type type, FileSortOrder defaultOrder) {
         Account account = AccountUtils.getCurrentOwnCloudAccount(context);
 
         if (account == null) {
@@ -264,16 +251,10 @@ public final class PreferenceManager implements AppPreferences {
         return value.isEmpty() ? defaultOrder : FileSortOrder.sortOrders.get(value);
     }
 
-    /**
-     * Set preferred folder sort order.
-     *
-     * @param context   Caller {@link Context}, used to access to shared preferences manager.
-     * @param sortOrder the sort order
-     */
-    public static void setSortOrder(Context context, FileSortOrder.Type type, FileSortOrder sortOrder) {
+    @Override
+    public void setSortOrder(FileSortOrder.Type type, FileSortOrder sortOrder) {
         Account account = AccountUtils.getCurrentOwnCloudAccount(context);
         ArbitraryDataProvider dataProvider = new ArbitraryDataProvider(context.getContentResolver());
-
         dataProvider.storeOrUpdateKeyValue(account.name, PREF__FOLDER_SORT_ORDER + "_" + type, sortOrder.name);
     }
 
@@ -296,11 +277,7 @@ public final class PreferenceManager implements AppPreferences {
         }
 
         ArbitraryDataProvider dataProvider = new ArbitraryDataProvider(context.getContentResolver());
-        FileDataStorageManager storageManager = ((ComponentsGetter)context).getStorageManager();
-
-        if (storageManager == null) {
-            storageManager = new FileDataStorageManager(account, context.getContentResolver());
-        }
+        FileDataStorageManager storageManager = new FileDataStorageManager(account, context.getContentResolver());
 
         String value = dataProvider.getValue(account.name, getKeyFromFolder(preferenceName, folder));
         while (folder != null && value.isEmpty()) {

+ 1 - 1
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -883,7 +883,7 @@ public class FileDisplayActivity extends HookActivity
                 ft.addToBackStack(null);
 
                 SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    PreferenceManager.getSortOrderByFolder(this, getListOfFilesFragment().getCurrentFile()));
+                    preferences.getSortOrderByFolder(getListOfFilesFragment().getCurrentFile()));
                 mSortingOrderDialogFragment.show(ft, SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
 
                 break;

+ 5 - 3
src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java

@@ -39,6 +39,8 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 
+import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.client.preferences.PreferenceManager;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
@@ -64,8 +66,6 @@ import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
-import static com.nextcloud.client.preferences.PreferenceManager.getSortOrderByFolder;
-
 public class FolderPickerActivity extends FileActivity implements FileFragment.ContainerActivity,
     OnClickListener, OnEnforceableRefreshListener {
 
@@ -91,12 +91,14 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
     protected Button mCancelBtn;
     protected Button mChooseBtn;
     private String caption;
+    private AppPreferences preferences;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.d(TAG, "onCreate() start");
 
         super.onCreate(savedInstanceState);
+        preferences = PreferenceManager.fromContext(this);
 
         if (this instanceof FilePickerActivity) {
             setContentView(R.layout.files_picker);
@@ -331,7 +333,7 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
                 ft.addToBackStack(null);
 
                 SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    getSortOrderByFolder(this, getListOfFilesFragment().getCurrentFile()));
+                    preferences.getSortOrderByFolder(getListOfFilesFragment().getCurrentFile()));
                 mSortingOrderDialogFragment.show(ft, SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
 
                 break;

+ 4 - 4
src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -134,6 +134,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
     public static final String DESKTOP_FILE_SUFFIX = ".desktop";
     public static final int SINGLE_PARENT = 1;
 
+    private AppPreferences preferences;
     private AccountManager mAccountManager;
     private Stack<String> mParents = new Stack<>();
     private List<Parcelable> mStreamsToUpload;
@@ -159,7 +160,6 @@ public class ReceiveExternalFilesActivity extends FileActivity
     private TextView mEmptyListHeadline;
     private ImageView mEmptyListIcon;
     private ProgressBar mEmptyListProgress;
-    private AppPreferences preferences;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -255,7 +255,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
 
     @Override
     public void onSortingOrderChosen(FileSortOrder newSortOrder) {
-        PreferenceManager.setSortOrder(getBaseContext(), mFile, newSortOrder);
+        preferences.setSortOrder(mFile, newSortOrder);
         populateDirectoryList();
     }
 
@@ -876,7 +876,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
     }
 
     private List<OCFile> sortFileList(List<OCFile> files) {
-        FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(this, mFile);
+        FileSortOrder sortOrder = preferences.getSortOrderByFolder(mFile);
         return sortOrder.sortCloudFiles(files);
     }
 
@@ -1098,7 +1098,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 break;
             case R.id.action_sort:
                 SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    PreferenceManager.getSortOrderByFolder(this, mFile));
+                    preferences.getSortOrderByFolder(mFile));
                 mSortingOrderDialogFragment.show(getSupportFragmentManager(),
                         SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
                 break;

+ 3 - 2
src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -118,9 +118,10 @@ public class UploadFilesActivity extends FileActivity implements
     private static final String WAIT_DIALOG_TAG = "WAIT";
     private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE";
     public static final String REQUEST_CODE_KEY = "requestCode";
+
+    private AppPreferences preferences;
     private int requestCode;
     private LocalStoragePathPickerDialogFragment dialog;
-    private AppPreferences preferences;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -299,7 +300,7 @@ public class UploadFilesActivity extends FileActivity implements
                 ft.addToBackStack(null);
 
                 SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    PreferenceManager.getSortOrderByType(this, FileSortOrder.Type.uploadFilesView));
+                    preferences.getSortOrderByType(FileSortOrder.Type.uploadFilesView));
                 mSortingOrderDialogFragment.show(ft, SORT_ORDER_DIALOG_TAG);
 
                 break;

+ 6 - 3
src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -31,6 +31,7 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.nextcloud.client.preferences.PreferenceManager;
@@ -60,6 +61,7 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
     private static final String TAG = LocalFileListAdapter.class.getSimpleName();
 
     private static final int showFilenameColumnThreshold = 4;
+    private AppPreferences preferences;
     private Context mContext;
     private List<File> mFiles = new ArrayList<>();
     private List<File> mFilesAll = new ArrayList<>();
@@ -73,7 +75,8 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
     private static final int VIEWTYPE_IMAGE = 2;
 
     public LocalFileListAdapter(boolean localFolderPickerMode, File directory,
-                                LocalFileListFragmentInterface localFileListFragmentInterface, Context context) {
+                                LocalFileListFragmentInterface localFileListFragmentInterface, AppPreferences preferences, Context context) {
+        this.preferences = preferences;
         mContext = context;
         mLocalFolderPicker = localFolderPickerMode;
         swapDirectory(directory);
@@ -317,7 +320,7 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
             }
         }
 
-        FileSortOrder sortOrder = PreferenceManager.getSortOrderByType(mContext, FileSortOrder.Type.localFileListView);
+        FileSortOrder sortOrder = preferences.getSortOrderByType(FileSortOrder.Type.localFileListView);
         mFiles = sortOrder.sortLocalFiles(mFiles);
 
         // Fetch preferences for showing hidden files
@@ -333,7 +336,7 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
     }
 
     public void setSortOrder(FileSortOrder sortOrder) {
-        PreferenceManager.setSortOrder(mContext, FileSortOrder.Type.localFileListView, sortOrder);
+        preferences.setSortOrder(FileSortOrder.Type.localFileListView, sortOrder);
         mFiles = sortOrder.sortLocalFiles(mFiles);
         notifyDataSetChanged();
     }

+ 77 - 75
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -1,4 +1,4 @@
-    /*
+/*
  * Nextcloud Android client application
  *
  * @author Tobias Kaminsky
@@ -21,74 +21,74 @@
 
 package com.owncloud.android.ui.adapter;
 
-
-    import android.accounts.Account;
-    import android.content.ContentValues;
-    import android.content.Context;
-    import android.content.res.Resources;
-    import android.graphics.Bitmap;
-    import android.graphics.Color;
-    import android.graphics.drawable.Drawable;
-    import android.os.Handler;
-    import android.os.Looper;
-    import android.text.TextUtils;
-    import android.view.LayoutInflater;
-    import android.view.View;
-    import android.view.ViewGroup;
-    import android.widget.Filter;
-    import android.widget.ImageView;
-    import android.widget.LinearLayout;
-    import android.widget.TextView;
-
-    import com.bumptech.glide.Glide;
-    import com.bumptech.glide.request.target.BitmapImageViewTarget;
-    import com.owncloud.android.R;
-    import com.owncloud.android.authentication.AccountUtils;
-    import com.owncloud.android.datamodel.FileDataStorageManager;
-    import com.owncloud.android.datamodel.OCFile;
-    import com.owncloud.android.datamodel.ThumbnailsCacheManager;
-    import com.owncloud.android.datamodel.VirtualFolderType;
-    import com.owncloud.android.db.ProviderMeta;
-    import com.owncloud.android.files.services.FileDownloader;
-    import com.owncloud.android.files.services.FileUploader;
-    import com.owncloud.android.lib.common.operations.RemoteOperation;
-    import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-    import com.owncloud.android.lib.common.utils.Log_OC;
-    import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation;
-    import com.owncloud.android.lib.resources.files.model.RemoteFile;
-    import com.owncloud.android.lib.resources.shares.OCShare;
-    import com.owncloud.android.lib.resources.shares.ShareType;
-    import com.owncloud.android.operations.RefreshFolderOperation;
-    import com.owncloud.android.operations.RemoteOperationFailedException;
-    import com.owncloud.android.services.OperationsService;
-    import com.owncloud.android.ui.TextDrawable;
-    import com.owncloud.android.ui.activity.ComponentsGetter;
-    import com.owncloud.android.ui.fragment.ExtendedListFragment;
-    import com.owncloud.android.ui.interfaces.OCFileListFragmentInterface;
-    import com.owncloud.android.utils.DisplayUtils;
-    import com.owncloud.android.utils.FileSortOrder;
-    import com.owncloud.android.utils.FileStorageUtils;
-    import com.owncloud.android.utils.MimeTypeUtil;
-    import com.owncloud.android.utils.ThemeUtils;
-
-    import com.nextcloud.client.preferences.PreferenceManager;
-
-    import java.io.File;
-    import java.util.ArrayList;
-    import java.util.HashSet;
-    import java.util.List;
-    import java.util.Locale;
-    import java.util.Set;
-    import java.util.Vector;
-
-    import androidx.annotation.NonNull;
-    import androidx.core.graphics.drawable.RoundedBitmapDrawable;
-    import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
-    import androidx.recyclerview.widget.RecyclerView;
-    import butterknife.BindView;
-    import butterknife.ButterKnife;
-
-    /**
+import android.accounts.Account;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Looper;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Filter;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.target.BitmapImageViewTarget;
+import com.nextcloud.client.preferences.AppPreferences;
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.datamodel.VirtualFolderType;
+import com.owncloud.android.db.ProviderMeta;
+import com.owncloud.android.files.services.FileDownloader;
+import com.owncloud.android.files.services.FileUploader;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation;
+import com.owncloud.android.lib.resources.files.model.RemoteFile;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.operations.RefreshFolderOperation;
+import com.owncloud.android.operations.RemoteOperationFailedException;
+import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.ui.TextDrawable;
+import com.owncloud.android.ui.activity.ComponentsGetter;
+import com.owncloud.android.ui.fragment.ExtendedListFragment;
+import com.owncloud.android.ui.interfaces.OCFileListFragmentInterface;
+import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.FileSortOrder;
+import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.utils.MimeTypeUtil;
+import com.owncloud.android.utils.ThemeUtils;
+
+import com.nextcloud.client.preferences.PreferenceManager;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.Vector;
+
+import androidx.annotation.NonNull;
+import androidx.core.graphics.drawable.RoundedBitmapDrawable;
+import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
  * This Adapter populates a RecyclerView with all files and folders in a Nextcloud instance.
  */
 public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
@@ -99,6 +99,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     private final FileUploader.FileUploaderBinder uploaderBinder;
     private final OperationsService.OperationsServiceBinder operationsServiceBinder;
     private Context mContext;
+    private AppPreferences preferences;
     private List<OCFile> mFiles = new ArrayList<>();
     private List<OCFile> mFilesAll = new ArrayList<>();
     private boolean mHideItemOptions;
@@ -121,12 +122,13 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     private List<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks = new ArrayList<>();
     private boolean onlyOnDevice;
 
-    public OCFileListAdapter(Context context, ComponentsGetter transferServiceGetter,
+    public OCFileListAdapter(Context context, AppPreferences preferences, ComponentsGetter transferServiceGetter,
                              OCFileListFragmentInterface ocFileListFragmentInterface, boolean argHideItemOptions,
                              boolean gridView) {
 
         this.ocFileListFragmentInterface = ocFileListFragmentInterface;
         mContext = context;
+        this.preferences = preferences;
         mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);
         mHideItemOptions = argHideItemOptions;
         this.gridView = gridView;
@@ -188,7 +190,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             }
         }
 
-        FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(mContext, currentDirectory);
+        FileSortOrder sortOrder = preferences.getSortOrderByFolder(currentDirectory);
         mFiles = sortOrder.sortCloudFiles(mFiles);
 
         new Handler(Looper.getMainLooper()).post(this::notifyDataSetChanged);
@@ -623,7 +625,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             if (!limitToMimeType.isEmpty()) {
                 mFiles = filterByMimeType(mFiles, limitToMimeType);
             }
-            FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(mContext, directory);
+            FileSortOrder sortOrder = preferences.getSortOrderByFolder(directory);
             mFiles = sortOrder.sortCloudFiles(mFiles);
             mFilesAll.clear();
             mFilesAll.addAll(mFiles);
@@ -667,7 +669,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                 searchType != ExtendedListFragment.SearchType.PHOTOS_SEARCH_FILTER &&
                 searchType != ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH &&
                 searchType != ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH_FILTER) {
-            FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(mContext, folder);
+            FileSortOrder sortOrder = preferences.getSortOrderByFolder(folder);
             mFiles = sortOrder.sortCloudFiles(mFiles);
         } else {
             mFiles = FileStorageUtils.sortOcFolderDescDateModified(mFiles);
@@ -773,7 +775,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
 
 
     public void setSortOrder(OCFile folder, FileSortOrder sortOrder) {
-        PreferenceManager.setSortOrder(mContext, folder, sortOrder);
+        preferences.setSortOrder(folder, sortOrder);
         mFiles = sortOrder.sortCloudFiles(mFiles);
         notifyDataSetChanged();
     }
@@ -847,7 +849,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                 if (!PreferenceManager.showHiddenFilesEnabled(mContext)) {
                     mFiles = filterHiddenFiles(mFiles);
                 }
-                FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(mContext, currentDirectory);
+                FileSortOrder sortOrder = preferences.getSortOrderByFolder(currentDirectory);
                 mFiles = sortOrder.sortCloudFiles(mFiles);
             }
 

+ 11 - 8
src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java

@@ -31,6 +31,7 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -60,20 +61,22 @@ public class TrashbinListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
     private static final int TRASHBIN_FOOTER = 101;
     private static final String TAG = TrashbinListAdapter.class.getSimpleName();
 
-    private TrashbinActivityInterface trashbinActivityInterface;
+    private final TrashbinActivityInterface trashbinActivityInterface;
     private List<TrashbinFile> files;
-    private Context context;
-    private Account account;
-    private FileDataStorageManager storageManager;
+    private final Context context;
+    private final Account account;
+    private final FileDataStorageManager storageManager;
+    private final AppPreferences preferences;
 
-    private List<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks = new ArrayList<>();
+    private final List<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks = new ArrayList<>();
 
     public TrashbinListAdapter(TrashbinActivityInterface trashbinActivityInterface,
-                               FileDataStorageManager storageManager, Context context) {
+                               FileDataStorageManager storageManager, AppPreferences preferences, Context context) {
         this.files = new ArrayList<>();
         this.trashbinActivityInterface = trashbinActivityInterface;
         this.account = AccountUtils.getCurrentOwnCloudAccount(context);
         this.storageManager = storageManager;
+        this.preferences = preferences;
         this.context = context;
     }
 
@@ -86,7 +89,7 @@ public class TrashbinListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
             files.add((TrashbinFile) file);
         }
 
-        files = PreferenceManager.getSortOrderByType(context, FileSortOrder.Type.trashBinView,
+        files = preferences.getSortOrderByType(FileSortOrder.Type.trashBinView,
             FileSortOrder.sort_new_to_old).sortTrashbinFiles(files);
 
         notifyDataSetChanged();
@@ -282,7 +285,7 @@ public class TrashbinListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
     }
 
     public void setSortOrder(FileSortOrder sortOrder) {
-        PreferenceManager.setSortOrder(context, FileSortOrder.Type.trashBinView, sortOrder);
+        preferences.setSortOrder(FileSortOrder.Type.trashBinView, sortOrder);
         files = sortOrder.sortTrashbinFiles(files);
         notifyDataSetChanged();
     }

+ 12 - 1
src/main/java/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@ -21,6 +21,7 @@
 package com.owncloud.android.ui.fragment;
 
 import android.app.Activity;
+import android.content.Context;
 import android.os.Bundle;
 import android.os.Environment;
 import android.view.LayoutInflater;
@@ -29,6 +30,8 @@ import android.view.MenuInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.client.preferences.PreferenceManager;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.adapter.LocalFileListAdapter;
@@ -48,6 +51,8 @@ import androidx.recyclerview.widget.RecyclerView;
 public class LocalFileListFragment extends ExtendedListFragment implements LocalFileListFragmentInterface {
     private static final String TAG = LocalFileListFragment.class.getSimpleName();
 
+    private AppPreferences preferences;
+
     /** Reference to the Activity which this fragment is attached to. For callbacks */
     private LocalFileListFragment.ContainerActivity mContainerActivity;
 
@@ -57,6 +62,12 @@ public class LocalFileListFragment extends ExtendedListFragment implements Local
     /** Adapter to connect the data from the directory with the View object */
     private LocalFileListAdapter mAdapter;
 
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        preferences = PreferenceManager.fromContext(context);
+    }
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -111,7 +122,7 @@ public class LocalFileListFragment extends ExtendedListFragment implements Local
         super.onActivityCreated(savedInstanceState);
 
         mAdapter = new LocalFileListAdapter(mContainerActivity.isFolderPickerMode(),
-                mContainerActivity.getInitialDirectory(), this, getActivity());
+                mContainerActivity.getInitialDirectory(), this, preferences, getActivity());
         setRecyclerViewAdapter(mAdapter);
 
         listDirectory(mContainerActivity.getInitialDirectory());

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

@@ -49,6 +49,7 @@ import android.widget.RelativeLayout;
 
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.google.android.material.snackbar.Snackbar;
+import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
@@ -161,6 +162,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
     private static final int SINGLE_SELECTION = 1;
 
+    private AppPreferences preferences;
     private FileFragment.ContainerActivity mContainerActivity;
 
     private OCFile mFile;
@@ -236,6 +238,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
     public void onAttach(Context context) {
         super.onAttach(context);
         Log_OC.i(TAG, "onAttach");
+        preferences = PreferenceManager.fromContext(context);
         try {
             mContainerActivity = (FileFragment.ContainerActivity) context;
 
@@ -339,7 +342,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
         mLimitToMimeType = args != null ? args.getString(ARG_MIMETYPE, "") : "";
         boolean hideItemOptions = args != null && args.getBoolean(ARG_HIDE_ITEM_OPTIONS, false);
 
-        mAdapter = new OCFileListAdapter(getActivity(), mContainerActivity, this, hideItemOptions,
+        mAdapter = new OCFileListAdapter(getActivity(), preferences, mContainerActivity, this, hideItemOptions,
                 isGridViewPreferred(mFile));
         setRecyclerViewAdapter(mAdapter);
 

+ 12 - 2
src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java

@@ -32,6 +32,8 @@ import android.view.MenuItem;
 import android.view.View;
 
 import com.google.android.material.snackbar.Snackbar;
+import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.client.preferences.PreferenceManager;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
@@ -86,10 +88,12 @@ public class PreviewImageActivity extends FileActivity implements
     private boolean mRequestWaitingForBinder;
     private DownloadFinishReceiver mDownloadFinishReceiver;
     private View mFullScreenAnchorView;
+    private AppPreferences preferences;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        preferences = PreferenceManager.fromContext(this);
 
         final ActionBar actionBar = getSupportActionBar();
 
@@ -144,8 +148,14 @@ public class PreviewImageActivity extends FileActivity implements
                 parentFolder = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
             }
 
-            mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(),
-                    parentFolder, getAccount(), getStorageManager(), MainApp.isOnlyOnDevice(), this);
+            mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(
+                getSupportFragmentManager(),
+                parentFolder,
+                getAccount(),
+                getStorageManager(),
+                MainApp.isOnlyOnDevice(),
+                preferences
+            );
         }
 
         mViewPager = findViewById(R.id.fragmentPager);

+ 3 - 4
src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java

@@ -20,15 +20,14 @@
 package com.owncloud.android.ui.preview;
 
 import android.accounts.Account;
-import android.content.Context;
 import android.graphics.Matrix;
 import android.util.SparseArray;
 import android.view.ViewGroup;
 
+import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.VirtualFolderType;
-import com.nextcloud.client.preferences.PreferenceManager;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.utils.FileSortOrder;
 import com.owncloud.android.utils.FileStorageUtils;
@@ -67,7 +66,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
      */
     public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder,
                                     Account account, FileDataStorageManager storageManager,
-                                    boolean onlyOnDevice, Context context) {
+                                    boolean onlyOnDevice, AppPreferences preferences) {
         super(fragmentManager);
 
         if (fragmentManager == null) {
@@ -84,7 +83,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
         mStorageManager = storageManager;
         mImageFiles = mStorageManager.getFolderImages(parentFolder, onlyOnDevice);
 
-        FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(context, parentFolder);
+        FileSortOrder sortOrder = preferences.getSortOrderByFolder(parentFolder);
         mImageFiles = sortOrder.sortCloudFiles(mImageFiles);
 
         mObsoleteFragments = new HashSet<>();

+ 9 - 3
src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.java

@@ -30,6 +30,7 @@ import android.widget.PopupMenu;
 import android.widget.TextView;
 
 import com.google.android.material.snackbar.Snackbar;
+import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.R;
 import com.nextcloud.client.preferences.PreferenceManager;
 import com.owncloud.android.lib.resources.trashbin.model.TrashbinFile;
@@ -81,6 +82,7 @@ public class TrashbinActivity extends FileActivity implements TrashbinActivityIn
     @BindString(R.string.trashbin_empty_message)
     public String noResultsMessage;
 
+    private AppPreferences preferences;
     private Unbinder unbinder;
     private TrashbinListAdapter trashbinListAdapter;
     private TrashbinPresenter trashbinPresenter;
@@ -91,6 +93,7 @@ public class TrashbinActivity extends FileActivity implements TrashbinActivityIn
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        preferences = PreferenceManager.fromContext(this);
         trashbinPresenter = new TrashbinPresenter(new RemoteTrashbinRepository(this), this);
 
         setContentView(R.layout.trashbin_activity);
@@ -124,7 +127,11 @@ public class TrashbinActivity extends FileActivity implements TrashbinActivityIn
         emptyContentMessage.setText(noResultsMessage);
         emptyContentMessage.setVisibility(View.VISIBLE);
 
-        trashbinListAdapter = new TrashbinListAdapter(this, getStorageManager(), this);
+        trashbinListAdapter = new TrashbinListAdapter(
+            this,
+            getStorageManager(),
+            preferences,
+            this);
         recyclerView.setAdapter(trashbinListAdapter);
         recyclerView.setHasFixedSize(true);
         recyclerView.setHasFooter(true);
@@ -167,8 +174,7 @@ public class TrashbinActivity extends FileActivity implements TrashbinActivityIn
                 ft.addToBackStack(null);
 
                 SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    PreferenceManager.getSortOrderByType(this, FileSortOrder.Type.trashBinView,
-                        FileSortOrder.sort_new_to_old));
+                    preferences.getSortOrderByType(FileSortOrder.Type.trashBinView, FileSortOrder.sort_new_to_old));
                 mSortingOrderDialogFragment.show(ft, SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
 
                 break;

+ 8 - 3
src/test/java/com/nextcloud/client/preferences/TestPreferenceManager.java

@@ -1,16 +1,22 @@
 package com.nextcloud.client.preferences;
 
+import android.content.Context;
 import android.content.SharedPreferences;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.InOrder;
 import org.mockito.Mock;
 import static org.mockito.Mockito.*;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
 
+@RunWith(MockitoJUnitRunner.class)
 public class TestPreferenceManager {
 
+    @Mock
+    private Context testContext;
+
     @Mock
     private SharedPreferences sharedPreferences;
 
@@ -21,10 +27,9 @@ public class TestPreferenceManager {
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
         when(editor.remove(anyString())).thenReturn(editor);
         when(sharedPreferences.edit()).thenReturn(editor);
-        appPreferences = new PreferenceManager(sharedPreferences);
+        appPreferences = new PreferenceManager(testContext, sharedPreferences);
     }
 
     @Test