Merge branch 'sortingFiles' of https://github.com/tobiasKaminsky/android into sorting...
authorjabarros <jabarros@solidgear.es>
Thu, 23 Oct 2014 09:06:05 +0000 (11:06 +0200)
committerjabarros <jabarros@solidgear.es>
Thu, 23 Oct 2014 09:06:05 +0000 (11:06 +0200)
Conflicts:
src/com/owncloud/android/datamodel/OCFile.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

1  2 
res/values-de/strings.xml
res/values/strings.xml
src/com/owncloud/android/datamodel/OCFile.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

    <string name="actionbar_settings">Einstellungen</string>
    <string name="actionbar_see_details">Details</string>
    <string name="actionbar_send_file">Senden</string>
-   <string name="actionbar_sort">Sortieren</string>
-   <string name="actionbar_sort_title">Sortieren nach</string>
-   <string-array name="actionbar_sortby">
-       <item>A-Z</item>
-       <item>Neu - Alt</item>
-       <item>Groß - Klein</item>
-   </string-array>
    <string name="prefs_category_general">Allgemein</string>
    <string name="prefs_category_more">Mehr</string>
    <string name="prefs_accounts">Konten</string>
    <string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
    <string name="sync_foreign_files_forgotten_ticker">Einige lokale Dateien wurden vergessen</string>
    <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem %2$s Verzeichnis konnten nicht kopiert werden nach</string>
 -  <string name="sync_foreign_files_forgotten_explanation">Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Du kannst die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
 +  <string name="sync_foreign_files_forgotten_explanation">Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Du kannst die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den Ordner %1$s verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
    <string name="sync_current_folder_was_removed">Das Verzeichnis %1$s existiert nicht mehr</string>
    <string name="foreign_files_move">Verschiebe alle</string>
    <string name="foreign_files_success">Alle Dateien wurden verschoben</string>
    <string name="preview_image_description">Bildvorschau</string>
    <string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
    <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
 +  <string name="prefs_instant_upload_path_title">Pfad hochladen</string>
    <string name="share_link_no_support_share_api">Entschuldigung, Freigaben sind auf Deinem Server nicht aktiviert. Bitte kontaktiere Deinen
  ⇥⇥Administrator.</string>
    <string name="share_link_file_no_exist">Teilen nicht möglich. Prüfe, dass die Datei existiert</string>
    <string name="prefs_category_accounts">Konten</string>
    <string name="prefs_add_account">Konto hinzufügen</string>
    <string name="auth_redirect_non_secure_connection_title">Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet.</string>
 -  <string name="saml_authentication_required_text">Authentifizierung benötigt</string>
 +  <string name="actionbar_logger">Protokolle</string>
 +  <string name="log_send_history_button">Verlauf senden</string>
 +  <string name="log_mail_subject">Protokolle der ownCloud-Android-App</string>
 +  <string name="log_progress_dialog_text">Daten werden geladen …</string>
 +  <string name="saml_authentication_required_text">Legitimierung benötigt</string>
    <string name="saml_authentication_wrong_pass">Falsches Passwort</string>
    <string name="actionbar_move">Verschieben</string>
    <string name="file_list_empty_moving">Nichts vorhanden. Du kannst einen Ordner hinzufügen!</string>
    <string name="move_choose_button_text">Auswählen</string>
    <string name="move_file_not_found">Verschieben nicht möglich. Prüfe, dass die Datei existiert</string>
 -  <string name="move_file_invalid_into_descendent">Es ist nicht möglich einen Ordner eine Ebene tiefer zu verschieben</string>
 -  <string name="move_file_invalid_overwrite">Die Datei existiert bereits im Zielordner</string>
 -  <string name="move_file_error">Es ist ein Fehler beim Verschieben dieser Datei oder Ordners aufgetreten.</string>
 -  <string name="forbidden_permissions_move">zum Datei verschieben</string>
 +  <string name="move_file_invalid_into_descendent">Es ist nicht möglich, einen Ordner in einen seiner Unterordner zu verschieben</string>
 +  <string name="move_file_invalid_overwrite">Die Datei ist bereits im Zielordner vorhanden</string>
 +  <string name="move_file_error">Es ist ein Fehler beim Verschieben der Datei oder des Ordners aufgetreten.</string>
 +  <string name="forbidden_permissions_move">um diese Datei zu verschieben</string>
 +  <string name="prefs_category_instant_uploading">Sofortiges Hochladen</string>
 +  <string name="prefs_category_security">Sicherheit</string>
  </resources>
diff --combined res/values/strings.xml
@@@ -17,7 -17,8 +17,8 @@@
      <string-array name="actionbar_sortby">
        <item>A-Z</item>
        <item>Newest - Oldest</item>
-       <item>Biggest - Smallest</item>
+       <!-- TODO re-enable when server-side folder size calculation is available   
+       <item>Biggest - Smallest</item>  -->
      </string-array>
      <string name="prefs_category_general">General</string>
      <string name="prefs_category_more">More</string>
      <string name="preview_image_error_unknown_format">This image cannot be shown</string>
      
      <string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
 +    <string name="prefs_instant_upload_path_title">Upload Path</string>
  
        <string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your
                administrator.</string>
  
        <string name="prefs_category_accounts">Accounts</string>
        <string name="prefs_add_account">Add account</string>
 -      <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
 +      <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected to an unsecured route.</string>
 +
 +      <string name="actionbar_logger">Logs</string>
 +      <string name="log_send_history_button">Send History</string>
 +      <string name="log_mail_subject">ownCloud Android app logs</string>
 +      <string name="log_progress_dialog_text">Loading data...</string>
  
        <string name="saml_authentication_required_text">Authentication required</string>
        <string name="saml_authentication_wrong_pass">Wrong password</string>
        <string name="move_file_error">An error occurred while trying to move this file or folder</string>
        <string name="forbidden_permissions_move">to move this file</string>
  
 +      <string name="prefs_category_instant_uploading">Instant Uploads</string>
 +      <string name="prefs_category_security">Security</string>
 +
  </resources>
@@@ -20,9 -20,10 +20,9 @@@ package com.owncloud.android.datamodel
  
  import java.io.File;
  
 +import com.owncloud.android.lib.common.utils.Log_OC;
+ import third_parties.daveKoeller.AlphanumComparator;
  
 -import com.owncloud.android.utils.Log_OC;
 -
  import android.os.Parcel;
  import android.os.Parcelable;
  import android.webkit.MimeTypeMap;
@@@ -68,8 -69,6 +68,8 @@@ public class OCFile implements Parcelab
      private String mPermissions;
      private String mRemoteId;
  
 +    private boolean mNeedsUpdateThumbnail;
 +
  
      /**
       * Create new {@link OCFile} with given path.
          mPublicLink = source.readString();
          mPermissions = source.readString();
          mRemoteId = source.readString();
 +        mNeedsUpdateThumbnail = source.readInt() == 0;
 +
      }
  
      @Override
          dest.writeString(mPublicLink);
          dest.writeString(mPermissions);
          dest.writeString(mRemoteId);
 +        dest.writeInt(mNeedsUpdateThumbnail ? 1 : 0);
      }
      
      /**
          mPublicLink = null;
          mPermissions = null;
          mRemoteId = null;
 +        mNeedsUpdateThumbnail = false;
      }
  
      /**
          return mNeedsUpdating;
      }
      
 +    public boolean needsUpdateThumbnail() {
 +        return mNeedsUpdateThumbnail;
 +    }
 +
 +    public void setNeedsUpdateThumbnail(boolean needsUpdateThumbnail) {
 +        this.mNeedsUpdateThumbnail = needsUpdateThumbnail;
 +    }
 +
      public long getLastSyncDateForProperties() {
          return mLastSyncDateForProperties;
      }
@@@ -21,6 -21,8 +21,6 @@@ package com.owncloud.android.ui.activit
  import java.io.File;
  import java.io.IOException;
  
 -import org.apache.commons.httpclient.methods.PostMethod;
 -
  import android.accounts.Account;
  import android.accounts.AccountManager;
  import android.accounts.AuthenticatorException;
@@@ -48,6 -50,8 +48,6 @@@ import android.provider.MediaStore
  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentManager;
  import android.support.v4.app.FragmentTransaction;
 -import android.support.v4.widget.SwipeRefreshLayout;
 -import android.util.Log;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.ArrayAdapter;
@@@ -60,7 -64,6 +60,7 @@@ import com.actionbarsherlock.view.Menu
  import com.actionbarsherlock.view.MenuInflater;
  import com.actionbarsherlock.view.MenuItem;
  import com.actionbarsherlock.view.Window;
 +import com.owncloud.android.BuildConfig;
  import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
  import com.owncloud.android.datamodel.OCFile;
@@@ -77,7 -80,6 +77,7 @@@ import com.owncloud.android.lib.common.
  import com.owncloud.android.lib.common.operations.RemoteOperation;
  import com.owncloud.android.lib.common.operations.RemoteOperationResult;
  import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
 +import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.operations.CreateFolderOperation;
  import com.owncloud.android.operations.CreateShareOperation;
  import com.owncloud.android.operations.MoveFileOperation;
@@@ -88,6 -90,7 +88,7 @@@ import com.owncloud.android.operations.
  import com.owncloud.android.operations.UnshareLinkOperation;
  import com.owncloud.android.services.observer.FileObserverService;
  import com.owncloud.android.syncadapter.FileSyncAdapter;
+ import com.owncloud.android.ui.adapter.FileListListAdapter;
  import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
  import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
  import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
@@@ -100,6 -103,7 +101,6 @@@ import com.owncloud.android.ui.preview.
  import com.owncloud.android.ui.preview.PreviewVideoActivity;
  import com.owncloud.android.utils.DisplayUtils;
  import com.owncloud.android.utils.ErrorMessageAdapter;
 -import com.owncloud.android.utils.Log_OC;
  
  
  /**
  
  public class FileDisplayActivity extends HookActivity implements
  FileFragment.ContainerActivity, OnNavigationListener, 
 -OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
 +OnSslUntrustedCertListener, OnEnforceableRefreshListener {
      
      private ArrayAdapter<String> mDirectories;
  
                  Log_OC.e(TAG, "Initializing Fragments in onAccountChanged..");
                  initFragmentsWithFile();
                  if (file.isFolder()) {
 -                    startSyncFolderOperation(file);
 +                    startSyncFolderOperation(file, false);
                  }
                  
              } else {
              if (listOfFiles != null) {
                  listOfFiles.listDirectory(getCurrentDir());   
              } else {
 -                Log.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
 +                Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
              }
              
              /// Second fragment
              }
  
          } else {
 -            Log.wtf(TAG, "initFragments() called with invalid NULLs!");
 +            Log_OC.wtf(TAG, "initFragments() called with invalid NULLs!");
              if (getAccount() == null) {
 -                Log.wtf(TAG, "\t account is NULL");
 +                Log_OC.wtf(TAG, "\t account is NULL");
              }
              if (getFile() == null) {
 -                Log.wtf(TAG, "\t file is NULL");
 +                Log_OC.wtf(TAG, "\t file is NULL");
              }
          }
      }
      }
  
      @Override
 +    public boolean onPrepareOptionsMenu(Menu menu) {
 +        if (BuildConfig.DEBUG) {
 +            menu.findItem(R.id.action_logger).setVisible(true);
 +        } else {
 +            menu.findItem(R.id.action_logger).setVisible(false);
 +        }
 +        return super.onPrepareOptionsMenu(menu);
 +    }
 +
 +    @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getSherlock().getMenuInflater();
          inflater.inflate(R.menu.main_menu, menu);
              startActivity(settingsIntent);
              break;
          }
 +        case R.id.action_logger: {
 +            Intent loggerIntent = new Intent(getApplicationContext(),LogHistoryActivity.class);
 +            startActivity(loggerIntent);
 +            break;
 +        }
          case android.R.id.home: {
              FileFragment second = getSecondFragment();
              OCFile currentDir = getCurrentDir();
          }
          case R.id.action_sort: {
              SharedPreferences appPreferences = PreferenceManager
-                     .getDefaultSharedPreferences(getApplicationContext());
+                     .getDefaultSharedPreferences(this);
              
              // Read sorting order, default to sort by name ascending
              Integer sortOrder = appPreferences
-                     .getInt("sortOrder", 0);
+                     .getInt("sortOrder", FileListListAdapter.SORT_NAME);
              
              AlertDialog.Builder builder = new AlertDialog.Builder(this);
              builder.setTitle(R.string.actionbar_sort_title)
                      case 1:
                          sortByDate(false);
                          break;
-                     case 2:
-                         sortBySize(false);
-                         break;
+                         
+ // TODO re-enable when server-side folder size calculation is available                       
+ //                    case 2:
+ //                        sortBySize(false);
+ //                        break;
                      }
                      
                      dialog.dismiss();
              }
              ocFileListFragment.setMessageForEmptyList(getString(message));
          } else {
 -            Log.e(TAG, "OCFileListFragment is null");
 +            Log_OC.e(TAG, "OCFileListFragment is null");
          }
      }
  
              OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
              listOfFiles.listDirectory(root);
              setFile(listOfFiles.getCurrentFile());
 -            startSyncFolderOperation(root);
 +            startSyncFolderOperation(root, false);
          }
          cleanSecondFragment();
      }
              setNavigationListWithFolder(folder);
              listOfFiles.listDirectory(folder);
              setFile(listOfFiles.getCurrentFile());
 -            startSyncFolderOperation(folder);
 +            startSyncFolderOperation(folder, false);
          } else {
              Log_OC.e(TAG, "Unexpected null when accessing list fragment");
          }
          cleanSecondFragment();
          
          // Sync Folder
 -        startSyncFolderOperation(directory);
 +        startSyncFolderOperation(directory, false);
          
      }
  
  
      @Override
      public void onSavedCertificate() {
 -        startSyncFolderOperation(getCurrentDir());                
 +        startSyncFolderOperation(getCurrentDir(), false);
      }
  
  
          return null;
      }
      
 -    public void startSyncFolderOperation(OCFile folder) {
 +    public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) {
          long currentSyncTime = System.currentTimeMillis(); 
          
          mSyncInProgress = true;
                                                                          currentSyncTime, 
                                                                          false,
                                                                          getFileOperationsHelper().isSharedSupported(),
 +                                                                        ignoreETag,
                                                                          getStorageManager(), 
                                                                          getAccount(), 
                                                                          getApplicationContext()
      }
  
      @Override
 +    public void onRefresh(boolean ignoreETag) {
 +        refreshList(ignoreETag);
 +    }
 +
 +    @Override
      public void onRefresh() {
 +        refreshList(true);
 +    }
 +
 +    private void refreshList(boolean ignoreETag) {
          OCFileListFragment listOfFiles = getListOfFilesFragment();
          if (listOfFiles != null) {
              OCFile folder = listOfFiles.getCurrentFile();
              if (folder != null) {
                  /*mFile = mContainerActivity.getStorageManager().getFileById(mFile.getFileId());
                  listDirectory(mFile);*/
 -                startSyncFolderOperation(folder);
 +                startSyncFolderOperation(folder, ignoreETag);
              }
          }
      }
 -    
 +
      private void sortByDate(boolean ascending){
          getListOfFilesFragment().sortByDate(ascending);
      }
      private void sortByName(boolean ascending){
          getListOfFilesFragment().sortByName(ascending);
      }
 -
  }
   */\r
  package com.owncloud.android.ui.adapter;\r
  \r
 +
  import java.io.File;\r
  import java.util.Collections;\r
  import java.util.Comparator;\r
  import java.util.Vector;\r
  \r
+ import third_parties.daveKoeller.AlphanumComparator;\r
  import android.accounts.Account;\r
  import android.content.Context;\r
  import android.content.SharedPreferences;\r
 +import android.graphics.Bitmap;\r
  import android.preference.PreferenceManager;\r
  import android.view.LayoutInflater;\r
  import android.view.View;\r
@@@ -39,477 -38,438 +40,476 @@@ import android.widget.TextView
  \r
  import com.owncloud.android.R;\r
  import com.owncloud.android.authentication.AccountUtils;\r
- import com.owncloud.android.datamodel.AlphanumComparator;\r
  import com.owncloud.android.datamodel.FileDataStorageManager;\r
  import com.owncloud.android.datamodel.OCFile;\r
 +import com.owncloud.android.datamodel.ThumbnailsCacheManager;\r
 +import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncDrawable;\r
  import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;\r
  import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;\r
  import com.owncloud.android.ui.activity.ComponentsGetter;\r
  import com.owncloud.android.utils.DisplayUtils;\r
  import com.owncloud.android.utils.FileStorageUtils;\r
\r
\r
++
  \r
  /**\r
   * This Adapter populates a ListView with all files and folders in an ownCloud\r
   * instance.\r
   * \r
   * @author Bartek Przybylski\r
 - * \r
 + * @author Tobias Kaminsky\r
 + * @author David A. Velasco\r
   */\r
