X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/86cec34b2534b770d9e07700c6b64ebea1c1296f..be51b2c4aa8fff92f73bd0846ee31a69cc36c528:/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java diff --git a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java b/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java index 9c56263b..54ed582f 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java +++ b/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java @@ -18,7 +18,9 @@ package com.owncloud.android.ui.preview; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import java.util.Vector; @@ -30,6 +32,7 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -43,8 +46,8 @@ import com.owncloud.android.ui.fragment.FileFragment; * * @author David A. Velasco */ -public class PreviewImagePagerAdapter extends PagerAdapter { -//public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { +//public class PreviewImagePagerAdapter extends PagerAdapter { +public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { private static final String TAG = PreviewImagePagerAdapter.class.getSimpleName(); @@ -52,13 +55,18 @@ public class PreviewImagePagerAdapter extends PagerAdapter { private Account mAccount; private Set mObsoleteFragments; private Set mObsoletePositions; + private Set mDownloadErrors; private DataStorageManager mStorageManager; + private Map mCachedFragments; + + /* private final FragmentManager mFragmentManager; private FragmentTransaction mCurTransaction = null; private ArrayList mSavedState = new ArrayList(); private ArrayList mFragments = new ArrayList(); private Fragment mCurrentPrimaryItem = null; + */ /** * Constructor. @@ -68,7 +76,7 @@ public class PreviewImagePagerAdapter extends PagerAdapter { * @param storageManager Bridge to database. */ public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder, Account account, DataStorageManager storageManager) { - //super(fragmentManager); + super(fragmentManager); if (fragmentManager == null) { throw new IllegalArgumentException("NULL FragmentManager instance"); @@ -85,7 +93,9 @@ public class PreviewImagePagerAdapter extends PagerAdapter { mImageFiles = mStorageManager.getDirectoryImages(parentFolder); mObsoleteFragments = new HashSet(); mObsoletePositions = new HashSet(); - mFragmentManager = fragmentManager; + mDownloadErrors = new HashSet(); + //mFragmentManager = fragmentManager; + mCachedFragments = new HashMap(); } @@ -100,14 +110,20 @@ public class PreviewImagePagerAdapter extends PagerAdapter { public Fragment getItem(int i) { - Log.e(TAG, "GETTING PAGE " + i); OCFile file = mImageFiles.get(i); Fragment fragment = null; if (file.isDown()) { fragment = new PreviewImageFragment(file, mAccount, mObsoletePositions.contains(Integer.valueOf(i))); + + } else if (mDownloadErrors.contains(Integer.valueOf(i))) { + fragment = new FileDownloadFragment(file, mAccount, true); + ((FileDownloadFragment)fragment).setError(true); + mDownloadErrors.remove(Integer.valueOf(i)); + } else { fragment = new FileDownloadFragment(file, mAccount, mObsoletePositions.contains(Integer.valueOf(i))); } + mObsoletePositions.remove(Integer.valueOf(i)); return fragment; } @@ -125,15 +141,36 @@ public class PreviewImagePagerAdapter extends PagerAdapter { return mImageFiles.get(position).getFileName(); } + public void updateFile(int position, OCFile file) { - mObsoleteFragments.add(instantiateItem(null, position)); + FileFragment fragmentToUpdate = mCachedFragments.get(Integer.valueOf(position)); + if (fragmentToUpdate != null) { + mObsoleteFragments.add(fragmentToUpdate); + } mObsoletePositions.add(Integer.valueOf(position)); mImageFiles.set(position, file); } + + public void updateWithDownloadError(int position) { + FileFragment fragmentToUpdate = mCachedFragments.get(Integer.valueOf(position)); + if (fragmentToUpdate != null) { + mObsoleteFragments.add(fragmentToUpdate); + } + mDownloadErrors.add(Integer.valueOf(position)); + } + + public void clearErrorAt(int position) { + FileFragment fragmentToUpdate = mCachedFragments.get(Integer.valueOf(position)); + if (fragmentToUpdate != null) { + mObsoleteFragments.add(fragmentToUpdate); + } + mDownloadErrors.remove(Integer.valueOf(position)); + } + + @Override public int getItemPosition(Object object) { - Log.e(TAG, "getItemPosition "); if (mObsoleteFragments.contains(object)) { mObsoleteFragments.remove(object); return POSITION_NONE; @@ -142,27 +179,31 @@ public class PreviewImagePagerAdapter extends PagerAdapter { } - /** - * Should not be used for not already started fragments... - * - * @return - */ - protected FileFragment getFragmentAt(int position) { - try { - return (FileFragment) instantiateItem(null, position); - - } catch (Exception e) { - Log.e(TAG, "Wrong access to fragment in gallery ", e); - return null; - } + @Override + public Object instantiateItem(ViewGroup container, int position) { + Object fragment = super.instantiateItem(container, position); + mCachedFragments.put(Integer.valueOf(position), (FileFragment)fragment); + return fragment; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + mCachedFragments.remove(Integer.valueOf(position)); + super.destroyItem(container, position, object); } - /** + public boolean pendingErrorAt(int position) { + return mDownloadErrors.contains(Integer.valueOf(position)); + } + + + + /* -* * Called when a change in the shown pages is going to start being made. * * @param container The containing View which is displaying this adapter's page views. - */ + *- / @Override public void startUpdate(ViewGroup container) { Log.e(TAG, "** startUpdate"); @@ -308,5 +349,5 @@ public class PreviewImagePagerAdapter extends PagerAdapter { } } } - + */ }