X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/fc2af5b03e9aeef0bcb985690dabb919984e874a..bcc972d63d3ed1d76b51a8a03a27e809983dc756:/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 22aa4953..de90b4bd 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java +++ b/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java @@ -2,9 +2,8 @@ * 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 @@ -17,26 +16,22 @@ */ 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 com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.ui.fragment.FileFragment; + 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; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.ui.fragment.FileDownloadFragment; +import com.owncloud.android.datamodel.FileDataStorageManager; /** * Adapter class that provides Fragment instances @@ -46,20 +41,14 @@ import com.owncloud.android.ui.fragment.FileDownloadFragment; //public class PreviewImagePagerAdapter extends PagerAdapter { public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { - private static final String TAG = PreviewImagePagerAdapter.class.getSimpleName(); - private Vector mImageFiles; private Account mAccount; private Set mObsoleteFragments; - private DataStorageManager mStorageManager; + private Set mObsoletePositions; + private Set mDownloadErrors; + private FileDataStorageManager mStorageManager; - /* - private final FragmentManager mFragmentManager; - private FragmentTransaction mCurTransaction = null; - private ArrayList mSavedState = new ArrayList(); - private ArrayList mFragments = new ArrayList(); - private Fragment mCurrentPrimaryItem = null; - */ + private Map mCachedFragments; /** * Constructor. @@ -68,9 +57,9 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { * @param parentFolder Folder where images will be searched for. * @param storageManager Bridge to database. */ - public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder, Account account, DataStorageManager storageManager) { + public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder, Account account, FileDataStorageManager storageManager) { super(fragmentManager); - + if (fragmentManager == null) { throw new IllegalArgumentException("NULL FragmentManager instance"); } @@ -83,8 +72,12 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { mAccount = account; mStorageManager = storageManager; - mImageFiles = mStorageManager.getDirectoryImages(parentFolder); + mImageFiles = mStorageManager.getFolderImages(parentFolder); mObsoleteFragments = new HashSet(); + mObsoletePositions = new HashSet(); + mDownloadErrors = new HashSet(); + //mFragmentManager = fragmentManager; + mCachedFragments = new HashMap(); } @@ -99,17 +92,27 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { 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); + 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); + fragment = new FileDownloadFragment(file, mAccount, mObsoletePositions.contains(Integer.valueOf(i))); } + mObsoletePositions.remove(Integer.valueOf(i)); return fragment; } + public int getFilePosition(OCFile file) { + return mImageFiles.indexOf(file); + } + @Override public int getCount() { return mImageFiles.size(); @@ -120,25 +123,67 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { return mImageFiles.get(position).getFileName(); } + public void updateFile(int position, OCFile file) { + FileFragment fragmentToUpdate = mCachedFragments.get(Integer.valueOf(position)); + if (fragmentToUpdate != null) { + mObsoleteFragments.add(fragmentToUpdate); + } + mObsoletePositions.add(Integer.valueOf(position)); mImageFiles.set(position, file); - mObsoleteFragments.add(instantiateItem(null, position)); } + + 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; } return super.getItemPosition(object); } + + + @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"); @@ -177,7 +222,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { } fragment.setMenuVisibility(false); mFragments.set(position, fragment); - Log.e(TAG, "** \t adding fragment at position " + position + ", containerId " + container.getId()); + //Log.e(TAG, "** \t adding fragment at position " + position + ", containerId " + container.getId()); mCurTransaction.add(container.getId(), fragment); return fragment; @@ -283,6 +328,6 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { } } } - } */ - + } + */ }