Add a check for extSdCard mounts (Samsung)

This commit is contained in:
TwistedUmbrella 2014-10-14 08:30:34 -04:00
parent f84d31d84a
commit 88beeb147d
2 changed files with 65 additions and 6 deletions

View File

@ -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<String> getExternalMounts() {
final HashSet<String> out = new HashSet<String>();
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<String> extStorage = FileBrowser.getExternalMounts();
if (extStorage != null && !extStorage.isEmpty()) {
for (Iterator<String> sd = extStorage.iterator(); sd.hasNext();) {
String sdCardPath = sd.next();
if (!sdCardPath.equals(sdcard)) {
sdcard = new File(sdCardPath);
}
}
}
navigate(sdcard);
}
list.invalidate();
}

View File

@ -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<String> extStorage = FileBrowser.getExternalMounts();
if (extStorage != null && !extStorage.isEmpty()) {
for (Iterator<String> 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();