瀏覽代碼

decision grid vs. list view remembered per folder, inherited by parents

tobiasKaminsky 9 年之前
父節點
當前提交
db46b19824

+ 51 - 4
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -150,8 +150,9 @@ public class FileDisplayActivity extends HookActivity
     private static String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED";
 
     private OCFile mWaitingToSend;
+    private Menu mOptionsMenu;
+
 
-    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.v(TAG, "onCreate() start");
@@ -319,6 +320,12 @@ public class FileDisplayActivity extends HookActivity
                     startTextPreview(file);
             }
 
+            if (DisplayUtils.isGridView(getFile(), getStorageManager())){
+                switchToGridView();
+            } else {
+                switchToListView();
+            }
+
         } else {
             Log_OC.wtf(TAG, "initFragments() called with invalid NULLs!");
             if (getAccount() == null) {
@@ -495,9 +502,16 @@ public class FileDisplayActivity extends HookActivity
     public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.main_menu, menu);
+        mOptionsMenu = menu;
+
+        MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
+
+        if (DisplayUtils.isGridView(getFile(), getStorageManager())){
+            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+        } else {
+            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
+        }
 
-        // TODO Tobi change according to pref
-        menu.getItem(2).setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
         return true;
     }
     
@@ -565,6 +579,18 @@ public class FileDisplayActivity extends HookActivity
                 builder.create().show();
                 break;
             }
+            case R.id.action_switch_view:{
+                if (isGridView()){
+                    item.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+                    DisplayUtils.setViewMode(getFile(), false);
+                    switchToListView();
+                } else {
+                    item.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
+                    DisplayUtils.setViewMode(getFile(), true);
+                    switchToGridView();
+                }
+                return true;
+            }
         default:
             retval = super.onOptionsItemSelected(item);
         }
@@ -802,6 +828,13 @@ public class FileDisplayActivity extends HookActivity
         } else {
             super.onBackPressed();
         }
+
+        MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
+        if (DisplayUtils.isGridView(getFile(), getStorageManager())){
+            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+        } else {
+            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
+        }
     }
 
     @Override
@@ -1215,8 +1248,15 @@ public class FileDisplayActivity extends HookActivity
         // Sync Folder
         startSyncFolderOperation(directory, false);
 
-        // switch list vs. grid view
+        MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
 
