package com.doplgangr.secrecy.adapters; import android.content.Context; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.RelativeLayout; import com.doplgangr.secrecy.Config; import com.doplgangr.secrecy.CustomApp; import com.doplgangr.secrecy.exceptions.SecrecyFileException; import com.doplgangr.secrecy.filesystem.files.EncryptedFile; import com.doplgangr.secrecy.jobs.ImageLoadJob; import com.doplgangr.secrecy.utils.Util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import uk.co.senab.photoview.PhotoView; public class PhotoPagerAdapter extends FragmentStatePagerAdapter { private static ArrayList<EncryptedFile> encryptedFiles; private final Context context; public PhotoPagerAdapter(FragmentManager fm, Context context) { super(fm); encryptedFiles = new ArrayList<>(); this.context = context; } public void add(EncryptedFile encryptedFile) { String mimeType = Util.getFileTypeFromExtension(encryptedFile.getFileExtension()); if (mimeType != null) if (!mimeType.contains("image")) return; //abort if not images. encryptedFiles.add(encryptedFile); notifyDataSetChanged(); } public void sort(){ Comparator<EncryptedFile> comparator; switch (PreferenceManager.getDefaultSharedPreferences(context).getString( Config.VAULT_SORT, Config.VAULT_SORT_ALPHABETIC)) { case Config.VAULT_SORT_ALPHABETIC: comparator = Config.COMPARATOR_ENCRYPTEDFILE_ALPHABETIC; break; case Config.VAULT_SORT_FILETYPE: comparator = Config.COMPARATOR_ENCRYPTEDFILE_FILETYPE; break; case Config.VAULT_SORT_LASTMODIFIED: comparator = Config.COMPARATOR_ENCRYPTEDFILE_LASTMODIFIED; break; default: comparator = null; } if (comparator != null) { Collections.sort(encryptedFiles, comparator); } } @Override public int getCount() { return encryptedFiles.size(); } @Override public Fragment getItem(int position) { return PhotoFragment.newInstance(position); } public static class PhotoFragment extends Fragment { int mNum; private ImageLoadJob imageLoadJob = null; static PhotoFragment newInstance(int num) { PhotoFragment f = new PhotoFragment(); Bundle args = new Bundle(); args.putInt(Config.gallery_item_extra, num); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt(Config.gallery_item_extra) : 1; } /** * The Fragment's UI is just a simple text view showing its * instance number. */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final RelativeLayout relativeLayout = new RelativeLayout(container.getContext()); final EncryptedFile encryptedFile = encryptedFiles.get(mNum); final PhotoView photoView = new PhotoView(container.getContext()); relativeLayout.addView(photoView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); try { photoView.setImageBitmap(encryptedFile.getEncryptedThumbnail().getThumb(150)); } catch (SecrecyFileException e) { Util.log("No bitmap available!"); } RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); final ProgressBar pBar = new ProgressBar(container.getContext()); pBar.setIndeterminate(false); relativeLayout.addView(pBar, layoutParams); imageLoadJob = new ImageLoadJob(mNum, encryptedFile, photoView, pBar); CustomApp.jobManager.addJobInBackground(imageLoadJob); return relativeLayout; } @Override public void onPause(){ super.onPause(); if (imageLoadJob != null) { imageLoadJob.setObsolet(true); } } @Override public void onDestroy(){ super.onDestroy(); if (imageLoadJob != null) { imageLoadJob.setObsolet(true); } } } }