Эх сурвалжийг харах

Merge branch 'master' into reliable_uploads_actions_uploads_view

masensio 9 жил өмнө
parent
commit
2181239c6d

BIN
res/drawable-hdpi/ic_view_list.png


BIN
res/drawable-hdpi/ic_view_module.png


BIN
res/drawable-mdpi/ic_view_list.png


BIN
res/drawable-mdpi/ic_view_module.png


BIN
res/drawable-xhdpi/ic_view_list.png


BIN
res/drawable-xhdpi/ic_view_module.png


+ 2 - 1
res/menu/file_actions_menu.xml

@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?><!--
+<?xml version="1.0" encoding="utf-8"?>
+<!--
   ownCloud Android client application
 
   Copyright (C) 2012  Bartek Przybylski

+ 6 - 0
res/menu/main_menu.xml

@@ -34,6 +34,12 @@
         app:showAsAction="always"
         android:title="@string/actionbar_mkdir"
         android:contentDescription="@string/actionbar_mkdir"/>
+    <item
+        android:id="@+id/action_switch_view"
+        android:icon="@drawable/ic_view_module"
+        android:orderInCategory="2"
+        app:showAsAction="never"
+        android:title="@string/action_switch_grid_view" />
     <item
         android:id="@+id/action_sync_account"
         android:icon="@drawable/ic_action_refresh"

+ 1 - 0
res/values-he/strings.xml

@@ -15,6 +15,7 @@
     	<item>Biggest - Smallest</item>-->
   <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
   <!--<string name="drawer_item_accounts">Accounts</string>-->
+  <string name="drawer_item_all_files">כל הקבצים</string>
   <!--TODO re-enable when "On Device" is available
     <string name="drawer_item_on_device">On device</string>-->
   <string name="drawer_open">פתיחה</string>

+ 6 - 0
res/values-ko/strings.xml

@@ -336,6 +336,12 @@
   <string name="file_list__footer__files">파일 %1$d개</string>
   <string name="file_list__footer__files_and_folder">파일 %1$d개, 폴더 1개</string>
   <string name="file_list__footer__files_and_folders">파일 %1$d개, 폴더 %2$d개</string>
+  <string name="prefs_instant_behaviour_dialogTitle">원래 파일은...</string>
+  <string name="prefs_instant_behaviour_title">원래 파일은...</string>
+  <string name="upload_copy_files">파일 복사</string>
+  <string name="upload_move_files">파일 이동</string>
+  <string name="pref_behaviour_entries_keep_file">원래 폴더에 유지</string>
+  <string name="pref_behaviour_entries_move">앱 폴더로 이동되었습니다.</string>
   <string name="share_dialog_title">공유</string>
   <string name="share_with_user_section_title">유저와 그룹에 공유하기</string>
   <string name="share_no_users">No data shared with users yet</string>

+ 3 - 0
res/values-mk/strings.xml

@@ -21,8 +21,10 @@
     	<item>Biggest - Smallest</item>-->
   <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
   <!--<string name="drawer_item_accounts">Accounts</string>-->
+  <string name="drawer_item_all_files">Сите датотеки</string>
   <!--TODO re-enable when "On Device" is available
     <string name="drawer_item_on_device">On device</string>-->
+  <string name="drawer_item_settings">Подесувања</string>
   <string name="drawer_open">Отвори</string>
   <string name="prefs_category_general">Општо</string>
   <string name="prefs_category_more">Повеќе</string>
@@ -184,6 +186,7 @@
  </string>
   <string name="auth_can_not_auth_against_server">Не можам да се авторизирам на овој сервер </string>
   <string name="auth_account_does_not_exist">Сметката сеуште не постои на овој уред</string>
+  <string name="favorite">Омилен</string>
   <string name="common_rename">Преименувај</string>
   <string name="common_remove">Отстрани</string>
   <string name="confirmation_remove_alert">Дали навистина сакаш да ја отстраниш %1$s?</string>

+ 20 - 0
res/values-nb-rNO/strings.xml

@@ -243,6 +243,9 @@
   <string name="ssl_validator_label_validity_to">Til:</string>
   <string name="ssl_validator_label_signature">Signatur:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritme:</string>
+  <string name="digest_algorithm_not_available">Digest-algoritmen er ikke tilgjengelig på din telefon.</string>
+  <string name="ssl_validator_label_certificate_fingerprint">Fingeravtrykk:</string>
+  <string name="certificate_load_problem">Det er et problem med lasting av sertifikatet.</string>
   <string name="ssl_validator_null_cert">Sertifikatet kunne ikke vises.</string>
   <string name="ssl_validator_no_info_about_error">- Ingen informasjon om feilen</string>
   <string name="placeholder_sentence">Dette er en plassholder</string>
@@ -269,6 +272,8 @@
   <string name="share_link_file_error">Det skjedde en feil under deling av denne filen eller mappen</string>
   <string name="unshare_link_file_no_exist">Kan ikke fjerne deling. Sjekk om filen eksisterer.</string>
   <string name="unshare_link_file_error">En feil oppstod ved avslutting av delingen av denne filen eller mappen</string>
+  <string name="update_link_file_no_exist">Kan ikke oppdatere. Sjekk om filen eksisterer</string>
+  <string name="update_link_file_error">En feil oppstod under oppdatering av den delte lenken</string>
   <string name="share_link_password_title">Skriv inn ett passord</string>
   <string name="share_link_empty_password">Du må skrive inn ett passord</string>
   <string name="activity_chooser_send_file_title">Send</string>
@@ -285,6 +290,7 @@
   <string name="forbidden_permissions_delete">å slette denne filen</string>
   <string name="share_link_forbidden_permissions">å dele denne filen</string>
   <string name="unshare_link_forbidden_permissions">å avslutte deling av denne filen</string>
+  <string name="update_link_forbidden_permissions">å oppdatere denne delte lenken</string>
   <string name="forbidden_permissions_create">å opprette filen</string>
   <string name="uploader_upload_forbidden_permissions">å laste opp i denne mappen</string>
   <string name="downloader_download_file_not_found">Filen finnes ikke på serveren lenger</string>
@@ -314,6 +320,7 @@
   <string name="prefs_category_instant_uploading">Umiddelbare opplastinger</string>
   <string name="prefs_category_security">Sikkerhet</string>
   <string name="prefs_instant_video_upload_path_title">Sti til video-opplasting</string>
+  <string name="sync_folder_failed_content">Synkronisering av %1$s mappe kunne ikke fullføres</string>
   <string name="shared_subject_header">delte</string>
   <string name="with_you_subject_header">med deg</string>
   <string name="subject_user_shared_with_you">%1$s delte \"%2$s\" med deg</string>
@@ -330,11 +337,24 @@
   <string name="file_list__footer__files">%1$d filer</string>
   <string name="file_list__footer__files_and_folder">%1$d filer, 1 mappe</string>
   <string name="file_list__footer__files_and_folders">%1$d filer, %2$d mapper</string>
+  <string name="prefs_instant_behaviour_dialogTitle">Opprinnelig fil vil bli...</string>
+  <string name="prefs_instant_behaviour_title">Opprinnelig fil vil bli...</string>
+  <string name="upload_copy_files">Kopier fil</string>
+  <string name="upload_move_files">Flytt fil</string>
+  <string name="pref_behaviour_entries_keep_file">beholdt i opprinnelig mappe</string>
+  <string name="pref_behaviour_entries_move">flyttet til app-mappe</string>
   <string name="share_dialog_title">Deling</string>
+  <string name="share_with_user_section_title">Del med brukere og grupper</string>
   <string name="share_no_users">Ingen data delt med brukere ennå</string>
   <string name="share_add_user_or_group">Legg til bruker eller gruppe</string>
   <string name="share_via_link_section_title">Del lenke</string>
   <string name="share_via_link_expiration_date_label">Sett utløpsdato</string>
   <string name="share_via_link_password_label">Passordbeskyttet</string>
