diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java index b38dba0..328c9dd 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java @@ -20,8 +20,8 @@ import com.trianguloy.urlchecker.dialogs.MainDialog; import com.trianguloy.urlchecker.modules.AModuleConfig; import com.trianguloy.urlchecker.modules.AModuleData; import com.trianguloy.urlchecker.modules.AModuleDialog; -import com.trianguloy.urlchecker.modules.DescriptionConfig; import com.trianguloy.urlchecker.url.UrlData; +import com.trianguloy.urlchecker.utilities.generics.GenericPref; import com.trianguloy.urlchecker.utilities.methods.AndroidUtils; import com.trianguloy.urlchecker.utilities.wrappers.DefaultTextWatcher; import com.trianguloy.urlchecker.utilities.wrappers.DoubleEvent; @@ -29,6 +29,10 @@ import com.trianguloy.urlchecker.utilities.wrappers.DoubleEvent; /** This module shows the current url and allows manual editing */ public class TextInputModule extends AModuleData { + public static GenericPref.Bool ALWAYSEDIT_PREF(Context cntx) { + return new GenericPref.Bool("text_alwaysEdit", false, cntx); + } + @Override public String getId() { return "text"; @@ -46,7 +50,24 @@ public class TextInputModule extends AModuleData { @Override public AModuleConfig getConfig(ModulesActivity cntx) { - return new DescriptionConfig(R.string.mInput_desc); + return new TextInputConfig(cntx); + } +} + +class TextInputConfig extends AModuleConfig { + + public TextInputConfig(ModulesActivity cntx) { + super(cntx); + } + + @Override + public int getLayoutId() { + return R.layout.config_input; + } + + @Override + public void onInitialize(View views) { + TextInputModule.ALWAYSEDIT_PREF(getActivity()).attachToSwitch(views.findViewById(R.id.alwaysEdit)); } } @@ -54,6 +75,7 @@ class TextInputDialog extends AModuleDialog { private final DoubleEvent doubleEdit = new DoubleEvent(1000); // if two updates happens in less than this milliseconds, they are considered as the same private final InputMethodManager inputMethodManager; + private final GenericPref.Bool alwaysEdit; private boolean skipUpdate = false; private TextView txt_url; @@ -62,6 +84,7 @@ class TextInputDialog extends AModuleDialog { public TextInputDialog(MainDialog dialog) { super(dialog); inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + alwaysEdit = TextInputModule.ALWAYSEDIT_PREF(dialog); } @Override @@ -92,27 +115,40 @@ class TextInputDialog extends AModuleDialog { }); - AndroidUtils.setOnClickWithPositionListener(txt_url, position -> { - edtxt_url.setSelection(txt_url.getOffsetForPosition(position.first, position.second)); + if (alwaysEdit.get()) { + // always editable txt_url.setVisibility(View.GONE); edtxt_url.setVisibility(View.VISIBLE); - // force open the keyboard - edtxt_url.requestFocus(); - inputMethodManager.showSoftInput(edtxt_url, 0); - }); - } + } else { + // editable when clicked + AndroidUtils.setOnClickWithPositionListener(txt_url, position -> { + edtxt_url.setSelection(txt_url.getOffsetForPosition(position.first, position.second)); + txt_url.setVisibility(View.GONE); + edtxt_url.setVisibility(View.VISIBLE); + // force open the keyboard + edtxt_url.requestFocus(); + inputMethodManager.showSoftInput(edtxt_url, 0); + }); + } + } @Override public void onDisplayUrl(UrlData urlData) { // setText fires the afterTextChanged listener, so we need to skip it skipUpdate = true; - txt_url.setText(getSpannableUriText(urlData.url)); + edtxt_url.setText(urlData.url); - txt_url.setVisibility(View.VISIBLE); - edtxt_url.setVisibility(View.GONE); - // force close the keyboard - inputMethodManager.hideSoftInputFromWindow(edtxt_url.getWindowToken(), 0); + if (!alwaysEdit.get()) { + // back to non-edit + txt_url.setText(getSpannableUriText(urlData.url)); + txt_url.setVisibility(View.VISIBLE); + edtxt_url.setVisibility(View.GONE); + + // force close the keyboard + inputMethodManager.hideSoftInputFromWindow(edtxt_url.getWindowToken(), 0); + } + skipUpdate = false; doubleEdit.reset(); // next user update, even if immediately after, will be considered new } diff --git a/app/src/main/res/layout/config_input.xml b/app/src/main/res/layout/config_input.xml new file mode 100644 index 0000000..ac8200f --- /dev/null +++ b/app/src/main/res/layout/config_input.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e8d55d7..95c573d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -187,7 +187,8 @@ Hay algunos enlaces cuyo único propósito es redirigirte a otro enlace. Si el e Verifica automáticamente las URL que coincidan con el siguiente patrón de expresiones regulares. ¡Advertencia! Se recomienda especificar un patrón restrictivo (y no .* para todos), de lo contrario, los servidores maliciosos pueden registrar tu IP. Texto de entrada - Muestra la URL actual, que puede ser modificada manualmente. + Muestra la URL actual. Pulsa para editarla. + Mantener activo el modo edición Escáneador de la URL Cuando este módulo se habilita puedes escanear la URL mediante VirusTotal y comprobar el informe. Se necesita una clave de la API de VirusTotal para que funcione, puedes obtener una tras registrarte gratis aquí: https://www.virustotal.com/gui/join-us . diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ea0932f..58855ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -237,7 +237,9 @@ Note: if you edit the patterns, new built-in patterns from app updates will not Automatically check URLs that match the following regex pattern. Warning! It is advised to specify a restrictive pattern (and not .* for all) otherwise malicious servers may log your IP. Input text - Displays the current URL, which can be edited manually. + Displays the current URL. Press it to enter edit mode. + Keep always in edit mode + URL Scanner When this module is enabled you can scan the URL using VirusTotal and check the report. A personal VirusTotal API key is needed for it to work, you can get one after registering for a free account here: https://www.virustotal.com/gui/join-us . API key