package com.datdo.mobilib.imageinput;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import android.os.Environment;
import android.util.Log;
import com.datdo.mobilib.util.MblUtils;
class MblImageFolderScanner {
private static final String TAG = MblUtils.getTag(MblImageFolderScanner.class);
public static String[] getAllImageFolders() {
List<String> ret = new ArrayList<String>();
List<String> mountPoints = getAllSdcardMountPoints();
for (String mp : mountPoints) {
for (String folder : MblImageInput.sFoldersToPickImages) {
ret.add(mp + "/" + folder);
}
}
return ret.toArray(new String[ret.size()]);
}
// reference this: http://stackoverflow.com/a/9315813
// also reference this: https://source.android.com/devices/tech/storage/config.html
private static List<String> getAllSdcardMountPoints() {
List<String> ret = new ArrayList<String>();
Scanner scanner = null;
try {
// add main sdcard which is always available
ret.add(Environment.getExternalStorageDirectory().getCanonicalPath());
scanner = new Scanner(new File("/system/etc/vold.fstab"));
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.startsWith("dev_mount")) {
String[] lineElements = line.split(" ");
String mountPoint = lineElements[2];
// what for?
if (mountPoint.contains(":")) {
mountPoint = mountPoint.substring(0, mountPoint.indexOf(":"));
}
if (mountPoint.contains("usb")) {
continue;
}
if (!isReadableFolderPath(mountPoint)) {
continue;
}
if (!ret.contains(mountPoint)) {
ret.add(mountPoint);
}
}
}
} catch (Exception e) {
Log.e(TAG, "Failed to scan sdcards", e);
} finally {
if (scanner != null) {
scanner.close();
}
}
return ret;
}
private static boolean isReadableFolderPath(String path) {
File folder = new File(path);
return folder.exists() && folder.isDirectory() && folder.canRead();
}
}