+  <string name="share_via_link_password_title">Sikret</string>
+  <string name="share_get_public_link_button">Hent lenke</string>
   <string name="share_search">Søk</string>
+  <string name="search_users_and_groups_hint">Søk etter brukere og grupper</string>
+  <string name="share_group_clarification">%1$s (gruppe)</string>
+  <string name="share_sharee_unavailable">Beklager, server-versjonen din tillater ikke klienter å dele med brukere.
+        \nKontakt systemadministratoren</string>
 </resources>

+ 7 - 0
res/values-pt-rPT/strings.xml

@@ -329,11 +329,18 @@
   <string name="file_list__footer__files">%1$d ficheiros</string>
   <string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 pasta</string>
   <string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d pastas</string>
+  <string name="prefs_instant_behaviour_dialogTitle">O ficheiro original será...</string>
+  <string name="prefs_instant_behaviour_title">O ficheiro original será...</string>
+  <string name="upload_copy_files">Copiar ficheiro</string>
+  <string name="upload_move_files">Mover ficheiro</string>
   <string name="share_dialog_title">Partilha</string>
+  <string name="share_with_user_section_title">Partilhar com utilizadores e grupos</string>
   <string name="share_no_users">Ainda não foram partilhados os dados com os utilizadores</string>
   <string name="share_add_user_or_group">Adicionar Utilziador ou Grupo</string>
   <string name="share_via_link_section_title">Compartilhar hiperligação</string>
   <string name="share_via_link_expiration_date_label">Definir a data de expiração</string>
   <string name="share_via_link_password_label">Proteger com Palavra-passe</string>
+  <string name="share_get_public_link_button">Obter ligação</string>
   <string name="share_search">Procurar</string>
+  <string name="search_users_and_groups_hint">Pesquisar utilizadores e grupos</string>
 </resources>

+ 6 - 0
res/values-ru/strings.xml

@@ -338,6 +338,12 @@
   <string name="file_list__footer__files">%1$d файлов</string>
   <string name="file_list__footer__files_and_folder">%1$d файлов, 1 каталог</string>
   <string name="file_list__footer__files_and_folders">%1$d файлов, %2$d каталогов</string>
+  <string name="prefs_instant_behaviour_dialogTitle">Исходный файл будет ...</string>
+  <string name="prefs_instant_behaviour_title">Исходный файл будет ...</string>
+  <string name="upload_copy_files">Копировать файл</string>
+  <string name="upload_move_files">Переместить файл</string>
+  <string name="pref_behaviour_entries_keep_file">остался в исходной папке</string>
+  <string name="pref_behaviour_entries_move">перемещен в папку приложения</string>
   <string name="share_dialog_title">Общий доступ</string>
   <string name="share_with_user_section_title">Поделиться с пользователями и группами</string>
   <string name="share_no_users">Нет данных используемых совместно с другими пользователями</string>

+ 4 - 4
res/values-sq/strings.xml

@@ -159,13 +159,13 @@
   <string name="media_play_pause_description">Butoni Luaje ose Pushoje</string>
   <string name="media_forward_description">Butoni Përpara</string>
   <string name="auth_getting_authorization">Po merret autorizim…</string>
-  <string name="auth_trying_to_login">Po përpiqet të bëhet hyrja…</string>
+  <string name="auth_trying_to_login">Po provohet hyrja…</string>
   <string name="auth_no_net_conn_title">Pa lidhje rrjeti</string>
   <string name="auth_nossl_plain_ok_title">S\’ka lidhje të sigurt.</string>
   <string name="auth_connection_established">Lidhja u vendos</string>
   <string name="auth_testing_connection">Po provohet lidhja</string>
   <string name="auth_not_configured_title">Formësim i keqformuar shërbyesi</string>