+        if (DisplayUtils.isGridView(directory, getStorageManager())){
+            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+            switchToGridView();
+        } else {
+            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
+            switchToListView();
+        }
     }
 
     /**
@@ -1814,6 +1854,13 @@ public class FileDisplayActivity extends HookActivity
     private void sortByName(boolean ascending) {
         getListOfFilesFragment().sortByName(ascending);
     }
+    private boolean isGridView(){ return getListOfFilesFragment().isGridView(); }
+    private void switchToGridView() {
+        getListOfFilesFragment().switchToGridView();
+    }
+    private void switchToListView() {
+        getListOfFilesFragment().switchToListView();
+    }
 
    public void allFilesOption() {
        browseToRoot();

+ 4 - 0
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -458,4 +458,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
     public void setGridMode(boolean gridMode) {
         mGridMode = gridMode;
     }
+
+    public boolean isGridMode() {
+        return mGridMode;
+    }
 }

+ 10 - 3
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -97,7 +97,7 @@ public class ExtendedListFragment extends Fragment
     }
 
 
-    protected void switchToGridView() {
+    public void switchToGridView() {
         if ((mCurrentListView == mListView)) {
 
             mListView.setAdapter(null);
@@ -112,8 +112,8 @@ public class ExtendedListFragment extends Fragment
             mCurrentListView = mGridView;
         }
     }
-    
-    protected void switchToListView() {
+
+    public void switchToListView() {
         if (mCurrentListView == mGridView) {
             mGridView.setAdapter(null);
             mRefreshGridLayout.setVisibility(View.GONE);
@@ -127,6 +127,13 @@ public class ExtendedListFragment extends Fragment
             mCurrentListView = mListView;
         }
     }
+
+    public boolean isGridView(){
+        if (mAdapter instanceof FileListListAdapter) {
+            return ((FileListListAdapter) mAdapter).isGridMode();
+        }
+        return false;
+    }
     
     
     @Override

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

@@ -54,6 +54,7 @@ import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.ui.preview.PreviewMediaFragment;
 import com.owncloud.android.ui.preview.PreviewTextFragment;
+import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
 
 import java.io.File;
@@ -522,7 +523,7 @@ public class OCFileListFragment extends ExtendedListFragment
             OwnCloudVersion version = AccountUtils.getServerVersion(
                     ((FileActivity)mContainerActivity).getAccount());
             if (version != null && version.supportsRemoteThumbnails() &&
-                imagesCount > 0 && imagesCount == filesCount) {
+                    DisplayUtils.isGridView(mFile, mContainerActivity.getStorageManager())) {
                 switchToGridView();
                 registerLongClickListener();
             } else {

+ 75 - 0
src/com/owncloud/android/utils/DisplayUtils.java

@@ -22,9 +22,21 @@
 
 package com.owncloud.android.utils;
 
+import java.io.File;
+import java.net.IDN;
+import java.text.DateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.Vector;
+
 import android.annotation.TargetApi;
 import android.app.Activity;
 import android.content.Context;
+import android.content.SharedPreferences;
 import android.graphics.Point;
 import android.graphics.PorterDuff;
 import android.os.Build;
@@ -35,6 +47,7 @@ import android.widget.SeekBar;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 
 import java.math.BigDecimal;
@@ -277,4 +290,66 @@ public class DisplayUtils {
             }
         }
     }
+
+    /**
+     * Determines if user set folder to grid or list view. If folder is not set itself,
+     * it finds a parent that is set (at least root is set).
+     * @param file
+     * @param storageManager
+     * @return
+     */
+    public static boolean isGridView(OCFile file, FileDataStorageManager storageManager){
+        if (file != null) {
+            OCFile fileToTest = file;
+            OCFile parentDir = null;
+            String parentPath = null;
+
+            SharedPreferences setting = MainApp.getAppContext().getSharedPreferences(
+                    "viewMode", Context.MODE_PRIVATE);
+
+            if (setting.contains(fileToTest.getRemoteId())) {
+                return setting.getBoolean(fileToTest.getRemoteId(), false);
+            } else {
+                do {
+                    if (fileToTest.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) {
+                        parentPath = new File(fileToTest.getRemotePath()).getParent();
+                        parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :
+                                parentPath + OCFile.PATH_SEPARATOR;
+                        parentDir = storageManager.getFileByPath(parentPath);
+                    } else {
+                        parentDir = storageManager.getFileByPath(OCFile.ROOT_PATH);
+                    }
+
+                    while (parentDir == null) {
+                        parentPath = new File(parentPath).getParent();
+                        parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath :
+                                parentPath + OCFile.PATH_SEPARATOR;
+                        parentDir = storageManager.getFileByPath(parentPath);
+                    }
+                    fileToTest = parentDir;
+                } while (endWhile(parentDir, setting));
+                return setting.getBoolean(fileToTest.getRemoteId(), false);
+            }
+        } else {
+            return false;
+        }
+    }
+
+    private static boolean endWhile(OCFile parentDir, SharedPreferences setting) {
+        if (parentDir.getRemotePath().compareToIgnoreCase(OCFile.ROOT_PATH) == 0) {
+            return false;
+        } else {
+            return !setting.contains(parentDir.getRemoteId());
+        }
+    }
+
+    public static void setViewMode(OCFile file, boolean setGrid){
+        SharedPreferences setting = MainApp.getAppContext().getSharedPreferences(
+                "viewMode", Context.MODE_PRIVATE);
+
+        SharedPreferences.Editor editor = setting.edit();
+        editor.putBoolean(file.getRemoteId(), setGrid);
+        editor.commit();
+    }
+
 }