Merge branch 'develop' into refresh_folder_contents_when_browsed_into
authorDavid A. Velasco <dvelasco@solidgear.es>
Tue, 22 Oct 2013 06:26:40 +0000 (08:26 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Tue, 22 Oct 2013 06:26:40 +0000 (08:26 +0200)
1  2 
src/com/owncloud/android/files/services/FileUploader.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java
src/com/owncloud/android/ui/preview/PreviewImageActivity.java

@@@ -377,7 -377,7 +377,7 @@@ public class FileUploader extends Servi
                  return false;
              String targetKey = buildRemoteName(account, file);
              synchronized (mPendingUploads) {
 -                if (file.isDirectory()) {
 +                if (file.isFolder()) {
                      // this can be slow if there are many uploads :(
                      Iterator<String> it = mPendingUploads.keySet().iterator();
                      boolean found = false;
                      mPendingUploads.remove(uploadKey);
                      Log_OC.i(TAG, "Remove CurrentUploadItem from pending upload Item Map.");
                  }
+                 if (uploadResult.isException()) {
+                     // enforce the creation of a new client object for next uploads; this grant that a new socket will 
+                     // be created in the future if the current exception is due to an abrupt lose of network connection
+                     mUploadClient = null;
+                 }
              }
              
              /// notify result
          mNotification.contentView.setImageViewResource(R.id.status_icon, R.drawable.icon);
          
          /// includes a pending intent in the notification showing the details view of the file
-         Intent showDetailsIntent = null;
-         if (PreviewImageFragment.canBePreviewed(upload.getFile())) {
-             showDetailsIntent = new Intent(this, PreviewImageActivity.class);
-         } else {
-             showDetailsIntent = new Intent(this, FileDisplayActivity.class);
-         }
+         Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
          showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, upload.getFile());
          showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, upload.getAccount());
          showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
@@@ -22,8 -22,8 +22,8 @@@ import java.io.File
  
  import android.accounts.Account;
  import android.app.AlertDialog;
 -import android.app.ProgressDialog;
  import android.app.Dialog;
 +import android.app.ProgressDialog;
  import android.content.BroadcastReceiver;
  import android.content.ComponentName;
  import android.content.ContentResolver;
@@@ -60,6 -60,7 +60,6 @@@ import com.actionbarsherlock.view.Windo
  import com.owncloud.android.Log_OC;
  import com.owncloud.android.R;
  import com.owncloud.android.authentication.AccountAuthenticator;
 -import com.owncloud.android.datamodel.DataStorageManager;
  import com.owncloud.android.datamodel.FileDataStorageManager;
  import com.owncloud.android.datamodel.OCFile;
  import com.owncloud.android.files.services.FileDownloader;
@@@ -71,21 -72,21 +71,22 @@@ import com.owncloud.android.operations.
  import com.owncloud.android.operations.OnRemoteOperationListener;
  import com.owncloud.android.operations.RemoteOperation;
  import com.owncloud.android.operations.RemoteOperationResult;
 +import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
 -import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
 +import com.owncloud.android.operations.SynchronizeFolderOperation;
  import com.owncloud.android.syncadapter.FileSyncService;
  import com.owncloud.android.ui.dialog.EditNameDialog;
 +import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
  import com.owncloud.android.ui.dialog.LoadingDialog;
  import com.owncloud.android.ui.dialog.SslValidatorDialog;
 -import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
  import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
  import com.owncloud.android.ui.fragment.FileDetailFragment;
  import com.owncloud.android.ui.fragment.FileFragment;
  import com.owncloud.android.ui.fragment.OCFileListFragment;
  import com.owncloud.android.ui.preview.PreviewImageActivity;
+ import com.owncloud.android.ui.preview.PreviewImageFragment;
  import com.owncloud.android.ui.preview.PreviewMediaFragment;
  import com.owncloud.android.ui.preview.PreviewVideoActivity;
  
