OC-2459: Ask for pincode, when click on an instant upload notification
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / preview / PreviewImagePagerAdapter.java
index 9c56263..de90b4b 100644 (file)
@@ -2,9 +2,8 @@
  *   Copyright (C) 2012-2013  ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
  *   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
  *
  *   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;
 
  */
 package com.owncloud.android.ui.preview;
 
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
 
 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.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.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 android.view.ViewGroup;
 
-import com.owncloud.android.datamodel.DataStorageManager;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.ui.fragment.FileFragment;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 
 /**
  * Adapter class that provides Fragment instances  
  * 
  * @author David A. Velasco
  */
 
 /**
  * Adapter class that provides Fragment instances  
  * 
  * @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();
-            
     private Vector<OCFile> mImageFiles;
     private Account mAccount;
     private Set<Object> mObsoleteFragments;
     private Set<Integer> mObsoletePositions;
     private Vector<OCFile> mImageFiles;
     private Account mAccount;
     private Set<Object> mObsoleteFragments;
     private Set<Integer> mObsoletePositions;
-    private DataStorageManager mStorageManager;
+    private Set<Integer> mDownloadErrors;
+    private FileDataStorageManager mStorageManager;
     
     
-    private final FragmentManager mFragmentManager;
-    private FragmentTransaction mCurTransaction = null;
-    private ArrayList<Fragment.SavedState> mSavedState = new ArrayList<Fragment.SavedState>();
-    private ArrayList<Fragment> mFragments = new ArrayList<Fragment>();
-    private Fragment mCurrentPrimaryItem = null;
+    private Map<Integer, FileFragment> mCachedFragments;
 
     /**
      * Constructor.
 
     /**
      * Constructor.
@@ -67,8 +57,8 @@ public class PreviewImagePagerAdapter extends PagerAdapter {
      * @param parentFolder      Folder where images will be searched for.
      * @param storageManager    Bridge to database.
      */
      * @param parentFolder      Folder where images will be searched for.
      * @param storageManager    Bridge to database.
      */
-    public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder, Account account, DataStorageManager storageManager) {
-        //super(fragmentManager);
+    public PreviewImagePagerAdapter(FragmentManager fragmentManager, OCFile parentFolder, Account account, FileDataStorageManager storageManager) {
+        super(fragmentManager);
         
         if (fragmentManager == null) {
             throw new IllegalArgumentException("NULL FragmentManager instance");
         
         if (fragmentManager == null) {
             throw new IllegalArgumentException("NULL FragmentManager instance");
@@ -82,10 +72,12 @@ public class PreviewImagePagerAdapter extends PagerAdapter {
 
         mAccount = account;
         mStorageManager = storageManager;
 
         mAccount = account;
         mStorageManager = storageManager;
-        mImageFiles = mStorageManager.getDirectoryImages(parentFolder); 
+        mImageFiles = mStorageManager.getFolderImages(parentFolder); 
         mObsoleteFragments = new HashSet<Object>();
         mObsoletePositions = new HashSet<Integer>();
         mObsoleteFragments = new HashSet<Object>();
         mObsoletePositions = new HashSet<Integer>();
-        mFragmentManager = fragmentManager;
+        mDownloadErrors = new HashSet<Integer>();
+        //mFragmentManager = fragmentManager;
+        mCachedFragments = new HashMap<Integer, FileFragment>();
     }
 
     
     }
 
     
@@ -100,14 +92,20 @@ public class PreviewImagePagerAdapter extends PagerAdapter {
 
     
     public Fragment getItem(int i) {
 
     
     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)));
         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)));
         }
         } else {
             fragment = new FileDownloadFragment(file, mAccount, mObsoletePositions.contains(Integer.valueOf(i)));
         }
+        mObsoletePositions.remove(Integer.valueOf(i));
         return fragment;
     }
 
         return fragment;
     }
 
@@ -125,15 +123,36 @@ public class PreviewImagePagerAdapter extends PagerAdapter {
         return mImageFiles.get(position).getFileName();
     }
 
         return mImageFiles.get(position).getFileName();
     }
 
+    
     public void updateFile(int position, OCFile file) {
     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);
     }
     
         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) {
     @Override
     public int getItemPosition(Object object) {
-        Log.e(TAG, "getItemPosition ");
         if (mObsoleteFragments.contains(object)) {
             mObsoleteFragments.remove(object);
             return POSITION_NONE;
         if (mObsoleteFragments.contains(object)) {
             mObsoleteFragments.remove(object);
             return POSITION_NONE;
@@ -142,27 +161,29 @@ 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.
      * 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");
     @Override
     public void startUpdate(ViewGroup container) {
         Log.e(TAG, "** startUpdate");
@@ -308,5 +329,5 @@ public class PreviewImagePagerAdapter extends PagerAdapter {
             }
         }
     }
             }
         }
     }
-    
+    */
 }
 }