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:
parent
865dc99e9e
commit
9c17c933a0
@ -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
|
||||||
}
|
}
|
||||||
|
17
app/src/main/res/layout/config_input.xml
Normal file
17
app/src/main/res/layout/config_input.xml
Normal 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>
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user