/* * Copyright (C) 2014 Michell Bak * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.miz.filesources; import android.util.Log; import com.miz.abstractclasses.AbstractFileSourceBrowser; import com.miz.functions.BrowserFileObject; import com.miz.functions.MizLib; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; public class BrowserFile extends AbstractFileSourceBrowser<File> { public BrowserFile(File folder) { super(folder); } @Override public boolean browse(File folder) { List<BrowserFileObject> list = new ArrayList<BrowserFileObject>(); List<File> orderedArray = new ArrayList<File>(); List<File> temp = new ArrayList<File>(); try { File[] listFiles = folder.listFiles(); if (listFiles == null) return false; Collections.addAll(orderedArray, listFiles); Collections.sort(orderedArray, new Comparator<File>() { @Override public int compare(File f1, File f2) { try { if (f1.isDirectory() && !f2.isDirectory()) { // Directory before non-directory return -1; } else if (!f1.isDirectory() && f2.isDirectory()) { // Non-directory after directory return 1; } } catch (Exception ignored) {} return f1.getName().toLowerCase(Locale.getDefault()).compareTo(f2.getName().toLowerCase(Locale.getDefault())); } }); for (File f : orderedArray) if (MizLib.isValidFilename(f.getName())) { list.add(new BrowserFileObject(f.getName(), f.isDirectory(), f.isDirectory() ? 0 : f.length())); temp.add(f); } listFiles = temp.toArray(new File[temp.size()]); temp.clear(); orderedArray.clear(); if (folder.getAbsolutePath().equals("/")) setParentFolder(null); else setParentFolder(new File(folder.getParent())); setCurrentFolder(folder); setCurrentFiles(listFiles); setBrowserFiles(list); } catch (Exception e) { Log.d("Mizuu", e.toString()); return false; } return browseParent(); } @Override public String getSubtitle() { return getCurrentFolder().getAbsolutePath(); } @Override public boolean browseParent() { File folder = getParentFolder(); List<BrowserFileObject> list = new ArrayList<BrowserFileObject>(); List<File> orderedArray = new ArrayList<File>(); List<File> temp = new ArrayList<File>(); if (folder == null) { setBrowserParentFiles(list); return true; } try { File[] listFiles = folder.listFiles(); if (listFiles == null) return false; for (File f : listFiles) if (f.isDirectory()) orderedArray.add(f); Collections.sort(orderedArray, new Comparator<File>() { @Override public int compare(File f1, File f2) { return f1.getName().toLowerCase(Locale.getDefault()).compareTo(f2.getName().toLowerCase(Locale.getDefault())); } }); for (File f : orderedArray) { list.add(new BrowserFileObject(f.getName(), true, 0)); temp.add(f); } listFiles = temp.toArray(new File[temp.size()]); temp.clear(); orderedArray.clear(); setCurrentParentFiles(listFiles); setBrowserParentFiles(list); } catch (Exception e) { Log.d("Mizuu", e.toString()); return false; } return true; } }