Fixed bug when turning tablet with no file in the right fragment
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / preview / PreviewImageActivity.java
index a55ae16..be06c59 100644 (file)
@@ -2,9 +2,8 @@
  *   Copyright (C) 2012-2013  ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation, either version 2 of the License, or
- *   (at your option) any later version.
+ *   it under the terms of the GNU General Public License version 2,
+ *   as published by the Free Software Foundation.
  *
  *   This program is distributed in the hope that it will be useful,
  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,6 +16,8 @@
  */
 package com.owncloud.android.ui.preview;
 
+import org.apache.commons.httpclient.methods.PostMethod;
+
 import android.accounts.Account;
 import android.app.Dialog;
 import android.app.ProgressDialog;
@@ -28,6 +29,7 @@ import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.support.v4.app.Fragment;
 import android.support.v4.view.ViewPager;
 import android.util.Log;
 import android.view.MotionEvent;
@@ -134,7 +136,6 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
         position = (position >= 0) ? position : 0;
         mViewPager.setAdapter(mPreviewImagePagerAdapter); 
         mViewPager.setOnPageChangeListener(this);
-        Log.e(TAG, "Setting initial position " + position);
         mViewPager.setCurrentItem(position);
         if (position == 0 && !mFile.isDown()) {
             // this is necessary because mViewPager.setCurrentItem(0) just after setting the adapter does not result in a call to #onPageSelected(0) 
@@ -146,7 +147,6 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     @Override
     public void onStart() {
         super.onStart();
-        Log.e(TAG, "PREVIEW ACTIVITY ON START");
         mDownloadConnection = new PreviewImageServiceConnection();
         bindService(new Intent(this, FileDownloader.class), mDownloadConnection, Context.BIND_AUTO_CREATE);
         mUploadConnection = new PreviewImageServiceConnection();
@@ -167,11 +167,10 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
         public void onServiceConnected(ComponentName component, IBinder service) {
                 
             if (component.equals(new ComponentName(PreviewImageActivity.this, FileDownloader.class))) {
-                Log.e(TAG, "PREVIEW_IMAGE Download service connected");
                 mDownloaderBinder = (FileDownloaderBinder) service;
                 if (mRequestWaitingForBinder) {
                     mRequestWaitingForBinder = false;
-                    Log.e(TAG, "Simulating reselection of current page after connection of download binder");
+                    Log.d(TAG, "Simulating reselection of current page after connection of download binder");
                     onPageSelected(mViewPager.getCurrentItem());
                 }
                     
@@ -237,17 +236,17 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     @Override
     protected void onResume() {
         super.onResume();
-        Log.e(TAG, "PREVIEW ACTIVITY ONRESUME");
+        //Log.e(TAG, "ACTIVITY, ONRESUME");
         mDownloadFinishReceiver = new DownloadFinishReceiver();
         IntentFilter filter = new IntentFilter(FileDownloader.DOWNLOAD_FINISH_MESSAGE);
+        filter.addAction(FileDownloader.DOWNLOAD_ADDED_MESSAGE);
         registerReceiver(mDownloadFinishReceiver, filter);
     }
 
-    
     @Override
     protected void onPostResume() {
+        //Log.e(TAG, "ACTIVITY, ONPOSTRESUME");
         super.onPostResume();
-        Log.e(TAG, "PREVIEW ACTIVITY ONPOSTRESUME");
     }
     
     @Override
@@ -321,13 +320,15 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
         showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
         showDetailsIntent.putExtra(FileDetailActivity.EXTRA_MODE, FileDetailActivity.MODE_DETAILS);
         startActivity(showDetailsIntent);
+        int pos = mPreviewImagePagerAdapter.getFilePosition(file);
+        file = mPreviewImagePagerAdapter.getFileAt(pos);
+        
     }
 
     
     private void requestForDownload(OCFile file) {
-        Log.e(TAG, "REQUEST FOR DOWNLOAD : " + file.getFileName());
         if (mDownloaderBinder == null) {
-            Log.e(TAG, "requestForDownload called without binder to download service");
+            Log.d(TAG, "requestForDownload called without binder to download service");
             
         } else if (!mDownloaderBinder.isDownloading(mAccount, file)) {
             Intent i = new Intent(this, FileDownloader.class);
@@ -344,7 +345,6 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
      */
     @Override
     public void onPageSelected(int position) {
-        Log.e(TAG, "onPageSelected " + position);
         if (mDownloaderBinder == null) {
             mRequestWaitingForBinder = true;
             
@@ -352,15 +352,16 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
             OCFile currentFile = mPreviewImagePagerAdapter.getFileAt(position); 
             getSupportActionBar().setTitle(currentFile.getFileName());
             if (!currentFile.isDown()) {
-                requestForDownload(currentFile);
-                //updateCurrentDownloadFragment(true);        
+                if (!mPreviewImagePagerAdapter.pendingErrorAt(position)) {
+                    requestForDownload(currentFile);
+                }
             }
         }
     }
     
     /**
      * Called when the scroll state changes. Useful for discovering when the user begins dragging, 
-     * when the pager is automatically settling to the current page, or when it is fully stopped/idle.
+     * when the pager is automatically settling to the current page. when it is fully stopped/idle.
      * 
      * @param   State       The new scroll state (SCROLL_STATE_IDLE, _DRAGGING, _SETTLING
      */
@@ -383,15 +384,6 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     }
     
 
-    private void updateCurrentDownloadFragment(boolean transferring) {
-        FileFragment fragment = mPreviewImagePagerAdapter.getFragmentAt(mViewPager.getCurrentItem());
-        if (fragment instanceof FileDownloadFragment) {
-            ((FileDownloadFragment) fragment).updateView(transferring); 
-            //mViewPager.invalidate();
-        }
-    }
-    
-    
     /**
      * Class waiting for broadcast events from the {@link FielDownloader} service.
      * 
@@ -409,23 +401,19 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
                 OCFile file = mStorageManager.getFileByPath(downloadedRemotePath);
                 int position = mPreviewImagePagerAdapter.getFilePosition(file);
                 boolean downloadWasFine = intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false);
-                boolean isCurrent =  (mViewPager.getCurrentItem() == position);
+                //boolean isOffscreen =  Math.abs((mViewPager.getCurrentItem() - position)) <= mViewPager.getOffscreenPageLimit();
                 
-                if (position >= 0) {
-                    /// ITS MY BUSSINESS
-                    Log.e(TAG, "downloaded file FOUND in adapter");
+                if (position >= 0 && intent.getAction().equals(FileDownloader.DOWNLOAD_FINISH_MESSAGE)) {
                     if (downloadWasFine) {
-                        mPreviewImagePagerAdapter.updateFile(position, file);
-                        //Log.e(TAG, "BEFORE NOTIFY DATA SET CHANGED");
-                        mPreviewImagePagerAdapter.notifyDataSetChanged();
-                        //Log.e(TAG, "AFTER NOTIFY DATA SET CHANGED");
+                        mPreviewImagePagerAdapter.updateFile(position, file);   
                         
-                    } else if (isCurrent) {
-                        updateCurrentDownloadFragment(false);
+                    } else {
+                        mPreviewImagePagerAdapter.updateWithDownloadError(position);
                     }
+                    mPreviewImagePagerAdapter.notifyDataSetChanged();   // will trigger the creation of new fragments
                     
                 } else {
-                    Log.e(TAG, "DOWNLOADED FILE NOT FOUND IN ADAPTER ");
+                    Log.d(TAG, "Download finished, but the fragment is offscreen");
                 }
                 
             }
@@ -437,16 +425,8 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
 
     @Override
     public boolean onTouch(View v, MotionEvent event) {
-        Log.e(TAG, "TOUCH!!! **********************");
-        if (event.getAction() == MotionEvent.ACTION_DOWN) {
-            Log.e(TAG, "TOUCH DOWN!!! **********************");
-            
-        } else if (event.getAction() == MotionEvent.ACTION_UP) {
-            Log.e(TAG, "TOUCH UP!!! **********************");
-            toggleFullScreen();
-            
-        } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
-            Log.e(TAG, "TOUCH MOVE!!! **********************");
+        if (event.getAction() == MotionEvent.ACTION_UP) {
+           toggleFullScreen();
         }
         return true;
     }