@@@ -102,7 -103,7 +103,7 @@@ OCFileListFragment.ContainerActivity, F
      private ArrayAdapter<String> mDirectories;
  
      /** Access point to the cached database for the current ownCloud {@link Account} */
 -    private DataStorageManager mStorageManager = null;
 +    private FileDataStorageManager mStorageManager = null;
  
      private SyncBroadcastReceiver mSyncBroadcastReceiver;
      private UploadFinishReceiver mUploadFinishReceiver;
      private View mRightFragmentContainer;
  
      private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
 +    private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS";
  
      public static final int DIALOG_SHORT_WAIT = 0;
      private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1;
  
      private OCFile mWaitingToPreview;
      private Handler mHandler;
 +    
 +    private boolean mSyncInProgress = false;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          /// Load of saved instance state
          if(savedInstanceState != null) {
              mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
 -
 +            mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
 +           
          } else {
              mWaitingToPreview = null;
 -        }
 +            mSyncInProgress = false;
 +        }        
  
          /// USER INTERFACE
  
          // Action bar setup
          mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
          getSupportActionBar().setHomeButtonEnabled(true);       // mandatory since Android ICS, according to the official documentation
 -        setSupportProgressBarIndeterminateVisibility(false);    // always AFTER setContentView(...) ; to work around bug in its implementation
 +        setSupportProgressBarIndeterminateVisibility(mSyncInProgress);    // always AFTER setContentView(...) ; to work around bug in its implementation        
          
          Log_OC.d(TAG, "onCreate() end");
      }
  
              /// Check whether the 'main' OCFile handled by the Activity is contained in the current Account
              OCFile file = getFile();
+             // get parent from path
+             String parentPath = "";
              if (file != null) {
                  if (file.isDown() && file.getLastSyncDateForProperties() == 0) {
                      // upload in progress - right now, files are not inserted in the local cache until the upload is successful
-                     if (mStorageManager.getFileById(file.getParentId()) == null) {
-                         file = null;    // not able to know the directory where the file is uploading
-                     }
+                     // get parent from path
+                     parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName()));
+                     if (mStorageManager.getFileByPath(parentPath) ==  null)
+                         file = null; // not able to know the directory where the file is uploading
                  } else {
                      file = mStorageManager.getFileByPath(file.getRemotePath());   // currentDir = null if not in the current Account
                  }
              }
              if (file == null) {
                  // fall back to root folder
 -                file = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);  // never returns null
 +                file = mStorageManager.getFileByPath(OCFile.ROOT_PATH);  // never returns null
              }
              setFile(file);
 -            mDirectories.clear();
 -            OCFile fileIt = file;
 -            while(fileIt != null && fileIt.getFileName() != OCFile.PATH_SEPARATOR) {
 -                if (fileIt.isDirectory()) {
 -                    mDirectories.add(fileIt.getFileName());
 -                }
 -                // get parent from path
 -                parentPath = fileIt.getRemotePath().substring(0, fileIt.getRemotePath().lastIndexOf(fileIt.getFileName()));
 -                fileIt = mStorageManager.getFileByPath(parentPath);
 -            }
 -            mDirectories.add(OCFile.PATH_SEPARATOR);
 +            setNavigationListWithFolder(file);
              if (!stateWasRecovered) {
                  Log_OC.e(TAG, "Initializing Fragments in onAccountChanged..");
                  initFragmentsWithFile();
 +                if (file.isFolder()) {
 +                    startSyncFolderOperation(file);
 +                }
                  
              } else {
 -                updateFragmentsVisibility(!file.isDirectory());
 -                updateNavigationElementsInActionBar(file.isDirectory() ? null : file);
 +                updateFragmentsVisibility(!file.isFolder());
 +                updateNavigationElementsInActionBar(file.isFolder() ? null : file);
              }
              
              
      }
  
  
