From 72f11223f755b117f33b0eb720e17f78e722556d Mon Sep 17 00:00:00 2001 From: Ender's Games Date: Tue, 28 Aug 2018 01:27:02 -0400 Subject: [PATCH] Android: Remove unstable TextWatcher --- .../java/com/reicast/emulator/Emulator.java | 2 +- .../emulator/config/OptionsFragment.java | 147 ++++++++++-------- .../reicast/src/main/jni/src/Android.cpp | 34 ++-- .../reicast/src/main/res/values/strings.xml | 2 +- 4 files changed, 103 insertions(+), 82 deletions(-) diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java index 6e6a02f1c..b37e5878b 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/Emulator.java @@ -47,7 +47,7 @@ public class Emulator extends Application { public static boolean pvrrender = false; public static boolean syncedrender = false; public static boolean modvols = true; - public static String bootdisk = "null"; + public static String bootdisk = null; public static boolean usereios = false; public static boolean nativeact = false; diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/config/OptionsFragment.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/config/OptionsFragment.java index 338383dde..ec4343e1b 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/config/OptionsFragment.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/config/OptionsFragment.java @@ -15,12 +15,12 @@ import android.support.constraint.ConstraintLayout; import android.support.design.widget.Snackbar; import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v4.app.Fragment; -import android.text.Editable; -import android.text.TextWatcher; import android.view.Gravity; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; @@ -145,26 +145,28 @@ public class OptionsFragment extends Fragment { mCallback.launchBIOSdetection(); } }); - - editBrowse.addTextChangedListener(new TextWatcher() { - public void afterTextChanged(Editable s) { - if (editBrowse.getText() != null) { - home_directory = editBrowse.getText().toString(); - if (home_directory.endsWith("/data")) { - home_directory.replace("/data", ""); - showToastMessage(getActivity().getString(R.string.data_folder), - Snackbar.LENGTH_SHORT); + editBrowse.setOnEditorActionListener(new EditText.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE + || (event.getAction() == KeyEvent.ACTION_DOWN + && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + if (event == null || !event.isShiftPressed()) { + if (v.getText() != null) { + home_directory = v.getText().toString(); + if (home_directory.endsWith("/data")) { + home_directory.replace("/data", ""); + showToastMessage(getActivity().getString(R.string.data_folder), + Snackbar.LENGTH_SHORT); + } + mPrefs.edit().putString(Config.pref_home, home_directory).apply(); + JNIdc.config(home_directory); + new LocateThemes(OptionsFragment.this).execute(home_directory + "/themes"); + } + return true; // consume. } - mPrefs.edit().putString(Config.pref_home, home_directory).apply(); - JNIdc.config(home_directory); - new LocateThemes(OptionsFragment.this).execute(home_directory + "/themes"); } - } - - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - public void onTextChanged(CharSequence s, int start, int before, int count) { + return false; // pass on to other listeners. } }); @@ -214,19 +216,21 @@ public class OptionsFragment extends Fragment { mCallback.onMainBrowseSelected(game_directory, true, null); } }); - - editGames.addTextChangedListener(new TextWatcher() { - public void afterTextChanged(Editable s) { - if (editBrowse.getText() != null) { - game_directory = editGames.getText().toString(); - mPrefs.edit().putString(Config.pref_games, game_directory).apply(); + editGames.setOnEditorActionListener(new EditText.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE + || (event.getAction() == KeyEvent.ACTION_DOWN + && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + if (event == null || !event.isShiftPressed()) { + if (v.getText() != null) { + game_directory = v.getText().toString(); + mPrefs.edit().putString(Config.pref_games, game_directory).apply(); + } + return true; // consume. + } } - } - - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - public void onTextChanged(CharSequence s, int start, int before, int count) { + return false; // pass on to other listeners. } }); @@ -406,20 +410,22 @@ public class OptionsFragment extends Fragment { mPrefs.edit().putInt(Emulator.pref_frameskip, progress).apply(); } }); - mainFrames.addTextChangedListener(new TextWatcher() { - public void afterTextChanged(Editable s) { - Editable frameText = mainFrames.getText(); - if (frameText != null) { - int frames = Integer.parseInt(frameText.toString()); - frameSeek.setProgress(frames); - mPrefs.edit().putInt(Emulator.pref_frameskip, frames).apply(); + mainFrames.setOnEditorActionListener(new EditText.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE + || (event.getAction() == KeyEvent.ACTION_DOWN + && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + if (event == null || !event.isShiftPressed()) { + if (v.getText() != null) { + int frames = Integer.parseInt(v.getText().toString()); + frameSeek.setProgress(frames); + mPrefs.edit().putInt(Emulator.pref_frameskip, frames).apply(); + } + return true; // consume. + } } - } - - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - public void onTextChanged(CharSequence s, int start, int before, int count) { + return false; // pass on to other listeners. } }); @@ -445,28 +451,37 @@ public class OptionsFragment extends Fragment { final EditText bootdiskEdit = (EditText) getView().findViewById(R.id.boot_disk); bootdiskEdit.setText(mPrefs.getString(Emulator.pref_bootdisk, Emulator.bootdisk)); - bootdiskEdit.addTextChangedListener(new TextWatcher() { - public void afterTextChanged(Editable editText) { - if (editText != null) { - String disk = editText.toString(); - if (disk.substring(disk.lastIndexOf("/") + 1).length() == 0) { - disk = "null"; - bootdiskEdit.setText(disk); - } else if (!disk.equals("null") && !disk.contains("/")) { - disk = game_directory + "/" + disk; - bootdiskEdit.setText(disk); + bootdiskEdit.setOnEditorActionListener(new EditText.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE + || (event.getAction() == KeyEvent.ACTION_DOWN + && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + if (event == null || !event.isShiftPressed()) { + if (v.getText() != "null") { + String disk = v.getText().toString(); + if (disk.substring(disk.lastIndexOf("/") + 1).length() == 0) { + disk = null; + mPrefs.edit().remove(Emulator.pref_bootdisk).apply(); + } else { + if (!disk.contains("/")) + disk = game_directory + "/" + disk; + if (new File(disk).exists()) { + mPrefs.edit().putString(Emulator.pref_bootdisk, disk).apply(); + } else { + disk = null; + mPrefs.edit().remove(Emulator.pref_bootdisk).apply(); + } + } + v.setText(disk); + Emulator.bootdisk = disk; + } + return true; // consume. + } + } + return false; // pass on to other listeners. } - mPrefs.edit().putString(Emulator.pref_bootdisk, disk).apply(); - Emulator.bootdisk = disk; - } - } - - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - }); + }); final CompoundButton fps_opt = (CompoundButton) getView().findViewById(R.id.fps_option); OnCheckedChangeListener fps_options = new OnCheckedChangeListener() { diff --git a/shell/android-studio/reicast/src/main/jni/src/Android.cpp b/shell/android-studio/reicast/src/main/jni/src/Android.cpp index 2fac7c0e2..1443b94bb 100644 --- a/shell/android-studio/reicast/src/main/jni/src/Android.cpp +++ b/shell/android-studio/reicast/src/main/jni/src/Android.cpp @@ -307,20 +307,20 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_config(JNIEnv *env,jo env->ReleaseStringUTFChars(dirName,D); } -JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_bootdisk(JNIEnv *env,jobject obj, jstring disk) -{ - const char* P = disk? env->GetStringUTFChars(disk,0):0; - if(!P) settings.imgread.DefaultImage[0] = '\0'; - else - { - printf("Got URI: '%s'\n",P); - strncpy(settings.imgread.DefaultImage,(strlen(P)>=7)&&!memcmp(P,"file://",7)? P+7:P,sizeof(settings.imgread.DefaultImage)); - settings.imgread.DefaultImage[sizeof(settings.imgread.DefaultImage)-1] = '\0'; - env->ReleaseStringUTFChars(disk,P); - } - - if (strcmp(settings.imgread.DefaultImage, "null") != 0) +JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_bootdisk(JNIEnv *env,jobject obj, jstring disk) { + if (disk != NULL) { settings.imgread.LoadDefaultImage = 1; + const char *P = disk ? env->GetStringUTFChars(disk, 0) : 0; + if (!P) settings.imgread.DefaultImage[0] = '\0'; + else { + printf("Got URI: '%s'\n", P); + strncpy(settings.imgread.DefaultImage, + (strlen(P) >= 7) && !memcmp(P, "file://", 7) ? P + 7 : P, + sizeof(settings.imgread.DefaultImage)); + settings.imgread.DefaultImage[sizeof(settings.imgread.DefaultImage) - 1] = '\0'; + env->ReleaseStringUTFChars(disk, P); + } + } } JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_init(JNIEnv *env,jobject obj,jstring fileName) @@ -447,8 +447,14 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_destroy(JNIEnv *env,j JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj) { - settings.imgread.LoadDefaultImage = 0; + if (!gamedisk) settings.imgread.DefaultImage[0] = '\0'; + else { + printf("Got URI: '%s'\n", gamedisk); + strncpy(settings.imgread.DefaultImage, gamedisk, sizeof(settings.imgread.DefaultImage)); + settings.imgread.DefaultImage[sizeof(settings.imgread.DefaultImage) - 1] = '\0'; + } + settings.imgread.LoadDefaultImage = 1; DiscSwap(); } diff --git a/shell/android-studio/reicast/src/main/res/values/strings.xml b/shell/android-studio/reicast/src/main/res/values/strings.xml index 85ae5a306..25d6a427f 100644 --- a/shell/android-studio/reicast/src/main/res/values/strings.xml +++ b/shell/android-studio/reicast/src/main/res/values/strings.xml @@ -54,7 +54,7 @@ Use Software Layer Disable Emulator Sound View Rendering Depth - Boot Disk (ie. Gameshark, Utopia) *NON-FUNCTIONAL* + Boot Disk (ie. Gameshark, Utopia) Reset Emu Reset Emulator Settings