Move file utility methods to FileUtil class

This commit is contained in:
Peter Osterlund 2020-03-14 23:22:41 +01:00
parent e4d985afbe
commit bcfc4ab64b
3 changed files with 46 additions and 39 deletions

View File

@ -1642,14 +1642,14 @@ public class DroidFish extends Activity
break; break;
case RESULT_OI_PGN_LOAD: case RESULT_OI_PGN_LOAD:
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String pathName = getFilePathFromUri(data.getData()); String pathName = FileUtil.getFilePathFromUri(data.getData());
if (pathName != null) if (pathName != null)
loadPGNFromFile(pathName); loadPGNFromFile(pathName);
} }
break; break;
case RESULT_OI_PGN_SAVE: case RESULT_OI_PGN_SAVE:
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String pathName = getFilePathFromUri(data.getData()); String pathName = FileUtil.getFilePathFromUri(data.getData());
if (pathName != null) { if (pathName != null) {
if ((pathName.length() > 0) && !pathName.contains(".")) if ((pathName.length() > 0) && !pathName.contains("."))
pathName += ".pgn"; pathName += ".pgn";
@ -1659,7 +1659,7 @@ public class DroidFish extends Activity
break; break;
case RESULT_OI_FEN_LOAD: case RESULT_OI_FEN_LOAD:
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String pathName = getFilePathFromUri(data.getData()); String pathName = FileUtil.getFilePathFromUri(data.getData());
if (pathName != null) if (pathName != null)
loadFENFromFile(pathName); loadFENFromFile(pathName);
} }
@ -1668,7 +1668,7 @@ public class DroidFish extends Activity
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String fen = data.getStringExtra(Intent.EXTRA_TEXT); String fen = data.getStringExtra(Intent.EXTRA_TEXT);
if (fen == null) { if (fen == null) {
String pathName = getFilePathFromUri(data.getData()); String pathName = FileUtil.getFilePathFromUri(data.getData());
loadFENFromFile(pathName); loadFENFromFile(pathName);
} }
setFenHelper(fen, true); setFenHelper(fen, true);
@ -1702,12 +1702,6 @@ public class DroidFish extends Activity
ctrl.setGameMode(gameMode); ctrl.setGameMode(gameMode);
} }
public static String getFilePathFromUri(Uri uri) {
if (uri == null)
return null;
return uri.getPath();
}
private String getParseErrString(ChessParseError e) { private String getParseErrString(ChessParseError e) {
if (e.resourceId == -1) if (e.resourceId == -1)
return e.getMessage(); return e.getMessage();
@ -2400,7 +2394,7 @@ public class DroidFish extends Activity
} }
private Dialog selectBookDialog() { private Dialog selectBookDialog() {
String[] fileNames = findFilesInDirectory(bookDir, filename -> { String[] fileNames = FileUtil.findFilesInDirectory(bookDir, filename -> {
int dotIdx = filename.lastIndexOf("."); int dotIdx = filename.lastIndexOf(".");
if (dotIdx < 0) if (dotIdx < 0)
return false; return false;
@ -2480,7 +2474,8 @@ public class DroidFish extends Activity
} }
} }
String[] fileNames = findFilesInDirectory(engineDir, filename -> !reservedEngineName(filename)); String[] fileNames = FileUtil.findFilesInDirectory(engineDir,
fname -> !reservedEngineName(fname));
for (String file : fileNames) { for (String file : fileNames) {
ids.add(base + file); ids.add(base + file);
items.add(file); items.add(file);
@ -2535,7 +2530,7 @@ public class DroidFish extends Activity
private Dialog selectFileDialog(final String defaultDir, int selectFileMsg, int noFilesMsg, private Dialog selectFileDialog(final String defaultDir, int selectFileMsg, int noFilesMsg,
String settingsName, final Loader loader) { String settingsName, final Loader loader) {
setAutoMode(AutoMode.OFF); setAutoMode(AutoMode.OFF);
final String[] fileNames = findFilesInDirectory(defaultDir, null); final String[] fileNames = FileUtil.findFilesInDirectory(defaultDir, null);
final int numFiles = fileNames.length; final int numFiles = fileNames.length;
if (numFiles == 0) { if (numFiles == 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog.Builder builder = new AlertDialog.Builder(this);
@ -2565,7 +2560,7 @@ public class DroidFish extends Activity
private Dialog selectPgnFileSaveDialog() { private Dialog selectPgnFileSaveDialog() {
setAutoMode(AutoMode.OFF); setAutoMode(AutoMode.OFF);
final String[] fileNames = findFilesInDirectory(pgnDir, null); final String[] fileNames = FileUtil.findFilesInDirectory(pgnDir, null);
final int numFiles = fileNames.length; final int numFiles = fileNames.length;
int defaultItem = 0; int defaultItem = 0;
String currentPGNFile = settings.getString("currentPGNFile", ""); String currentPGNFile = settings.getString("currentPGNFile", "");
@ -3191,7 +3186,7 @@ public class DroidFish extends Activity
} }
private Dialog networkEngineDialog() { private Dialog networkEngineDialog() {
String[] fileNames = findFilesInDirectory(engineDir, filename -> { String[] fileNames = FileUtil.findFilesInDirectory(engineDir, filename -> {
if (reservedEngineName(filename)) if (reservedEngineName(filename))
return false; return false;
return EngineUtil.isNetEngine(filename); return EngineUtil.isNetEngine(filename);
@ -3456,29 +3451,6 @@ public class DroidFish extends Activity
} }
} }
private interface FileNameFilter {
boolean accept(String filename);
}
private String[] findFilesInDirectory(String dirName, final FileNameFilter filter) {
File extDir = Environment.getExternalStorageDirectory();
String sep = File.separator;
File dir = new File(extDir.getAbsolutePath() + sep + dirName);
File[] files = dir.listFiles(pathname -> {
if (!pathname.isFile())
return false;
return (filter == null) || filter.accept(pathname.getAbsolutePath());
});
if (files == null)
files = new File[0];
final int numFiles = files.length;
String[] fileNames = new String[numFiles];
for (int i = 0; i < files.length; i++)
fileNames[i] = files[i].getName();
Arrays.sort(fileNames, String.CASE_INSENSITIVE_ORDER);
return fileNames;
}
/** Save current game to a PGN file. */ /** Save current game to a PGN file. */
private void savePGNToFile(String pathName) { private void savePGNToFile(String pathName) {
String pgn = ctrl.getPGN(); String pgn = ctrl.getPGN();

View File

@ -18,7 +18,11 @@
package org.petero.droidfish; package org.petero.droidfish;
import android.net.Uri;
import android.os.Environment;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
@ -28,6 +32,7 @@ import java.io.OutputStream;
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
public class FileUtil { public class FileUtil {
/** Read a text file. Return string array with one string per line. */ /** Read a text file. Return string array with one string per line. */
@ -82,4 +87,33 @@ public class FileUtil {
return -1; return -1;
} }
} }
public interface FileNameFilter {
boolean accept(String filename);
}
public static String[] findFilesInDirectory(String dirName, final FileNameFilter filter) {
File extDir = Environment.getExternalStorageDirectory();
String sep = File.separator;
File dir = new File(extDir.getAbsolutePath() + sep + dirName);
File[] files = dir.listFiles(pathname -> {
if (!pathname.isFile())
return false;
return (filter == null) || filter.accept(pathname.getAbsolutePath());
});
if (files == null)
files = new File[0];
final int numFiles = files.length;
String[] fileNames = new String[numFiles];
for (int i = 0; i < files.length; i++)
fileNames[i] = files[i].getName();
Arrays.sort(fileNames, String.CASE_INSENSITIVE_ORDER);
return fileNames;
}
public static String getFilePathFromUri(Uri uri) {
if (uri == null)
return null;
return uri.getPath();
}
} }

View File

@ -23,6 +23,7 @@ import java.util.Locale;
import org.petero.droidfish.DroidFish; import org.petero.droidfish.DroidFish;
import org.petero.droidfish.DroidFishApp; import org.petero.droidfish.DroidFishApp;
import org.petero.droidfish.FileUtil;
import org.petero.droidfish.R; import org.petero.droidfish.R;
import org.petero.droidfish.Util; import org.petero.droidfish.Util;
import org.petero.droidfish.Util.MaterialDiff; import org.petero.droidfish.Util.MaterialDiff;
@ -625,7 +626,7 @@ public class EditBoard extends Activity {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String fen = data.getStringExtra(Intent.EXTRA_TEXT); String fen = data.getStringExtra(Intent.EXTRA_TEXT);
if (fen == null) { if (fen == null) {
String pathName = DroidFish.getFilePathFromUri(data.getData()); String pathName = FileUtil.getFilePathFromUri(data.getData());
Intent i = new Intent(EditBoard.this, LoadFEN.class); Intent i = new Intent(EditBoard.this, LoadFEN.class);
i.setAction("org.petero.droidfish.loadFen"); i.setAction("org.petero.droidfish.loadFen");
i.putExtra("org.petero.droidfish.pathname", pathName); i.putExtra("org.petero.droidfish.pathname", pathName);