-             fileIt = mStorageManager.getFileById(fileIt.getParentId());
 +    private void setNavigationListWithFolder(OCFile file) {
 +        mDirectories.clear();
 +        OCFile fileIt = file;
++        String parentPath;
 +        while(fileIt != null && fileIt.getFileName() != OCFile.ROOT_PATH) {
 +            if (fileIt.isFolder()) {
 +                mDirectories.add(fileIt.getFileName());
 +            }
++            //fileIt = mStorageManager.getFileById(fileIt.getParentId());
++            // get parent from path
++            parentPath = fileIt.getRemotePath().substring(0, fileIt.getRemotePath().lastIndexOf(fileIt.getFileName()));
++            fileIt = mStorageManager.getFileByPath(parentPath);
 +        }
 +        mDirectories.add(OCFile.PATH_SEPARATOR);
 +    }
 +
 +
      private void createMinFragments() {
          OCFileListFragment listOfFiles = new OCFileListFragment();
          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
  
      private Fragment chooseInitialSecondFragment(OCFile file) {
          Fragment secondFragment = null;
 -        if (file != null && !file.isDirectory()) {
 +        if (file != null && !file.isFolder()) {
              if (file.isDown() && PreviewMediaFragment.canBePreviewed(file) 
                      && file.getLastSyncDateForProperties() > 0  // temporal fix
                      ) {
              FileFragment second = getSecondFragment();
              OCFile currentDir = getCurrentDir();
              if((currentDir != null && currentDir.getParentId() != 0) || 
 -                    (second != null && second.getFile() != null)) {
 +                    (second != null && second.getFile() != null)) {                
                  onBackPressed(); 
 +                
              }
              break;
          }
  
      @Override
      public boolean onNavigationItemSelected(int itemPosition, long itemId) {
 -        int i = itemPosition;
 -        while (i-- != 0) {
 -            onBackPressed();
 -        }
 -        // the next operation triggers a new call to this method, but it's necessary to 
 -        // ensure that the name exposed in the action bar is the current directory when the 
 -        // user selected it in the navigation list
 -        if (itemPosition != 0)
 +        if (itemPosition != 0) {
 +            String targetPath = "";
 +            for (int i=itemPosition; i < mDirectories.getCount() - 1; i++) {
 +                targetPath = mDirectories.getItem(i) + OCFile.PATH_SEPARATOR + targetPath; 
 +            }
 +            targetPath = OCFile.PATH_SEPARATOR + targetPath;
 +            OCFile targetFolder = mStorageManager.getFileByPath(targetPath);
 +            if (targetFolder != null) {
 +                browseTo(targetFolder);
 +            }
 +            
 +            // the next operation triggers a new call to this method, but it's necessary to 
 +            // ensure that the name exposed in the action bar is the current directory when the 
 +            // user selected it in the navigation list
              getSupportActionBar().setSelectedNavigationItem(0);
 +        }
          return true;
      }
  
                      finish();
                      return;
                  }
 -                popDirname();
 -                listOfFiles.onBrowseUp();
 +                int levelsUp = listOfFiles.onBrowseUp();
 +                for (int i=0; i < levelsUp && mDirectories.getCount() > 1 ; i++) {
 +                    popDirname();
 +                }
              }
          }
          if (listOfFiles != null) {  // should never be null, indeed
              setFile(listOfFiles.getCurrentFile());
          }
          cleanSecondFragment();
 +
      }
  
      @Override
          Log_OC.e(TAG, "onSaveInstanceState() start");
          super.onSaveInstanceState(outState);
          outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
 +        outState.putBoolean(FileDisplayActivity.KEY_SYNC_IN_PROGRESS, mSyncInProgress);
 +
          Log_OC.d(TAG, "onSaveInstanceState() end");
      }
      
      /**
       * Pushes a directory to the drop down list
       * @param directory to push
 -     * @throws IllegalArgumentException If the {@link OCFile#isDirectory()} returns false.
 +     * @throws IllegalArgumentException If the {@link OCFile#isFolder()} returns false.
       */
      public void pushDirname(OCFile directory) {
 -        if(!directory.isDirectory()){
 +        if(!directory.isFolder()){
              throw new IllegalArgumentException("Only directories may be pushed!");
          }
          mDirectories.insert(directory.getFileName(), 0);
          public void onReceive(Context context, Intent intent) {
              boolean inProgress = intent.getBooleanExtra(FileSyncService.IN_PROGRESS, false);
              String accountName = intent.getStringExtra(FileSyncService.ACCOUNT_NAME);
 -
 -            Log_OC.d(TAG, "sync of account " + accountName + " is in_progress: " + inProgress);
 +            RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT);
  
-             if (getAccount() != null && accountName.equals(getAccount().name)) {  
+             if (getAccount() != null && accountName.equals(getAccount().name)
+                     && mStorageManager != null
+                     ) {  
  
                  String synchFolderRemotePath = intent.getStringExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH); 
  
 -                boolean fillBlankRoot = false;
 -                OCFile currentDir = getCurrentDir();
 -                if (currentDir == null) {
 -                    currentDir = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);
 -                    fillBlankRoot = (currentDir != null);                   
 -                }
 +                OCFile currentFile = (getFile() == null) ? null : mStorageManager.getFileByPath(getFile().getRemotePath());
 +                OCFile currentDir = (getCurrentDir() == null) ? null : mStorageManager.getFileByPath(getCurrentDir().getRemotePath());
  
 -                if ((synchFolderRemotePath != null && currentDir != null && (currentDir.getRemotePath().equals(synchFolderRemotePath)))
 -                        || fillBlankRoot ) {
 -                    if (!fillBlankRoot) 
 -                        currentDir = mStorageManager.getFileByPath(synchFolderRemotePath);
 -                    OCFileListFragment fileListFragment = getListOfFilesFragment();
 -                    if (fileListFragment != null) {
 -                        fileListFragment.listDirectory(currentDir);
 +                if (currentDir == null) {
 +                    // current folder was removed from the server 
 +                    Toast.makeText( FileDisplayActivity.this, 
 +                                    String.format(getString(R.string.sync_current_folder_was_removed), mDirectories.getItem(0)), 
 +                                    Toast.LENGTH_LONG)
 +                        .show();
 +                    browseToRoot();
 +                    
 +                } else {
 +                    if (currentFile == null && !getFile().isFolder()) {
 +                        // currently selected file was removed in the server, and now we know it
 +                        cleanSecondFragment();
 +                        currentFile = currentDir;
                      }
 -                    if (getSecondFragment() == null)
 -                        setFile(currentDir);
 +                
 +                    if (synchFolderRemotePath != null && currentDir.getRemotePath().equals(synchFolderRemotePath)) {
 +                        OCFileListFragment fileListFragment = getListOfFilesFragment();
 +                        if (fileListFragment != null) {
 +                            fileListFragment.listDirectory(currentDir);
 +                        }
 +                    }
 +                    setFile(currentFile);
                  }
                  
                  setSupportProgressBarIndeterminateVisibility(inProgress);
                  removeStickyBroadcast(intent);
 +                mSyncInProgress = inProgress;
  
              }
 -
 -            RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT);
 +            
              if (synchResult != null) {
                  if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) {
                      mLastSslUntrustedServerResult = synchResult;
              }
          }
      }
 -
 +    
  
      private class UploadFinishReceiver extends BroadcastReceiver {
          /**
       * {@inheritDoc}
       */
      @Override
 -    public DataStorageManager getStorageManager() {
 +    public FileDataStorageManager getStorageManager() {
          return mStorageManager;
      }
  
  
 +    public void browseToRoot() {
 +        OCFileListFragment listOfFiles = getListOfFilesFragment(); 
 +        if (listOfFiles != null) {  // should never be null, indeed
 +            while (mDirectories.getCount() > 1) {
 +                popDirname();
 +            }
 +            OCFile root = mStorageManager.getFileByPath(OCFile.ROOT_PATH);
 +            listOfFiles.listDirectory(root);
 +            setFile(listOfFiles.getCurrentFile());
 +            startSyncFolderOperation(root);
 +        }
 +        cleanSecondFragment();
 +    }
 +    
 +    
 +    public void browseTo(OCFile folder) {
 +        if (folder == null || !folder.isFolder()) {
 +            throw new IllegalArgumentException("Trying to browse to invalid folder " + folder);
 +        }
 +        OCFileListFragment listOfFiles = getListOfFilesFragment(); 
 +        if (listOfFiles != null) {
 +            setNavigationListWithFolder(folder);
 +            listOfFiles.listDirectory(folder);
 +            setFile(listOfFiles.getCurrentFile());
 +            startSyncFolderOperation(folder);
 +        } else {
 +            Log_OC.e(TAG, "Unexpected null when accessing list fragment");
 +        }
 +        cleanSecondFragment();
 +    }
 +
 +
      /**
       * {@inheritDoc}
       * 
      public void onBrowsedDownTo(OCFile directory) {
          pushDirname(directory);
          cleanSecondFragment();
 +        
 +        // Sync Folder
 +        startSyncFolderOperation(directory);
 +        
      }
  
      /**
      }
  
  
 +//    private void updateDisplayHomeAtSync(){
 +//        ActionBar actionBar = getSupportActionBar();
 +//        OCFile currentDir = getCurrentDir();
 +//        if (currentDir.getParentId() != DataStorageManager.ROOT_PARENT_ID) {
 +//            actionBar.setHomeButtonEnabled(!mSyncInProgress);
 +//            actionBar.setDisplayHomeAsUpEnabled(!mSyncInProgress);
 +//        }
 +//        else {
 +//            actionBar.setHomeButtonEnabled(true);
 +//            actionBar.setDisplayHomeAsUpEnabled(false);
 +//        }
 +//    }
 +//    
      /**
       * {@inheritDoc}
       */
  
          } else if (operation instanceof CreateFolderOperation) {
              onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
 -        }
 +            
 +        } 
      }
  
  
              refeshListOfFilesFragment();
  
          } else {
 -            //dismissDialog(DIALOG_SHORT_WAIT);
              dismissLoadingDialog();
              try {
                  Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); 
                  i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount());
                  startActivity(i);
  
 -            } else {
 -                Toast msg = Toast.makeText(this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG); 
 -                msg.show();
 -            }
 +            } 
  
          } else {
              if (operation.transferWasRequested()) {
      private OCFile getCurrentDir() {
          OCFile file = getFile();
          if (file != null) {
 -            if (file.isDirectory()) {
 +            if (file.isFolder()) {
                  return file;
              } else if (mStorageManager != null) {
-                 return mStorageManager.getFileById(file.getParentId());
+                 String parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName()));
+                 return mStorageManager.getFileByPath(parentPath);
              }
          }
          return null;
      }
 +    
 +    public void startSyncFolderOperation(OCFile folder) {
 +        long currentSyncTime = System.currentTimeMillis(); 
 +        
 +        mSyncInProgress = true;
 +                
 +        // perform folder synchronization
 +        RemoteOperation synchFolderOp = new SynchronizeFolderOperation( folder,  
 +                                                                        currentSyncTime, 
 +                                                                        false,
 +                                                                        getStorageManager(), 
 +                                                                        getAccount(), 
 +                                                                        getApplicationContext()
 +                                                                      );
 +        synchFolderOp.execute(getAccount(), this, null, null, this);
 +        
 +        setSupportProgressBarIndeterminateVisibility(true);
 +    }
  
 +    
 +//    public void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
 +//        int childCount = viewGroup.getChildCount();
 +//        for (int i = 0; i < childCount; i++) {
 +//          View view = viewGroup.getChildAt(i);
 +//          view.setEnabled(enabled);
 +//          view.setClickable(!enabled);
 +//          if (view instanceof ViewGroup) {
 +//            enableDisableViewGroup((ViewGroup) view, enabled);
 +//          }
 +//        }
 +//      }
  }