-  <string name="auth_account_not_new">Ka tashmë në pajisje një llogari për të njëjtin përdorues dhe shërbyes</string>
+  <string name="auth_account_not_new">Në pajisje ka tashmë një llogari për të njëjtin përdorues dhe shërbyes</string>
   <string name="auth_account_not_the_same">Përdoruesi i dhënë s\’përputhet me përdoruesin e kësaj llogarie</string>
   <string name="auth_unknown_error_title">Ndodhi një gabim i panjohur!</string>
   <string name="auth_unknown_host_title">S\’u gjet dot strehë</string>
@@ -205,7 +205,7 @@
   <string name="rename_dialog_title">Jepni një emër të ri</string>
   <string name="rename_local_fail_msg">Kopja vendore s\’u riemërtua dot; provoni një emër tjetër</string>
   <string name="rename_server_fail_msg">Riemërtimi s\’u plotësua dot</string>
-  <string name="sync_file_fail_msg">S\’u kap dot kartela</string>
+  <string name="sync_file_fail_msg">S\’u kap dot kartela e largët</string>
   <string name="sync_file_nothing_to_do_msg">Lëndë kartele tashmë e njëkohësuar</string>
   <string name="create_dir_fail_msg">S\’u krijua dot dosja</string>
   <string name="filename_forbidden_characters">Shenja të ndaluara: / \\ &lt; &gt; : \" | ? *</string>
@@ -286,7 +286,7 @@
   <string name="forbidden_permissions_delete">për fshirje të kësaj kartele</string>
   <string name="share_link_forbidden_permissions">për ndarje me të tjerët të kësaj kartele</string>
   <string name="unshare_link_forbidden_permissions">për zhbërje të ndarjes me të tjerët të kësaj kartele</string>
-  <string name="update_link_forbidden_permissions">që të përditësohet kjo lidhje e ndarë me të tjerët</string>
+  <string name="update_link_forbidden_permissions">për përditësim të kësaj lidhjeje të ndarë me të tjerët</string>
   <string name="forbidden_permissions_create">për krijim kartele</string>
   <string name="uploader_upload_forbidden_permissions">për ngarkim në këtë dosje</string>
   <string name="downloader_download_file_not_found">Kartela s\’gjendet më te shërbyesi</string>

+ 2 - 0
res/values/strings.xml

@@ -405,4 +405,6 @@
     <string name="share_sharee_unavailable">Sorry, your server version does not allow share with users within clients.
         \nPlease contact your administrator</string>
 
+    <string name="action_switch_grid_view">Switch to grid view</string>
+    <string name="action_switch_list_view">Switch to list view</string>
 </resources>

+ 18 - 2
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -156,7 +156,7 @@ public class FileDisplayActivity extends HookActivity implements
 
     private OCFile mWaitingToSend;
 
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.v(TAG, "onCreate() start");
@@ -502,7 +502,8 @@ public class FileDisplayActivity extends HookActivity implements
         menu.findItem(R.id.action_create_dir).setVisible(!drawerOpen);
         menu.findItem(R.id.action_sort).setVisible(!drawerOpen);
         menu.findItem(R.id.action_sync_account).setVisible(!drawerOpen);
-        
+        menu.findItem(R.id.action_switch_view).setVisible(!drawerOpen);
+
         return super.onPrepareOptionsMenu(menu);
     }
 
@@ -577,6 +578,20 @@ public class FileDisplayActivity extends HookActivity implements
                 builder.create().show();
                 break;
             }
+            case R.id.action_switch_view:{
+                if (isGridView()){
+                    item.setTitle(getString(R.string.action_switch_grid_view));
+                    item.setIcon(ContextCompat.getDrawable(getApplicationContext(),
+                            R.drawable.ic_view_module));
+                    getListOfFilesFragment().setListAsPreferred();
+                } else {
+                    item.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
+                    item.setIcon(ContextCompat.getDrawable(getApplicationContext(),
+                            R.drawable.ic_view_list));
+                    getListOfFilesFragment().setGridAsPreferred();
+                }
+                return true;
+            }
         default:
             retval = super.onOptionsItemSelected(item);
         }
