0
0
mirror of https://github.com/TrianguloY/UrlChecker.git synced 2024-09-19 20:02:16 +02:00

option to always keep edit mode

This commit is contained in:
TrianguloY 2024-06-22 19:57:44 +02:00
parent 865dc99e9e
commit 9c17c933a0
4 changed files with 72 additions and 16 deletions

View File

@ -20,8 +20,8 @@ import com.trianguloy.urlchecker.dialogs.MainDialog;
import com.trianguloy.urlchecker.modules.AModuleConfig; import com.trianguloy.urlchecker.modules.AModuleConfig;
import com.trianguloy.urlchecker.modules.AModuleData; import com.trianguloy.urlchecker.modules.AModuleData;
import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.modules.AModuleDialog;
import com.trianguloy.urlchecker.modules.DescriptionConfig;
import com.trianguloy.urlchecker.url.UrlData; 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.methods.AndroidUtils;
import com.trianguloy.urlchecker.utilities.wrappers.DefaultTextWatcher; import com.trianguloy.urlchecker.utilities.wrappers.DefaultTextWatcher;
import com.trianguloy.urlchecker.utilities.wrappers.DoubleEvent; 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 */ /** This module shows the current url and allows manual editing */
public class TextInputModule extends AModuleData { public class TextInputModule extends AModuleData {
public static GenericPref.Bool ALWAYSEDIT_PREF(Context cntx) {
return new GenericPref.Bool("text_alwaysEdit", false, cntx);
}
@Override @Override
public String getId() { public String getId() {
return "text"; return "text";
@ -46,7 +50,24 @@ public class TextInputModule extends AModuleData {
@Override @Override
public AModuleConfig getConfig(ModulesActivity cntx) { 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 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 InputMethodManager inputMethodManager;
private final GenericPref.Bool alwaysEdit;
private boolean skipUpdate = false; private boolean skipUpdate = false;
private TextView txt_url; private TextView txt_url;
@ -62,6 +84,7 @@ class TextInputDialog extends AModuleDialog {
public TextInputDialog(MainDialog dialog) { public TextInputDialog(MainDialog dialog) {
super(dialog); super(dialog);
inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
alwaysEdit = TextInputModule.ALWAYSEDIT_PREF(dialog);
} }
@Override @Override
@ -92,27 +115,40 @@ class TextInputDialog extends AModuleDialog {
}); });
AndroidUtils.setOnClickWithPositionListener(txt_url, position -> { if (alwaysEdit.get()) {
edtxt_url.setSelection(txt_url.getOffsetForPosition(position.first, position.second)); // always editable
txt_url.setVisibility(View.GONE); txt_url.setVisibility(View.GONE);
edtxt_url.setVisibility(View.VISIBLE); edtxt_url.setVisibility(View.VISIBLE);
// force open the keyboard } else {
edtxt_url.requestFocus(); // editable when clicked
inputMethodManager.showSoftInput(edtxt_url, 0); 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 @Override
public void onDisplayUrl(UrlData urlData) { public void onDisplayUrl(UrlData urlData) {
// setText fires the afterTextChanged listener, so we need to skip it // setText fires the afterTextChanged listener, so we need to skip it
skipUpdate = true; skipUpdate = true;
txt_url.setText(getSpannableUriText(urlData.url));
edtxt_url.setText(urlData.url); edtxt_url.setText(urlData.url);
txt_url.setVisibility(View.VISIBLE); if (!alwaysEdit.get()) {
edtxt_url.setVisibility(View.GONE); // back to non-edit
// force close the keyboard txt_url.setText(getSpannableUriText(urlData.url));
inputMethodManager.hideSoftInputFromWindow(edtxt_url.getWindowToken(), 0); txt_url.setVisibility(View.VISIBLE);
edtxt_url.setVisibility(View.GONE);
// force close the keyboard
inputMethodManager.hideSoftInputFromWindow(edtxt_url.getWindowToken(), 0);
}
skipUpdate = false; skipUpdate = false;
doubleEdit.reset(); // next user update, even if immediately after, will be considered new doubleEdit.reset(); // next user update, even if immediately after, will be considered new
} }

View File

@ -0,0 +1,17 @@
<?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">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/mInput_desc" />
<Switch
android:id="@+id/alwaysEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/mInput_alwaysEdit" />
</LinearLayout>

View File

@ -187,7 +187,8 @@ Hay algunos enlaces cuyo único propósito es redirigirte a otro enlace. Si el e
<string name="mStatus_autoCheck">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.</string> <string name="mStatus_autoCheck">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.</string>
<!-- --> <!-- -->
<string name="mInput_name">Texto de entrada</string> <string name="mInput_name">Texto de entrada</string>
<string name="mInput_desc">Muestra la URL actual, que puede ser modificada manualmente.</string> <string name="mInput_desc">Muestra la URL actual. Pulsa para editarla.</string>
<string name="mInput_alwaysEdit">Mantener activo el modo edición</string>
<!-- --> <!-- -->
<string name="mVT_name">Escáneador de la URL</string> <string name="mVT_name">Escáneador de la URL</string>
<string name="mVT_desc">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 .</string> <string name="mVT_desc">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 .</string>

View File

@ -237,7 +237,9 @@ Note: if you edit the patterns, new built-in patterns from app updates will not
<string name="mStatus_autoCheck">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.</string> <string name="mStatus_autoCheck">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.</string>
<!-- --> <!-- -->
<string name="mInput_name">Input text</string> <string name="mInput_name">Input text</string>
<string name="mInput_desc">Displays the current URL, which can be edited manually.</string> <string name="mInput_desc">Displays the current URL. Press it to enter edit mode.</string>
<string name="mInput_alwaysEdit">Keep always in edit mode</string>
<!-- -->
<string name="mVT_name">URL Scanner</string> <string name="mVT_name">URL Scanner</string>
<string name="mVT_desc">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 .</string> <string name="mVT_desc">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 .</string>
<string name="mVT_apiKey">API key</string> <string name="mVT_apiKey">API key</string>