From 88beeb147da413787f45a1960377b59c256cb38d Mon Sep 17 00:00:00 2001 From: TwistedUmbrella Date: Tue, 14 Oct 2014 08:30:34 -0400 Subject: [PATCH] Add a check for extSdCard mounts (Samsung) --- .../src/com/reicast/emulator/FileBrowser.java | 49 ++++++++++++++++++- .../emulator/config/OptionsFragment.java | 22 +++++++-- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/shell/android/src/com/reicast/emulator/FileBrowser.java b/shell/android/src/com/reicast/emulator/FileBrowser.java index 86a65ab16..d09c2c32e 100644 --- a/shell/android/src/com/reicast/emulator/FileBrowser.java +++ b/shell/android/src/com/reicast/emulator/FileBrowser.java @@ -11,6 +11,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -84,6 +86,42 @@ public class FileBrowser extends Fragment { } } + + public static HashSet getExternalMounts() { + final HashSet out = new HashSet(); + String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4|fuse).*rw.*"; + String s = ""; + try { + final Process process = new ProcessBuilder().command("mount") + .redirectErrorStream(true).start(); + process.waitFor(); + final InputStream is = process.getInputStream(); + final byte[] buffer = new byte[1024]; + while (is.read(buffer) != -1) { + s = s + new String(buffer); + } + is.close(); + } catch (final Exception e) { + + } + + final String[] lines = s.split("\n"); + for (String line : lines) { + if (StringUtils.containsIgnoreCase(line, "secure")) + continue; + if (StringUtils.containsIgnoreCase(line, "asec")) + continue; + if (line.matches(reg)) { + String[] parts = line.split(" "); + for (String part : parts) { + if (part.startsWith("/")) + if (!StringUtils.containsIgnoreCase(part, "vold")) + out.add(part); + } + } + } + return out; + } // Container Activity must implement this interface public interface OnItemSelectedListener { @@ -228,7 +266,16 @@ public class FileBrowser extends Fragment { createListItem(list, items.get(i), i, array == R.array.images); } } else { - Toast.makeText(parentActivity, R.string.config_game, Toast.LENGTH_LONG).show(); + HashSet extStorage = FileBrowser.getExternalMounts(); + if (extStorage != null && !extStorage.isEmpty()) { + for (Iterator sd = extStorage.iterator(); sd.hasNext();) { + String sdCardPath = sd.next(); + if (!sdCardPath.equals(sdcard)) { + sdcard = new File(sdCardPath); + } + } + } + navigate(sdcard); } list.invalidate(); } diff --git a/shell/android/src/com/reicast/emulator/config/OptionsFragment.java b/shell/android/src/com/reicast/emulator/config/OptionsFragment.java index 22733e374..a3333a2ae 100644 --- a/shell/android/src/com/reicast/emulator/config/OptionsFragment.java +++ b/shell/android/src/com/reicast/emulator/config/OptionsFragment.java @@ -5,6 +5,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.HashSet; +import java.util.Iterator; import android.app.Activity; import android.content.SharedPreferences; @@ -23,14 +25,15 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; -import android.widget.Toast; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.Spinner; import android.widget.TextView; +import android.widget.Toast; +import com.reicast.emulator.FileBrowser; import com.reicast.emulator.R; import com.reicast.emulator.emu.GL2JNIView; import com.reicast.emulator.emu.JNIdc; @@ -81,12 +84,21 @@ public class OptionsFragment extends Fragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { - // setContentView(R.layout.activity_main); - - //parentActivity = getActivity(); - mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + + // Specialized handler for devices with an extSdCard mount for external + HashSet extStorage = FileBrowser.getExternalMounts(); + if (extStorage != null && !extStorage.isEmpty()) { + for (Iterator sd = extStorage.iterator(); sd.hasNext();) { + String sdCardPath = sd.next(); + if (!sdCardPath.equals(sdcard)) { +// home_directory = sdCardPath + "/dc"; + game_directory = sdCardPath + "/dc"; + } + } + } + home_directory = mPrefs.getString(Config.pref_home, home_directory); config = new Config(getActivity()); config.getConfigurationPrefs();