@@ -1844,6 +1859,7 @@ public class FileDisplayActivity extends HookActivity implements
     private void sortByName(boolean ascending) {
         getListOfFilesFragment().sortByName(ascending);
     }
+    private boolean isGridView(){ return getListOfFilesFragment().isGridView(); }
 
    public void allFilesOption() {
        browseToRoot();

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

@@ -461,4 +461,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

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

+ 20 - 0
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -217,6 +217,26 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
             item.setVisible(false);
             item.setEnabled(false);
         }
+
+        Boolean dualPane = getResources().getBoolean(R.bool.large_land_layout);
+
+        item = menu.findItem(R.id.action_switch_view);
+        if (item != null && !dualPane){
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
+
+        item = menu.findItem(R.id.action_sync_account);
+        if (item != null && !dualPane) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
+
+        item = menu.findItem(R.id.action_sort);
+        if (item != null && !dualPane) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
     }
 
 

+ 115 - 10
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -23,7 +23,9 @@
 package com.owncloud.android.ui.fragment;
 
 import android.app.Activity;
+import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.support.v4.widget.SwipeRefreshLayout;
@@ -66,7 +68,7 @@ import java.io.File;
  */
 public class OCFileListFragment extends ExtendedListFragment
         implements FileActionsDialogFragment.FileActionsDialogFragmentListener {
-    
+
     private static final String TAG = OCFileListFragment.class.getSimpleName();
 
     private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ?
@@ -77,16 +79,23 @@ public class OCFileListFragment extends ExtendedListFragment
 
     private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
 
+    private static final String GRID_IS_PREFERED_PREFERENCE = "gridIsPrefered";
+
     private FileFragment.ContainerActivity mContainerActivity;
 
     private OCFile mFile = null;
     private FileListListAdapter mAdapter;
     private boolean mJustFolders;
-    
+
     private OCFile mTargetFile;
-    
+
    
-    
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setHasOptionsMenu(true);
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -103,7 +112,7 @@ public class OCFileListFragment extends ExtendedListFragment
         }
         try {
             setOnRefreshListener((OnEnforceableRefreshListener) activity);
-            
+
         } catch (ClassCastException e) {
             throw new ClassCastException(activity.toString() + " must implement " +
                     SwipeRefreshLayout.OnRefreshListener.class.getSimpleName());
@@ -211,6 +220,11 @@ public class OCFileListFragment extends ExtendedListFragment
         outState.putParcelable(KEY_FILE, mFile);
     }
 
+    @Override
+    public void onPrepareOptionsMenu (Menu menu) {
+        changeGridIcon(menu);   // this is enough if the option stays out of the action bar
+    }
+
     /**
      * Call this, when the user presses the up button.
      *
@@ -322,11 +336,11 @@ public class OCFileListFragment extends ExtendedListFragment
                 );
                 mf.filter(menu);
             }
-                 
+
             /// TODO break this direct dependency on FileDisplayActivity... if possible
             MenuItem item = menu.findItem(R.id.action_open_file_with);
             FileFragment frag = ((FileDisplayActivity)getActivity()).getSecondFragment();
-            if (frag != null && frag instanceof FileDetailFragment && 
+            if (frag != null && frag instanceof FileDetailFragment &&
                     frag.getFile().getFileId() == targetFile.getFileId()) {
                 item = menu.findItem(R.id.action_see_details);
                 if (item != null) {
@@ -334,6 +348,10 @@ public class OCFileListFragment extends ExtendedListFragment
                     item.setEnabled(false);
                 }
             }
+
+//            String.format(mContext.getString(R.string.subject_token),
+//                    getClient().getCredentials().getUsername(), file.getFileName()));
+
         }
     }
 
@@ -413,7 +431,7 @@ public class OCFileListFragment extends ExtendedListFragment
                 return false;
         }
     }
-    
+
     /**
      * {@inhericDoc}
      */