--public class FileListListAdapter extends BaseAdapter implements ListAdapter {\r
 -      private final static String PERMISSION_SHARED_WITH_ME = "S";\r
 -\r
 -      private final Context mContext;\r
 -      private OCFile mFile = null;\r
 -      private Vector<OCFile> mFiles = null;\r
 -      private final boolean mJustFolders;\r
 -\r
 -      private FileDataStorageManager mStorageManager;\r
 -      private Account mAccount;\r
 -      private final ComponentsGetter mTransferServiceGetter;\r
 -      private Integer mSortOrder;\r
 -      public static final Integer SORT_NAME = 0;\r
 -      public static final Integer SORT_DATE = 1;\r
 -      public static final Integer SORT_SIZE = 2;\r
 -      private Boolean mSortAscending;\r
 -      private final SharedPreferences mAppPreferences;\r
 -\r
 -      public FileListListAdapter(boolean justFolders, Context context, ComponentsGetter transferServiceGetter) {\r
 -              mJustFolders = justFolders;\r
 -              mContext = context;\r
 -              mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
 -              mTransferServiceGetter = transferServiceGetter;\r
 -\r
 -              mAppPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);\r
 -\r
 -              // Read sorting order, default to sort by name ascending\r
 -              mSortOrder = mAppPreferences.getInt("sortOrder", SORT_NAME);\r
 -              mSortAscending = mAppPreferences.getBoolean("sortAscending", true);\r
 -\r
 -      }\r
 -\r
 -      @Override\r
 -      public boolean areAllItemsEnabled() {\r
 -              return true;\r
 -      }\r
 -\r
 -      @Override\r
 -      public boolean isEnabled(int position) {\r
 -              return true;\r
 -      }\r
 -\r
 -      @Override\r
 -      public int getCount() {\r
 -              return mFiles != null ? mFiles.size() : 0;\r
 -      }\r
 -\r
 -      @Override\r
 -      public Object getItem(int position) {\r
 -              if (mFiles == null || mFiles.size() <= position)\r
 -                      return null;\r
 -              return mFiles.get(position);\r
 -      }\r
 -\r
 -      @Override\r
 -      public long getItemId(int position) {\r
 -              if (mFiles == null || mFiles.size() <= position)\r
 -                      return 0;\r
 -              return mFiles.get(position).getFileId();\r
 -      }\r
 -\r
 -      @Override\r
 -      public int getItemViewType(int position) {\r
 -              return 0;\r
 -      }\r
 -\r
 -      @Override\r
 -      public View getView(int position, View convertView, ViewGroup parent) {\r
 -              View view = convertView;\r
 -              if (view == null) {\r
 -                      LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
 -                      view = inflator.inflate(R.layout.list_item, null);\r
 -              }\r
 -\r
 -              if (mFiles != null && mFiles.size() > position) {\r
 -                      OCFile file = mFiles.get(position);\r
 -                      TextView fileName = (TextView) view.findViewById(R.id.Filename);\r
 -                      String name = file.getFileName();\r
 -\r
 -                      fileName.setText(name);\r
 -                      ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
 -                      ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
 -                      ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
 -                      sharedWithMeIconV.setVisibility(View.GONE);\r
 -\r
 -                      ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
 -                      localStateView.bringToFront();\r
 -                      FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
 -                      FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
 -                      if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
 -                              localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
 -                              localStateView.setVisibility(View.VISIBLE);\r
 -                      } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
 -                              localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
 -                              localStateView.setVisibility(View.VISIBLE);\r
 -                      } else if (file.isDown()) {\r
 -                              localStateView.setImageResource(R.drawable.local_file_indicator);\r
 -                              localStateView.setVisibility(View.VISIBLE);\r
 -                      } else {\r
 -                              localStateView.setVisibility(View.INVISIBLE);\r
 -                      }\r
 -\r
 -                      TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
 -                      TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
 -                      ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
 -\r
 -                      if (!file.isFolder()) {\r
 -                              fileSizeV.setVisibility(View.VISIBLE);\r
 -                              fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
 -                              lastModV.setVisibility(View.VISIBLE);\r
 -                              lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
 -                              // this if-else is needed even thoe fav icon is visible by\r
 -                              // default\r
 -                              // because android reuses views in listview\r
 -                              if (!file.keepInSync()) {\r
 -                                      view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
 -                              } else {\r
 -                                      view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
 -                              }\r
 -\r
 -                              ListView parentList = (ListView) parent;\r
 -                              if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) {\r
 -                                      checkBoxV.setVisibility(View.GONE);\r
 -                              } else {\r
 -                                      if (parentList.isItemChecked(position)) {\r
 -                                              checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
 -                                      } else {\r
 -                                              checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
 -                                      }\r
 -                                      checkBoxV.setVisibility(View.VISIBLE);\r
 -                              }\r
 -\r
 -                              fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
 -\r
 -                              if (checkIfFileIsSharedWithMe(file)) {\r
 -                                      sharedWithMeIconV.setVisibility(View.VISIBLE);\r
 -                              }\r
 -                      } else {\r
 -                              // TODO Re-enable when server supports folder-size calculation\r
 -                              // if (FileStorageUtils.getDefaultSavePathFor(mAccount.name,\r
 -                              // file) != null) {\r
 -                              // fileSizeV.setVisibility(View.VISIBLE);\r
 -                              // fileSizeV\r
 -                              // .setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name,\r
 -                              // file)));\r
 -                              // } else {\r
 -                              fileSizeV.setVisibility(View.INVISIBLE);\r
 -                              // }\r
 -\r
 -                              lastModV.setVisibility(View.VISIBLE);\r
 -                              lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
 -                              checkBoxV.setVisibility(View.GONE);\r
 -                              view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
 -\r
 -                              if (checkIfFileIsSharedWithMe(file)) {\r
 -                                      fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
 -                                      sharedWithMeIconV.setVisibility(View.VISIBLE);\r
 -                              } else {\r
 -                                      fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
 -                              }\r
 -\r
 -                              // If folder is sharedByLink, icon folder must be changed to\r
 -                              // folder-public one\r
 -                              if (file.isShareByLink()) {\r
 -                                      fileIcon.setImageResource(R.drawable.folder_public);\r
 -                              }\r
 -                      }\r
 -\r
 -                      if (file.isShareByLink()) {\r
 -                              sharedIconV.setVisibility(View.VISIBLE);\r
 -                      } else {\r
 -                              sharedIconV.setVisibility(View.GONE);\r
 -                      }\r
 -              }\r
 -\r
 -              return view;\r
 -      }\r
 -\r
 -      /**\r
 -       * Local Folder size in human readable format\r
 -       * \r
 -       * @param path\r
 -       *            String\r
 -       * @return Size in human readable format\r
 -       */\r
 -      private String getFolderSizeHuman(String path) {\r
 -\r
 -              File dir = new File(path);\r
 -\r
 -              if (dir.exists()) {\r
 -                      long bytes = getFolderSize(dir);\r
 -                      return DisplayUtils.bytesToHumanReadable(bytes);\r
 -              }\r
 -\r
 -              return "0 B";\r
 -      }\r
 -\r
 -      /**\r
 -       * Local Folder size\r
 -       * \r
 -       * @param dir\r
 -       *            File\r
 -       * @return Size in bytes\r
 -       */\r
 -      private long getFolderSize(File dir) {\r
 -              if (dir.exists()) {\r
 -                      long result = 0;\r
 -                      File[] fileList = dir.listFiles();\r
 -                      for (int i = 0; i < fileList.length; i++) {\r
 -                              if (fileList[i].isDirectory()) {\r
 -                                      result += getFolderSize(fileList[i]);\r
 -                              } else {\r
 -                                      result += fileList[i].length();\r
 -                              }\r
 -                      }\r
 -                      return result;\r
 -              }\r
 -              return 0;\r
 -      }\r
 -\r
 -      @Override\r
 -      public int getViewTypeCount() {\r
 -              return 1;\r
 -      }\r
 -\r
 -      @Override\r
 -      public boolean hasStableIds() {\r
 -              return true;\r
 -      }\r
 -\r
 -      @Override\r
 -      public boolean isEmpty() {\r
 -              return (mFiles == null || mFiles.isEmpty());\r
 -      }\r
 -\r
 -      /**\r
 -       * Change the adapted directory for a new one\r
 -       * \r
 -       * @param directory\r
 -       *            New file to adapt. Can be NULL, meaning "no content to adapt".\r
 -       * @param updatedStorageManager\r
 -       *            Optional updated storage manager; used to replace\r
 -       *            mStorageManager if is different (and not NULL)\r
 -       */\r
 -      public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager) {\r
 -              mFile = directory;\r
 -              if (updatedStorageManager != null && updatedStorageManager != mStorageManager) {\r
 -                      mStorageManager = updatedStorageManager;\r
 -                      mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
 -              }\r
 -              if (mStorageManager != null) {\r
 -                      mFiles = mStorageManager.getFolderContent(mFile);\r
 -                      if (mJustFolders) {\r
 -                              mFiles = getFolders(mFiles);\r
 -                      }\r
 -              } else {\r
 -                      mFiles = null;\r
 -              }\r
 -\r
 -              sortDirectory();\r
 -      }\r
 -\r
 -      /**\r
 -       * Sorts all filenames, regarding last user decision\r
 -       */\r
 -      private void sortDirectory() {\r
 -              switch (mSortOrder) {\r
 -              case 0:\r
 -                      sortByName(mSortAscending);\r
 -                      break;\r
 -              case 1:\r
 -                      sortByDate(mSortAscending);\r
 -                      break;\r
 -              case 2:\r
 -                      sortBySize(mSortAscending);\r
 -                      break;\r
 -              }\r
 -\r
 -              notifyDataSetChanged();\r
 -      }\r
 -\r
 -      /**\r
 -       * Filter for getting only the folders\r
 -       * \r
 -       * @param files\r
 -       * @return Vector<OCFile>\r
 -       */\r
 -      public Vector<OCFile> getFolders(Vector<OCFile> files) {\r
 -              Vector<OCFile> ret = new Vector<OCFile>();\r
 -              OCFile current = null;\r
 -              for (int i = 0; i < files.size(); i++) {\r
 -                      current = files.get(i);\r
 -                      if (current.isFolder()) {\r
 -                              ret.add(current);\r
 -                      }\r
 -              }\r
 -              return ret;\r
 -      }\r
 -\r
 -      /**\r
 -       * Check if parent folder does not include 'S' permission and if file/folder\r
 -       * is shared with me\r
 -       * \r
 -       * @param file\r
 -       *            : OCFile\r
 -       * @return boolean: True if it is shared with me and false if it is not\r
 -       */\r
 -      private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
 -              return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
 -                              && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
 -      }\r
 -\r
 -      /**\r
 -       * Sorts list by Date\r
 -       * \r
 -       * @param sortAscending\r
 -       *            true: ascending, false: descending\r
 -       */\r
 -      private void sortByDate(boolean sortAscending) {\r
 -              final Integer val;\r
 -              if (sortAscending) {\r
 -                      val = 1;\r
 -              } else {\r
 -                      val = -1;\r
 -              }\r
 -\r
 -              Collections.sort(mFiles, new Comparator<OCFile>() {\r
 -                      @Override\r
 -                      public int compare(OCFile o1, OCFile o2) {\r
 -                              if (o1.isFolder() && o2.isFolder()) {\r
 -                                      return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
 -                              } else if (o1.isFolder()) {\r
 -                                      return -1;\r
 -                              } else if (o2.isFolder()) {\r
 -                                      return 1;\r
 -                              } else if (o1.getModificationTimestamp() == 0 || o2.getModificationTimestamp() == 0) {\r
 -                                      return 0;\r
 -                              } else {\r
 -                                      return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
 -                              }\r
 -                      }\r
 -              });\r
 -      }\r
 -\r
 -      /**\r
 -       * Sorts list by Size\r
 -       * \r
 -       * @param sortAscending\r
 -       *            true: ascending, false: descending\r
 -       */\r
 -      private void sortBySize(boolean sortAscending) {\r
 -              final Integer val;\r
 -              if (sortAscending) {\r
 -                      val = 1;\r
 -              } else {\r
 -                      val = -1;\r
 -              }\r
 -\r
 -              Collections.sort(mFiles, new Comparator<OCFile>() {\r
 -                      @Override\r
 -                      public int compare(OCFile o1, OCFile o2) {\r
 -                              if (o1.isFolder() && o2.isFolder()) {\r
 -                                      return val\r
 -                                                      * Long.compare(\r
 -                                                                      getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1))),\r
 -                                                                      getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2))));\r
 -                              } else if (o1.isFolder()) {\r
 -                                      return -1;\r
 -                              } else if (o2.isFolder()) {\r
 -                                      return 1;\r
 -                              } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0) {\r
 -                                      return 0;\r
 -                              } else {\r
 -                                      return val * Long.compare(o1.getFileLength(), o2.getFileLength());\r
 -                              }\r
 -                      }\r
 -              });\r
 -      }\r
 -\r
 -      /**\r
 -       * Sorts list by Name\r
 -       * \r
 -       * @param sortAscending\r
 -       *            true: ascending, false: descending\r
 -       */\r
 -      private void sortByName(boolean sortAscending) {\r
 -              final Integer val;\r
 -              if (sortAscending) {\r
 -                      val = 1;\r
 -              } else {\r
 -                      val = -1;\r
 -              }\r
 -\r
 -              Collections.sort(mFiles, new Comparator<OCFile>() {\r
 -                      @Override\r
 -                      public int compare(OCFile o1, OCFile o2) {\r
 -                              if (o1.isFolder() && o2.isFolder()) {\r
 -                                      return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());\r
 -                              } else if (o1.isFolder()) {\r
 -                                      return -1;\r
 -                              } else if (o2.isFolder()) {\r
 -                                      return 1;\r
 -                              }\r
 -                              return val * new AlphanumComparator().compare(o1, o2);\r
 -                      }\r
 -              });\r
 -      }\r
 -\r
 -      public void setSortOrder(Integer order, boolean ascending) {\r
 -              SharedPreferences.Editor editor = mAppPreferences.edit();\r
 -              editor.putInt("sortOrder", order);\r
 -              editor.putBoolean("sortAscending", ascending);\r
 -              editor.commit();\r
 -\r
 -              mSortOrder = order;\r
 -              mSortAscending = ascending;\r
 -\r
 -              sortDirectory();\r
 -      }\r