@@@ -64,6 -64,7 +64,7 @@@ import com.owncloud.android.ui.activity
  import com.owncloud.android.ui.activity.FileDisplayActivity;
  import com.owncloud.android.ui.dialog.EditNameDialog;
  import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
+ import com.owncloud.android.ui.preview.PreviewImageFragment;
  
  import eu.alefzero.webdav.OnDatatransferProgressListener;
  
@@@ -415,7 -416,7 +416,7 @@@ public class FileDetailFragment extend
      private void renameFile() {
          OCFile file = getFile();
          String fileName = file.getFileName();
 -        int extensionStart = file.isDirectory() ? -1 : fileName.lastIndexOf(".");
 +        int extensionStart = file.isFolder() ? -1 : fileName.lastIndexOf(".");
          int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length();
          EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this);
          dialog.show(getFragmentManager(), "nameeditdialog");
              }
              
          } else {
 -            mLastRemoteOperation = new SynchronizeFileOperation(file, null, mStorageManager, mAccount, true, false, getActivity());
 +            mLastRemoteOperation = new SynchronizeFileOperation(file, null, mStorageManager, mAccount, true, getActivity());
              mLastRemoteOperation.execute(mAccount, getSherlockActivity(), this, mHandler, getSherlockActivity());
              
              // update ui 
                          msg.show();
                      }
                      getSherlockActivity().removeStickyBroadcast(intent);    // not the best place to do this; a small refactorization of BroadcastReceivers should be done
