Skip to content
This repository was archived by the owner on Sep 29, 2025. It is now read-only.

Commit 4b24d22

Browse files
Merge pull request #1422 from reicast/ac/file-uri
Avoid duplicate URI references, Verify and verify again
2 parents bca0f29 + c1494b9 commit 4b24d22

File tree

7 files changed

+234
-10
lines changed

7 files changed

+234
-10
lines changed

shell/android-studio/reicast/src/main/java/com/reicast/emulator/MainActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ public void onGameSelected(Uri uri) {
265265
Intent intent = new Intent("com.reicast.EMULATOR",
266266
uri, getApplicationContext(), GL2JNIActivity.class);
267267
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
268-
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
268+
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
269+
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
269270
startActivity(intent);
270271
}
271272

shell/android-studio/reicast/src/main/java/com/reicast/emulator/config/PGConfigFragment.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ public class PGConfigFragment extends Fragment {
6262
private CompoundButton pvr_render;
6363
private CompoundButton synced_render;
6464
private CompoundButton modifier_volumes;
65+
private Spinner cable_spnr;
66+
private Spinner region_spnr;
67+
private Spinner broadcast_spnr;
68+
private ArrayAdapter<String> broadcastAdapter;
6569
private EditText bootdiskEdit;
6670

6771
@Override
@@ -101,6 +105,9 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
101105
pvr_render = (CompoundButton) getView().findViewById(R.id.render_option);
102106
synced_render = (CompoundButton) getView().findViewById(R.id.syncrender_option);
103107
modifier_volumes = (CompoundButton) getView().findViewById(R.id.modvols_option);
108+
cable_spnr = (Spinner) getView().findViewById(R.id.cable_spinner);
109+
region_spnr = (Spinner) getView().findViewById(R.id.region_spinner);
110+
broadcast_spnr = (Spinner) getView().findViewById(R.id.broadcast_spinner);
104111
bootdiskEdit = (EditText) getView().findViewById(R.id.boot_disk);
105112
}
106113

