diff --git a/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java b/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java index 5da84bac..db693831 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java +++ b/app/src/main/java/fr/ralala/hexviewer/ApplicationCtx.java @@ -149,13 +149,13 @@ public void setHexRowHeight(int number) { /** * Returns the font size for the hex listview. - * @return int + * @return float */ - public int getHexFontSize() { + public float getHexFontSize() { try { - return Integer.parseInt(mSharedPreferences.getString(CFG_HEX_FONT_SIZE, mDefaultHexFontSize)); + return Float.parseFloat(mSharedPreferences.getString(CFG_HEX_FONT_SIZE, mDefaultHexFontSize)); } catch(Exception ignore) { - return Integer.parseInt(mDefaultHexFontSize); + return Float.parseFloat(mDefaultHexFontSize); } } @@ -163,7 +163,7 @@ public int getHexFontSize() { * Change the the font size for the hex listview. * @param number The new number. */ - public void setHexFontSize(int number) { + public void setHexFontSize(float number) { SharedPreferences.Editor e = mSharedPreferences.edit(); e.putString(CFG_HEX_FONT_SIZE, String.valueOf(number)); e.apply(); @@ -206,13 +206,13 @@ public void setPlainRowHeight(int number) { /** * Returns the font size for the hex listview. - * @return int + * @return float */ - public int getPlainFontSize() { + public float getPlainFontSize() { try { - return Integer.parseInt(mSharedPreferences.getString(CFG_PLAIN_FONT_SIZE, mDefaultPlainFontSize)); + return Float.parseFloat(mSharedPreferences.getString(CFG_PLAIN_FONT_SIZE, mDefaultPlainFontSize)); } catch(Exception ignore) { - return Integer.parseInt(mDefaultPlainFontSize); + return Float.parseFloat(mDefaultPlainFontSize); } } @@ -220,7 +220,7 @@ public int getPlainFontSize() { * Change the the font size for the hex listview. * @param number The new number. */ - public void setPlainFontSize(int number) { + public void setPlainFontSize(float number) { SharedPreferences.Editor e = mSharedPreferences.edit(); e.putString(CFG_PLAIN_FONT_SIZE, String.valueOf(number)); e.apply(); diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java b/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java index 5de8ce5f..e349f06b 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/activities/MainActivity.java @@ -93,7 +93,7 @@ protected void onCreate(final Bundle savedInstanceState) { mAdapterHex = new SearchableListArrayAdapter(this, DisplayCharPolicy.DISPLAY_ALL, new ArrayList<>(), new UserConfig() { @Override - public int getFontSize() { + public float getFontSize() { return mApp.getHexFontSize(); } @@ -112,7 +112,7 @@ public boolean isRowHeightAuto() { mAdapterPlain = new SearchableListArrayAdapter(this, DisplayCharPolicy.IGNORE_NON_DISPLAYED_CHAR, new ArrayList<>(), new UserConfig() { @Override - public int getFontSize() { + public float getFontSize() { return mApp.getPlainFontSize(); } diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java index 11d3a9c9..ae5a71be 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/adapters/SearchableListArrayAdapter.java @@ -44,7 +44,7 @@ public enum DisplayCharPolicy { } public interface UserConfig { - int getFontSize(); + float getFontSize(); int getRowHeight(); boolean isRowHeightAuto(); } diff --git a/app/src/main/java/fr/ralala/hexviewer/ui/fragments/SettingsFragment.java b/app/src/main/java/fr/ralala/hexviewer/ui/fragments/SettingsFragment.java index afedf186..ff3d61de 100644 --- a/app/src/main/java/fr/ralala/hexviewer/ui/fragments/SettingsFragment.java +++ b/app/src/main/java/fr/ralala/hexviewer/ui/fragments/SettingsFragment.java @@ -5,6 +5,8 @@ import android.content.Context; import android.os.Bundle; import android.text.Editable; +import android.text.InputFilter; +import android.text.InputType; import android.view.LayoutInflater; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; @@ -127,7 +129,7 @@ public boolean onPreferenceClick(Preference preference) { mApp.getHexFontSize(), MIN_HEX_FONT_SIZE, MAX_HEX_FONT_SIZE, - mApp::setHexFontSize); + mApp::setHexFontSize, true); } else if (preference.equals(mPlainRowHeightAuto)) { mPlainRowHeight.setEnabled(!mPlainRowHeightAuto.isChecked()); } else if (preference.equals(mPlainRowHeight)) { @@ -141,14 +143,14 @@ public boolean onPreferenceClick(Preference preference) { mApp.getPlainFontSize(), MIN_PLAIN_FONT_SIZE, MAX_PLAIN_FONT_SIZE, - mApp::setPlainFontSize); + mApp::setPlainFontSize, true); } return false; } /* ----------------------------- */ - private interface InputValidated { - void onValidated(int n); + private interface InputValidated { + void onValidated(T n); } /** @@ -161,7 +163,20 @@ private interface InputValidated { * @param iv Callback which will be called if the entry is valid. */ @SuppressLint("InflateParams") - private void displayDialog(CharSequence title, int defaultValue, int minValue, int maxValue, InputValidated iv) { + private void displayDialog(CharSequence title, int defaultValue, int minValue, int maxValue, InputValidated iv) { + displayDialog(title, defaultValue, minValue, maxValue, (v) -> iv.onValidated(v.intValue()), false); + } + /** + * Displays the input dialog box. + * + * @param title Dialog title. + * @param defaultValue Default value. + * @param minValue Min value. + * @param maxValue Max value. + * @param iv Callback which will be called if the entry is valid. + */ + @SuppressLint("InflateParams") + private void displayDialog(CharSequence title, float defaultValue, float minValue, float maxValue, InputValidated iv, boolean decimal) { AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); builder.setCancelable(false) .setTitle(title) @@ -174,7 +189,20 @@ private void displayDialog(CharSequence title, int defaultValue, int minValue, i dialog.show(); EditText et = dialog.findViewById(R.id.editText); if (et != null) { - et.setText(String.valueOf(defaultValue)); + int inputType = InputType.TYPE_CLASS_NUMBER; + String def; + int maxLen; + if(decimal) { + maxLen = 5; + inputType |= InputType.TYPE_NUMBER_FLAG_DECIMAL; + def = String.valueOf(defaultValue); + } else { + maxLen = 3; + def = String.valueOf((int)defaultValue); + } + et.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLen)}); + et.setInputType(inputType); + et.setText(def); et.requestFocus(); Editable text = et.getText(); if (text.length() > 0) { @@ -185,7 +213,7 @@ private void displayDialog(CharSequence title, int defaultValue, int minValue, i final InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener((v) -> { - if (et != null && validInput(et, defaultValue, minValue, maxValue, iv)) { + if (et != null && validInput(et, defaultValue, minValue, maxValue, iv, decimal)) { imm.hideSoftInputFromWindow(et.getWindowToken(), 0); dialog.dismiss(); } @@ -197,6 +225,7 @@ private void displayDialog(CharSequence title, int defaultValue, int minValue, i }); } + /** * Validation of the input. * @@ -207,23 +236,23 @@ private void displayDialog(CharSequence title, int defaultValue, int minValue, i * @param iv Callback * @return False on error. */ - private boolean validInput(EditText et, int defaultValue, int minValue, int maxValue, InputValidated iv) { + private boolean validInput(EditText et, float defaultValue, float minValue, float maxValue, InputValidated iv, boolean decimal) { try { Editable s = et.getText(); - int nb = Integer.parseInt(s.toString()); + float nb = Float.parseFloat(s.toString()); if (s.length() == 0) { - et.setText(String.valueOf(minValue)); + et.setText(String.valueOf(!decimal ? (int)minValue : minValue)); et.selectAll(); return false; } else { if (nb < minValue) { UIHelper.shakeError(et, mActivity.getString(R.string.error_less_than) + ": " + minValue); - et.setText(String.valueOf(minValue)); + et.setText(String.valueOf(!decimal ? (int)minValue : minValue)); et.selectAll(); return false; } else if (nb > maxValue) { UIHelper.shakeError(et, mActivity.getString(R.string.error_greater_than) + ": " + maxValue); - et.setText(String.valueOf(maxValue)); + et.setText(String.valueOf(!decimal ? (int)maxValue : maxValue)); et.selectAll(); return false; } else @@ -231,8 +260,10 @@ private boolean validInput(EditText et, int defaultValue, int minValue, int maxV iv.onValidated(nb); return true; } - } catch (Exception ignored) { - iv.onValidated(defaultValue); + } catch (Exception ex) { + UIHelper.shakeError(et, ex.getMessage()); + et.setText(String.valueOf(!decimal ? (int)defaultValue : defaultValue)); + et.selectAll(); return false; } }