++public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 +    private final static String PERMISSION_SHARED_WITH_ME = "S";\r
 +    \r
 +    private Context mContext;\r
 +    private OCFile mFile = null;\r
 +    private Vector<OCFile> mFiles = null;\r
 +    private boolean mJustFolders;\r
 +\r
 +    private FileDataStorageManager mStorageManager;
 +    private Account mAccount;
 +    private ComponentsGetter mTransferServiceGetter;\r
-     private Integer sortOrder;\r
-     private Boolean sortAscending;\r
-     private SharedPreferences appPreferences;\r
++    private Integer mSortOrder;\r
++    public static final Integer SORT_NAME = 0;\r
++    public static final Integer SORT_DATE = 1;\r
++    public static final Integer SORT_SIZE = 2;\r
++    private Boolean mSortAscending;\r
++    private SharedPreferences mAppPreferences;\r
 +    \r
 +    public FileListListAdapter(\r
 +            boolean justFolders, \r
 +            Context context, \r
 +            ComponentsGetter transferServiceGetter\r
 +            ) {\r
 +        \r
 +        mJustFolders = justFolders;\r
 +        mContext = context;\r
 +        mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
 +        mTransferServiceGetter = transferServiceGetter;
 +        \r
-         appPreferences = PreferenceManager\r
++        mAppPreferences = PreferenceManager\r
 +                .getDefaultSharedPreferences(mContext);\r
 +        \r
 +        // Read sorting order, default to sort by name ascending\r
-         sortOrder = appPreferences\r
++        mSortOrder = mAppPreferences\r
 +                .getInt("sortOrder", 0);\r
-         sortAscending = appPreferences.getBoolean("sortAscending", true);
++        mSortAscending = mAppPreferences.getBoolean("sortAscending", true);
 +        \r
 +        // initialise thumbnails cache on background thread\r
 +        new ThumbnailsCacheManager.InitDiskCacheTask().execute();\r
 +    }\r
 +    
 +    @Override\r
 +    public boolean areAllItemsEnabled() {\r
 +        return true;\r
 +    }\r
 +\r
 +    @Override\r
 +    public boolean isEnabled(int position) {\r
 +        return true;\r
 +    }\r
 +\r
 +    @Override\r
 +    public int getCount() {\r
 +        return mFiles != null ? mFiles.size() : 0;\r
 +    }\r
 +\r
 +    @Override\r
 +    public Object getItem(int position) {\r
 +        if (mFiles == null || mFiles.size() <= position)\r
 +            return null;\r
 +        return mFiles.get(position);\r
 +    }\r
 +\r
 +    @Override\r
 +    public long getItemId(int position) {\r
 +        if (mFiles == null || mFiles.size() <= position)\r
 +            return 0;\r
 +        return mFiles.get(position).getFileId();\r
 +    }\r
 +\r
 +    @Override\r
 +    public int getItemViewType(int position) {\r
 +        return 0;\r
 +    }\r
 +\r
 +    @Override\r
 +    public View getView(int position, View convertView, ViewGroup parent) {\r
 +        View view = convertView;\r
 +        if (view == null) {\r
 +            LayoutInflater inflator = (LayoutInflater) mContext\r
 +                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
 +            view = inflator.inflate(R.layout.list_item, null);\r
 +        }\r
 +         \r
 +        if (mFiles != null && mFiles.size() > position) {\r
 +            OCFile file = mFiles.get(position);\r
 +            TextView fileName = (TextView) view.findViewById(R.id.Filename);           \r
 +            String name = file.getFileName();\r
 +\r
 +            fileName.setText(name);\r
 +            ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
 +            fileIcon.setTag(file.getFileId());\r
 +            ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
 +            ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
 +            sharedWithMeIconV.setVisibility(View.GONE);\r
 +\r
 +            ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
 +            localStateView.bringToFront();\r
 +            FileDownloaderBinder downloaderBinder = \r
 +                    mTransferServiceGetter.getFileDownloaderBinder();\r
 +            FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
 +            if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
 +                localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
 +                localStateView.setVisibility(View.VISIBLE);\r
 +            } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
 +                localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
 +                localStateView.setVisibility(View.VISIBLE);\r
 +            } else if (file.isDown()) {\r
 +                localStateView.setImageResource(R.drawable.local_file_indicator);\r
 +                localStateView.setVisibility(View.VISIBLE);\r
 +            } else {\r
 +                localStateView.setVisibility(View.INVISIBLE);\r
 +            }\r
 +            \r
 +            TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
 +            TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
 +            ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
 +            \r
 +            if (!file.isFolder()) {\r
 +                fileSizeV.setVisibility(View.VISIBLE);\r
 +                fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
 +                lastModV.setVisibility(View.VISIBLE);\r
 +                lastModV.setText(\r
 +                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())\r
 +                );\r
 +                // this if-else is needed even thoe fav icon is visible by default\r
 +                // because android reuses views in listview\r
 +                if (!file.keepInSync()) {\r
 +                    view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
 +                } else {\r
 +                    view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
 +                }\r
 +                \r
 +                ListView parentList = (ListView)parent;\r
 +                if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { \r
 +                    checkBoxV.setVisibility(View.GONE);\r
 +                } else {\r
 +                    if (parentList.isItemChecked(position)) {\r
 +                        checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
 +                    } else {\r
 +                        checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
 +                    }\r
 +                    checkBoxV.setVisibility(View.VISIBLE);\r
 +                }               \r
 +                \r
 +                // get Thumbnail if file is image\r
 +                if (file.isImage() && file.getRemoteId() != null){\r
 +                     // Thumbnail in Cache?\r
 +                    Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(\r
 +                            String.valueOf(file.getRemoteId())\r
 +                    );\r
 +                    if (thumbnail != null && !file.needsUpdateThumbnail()){\r
 +                        fileIcon.setImageBitmap(thumbnail);\r
 +                    } else {\r
 +                        // generate new Thumbnail\r
 +                        if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {\r
 +                            final ThumbnailsCacheManager.ThumbnailGenerationTask task = \r
 +                                    new ThumbnailsCacheManager.ThumbnailGenerationTask(\r
 +                                            fileIcon, mStorageManager\r
 +                                    );\r
 +                            if (thumbnail == null) {\r
 +                                thumbnail = ThumbnailsCacheManager.mDefaultImg;\r
 +                            }\r
 +                            final AsyncDrawable asyncDrawable = new AsyncDrawable(\r
 +                                    mContext.getResources(), \r
 +                                    thumbnail, \r
 +                                    task\r
 +                            );\r
 +                            fileIcon.setImageDrawable(asyncDrawable);\r
 +                            task.execute(file);\r
 +                        }\r
 +                    }\r
 +                } else {\r
 +                    fileIcon.setImageResource(\r
 +                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
 +                    );\r
 +                }\r
 +
 +                if (checkIfFileIsSharedWithMe(file)) {\r
 +                    sharedWithMeIconV.setVisibility(View.VISIBLE);\r
 +                }\r
 +            } \r
 +            else {\r
-                 if (FileStorageUtils.getDefaultSavePathFor(mAccount.name, file) != null){\r
-                     fileSizeV.setVisibility(View.VISIBLE);\r
-                     fileSizeV.setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file)));\r
-                 } else {\r
++//                if (FileStorageUtils.getDefaultSavePathFor(mAccount.name, file) != null){\r
++//                    fileSizeV.setVisibility(View.VISIBLE);\r
++//                    fileSizeV.setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file)));\r
++//                } else {\r
 +                    fileSizeV.setVisibility(View.INVISIBLE);\r
-                 }\r
++//                }\r
 +
 +                lastModV.setVisibility(View.VISIBLE);\r
 +                lastModV.setText(\r
 +                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())\r
 +                );\r
 +                checkBoxV.setVisibility(View.GONE);\r
 +                view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
 +\r
 +                if (checkIfFileIsSharedWithMe(file)) {\r
 +                    fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
 +                    sharedWithMeIconV.setVisibility(View.VISIBLE);\r
 +                } else {\r
 +                    fileIcon.setImageResource(\r
 +                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
 +                    );\r
 +                }\r
 +\r
 +                // If folder is sharedByLink, icon folder must be changed to\r
 +                // folder-public one\r
 +                if (file.isShareByLink()) {\r
 +                    fileIcon.setImageResource(R.drawable.folder_public);\r
 +                }\r
 +            }\r
 +\r
 +            if (file.isShareByLink()) {\r
 +                sharedIconV.setVisibility(View.VISIBLE);\r
 +            } else {\r
 +                sharedIconV.setVisibility(View.GONE);\r
 +            }\r
 +        }\r
 +\r
 +        return view;\r
 +    }\r
 +
 +    /**\r
 +     * Local Folder size in human readable format\r
-      * @param path String\r
++     * \r
++     * @param path\r
++     *            String\r
 +     * @return Size in human readable format\r
 +     */\r
 +    private String getFolderSizeHuman(String path) {\r
 +\r
 +        File dir = new File(path);\r
 +\r
-         if(dir.exists()) {\r
++        if (dir.exists()) {\r
 +            long bytes = getFolderSize(dir);\r
-             if (bytes < 1024) return bytes + " B";\r
-             int exp = (int) (Math.log(bytes) / Math.log(1024));\r
-             String pre = ("KMGTPE").charAt(exp-1) + "";\r
\r
-             return String.format("%.1f %sB", bytes / Math.pow(1024, exp), pre);\r
++            return DisplayUtils.bytesToHumanReadable(bytes);\r
 +        }\r
 +\r
 +        return "0 B";\r
 +    }\r
 +\r
 +    /**\r
 +     * Local Folder size\r
 +     * @param dir File\r
 +     * @return Size in bytes\r
 +     */\r
 +    private long getFolderSize(File dir) {\r
 +        if (dir.exists()) {\r
 +            long result = 0;\r
 +            File[] fileList = dir.listFiles();\r
 +            for(int i = 0; i < fileList.length; i++) {\r
 +                if(fileList[i].isDirectory()) {\r
 +                    result += getFolderSize(fileList[i]);\r
 +                } else {\r
 +                    result += fileList[i].length();\r
 +                }\r
 +            }\r
 +            return result;\r
 +        }\r
 +        return 0;\r
 +    } 
 +
 +    @Override\r
 +    public int getViewTypeCount() {\r
 +        return 1;\r
 +    }\r
 +\r
 +    @Override\r
 +    public boolean hasStableIds() {\r
 +        return true;\r
 +    }\r
 +\r
 +    @Override\r
 +    public boolean isEmpty() {\r
 +        return (mFiles == null || mFiles.isEmpty());\r
 +    }\r
 +\r
 +    /**\r
 +     * Change the adapted directory for a new one\r
 +     * @param directory                 New file to adapt. Can be NULL, meaning \r
 +     *                                  "no content to adapt".\r
 +     * @param updatedStorageManager     Optional updated storage manager; used to replace \r
 +     *                                  mStorageManager if is different (and not NULL)\r
 +     */\r
 +    public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager) {\r
 +        mFile = directory;\r
 +        if (updatedStorageManager != null && updatedStorageManager != mStorageManager) {\r
 +            mStorageManager = updatedStorageManager;\r
 +            mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
 +        }\r
 +        if (mStorageManager != null) {\r
 +            mFiles = mStorageManager.getFolderContent(mFile);\r
 +            if (mJustFolders) {\r
 +                mFiles = getFolders(mFiles);\r
 +            }\r
 +        } else {\r
 +            mFiles = null;\r
 +        }\r
 +\r
 +        sortDirectory();\r
 +    }\r
 +    \r
 +    /**\r
 +     * Sorts all filenames, regarding last user decision \r
 +     */\r
 +    private void sortDirectory(){\r
-         switch (sortOrder){\r
++        switch (mSortOrder){\r
 +        case 0:\r
-             sortByName(sortAscending);\r
++            sortByName(mSortAscending);\r
 +            break;\r
 +        case 1:\r
-             sortByDate(sortAscending);\r
++            sortByDate(mSortAscending);\r
 +            break;\r
 +        case 2: \r
-             sortBySize(sortAscending);\r
++            sortBySize(mSortAscending);\r
 +            break;\r
 +        }\r
 +        \r
 +        notifyDataSetChanged();\r
 +    }\r
 +    \r
 +    \r
 +    /**\r
 +     * Filter for getting only the folders\r
 +     * @param files\r
 +     * @return Vector<OCFile>\r
 +     */\r
 +    public Vector<OCFile> getFolders(Vector<OCFile> files) {\r
 +        Vector<OCFile> ret = new Vector<OCFile>(); \r
 +        OCFile current = null; \r
 +        for (int i=0; i<files.size(); i++) {\r
 +            current = files.get(i);\r
 +            if (current.isFolder()) {\r
 +                ret.add(current);\r
 +            }\r
 +        }\r
 +        return ret;\r
 +    }\r
 +    \r
 +    \r
 +    /**\r
 +     * Check if parent folder does not include 'S' permission and if file/folder\r
 +     * is shared with me\r
 +     * \r
 +     * @param file: OCFile\r
 +     * @return boolean: True if it is shared with me and false if it is not\r
 +     */\r
 +    private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
 +        return (mFile.getPermissions() != null \r
 +                && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
 +                && file.getPermissions() != null \r
 +                && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
 +    }\r
 +\r
 +    /**\r
 +     * Sorts list by Date\r
 +     * @param sortAscending true: ascending, false: descending\r
 +     */\r
 +    private void sortByDate(boolean sortAscending){\r
 +        final Integer val;\r
 +        if (sortAscending){\r
 +            val = 1;\r
 +        } else {\r
 +            val = -1;\r
 +        }\r
 +        \r
 +        Collections.sort(mFiles, new Comparator<OCFile>() {\r
 +            public int compare(OCFile o1, OCFile o2) {\r
 +                if (o1.isFolder() && o2.isFolder()) {\r
 +                    return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
 +                }\r
 +                else if (o1.isFolder()) {\r
 +                    return -1;\r
 +                } else if (o2.isFolder()) {\r
 +                    return 1;\r
 +                } else if (o1.getModificationTimestamp() == 0 || o2.getModificationTimestamp() == 0){\r
 +                    return 0;\r
 +                } else {\r
 +                    return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
 +                }\r
 +            }\r
 +        });\r
 +    }\r
 +\r
 +    /**\r
 +     * Sorts list by Size\r
 +     * @param sortAscending true: ascending, false: descending\r
 +     */\r
 +    private void sortBySize(boolean sortAscending){\r
 +        final Integer val;\r
 +        if (sortAscending){\r
 +            val = 1;\r
 +        } else {\r
 +            val = -1;\r
 +        }\r
 +        \r
 +        Collections.sort(mFiles, new Comparator<OCFile>() {\r
 +            public int compare(OCFile o1, OCFile o2) {\r
 +                if (o1.isFolder() && o2.isFolder()) {\r
 +                    return val * Long.compare(getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1))), \r
 +                                              getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2))));\r
 +                }\r
 +                else if (o1.isFolder()) {\r
 +                    return -1;\r
 +                } else if (o2.isFolder()) {\r
 +                    return 1;\r
 +                } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0){\r
 +                    return 0;\r
 +                } else {\r
 +                    return val * Long.compare(o1.getFileLength(), o2.getFileLength());\r
 +                }\r
 +            }\r
 +        });\r
 +    }\r
 +\r
 +    /**\r
 +     * Sorts list by Name\r
 +     * @param sortAscending true: ascending, false: descending\r
 +     */\r
 +    private void sortByName(boolean sortAscending){\r
 +        final Integer val;\r
 +        if (sortAscending){\r
 +            val = 1;\r
 +        } else {\r
 +            val = -1;\r
 +        }\r
 +\r
 +        Collections.sort(mFiles, new Comparator<OCFile>() {\r
 +            public int compare(OCFile o1, OCFile o2) {\r
 +                if (o1.isFolder() && o2.isFolder()) {\r
 +                    return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());\r
 +                } else if (o1.isFolder()) {\r
 +                    return -1;\r
 +                } else if (o2.isFolder()) {\r
 +                    return 1;\r
 +                }\r
 +                return val * new AlphanumComparator().compare(o1, o2);\r
 +            }\r
 +        });\r
 +    }\r
 +\r
 +    public void setSortOrder(Integer order, boolean ascending) {\r
-         SharedPreferences.Editor editor = appPreferences.edit();\r
++        SharedPreferences.Editor editor = mAppPreferences.edit();\r
 +        editor.putInt("sortOrder", order);\r
 +        editor.putBoolean("sortAscending", ascending);\r
 +        editor.commit();\r
 +        \r
-         sortOrder = order;\r
-         sortAscending = ascending;\r
++        mSortOrder = order;\r
++        mSortAscending = ascending;\r
 +        \r
 +        sortDirectory();\r
-     }    \r
++    }    
  }\r
