Sfoglia il codice sorgente

Fixed automatic download for a not downloaded image file when previewing it

David A. Velasco 12 anni fa
parent
commit
a3aca94694

+ 16 - 13
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -1055,9 +1055,13 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     public void onFileClick(OCFile file) {
 
         if (file != null && FilePreviewFragment.canBePreviewed(file)) {
-            if (file.isDown()) {
-                // preview it
-                startPreview(file);
+            if (file.isImage()) {
+                // preview image - it handles the download, if needed
+                startPreviewImage(file);
+                
+            } else if (file.isDown()) {
+                // general preview
+                startOtherPreview(file);
                 
             } else {
                 // automatic download, preview on finish
@@ -1069,21 +1073,20 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             startDetails(file);
         }
     }
+
+    private void startPreviewImage(OCFile file) {
+        Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class);
+        showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);
+        showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
+        startActivity(showDetailsIntent);
+    }
     
-    private void startPreview(OCFile file) {
-        if (mDualPane && 
-                !file.isImage() // this is a trick to get a quick-to-implement 'full screen' preview for images in landscape
-                ) {
+    private void startOtherPreview(OCFile file) {
+        if (mDualPane) {
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
             transaction.replace(R.id.file_details_container, new FilePreviewFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
             transaction.commit();
             
-        } else if (file.isImage()) {
-            Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class);
-            showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);
-            showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
-            startActivity(showDetailsIntent);
-            
         } else {
             Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);
             showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);

+ 3 - 1
src/com/owncloud/android/ui/fragment/FileDownloadFragment.java → src/com/owncloud/android/ui/preview/FileDownloadFragment.java

@@ -16,7 +16,7 @@
  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
-package com.owncloud.android.ui.fragment;
+package com.owncloud.android.ui.preview;
 
 import java.lang.ref.WeakReference;
 
@@ -41,6 +41,8 @@ import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
+import com.owncloud.android.ui.fragment.FileFragment;
+import com.owncloud.android.ui.fragment.FileFragment.ContainerActivity;
 
 import com.owncloud.android.R;
 

+ 19 - 6
src/com/owncloud/android/ui/preview/PreviewImageActivity.java

@@ -58,6 +58,7 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     public static final String TAG = PreviewImageActivity.class.getSimpleName();
     
     public static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
+    private static final String KEY_WAITING_FOR_BINDER = "WAITING_FOR_BINDER";
     
     private OCFile mFile;
     private OCFile mParentFolder;  
@@ -71,6 +72,8 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     private ServiceConnection mDownloadConnection, mUploadConnection = null;
     private FileUploaderBinder mUploaderBinder = null;
     private OCFile mWaitingToPreview = null;
+
+    private boolean mRequestWaitingForBinder;
     
 
     @Override
@@ -102,9 +105,12 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
             mParentFolder = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);
         }
 
-        mWaitingToPreview = null;
         if (savedInstanceState != null) {
             mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(KEY_WAITING_TO_PREVIEW);
+            mRequestWaitingForBinder = savedInstanceState.getBoolean(KEY_WAITING_FOR_BINDER);
+        } else {
+            mWaitingToPreview = null;
+            mRequestWaitingForBinder = false;
         }
         
         createViewPager();
@@ -131,6 +137,7 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putParcelable(KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
+        outState.putBoolean(KEY_WAITING_FOR_BINDER, mRequestWaitingForBinder);    
     }
 
 
@@ -143,6 +150,12 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
             if (component.equals(new ComponentName(PreviewImageActivity.this, FileDownloader.class))) {
                 Log.d(TAG, "Download service connected");
                 mDownloaderBinder = (FileDownloaderBinder) service;
+                if (mRequestWaitingForBinder) {
+                   if (mWaitingToPreview != null) {
+                       requestForDownload();
+                   }
+                   mRequestWaitingForBinder = false;
+                }
                     
             } else if (component.equals(new ComponentName(PreviewImageActivity.this, FileUploader.class))) {
                 Log.d(TAG, "Upload service connected");
@@ -271,12 +284,16 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
     
     private void requestForDownload() {
         Log.e(TAG, "REQUEST FOR DOWNLOAD : " + mWaitingToPreview.getFileName());
-        if (!mDownloaderBinder.isDownloading(mAccount, mWaitingToPreview)) {
+        if (mDownloaderBinder == null) {
+            mRequestWaitingForBinder = true;
+            
+        } else if (!mDownloaderBinder.isDownloading(mAccount, mWaitingToPreview)) {
             Intent i = new Intent(this, FileDownloader.class);
             i.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);
             i.putExtra(FileDownloader.EXTRA_FILE, mWaitingToPreview);
             startService(i);
         }
+        mViewPager.invalidate();
     }
 
     @Override
@@ -289,9 +306,6 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
                 Log.e(TAG, "BEFORE NOTIFY DATA SET CHANGED");
                 mPreviewImagePagerAdapter.notifyDataSetChanged();
                 Log.e(TAG, "AFTER NOTIFY DATA SET CHANGED");
-                //Log.e(TAG, "BEFORE INVALIDATE");
-                //mViewPager.postInvalidate();
-                //Log.e(TAG, "AFTER INVALIDATE");
             }
         }
     }
@@ -312,7 +326,6 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi
         } else {
             mWaitingToPreview = currentFile;
             requestForDownload();
-            mViewPager.invalidate();
         }
     }
     

+ 0 - 1
src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java

@@ -36,7 +36,6 @@ import android.view.ViewGroup;
 
 import com.owncloud.android.datamodel.DataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.ui.fragment.FileDownloadFragment;
 
 /**
  * Adapter class that provides Fragment instances