From a3aca94694441e12e449a127903310148fdf60f0 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 26 Feb 2013 13:17:44 +0100 Subject: [PATCH] Fixed automatic download for a not downloaded image file when previewing it --- .../android/ui/activity/FileDisplayActivity.java | 29 ++++++++++++---------- .../FileDownloadFragment.java | 4 ++- .../android/ui/preview/PreviewImageActivity.java | 25 ++++++++++++++----- .../ui/preview/PreviewImagePagerAdapter.java | 1 - 4 files changed, 38 insertions(+), 21 deletions(-) rename src/com/owncloud/android/ui/{fragment => preview}/FileDownloadFragment.java (98%) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index bff3869e..855d0330 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/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); diff --git a/src/com/owncloud/android/ui/fragment/FileDownloadFragment.java b/src/com/owncloud/android/ui/preview/FileDownloadFragment.java similarity index 98% rename from src/com/owncloud/android/ui/fragment/FileDownloadFragment.java rename to src/com/owncloud/android/ui/preview/FileDownloadFragment.java index 6734c043..5331d5bf 100644 --- a/src/com/owncloud/android/ui/fragment/FileDownloadFragment.java +++ b/src/com/owncloud/android/ui/preview/FileDownloadFragment.java @@ -16,7 +16,7 @@ * along with this program. If not, see . * */ -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; diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index 6741e33f..0bc7e6b6 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/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(); } } diff --git a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java b/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java index c6fd7ca9..16d880f3 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java +++ b/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 -- 2.11.0