@@ -448,7 +466,7 @@ public class OCFileListFragment extends ExtendedListFragment
         // TODO Enable when "On Device" is recovered ?
         // listDirectory(null, onlyOnDevice);
     }
-    
+
     public void refreshDirectory(){
         // TODO Enable when "On Device" is recovered ?
         listDirectory(getCurrentFile()/*, MainApp.getOnlyOnDevice()*/);
@@ -520,7 +538,7 @@ public class OCFileListFragment extends ExtendedListFragment
             OwnCloudVersion version = AccountUtils.getServerVersion(
                     ((FileActivity)mContainerActivity).getAccount());
             if (version != null && version.supportsRemoteThumbnails() &&
-                imagesCount > 0 && imagesCount == filesCount) {
+                    isGridViewPreferred(mFile)) {
                 switchToGridView();
                 registerLongClickListener();
             } else {
@@ -580,4 +598,91 @@ public class OCFileListFragment extends ExtendedListFragment
     public void sortBySize(boolean descending) {
         mAdapter.setSortOrder(FileStorageUtils.SORT_SIZE, descending);
     }
+
+    /**
+     * 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
+     * @return
+     */
+    public boolean isGridViewPreferred(OCFile file){
+        if (file != null) {
+            OCFile fileToTest = file;
+            OCFile parentDir = null;
+            String parentPath = null;
+            FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
+
+            SharedPreferences setting =
+                    getActivity().getSharedPreferences(
+                            GRID_IS_PREFERED_PREFERENCE, Context.MODE_PRIVATE
+                    );
+
+            if (setting.contains(String.valueOf(fileToTest.getFileId()))) {
+                return setting.getBoolean(String.valueOf(fileToTest.getFileId()), 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(String.valueOf(fileToTest.getFileId()), false);
+            }
+        } else {
+            return false;
+        }
+    }
+
+    private boolean endWhile(OCFile parentDir, SharedPreferences setting) {
+        if (parentDir.getRemotePath().compareToIgnoreCase(OCFile.ROOT_PATH) == 0) {
+            return false;
+        } else {
+            return !setting.contains(String.valueOf(parentDir.getFileId()));
+        }
+    }
+
+    private void changeGridIcon(Menu menu){
+        MenuItem menuItem = menu.findItem(R.id.action_switch_view);
+        if (isGridViewPreferred(mFile)){
+            menuItem.setTitle(getString(R.string.action_switch_list_view));
+            menuItem.setIcon(R.drawable.ic_view_list);
+        } else {
+            menuItem.setTitle(getString(R.string.action_switch_grid_view));
+            menuItem.setIcon(R.drawable.ic_view_module);
+        }
+    }
+
+    public void setListAsPreferred() {
+        saveGridAsPreferred(false);
+        switchToListView();
+    }
+
+    public void setGridAsPreferred() {
+        saveGridAsPreferred(true);
+        switchToGridView();
+    }
+
+    private void saveGridAsPreferred(boolean setGrid){
+        SharedPreferences setting = getActivity().getSharedPreferences(
+                GRID_IS_PREFERED_PREFERENCE, Context.MODE_PRIVATE
+        );
+
+        SharedPreferences.Editor editor = setting.edit();
+        editor.putBoolean(String.valueOf(mFile.getFileId()), setGrid);
+        editor.apply();
+    }
+
+
 }

+ 14 - 0
src/com/owncloud/android/ui/preview/PreviewTextFragment.java

@@ -290,6 +290,20 @@ public class PreviewTextFragment extends FileFragment {
             item.setVisible(false);
             item.setEnabled(false);
         }
+
+        Boolean dualPane = getResources().getBoolean(R.bool.large_land_layout);
+
+        item = menu.findItem(R.id.action_switch_view);
+        if (item != null && !dualPane){
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
+
+        item = menu.findItem(R.id.action_sort);
+        if (item != null && !dualPane) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
     }
 
     /**

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

@@ -277,4 +277,5 @@ public class DisplayUtils {
             }
         }
     }
+
 }