package com.amaze.filemanager.services.asynctasks; /** * Created by Arpit on 25-01-2015. */ import android.os.AsyncTask; import com.amaze.filemanager.fragments.ZipViewer; import com.github.junrar.Archive; import com.github.junrar.rarfile.FileHeader; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; /** * Created by Vishal on 11/23/2014. */ public class RarHelperTask extends AsyncTask<File, Void, ArrayList<FileHeader>> { ZipViewer zipViewer; String dir; /** * AsyncTask to load RAR file items. * @param zipViewer the zipViewer fragment instance * @param dir */ public RarHelperTask(ZipViewer zipViewer, String dir) { this.zipViewer = zipViewer; this.dir = dir; } @Override protected void onPreExecute() { super.onPreExecute(); zipViewer.swipeRefreshLayout.setRefreshing(true); } @Override protected ArrayList<FileHeader> doInBackground(File... params) { ArrayList<FileHeader> elements = new ArrayList<>(); try { Archive zipfile = new Archive(params[0]); zipViewer.archive = zipfile; if (zipViewer.wholelistRar.size() == 0) { FileHeader fh = zipfile.nextFileHeader(); while (fh != null) { zipViewer.wholelistRar.add(fh); fh = zipfile.nextFileHeader(); } } if (dir == null || dir.trim().length() == 0 || dir.equals("")) { for (FileHeader header : zipViewer.wholelistRar) { String name = header.getFileNameString(); if (!name.contains("\\")) { elements.add(header); } } } else { for (FileHeader header : zipViewer.wholelistRar) { String name = header.getFileNameString(); if (name.substring(0, name.lastIndexOf("\\")).equals(dir)) { elements.add(header); } } } } catch (Exception e) { } Collections.sort(elements, new FileListSorter()); return elements; } @Override protected void onPostExecute(ArrayList<FileHeader> zipEntries) { super.onPostExecute(zipEntries); zipViewer.swipeRefreshLayout.setRefreshing(false); zipViewer.createRarviews(zipEntries, dir); } private class FileListSorter implements Comparator<FileHeader> { @Override public int compare(FileHeader file1, FileHeader file2) { if (file1.isDirectory() && !file2.isDirectory()) { return -1; } else if (file2.isDirectory() && !(file1).isDirectory()) { return 1; } return file1.getFileNameString().compareToIgnoreCase(file2.getFileNameString()); } } }