mirror of
https://github.com/nextcloud/android.git
synced 2024-11-22 21:25:35 +03:00
Cancel load task when fragment becomes invisible (fixes crash in rotations)
This commit is contained in:
parent
766b51f497
commit
77554b2b51
1 changed files with 30 additions and 5 deletions
|
@ -83,6 +83,8 @@ public class PreviewImageFragment extends FileFragment {
|
|||
private static final String TAG = PreviewImageFragment.class.getSimpleName();
|
||||
|
||||
private boolean mIgnoreFirstSavedState;
|
||||
|
||||
private LoadBitmapTask mLoadBitmapTask = null;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -191,12 +193,22 @@ public class PreviewImageFragment extends FileFragment {
|
|||
public void onStart() {
|
||||
super.onStart();
|
||||
if (getFile() != null) {
|
||||
BitmapLoader bl = new BitmapLoader(mImageView, mMessageView, mProgressWheel);
|
||||
bl.execute(new String[]{getFile().getStoragePath()});
|
||||
mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
|
||||
mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
if (mLoadBitmapTask != null) {
|
||||
mLoadBitmapTask.cancel(true);
|
||||
mLoadBitmapTask = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
@ -330,7 +342,7 @@ public class PreviewImageFragment extends FileFragment {
|
|||
}
|
||||
|
||||
|
||||
private class BitmapLoader extends AsyncTask<String, Void, Bitmap> {
|
||||
private class LoadBitmapTask extends AsyncTask<String, Void, Bitmap> {
|
||||
|
||||
/**
|
||||
* Weak reference to the target {@link ImageView} where the bitmap will be loaded into.
|
||||
|
@ -366,7 +378,7 @@ public class PreviewImageFragment extends FileFragment {
|
|||
*
|
||||
* @param imageView Target {@link ImageView} where the bitmap will be loaded into.
|
||||
*/
|
||||
public BitmapLoader(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) {
|
||||
public LoadBitmapTask(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) {
|
||||
mImageViewRef = new WeakReference<ImageViewCustom>(imageView);
|
||||
mMessageViewRef = new WeakReference<TextView>(messageView);
|
||||
mProgressWheelRef = new WeakReference<ProgressBar>(progressWheel);
|
||||
|
@ -380,6 +392,8 @@ public class PreviewImageFragment extends FileFragment {
|
|||
String storagePath = params[0];
|
||||
try {
|
||||
|
||||
if (isCancelled()) return result;
|
||||
|
||||
File picture = new File(storagePath);
|
||||
|
||||
if (picture != null) {
|
||||
|
@ -389,6 +403,8 @@ public class PreviewImageFragment extends FileFragment {
|
|||
(new BufferedInputStream(new FileInputStream(picture))));
|
||||
}
|
||||
|
||||
if (isCancelled()) return result;
|
||||
|
||||
if (result == null) {
|
||||
mErrorMessageId = R.string.preview_image_error_unknown_format;
|
||||
Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath);
|
||||
|
@ -400,6 +416,8 @@ public class PreviewImageFragment extends FileFragment {
|
|||
} catch (OutOfMemoryError e) {
|
||||
Log_OC.e(TAG, "Out of memory occured for file " + storagePath, e);
|
||||
|
||||
if (isCancelled()) return result;
|
||||
|
||||
// If out of memory error when loading or rotating image, try to load it scaled
|
||||
result = loadScaledImage(storagePath);
|
||||
|
||||
|
@ -425,6 +443,13 @@ public class PreviewImageFragment extends FileFragment {
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled(Bitmap result) {
|
||||
if (result != null) {
|
||||
result.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Bitmap result) {
|
||||
hideProgressWheel();
|
||||
|
@ -434,7 +459,7 @@ public class PreviewImageFragment extends FileFragment {
|
|||
showErrorMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
private void showLoadedImage(Bitmap result) {
|
||||
if (mImageViewRef != null) {
|
||||
|
|
Loading…
Reference in a new issue