@@@ -34,16 -34,15 +34,16 @@@ import com.owncloud.android.R
  import com.owncloud.android.datamodel.FileDataStorageManager;
  import com.owncloud.android.datamodel.OCFile;
  import com.owncloud.android.files.FileMenuFilter;
 +import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.ui.activity.FileDisplayActivity;
  import com.owncloud.android.ui.activity.MoveActivity;
 +import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
  import com.owncloud.android.ui.adapter.FileListListAdapter;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
  import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
  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.utils.Log_OC;
  
  /**
   * A Fragment that lists all files and folders in a given path.
   * @author David A. Velasco
   */
  public class OCFileListFragment extends ExtendedListFragment {
-     public void sortByName(boolean descending){
-         mAdapter.setSortOrder(0, descending);
-     } 
-     
-     public void sortByDate(boolean descending){
-         mAdapter.setSortOrder(1, descending);
 +    
 +    private static final String TAG = OCFileListFragment.class.getSimpleName();
 +
 +    private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ?
 +            OCFileListFragment.class.getPackage().getName() : "com.owncloud.android.ui.fragment";
 +            
 +    public final static String ARG_JUST_FOLDERS = MY_PACKAGE + ".JUST_FOLDERS";
 +    public final static String ARG_ALLOW_CONTEXTUAL_ACTIONS = MY_PACKAGE + ".ALLOW_CONTEXTUAL";
 +            
 +    private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
 +
 +    private FileFragment.ContainerActivity mContainerActivity;
 +   
 +    private OCFile mFile = null;
 +    private FileListListAdapter mAdapter;
 +    
 +    private OCFile mTargetFile;
 +
 +    
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public void onAttach(Activity activity) {
 +        super.onAttach(activity);
 +        Log_OC.e(TAG, "onAttach");
 +        try {
 +            mContainerActivity = (FileFragment.ContainerActivity) activity;
 +            
 +        } catch (ClassCastException e) {
 +            throw new ClassCastException(activity.toString() + " must implement " + 
 +                    FileFragment.ContainerActivity.class.getSimpleName());
 +        }
 +        try {
 +            setOnRefreshListener((OnEnforceableRefreshListener) activity);
 +            
 +        } catch (ClassCastException e) {
 +            throw new ClassCastException(activity.toString() + " must implement " + 
 +                    SwipeRefreshLayout.OnRefreshListener.class.getSimpleName());
 +        }
 +    }
 +
 +    
 +    @Override
 +    public void onDetach() {
 +        setOnRefreshListener(null);
 +        mContainerActivity = null;
 +        super.onDetach();
 +    }
 +
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public void onActivityCreated(Bundle savedInstanceState) {
 +        super.onActivityCreated(savedInstanceState);
 +        Log_OC.e(TAG, "onActivityCreated() start");
 +        
 +        if (savedInstanceState != null) {
 +            mFile = savedInstanceState.getParcelable(KEY_FILE);
 +        }
 +        
 +        Bundle args = getArguments();
 +        boolean justFolders = (args == null) ? false : args.getBoolean(ARG_JUST_FOLDERS, false); 
 +        mAdapter = new FileListListAdapter(
 +                justFolders,
 +                getSherlockActivity(), 
 +                mContainerActivity
 +        );
 +        setListAdapter(mAdapter);
 +        
 +        registerForContextMenu(getListView());
 +        getListView().setOnCreateContextMenuListener(this);
 +  }
 +    
 +    /**
 +     * Saves the current listed folder.
 +     */
 +    @Override
 +    public void onSaveInstanceState (Bundle outState) {
 +        super.onSaveInstanceState(outState);
 +        outState.putParcelable(KEY_FILE, mFile);
 +    }
 +    
 +    /**
 +     * Call this, when the user presses the up button.
 +     * 
 +     * Tries to move up the current folder one level. If the parent folder was removed from the 
 +     * database, it continues browsing up until finding an existing folders.
 +     * 
 +     * return       Count of folder levels browsed up.
 +     */
 +    public int onBrowseUp() {
 +        OCFile parentDir = null;
 +        int moveCount = 0;
 +        
 +        if(mFile != null){
 +            FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
 +            
 +            String parentPath = null;
 +            if (mFile.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) {
 +                parentPath = new File(mFile.getRemotePath()).getParent();
 +                parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : 
 +                      parentPath + OCFile.PATH_SEPARATOR;
 +                parentDir = storageManager.getFileByPath(parentPath);
 +                moveCount++;
 +            } 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);
 +                moveCount++;
 +            }   // exit is granted because storageManager.getFileByPath("/") never returns null
 +            mFile = parentDir;
 +            
 +            listDirectory(mFile);
 +
 +            onRefresh(false);
 +            
 +            // restore index and top position
 +            restoreIndexAndTopPosition();
 +            
 +        }   // else - should never happen now
 +   
 +        return moveCount;
 +    }
 +    
 +    @Override
 +    public void onItemClick(AdapterView<?> l, View v, int position, long id) {
 +        OCFile file = (OCFile) mAdapter.getItem(position);
 +        if (file != null) {
 +            if (file.isFolder()) { 
 +                // update state and view of this fragment
 +                listDirectory(file);
 +                // then, notify parent activity to let it update its state and view
 +                mContainerActivity.onBrowsedDownTo(file);
 +                // save index and top position
 +                saveIndexAndTopPosition(position);
 +                
 +            } else { /// Click on a file
 +                if (PreviewImageFragment.canBePreviewed(file)) {
 +                    // preview image - it handles the download, if needed
 +                    ((FileDisplayActivity)mContainerActivity).startImagePreview(file);
 +                    
 +                } else if (file.isDown()) {
 +                    if (PreviewMediaFragment.canBePreviewed(file)) {
 +                        // media preview
 +                        ((FileDisplayActivity)mContainerActivity).startMediaPreview(file, 0, true);
 +                    } else {
 +                        mContainerActivity.getFileOperationsHelper().openFile(file);
 +                    }
 +                    
 +                } else {
 +                    // automatic download, preview on finish
 +                    ((FileDisplayActivity)mContainerActivity).startDownloadForPreview(file);
 +                }
 +                    
 +            }
 +            
 +        } else {
 +            Log_OC.d(TAG, "Null object in ListAdapter!!");
 +        }
 +        
 +    }
 +    
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public void onCreateContextMenu (
 +            ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
 +        super.onCreateContextMenu(menu, v, menuInfo);
 +        Bundle args = getArguments();
 +        boolean allowContextualActions = 
 +                (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true); 
 +        if (allowContextualActions) {
 +            MenuInflater inflater = getSherlockActivity().getMenuInflater();
 +            inflater.inflate(R.menu.file_actions_menu, menu);
 +            AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
 +            OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
 +            
 +            if (mContainerActivity.getStorageManager() != null) {
 +                FileMenuFilter mf = new FileMenuFilter(
 +                    targetFile,
 +                    mContainerActivity.getStorageManager().getAccount(),
 +                    mContainerActivity,
 +                    getSherlockActivity()
 +                );
 +                mf.filter(menu);
 +            }
 +            
 +            /// additional restrictions for this fragment 
 +            // TODO allow in the future 'open with' for previewable files
 +            MenuItem item = menu.findItem(R.id.action_open_file_with);
 +            if (item != null) {
 +                item.setVisible(false);
 +                item.setEnabled(false);
 +            }
 +            /// TODO break this direct dependency on FileDisplayActivity... if possible
 +            FileFragment frag = ((FileDisplayActivity)getSherlockActivity()).getSecondFragment();
 +            if (frag != null && frag instanceof FileDetailFragment && 
 +                    frag.getFile().getFileId() == targetFile.getFileId()) {
 +                item = menu.findItem(R.id.action_see_details);
 +                if (item != null) {
 +                    item.setVisible(false);
 +                    item.setEnabled(false);
 +                }
 +            }
 +        }
 +    }
 +    
 +    
 +    /**
 +     * {@inhericDoc}
 +     */
 +    @Override
 +    public boolean onContextItemSelected (MenuItem item) {
 +        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();        
 +        mTargetFile = (OCFile) mAdapter.getItem(info.position);
 +        switch (item.getItemId()) {                
 +            case R.id.action_share_file: {
 +                mContainerActivity.getFileOperationsHelper().shareFileWithLink(mTargetFile);
 +                return true;
 +            }
 +            case R.id.action_unshare_file: {
 +                mContainerActivity.getFileOperationsHelper().unshareFileWithLink(mTargetFile);
 +                return true;
 +            }
 +            case R.id.action_rename_file: {
 +                RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
 +                dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
 +                return true;
 +            }
 +            case R.id.action_remove_file: {
 +                RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
 +                dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
 +                return true;
 +            }
 +            case R.id.action_download_file: 
 +            case R.id.action_sync_file: {
 +                mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
 +                return true;
 +            }
 +            case R.id.action_cancel_download:
 +            case R.id.action_cancel_upload: {
 +                ((FileDisplayActivity)mContainerActivity).cancelTransference(mTargetFile);
 +                return true;
 +            }
 +            case R.id.action_see_details: {
 +                mContainerActivity.showDetails(mTargetFile);
 +                return true;
 +            }
 +            case R.id.action_send_file: {
 +                // Obtain the file
 +                if (!mTargetFile.isDown()) {  // Download the file
 +                    Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
 +                    ((FileDisplayActivity)mContainerActivity).startDownloadForSending(mTargetFile);
 +                    
 +                } else {
 +                    mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
 +                }
 +                return true;
 +            }
 +            case R.id.action_move: {
 +                Intent action = new Intent(getActivity(), MoveActivity.class);
 +
 +                // Pass mTargetFile that contains info of selected file/folder
 +                action.putExtra(MoveActivity.EXTRA_TARGET_FILE, mTargetFile);
 +                getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
 +                return true;
 +            }
 +            default:
 +                return super.onContextItemSelected(item); 
 +        }
 +    }
 +
 +
 +    /**
 +     * Use this to query the {@link OCFile} that is currently
 +     * being displayed by this fragment
 +     * @return The currently viewed OCFile
 +     */
 +    public OCFile getCurrentFile(){
 +        return mFile;
 +    }
 +    
 +    /**
 +     * Calls {@link OCFileListFragment#listDirectory(OCFile)} with a null parameter
 +     */
 +    public void listDirectory(){
 +        listDirectory(null);
 +    }
 +    
 +    /**
 +     * Lists the given directory on the view. When the input parameter is null,
 +     * it will either refresh the last known directory. list the root
 +     * if there never was a directory.
 +     * 
 +     * @param directory File to be listed
 +     */
 +    public void listDirectory(OCFile directory) {
 +        FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
 +        if (storageManager != null) {
 +
 +            // Check input parameters for null
 +            if(directory == null){
 +                if(mFile != null){
 +                    directory = mFile;
 +                } else {
 +                    directory = storageManager.getFileByPath("/");
 +                    if (directory == null) return; // no files, wait for sync
 +                }
 +            }
 +        
 +        
 +            // If that's not a directory -> List its parent
 +            if(!directory.isFolder()){
 +                Log_OC.w(TAG, "You see, that is not a directory -> " + directory.toString());
 +                directory = storageManager.getFileById(directory.getParentId());
 +            }
 +
 +            mAdapter.swapDirectory(directory, storageManager);
 +            if (mFile == null || !mFile.equals(directory)) {
 +                mList.setSelectionFromTop(0, 0);
 +            }
 +            mFile = directory;
 +        }
 +    }
 +    
