From: David A. Velasco Date: Fri, 1 Mar 2013 09:49:35 +0000 (+0100) Subject: Progress wheel shown in gallery while an image is getting loaded X-Git-Tag: oc-android-1.4.3~39^2~25 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/427a3e633149357010990bc684537e47d6a12e03 Progress wheel shown in gallery while an image is getting loaded --- diff --git a/res/layout/preview_image_fragment.xml b/res/layout/preview_image_fragment.xml index 91af0f8f..1cd8e040 100644 --- a/res/layout/preview_image_fragment.xml +++ b/res/layout/preview_image_fragment.xml @@ -36,6 +36,15 @@ android:background="@color/owncloud_white" tools:context=".ui.fragment.PreviewImageFragment" > + + mMessageViewRef; - private Throwable mThrowable; + /** + * Weak reference to the target {@link Progressbar} shown while the load is in progress. + * + * Using a weak reference will avoid memory leaks if the target ImageView is retired from memory before the load finishes. + */ + private final WeakReference mProgressWheelRef; + + + /** + * Error message to show when a load fails + */ + private int mErrorMessageId; /** @@ -484,10 +500,10 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag * * @param imageView Target {@link ImageView} where the bitmap will be loaded into. */ - public BitmapLoader(ImageView imageView, TextView messageView) { + public BitmapLoader(ImageView imageView, TextView messageView, ProgressBar progressWheel) { mImageViewRef = new WeakReference(imageView); mMessageViewRef = new WeakReference(messageView); - mThrowable = null; + mProgressWheelRef = new WeakReference(progressWheel); } @@ -553,56 +569,78 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag result = BitmapFactory.decodeFile(storagePath, options); //Log.d(TAG, "Image loaded - width: " + options.outWidth + ", loaded height: " + options.outHeight); + if (result == null) { + mErrorMessageId = R.string.preview_image_error_unknown_format; + Log.e(TAG, "File could not be loaded as a bitmap: " + storagePath); + } + + } catch (OutOfMemoryError e) { + mErrorMessageId = R.string.preview_image_error_unknown_format; + Log.e(TAG, "Out of memory occured for file " + storagePath, e); + + } catch (NoSuchFieldError e) { + mErrorMessageId = R.string.common_error_unknown; + Log.e(TAG, "Error from access to unexisting field despite protection; file " + storagePath, e); + } catch (Throwable t) { - result = null; - mThrowable = t; // error processing is delayed to #onPostExecute(Bitmap) - Log.e(TAG, "Unexpected error while creating image preview " + storagePath, t); + mErrorMessageId = R.string.common_error_unknown; + Log.e(TAG, "Unexpected error loading " + mFile.getStoragePath(), t); + } return result; } @Override protected void onPostExecute(Bitmap result) { - if (mImageViewRef != null && result != null) { + hideProgressWheel(); + if (result != null) { + showLoadedImage(result); + } else { + showErrorMessage(); + } + } + + private void showLoadedImage(Bitmap result) { + if (mImageViewRef != null) { final ImageView imageView = mImageViewRef.get(); if (imageView != null) { imageView.setImageBitmap(result); + imageView.setVisibility(View.VISIBLE); mBitmap = result; - if (mMessageViewRef != null) { - final TextView messageView = mMessageViewRef.get(); - if (messageView != null) { - messageView.setVisibility(View.GONE); - } - } } // else , silently finish, the fragment was destroyed - - } else if (mMessageViewRef != null && result == null) { - // error - int messageId; - if (mThrowable == null) { - messageId = R.string.preview_image_error_unknown_format; - Log.e(TAG, "File could not be loaded as a bitmap: " + mFile.getStoragePath()); - - } else if (mThrowable instanceof OutOfMemoryError) { - messageId = R.string.preview_image_error_unknown_format; - Log.e(TAG, "Out of memory occured for file " + mFile.getStoragePath(), mThrowable); - - } else if (mThrowable instanceof NoSuchFieldError) { - messageId = R.string.common_error_unknown; - Log.e(TAG, "Error from access to unexisting field despite protection; file " + mFile.getStoragePath(), mThrowable); - - } else { - messageId = R.string.common_error_unknown; - Log.e(TAG, "Unexpected error loading " + mFile.getStoragePath(), mThrowable); - } + } + if (mMessageViewRef != null) { + final TextView messageView = mMessageViewRef.get(); + if (messageView != null) { + messageView.setVisibility(View.GONE); + } // else , silently finish, the fragment was destroyed + } + } + + private void showErrorMessage() { + if (mImageViewRef != null) { + final ImageView imageView = mImageViewRef.get(); + if (imageView != null) { + // shows the default error icon + imageView.setVisibility(View.VISIBLE); + } // else , silently finish, the fragment was destroyed + } + if (mMessageViewRef != null) { final TextView messageView = mMessageViewRef.get(); if (messageView != null) { - messageView.setText(messageId); + messageView.setText(mErrorMessageId); messageView.setVisibility(View.VISIBLE); } // else , silently finish, the fragment was destroyed - } - + } + + private void hideProgressWheel() { + if (mProgressWheelRef != null) { + final ProgressBar progressWheel = mProgressWheelRef.get(); + if (progressWheel != null) { + progressWheel.setVisibility(View.GONE); + } + } } }