Browse Source

refactoring folder preferences

- based getFolderPreference and setFolderPreference on ArbitraryDataProvider
- converted Boolean-based "is grid preferred" to String-based folder layout preference

Signed-off-by: Sven R. Kunze <srkunze@mail.de>
Sven R. Kunze 7 năm trước cách đây
mục cha
commit
1a86ba7eac

+ 29 - 28
src/main/java/com/owncloud/android/db/PreferenceManager.java

@@ -19,14 +19,19 @@
 
 
 package com.owncloud.android.db;
 package com.owncloud.android.db;
 
 
+import android.accounts.Account;
 import android.content.Context;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences;
 
 
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.utils.FileSortOrder;
 import com.owncloud.android.utils.FileSortOrder;
 
 
+import static com.owncloud.android.ui.fragment.OCFileListFragment.FOLDER_LAYOUT_LIST;
+
 /**
 /**
  * Helper to simplify reading of Preferences all around the app
  * Helper to simplify reading of Preferences all around the app
  */
  */
@@ -36,7 +41,6 @@ public abstract class PreferenceManager {
      * Value handled by the app without direct access in the UI.
      * Value handled by the app without direct access in the UI.
      */
      */
     private static final String AUTO_PREF__LAST_UPLOAD_PATH = "last_upload_path";
     private static final String AUTO_PREF__LAST_UPLOAD_PATH = "last_upload_path";
-    private static final String AUTO_PREF__SORT_ORDER_NAME = "sort_order_name";
     private static final String AUTO_PREF__UPLOAD_FILE_EXTENSION_MAP_URL = "prefs_upload_file_extension_map_url";
     private static final String AUTO_PREF__UPLOAD_FILE_EXTENSION_MAP_URL = "prefs_upload_file_extension_map_url";
     private static final String AUTO_PREF__UPLOAD_FILE_EXTENSION_URL = "prefs_upload_file_extension_url";
     private static final String AUTO_PREF__UPLOAD_FILE_EXTENSION_URL = "prefs_upload_file_extension_url";
     private static final String AUTO_PREF__UPLOADER_BEHAVIOR = "prefs_uploader_behaviour";
     private static final String AUTO_PREF__UPLOADER_BEHAVIOR = "prefs_uploader_behaviour";
@@ -52,7 +56,8 @@ public abstract class PreferenceManager {
     private static final String PREF__PUSH_TOKEN = "pushToken";
     private static final String PREF__PUSH_TOKEN = "pushToken";
     private static final String PREF__AUTO_UPLOAD_SPLIT_OUT = "autoUploadEntriesSplitOut";
     private static final String PREF__AUTO_UPLOAD_SPLIT_OUT = "autoUploadEntriesSplitOut";
     private static final String PREF__AUTO_UPLOAD_INIT = "autoUploadInit";
     private static final String PREF__AUTO_UPLOAD_INIT = "autoUploadInit";
-    private static final String GRID_IS_PREFERED_PREFERENCE = "gridIsPrefered";
+    private static final String PREF__FOLDER_SORT_ORDER = "folder_sort_order";
+    private static final String PREF__FOLDER_LAYOUT = "folder_layout";
     private static final String KEY_FAB_EVER_CLICKED = "FAB_EVER_CLICKED";
     private static final String KEY_FAB_EVER_CLICKED = "FAB_EVER_CLICKED";
 
 
     public static void setPushToken(Context context, String pushToken) {
     public static void setPushToken(Context context, String pushToken) {
@@ -177,10 +182,10 @@ public abstract class PreferenceManager {
      *
      *
      * @param context Caller {@link Context}, used to access to preferences manager.
      * @param context Caller {@link Context}, used to access to preferences manager.
      * @param folder Folder
      * @param folder Folder
-     * @return preference value, default is false
+     * @return preference value, default is {@link com.owncloud.android.ui.fragment.OCFileListFragment#FOLDER_LAYOUT_LIST}
      */
      */
-    public static boolean getIsGridViewPreferred(Context context, OCFile folder) {
-        return (boolean)getFolderPreference(context, GRID_IS_PREFERED_PREFERENCE, folder, false);
+    public static String getFolderLayout(Context context, OCFile folder) {
+        return getFolderPreference(context, PREF__FOLDER_LAYOUT, folder, FOLDER_LAYOUT_LIST);
     }
     }
 
 
     /**
     /**
@@ -188,10 +193,10 @@ public abstract class PreferenceManager {
      *
      *
      * @param context Caller {@link Context}, used to access to shared preferences manager.
      * @param context Caller {@link Context}, used to access to shared preferences manager.
      * @param folder Folder
      * @param folder Folder
-     * @param isPreferred preference value
+     * @param layout_name preference value
      */
      */
-    public static void setIsGridViewPreferred(Context context, OCFile folder, boolean isPreferred) {
-        setFolderPreference(context, GRID_IS_PREFERED_PREFERENCE, folder, isPreferred);
+    public static void setFolderLayout(Context context, OCFile folder, String layout_name) {
+        setFolderPreference(context, PREF__FOLDER_LAYOUT, folder, layout_name);
     }
     }
 
 
     /**
     /**
@@ -201,7 +206,7 @@ public abstract class PreferenceManager {
      * @return sort order     the sort order, default is {@link FileSortOrder#sort_a_to_z} (sort by name)
      * @return sort order     the sort order, default is {@link FileSortOrder#sort_a_to_z} (sort by name)
      */
      */
     public static FileSortOrder getSortOrder(Context context, OCFile folder) {
     public static FileSortOrder getSortOrder(Context context, OCFile folder) {
-        return FileSortOrder.sortOrders.get(getFolderPreference(context, AUTO_PREF__SORT_ORDER_NAME, folder, FileSortOrder.sort_a_to_z.mName));
+        return FileSortOrder.sortOrders.get(getFolderPreference(context, PREF__FOLDER_SORT_ORDER, folder, FileSortOrder.sort_a_to_z.mName));
     }
     }
 
 
     /**
     /**
@@ -211,7 +216,7 @@ public abstract class PreferenceManager {
      * @param sortOrder   the sort order
      * @param sortOrder   the sort order
      */
      */
     public static void setSortOrder(Context context, OCFile folder, FileSortOrder sortOrder) {
     public static void setSortOrder(Context context, OCFile folder, FileSortOrder sortOrder) {
-        setFolderPreference(context, AUTO_PREF__SORT_ORDER_NAME, folder, sortOrder.mName);
+        setFolderPreference(context, PREF__FOLDER_SORT_ORDER, folder, sortOrder.mName);
     }
     }
 
 
     /**
     /**
@@ -224,14 +229,16 @@ public abstract class PreferenceManager {
      * @param defaultValue Fallback value in case no ancestor is set.
      * @param defaultValue Fallback value in case no ancestor is set.
      * @return Preference value
      * @return Preference value
      */
      */
-    public static Object getFolderPreference(Context context, String preferenceName, OCFile folder, Object defaultValue) {
+    public static String getFolderPreference(Context context, String preferenceName, OCFile folder, String defaultValue) {
+        Account account = AccountUtils.getCurrentOwnCloudAccount(context);
+        ArbitraryDataProvider dataProvider = new ArbitraryDataProvider(context.getContentResolver());
         FileDataStorageManager storageManager = ((ComponentsGetter)context).getStorageManager();
         FileDataStorageManager storageManager = ((ComponentsGetter)context).getStorageManager();
-        SharedPreferences setting = context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE);
-        while (folder != null && !setting.contains(String.valueOf(folder.getFileId()))) {
+        String value = dataProvider.getValue(account.name, getKeyFromFolder(preferenceName, folder));
+        while (folder != null && value.isEmpty()) {
             folder = storageManager.getFileById(folder.getParentId());
             folder = storageManager.getFileById(folder.getParentId());
+            value = dataProvider.getValue(account.name, getKeyFromFolder(preferenceName, folder));
         }
         }
-        final Object value = setting.getAll().get(getKeyFromFolder(folder));
-        return value != null ? value : defaultValue;
+        return value.isEmpty() ? defaultValue : value;
     }
     }
 
 
     /**
     /**
@@ -242,21 +249,15 @@ public abstract class PreferenceManager {
      * @param folder Folder.
      * @param folder Folder.
      * @param value Preference value to set.
      * @param value Preference value to set.
      */
      */
-    public static void setFolderPreference(Context context, String preferenceName, OCFile folder, Object value) {
-        SharedPreferences setting = context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE);
-        SharedPreferences.Editor editor = setting.edit();
-        if (value instanceof Boolean) {
-            editor.putBoolean(String.valueOf(getKeyFromFolder(folder)), (Boolean)value);
-        } else if (value instanceof String) {
-            editor.putString(String.valueOf(getKeyFromFolder(folder)), (String)value);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        editor.apply();
+    public static void setFolderPreference(Context context, String preferenceName, OCFile folder, String value) {
+        Account account = AccountUtils.getCurrentOwnCloudAccount(context);
+        ArbitraryDataProvider dataProvider = new ArbitraryDataProvider(context.getContentResolver());
+        dataProvider.storeOrUpdateKeyValue(account.name, getKeyFromFolder(preferenceName, folder), value);
     }
     }
 
 
-    private static String getKeyFromFolder(OCFile folder) {
-        return String.valueOf(folder != null ? folder.getFileId() : FileDataStorageManager.ROOT_PARENT_ID);
+    private static String getKeyFromFolder(String preferenceName, OCFile folder) {
+        final String folderIdString = String.valueOf(folder != null ? folder.getFileId() : FileDataStorageManager.ROOT_PARENT_ID);
+        return preferenceName + "_" + folderIdString;
     }
     }
 
 
     public static boolean getAutoUploadInit(Context context) {
     public static boolean getAutoUploadInit(Context context) {

+ 6 - 3
src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -129,6 +129,9 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
     public static final String DOWNLOAD_BEHAVIOUR = "DOWNLOAD_BEHAVIOUR";
     public static final String DOWNLOAD_BEHAVIOUR = "DOWNLOAD_BEHAVIOUR";
     public static final String DOWNLOAD_SEND = "DOWNLOAD_SEND";
     public static final String DOWNLOAD_SEND = "DOWNLOAD_SEND";
 
 
+    public static final String FOLDER_LAYOUT_LIST = "LIST";
+    public static final String FOLDER_LAYOUT_GRID = "GRID";
+
     public static final String SEARCH_EVENT = "SEARCH_EVENT";
     public static final String SEARCH_EVENT = "SEARCH_EVENT";
 
 
     private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
     private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
@@ -1204,16 +1207,16 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
      * @return 'true' is folder should be shown in grid mode, 'false' if list mode is preferred.
      * @return 'true' is folder should be shown in grid mode, 'false' if list mode is preferred.
      */
      */
     public boolean isGridViewPreferred(OCFile folder) {
     public boolean isGridViewPreferred(OCFile folder) {
-        return PreferenceManager.getIsGridViewPreferred(getActivity(), folder);
+        return PreferenceManager.getFolderLayout(getActivity(), folder).equals(FOLDER_LAYOUT_GRID);
     }
     }
 
 
     public void setListAsPreferred() {
     public void setListAsPreferred() {
-        PreferenceManager.setIsGridViewPreferred(getActivity(), mFile, false);
+        PreferenceManager.setFolderLayout(getActivity(), mFile, FOLDER_LAYOUT_LIST);
         switchToListView();
         switchToListView();
     }
     }
 
 
     public void setGridAsPreferred() {
     public void setGridAsPreferred() {
-        PreferenceManager.setIsGridViewPreferred(getActivity(), mFile, true);
+        PreferenceManager.setFolderLayout(getActivity(), mFile, FOLDER_LAYOUT_GRID);
         switchToGridView();
         switchToGridView();
     }
     }