-     public void sortBySize(boolean descending){
-         mAdapter.setSortOrder(2, descending);
-     }    
++    public void sortByName(boolean descending) {
++        mAdapter.setSortOrder(FileListListAdapter.SORT_NAME, descending);
++    }
++
++    public void sortByDate(boolean descending) {
++        mAdapter.setSortOrder(FileListListAdapter.SORT_DATE, descending);
 +    }
 +
 -      private static final String TAG = OCFileListFragment.class.getSimpleName();
 -
 -      private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ? OCFileListFragment.class
 -                      .getPackage().getName() : "com.owncloud.android.ui.fragment";
 -
 -      public final static String ARG_JUST_FOLDERS = MY_PACKAGE + ".JUST_FOLDERS";
 -      public final static String ARG_ALLOW_CONTEXTUAL_ACTIONS = MY_PACKAGE + ".ALLOW_CONTEXTUAL";
 -
 -      private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
 -
 -      private FileFragment.ContainerActivity mContainerActivity;
 -
 -      private OCFile mFile = null;
 -      private FileListListAdapter mAdapter;
 -
 -      private OCFile mTargetFile;
 -
 -      /**
 -       * {@inheritDoc}
 -       */
 -      @Override
 -      public void onAttach(Activity activity) {
 -              super.onAttach(activity);
 -              Log_OC.e(TAG, "onAttach");
 -              try {
 -                      mContainerActivity = (FileFragment.ContainerActivity) activity;
 -
 -              } catch (ClassCastException e) {
 -                      throw new ClassCastException(activity.toString() + " must implement "
 -                                      + FileFragment.ContainerActivity.class.getSimpleName());
 -              }
 -              try {
 -                      setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) activity);
 -
 -              } catch (ClassCastException e) {
 -                      throw new ClassCastException(activity.toString() + " must implement "
 -                                      + SwipeRefreshLayout.OnRefreshListener.class.getSimpleName());
 -              }
 -      }
 -
 -      @Override
 -      public void onDetach() {
 -              setOnRefreshListener(null);
 -              mContainerActivity = null;
 -              super.onDetach();
 -      }
 -
 -      /**
 -       * {@inheritDoc}
 -       */
 -      @Override
 -      public void onActivityCreated(Bundle savedInstanceState) {
 -              super.onActivityCreated(savedInstanceState);
 -              Log_OC.e(TAG, "onActivityCreated() start");
 -
 -              if (savedInstanceState != null) {
 -                      mFile = savedInstanceState.getParcelable(KEY_FILE);
 -              }
 -
 -              Bundle args = getArguments();
 -              boolean justFolders = (args == null) ? false : args.getBoolean(ARG_JUST_FOLDERS, false);
 -              mAdapter = new FileListListAdapter(justFolders, getSherlockActivity(), mContainerActivity);
 -              setListAdapter(mAdapter);
 -
 -              registerForContextMenu(getListView());
 -              getListView().setOnCreateContextMenuListener(this);
 -      }
 -
 -      /**
 -       * Saves the current listed folder.
 -       */
 -      @Override
 -      public void onSaveInstanceState(Bundle outState) {
 -              super.onSaveInstanceState(outState);
 -              outState.putParcelable(KEY_FILE, mFile);
 -      }
 -
 -      /**
 -       * Call this, when the user presses the up button.
 -       * 
 -       * Tries to move up the current folder one level. If the parent folder was
 -       * removed from the database, it continues browsing up until finding an
 -       * existing folders.
 -       * 
 -       * return Count of folder levels browsed up.
 -       */
 -      public int onBrowseUp() {
 -              OCFile parentDir = null;
 -              int moveCount = 0;
 -
 -              if (mFile != null) {
 -                      FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
 -
 -                      String parentPath = null;
 -                      if (mFile.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) {
 -                              parentPath = new File(mFile.getRemotePath()).getParent();
 -                              parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath
 -                                              + OCFile.PATH_SEPARATOR;
 -                              parentDir = storageManager.getFileByPath(parentPath);
 -                              moveCount++;
 -                      } 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);
 -                              moveCount++;
 -                      } // exit is granted because storageManager.getFileByPath("/") never
 -                              // returns null
 -                      mFile = parentDir;
 -
 -                      listDirectory(mFile);
 -
 -                      onRefresh();
 -
 -                      // restore index and top position
 -                      restoreIndexAndTopPosition();
 -
 -              } // else - should never happen now
 -
 -              return moveCount;
 -      }
 -
 -      @Override
 -      public void onItemClick(AdapterView<?> l, View v, int position, long id) {
 -              OCFile file = (OCFile) mAdapter.getItem(position);
 -              if (file != null) {
 -                      if (file.isFolder()) {
 -                              // update state and view of this fragment
 -                              listDirectory(file);
 -                              // then, notify parent activity to let it update its state and
 -                              // view
 -                              mContainerActivity.onBrowsedDownTo(file);
 -                              // save index and top position
 -                              saveIndexAndTopPosition(position);
 -
 -                      } else { // / Click on a file
 -                              if (PreviewImageFragment.canBePreviewed(file)) {
 -                                      // preview image - it handles the download, if needed
 -                                      ((FileDisplayActivity) mContainerActivity).startImagePreview(file);
 -
 -                              } else if (file.isDown()) {
 -                                      if (PreviewMediaFragment.canBePreviewed(file)) {
 -                                              // media preview
 -                                              ((FileDisplayActivity) mContainerActivity).startMediaPreview(file, 0, true);
 -                                      } else {
 -                                              mContainerActivity.getFileOperationsHelper().openFile(file);
 -                                      }
 -
 -                              } else {
 -                                      // automatic download, preview on finish
 -                                      ((FileDisplayActivity) mContainerActivity).startDownloadForPreview(file);
 -                              }
 -
 -                      }
 -
 -              } else {
 -                      Log_OC.d(TAG, "Null object in ListAdapter!!");
 -              }
 -
 -      }
 -
 -      /**
 -       * {@inheritDoc}
 -       */
 -      @Override
 -      public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
 -              super.onCreateContextMenu(menu, v, menuInfo);
 -              Bundle args = getArguments();
 -              boolean allowContextualActions = (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
 -              if (allowContextualActions) {
 -                      MenuInflater inflater = getSherlockActivity().getMenuInflater();
 -                      inflater.inflate(R.menu.file_actions_menu, menu);
 -                      AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
 -                      OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
 -
 -                      if (mContainerActivity.getStorageManager() != null) {
 -                              FileMenuFilter mf = new FileMenuFilter(targetFile, mContainerActivity.getStorageManager()
 -                                              .getAccount(), mContainerActivity, getSherlockActivity());
 -                              mf.filter(menu);
 -                      }
 -
 -                      // / additional restrictions for this fragment
 -                      // TODO allow in the future 'open with' for previewable files
 -                      MenuItem item = menu.findItem(R.id.action_open_file_with);
 -                      if (item != null) {
 -                              item.setVisible(false);
 -                              item.setEnabled(false);
 -                      }
 -                      // / TODO break this direct dependency on FileDisplayActivity... if
 -                      // possible
 -                      FileFragment frag = ((FileDisplayActivity) getSherlockActivity()).getSecondFragment();
 -                      if (frag != null && frag instanceof FileDetailFragment
 -                                      && frag.getFile().getFileId() == targetFile.getFileId()) {
 -                              item = menu.findItem(R.id.action_see_details);
 -                              if (item != null) {
 -                                      item.setVisible(false);
 -                                      item.setEnabled(false);
 -                              }
 -                      }
 -              }
 -      }
 -
 -      /**
 -       * {@inhericDoc}
 -       */
 -      @Override
 -      public boolean onContextItemSelected(MenuItem item) {
 -              AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
 -              mTargetFile = (OCFile) mAdapter.getItem(info.position);
 -              switch (item.getItemId()) {
 -              case R.id.action_share_file: {
 -                      mContainerActivity.getFileOperationsHelper().shareFileWithLink(mTargetFile);
 -                      return true;
 -              }
 -              case R.id.action_unshare_file: {
 -                      mContainerActivity.getFileOperationsHelper().unshareFileWithLink(mTargetFile);
 -                      return true;
 -              }
 -              case R.id.action_rename_file: {
 -                      RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
 -                      dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
 -                      return true;
 -              }
 -              case R.id.action_remove_file: {
 -                      RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
 -                      dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
 -                      return true;
 -              }
 -              case R.id.action_download_file:
 -              case R.id.action_sync_file: {
 -                      mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
 -                      return true;
 -              }
 -              case R.id.action_cancel_download:
 -              case R.id.action_cancel_upload: {
 -                      ((FileDisplayActivity) mContainerActivity).cancelTransference(mTargetFile);
 -                      return true;
 -              }
 -              case R.id.action_see_details: {
 -                      mContainerActivity.showDetails(mTargetFile);
 -                      return true;
 -              }
 -              case R.id.action_send_file: {
 -                      // Obtain the file
 -                      if (!mTargetFile.isDown()) { // Download the file
 -                              Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
 -                              ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile);
 -
 -                      } else {
 -                              mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
 -                      }
 -                      return true;
 -              }
 -              case R.id.action_move: {
 -                      Intent action = new Intent(getActivity(), MoveActivity.class);
 -
 -                      // Pass mTargetFile that contains info of selected file/folder
 -                      action.putExtra(MoveActivity.EXTRA_TARGET_FILE, mTargetFile);
 -                      getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
 -                      return true;
 -              }
 -              default:
 -                      return super.onContextItemSelected(item);
 -              }
 -      }
 -
 -      /**
 -       * Use this to query the {@link OCFile} that is currently being displayed by
 -       * this fragment
 -       * 
 -       * @return The currently viewed OCFile
 -       */
 -      public OCFile getCurrentFile() {
 -              return mFile;
 -      }
 -
 -      /**
 -       * Calls {@link OCFileListFragment#listDirectory(OCFile)} with a null
 -       * parameter
 -       */
 -      public void listDirectory() {
 -              listDirectory(null);
 -      }
 -
 -      /**
 -       * Lists the given directory on the view. When the input parameter is null,
 -       * it will either refresh the last known directory. list the root if there
 -       * never was a directory.
 -       * 
 -       * @param directory
 -       *            File to be listed
 -       */
 -      public void listDirectory(OCFile directory) {
 -              FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
 -              if (storageManager != null) {
 -
 -                      // Check input parameters for null
 -                      if (directory == null) {
 -                              if (mFile != null) {
 -                                      directory = mFile;
 -                              } else {
 -                                      directory = storageManager.getFileByPath("/");
 -                                      if (directory == null)
 -                                              return; // no files, wait for sync
 -                              }
 -                      }
 -
 -                      // If that's not a directory -> List its parent
 -                      if (!directory.isFolder()) {
 -                              Log_OC.w(TAG, "You see, that is not a directory -> " + directory.toString());
 -                              directory = storageManager.getFileById(directory.getParentId());
 -                      }
 -
 -                      mAdapter.swapDirectory(directory, storageManager);
 -                      if (mFile == null || !mFile.equals(directory)) {
 -                              mList.setSelectionFromTop(0, 0);
 -                      }
 -                      mFile = directory;
 -              }
 -      }
 -
 -      public void sortByName(boolean descending) {
 -              mAdapter.setSortOrder(FileListListAdapter.SORT_NAME, descending);
 -      }
 -
 -      public void sortByDate(boolean descending) {
 -              mAdapter.setSortOrder(FileListListAdapter.SORT_DATE, descending);
 -      }
 -
 -      public void sortBySize(boolean descending) {
 -              mAdapter.setSortOrder(FileListListAdapter.SORT_SIZE, descending);
 -      }
++    public void sortBySize(boolean descending) {
++        mAdapter.setSortOrder(FileListListAdapter.SORT_SIZE, descending);
++    }  
  }