@@ -114,6 +121,13 @@ private void saveSettings(SharedPreferences mPrefs) {
114121
.putBoolean(Emulator.pref_pvrrender, pvr_render.isChecked())
115122
.putBoolean(Emulator.pref_syncedrender, synced_render.isChecked())
116123
.putBoolean(Emulator.pref_modvols, modifier_volumes.isChecked()).apply();
124+
125+
mPrefs.edit().putInt(Emulator.pref_cable, cable_spnr.getSelectedItemPosition() + 1).apply();
126+
mPrefs.edit().putInt(Emulator.pref_dcregion, region_spnr.getSelectedItemPosition()).apply();
127+
String item = broadcastAdapter.getItem(broadcast_spnr.getSelectedItemPosition());
128+
String selection = item.substring(0, item.indexOf(" - "));
129+
mPrefs.edit().putInt(Emulator.pref_broadcast, Integer.parseInt(selection)).apply();
130+
117131
if (bootdiskEdit.getText() != null)
118132
mPrefs.edit().putString(Emulator.pref_bootdisk,
119133
bootdiskEdit.getText().toString()).apply();
@@ -132,6 +146,9 @@ private void clearSettings(SharedPreferences mPrefs, String gameId) {
132146
.remove(Emulator.pref_pvrrender)
133147
.remove(Emulator.pref_syncedrender)
134148
.remove(Emulator.pref_modvols)
149+
.remove(Emulator.pref_cable)
150+
.remove(Emulator.pref_dcregion)
151+
.remove(Emulator.pref_broadcast)
135152
.remove(Emulator.pref_bootdisk).apply();
136153
showToastMessage(getActivity().getString(R.string.pgconfig_cleared), Snackbar.LENGTH_SHORT);
137154
configureViewByGame(gameId);
@@ -187,6 +204,34 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
187204
pvr_render.setChecked(mPrefs.getBoolean(Emulator.pref_pvrrender, Emulator.pvrrender));
188205
synced_render.setChecked(mPrefs.getBoolean(Emulator.pref_syncedrender, Emulator.syncedrender));
189206
modifier_volumes.setChecked(mPrefs.getBoolean(Emulator.pref_modvols, Emulator.modvols));
207+
208+
String[] cables = getResources().getStringArray(R.array.cable);
209+
ArrayAdapter<String> cableAdapter = new ArrayAdapter<>(getActivity(), R.layout.spinner_selected, cables);
210+
cableAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
211+
cable_spnr.setAdapter(cableAdapter);
212+
cable_spnr.setSelection(mPrefs.getInt(
213+
Emulator.pref_cable, Emulator.cable) - 1, true);
214+
215+
String[] regions = getResources().getStringArray(R.array.region);
216+
ArrayAdapter<String> regionAdapter = new ArrayAdapter<>(getActivity(), R.layout.spinner_selected, regions);
217+
regionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
218+
region_spnr.setAdapter(regionAdapter);
219+
region_spnr.setSelection(mPrefs.getInt(Emulator.pref_dcregion, Emulator.dcregion), true);
220+
221+
String[] broadcasts = getResources().getStringArray(R.array.broadcast);
222+
Spinner broadcast_spnr = (Spinner) getView().findViewById(R.id.broadcast_spinner);
223+
broadcastAdapter = new ArrayAdapter<>(getActivity(), R.layout.spinner_selected, broadcasts);
224+
broadcastAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
225+
broadcast_spnr.setAdapter(broadcastAdapter);
226+
227+
String cast = String.valueOf(mPrefs.getInt(Emulator.pref_broadcast, Emulator.broadcast));
228+
for (int i = 0; i < broadcasts.length; i++) {
229+
if (broadcasts[i].startsWith(cast + " - ")) {
230+
broadcast_spnr.setSelection(i, true);
231+
break;
232+
}
233+
}
234+
190235
bootdiskEdit.setText(mPrefs.getString(Emulator.pref_bootdisk, Emulator.bootdisk));
191236

192237
bootdiskEdit.setOnEditorActionListener(new EditText.OnEditorActionListener() {

shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/GL2JNIView.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,8 @@ void reiosInfo(String reiosId, String reiosSoftware) {
668668
((GL2JNIActivity) context).getPad().joystick[0] = mPrefs.getBoolean(
669669
Gamepad.pref_js_merged + "_A",
670670
((GL2JNIActivity) context).getPad().joystick[0]);
671+
// Assign the ID as a placeholder if a name isn't found
672+
if (reiosSoftware.equals("")) reiosSoftware = reiosId;
671673
mPrefs.edit().putString(Config.game_title, reiosSoftware.trim()).apply();
672674
}
673675
}

shell/android-studio/reicast/src/main/jni/src/Android.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,14 +390,16 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_query(JNIEnv *env,job
390390
jmethodID reiosInfoMid=env->GetMethodID(env->GetObjectClass(emu_thread),"reiosInfo","(Ljava/lang/String;Ljava/lang/String;)V");
391391

392392
char *id = (char*)malloc(11);
393-
strcpy(id, reios_disk_id());
394-
jstring reios_id = env->NewStringUTF(id);
395-
396-
char *name = (char*)malloc(129);
397-
strcpy(name, reios_software_name);
398-
jstring reios_name = env->NewStringUTF(name);
399-
400-
env->CallVoidMethod(emu_thread, reiosInfoMid, reios_id, reios_name);
393+
// Verify that there is an ID assigned
394+
if ((id != NULL) && (id[0] == '\0')) {
395+
strcpy(id, reios_disk_id());
396+
jstring reios_id = env->NewStringUTF(id);
397+
char *name = (char *) malloc(129);
398+
strcpy(name, reios_software_name);
399+
jstring reios_name = env->NewStringUTF(name);
400+
401+
env->CallVoidMethod(emu_thread, reiosInfoMid, reios_id, reios_name);
402+
}
401403

402404
dc_init();
403405
}

shell/android-studio/reicast/src/main/res/layout-v14/pgconfig_fragment.xml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,93 @@
310310
</LinearLayout>
311311
</TableRow>
312312

313+
<TableRow
314+
android:layout_marginTop="10dp"
315+
android:gravity="center_vertical" >
316+
317+
<TextView
318+
android:id="@+id/cable_text"
319+
android:layout_width="wrap_content"
320+
android:layout_height="wrap_content"
321+
android:layout_weight="0.5"
322+
android:ems="10"
323+
android:gravity="center_vertical|left"
324+
android:text="@string/select_cable" />
325+
326+
<LinearLayout
327+
android:layout_width="wrap_content"
328+
android:layout_height="wrap_content"
329+
android:layout_weight="1"
330+
android:gravity="right"
331+
android:orientation="vertical" >
332+
333+
<Spinner
334+
android:id="@+id/cable_spinner"
335+
android:layout_width="wrap_content"
336+
android:layout_height="0dp"
337+
android:layout_weight="1"
338+
android:ems="10" />
339+
</LinearLayout>
340+
</TableRow>
341+
342+
<TableRow
343+
android:layout_marginTop="10dp"
344+
android:gravity="center_vertical" >
345+
346+
<TextView
347+
android:id="@+id/region_text"
348+
android:layout_width="wrap_content"
349+
android:layout_height="wrap_content"
350+
android:layout_weight="0.5"
351+
android:ems="10"
352+
android:gravity="center_vertical|left"
353+
android:text="@string/select_region" />
354+
355+
<LinearLayout
356+
android:layout_width="wrap_content"
357+
android:layout_height="wrap_content"
358+
android:layout_weight="1"
359+
android:gravity="right"
360+
android:orientation="vertical" >
361+
362+
<Spinner
363+
android:id="@+id/region_spinner"
364+
android:layout_width="wrap_content"
365+
android:layout_height="0dp"
366+
android:layout_weight="1"
367+
android:ems="10" />
368+
</LinearLayout>
369+
</TableRow>
370+
371+
<TableRow
372+
android:layout_marginTop="10dp"
373+
android:gravity="center_vertical" >
374+
375+
<TextView
376+
android:id="@+id/broadcast_text"
377+
android:layout_width="wrap_content"
378+
android:layout_height="wrap_content"
379+
android:layout_weight="0.5"
380+
android:ems="10"
381+
android:gravity="center_vertical|left"
382+
android:text="@string/select_broadcast" />
383+
384+
<LinearLayout
385+
android:layout_width="wrap_content"
386+
android:layout_height="wrap_content"
387+
android:layout_weight="1"
388+
android:gravity="right"
389+
android:orientation="vertical" >
390+
391+
<Spinner
392+
android:id="@+id/broadcast_spinner"
393+
android:layout_width="wrap_content"
394+
android:layout_height="0dp"
395+
android:layout_weight="1"
396+
android:ems="10" />
397+
</LinearLayout>
398+
</TableRow>
399+
313400
<LinearLayout
314401
android:layout_width="match_parent"
315402
android:layout_height="wrap_content"

shell/android-studio/reicast/src/main/res/layout/pgconfig_fragment.xml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,93 @@
310310
</LinearLayout>
311311
</TableRow>
312312

313+
<TableRow
314+
android:layout_marginTop="10dp"
315+
android:gravity="center_vertical" >
316+
317+
<TextView
318+
android:id="@+id/cable_text"
319+
android:layout_width="wrap_content"
320+
android:layout_height="wrap_content"
321+
android:layout_weight="0.5"
322+
android:ems="10"
323+
android:gravity="center_vertical|left"
324+
android:text="@string/select_cable" />
325+
326+
<LinearLayout
327+
android:layout_width="wrap_content"
328+
android:layout_height="wrap_content"
329+
android:layout_weight="1"
330+
android:gravity="right"
331+
android:orientation="vertical" >
332+
333+
<Spinner
334+
android:id="@+id/cable_spinner"
335+
android:layout_width="wrap_content"
336+
android:layout_height="0dp"
337+
android:layout_weight="1"
338+
android:ems="10" />
339+
</LinearLayout>
340+
</TableRow>
341+
342+
<TableRow
343+
android:layout_marginTop="10dp"
344+
android:gravity="center_vertical" >
345+
346+
<TextView
347+
android:id="@+id/region_text"
348+
android:layout_width="wrap_content"
349+
android:layout_height="wrap_content"
350+
android:layout_weight="0.5"
351+
android:ems="10"
352+
android:gravity="center_vertical|left"
353+
android:text="@string/select_region" />
354+
355+
<LinearLayout
356+
android:layout_width="wrap_content"
357+
android:layout_height="wrap_content"
358+
android:layout_weight="1"
359+
android:gravity="right"
360+
android:orientation="vertical" >
361+
362+
<Spinner
363+
android:id="@+id/region_spinner"
364+
android:layout_width="wrap_content"
365+
android:layout_height="0dp"
366+
android:layout_weight="1"
367+
android:ems="10" />
368+
</LinearLayout>
369+
</TableRow>
370+
371+
<TableRow
372+
android:layout_marginTop="10dp"
373+
android:gravity="center_vertical" >
374+
375+
<TextView
376+
android:id="@+id/broadcast_text"
377+
android:layout_width="wrap_content"
378+
android:layout_height="wrap_content"
379+
android:layout_weight="0.5"
380+
android:ems="10"
381+
android:gravity="center_vertical|left"
382+
android:text="@string/select_broadcast" />
383+
384+
<LinearLayout
385+
android:layout_width="wrap_content"
386+
android:layout_height="wrap_content"
387+
android:layout_weight="1"
388+
android:gravity="right"
389+
android:orientation="vertical" >
390+
391+
<Spinner
392+
android:id="@+id/broadcast_spinner"
393+
android:layout_width="wrap_content"
394+
android:layout_height="0dp"
395+
android:layout_weight="1"
396+
android:ems="10" />
397+
</LinearLayout>
398+
</TableRow>
399+
313400
<LinearLayout
314401
android:layout_width="match_parent"
315402
android:layout_height="wrap_content"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<paths>
33
<files-path name="files_root" path="."/>
4-
<external-path name="external_files" path="."/>
4+
<external-path name="external_root" path="."/>
55
<root-path name="external_files" path="/storage/" />
66
</paths>

0 commit comments

Comments
 (0)