This commit is contained in:
Stefanos Kornilios Mitsis Poiitidis 2014-01-22 15:19:47 +02:00
commit ef6a83add6
9 changed files with 139 additions and 91 deletions

View File

@ -74,3 +74,7 @@ The original reicast team consisted of drk||Raziel (mostly just writing code), P
Special thanks Special thanks
-------------- --------------
In previous iterations a lot of people have worked on this, notably David Miller (aka, ZeZu), the nullDC team, friends from #pcsx2 and all over the world :) In previous iterations a lot of people have worked on this, notably David Miller (aka, ZeZu), the nullDC team, friends from #pcsx2 and all over the world :)
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/reicast/reicast-emulator/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

View File

@ -9,9 +9,12 @@
<uses-permission android:name="android.permission.VIBRATE"></uses-permission> <uses-permission android:name="android.permission.VIBRATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:glEsVersion="0x00020000" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/> <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
<application <application
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme" > android:theme="@style/AppTheme" >

View File

@ -28,6 +28,8 @@ public class EditVJoyActivity extends Activity {
PopupWindow popUp; PopupWindow popUp;
LayoutParams params; LayoutParams params;
private static float[][] vjoy_d_cached;
View addbut(int x, OnClickListener ocl) { View addbut(int x, OnClickListener ocl) {
ImageButton but = new ImageButton(this); ImageButton but = new ImageButton(this);
@ -63,6 +65,13 @@ public class EditVJoyActivity extends Activity {
} }
}), params); }), params);
hlay.addView(addbut(R.drawable.close, new OnClickListener() {
public void onClick(View v) {
mView.restoreCustomVjoyValues(vjoy_d_cached);
popUp.dismiss();
}
}), params);
popUp.setContentView(hlay); popUp.setContentView(hlay);
} }
@ -79,6 +88,8 @@ public class EditVJoyActivity extends Activity {
mView = new GL2JNIView(getApplication(), null, false, 24, 0, true); mView = new GL2JNIView(getApplication(), null, false, 24, 0, true);
setContentView(mView); setContentView(mView);
vjoy_d_cached = GL2JNIView.readCustomVjoyValues(getApplicationContext());
JNIdc.show_osd(); JNIdc.show_osd();
Toast.makeText(getApplicationContext(), Toast.makeText(getApplicationContext(),

View File

@ -16,13 +16,14 @@ import org.apache.commons.lang3.StringUtils;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.Vibrator; import android.os.Vibrator;
@ -54,7 +55,7 @@ public class FileBrowser extends Fragment {
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
private File sdcard = Environment.getExternalStorageDirectory(); private File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc"; private String home_directory = sdcard + "/dc";
private String game_directory = sdcard + "/"; private String game_directory = sdcard + "/dc";
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@ -154,9 +155,74 @@ public class FileBrowser extends Fragment {
if (!ImgBrowse) { if (!ImgBrowse) {
navigate(sdcard); navigate(sdcard);
} else { } else {
generate(ExternalFiles(new File(game_directory))); LocateGames mLocateGames = new LocateGames();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
mLocateGames
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, game_directory);
} else {
mLocateGames.execute(game_directory);
} }
} }
}
class LocateGames extends AsyncTask<String, Integer, List<File>> {
@Override
protected List<File> doInBackground(String... paths) {
final List<File> tFileList = new ArrayList<File>();
File storage = new File(paths[0]);
Resources resources = parentActivity.getResources();
// array of valid image file extensions
String[] mediaTypes = resources.getStringArray(R.array.images);
FilenameFilter[] filter = new FilenameFilter[mediaTypes.length];
int i = 0;
for (final String type : mediaTypes) {
filter[i] = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (dir.getName().startsWith(".")
|| name.startsWith(".")) {
return false;
} else {
return StringUtils.endsWithIgnoreCase(name, "."
+ type);
}
}
};
i++;
}
FileUtils fileUtils = new FileUtils();
File[] allMatchingFiles = fileUtils.listFilesAsArray(storage,
filter, 1);
for (File mediaFile : allMatchingFiles) {
tFileList.add(mediaFile);
}
return tFileList;
}
@Override
protected void onPostExecute(List<File> games) {
if (games != null && !games.isEmpty()) {
final LinearLayout list = (LinearLayout) parentActivity
.findViewById(R.id.game_list);
list.removeAllViews();
String heading = parentActivity
.getString(R.string.games_listing);
createListHeader(heading, list, true);
for (int i = 0; i < games.size(); i++) {
createListItem(list, games.get(i));
}
} else {
Toast.makeText(parentActivity, "Please configure a games directory",
Toast.LENGTH_LONG).show();
}
}
}
class DirSort implements Comparator<File> { class DirSort implements Comparator<File> {
@ -170,47 +236,13 @@ public class FileBrowser extends Fragment {
} }
} }
private List<File> ExternalFiles(File baseDirectory) {
// allows the input of a base directory for storage selection
final List<File> tFileList = new ArrayList<File>();
Resources resources = getResources();
// array of valid image file extensions
String[] mediaTypes = resources.getStringArray(R.array.images);
FilenameFilter[] filter = new FilenameFilter[mediaTypes.length];
int i = 0;
for (final String type : mediaTypes) {
filter[i] = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (dir.getName().startsWith(".") || name.startsWith(".")) {
return false;
} else {
return StringUtils.endsWithIgnoreCase(name, "." + type);
}
}
};
i++;
}
FileUtils fileUtils = new FileUtils();
File[] allMatchingFiles = fileUtils.listFilesAsArray(baseDirectory,
filter, -1);
for (File mediaFile : allMatchingFiles) {
tFileList.add(mediaFile);
}
return tFileList;
}
private void createListHeader(String header_text, View view, boolean hasBios) { private void createListHeader(String header_text, View view, boolean hasBios) {
if (hasBios) { if (hasBios) {
final View childview = parentActivity.getLayoutInflater().inflate( final View childview = parentActivity.getLayoutInflater().inflate(
R.layout.bios_list_item, null, false); R.layout.bios_list_item, null, false);
((TextView) childview.findViewById(R.id.item_name)) ((TextView) childview.findViewById(R.id.item_name))
.setText(getString(R.string.boot_bios)); .setText(parentActivity.getString(R.string.boot_bios));
childview.setTag(null); childview.setTag(null);
@ -255,41 +287,21 @@ public class FileBrowser extends Fragment {
} }
void generate(List<File> games) {
final LinearLayout list = (LinearLayout) parentActivity
.findViewById(R.id.game_list);
list.removeAllViews();
String heading = parentActivity.getString(R.string.games_listing);
createListHeader(heading, list, true);
for (int i = 0; i < games.size(); i++) {
createListItem(list, games.get(i));
}
}
private void createListItem(LinearLayout list, final File game) { private void createListItem(LinearLayout list, final File game) {
final String name = game.getName(); final String name = game.getName();
final View childview = parentActivity final View childview = parentActivity.getLayoutInflater().inflate(
.getLayoutInflater() R.layout.app_list_item, null, false);
.inflate(R.layout.app_list_item, null,
false);
((TextView) childview.findViewById(R.id.item_name)) ((TextView) childview.findViewById(R.id.item_name)).setText(name);
.setText(name);
((ImageView) childview.findViewById(R.id.item_icon)) ((ImageView) childview.findViewById(R.id.item_icon))
.setImageResource(game == null ? R.drawable.config .setImageResource(game == null ? R.drawable.config : game
: game.isDirectory() ? R.drawable.open_folder .isDirectory() ? R.drawable.open_folder
: name.toLowerCase( : name.toLowerCase(Locale.getDefault())
Locale.getDefault()) .endsWith(".gdi") ? R.drawable.gdi : name
.endsWith(".gdi") ? R.drawable.gdi .toLowerCase(Locale.getDefault()).endsWith(
: name.toLowerCase( ".cdi") ? R.drawable.cdi : name
Locale.getDefault()) .toLowerCase(Locale.getDefault()).endsWith(
.endsWith(
".cdi") ? R.drawable.cdi
: name.toLowerCase(
Locale.getDefault())
.endsWith(
".chd") ? R.drawable.chd ".chd") ? R.drawable.chd
: R.drawable.disk_unknown); : R.drawable.disk_unknown);
@ -299,23 +311,20 @@ public class FileBrowser extends Fragment {
// vw.findViewById(R.id.childview).setBackgroundColor(0xFFFFFFFF); // vw.findViewById(R.id.childview).setBackgroundColor(0xFFFFFFFF);
childview.findViewById(R.id.childview) childview.findViewById(R.id.childview).setOnClickListener(
.setOnClickListener(new OnClickListener() { new OnClickListener() {
public void onClick(View view) { public void onClick(View view) {
vib.vibrate(50); vib.vibrate(50);
mCallback mCallback.onGameSelected(game != null ? Uri
.onGameSelected(game != null ? Uri .fromFile(game) : Uri.EMPTY);
.fromFile(game)
: Uri.EMPTY);
vib.vibrate(250); vib.vibrate(250);
} }
}); });
childview.findViewById(R.id.childview) childview.findViewById(R.id.childview).setOnTouchListener(
.setOnTouchListener(new OnTouchListener() { new OnTouchListener() {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public boolean onTouch(View view, public boolean onTouch(View view, MotionEvent arg1) {
MotionEvent arg1) {
if (arg1.getActionMasked() == MotionEvent.ACTION_DOWN) { if (arg1.getActionMasked() == MotionEvent.ACTION_DOWN) {
view.setBackgroundColor(0xFF4F3FFF); view.setBackgroundColor(0xFF4F3FFF);
} else if (arg1.getActionMasked() == MotionEvent.ACTION_CANCEL } else if (arg1.getActionMasked() == MotionEvent.ACTION_CANCEL

View File

@ -267,6 +267,9 @@ public class GL2JNIActivity extends Activity {
OuyaController.BUTTON_MENU, key_CONT_START, OuyaController.BUTTON_MENU, key_CONT_START,
OuyaController.BUTTON_R1, key_CONT_START }; OuyaController.BUTTON_R1, key_CONT_START };
nVidia[playerNum] = true; nVidia[playerNum] = true;
globalLS_X[playerNum] = previousLS_X[playerNum] = 0.0f;
globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f;
} else if (!moga.isActive) { // Ouya controller } else if (!moga.isActive) { // Ouya controller
map[playerNum] = new int[] { map[playerNum] = new int[] {
OuyaController.BUTTON_O, key_CONT_A, OuyaController.BUTTON_O, key_CONT_A,

View File

@ -146,7 +146,7 @@ class GL2JNIView extends GLSurfaceView
prefs.edit().putFloat("touch_scale_analog", vjoy_d_custom[5][2]).commit(); prefs.edit().putFloat("touch_scale_analog", vjoy_d_custom[5][2]).commit();
} }
private static float[][] readCustomVjoyValues(Context context) { public static float[][] readCustomVjoyValues(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return new float[][] return new float[][]
@ -194,6 +194,14 @@ class GL2JNIView extends GLSurfaceView
requestLayout(); requestLayout();
} }
public void restoreCustomVjoyValues(float[][] vjoy_d_cached) {
vjoy_d_custom = vjoy_d_cached;
writeCustomVjoyValues(vjoy_d_cached, context);
resetEditMode();
requestLayout();
}
public GL2JNIView(Context context,String newFileName,boolean translucent,int depth,int stencil,boolean editVjoyMode) public GL2JNIView(Context context,String newFileName,boolean translucent,int depth,int stencil,boolean editVjoyMode)
{ {
super(context); super(context);

View File

@ -60,6 +60,9 @@ public class InputFragment extends Fragment {
} }
}); });
if (!MainActivity.isBiosExisting() || !MainActivity.isFlashExisting())
buttonLaunchEditor.setEnabled(false);
OnCheckedChangeListener touch_vibration = new OnCheckedChangeListener() { OnCheckedChangeListener touch_vibration = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, public void onCheckedChanged(CompoundButton buttonView,

View File

@ -37,8 +37,8 @@ public class MainActivity extends FragmentActivity implements
FileBrowser.OnItemSelectedListener, OptionsFragment.OnClickListener { FileBrowser.OnItemSelectedListener, OptionsFragment.OnClickListener {
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
private File sdcard = Environment.getExternalStorageDirectory(); private static File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc"; public static String home_directory = sdcard + "/dc";
private DrawerLayout mDrawerLayout; private DrawerLayout mDrawerLayout;
private ListView mDrawerList; private ListView mDrawerList;
@ -268,14 +268,21 @@ public class MainActivity extends FragmentActivity implements
} }
public void onGameSelected(Uri uri) { public static boolean isBiosExisting() {
File bios = new File(home_directory, "data/dc_boot.bin"); File bios = new File(home_directory, "data/dc_boot.bin");
File flash = new File(home_directory, "data/dc_flash.bin"); return bios.exists();
}
public static boolean isFlashExisting() {
File flash = new File(home_directory, "data/dc_flash.bin");
return flash.exists();
}
public void onGameSelected(Uri uri) {
String msg = null; String msg = null;
if (!bios.exists()) if (!isBiosExisting())
msg = getString(R.string.missing_bios, home_directory); msg = getString(R.string.missing_bios, home_directory);
else if (!flash.exists()) else if (!isFlashExisting())
msg = getString(R.string.missing_flash, home_directory); msg = getString(R.string.missing_flash, home_directory);
if (msg != null) { if (msg != null) {

View File

@ -27,7 +27,7 @@ public class OptionsFragment extends Fragment {
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
private File sdcard = Environment.getExternalStorageDirectory(); private File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc"; private String home_directory = sdcard + "/dc";
private String game_directory = sdcard + "/"; private String game_directory = sdcard + "/dc";
// Container Activity must implement this interface // Container Activity must implement this interface
public interface OnClickListener { public interface OnClickListener {