+                     
                      updateFileDetails(false, false);    // it updates the buttons; must be called although !uploadWasFine; interrupted uploads still leave an incomplete file in the server
+                    
+                     // Force the preview if the file is an image
+                     if (uploadWasFine && PreviewImageFragment.canBePreviewed(getFile())) {
+                         ((FileDisplayActivity) mContainerActivity).startImagePreview(getFile());
+                     } 
                  }
              }
          }
                  i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, mAccount);
                  startActivity(i);
                  
 -            } else {
 -                Toast msg = Toast.makeText(getActivity(), R.string.sync_file_fail_msg, Toast.LENGTH_LONG); 
 -                msg.show();
 -            }
 +            } 
              
              if (file.isDown()) {
                  setButtonsForDown();
@@@ -16,8 -16,6 +16,6 @@@
   */
  package com.owncloud.android.ui.preview;
  
- import android.app.Dialog;
- import android.app.ProgressDialog;
  import android.content.BroadcastReceiver;
  import android.content.ComponentName;
  import android.content.Context;
@@@ -38,6 -36,7 +36,6 @@@ import com.actionbarsherlock.app.Action
  import com.actionbarsherlock.view.MenuItem;
  import com.actionbarsherlock.view.Window;
  import com.owncloud.android.authentication.AccountUtils;
 -import com.owncloud.android.datamodel.DataStorageManager;
  import com.owncloud.android.datamodel.FileDataStorageManager;
  import com.owncloud.android.datamodel.OCFile;
  import com.owncloud.android.files.services.FileDownloader;
@@@ -68,7 -67,7 +66,7 @@@ public class PreviewImageActivity exten
      
      private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
      
 -    private DataStorageManager mStorageManager;
 +    private FileDataStorageManager mStorageManager;
      
      private ViewPager mViewPager; 
      private PreviewImagePagerAdapter mPreviewImagePagerAdapter;    
      }
  
      private void initViewPager() {
-         OCFile parentFolder = mStorageManager.getFileById(getFile().getParentId());
+         // get parent from path
+         String parentPath = getFile().getRemotePath().substring(0, getFile().getRemotePath().lastIndexOf(getFile().getFileName()));
+         OCFile parentFolder = mStorageManager.getFileByPath(parentPath);
+         //OCFile parentFolder = mStorageManager.getFileById(getFile().getParentId());
          if (parentFolder == null) {
              // should not be necessary
 -            parentFolder = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);
 +            parentFolder = mStorageManager.getFileByPath(OCFile.ROOT_PATH);
          }
          mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(), parentFolder, getAccount(), mStorageManager);
          mViewPager = (ViewPager) findViewById(R.id.fragmentPager);
                      Log_OC.d(TAG, "Simulating reselection of current page after connection of download binder");
                      onPageSelected(mViewPager.getCurrentItem());
                  }
-                     
              } else if (component.equals(new ComponentName(PreviewImageActivity.this, FileUploader.class))) {
                  Log_OC.d(TAG, "Upload service connected");
                  mUploaderBinder = (FileUploaderBinder) service;
              if (!file.isImage()) {
                  throw new IllegalArgumentException("Non-image file passed as argument");
              }
-             mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
-             file = mStorageManager.getFileById(file.getFileId()); 
+             mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());            
+             
+             // Update file according to DB file, if it is possible
 -            if (file.getFileId() > DataStorageManager.ROOT_PARENT_ID)            
++            if (file.getFileId() > FileDataStorageManager.ROOT_PARENT_ID)            
+                 file = mStorageManager.getFileById(file.getFileId());
+             
              if (file != null) {
                  /// Refresh the activity according to the Account and OCFile set
                  setFile(file);  // reset after getting it fresh from mStorageManager