Merge branch 'master' of https://github.com/reicast/emulator into pandora
Conflicts: shell/android/src/com/reicast/emulator/GL2JNIActivity.java shell/android/src/com/reicast/emulator/GL2JNIView.java shell/android/src/com/reicast/emulator/JNIdc.java shell/android/src/com/reicast/emulator/MOGAInput.java
This commit is contained in:
commit
a15a5257b1
|
@ -1,5 +1,6 @@
|
|||
.DS_Store
|
||||
*.class
|
||||
*.orig
|
||||
|
||||
bin/
|
||||
gen/
|
||||
|
|
11
README.md
11
README.md
|
@ -18,11 +18,13 @@ Let's try to keep everything under a single project :)
|
|||
|
||||
To build for android
|
||||
--------------------
|
||||
```
|
||||
cd newdc\android\libnewdc
|
||||
android update project -p .
|
||||
Tools required:
|
||||
* Latest Android SDK and NDK (duh)
|
||||
* Ant
|
||||
|
||||
cd ..\..\..\reicast\android
|
||||
From project root directory:
|
||||
```
|
||||
cd shell\android
|
||||
android update project -p .
|
||||
|
||||
ndk-build -j 4
|
||||
|
@ -64,6 +66,7 @@ Team
|
|||
|
||||
You can check the currently active committers on [the pretty graphs page](https://github.com/reicast/reicast-emulator/graphs/contributors)
|
||||
|
||||
Chat on freenode #reicast.
|
||||
|
||||
The original reicast team consisted of drk||Raziel (mostly just writing code), PsyMan (debugging/testing and everything else) and a little bit of gb_away
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ else
|
|||
RZDCY_CXXFLAGS := \
|
||||
$(CFLAGS) -c -g -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \
|
||||
-D_ANDROID -DRELEASE -DTARGET_BEAGLE\
|
||||
-march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=softfp \
|
||||
-march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 \
|
||||
-frename-registers -fsingle-precision-constant -ffast-math \
|
||||
-ftree-vectorize -fomit-frame-pointer -fno-exceptions -fno-rtti -std=gnu++11
|
||||
endif
|
|
@ -78,7 +78,7 @@ void mcfg_CreateDevices()
|
|||
|
||||
void mcfg_DestroyDevices()
|
||||
{
|
||||
for (int i=0;i<3;i++)
|
||||
for (int j=0;j<5;j++)
|
||||
for (int i=0;i<=3;i++)
|
||||
for (int j=0;j<=5;j++)
|
||||
delete MapleDevices[i][j];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#include "maple_cfg.h"
|
||||
#include <time.h>
|
||||
|
||||
#include "deps/zlib/zlib.h"
|
||||
|
||||
const char* maple_sega_controller_name = "Dreamcast Controller";
|
||||
const char* maple_sega_vmu_name = "Visual Memory";
|
||||
const char* maple_sega_kbd_name = "Emulated Dreamcast Keyboard";
|
||||
|
@ -234,6 +236,28 @@ struct maple_sega_controller: maple_base
|
|||
This is pretty much done (?)
|
||||
*/
|
||||
#ifdef HAS_VMU
|
||||
|
||||
u8 vmu_default[] = {
|
||||
0x78,0x9c,0xed,0xd2,0x31,0x4e,0x02,0x61,0x10,0x06,0xd0,0x8f,0x04,0x28,0x4c,0x2c,
|
||||
0x28,0x2d,0x0c,0xa5,0x57,0xe0,0x16,0x56,0x16,0x76,0x14,0x1e,0xc4,0x03,0x50,0x98,
|
||||
0x50,0x40,0x69,0xc1,0x51,0x28,0xbc,0x8e,0x8a,0x0a,0xeb,0xc2,0xcf,0x66,0x13,0x1a,
|
||||
0x13,0xa9,0x30,0x24,0xe6,0xbd,0xc9,0x57,0xcc,0x4c,0x33,0xc5,0x2c,0xb3,0x48,0x6e,
|
||||
0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x4e,0xaf,0xdb,0xe4,0x7a,0xd2,0xcf,0x53,0x16,
|
||||
0x6d,0x46,0x99,0xb6,0xc9,0x78,0x9e,0x3c,0x5f,0x9c,0xfb,0x3c,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x80,0x5f,0xd5,0x45,0xfd,0xef,0xaa,0xca,0x6b,0xde,0xf2,0x9e,0x55,
|
||||
0x3e,0xf2,0x99,0xaf,0xac,0xb3,0x49,0x95,0xef,0xd4,0xa9,0x9a,0xdd,0xdd,0x0f,0x9d,
|
||||
0x52,0xca,0xc3,0x91,0x7f,0xb9,0x9a,0x0f,0x6e,0x92,0xfb,0xee,0xa1,0x2f,0x6d,0x76,
|
||||
0xe9,0x64,0x9b,0xcb,0xf4,0xf2,0x92,0x61,0x33,0x79,0xfc,0xeb,0xb7,0xe5,0x44,0xf6,
|
||||
0x77,0x19,0x06,0xef,
|
||||
};
|
||||
|
||||
struct maple_sega_vmu: maple_base
|
||||
{
|
||||
FILE* file;
|
||||
|
@ -266,6 +290,20 @@ struct maple_sega_vmu: maple_base
|
|||
{
|
||||
fread(flash_data,1,sizeof(flash_data),file);
|
||||
}
|
||||
|
||||
u8 sum = 0;
|
||||
for (int i=0;i<sizeof(flash_data);i++)
|
||||
sum|=flash_data[i];
|
||||
|
||||
if (sum == 0) {
|
||||
printf("Initialising empty vmu...\n");
|
||||
uLongf dec_sz = sizeof(flash_data);
|
||||
int rv=uncompress(flash_data, &dec_sz, vmu_default, sizeof(vmu_default));
|
||||
|
||||
verify(rv == Z_OK);
|
||||
verify(dec_sz == sizeof(flash_data));
|
||||
}
|
||||
|
||||
}
|
||||
virtual ~maple_sega_vmu()
|
||||
{
|
||||
|
|
|
@ -1390,15 +1390,19 @@ public:
|
|||
|
||||
FifoSplitter<0> TAFifo0;
|
||||
|
||||
int ta_parse_cnt = 0;
|
||||
|
||||
bool ta_parse_vdrc(TA_context* ctx)
|
||||
{
|
||||
bool rv=true;
|
||||
bool rv=false;
|
||||
|
||||
verify( vd_ctx == 0);
|
||||
vd_ctx = ctx;
|
||||
vd_rc = vd_ctx->rend;
|
||||
|
||||
if (!settings.pvr.ta_skip)
|
||||
|
||||
ta_parse_cnt++;
|
||||
|
||||
if (0 == (ta_parse_cnt % ( settings.pvr.ta_skip + 1)))
|
||||
{
|
||||
TAFifo0.vdec_init();
|
||||
|
||||
|
|
|
@ -565,6 +565,22 @@ void ngen_CC_Param(shil_opcode* op,shil_param* par,CanonicalParamType tp)
|
|||
switch(tp)
|
||||
{
|
||||
case CPT_f32rv:
|
||||
#ifdef ARM_HARDFP
|
||||
{
|
||||
if (reg.IsAllocg(*par))
|
||||
{
|
||||
//printf("MOV(reg.map(*par),r0); %d\n",reg.map(*par));
|
||||
VMOV(reg.mapg(*par),f0);
|
||||
}
|
||||
else if (reg.IsAllocf(*par))
|
||||
{
|
||||
//VMOV(reg.mapf(*par),0,r0); %d\n",reg.map(*par));
|
||||
VMOV(reg.mapfs(*par),f0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case CPT_u32rv:
|
||||
case CPT_u64rvL:
|
||||
{
|
||||
|
@ -606,6 +622,8 @@ void ngen_CC_Param(shil_opcode* op,shil_param* par,CanonicalParamType tp)
|
|||
void ngen_CC_Call(shil_opcode* op,void* function)
|
||||
{
|
||||
u32 rd=r0;
|
||||
u32 fd=f0;
|
||||
|
||||
for (int i=CC_pars.size();i-->0;)
|
||||
{
|
||||
if (CC_pars[i].type==CPT_ptr)
|
||||
|
@ -616,6 +634,25 @@ void ngen_CC_Call(shil_opcode* op,void* function)
|
|||
{
|
||||
if (CC_pars[i].par->is_reg())
|
||||
{
|
||||
#ifdef ARM_HARDFP
|
||||
if (CC_pars[i].type == CPT_f32)
|
||||
{
|
||||
if (reg.IsAllocg(*CC_pars[i].par))
|
||||
{
|
||||
//printf("MOV((eReg)rd,reg.map(*CC_pars[i].par)); %d %d\n",rd,reg.map(*CC_pars[i].par));
|
||||
VMOV((eFSReg)fd,reg.mapg(*CC_pars[i].par));
|
||||
}
|
||||
else if (reg.IsAllocf(*CC_pars[i].par))
|
||||
{
|
||||
//printf("LoadSh4Reg_mem((eReg)rd, *CC_pars[i].par); %d\n",rd);
|
||||
VMOV((eFSReg)fd,reg.mapfs(*CC_pars[i].par));
|
||||
}
|
||||
else
|
||||
die("Must not happen!\n");
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (reg.IsAllocg(*CC_pars[i].par))
|
||||
{
|
||||
//printf("MOV((eReg)rd,reg.map(*CC_pars[i].par)); %d %d\n",rd,reg.map(*CC_pars[i].par));
|
||||
|
@ -631,6 +668,7 @@ void ngen_CC_Call(shil_opcode* op,void* function)
|
|||
}
|
||||
else
|
||||
{
|
||||
verify(CC_pars[i].type != CPT_f32);
|
||||
//printf("MOV32((eReg)rd, CC_pars[i].par->_imm); %d\n",rd);
|
||||
MOV32((eReg)rd, CC_pars[i].par->_imm);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.reicast.emulator"
|
||||
android:versionCode="6"
|
||||
android:versionName="0.r5+" >
|
||||
android:versionName="0.r6" >
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="8"
|
||||
|
@ -9,11 +9,13 @@
|
|||
|
||||
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme" >
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/title_activity_main" >
|
||||
|
|
|
@ -32,10 +32,28 @@ LOCAL_MODULE := dc
|
|||
LOCAL_CFLAGS := $(LOCAL_CXXFLAGS) -DHAS_VMU
|
||||
LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
|
||||
LOCAL_ASFLAGS := -fvisibility=hidden
|
||||
LOCAL_LDLIBS := -llog -lGLESv2 -lEGL -lz
|
||||
LOCAL_LDLIBS := -llog -lGLESv2 -lEGL -lz
|
||||
#-Wl,-Map,./res/raw/syms.mp3
|
||||
LOCAL_ARM_MODE := arm
|
||||
|
||||
#
|
||||
# android has poor support for hardfp calling.
|
||||
# r9b+ is required, and it only works for internal calls
|
||||
# the opengl drivers would really benefit from this, but they are still using softfp
|
||||
# the header files tell gcc to automatically use aapcs for calling system/etc
|
||||
# so there is no real perfomance difference
|
||||
#
|
||||
# The way this is implemented is a huge hack on the android/linux side
|
||||
# (but then again, which part of android isn't a huge hack?)
|
||||
|
||||
#ifneq ($(filter %armeabi-v7a,$(TARGET_ARCH_ABI)),)
|
||||
#LOCAL_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -DARM_HARDFP
|
||||
#LOCAL_LDLIBS += -lm_hard
|
||||
#ifeq (,$(filter -fuse-ld=mcld,$(APP_LDFLAGS) $(LOCAL_LDFLAGS)))
|
||||
#LOCAL_LDFLAGS += -Wl,--no-warn-mismatch
|
||||
#endif
|
||||
#endif
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
$(call import-module,android/native_app_glue)
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "profiler/profiler.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "rend/TexCache.h"
|
||||
#include "hw/maple/maple_devs.h"
|
||||
|
||||
#include "util.h"
|
||||
|
||||
|
@ -29,9 +30,11 @@ extern "C"
|
|||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_rendinit(JNIEnv *env,jobject obj,jint w,jint h) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_rendframe(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_kcode(JNIEnv * env, jobject obj,u32 k_code, u32 l_t, u32 r_t, u32 jx, u32 jy) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_kcode(JNIEnv * env, jobject obj, jintArray k_code, jintArray l_t, jintArray r_t, jintArray jx, jintArray jy) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_vjoy(JNIEnv * env, jobject obj,u32 id,float x, float y, float w, float h) __attribute__((visibility("default")));
|
||||
//JNIEXPORT jint JNICALL Java_com_reicast_emulator_JNIdc_play(JNIEnv *env,jobject obj,jshortArray result,jint size);
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_initControllers(JNIEnv *env, jobject obj, jbooleanArray controllers) __attribute__((visibility("default")));
|
||||
};
|
||||
|
||||
void egl_stealcntx();
|
||||
|
@ -39,6 +42,7 @@ void SetApplicationPath(wchar *path);
|
|||
int dc_init(int argc,wchar* argv[]);
|
||||
void dc_run();
|
||||
void dc_term();
|
||||
void mcfg_Create(MapleDeviceType type,u32 bus,u32 port);
|
||||
|
||||
bool VramLockedWrite(u8* address);
|
||||
|
||||
|
@ -51,6 +55,9 @@ extern int screen_width,screen_height;
|
|||
static u64 tvs_base;
|
||||
static char CurFileName[256];
|
||||
|
||||
// Additonal controllers 2, 3 and 4 connected ?
|
||||
static bool add_controllers[3] = { false, false, false };
|
||||
|
||||
u16 kcode[4];
|
||||
u32 vks[4];
|
||||
s8 joyx[4],joyy[4];
|
||||
|
@ -84,6 +91,13 @@ static void *ThreadHandler(void *UserData)
|
|||
strcat(Args[2],P);
|
||||
}
|
||||
|
||||
// Add additonal controllers
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (add_controllers[i])
|
||||
mcfg_Create(MDT_SegaController,i+1,5);
|
||||
}
|
||||
|
||||
// Run nullDC emulator
|
||||
dc_init(Args[2]? 3:1,Args);
|
||||
}
|
||||
|
@ -247,14 +261,28 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_rendframe(JNIEnv *env,job
|
|||
while(!rend_single_frame()) ;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_kcode(JNIEnv * env, jobject obj,u32 k_code, u32 l_t, u32 r_t, u32 jx, u32 jy)
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_kcode(JNIEnv * env, jobject obj, jintArray k_code, jintArray l_t, jintArray r_t, jintArray jx, jintArray jy)
|
||||
{
|
||||
lt[0] = l_t;
|
||||
rt[0] = r_t;
|
||||
kcode[0] = k_code;
|
||||
kcode[3] = kcode[2] = kcode[1] = 0xFFFF;
|
||||
joyx[0]=jx;
|
||||
joyy[0]=jy;
|
||||
jint *k_code_body = env->GetIntArrayElements(k_code, 0);
|
||||
jint *l_t_body = env->GetIntArrayElements(l_t, 0);
|
||||
jint *r_t_body = env->GetIntArrayElements(r_t, 0);
|
||||
jint *jx_body = env->GetIntArrayElements(jx, 0);
|
||||
jint *jy_body = env->GetIntArrayElements(jy, 0);
|
||||
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
kcode[i] = k_code_body[i];
|
||||
lt[i] = l_t_body[i];
|
||||
rt[i] = r_t_body[i];
|
||||
joyx[i] = jx_body[i];
|
||||
joyy[i] = jy_body[i];
|
||||
}
|
||||
|
||||
env->ReleaseIntArrayElements(k_code, k_code_body, 0);
|
||||
env->ReleaseIntArrayElements(l_t, l_t_body, 0);
|
||||
env->ReleaseIntArrayElements(r_t, r_t_body, 0);
|
||||
env->ReleaseIntArrayElements(jx, jx_body, 0);
|
||||
env->ReleaseIntArrayElements(jy, jy_body, 0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_rendinit(JNIEnv * env, jobject obj, jint w,jint h)
|
||||
|
@ -283,6 +311,13 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_vjoy(JNIEnv * env, jobjec
|
|||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_JNIdc_initControllers(JNIEnv *env, jobject obj, jbooleanArray controllers)
|
||||
{
|
||||
jboolean *controllers_body = env->GetBooleanArrayElements(controllers, 0);
|
||||
memcpy(add_controllers, controllers_body, 3);
|
||||
env->ReleaseBooleanArrayElements(controllers, controllers_body, 0);
|
||||
}
|
||||
|
||||
u32 os_Push(void* frame, u32 amt, bool wait)
|
||||
{
|
||||
verify(amt==SAMPLE_COUNT);
|
||||
|
@ -294,4 +329,4 @@ u32 os_Push(void* frame, u32 amt, bool wait)
|
|||
bool os_IsAudioBuffered()
|
||||
{
|
||||
return jenv->CallIntMethod(track,writemid,jsamples,-1)==0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,80 +3,182 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
<!-- LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dynarec_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_dynarec" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textView1"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/select_stretch" />
|
||||
<Switch
|
||||
android:id="@+id/dynarec_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout -->
|
||||
|
||||
<Switch
|
||||
android:id="@+id/stretch_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/unstable_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_unstable" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/unstable_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<!-- LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
<TextView
|
||||
android:id="@+id/textView1"
|
||||
android:id="@+id/region_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dip"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/set_frameskip" />
|
||||
android:text="@string/select_region" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<SeekBar
|
||||
<Spinner
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/frame_seekbar"
|
||||
android:id="@+id/region_spinner"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:progress="0"
|
||||
android:max="5"/>
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/current_frames"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"/>
|
||||
android:ems="10" >
|
||||
</Spinner>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout -->
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/limitfps_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_limitfps" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/limitfps_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/mipmaps_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_mipmaps" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/mipmaps_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/stretch_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_stretch" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/stretch_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/frameskip_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dip"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/set_frameskip" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textView1"
|
||||
android:id="@+id/current_frames"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/frame_seekbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_render" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/render_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
android:max="5"
|
||||
android:progress="0" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
<!-- LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/render_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_render" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/render_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout -->
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,170 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/touch_vibration" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/compoundButtonTouchVibrationEnabled"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_1" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_2" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_3" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_4" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -3,80 +3,183 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
<!-- LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dynarec_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_dynarec" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textView1"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/select_stretch" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/stretch_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
<CheckBox
|
||||
android:id="@+id/dynarec_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout -->
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/unstable_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_unstable" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/unstable_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<!-- LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
<TextView
|
||||
android:id="@+id/textView1"
|
||||
android:id="@+id/region_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dip"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/set_frameskip" />
|
||||
android:text="@string/select_region" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<SeekBar
|
||||
<Spinner
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/frame_seekbar"
|
||||
android:id="@+id/region_spinner"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:progress="0"
|
||||
android:max="5"/>
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/current_frames"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"/>
|
||||
android:ems="10" >
|
||||
|
||||
</Spinner>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout -->
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/limitfps_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_limitfps" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/limitfps_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/mipmaps_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_mipmaps" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/mipmaps_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/stretch_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_stretch" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/stretch_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/frameskip_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dip"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/set_frameskip" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textView1"
|
||||
android:id="@+id/current_frames"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/frame_seekbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_render" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/render_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
android:max="5"
|
||||
android:progress="0" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/render_text"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:text="@string/select_render" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/render_option"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout -->
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,170 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/touch_vibration" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/compoundButtonTouchVibrationEnabled"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_1" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_2" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_3" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_4" />
|
||||
|
||||
<TextView
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/textViewDeviceDescriptorPlayer4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:text="@string/controller_none_selected" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonSelectControllerPlayer4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/select_controller" />
|
||||
|
||||
<Button
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/buttonRemoveControllerPlayer4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove_controller" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -28,6 +28,17 @@
|
|||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="32dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/options"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:layout_marginLeft="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
android:layout_marginTop="2dp"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/open_folder" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/config"
|
||||
android:layout_width="48dp"
|
||||
|
@ -50,4 +61,9 @@
|
|||
android:src="@drawable/question" />
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,80 @@
|
|||
<resources>
|
||||
|
||||
<string name="app_name">reicast</string>
|
||||
<string name="hello_world">Hello world!</string>
|
||||
<string name="menu_settings">セッティング</string>
|
||||
<string name="title_activity_main">reicast</string>
|
||||
<string name="system_path">システムパス (とのデータフォルダーの場所 dc_boot.bin/dc_flash.bin)</string>
|
||||
<string name="browser_path">デフォルトのシステムパス</string>
|
||||
<string name="games_path">ストレージパス (の場所 .gdi .cdi or .cdh イメージ)</string>
|
||||
<string name="game_path">デフォルトゲーム·ストレージ</string>
|
||||
|
||||
<string name="boot_bios">ブートドリームキャストビオス</string>
|
||||
<string name="missing_bios">BIOSが不足している。ドリームキャストBIOSが動作するように、このエミュレータに必要です。 BIOSファイル内に配置します %1$s/data/dc_boot.bin</string>
|
||||
<string name="missing_flash">行方不明に点滅します。ドリームキャストのFlashが動作するためにこのエミュレータに必要です。 Flashファイル内に配置します %1$s/data/dc_flash.bin</string>
|
||||
<string name="require_bios">あなたは、BIOSを提供する必要が</string>
|
||||
|
||||
<string name="folder_bios">BOOT BIOS</string>
|
||||
<string name="folder_select">SELECT CURRENT FOLDER</string>
|
||||
|
||||
<string name="select_dynarec">Dynarec Options</string>
|
||||
<string name="select_unstable">Unstable Optimisations</string>
|
||||
<string name="select_region">DC Region</string>
|
||||
<string name="select_limitfps">Limit FPS</string>
|
||||
<string name="select_mipmaps">Use Mipmaps (古いSGX540のために修正)</string>
|
||||
<string name="select_stretch">Widescreen Mode</string>
|
||||
<string name="set_frameskip">Frameskip Value</string>
|
||||
<string name="select_render">PVR Rendering</string>
|
||||
|
||||
<string name="games_listing">利用可能なドリームキャストのゲーム</string>
|
||||
|
||||
<string name="controller_1">コントローラ 1</string>
|
||||
<string name="controller_2">コントローラ 2</string>
|
||||
<string name="controller_3">コントローラ 3</string>
|
||||
<string name="controller_4">コントローラ 4</string>
|
||||
<string name="controller_none">None</string>
|
||||
<string name="select_controller">セレクトコントローラ</string>
|
||||
<string name="remove_controller">コントローラを取り外し</string>
|
||||
<string name="select_controller_title">セレクトコントローラ</string>
|
||||
<string name="select_controller_message">ポートに割り当てるコントローラのいずれかのボタンを押してください</string>
|
||||
<string name="controller_already_in_use">このコントローラは、すでに使用されています!</string>
|
||||
|
||||
<string-array name="images">
|
||||
<item>cdi</item>
|
||||
<item>chd</item>
|
||||
<item>gdi</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="region">
|
||||
<item></item>
|
||||
<item></item>
|
||||
<item></item>
|
||||
<item>(Default)</item>
|
||||
</string-array>
|
||||
|
||||
<string name="drawer_open">Slider Menu Opened</string>
|
||||
<string name="drawer_close">Slider Menu Closed</string>
|
||||
|
||||
<!-- Nav Drawer Menu Items -->
|
||||
<string-array name="nav_drawer_items">
|
||||
<item>Browser</item>
|
||||
<item>Settings</item>
|
||||
<item>Paths</item>
|
||||
<item>Controllers</item>
|
||||
<item>About</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Nav Drawer List Item Icons -->
|
||||
<!-- Matched to Nav Drawer Menu Items -->
|
||||
<array name="nav_drawer_icons">
|
||||
<item>@drawable/disk_unknown</item>
|
||||
<item>@drawable/config</item>
|
||||
<item>@drawable/open_folder</item>
|
||||
<item>@drawable/config</item>
|
||||
<item>@drawable/question</item>
|
||||
</array>
|
||||
|
||||
<!-- Content Description -->
|
||||
<string name="desc_list_item_icon">Item Icon</string>
|
||||
|
||||
</resources>
|
|
@ -4,20 +4,58 @@
|
|||
<string name="hello_world">Hello world!</string>
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="title_activity_main">reicast</string>
|
||||
<string name="system_path">System Path (location of dc_boot.bin/dc_flash.bin)</string>
|
||||
<string name="system_path">System Path (location of the data folder with dc_boot.bin/dc_flash.bin inside)</string>
|
||||
<string name="browser_path">Default System Path</string>
|
||||
<string name="games_path">Storage Path (location of .gid .cdi or .cdh images)</string>
|
||||
<string name="games_path">Storage Path (location of .gdi, .chd or .cdi images)</string>
|
||||
<string name="game_path">Default Game Storage</string>
|
||||
<string name="select_stretch">Stretch to Fullscreen</string>
|
||||
<string name="set_frameskip">Frameskipping Amount</string>
|
||||
<string name="select_render">PVR Rendering</string>
|
||||
|
||||
<string name="boot_bios">Boot Dreamcast Bios</string>
|
||||
<string name="missing_bios">BIOS Missing. The Dreamcast BIOS is required for this emulator to work. Place the BIOS file in %1$s/data/dc_boot.bin</string>
|
||||
<string name="missing_flash">Flash Missing. The Dreamcast Flash is required for this emulator to work. Place the Flash file in %1$s/data/dc_flash.bin</string>
|
||||
<string name="require_bios">You have to provide the BIOS</string>
|
||||
|
||||
<string name="folder_bios">BOOT BIOS</string>
|
||||
<string name="folder_select">SELECT CURRENT FOLDER</string>
|
||||
|
||||
<string name="select_dynarec">Dynarec Options</string>
|
||||
<string name="select_unstable">Unstable Optimisations</string>
|
||||
<string name="select_region">DC Region</string>
|
||||
<string name="select_limitfps">Limit FPS</string>
|
||||
<string name="select_mipmaps">Use Mipmaps (fix for old SGX540)</string>
|
||||
<string name="select_stretch">Widescreen Mode</string>
|
||||
<string name="set_frameskip">Frameskip Value</string>
|
||||
<string name="select_render">PVR Rendering (does nothing for now)</string>
|
||||
|
||||
<string name="games_listing">Available Dreamcast Games</string>
|
||||
|
||||
<string name="touch_vibration">Touch Vibration</string>
|
||||
<string name="controller_1">Controller 1</string>
|
||||
<string name="controller_2">Controller 2</string>
|
||||
<string name="controller_3">Controller 3</string>
|
||||
<string name="controller_4">Controller 4</string>
|
||||
<string name="controller_not_connected">Controller Not Connected</string>
|
||||
<string name="controller_none_selected">No Controller Selected</string>
|
||||
<string name="select_controller">Select Controller</string>
|
||||
<string name="remove_controller">Remove Controller</string>
|
||||
<string name="select_controller_title">Select Controller</string>
|
||||
<string name="select_controller_message">Press any button on the controller to assign to port</string>
|
||||
<string name="controller_already_in_use">This controller is already in use!</string>
|
||||
|
||||
<string name="about_title">About reicast</string>
|
||||
<string name="about_text">reicast is a dreamcast emulator\n\nVersion:</string>
|
||||
|
||||
<string-array name="images">
|
||||
<item>cdi</item>
|
||||
<item>chd</item>
|
||||
<item>gdi</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="region">
|
||||
<item></item>
|
||||
<item></item>
|
||||
<item></item>
|
||||
<item>(Default)</item>
|
||||
</string-array>
|
||||
|
||||
<string name="drawer_open">Slider Menu Opened</string>
|
||||
<string name="drawer_close">Slider Menu Closed</string>
|
||||
|
@ -25,16 +63,18 @@
|
|||
<!-- Nav Drawer Menu Items -->
|
||||
<string-array name="nav_drawer_items">
|
||||
<item>Browser</item>
|
||||
<item>Options</item>
|
||||
<item>Emulator</item>
|
||||
<item>Settings</item>
|
||||
<item>Paths</item>
|
||||
<item>Controllers</item>
|
||||
<item>About</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Nav Drawer List Item Icons -->
|
||||
<!-- Keep them in order as the titles are in -->
|
||||
<!-- Matched to Nav Drawer Menu Items -->
|
||||
<array name="nav_drawer_icons">
|
||||
<item>@drawable/disk_unknown</item>
|
||||
<item>@drawable/config</item>
|
||||
<item>@drawable/open_folder</item>
|
||||
<item>@drawable/config</item>
|
||||
<item>@drawable/question</item>
|
||||
</array>
|
||||
|
@ -42,4 +82,4 @@
|
|||
<!-- Content Description -->
|
||||
<string name="desc_list_item_icon">Item Icon</string>
|
||||
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -32,9 +32,15 @@ public class ConfigureFragment extends Fragment {
|
|||
Activity parentActivity;
|
||||
TextView mainFrames;
|
||||
OnClickListener mCallback;
|
||||
|
||||
boolean dynarecopt = true;
|
||||
boolean unstableopt = false;
|
||||
int dcregion = 3;
|
||||
boolean limitfps = true;
|
||||
boolean mipmaps = true;
|
||||
boolean widescreen = false;
|
||||
boolean pvrrender = false;
|
||||
int frameskip = 0;
|
||||
boolean pvrrender = false;
|
||||
|
||||
private SharedPreferences mPrefs;
|
||||
private File sdcard = Environment.getExternalStorageDirectory();
|
||||
|
@ -74,6 +80,29 @@ public class ConfigureFragment extends Fragment {
|
|||
String currentLine;
|
||||
while (scanner.hasNextLine()) {
|
||||
currentLine = scanner.nextLine();
|
||||
|
||||
// Check if the existing emu.cfg has the setting and get current value
|
||||
|
||||
/*if (StringUtils.containsIgnoreCase(currentLine, "Dynarec.Enabled")) {
|
||||
dynarecopt = Boolean.valueOf(currentLine.replace(
|
||||
"Dynarec.Enabled=", ""));
|
||||
}*/
|
||||
if (StringUtils.containsIgnoreCase(currentLine, "Dynarec.unstable-opt")) {
|
||||
unstableopt = Boolean.valueOf(currentLine.replace(
|
||||
"Dynarec.unstable-opt=", ""));
|
||||
}
|
||||
/*if (StringUtils.containsIgnoreCase(currentLine, "Dreamcast.Region")) {
|
||||
dcregion = Integer.valueOf(currentLine.replace(
|
||||
"Dreamcast.Region=", ""));
|
||||
}*/
|
||||
if (StringUtils.containsIgnoreCase(currentLine, "aica.LimitFPS")) {
|
||||
limitfps = Boolean.valueOf(currentLine.replace(
|
||||
"aica.LimitFPS=", ""));
|
||||
}
|
||||
if (StringUtils.containsIgnoreCase(currentLine, "rend.UseMipmaps")) {
|
||||
mipmaps = Boolean.valueOf(currentLine.replace(
|
||||
"rend.UseMipmaps=", ""));
|
||||
}
|
||||
if (StringUtils.containsIgnoreCase(currentLine,
|
||||
"rend.WideScreen")) {
|
||||
widescreen = Boolean.valueOf(currentLine.replace(
|
||||
|
@ -83,19 +112,187 @@ public class ConfigureFragment extends Fragment {
|
|||
frameskip = Integer.valueOf(currentLine.replace(
|
||||
"ta.skip=", ""));
|
||||
}
|
||||
if (StringUtils.containsIgnoreCase(currentLine, "pvr.rend")) {
|
||||
/*if (StringUtils.containsIgnoreCase(currentLine, "pvr.rend")) {
|
||||
pvrrender = Boolean.valueOf(currentLine.replace(
|
||||
"pvr.rend=", ""));
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
scanner.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.d("reicast", "Exception: " + e);
|
||||
}
|
||||
|
||||
// Generate the menu options and fill in existing settings
|
||||
|
||||
/*OnCheckedChangeListener dynarec_options = new OnCheckedChangeListener() {
|
||||
|
||||
mainFrames = (TextView) getView().findViewById(R.id.current_frames);
|
||||
mainFrames.setText(String.valueOf(frameskip));
|
||||
public void onCheckedChanged(CompoundButton buttonView,
|
||||
boolean isChecked) {
|
||||
mPrefs.edit().putBoolean("dynarec_opt", isChecked).commit();
|
||||
dynarecopt = isChecked;
|
||||
if (!executeAppendConfig("Dynarec.Enabled",
|
||||
String.valueOf(isChecked ? 1 : 0))) {
|
||||
executeWriteConfig();
|
||||
}
|
||||
}
|
||||
};
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
Switch dynarec_opt = (Switch) getView().findViewById(
|
||||
R.id.dynarec_option);
|
||||
boolean dynarec = mPrefs.getBoolean("dynarec_opt", dynarecopt);
|
||||
if (dynarec) {
|
||||
dynarec_opt.setChecked(true);
|
||||
} else {
|
||||
dynarec_opt.setChecked(false);
|
||||
}
|
||||
dynarec_opt.setOnCheckedChangeListener(dynarec_options);
|
||||
} else {
|
||||
CheckBox dynarec_opt = (CheckBox) getView().findViewById(
|
||||
R.id.dynarec_option);
|
||||
boolean dynarec = mPrefs.getBoolean("dynarec_opt", dynarecopt);
|
||||
if (dynarec) {
|
||||
dynarec_opt.setChecked(true);
|
||||
} else {
|
||||
dynarec_opt.setChecked(false);
|
||||
}
|
||||
dynarec_opt.setOnCheckedChangeListener(dynarec_options);
|
||||
}*/
|
||||
|
||||
OnCheckedChangeListener unstable_option = new OnCheckedChangeListener() {
|
||||
|
||||
public void onCheckedChanged(CompoundButton buttonView,
|
||||
boolean isChecked) {
|
||||
mPrefs.edit().putBoolean("unstable_opt", isChecked).commit();
|
||||
unstableopt = isChecked;
|
||||
if (!executeAppendConfig("Dynarec.unstable-opt",
|
||||
String.valueOf(isChecked ? 1 : 0))) {
|
||||
executeWriteConfig();
|
||||
}
|
||||
}
|
||||
};
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
Switch unstable_opt = (Switch) getView().findViewById(
|
||||
R.id.unstable_option);
|
||||
boolean unstable = mPrefs.getBoolean("unstable_opt", unstableopt);
|
||||
if (unstable) {
|
||||
unstable_opt.setChecked(true);
|
||||
} else {
|
||||
unstable_opt.setChecked(false);
|
||||
}
|
||||
unstable_opt.setOnCheckedChangeListener(unstable_option);
|
||||
} else {
|
||||
CheckBox unstable_opt = (CheckBox) getView().findViewById(
|
||||
R.id.unstable_option);
|
||||
boolean unstable = mPrefs.getBoolean("unstable_opt", unstableopt);
|
||||
if (unstable) {
|
||||
unstable_opt.setChecked(true);
|
||||
} else {
|
||||
unstable_opt.setChecked(false);
|
||||
}
|
||||
unstable_opt.setOnCheckedChangeListener(unstable_option);
|
||||
}
|
||||
|
||||
/*String[] regions = parentActivity.getResources().getStringArray(R.array.region);
|
||||
|
||||
Spinner region_spnr = (Spinner) getView().findViewById(
|
||||
R.id.region_spinner);
|
||||
ArrayAdapter<String> localeAdapter = new ArrayAdapter<String>(
|
||||
parentActivity, android.R.layout.simple_spinner_item, regions);
|
||||
localeAdapter
|
||||
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
region_spnr.setAdapter(localeAdapter);
|
||||
|
||||
int dc_region = mPrefs.getInt("dc_region", dcregion);
|
||||
region_spnr.setSelection(dc_region, true);
|
||||
|
||||
region_spnr.setOnItemSelectedListener(new OnItemSelectedListener() {
|
||||
|
||||
public void onItemSelected(AdapterView<?> parent, View view,
|
||||
int pos, long id) {
|
||||
mPrefs.edit().putInt("dc_region", pos).commit();
|
||||
dcregion = pos;
|
||||
if (!executeAppendConfig("Dreamcast.Region",
|
||||
String.valueOf(pos))) {
|
||||
executeWriteConfig();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void onNothingSelected(AdapterView<?> arg0) {
|
||||
mPrefs.edit().putInt("dc_region", 3).commit();
|
||||
}
|
||||
|
||||
});*/
|
||||
|
||||
OnCheckedChangeListener limitfps_option = new OnCheckedChangeListener() {
|
||||
|
||||
public void onCheckedChanged(CompoundButton buttonView,
|
||||
boolean isChecked) {
|
||||
mPrefs.edit().putBoolean("limit_fps", isChecked).commit();
|
||||
limitfps = isChecked;
|
||||
if (!executeAppendConfig("aica.LimitFPS",
|
||||
String.valueOf(isChecked ? 1 : 0))) {
|
||||
executeWriteConfig();
|
||||
}
|
||||
}
|
||||
};
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
Switch limit_fps = (Switch) getView().findViewById(
|
||||
R.id.limitfps_option);
|
||||
boolean limited = mPrefs.getBoolean("limit_fps", limitfps);
|
||||
if (limited) {
|
||||
limit_fps.setChecked(true);
|
||||
} else {
|
||||
limit_fps.setChecked(false);
|
||||
}
|
||||
limit_fps.setOnCheckedChangeListener(limitfps_option);
|
||||
} else {
|
||||
CheckBox limit_fps = (CheckBox) getView().findViewById(
|
||||
R.id.limitfps_option);
|
||||
boolean limited = mPrefs.getBoolean("limit_fps", limitfps);
|
||||
if (limited) {
|
||||
limit_fps.setChecked(true);
|
||||
} else {
|
||||
limit_fps.setChecked(false);
|
||||
}
|
||||
limit_fps.setOnCheckedChangeListener(limitfps_option);
|
||||
}
|
||||
|
||||
OnCheckedChangeListener mipmaps_option = new OnCheckedChangeListener() {
|
||||
|
||||
public void onCheckedChanged(CompoundButton buttonView,
|
||||
boolean isChecked) {
|
||||
mPrefs.edit().putBoolean("use_mipmaps", isChecked).commit();
|
||||
mipmaps = isChecked;
|
||||
if (!executeAppendConfig("rend.UseMipmaps",
|
||||
String.valueOf(isChecked ? 1 : 0))) {
|
||||
executeWriteConfig();
|
||||
}
|
||||
}
|
||||
};
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
Switch mipmap_opt = (Switch) getView().findViewById(
|
||||
R.id.mipmaps_option);
|
||||
boolean mipmapped = mPrefs.getBoolean("use_mipmaps", mipmaps);
|
||||
if (mipmapped) {
|
||||
mipmap_opt.setChecked(true);
|
||||
} else {
|
||||
mipmap_opt.setChecked(false);
|
||||
}
|
||||
mipmap_opt.setOnCheckedChangeListener(mipmaps_option);
|
||||
} else {
|
||||
CheckBox mipmap_opt = (CheckBox) getView().findViewById(
|
||||
R.id.mipmaps_option);
|
||||
boolean mipmapped = mPrefs.getBoolean("use_mipmaps", mipmaps);
|
||||
if (mipmapped) {
|
||||
mipmap_opt.setChecked(true);
|
||||
} else {
|
||||
mipmap_opt.setChecked(false);
|
||||
}
|
||||
mipmap_opt.setOnCheckedChangeListener(mipmaps_option);
|
||||
}
|
||||
|
||||
OnCheckedChangeListener full_screen = new OnCheckedChangeListener() {
|
||||
|
||||
|
@ -130,6 +327,9 @@ public class ConfigureFragment extends Fragment {
|
|||
}
|
||||
stretch_view.setOnCheckedChangeListener(full_screen);
|
||||
}
|
||||
|
||||
mainFrames = (TextView) getView().findViewById(R.id.current_frames);
|
||||
mainFrames.setText(String.valueOf(frameskip));
|
||||
|
||||
SeekBar frameSeek = (SeekBar) getView()
|
||||
.findViewById(R.id.frame_seekbar);
|
||||
|
@ -160,7 +360,7 @@ public class ConfigureFragment extends Fragment {
|
|||
}
|
||||
});
|
||||
|
||||
OnCheckedChangeListener pvr_rendering = new OnCheckedChangeListener() {
|
||||
/*OnCheckedChangeListener pvr_rendering = new OnCheckedChangeListener() {
|
||||
|
||||
public void onCheckedChanged(CompoundButton buttonView,
|
||||
boolean isChecked) {
|
||||
|
@ -192,13 +392,16 @@ public class ConfigureFragment extends Fragment {
|
|||
pvr_render.setChecked(false);
|
||||
}
|
||||
pvr_render.setOnCheckedChangeListener(pvr_rendering);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private boolean executeAppendConfig(String identifier, String value) {
|
||||
File config = new File(home_directory, "emu.cfg");
|
||||
if (config.exists()) {
|
||||
try {
|
||||
|
||||
// Read existing emu.cfg and substitute new setting value
|
||||
|
||||
StringBuilder rebuildFile = new StringBuilder();
|
||||
Scanner scanner = new Scanner(config);
|
||||
String currentLine;
|
||||
|
@ -229,24 +432,26 @@ public class ConfigureFragment extends Fragment {
|
|||
if (config.exists()) {
|
||||
config.delete();
|
||||
}
|
||||
|
||||
// Write new emu.cfg using current display values
|
||||
|
||||
StringBuilder rebuildFile = new StringBuilder();
|
||||
rebuildFile.append("[config]" + "\n");
|
||||
rebuildFile.append("Dynarec.Enabled=1" + "\n");
|
||||
rebuildFile.append("Dynarec.Enabled=" + String.valueOf(dynarecopt ? 1 : 0) + "\n");
|
||||
rebuildFile.append("Dynarec.idleskip=1" + "\n");
|
||||
rebuildFile.append("Dynarec.unstable-opt=0" + "\n");
|
||||
rebuildFile.append("Dynarec.unstable-opt=" + String.valueOf(unstableopt ? 1 : 0) + "\n");
|
||||
rebuildFile.append("Dreamcast.Cable=3" + "\n");
|
||||
rebuildFile.append("Dreamcast.RTC=2018927206" + "\n");
|
||||
rebuildFile.append("Dreamcast.Region=3" + "\n");
|
||||
rebuildFile.append("Dreamcast.Region=" + String.valueOf(dcregion) + "\n");
|
||||
rebuildFile.append("Dreamcast.Broadcast=4" + "\n");
|
||||
rebuildFile.append("aica.LimitFPS=1" + "\n");
|
||||
rebuildFile.append("aica.LimitFPS=" + String.valueOf(limitfps ? 1 : 0) + "\n");
|
||||
rebuildFile.append("aica.NoBatch=0" + "\n");
|
||||
rebuildFile.append("rend.UseMipmaps=1" + "\n");
|
||||
rebuildFile.append("rend.UseMipmaps=" + String.valueOf(mipmaps ? 1 : 0) + "\n");
|
||||
rebuildFile.append("rend.WideScreen="
|
||||
+ String.valueOf(widescreen ? 1 : 0) + "\n");
|
||||
rebuildFile.append("pvr.Subdivide=0" + "\n");
|
||||
rebuildFile.append("ta.skip=" + String.valueOf(frameskip) + "\n");
|
||||
rebuildFile.append("pvr.rend=" + String.valueOf(pvrrender ? 1 : 0)
|
||||
+ "\n");
|
||||
rebuildFile.append("pvr.rend=" + String.valueOf(pvrrender ? 1 : 0) + "\n");
|
||||
rebuildFile.append("image=null" + "\n");
|
||||
FileOutputStream fos = new FileOutputStream(config);
|
||||
fos.write(rebuildFile.toString().getBytes());
|
||||
|
|
|
@ -0,0 +1,311 @@
|
|||
package com.reicast.emulator;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.util.Log;
|
||||
import android.view.InputDevice;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
|
||||
public class ControllersFragment extends Fragment {
|
||||
|
||||
private Activity parentActivity;
|
||||
private int listenForButton = 0;
|
||||
private AlertDialog alertDialogSelectController;
|
||||
private SharedPreferences sharedPreferences;
|
||||
|
||||
// Container Activity must implement this interface
|
||||
public interface OnClickListener {
|
||||
public void onMainBrowseSelected(String path_entry, boolean games);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
return inflater.inflate(R.layout.controllers_fragment, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
parentActivity = getActivity();
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(parentActivity);
|
||||
|
||||
CompoundButton compoundButtonTouchVibrationEnabled = (CompoundButton) getView()
|
||||
.findViewById(R.id.compoundButtonTouchVibrationEnabled);
|
||||
compoundButtonTouchVibrationEnabled.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
sharedPreferences.edit().putBoolean("touch_vibration_enabled", isChecked).commit();
|
||||
}
|
||||
});
|
||||
|
||||
Button buttonSelectControllerPlayer1 = (Button) getView()
|
||||
.findViewById(R.id.buttonSelectControllerPlayer1);
|
||||
buttonSelectControllerPlayer1.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
selectController(1);
|
||||
}
|
||||
});
|
||||
Button buttonSelectControllerPlayer2 = (Button) getView()
|
||||
.findViewById(R.id.buttonSelectControllerPlayer2);
|
||||
buttonSelectControllerPlayer2.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
selectController(2);
|
||||
}
|
||||
});
|
||||
Button buttonSelectControllerPlayer3 = (Button) getView()
|
||||
.findViewById(R.id.buttonSelectControllerPlayer3);
|
||||
buttonSelectControllerPlayer3.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
selectController(3);
|
||||
}
|
||||
});
|
||||
Button buttonSelectControllerPlayer4 = (Button) getView()
|
||||
.findViewById(R.id.buttonSelectControllerPlayer4);
|
||||
buttonSelectControllerPlayer4.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
selectController(4);
|
||||
}
|
||||
});
|
||||
|
||||
Button buttonRemoveControllerPlayer1 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer1);
|
||||
buttonRemoveControllerPlayer1.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
removeController(1);
|
||||
}
|
||||
});
|
||||
|
||||
Button buttonRemoveControllerPlayer2 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer2);
|
||||
buttonRemoveControllerPlayer2.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
removeController(2);
|
||||
}
|
||||
});
|
||||
|
||||
Button buttonRemoveControllerPlayer3 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer3);
|
||||
buttonRemoveControllerPlayer3.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
removeController(3);
|
||||
}
|
||||
});
|
||||
|
||||
Button buttonRemoveControllerPlayer4 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer4);
|
||||
buttonRemoveControllerPlayer4.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
removeController(4);
|
||||
}
|
||||
});
|
||||
|
||||
updateVibration();
|
||||
updateControllers();
|
||||
}
|
||||
|
||||
private void updateVibration() {
|
||||
boolean touchVibrationEnabled = sharedPreferences.getBoolean("touch_vibration_enabled", true);
|
||||
|
||||
CompoundButton compoundButtonTouchVibrationEnabled = (CompoundButton) getView()
|
||||
.findViewById(R.id.compoundButtonTouchVibrationEnabled);
|
||||
compoundButtonTouchVibrationEnabled.setChecked(touchVibrationEnabled);
|
||||
}
|
||||
|
||||
private void updateControllers() {
|
||||
String deviceDescriptorPlayer1 = sharedPreferences.getString("device_descriptor_player_1", null);
|
||||
String deviceDescriptorPlayer2 = sharedPreferences.getString("device_descriptor_player_2", null);
|
||||
String deviceDescriptorPlayer3 = sharedPreferences.getString("device_descriptor_player_3", null);
|
||||
String deviceDescriptorPlayer4 = sharedPreferences.getString("device_descriptor_player_4", null);
|
||||
|
||||
String labelPlayer1 = null, labelPlayer2 = null, labelPlayer3 = null, labelPlayer4 = null;
|
||||
|
||||
for (int devideId : InputDevice.getDeviceIds()) {
|
||||
InputDevice dev = InputDevice.getDevice(devideId);
|
||||
String descriptor = dev.getDescriptor();
|
||||
|
||||
if (descriptor != null) {
|
||||
if (descriptor.equals(deviceDescriptorPlayer1))
|
||||
labelPlayer1 = dev.getName() + " (" + descriptor + ")";
|
||||
else if (descriptor.equals(deviceDescriptorPlayer2))
|
||||
labelPlayer2 = dev.getName() + " (" + descriptor + ")";
|
||||
else if (descriptor.equals(deviceDescriptorPlayer3))
|
||||
labelPlayer3 = dev.getName() + " (" + descriptor + ")";
|
||||
else if (descriptor.equals(deviceDescriptorPlayer4))
|
||||
labelPlayer4 = dev.getName() + " (" + descriptor + ")";
|
||||
}
|
||||
}
|
||||
|
||||
TextView textViewDeviceDescriptorPlayer1 = (TextView) getView()
|
||||
.findViewById(R.id.textViewDeviceDescriptorPlayer1);
|
||||
Button buttonRemoveControllerPlayer1 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer1);
|
||||
if (labelPlayer1 != null) {
|
||||
textViewDeviceDescriptorPlayer1.setText(labelPlayer1);
|
||||
buttonRemoveControllerPlayer1.setEnabled(true);
|
||||
} else {
|
||||
if (deviceDescriptorPlayer1 != null) {
|
||||
textViewDeviceDescriptorPlayer1.setText(getString(R.string.controller_not_connected) + " (" + deviceDescriptorPlayer1 + ")");
|
||||
buttonRemoveControllerPlayer1.setEnabled(true);
|
||||
} else {
|
||||
textViewDeviceDescriptorPlayer1.setText(getString(R.string.controller_none_selected));
|
||||
buttonRemoveControllerPlayer1.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
TextView textViewDeviceDescriptorPlayer2 = (TextView) getView()
|
||||
.findViewById(R.id.textViewDeviceDescriptorPlayer2);
|
||||
Button buttonRemoveControllerPlayer2 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer2);
|
||||
if (labelPlayer2 != null) {
|
||||
textViewDeviceDescriptorPlayer2.setText(labelPlayer2);
|
||||
buttonRemoveControllerPlayer2.setEnabled(true);
|
||||
} else {
|
||||
if (deviceDescriptorPlayer2 != null) {
|
||||
textViewDeviceDescriptorPlayer2.setText(getString(R.string.controller_not_connected) + " (" + deviceDescriptorPlayer2 + ")");
|
||||
buttonRemoveControllerPlayer2.setEnabled(true);
|
||||
} else {
|
||||
textViewDeviceDescriptorPlayer2.setText(getString(R.string.controller_none_selected));
|
||||
buttonRemoveControllerPlayer2.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
TextView textViewDeviceDescriptorPlayer3 = (TextView) getView()
|
||||
.findViewById(R.id.textViewDeviceDescriptorPlayer3);
|
||||
Button buttonRemoveControllerPlayer3 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer3);
|
||||
if (labelPlayer3 != null) {
|
||||
textViewDeviceDescriptorPlayer3.setText(labelPlayer3);
|
||||
buttonRemoveControllerPlayer3.setEnabled(true);
|
||||
} else {
|
||||
if (deviceDescriptorPlayer3 != null) {
|
||||
textViewDeviceDescriptorPlayer3.setText(getString(R.string.controller_not_connected) + " (" + deviceDescriptorPlayer3 + ")");
|
||||
buttonRemoveControllerPlayer3.setEnabled(true);
|
||||
} else {
|
||||
textViewDeviceDescriptorPlayer3.setText(getString(R.string.controller_none_selected));
|
||||
buttonRemoveControllerPlayer3.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
TextView textViewDeviceDescriptorPlayer4 = (TextView) getView()
|
||||
.findViewById(R.id.textViewDeviceDescriptorPlayer4);
|
||||
Button buttonRemoveControllerPlayer4 = (Button) getView()
|
||||
.findViewById(R.id.buttonRemoveControllerPlayer4);
|
||||
if (labelPlayer4 != null) {
|
||||
textViewDeviceDescriptorPlayer4.setText(labelPlayer4);
|
||||
buttonRemoveControllerPlayer4.setEnabled(true);
|
||||
} else {
|
||||
if (deviceDescriptorPlayer4 != null) {
|
||||
textViewDeviceDescriptorPlayer4.setText(getString(R.string.controller_not_connected) + " (" + deviceDescriptorPlayer4 + ")");
|
||||
buttonRemoveControllerPlayer4.setEnabled(true);
|
||||
} else {
|
||||
textViewDeviceDescriptorPlayer4.setText(getString(R.string.controller_none_selected));
|
||||
buttonRemoveControllerPlayer4.setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void selectController(int playerNum) {
|
||||
listenForButton = playerNum;
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity);
|
||||
builder.setTitle(getString(R.string.select_controller_title));
|
||||
builder.setMessage(getString(R.string.select_controller_message) + " " + String.valueOf(listenForButton) + ".");
|
||||
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
listenForButton = 0;
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
builder.setOnKeyListener(new Dialog.OnKeyListener() {
|
||||
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
|
||||
return mapDevice(keyCode, event);
|
||||
}
|
||||
});
|
||||
alertDialogSelectController = builder.create();
|
||||
alertDialogSelectController.show();
|
||||
}
|
||||
|
||||
private boolean mapDevice(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_BACK ||
|
||||
keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
|
||||
return false;
|
||||
|
||||
String descriptor = InputDevice.getDevice(event.getDeviceId()).getDescriptor();
|
||||
|
||||
if (descriptor == null)
|
||||
return false;
|
||||
|
||||
String deviceDescriptorPlayer1 = sharedPreferences.getString("device_descriptor_player_1", null);
|
||||
String deviceDescriptorPlayer2 = sharedPreferences.getString("device_descriptor_player_2", null);
|
||||
String deviceDescriptorPlayer3 = sharedPreferences.getString("device_descriptor_player_3", null);
|
||||
String deviceDescriptorPlayer4 = sharedPreferences.getString("device_descriptor_player_4", null);
|
||||
|
||||
if (descriptor.equals(deviceDescriptorPlayer1) || descriptor.equals(deviceDescriptorPlayer2) ||
|
||||
descriptor.equals(deviceDescriptorPlayer3) || descriptor.equals(deviceDescriptorPlayer4)) {
|
||||
Toast.makeText(parentActivity, getString(R.string.controller_already_in_use), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
switch(listenForButton) {
|
||||
case 0:
|
||||
return false;
|
||||
case 1:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_1", descriptor).commit();
|
||||
break;
|
||||
case 2:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_2", descriptor).commit();
|
||||
break;
|
||||
case 3:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_3", descriptor).commit();
|
||||
break;
|
||||
case 4:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_4", descriptor).commit();
|
||||
break;
|
||||
}
|
||||
|
||||
Log.d("New controller for port " + String.valueOf(listenForButton) + ":", descriptor);
|
||||
|
||||
listenForButton = 0;
|
||||
alertDialogSelectController.cancel();
|
||||
updateControllers();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void removeController(int playerNum) {
|
||||
switch(playerNum) {
|
||||
case 1:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_1", null).commit();
|
||||
break;
|
||||
case 2:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_2", null).commit();
|
||||
break;
|
||||
case 3:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_3", null).commit();
|
||||
break;
|
||||
case 4:
|
||||
sharedPreferences.edit().putString("device_descriptor_player_4", null).commit();
|
||||
break;
|
||||
}
|
||||
|
||||
updateControllers();
|
||||
}
|
||||
}
|
|
@ -152,18 +152,6 @@ public class FileBrowser extends Fragment {
|
|||
if (!home.exists() || !home.isDirectory()) {
|
||||
Toast.makeText(getActivity(), "Please configure a home directory",
|
||||
Toast.LENGTH_LONG).show();
|
||||
OptionsFragment optsFrag = (OptionsFragment) getActivity()
|
||||
.getSupportFragmentManager().findFragmentByTag(
|
||||
"OPTIONS_FRAG");
|
||||
if (optsFrag != null) {
|
||||
if (optsFrag.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
optsFrag = new OptionsFragment();
|
||||
getActivity().getSupportFragmentManager().beginTransaction()
|
||||
.replace(R.id.fragment_container, optsFrag, "OPTIONS_FRAG")
|
||||
.addToBackStack(null).commit();
|
||||
}
|
||||
|
||||
if (!ImgBrowse) {
|
||||
|
@ -171,67 +159,6 @@ public class FileBrowser extends Fragment {
|
|||
} else {
|
||||
generate(ExternalFiles(new File(game_directory)));
|
||||
}
|
||||
|
||||
File bios = new File(home_directory, "data/dc_boot.bin");
|
||||
File flash = new File(home_directory, "data/dc_flash.bin");
|
||||
|
||||
String msg = null;
|
||||
if (!bios.exists())
|
||||
msg = "BIOS Missing. The Dreamcast BIOS is required for this emulator to work. Place the BIOS file in "
|
||||
+ home_directory + "/data/dc_boot.bin";
|
||||
else if (!flash.exists())
|
||||
msg = "Flash Missing. The Dreamcast Flash is required for this emulator to work. Place the Flash file in "
|
||||
+ home_directory + "/data/dc_flash.bin";
|
||||
|
||||
if (msg != null) {
|
||||
vib.vibrate(50);
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||
parentActivity);
|
||||
|
||||
// set title
|
||||
alertDialogBuilder.setTitle("You have to provide the BIOS");
|
||||
|
||||
// set dialog message
|
||||
alertDialogBuilder
|
||||
.setMessage(msg)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton("Dismiss",
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int id) {
|
||||
// if this button is clicked, close
|
||||
// current activity
|
||||
parentActivity.finish();
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Options",
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int id) {
|
||||
OptionsFragment optsFrag = (OptionsFragment) getActivity()
|
||||
.getSupportFragmentManager()
|
||||
.findFragmentByTag("OPTIONS_FRAG");
|
||||
if (optsFrag != null) {
|
||||
if (optsFrag.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
optsFrag = new OptionsFragment();
|
||||
getActivity()
|
||||
.getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container,
|
||||
optsFrag, "OPTIONS_FRAG")
|
||||
.addToBackStack(null).commit();
|
||||
}
|
||||
});
|
||||
|
||||
// create alert dialog
|
||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||
|
||||
// show it
|
||||
alertDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
class DirSort implements Comparator<File> {
|
||||
|
@ -291,10 +218,11 @@ public class FileBrowser extends Fragment {
|
|||
.findViewById(R.id.game_list);
|
||||
v.removeAllViews();
|
||||
|
||||
((TextView) parentActivity.findViewById(R.id.text_cwd)).setText(R.string.games_listing);
|
||||
|
||||
bootBiosItem(v);
|
||||
|
||||
((TextView) parentActivity.findViewById(R.id.text_cwd))
|
||||
.setText(R.string.games_listing);
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
final View childview = parentActivity.getLayoutInflater().inflate(
|
||||
R.layout.app_list_item, null, false);
|
||||
|
@ -377,7 +305,7 @@ public class FileBrowser extends Fragment {
|
|||
R.layout.app_list_item, null, false);
|
||||
|
||||
((TextView) childview.findViewById(R.id.item_name))
|
||||
.setText("Boot Dreamcast Bios");
|
||||
.setText(getString(R.string.boot_bios));
|
||||
|
||||
childview.setTag(null);
|
||||
|
||||
|
@ -476,10 +404,10 @@ public class FileBrowser extends Fragment {
|
|||
if (list.get(i) == null) {
|
||||
if (ImgBrowse == true)
|
||||
((TextView) childview.findViewById(R.id.item_name))
|
||||
.setText("BOOT BIOS");
|
||||
.setText(getString(R.string.folder_bios));
|
||||
if (ImgBrowse == false)
|
||||
((TextView) childview.findViewById(R.id.item_name))
|
||||
.setText("SELECT CURRENT FOLDER");
|
||||
.setText(getString(R.string.folder_select));
|
||||
} else if (list.get(i) == parent)
|
||||
((TextView) childview.findViewById(R.id.item_name))
|
||||
.setText("..");
|
||||
|
@ -529,7 +457,7 @@ public class FileBrowser extends Fragment {
|
|||
.fromFile(new File(root_sd
|
||||
.getAbsolutePath())));
|
||||
vib.vibrate(250);
|
||||
|
||||
|
||||
if (games) {
|
||||
game_directory = root_sd.getAbsolutePath();
|
||||
mPrefs.edit()
|
||||
|
@ -540,8 +468,8 @@ public class FileBrowser extends Fragment {
|
|||
mPrefs.edit()
|
||||
.putString("home_directory",
|
||||
home_directory).commit();
|
||||
File data_directory = new File(home_directory,
|
||||
"data");
|
||||
File data_directory = new File(
|
||||
home_directory, "data");
|
||||
if (!data_directory.exists()
|
||||
|| !data_directory.isDirectory()) {
|
||||
data_directory.mkdirs();
|
||||
|
@ -592,5 +520,4 @@ public class FileBrowser extends Fragment {
|
|||
v.addView(sep);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,35 +2,35 @@ package com.reicast.emulator;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
|
||||
import tv.ouya.console.api.OuyaController;
|
||||
|
||||
import com.reicast.emulator.GL2JNIView.EmuThread;
|
||||
|
||||
import android.view.InputDevice;
|
||||
import android.content.SharedPreferences;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.InputDevice;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.view.Window;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView.ScaleType;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.Toast;
|
||||
import android.net.Uri;
|
||||
import android.content.Intent;
|
||||
import android.content.res.AssetFileDescriptor;
|
||||
import android.content.res.AssetManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
|
||||
public class GL2JNIActivity extends Activity {
|
||||
|
@ -38,9 +38,13 @@ public class GL2JNIActivity extends Activity {
|
|||
PopupWindow popUp;
|
||||
LayoutParams params;
|
||||
MOGAInput moga = new MOGAInput();
|
||||
static boolean nVidia = false;
|
||||
static boolean[] xbox = { false, false, false, false }, nVidia = { false, false, false, false };
|
||||
float[] globalLS_X = new float[4], globalLS_Y = new float[4], previousLS_X = new float[4], previousLS_Y = new float[4];
|
||||
|
||||
int map[];
|
||||
public static HashMap<Integer, String> deviceId_deviceDescriptor = new HashMap<Integer, String>();
|
||||
public static HashMap<String, Integer> deviceDescriptor_PlayerNum = new HashMap<String, Integer>();
|
||||
|
||||
int map[][];
|
||||
|
||||
View addbut(int x, OnClickListener ocl) {
|
||||
ImageButton but = new ImageButton(this);
|
||||
|
@ -137,32 +141,81 @@ public class GL2JNIActivity extends Activity {
|
|||
|
||||
// Call parent onCreate()
|
||||
super.onCreate(icicle);
|
||||
OuyaController.init(this);
|
||||
|
||||
map = new int[4][];
|
||||
|
||||
// Populate device descriptor-to-player-map from preferences
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
deviceDescriptor_PlayerNum.put(prefs.getString("device_descriptor_player_1", null), 0);
|
||||
deviceDescriptor_PlayerNum.put(prefs.getString("device_descriptor_player_2", null), 1);
|
||||
deviceDescriptor_PlayerNum.put(prefs.getString("device_descriptor_player_3", null), 2);
|
||||
deviceDescriptor_PlayerNum.put(prefs.getString("device_descriptor_player_4", null), 3);
|
||||
|
||||
boolean controllerTwoConnected = false;
|
||||
boolean controllerThreeConnected = false;
|
||||
boolean controllerFourConnected = false;
|
||||
|
||||
for (HashMap.Entry<String, Integer> e : deviceDescriptor_PlayerNum.entrySet()) {
|
||||
String descriptor = e.getKey();
|
||||
Integer playerNum = e.getValue();
|
||||
|
||||
switch (playerNum) {
|
||||
case 1:
|
||||
if (descriptor != null)
|
||||
controllerTwoConnected = true;
|
||||
break;
|
||||
case 2:
|
||||
if (descriptor != null)
|
||||
controllerThreeConnected = true;
|
||||
break;
|
||||
case 3:
|
||||
if (descriptor != null)
|
||||
controllerFourConnected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
JNIdc.initControllers(new boolean[] {controllerTwoConnected, controllerThreeConnected, controllerFourConnected});
|
||||
|
||||
int joys[] = InputDevice.getDeviceIds();
|
||||
for (int i = 0; i < joys.length; i++) {
|
||||
String descriptor = InputDevice.getDevice(joys[i]).getDescriptor();
|
||||
Log.d("reidc", "InputDevice ID: " + joys[i]);
|
||||
Log.d("reidc", "InputDevice Name: "
|
||||
+ InputDevice.getDevice(joys[i]).getName());
|
||||
Log.d("reidc", "InputDevice Descriptor: " + descriptor);
|
||||
deviceId_deviceDescriptor.put(joys[i], descriptor);
|
||||
}
|
||||
|
||||
for (int i = 0; i < joys.length; i++) {
|
||||
Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(joys[i]));
|
||||
|
||||
if (playerNum != null) {
|
||||
|
||||
if (InputDevice.getDevice(joys[i]).getName()
|
||||
.equals("Sony PLAYSTATION(R)3 Controller")) {
|
||||
map = new int[] {
|
||||
OuyaController.BUTTON_Y, key_CONT_B,
|
||||
OuyaController.BUTTON_U, key_CONT_A,
|
||||
OuyaController.BUTTON_O, key_CONT_X,
|
||||
OuyaController.BUTTON_A, key_CONT_Y,
|
||||
map[playerNum] = new int[] {
|
||||
OuyaController.BUTTON_Y, key_CONT_Y,
|
||||
OuyaController.BUTTON_U, key_CONT_X,
|
||||
OuyaController.BUTTON_O, key_CONT_A,
|
||||
OuyaController.BUTTON_A, key_CONT_B,
|
||||
|
||||
OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
|
||||
OuyaController.BUTTON_DPAD_DOWN, key_CONT_DPAD_DOWN,
|
||||
OuyaController.BUTTON_DPAD_LEFT, key_CONT_DPAD_LEFT,
|
||||
OuyaController.BUTTON_DPAD_RIGHT, key_CONT_DPAD_RIGHT,
|
||||
OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
|
||||
OuyaController.BUTTON_DPAD_DOWN,
|
||||
key_CONT_DPAD_DOWN,
|
||||
OuyaController.BUTTON_DPAD_LEFT,
|
||||
key_CONT_DPAD_LEFT,
|
||||
OuyaController.BUTTON_DPAD_RIGHT,
|
||||
key_CONT_DPAD_RIGHT,
|
||||
|
||||
OuyaController.BUTTON_MENU, key_CONT_START,
|
||||
OuyaController.BUTTON_R1, key_CONT_START
|
||||
|
||||
};
|
||||
} else if (InputDevice.getDevice(joys[i]).getName()
|
||||
.contains("NVIDIA Corporation NVIDIA Controller")) {
|
||||
map = new int[] {
|
||||
.equals("Microsoft X-Box 360 pad")) {
|
||||
map[playerNum] = new int[] {
|
||||
OuyaController.BUTTON_O, key_CONT_A,
|
||||
OuyaController.BUTTON_A, key_CONT_B,
|
||||
OuyaController.BUTTON_Y, key_CONT_Y,
|
||||
|
@ -178,9 +231,32 @@ public class GL2JNIActivity extends Activity {
|
|||
|
||||
OuyaController.BUTTON_MENU, key_CONT_START,
|
||||
OuyaController.BUTTON_R1, key_CONT_START };
|
||||
nVidia = true;
|
||||
|
||||
xbox[playerNum] = true;
|
||||
|
||||
globalLS_X[playerNum] = previousLS_X[playerNum] = 0.0f;
|
||||
globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f;
|
||||
} else if (InputDevice.getDevice(joys[i]).getName()
|
||||
.contains("NVIDIA Corporation NVIDIA Controller")) {
|
||||
map[playerNum] = new int[] {
|
||||
OuyaController.BUTTON_O, key_CONT_A,
|
||||
OuyaController.BUTTON_A, key_CONT_B,
|
||||
OuyaController.BUTTON_Y, key_CONT_Y,
|
||||
OuyaController.BUTTON_U, key_CONT_X,
|
||||
|
||||
OuyaController.BUTTON_DPAD_UP, key_CONT_DPAD_UP,
|
||||
OuyaController.BUTTON_DPAD_DOWN,
|
||||
key_CONT_DPAD_DOWN,
|
||||
OuyaController.BUTTON_DPAD_LEFT,
|
||||
key_CONT_DPAD_LEFT,
|
||||
OuyaController.BUTTON_DPAD_RIGHT,
|
||||
key_CONT_DPAD_RIGHT,
|
||||
|
||||
OuyaController.BUTTON_MENU, key_CONT_START,
|
||||
OuyaController.BUTTON_R1, key_CONT_START };
|
||||
nVidia[playerNum] = true;
|
||||
} else if (!moga.isActive) { // Ouya controller
|
||||
map = new int[] {
|
||||
map[playerNum] = new int[] {
|
||||
OuyaController.BUTTON_O, key_CONT_A,
|
||||
OuyaController.BUTTON_A, key_CONT_B,
|
||||
OuyaController.BUTTON_Y, key_CONT_Y,
|
||||
|
@ -197,6 +273,7 @@ public class GL2JNIActivity extends Activity {
|
|||
OuyaController.BUTTON_MENU, key_CONT_START,
|
||||
OuyaController.BUTTON_R1, key_CONT_START };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When viewing a resource, pass its URI to the native code for opening
|
||||
|
@ -217,9 +294,10 @@ public class GL2JNIActivity extends Activity {
|
|||
// Log.w("INPUT", event.toString() + " " + event.getSource());
|
||||
// Get all the axis for the KeyEvent
|
||||
|
||||
if (nVidia) {
|
||||
JNIdc.hide_osd();
|
||||
}
|
||||
Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(event.getDeviceId()));
|
||||
|
||||
if (playerNum == null)
|
||||
return false;
|
||||
|
||||
if (!moga.isActive) {
|
||||
|
||||
|
@ -234,16 +312,29 @@ public class GL2JNIActivity extends Activity {
|
|||
float L2 = event.getAxisValue(OuyaController.AXIS_L2);
|
||||
float R2 = event.getAxisValue(OuyaController.AXIS_R2);
|
||||
|
||||
GL2JNIView.lt = (int) (L2 * 255);
|
||||
GL2JNIView.rt = (int) (R2 * 255);
|
||||
if (xbox[playerNum] || nVidia[playerNum]) {
|
||||
previousLS_X[playerNum] = globalLS_X[playerNum];
|
||||
previousLS_Y[playerNum] = globalLS_Y[playerNum];
|
||||
globalLS_X[playerNum] = LS_X;
|
||||
globalLS_Y[playerNum] = LS_Y;
|
||||
}
|
||||
|
||||
GL2JNIView.jx = (int) (LS_X * 126);
|
||||
GL2JNIView.jy = (int) (LS_Y * 126);
|
||||
GL2JNIView.lt[playerNum] = (int) (L2 * 255);
|
||||
GL2JNIView.rt[playerNum] = (int) (R2 * 255);
|
||||
|
||||
GL2JNIView.jx[playerNum] = (int) (LS_X * 126);
|
||||
GL2JNIView.jy[playerNum] = (int) (LS_Y * 126);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
if ((xbox[playerNum] || nVidia[playerNum]) && ((globalLS_X[playerNum] == previousLS_X[playerNum] && globalLS_Y[playerNum] == previousLS_Y[playerNum])
|
||||
|| (previousLS_X[playerNum] == 0.0f && previousLS_Y[playerNum] == 0.0f)))
|
||||
// Only handle Left Stick on an Xbox 360 controller if there was some actual motion on the stick,
|
||||
// so otherwise the event can be handled as a DPAD event
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
private static final int key_CONT_B = 0x0002;
|
||||
|
@ -290,16 +381,19 @@ public class GL2JNIActivity extends Activity {
|
|||
* };
|
||||
*/
|
||||
|
||||
boolean handle_key(int kc, boolean down) {
|
||||
boolean handle_key(Integer playerNum, int kc, boolean down) {
|
||||
if (playerNum == null)
|
||||
return false;
|
||||
|
||||
if (!moga.isActive) {
|
||||
|
||||
boolean rav = false;
|
||||
for (int i = 0; i < map.length; i += 2) {
|
||||
if (map[i + 0] == kc) {
|
||||
for (int i = 0; i < map[playerNum].length; i += 2) {
|
||||
if (map[playerNum][i + 0] == kc) {
|
||||
if (down)
|
||||
GL2JNIView.kcode_raw &= ~map[i + 1];
|
||||
GL2JNIView.kcode_raw[playerNum] &= ~map[playerNum][i + 1];
|
||||
else
|
||||
GL2JNIView.kcode_raw |= map[i + 1];
|
||||
GL2JNIView.kcode_raw[playerNum] |= map[playerNum][i + 1];
|
||||
|
||||
rav = true;
|
||||
break;
|
||||
|
@ -314,12 +408,17 @@ public class GL2JNIActivity extends Activity {
|
|||
}
|
||||
|
||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||
return handle_key(keyCode, false) || super.onKeyUp(keyCode, event);
|
||||
Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(event.getDeviceId()));
|
||||
|
||||
return handle_key(playerNum, keyCode, false) || super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (handle_key(keyCode, true)) {
|
||||
JNIdc.hide_osd();
|
||||
Integer playerNum = deviceDescriptor_PlayerNum.get(deviceId_deviceDescriptor.get(event.getDeviceId()));
|
||||
|
||||
if (handle_key(playerNum, keyCode, true)) {
|
||||
if(playerNum == 0)
|
||||
JNIdc.hide_osd();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -377,4 +476,4 @@ public class GL2JNIActivity extends Activity {
|
|||
mView.onResume();
|
||||
moga.onResume();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,33 +1,25 @@
|
|||
package com.reicast.emulator;
|
||||
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.opengl.GLU;
|
||||
import android.os.Vibrator;
|
||||
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioFormat;
|
||||
import android.media.AudioTrack;
|
||||
import android.content.res.Configuration;
|
||||
|
||||
import javax.microedition.khronos.egl.EGL10;
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
import javax.microedition.khronos.egl.EGLContext;
|
||||
import javax.microedition.khronos.egl.EGLDisplay;
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.media.AudioFormat;
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioTrack;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.os.Vibrator;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
|
||||
/**
|
||||
* A simple GLSurfaceView sub-class that demonstrate how to perform
|
||||
|
@ -115,6 +107,8 @@ class GL2JNIView extends GLSurfaceView
|
|||
};
|
||||
|
||||
Renderer rend;
|
||||
|
||||
private boolean touchVibrationEnabled;
|
||||
|
||||
|
||||
public GL2JNIView(Context context,String newFileName,boolean translucent,int depth,int stencil)
|
||||
|
@ -122,6 +116,9 @@ class GL2JNIView extends GLSurfaceView
|
|||
super(context);
|
||||
setKeepScreenOn(true);
|
||||
vib=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
touchVibrationEnabled = prefs.getBoolean("touch_vibration_enabled", true);
|
||||
|
||||
// This is the game we are going to run
|
||||
fileName = newFileName;
|
||||
|
@ -130,7 +127,9 @@ class GL2JNIView extends GLSurfaceView
|
|||
JNIdc.data(1, GL2JNIActivity.syms);
|
||||
|
||||
JNIdc.hide_osd();
|
||||
JNIdc.kcode(0xFFFF,0,0,128,128);
|
||||
int[] kcode = { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF };
|
||||
int[] rt = { 0, 0, 0, 0 }, lt = { 0, 0, 0, 0 };
|
||||
int[] jx = { 128, 128, 128, 128 }, jy = { 128, 128, 128, 128 };
|
||||
JNIdc.init(fileName);
|
||||
|
||||
|
||||
|
@ -274,8 +273,8 @@ class GL2JNIView extends GLSurfaceView
|
|||
}
|
||||
*/
|
||||
|
||||
static int kcode_raw = 0xFFFF;
|
||||
static int lt, rt, jx, jy;
|
||||
static int[] kcode_raw = { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF };
|
||||
static int[] lt = new int[4], rt = new int[4], jx = new int[4], jy = new int[4];
|
||||
|
||||
@Override public boolean onTouchEvent(final MotionEvent event)
|
||||
{
|
||||
|
@ -317,7 +316,8 @@ class GL2JNIView extends GLSurfaceView
|
|||
if (vjoy[j][4]>=-2)
|
||||
{
|
||||
if (vjoy[j][5]==0)
|
||||
vib.vibrate(50);
|
||||
if (touchVibrationEnabled)
|
||||
vib.vibrate(50);
|
||||
vjoy[j][5]=2;
|
||||
}
|
||||
|
||||
|
@ -331,8 +331,8 @@ class GL2JNIView extends GLSurfaceView
|
|||
anal_id=event.getPointerId(i);
|
||||
}
|
||||
else if (vjoy[j][4]==-4) ;
|
||||
else if(vjoy[j][4]==-1) lt=pre;
|
||||
else if(vjoy[j][4]==-2) rt=pre;
|
||||
else if(vjoy[j][4]==-1) lt[0]=pre;
|
||||
else if(vjoy[j][4]==-2) rt[0]=pre;
|
||||
else
|
||||
rv&=~(int)vjoy[j][4];
|
||||
}
|
||||
|
@ -375,8 +375,8 @@ class GL2JNIView extends GLSurfaceView
|
|||
reset_analog();
|
||||
anal_id=-1;
|
||||
rv=0xFFFF;
|
||||
rt=0;
|
||||
lt=0;
|
||||
rt[0]=0;
|
||||
lt[0]=0;
|
||||
for(int j=0;j<vjoy.length;j++)
|
||||
vjoy[j][5]=0;
|
||||
break;
|
||||
|
@ -401,9 +401,9 @@ class GL2JNIView extends GLSurfaceView
|
|||
if(GL2JNIActivity.keys[0]!=0) rv&=~key_CONT_B;
|
||||
*/
|
||||
|
||||
kcode_raw = rv;
|
||||
jx = get_anal(11, 0);
|
||||
jy = get_anal(11, 1);
|
||||
kcode_raw[0] = rv;
|
||||
jx[0] = get_anal(11, 0);
|
||||
jy[0] = get_anal(11, 1);
|
||||
return(true);
|
||||
}
|
||||
|
||||
|
@ -789,4 +789,4 @@ public void onStop() {
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
package com.reicast.emulator;
|
||||
|
||||
import android.media.AudioTrack;
|
||||
|
||||
public class JNIdc
|
||||
{
|
||||
|
@ -17,11 +16,13 @@ public class JNIdc
|
|||
public static native void rendinit(int w,int y);
|
||||
public static native void rendframe();
|
||||
|
||||
public static native void kcode(int kcode,int lt, int rt, int jx, int jy);
|
||||
public static native void kcode(int[] kcode, int[] lt, int[] rt, int[] jx, int[] jy);
|
||||
|
||||
public static native void vjoy(int id,float x, float y, float w, float h);
|
||||
//public static native int play(short result[],int size);
|
||||
|
||||
public static native void initControllers(boolean[] controllers);
|
||||
|
||||
public static void show_osd() {
|
||||
JNIdc.vjoy(13, 1,0,0,0);
|
||||
}
|
||||
|
|
|
@ -3,21 +3,10 @@ package com.reicast.emulator;
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TableLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.bda.controller.Controller;
|
||||
import com.bda.controller.ControllerListener;
|
||||
import com.bda.controller.KeyEvent;
|
||||
|
@ -125,21 +114,21 @@ public class MOGAInput
|
|||
mController.onResume();
|
||||
|
||||
/*
|
||||
for(final Entry<Integer, ExampleInteger> entry : mStates.entrySet())
|
||||
for(final Entry<Integer, ExampleInteger> entry : mStates.entrySet())
|
||||
{
|
||||
final int key = entry.getKey();
|
||||
final ExampleInteger value = entry.getValue();
|
||||
value.mValue = mController.getState(key);
|
||||
}
|
||||
|
||||
for(final Entry<Integer, ExampleInteger> entry : mKeys.entrySet())
|
||||
for(final Entry<Integer, ExampleInteger> entry : mKeys.entrySet())
|
||||
{
|
||||
final int key = entry.getKey();
|
||||
final ExampleInteger value = entry.getValue();
|
||||
value.mValue = mController.getKeyCode(key);
|
||||
}
|
||||
|
||||
for(final Entry<Integer, ExampleFloat> entry : mMotions.entrySet())
|
||||
for(final Entry<Integer, ExampleFloat> entry : mMotions.entrySet())
|
||||
{
|
||||
final int key = entry.getKey();
|
||||
final ExampleFloat value = entry.getValue();
|
||||
|
@ -152,13 +141,20 @@ public class MOGAInput
|
|||
{
|
||||
public void onKeyEvent(KeyEvent event)
|
||||
{
|
||||
JNIdc.hide_osd();
|
||||
for (int i = 0; i < map.length; i += 2) {
|
||||
Integer playerNum = GL2JNIActivity.deviceDescriptor_PlayerNum.get(GL2JNIActivity.deviceId_deviceDescriptor.get(event.getControllerId()));
|
||||
|
||||
if (playerNum == null)
|
||||
return;
|
||||
|
||||
if(playerNum == 0)
|
||||
JNIdc.hide_osd();
|
||||
|
||||
for (int i = 0; i < map.length; i += 2) {
|
||||
if (map[i + 0] == event.getKeyCode()) {
|
||||
if (event.getAction() == 0) //FIXME to const
|
||||
GL2JNIView.kcode_raw &= ~map[i + 1];
|
||||
GL2JNIView.kcode_raw[playerNum] &= ~map[i + 1];
|
||||
else
|
||||
GL2JNIView.kcode_raw |= map[i + 1];
|
||||
GL2JNIView.kcode_raw[playerNum] |= map[i + 1];
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -167,21 +163,27 @@ public class MOGAInput
|
|||
|
||||
public void onMotionEvent(MotionEvent event)
|
||||
{
|
||||
JNIdc.hide_osd();
|
||||
Integer playerNum = GL2JNIActivity.deviceDescriptor_PlayerNum.get(GL2JNIActivity.deviceId_deviceDescriptor.get(event.getControllerId()));
|
||||
|
||||
if (playerNum == null)
|
||||
return;
|
||||
|
||||
if(playerNum == 0)
|
||||
JNIdc.hide_osd();
|
||||
|
||||
float LS_X = event.getAxisValue(MotionEvent.AXIS_X);
|
||||
float LS_Y = event.getAxisValue(MotionEvent.AXIS_Y);
|
||||
float L2 = event.getAxisValue(MotionEvent.AXIS_LTRIGGER);
|
||||
float R2 = event.getAxisValue(MotionEvent.AXIS_RTRIGGER);
|
||||
|
||||
GL2JNIView.lt = (int) (L2 * 255);
|
||||
GL2JNIView.rt = (int) (R2 * 255);
|
||||
GL2JNIView.lt[playerNum] = (int) (L2 * 255);
|
||||
GL2JNIView.rt[playerNum] = (int) (R2 * 255);
|
||||
|
||||
GL2JNIView.jx = (int) (LS_X * 126);
|
||||
GL2JNIView.jy = (int) (LS_Y * 126);
|
||||
GL2JNIView.jx[playerNum] = (int) (LS_X * 126);
|
||||
GL2JNIView.jy[playerNum] = (int) (LS_Y * 126);
|
||||
|
||||
/*
|
||||
for(final Entry<Integer, ExampleFloat> entry : mMotions.entrySet())
|
||||
for(final Entry<Integer, ExampleFloat> entry : mMotions.entrySet())
|
||||
{
|
||||
final int key = entry.getKey();
|
||||
final ExampleFloat value = entry.getValue();
|
||||
|
@ -191,9 +193,15 @@ public class MOGAInput
|
|||
|
||||
public void onStateEvent(StateEvent event)
|
||||
{
|
||||
JNIdc.hide_osd();
|
||||
Integer playerNum = GL2JNIActivity.deviceDescriptor_PlayerNum.get(GL2JNIActivity.deviceId_deviceDescriptor.get(event.getControllerId()));
|
||||
|
||||
if (event.getState() == ACTION_CONNECTED) {
|
||||
if (playerNum == null)
|
||||
return;
|
||||
|
||||
if(playerNum == 0)
|
||||
JNIdc.hide_osd();
|
||||
|
||||
if (event.getState() == StateEvent.STATE_CONNECTION && event.getAction() == ACTION_CONNECTED) {
|
||||
Toast.makeText(act.getApplicationContext(), "MOGA Connected!", Toast.LENGTH_SHORT).show();
|
||||
isActive = true;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import java.util.ArrayList;
|
|||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.TypedArray;
|
||||
|
@ -27,7 +29,6 @@ import android.view.View;
|
|||
import android.view.View.OnClickListener;
|
||||
import android.view.View.OnTouchListener;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
|
||||
public class MainActivity extends FragmentActivity implements
|
||||
|
@ -59,81 +60,21 @@ public class MainActivity extends FragmentActivity implements
|
|||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.mainuilayout_fragment);
|
||||
|
||||
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
home_directory = mPrefs.getString("home_directory", home_directory);
|
||||
JNIdc.config(home_directory);
|
||||
|
||||
// Check that the activity is using the layout version with
|
||||
// the fragment_container FrameLayout
|
||||
if (findViewById(R.id.fragment_container) != null) {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
|
||||
navMenuTitles = getResources().getStringArray(
|
||||
R.array.nav_drawer_items);
|
||||
|
||||
// nav drawer icons from resources
|
||||
navMenuIcons = getResources().obtainTypedArray(
|
||||
R.array.nav_drawer_icons);
|
||||
|
||||
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
|
||||
|
||||
navDrawerItems = new ArrayList<NavDrawerItem>();
|
||||
|
||||
// adding nav drawer items to array
|
||||
// Browser
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
|
||||
.getResourceId(0, -1)));
|
||||
// Options
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons
|
||||
.getResourceId(1, -1)));
|
||||
// Config
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons
|
||||
.getResourceId(2, -1)));
|
||||
// About
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons
|
||||
.getResourceId(3, -1)));
|
||||
|
||||
// Recycle the typed array
|
||||
navMenuIcons.recycle();
|
||||
|
||||
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
|
||||
|
||||
// setting the nav drawer list adapter
|
||||
adapter = new NavDrawerListAdapter(getApplicationContext(),
|
||||
navDrawerItems);
|
||||
mDrawerList.setAdapter(adapter);
|
||||
|
||||
// enabling action bar app icon and behaving it as toggle button
|
||||
getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getActionBar().setHomeButtonEnabled(true);
|
||||
|
||||
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
|
||||
R.drawable.ic_drawer, // nav menu toggle icon
|
||||
R.string.app_name, // nav drawer open - description for
|
||||
// accessibility
|
||||
R.string.app_name // nav drawer close - description for
|
||||
// accessibility
|
||||
) {
|
||||
public void onDrawerClosed(View view) {
|
||||
getActionBar().setTitle(mTitle);
|
||||
// calling onPrepareOptionsMenu() to show action bar
|
||||
// icons
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
getActionBar().setTitle(mDrawerTitle);
|
||||
// calling onPrepareOptionsMenu() to hide action bar
|
||||
// icons
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
};
|
||||
mDrawerLayout.setDrawerListener(mDrawerToggle);
|
||||
}
|
||||
|
||||
// However, if we're being restored from a previous state,
|
||||
// then we don't need to do anything and should return or else
|
||||
// we could end up with overlapping fragments.
|
||||
if (savedInstanceState != null) {
|
||||
return;
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
if (savedInstanceState != null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Create a new Fragment to be placed in the activity layout
|
||||
|
@ -155,41 +96,135 @@ public class MainActivity extends FragmentActivity implements
|
|||
.add(R.id.fragment_container, firstFragment).commit();
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
|
||||
navMenuTitles = getResources().getStringArray(
|
||||
R.array.nav_drawer_items);
|
||||
|
||||
// nav drawer icons from resources
|
||||
navMenuIcons = getResources().obtainTypedArray(
|
||||
R.array.nav_drawer_icons);
|
||||
|
||||
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
|
||||
|
||||
navDrawerItems = new ArrayList<NavDrawerItem>();
|
||||
|
||||
// adding nav drawer items to array
|
||||
// Browser
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
|
||||
.getResourceId(0, 0)));
|
||||
// Settings
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons
|
||||
.getResourceId(1, 0)));
|
||||
// Paths
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons
|
||||
.getResourceId(2, 0)));
|
||||
// Controllers
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons
|
||||
.getResourceId(3, 0)));
|
||||
// About
|
||||
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons
|
||||
.getResourceId(4, 0)));
|
||||
|
||||
// Recycle the typed array
|
||||
navMenuIcons.recycle();
|
||||
|
||||
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
|
||||
|
||||
// setting the nav drawer list adapter
|
||||
adapter = new NavDrawerListAdapter(getApplicationContext(),
|
||||
navDrawerItems);
|
||||
mDrawerList.setAdapter(adapter);
|
||||
|
||||
// enabling action bar app icon and behaving it as toggle button
|
||||
getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getActionBar().setHomeButtonEnabled(true);
|
||||
|
||||
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
|
||||
R.drawable.ic_drawer, // nav menu toggle icon
|
||||
R.string.app_name, // nav drawer open - description for
|
||||
// accessibility
|
||||
R.string.app_name // nav drawer close - description for
|
||||
// accessibility
|
||||
) {
|
||||
public void onDrawerClosed(View view) {
|
||||
getActionBar().setTitle(mTitle);
|
||||
// calling onPrepareOptionsMenu() to show action bar
|
||||
// icons
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
getActionBar().setTitle(mDrawerTitle);
|
||||
// calling onPrepareOptionsMenu() to hide action bar
|
||||
// icons
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
};
|
||||
mDrawerLayout.setDrawerListener(mDrawerToggle);
|
||||
|
||||
// if (savedInstanceState == null) {
|
||||
// displayView(0);
|
||||
//
|
||||
// }
|
||||
} else {
|
||||
|
||||
findViewById(R.id.options).setOnClickListener(
|
||||
new OnClickListener() {
|
||||
public void onClick(View view) {
|
||||
OptionsFragment optionsFrag = (OptionsFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("OPTIONS_FRAG");
|
||||
if (optionsFrag != null) {
|
||||
if (optionsFrag.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
optionsFrag = new OptionsFragment();
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container,
|
||||
optionsFrag, "OPTIONS_FRAG")
|
||||
.addToBackStack(null).commit();
|
||||
/*
|
||||
* AlertDialog.Builder alertDialogBuilder = new
|
||||
* AlertDialog.Builder( MainActivity.this);
|
||||
*
|
||||
* // set title
|
||||
* alertDialogBuilder.setTitle("Configure");
|
||||
*
|
||||
* // set dialog message alertDialogBuilder
|
||||
* .setMessage("No configuration for now :D")
|
||||
* .setCancelable(false)
|
||||
* .setPositiveButton("Oh well",new
|
||||
* DialogInterface.OnClickListener() { public void
|
||||
* onClick(DialogInterface dialog,int id) {
|
||||
* //FileBrowser.this.finish(); } });
|
||||
*
|
||||
* // create alert dialog AlertDialog alertDialog =
|
||||
* alertDialogBuilder.create();
|
||||
*
|
||||
* // show it alertDialog.show();
|
||||
*/
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
findViewById(R.id.config).setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View view) {
|
||||
OptionsFragment optsFrag = (OptionsFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("OPTIONS_FRAG");
|
||||
if (optsFrag != null) {
|
||||
if (optsFrag.isVisible()) {
|
||||
ConfigureFragment configFrag = (ConfigureFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("CONFIG_FRAG");
|
||||
if (configFrag != null) {
|
||||
if (configFrag.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
optsFrag = new OptionsFragment();
|
||||
configFrag = new ConfigureFragment();
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container, optsFrag,
|
||||
"OPTIONS_FRAG").addToBackStack(null)
|
||||
.replace(R.id.fragment_container, configFrag,
|
||||
"CONFIG_FRAG").addToBackStack(null)
|
||||
.commit();
|
||||
/*
|
||||
* AlertDialog.Builder alertDialogBuilder = new
|
||||
* AlertDialog.Builder( MainActivity.this);
|
||||
*
|
||||
* // set title alertDialogBuilder.setTitle("Configure");
|
||||
*
|
||||
* // set dialog message alertDialogBuilder
|
||||
* .setMessage("No configuration for now :D")
|
||||
* .setCancelable(false) .setPositiveButton("Oh well",new
|
||||
* DialogInterface.OnClickListener() { public void
|
||||
* onClick(DialogInterface dialog,int id) {
|
||||
* //FileBrowser.this.finish(); } });
|
||||
*
|
||||
* // create alert dialog AlertDialog alertDialog =
|
||||
* alertDialogBuilder.create();
|
||||
*
|
||||
* // show it alertDialog.show();
|
||||
*/
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -232,16 +267,75 @@ public class MainActivity extends FragmentActivity implements
|
|||
});
|
||||
}
|
||||
|
||||
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
home_directory = mPrefs.getString("home_directory", home_directory);
|
||||
JNIdc.config(home_directory);
|
||||
|
||||
}
|
||||
|
||||
public void onGameSelected(Uri uri) {
|
||||
Intent inte = new Intent(Intent.ACTION_VIEW, uri, getBaseContext(),
|
||||
File bios = new File(home_directory, "data/dc_boot.bin");
|
||||
File flash = new File(home_directory, "data/dc_flash.bin");
|
||||
|
||||
String msg = null;
|
||||
if (!bios.exists())
|
||||
msg = getString(R.string.missing_bios, home_directory);
|
||||
else if (!flash.exists())
|
||||
msg = getString(R.string.missing_flash, home_directory);
|
||||
|
||||
if (msg != null) {
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||
this);
|
||||
|
||||
// set title
|
||||
alertDialogBuilder.setTitle("You have to provide the BIOS");
|
||||
|
||||
// set dialog message
|
||||
alertDialogBuilder
|
||||
.setMessage(msg)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton("Dismiss",
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int id) {
|
||||
// if this button is clicked, close
|
||||
// current activity
|
||||
//MainActivity.this.finish();
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Options",
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int id) {
|
||||
FileBrowser firstFragment = new FileBrowser();
|
||||
Bundle args = new Bundle();
|
||||
//args.putBoolean("ImgBrowse", false);
|
||||
// specify ImgBrowse option. true = images, false = folders only
|
||||
args.putString("browse_entry", sdcard.toString());
|
||||
// specify a path for selecting folder options
|
||||
args.putBoolean("games_entry", false);
|
||||
// selecting a BIOS folder, so this is not games
|
||||
|
||||
firstFragment.setArguments(args);
|
||||
// In case this activity was started with special instructions from
|
||||
// an Intent, pass the Intent's extras to the fragment as arguments
|
||||
// firstFragment.setArguments(getIntent().getExtras());
|
||||
|
||||
// Add the fragment to the 'fragment_container' FrameLayout
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container, firstFragment, "MAIN_BROWSER")
|
||||
.addToBackStack(null).commit();
|
||||
}
|
||||
});
|
||||
|
||||
// create alert dialog
|
||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||
|
||||
// show it
|
||||
alertDialog.show();
|
||||
}
|
||||
else {
|
||||
Intent inte = new Intent(Intent.ACTION_VIEW, uri, getBaseContext(),
|
||||
GL2JNIActivity.class);
|
||||
startActivity(inte);
|
||||
startActivity(inte);
|
||||
}
|
||||
}
|
||||
|
||||
public void onFolderSelected(Uri uri) {
|
||||
|
@ -266,9 +360,12 @@ public class MainActivity extends FragmentActivity implements
|
|||
FileBrowser firstFragment = new FileBrowser();
|
||||
Bundle args = new Bundle();
|
||||
args.putBoolean("ImgBrowse", false);
|
||||
args.putString("browse_entry", path_entry);
|
||||
args.putBoolean("games_entry", games);
|
||||
// specify ImgBrowse option. true = images, false = folders only
|
||||
args.putString("browse_entry", path_entry);
|
||||
// specify a path for selecting folder options
|
||||
args.putBoolean("games_entry", games);
|
||||
// specify if the desired path is for games or data
|
||||
|
||||
firstFragment.setArguments(args);
|
||||
// In case this activity was started with special instructions from
|
||||
// an Intent, pass the Intent's extras to the fragment as arguments
|
||||
|
@ -319,17 +416,6 @@ public class MainActivity extends FragmentActivity implements
|
|||
frag_tag = "MAIN_BROWSER";
|
||||
break;
|
||||
case 1:
|
||||
fragment = (OptionsFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("OPTIONS_FRAG");
|
||||
if (fragment != null) {
|
||||
if (fragment.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
fragment = new OptionsFragment();
|
||||
frag_tag = "OPTIONS_FRAG";
|
||||
break;
|
||||
case 2:
|
||||
fragment = (ConfigureFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("CONFIG_FRAG");
|
||||
if (fragment != null) {
|
||||
|
@ -340,18 +426,48 @@ public class MainActivity extends FragmentActivity implements
|
|||
fragment = new ConfigureFragment();
|
||||
frag_tag = "CONFIG_FRAG";
|
||||
break;
|
||||
case 2:
|
||||
fragment = (OptionsFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("OPTIONS_FRAG");
|
||||
if (fragment != null) {
|
||||
if (fragment.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
fragment = new OptionsFragment();
|
||||
frag_tag = "OPTIONS_FRAG";
|
||||
break;
|
||||
case 3:
|
||||
fragment = (ControllersFragment) getSupportFragmentManager()
|
||||
.findFragmentByTag("CONTROLLERS_FRAG");
|
||||
if (fragment != null) {
|
||||
if (fragment.isVisible()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
fragment = new ControllersFragment();
|
||||
frag_tag = "CONTROLLERS_FRAG";
|
||||
break;
|
||||
case 4:
|
||||
fragment = null;
|
||||
// vib.vibrate(50);
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||
MainActivity.this);
|
||||
|
||||
// set title
|
||||
alertDialogBuilder.setTitle("About reicast");
|
||||
alertDialogBuilder.setTitle(getString(R.string.about_title));
|
||||
|
||||
String versionName = "";
|
||||
try {
|
||||
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
|
||||
versionName = pInfo.versionName;
|
||||
} catch (NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
// set dialog message
|
||||
alertDialogBuilder
|
||||
.setMessage("reicast is a dreamcast emulator")
|
||||
.setMessage(getString(R.string.about_text) + " " + versionName)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton("Dismiss",
|
||||
new DialogInterface.OnClickListener() {
|
||||
|
|
|
@ -52,11 +52,14 @@ public class OptionsFragment extends Fragment {
|
|||
+ " must implement OnClickListener");
|
||||
}
|
||||
|
||||
int joys[] = InputDevice.getDeviceIds();
|
||||
for (int i = 0; i < joys.length; i++) {
|
||||
Log.d("reidc", "InputDevice ID: " + joys[i]);
|
||||
Log.d("reidc", "InputDevice Name: "
|
||||
+ InputDevice.getDevice(joys[i]).getName());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
int joys[] = InputDevice.getDeviceIds();
|
||||
for (int i = 0; i < joys.length; i++) {
|
||||
Log.d("reidc", "InputDevice ID: " + joys[i]);
|
||||
Log.d("reidc",
|
||||
"InputDevice Name: "
|
||||
+ InputDevice.getDevice(joys[i]).getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,10 +75,10 @@ public class OptionsFragment extends Fragment {
|
|||
// setContentView(R.layout.activity_main);
|
||||
|
||||
parentActivity = getActivity();
|
||||
|
||||
|
||||
mPrefs = PreferenceManager.getDefaultSharedPreferences(parentActivity);
|
||||
home_directory = mPrefs.getString("home_directory", home_directory);
|
||||
|
||||
|
||||
mainBrowse = (Button) getView().findViewById(R.id.browse_main_path);
|
||||
|
||||
final EditText editBrowse = (EditText) getView().findViewById(
|
||||
|
|
Loading…
Reference in New Issue