package com.openfarmanager.android.filesystem.filter; import android.content.res.Resources; import com.openfarmanager.android.App; import com.openfarmanager.android.core.archive.ArchiveScanner; import com.openfarmanager.android.filesystem.FileProxy; import com.openfarmanager.android.utils.Extensions; import java.text.Collator; /** * Vlad Namashko */ public class FilterFactory { private static Collator sCollator; static { sCollator = Collator.getInstance(); sCollator.setStrength(Collator.SECONDARY); } public static Filter createDirectoryUpFilter() { return new Filter() { public int doFilter(FileProxy file1, FileProxy file2) { return -Boolean.valueOf(file1.isDirectory()).compareTo(file2.isDirectory()); } }; } public static Filter createAlphabeticFilter() { return new Filter() { public int doFilter(FileProxy file1, FileProxy file2) { return sCollator.compare(file1.getName(), file2.getName()); } }; } public static Filter createSizeFilter() { return new Filter() { public int doFilter(FileProxy file1, FileProxy file2) { return Long.valueOf(file1.getSize()).compareTo(file2.getSize()); } }; } public static Filter createExtensionFilter() { return new Filter() { public int doFilter(FileProxy file1, FileProxy file2) { String name1 = file1.getName(); String name2 = file2.getName(); final int name1Dot = name1.lastIndexOf('.'); final int name2Dot = name2.lastIndexOf('.'); if ((name1Dot == -1) == (name2Dot == -1)) { // both or neither name1 = name1.substring(name1Dot + 1); name2 = name2.substring(name2Dot + 1); return name1.compareTo(name2); } else if (name1Dot == -1) { // only name2 has an extension, so name1 goes first return -1; } else { // only name1 has an extension, so name1 goes second return 1; } } }; } public static Filter createModifiedDateFilter() { return new Filter() { public int doFilter(FileProxy file1, FileProxy file2) { return Long.valueOf(file1.lastModifiedDate()).compareTo(file2.lastModifiedDate()); } }; } public static Filter createPreferredFilter() { Resources resources = App.sInstance.getResources(); int sortIndex = Extensions.tryParse(App.sInstance.getSettings().getFileSortValue(), 0); switch (sortIndex) { case 0: default: return createAlphabeticFilter(); case 1: return createSizeFilter(); case 2: return createModifiedDateFilter(); case 3: return createExtensionFilter(); } } public static ArchiveFilter createArchiveDirectoryUpFilter() { return new ArchiveFilter() { public int doFilter(ArchiveScanner.File file1, ArchiveScanner.File file2) { return -Boolean.valueOf(file1.isDirectory()).compareTo(file2.isDirectory()); } }; } public static ArchiveFilter createArchiveAlphabeticFilter() { return new ArchiveFilter() { public int doFilter(ArchiveScanner.File file1, ArchiveScanner.File file2) { return sCollator.compare(file1.getName(), file2.getName()); } }; } }