summaryrefslogtreecommitdiffstats
path: root/android/source/src/java/org/libreoffice/ui/FileUtilities.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/source/src/java/org/libreoffice/ui/FileUtilities.java')
-rw-r--r--android/source/src/java/org/libreoffice/ui/FileUtilities.java283
1 files changed, 283 insertions, 0 deletions
diff --git a/android/source/src/java/org/libreoffice/ui/FileUtilities.java b/android/source/src/java/org/libreoffice/ui/FileUtilities.java
new file mode 100644
index 000000000000..b8bb7e922111
--- /dev/null
+++ b/android/source/src/java/org/libreoffice/ui/FileUtilities.java
@@ -0,0 +1,283 @@
+/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+package org.libreoffice.ui;
+
+import org.libreoffice.R;
+
+import org.libreoffice.storage.IFile;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FilenameFilter;
+import java.util.Map;
+import java.util.Collections;
+import java.util.List;
+import java.util.HashMap;
+import java.util.Comparator;
+import android.util.Log;
+import android.webkit.MimeTypeMap;
+
+public class FileUtilities {
+
+ private static String LOGTAG = FileUtilities.class.getSimpleName();
+
+ static final int ALL = -1;
+
+ // These have to be in sync with the file_view_modes resource.
+ static final int DOC = 0;
+ static final int CALC = 1;
+ static final int IMPRESS = 2;
+ static final int DRAWING = 3;
+
+ static final int UNKNOWN = 10;
+
+ static final int SORT_AZ = 0;
+ static final int SORT_ZA = 1;
+ /** Oldest Files First*/
+ static final int SORT_OLDEST = 2;
+ /** Newest Files First*/
+ static final int SORT_NEWEST = 3;
+ /** Largest Files First */
+ static final int SORT_LARGEST = 4;
+ /** Smallest Files First */
+ static final int SORT_SMALLEST = 5;
+
+ private static final Map<String, Integer> mExtnMap = new HashMap<String, Integer>();
+ private static final Map<String, String> extensionToMimeTypeMap = new HashMap<String, String>();
+ static {
+ // Please keep this in sync with AndroidManifest.xml
+
+ // ODF
+ mExtnMap.put(".odt", DOC);
+ mExtnMap.put(".odg", DRAWING);
+ mExtnMap.put(".odp", IMPRESS);
+ mExtnMap.put(".ods", CALC);
+ mExtnMap.put(".fodt", DOC);
+ mExtnMap.put(".fodg", DRAWING);
+ mExtnMap.put(".fodp", IMPRESS);
+ // mExtnMap.put(".fods", CALC);
+
+ // ODF templates
+ mExtnMap.put(".ott", DOC);
+ mExtnMap.put(".otg", DRAWING);
+ mExtnMap.put(".otp", IMPRESS);
+ mExtnMap.put(".ots", CALC);
+
+ // MS
+ mExtnMap.put(".rtf", DOC);
+ mExtnMap.put(".doc", DOC);
+ mExtnMap.put(".vsd", DRAWING);
+ mExtnMap.put(".vsdx", DRAWING);
+ mExtnMap.put(".pub", DRAWING);
+ mExtnMap.put(".ppt", IMPRESS);
+ // mExtnMap.put(".pps", IMPRESS);
+ mExtnMap.put(".xls", CALC);
+
+ // MS templates
+ mExtnMap.put(".dot", DOC);
+ mExtnMap.put(".pot", IMPRESS);
+ mExtnMap.put(".xlt", CALC);
+
+ // OOXML
+ mExtnMap.put(".docx", DOC);
+ mExtnMap.put(".pptx", IMPRESS);
+ // mExtnMap.put(".ppsx", IMPRESS);
+ mExtnMap.put(".xlsx", CALC);
+
+ // OOXML templates
+ mExtnMap.put(".dotx", DOC);
+ mExtnMap.put(".potx", IMPRESS);
+ mExtnMap.put(".xltx", CALC);
+
+ // Other
+ mExtnMap.put(".csv", CALC);
+ mExtnMap.put(".wps", DOC);
+ mExtnMap.put(".key", IMPRESS);
+ mExtnMap.put(".abw", DOC);
+ mExtnMap.put(".pmd", DRAWING);
+ mExtnMap.put(".emf", DRAWING);
+ mExtnMap.put(".svm", DRAWING);
+ mExtnMap.put(".wmf", DRAWING);
+ mExtnMap.put(".svg", DRAWING);
+
+ // Some basic MIME types
+ // Android's MimeTypeMap lacks some types that we need
+ extensionToMimeTypeMap.put("odb", "application/vnd.oasis.opendocument.database");
+ extensionToMimeTypeMap.put("odf", "application/vnd.oasis.opendocument.formula");
+ extensionToMimeTypeMap.put("odg", "application/vnd.oasis.opendocument.graphics");
+ extensionToMimeTypeMap.put("otg", "application/vnd.oasis.opendocument.graphics-template");
+ extensionToMimeTypeMap.put("odi", "application/vnd.oasis.opendocument.image");
+ extensionToMimeTypeMap.put("odp", "application/vnd.oasis.opendocument.presentation");
+ extensionToMimeTypeMap.put("otp", "application/vnd.oasis.opendocument.presentation-template");
+ extensionToMimeTypeMap.put("ods", "application/vnd.oasis.opendocument.spreadsheet");
+ extensionToMimeTypeMap.put("ots", "application/vnd.oasis.opendocument.spreadsheet-template");
+ extensionToMimeTypeMap.put("odt", "application/vnd.oasis.opendocument.text");
+ extensionToMimeTypeMap.put("odm", "application/vnd.oasis.opendocument.text-master");
+ extensionToMimeTypeMap.put("ott", "application/vnd.oasis.opendocument.text-template");
+ extensionToMimeTypeMap.put("oth", "application/vnd.oasis.opendocument.text-web");
+ }
+
+ private static final String getExtension(String filename) {
+ if (filename == null)
+ return "";
+ int nExt = filename.lastIndexOf('.');
+ if (nExt < 0)
+ return "";
+ return filename.substring(nExt);
+ }
+
+ private static final int lookupExtension(String filename) {
+ String extn = getExtension(filename);
+ if (!mExtnMap.containsKey(extn))
+ return UNKNOWN;
+ return mExtnMap.get(extn);
+ }
+
+ static int getType(String filename) {
+ int type = lookupExtension (filename);
+ Log.d(LOGTAG, "extn : " + filename + " -> " + type);
+ return type;
+ }
+
+ static String getMimeType(String filename) {
+ String extension = MimeTypeMap.getFileExtensionFromUrl(filename);
+ String mime = extensionToMimeTypeMap.get(extension);
+ if (mime == null) {
+ //fallback to Android's MimeTypeMap
+ mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
+ extension);
+ }
+ return mime;
+ }
+
+ // Filter by mode, and/or in future by filename/wildcard
+ static private boolean doAccept(String filename, int byMode, String byFilename) {
+ Log.d(LOGTAG, "doAccept : " + filename + " mode " + byMode + " byFilename " + byFilename);
+ if (filename == null)
+ return false;
+
+ if (byMode == ALL && byFilename == "") {
+ if (filename.startsWith(".")) {//ignore hidden files
+ return false;
+ }
+ return true;
+ }
+ // check extension
+ if (byMode != ALL) {
+ if (mExtnMap.get (getExtension (filename)) != byMode)
+ return false;
+ }
+ if (byFilename != "") {
+ // FIXME return false on a non-match
+ }
+ return true;
+ }
+
+ static FileFilter getFileFilter(final int mode) {
+ return new FileFilter() {
+ public boolean accept(File pathname) {
+ if (pathname.isDirectory())
+ return true;
+ if (lookupExtension(pathname.getName()) == UNKNOWN)
+ return false;
+ return doAccept(pathname.getName(), mode, "");
+ }
+ };
+ }
+
+ static FilenameFilter getFilenameFilter(final int mode) {
+ return new FilenameFilter() {
+ public boolean accept(File dir, String filename) {
+ if (new File(dir , filename).isDirectory())
+ return true;
+ return doAccept(filename, mode, "");
+ }
+ };
+ }
+
+ static void sortFiles(List<IFile> files, int sortMode) {
+ switch (sortMode) {
+ case SORT_AZ:
+ Collections.sort(files , new Comparator<IFile>() {
+ public int compare(IFile lhs, IFile rhs) {
+ return lhs.getName().compareTo(rhs.getName());
+ }
+ });
+ break;
+ case SORT_ZA:
+ Collections.sort(files , new Comparator<IFile>() {
+ public int compare(IFile lhs, IFile rhs) {
+ return rhs.getName().compareTo(lhs.getName());
+ }
+ });
+ break;
+ case SORT_OLDEST:
+ Collections.sort(files , new Comparator<IFile>() {
+ public int compare(IFile lhs, IFile rhs) {
+ return lhs.getLastModified().compareTo(rhs.getLastModified());
+ }
+ });
+ break;
+ case SORT_NEWEST:
+ Collections.sort(files , new Comparator<IFile>() {
+ public int compare(IFile lhs, IFile rhs) {
+ return rhs.getLastModified().compareTo(lhs.getLastModified());
+ }
+ });
+ break;
+ case SORT_LARGEST:
+ Collections.sort(files , new Comparator<IFile>() {
+ public int compare(IFile lhs, IFile rhs) {
+ return Long.valueOf(rhs.getSize()).compareTo(lhs.getSize());
+ }
+ });
+ break;
+ case SORT_SMALLEST:
+ Collections.sort(files , new Comparator<IFile>() {
+ public int compare(IFile lhs, IFile rhs) {
+ return Long.valueOf(lhs.getSize()).compareTo(rhs.getSize());
+ }
+ });
+ break;
+ default:
+ Log.e(LOGTAG, "uncatched sortMode: " + sortMode);
+ }
+ return;
+ }
+
+ static boolean isHidden(File file) {
+ if (file.getName().startsWith("."))
+ return true;
+ return false;
+ }
+
+ static boolean isThumbnail(File file) {
+ if (isHidden(file) && file.getName().endsWith(".png"))
+ return true;
+ return false;
+ }
+
+ static boolean hasThumbnail(File file) {
+ String filename = file.getName();
+ if (lookupExtension(filename) == DOC) // only do this for docs for now
+ {
+ // Will need another method to check if Thumb is up-to-date - or extend this one?
+ if (new File(file.getParent() , getThumbnailName(file)).isFile())
+ return true;
+ return false; // If it's a document with no thumb
+ }
+ return true;
+ }
+
+ static String getThumbnailName(File file) {
+ return "." + file.getName().split("[.]")[0] + ".png" ;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */