* Copyright (C) 2012-2013 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*/
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;
import android.accounts.Account;
-import android.os.Bundle;
-import android.os.Parcelable;
import android.support.v4.app.Fragment;
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.util.Log;
-import android.view.View;
import android.view.ViewGroup;
import com.owncloud.android.datamodel.DataStorageManager;
private Account mAccount;
private Set<Object> mObsoleteFragments;
private Set<Integer> mObsoletePositions;
+ private Set<Integer> mDownloadErrors;
private DataStorageManager mStorageManager;
+ private Map<Integer, FileFragment> mCachedFragments;
+
/*
private final FragmentManager mFragmentManager;
private FragmentTransaction mCurTransaction = null;
mImageFiles = mStorageManager.getDirectoryImages(parentFolder);
mObsoleteFragments = new HashSet<Object>();
mObsoletePositions = new HashSet<Integer>();
+ mDownloadErrors = new HashSet<Integer>();
//mFragmentManager = fragmentManager;
+ mCachedFragments = new HashMap<Integer, FileFragment>();
}
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;
}
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) {
if (mObsoleteFragments.contains(object)) {
}
- /**
- * Should not be used for not already started fragments...
- *
- * @return
- */
- protected FileFragment getFragmentAt(int position) {
- try {
- return (FileFragment) instantiateItem(null, position);
-
- } catch (Exception 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.
*