diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a028363..495fe02 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,6 +26,7 @@
+ ) getIntent().getSerializableExtra(EXTRA_CLASS)).getConstructor(Context.class).newInstance(this);
+ } catch (Exception e) {
+ AndroidUtils.assertError("Unable to instantiate the JsonEditorInterface", e);
+ Toast.makeText(this, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+
+ info = findViewById(R.id.info);
+ this.findViewById(R.id.description).setText(provider.getEditorDescription());
+
+ editor = findViewById(R.id.data);
+ editor.setText(noFailToString(provider.getJson()));
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_json_editor, menu);
+ AndroidUtils.fixMenuIconColor(menu.findItem(R.id.menu_format), this);
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ // press the 'back' button in the action bar to go back
+ case android.R.id.home -> onBackPressed();
+ // format content
+ case R.id.menu_format -> format();
+ // save
+ case R.id.menu_save -> save();
+ // discard
+ case R.id.menu_discard -> discard();
+ // reset
+ case R.id.menu_reset -> reset();
+ // toggle info visibility
+ case R.id.menu_show_info -> {
+ item.setChecked(!item.isChecked());
+ info.setVisibility(item.isChecked() ? View.VISIBLE : View.GONE);
+ }
+
+ default -> {
+ return super.onOptionsItemSelected(item);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onBackPressed() {
+ // validate
+ JSONObject currentData;
+ try {
+ currentData = new JSONObject(editor.getText().toString());
+ } catch (JSONException e) {
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.toast_invalid)
+ .setMessage(R.string.json_ignore)
+ .setPositiveButton(R.string.json_discard_close, (dialog, which) -> finish())
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ return;
+ }
+
+ // check changes, exit if there are none
+ if (Objects.equals(noFailToString(currentData), noFailToString(provider.getJson()))) {
+ finish();
+ return;
+ }
+
+ // ask to save or discard
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.save)
+ .setMessage(R.string.json_save)
+ .setPositiveButton(R.string.save, (dialog, which) -> {
+ var result = provider.saveJson(currentData);
+ if (result == null) {
+ // all ok, exit
+ finish();
+ } else {
+ // error while saving
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.toast_invalid)
+ .setMessage(getString(R.string.json_save_error, result))
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
+ }
+ })
+ .setNeutralButton(R.string.discard, (dialog, which) -> finish())
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ }
+
+ /* ------------------- actions ------------------- */
+
+ /** Formats the editor content, shows a dialog if invalid */
+ private void format() {
+ try {
+ editor.setText(new JSONObject(editor.getText().toString()).toString(INDENT_SPACES));
+ } catch (JSONException e) {
+ // invalid json
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.toast_invalid)
+ .setMessage(R.string.json_format_error)
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
+ }
+ }
+
+ /** Discard the editor changes and restore the saved contents */
+ private void discard() {
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.discard)
+ .setMessage(R.string.json_discard)
+ .setPositiveButton(android.R.string.yes, (dialog, which) -> editor.setText(noFailToString(provider.getJson())))
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ }
+
+ /** Discard the editor changes and restore the built-in contents */
+ private void reset() {
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.reset)
+ .setMessage(R.string.json_reset)
+ .setPositiveButton(android.R.string.yes, (dialog, which) -> editor.setText(noFailToString(provider.getBuiltInJson())))
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ }
+
+ /** Saved current content. Display a dialog if it's not valid json or the saving failed */
+ private void save() {
+ String result;
+ try {
+ result = provider.saveJson(new JSONObject(editor.getText().toString()));
+ } catch (JSONException e) {
+ // invalid json
+ result = getString(R.string.json_format_error);
+ }
+
+ if (result != null) {
+ // error while saving
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.toast_invalid)
+ .setMessage(getString(R.string.json_save_error, result))
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
+ }
+ }
+
+ /* ------------------- utils ------------------- */
+
+ /** Formats a json into a valid string that doesn't throws a JSON exception */
+ private static String noFailToString(JSONObject content) {
+ try {
+ return content.toString(INDENT_SPACES);
+ } catch (JSONException e) {
+ // panic, don't format then
+ return content.toString();
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/trianguloy/urlchecker/activities/JsonEditorInterface.java b/app/src/main/java/com/trianguloy/urlchecker/activities/JsonEditorInterface.java
new file mode 100644
index 0000000..9b23935
--- /dev/null
+++ b/app/src/main/java/com/trianguloy/urlchecker/activities/JsonEditorInterface.java
@@ -0,0 +1,37 @@
+package com.trianguloy.urlchecker.activities;
+
+import static com.trianguloy.urlchecker.activities.JsonEditorActivity.EXTRA_CLASS;
+
+import android.content.Context;
+import android.content.Intent;
+
+import org.json.JSONObject;
+
+/**
+ * If a class implements this, it will be able to show a JSON editor.
+ * IMPORTANT! The class must also have a constructor with a single Context parameter.
+ */
+public interface JsonEditorInterface {
+
+ /* ------------------------- implementation ------------------------- */
+
+ /** Should return the currently saved json */
+ JSONObject getJson();
+
+ /** Should return the built-in json */
+ JSONObject getBuiltInJson();
+
+ /** Should saves a json. Return null if all ok, a message string to display if not */
+ String saveJson(JSONObject data);
+
+ /** The string id of the description to show in the editor */
+ int getEditorDescription();
+
+ /* ------------------------- usage ------------------------- */
+
+ /** Displays a generic editor for json content. */
+ default void showEditor(Context cntx) {
+ cntx.startActivity(new Intent(cntx, JsonEditorActivity.class)
+ .putExtra(EXTRA_CLASS, this.getClass()));
+ }
+}
diff --git a/app/src/main/java/com/trianguloy/urlchecker/dialogs/JsonEditor.java b/app/src/main/java/com/trianguloy/urlchecker/dialogs/JsonEditor.java
deleted file mode 100644
index 32dd33d..0000000
--- a/app/src/main/java/com/trianguloy/urlchecker/dialogs/JsonEditor.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.trianguloy.urlchecker.dialogs;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.trianguloy.urlchecker.R;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * @see this#show
- */
-public class JsonEditor {
-
- public interface Listener {
- /**
- * Current data that the user wants to save.
- * Return true if it is ok and the dialog should be dismissed, false otherwise.
- */
- boolean onSave(JSONObject content);
- }
-
- /**
- * Displays a generic editor for json content.
- */
- public static void show(JSONObject content, JSONObject reset, int description, Activity cntx, Listener onSave) {
-
- // prepare dialog content
- View views = cntx.getLayoutInflater().inflate(R.layout.json_editor, null);
- views.findViewById(R.id.description).setText(description);
-
- // init rules
- EditText data = views.findViewById(R.id.data);
- data.setText(noFailToString(content));
-
- // formatter
- views.findViewById(R.id.format).setOnClickListener(v -> {
- try {
- data.setText(new JSONObject(data.getText().toString()).toString(2));
- } catch (JSONException e) {
- e.printStackTrace();
- Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
- }
- });
-
- // prepare dialog
- AlertDialog dialog = new AlertDialog.Builder(cntx)
- .setView(views)
- .setPositiveButton(R.string.save, null) // set below
- .setNegativeButton(android.R.string.cancel, null)
- .setNeutralButton(R.string.reset, null) // set below
- .setCancelable(false)
- .show();
-
- dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
-
- // prepare more dialog
- // these are configured here to disable automatic auto-closing when they are pressed
- dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
- try {
- if (onSave.onSave(new JSONObject(data.getText().toString()))) {
- dialog.dismiss();
- }
- } catch (JSONException e) {
- e.printStackTrace();
- Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
- }
- });
- dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
- // clear catalog and reload internal
- data.setText(noFailToString(reset));
- });
- }
-
- /**
- * Formats a json into a valid string that doesn't throws a JSON exception
- * (as a function because I needed a final string)
- */
- private static String noFailToString(JSONObject content) {
- try {
- return content.toString(2);
- } catch (JSONException e) {
- // panic, don't format then
- return content.toString();
- }
- }
-
-}
diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/ClearUrlCatalog.java b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/ClearUrlCatalog.java
index aa6595d..abd6653 100644
--- a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/ClearUrlCatalog.java
+++ b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/ClearUrlCatalog.java
@@ -11,7 +11,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.trianguloy.urlchecker.R;
-import com.trianguloy.urlchecker.dialogs.JsonEditor;
+import com.trianguloy.urlchecker.activities.JsonEditorInterface;
import com.trianguloy.urlchecker.utilities.generics.GenericPref;
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
import com.trianguloy.urlchecker.utilities.methods.HttpUtils;
@@ -31,7 +31,7 @@ import java.util.List;
/**
* Manages the local catalog with the rules
*/
-public class ClearUrlCatalog {
+public class ClearUrlCatalog implements JsonEditorInterface {
/* ------------------- constants ------------------- */
@@ -182,16 +182,34 @@ public class ClearUrlCatalog {
* Show the rules editor dialog
*/
public void showEditor() {
- JsonEditor.show(getCatalog(), getBuiltIn(), R.string.mClear_editor, cntx, content -> {
- if (setRules(content, false) != Result.ERROR) {
- // saved data, close dialog
- return true;
- } else {
- // invalid data, keep dialog and show why
- Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_LONG).show();
- return false;
- }
- });
+ showEditor(cntx);
+ }
+
+ @Override
+ public JSONObject getJson() {
+ return getCatalog();
+ }
+
+ @Override
+ public JSONObject getBuiltInJson() {
+ return getBuiltIn();
+ }
+
+ @Override
+ public String saveJson(JSONObject data) {
+ if (setRules(data, false) != Result.ERROR) {
+ // saved data, close dialog
+ return null;
+ } else {
+ // invalid data, keep dialog and show why
+ Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_LONG).show();
+ return "Invalid";
+ }
+ }
+
+ @Override
+ public int getEditorDescription() {
+ return R.string.mClear_editor;
}
/**
diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Hosts.java b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Hosts.java
index 705311c..5bc286f 100644
--- a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Hosts.java
+++ b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Hosts.java
@@ -9,7 +9,6 @@ import com.trianguloy.urlchecker.R;
import com.trianguloy.urlchecker.utilities.generics.JsonCatalog;
import com.trianguloy.urlchecker.utilities.methods.HttpUtils;
import com.trianguloy.urlchecker.utilities.methods.JavaUtils;
-import com.trianguloy.urlchecker.utilities.methods.StreamUtils;
import com.trianguloy.urlchecker.utilities.wrappers.InternalFile;
import com.trianguloy.urlchecker.utilities.wrappers.ProgressDialog;
@@ -55,7 +54,7 @@ public class Hosts {
);
if (showEditor) builder
- .setNeutralButton(R.string.json_edit, (dialog, which) -> data.showEditor());
+ .setNeutralButton(R.string.json_editor, (dialog, which) -> data.showEditor());
builder.show();
}
diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/PatternCatalog.java b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/PatternCatalog.java
index 2846d63..540dbf4 100644
--- a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/PatternCatalog.java
+++ b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/PatternCatalog.java
@@ -1,6 +1,5 @@
package com.trianguloy.urlchecker.modules.companions;
-import android.app.Activity;
import android.content.Context;
import com.trianguloy.urlchecker.R;
@@ -15,7 +14,7 @@ import org.json.JSONObject;
*/
public class PatternCatalog extends JsonCatalog {
- public PatternCatalog(Activity cntx) {
+ public PatternCatalog(Context cntx) {
super(cntx, "patterns", R.string.mPttrn_editor);
}
diff --git a/app/src/main/java/com/trianguloy/urlchecker/utilities/generics/JsonCatalog.java b/app/src/main/java/com/trianguloy/urlchecker/utilities/generics/JsonCatalog.java
index ec4d40d..a37a3f4 100644
--- a/app/src/main/java/com/trianguloy/urlchecker/utilities/generics/JsonCatalog.java
+++ b/app/src/main/java/com/trianguloy/urlchecker/utilities/generics/JsonCatalog.java
@@ -1,9 +1,8 @@
package com.trianguloy.urlchecker.utilities.generics;
-import android.app.Activity;
import android.content.Context;
-import com.trianguloy.urlchecker.dialogs.JsonEditor;
+import com.trianguloy.urlchecker.activities.JsonEditorInterface;
import com.trianguloy.urlchecker.utilities.wrappers.InternalFile;
import org.json.JSONException;
@@ -12,13 +11,13 @@ import org.json.JSONObject;
/**
* Represents a generic catalog
*/
-public abstract class JsonCatalog {
+public abstract class JsonCatalog implements JsonEditorInterface {
- private final Activity cntx;
+ private final Context cntx;
private final InternalFile custom;
private final int editorDescription;
- public JsonCatalog(Activity cntx, String fileName, int editorDescription) {
+ public JsonCatalog(Context cntx, String fileName, int editorDescription) {
this.cntx = cntx;
this.editorDescription = editorDescription;
custom = new InternalFile(fileName, cntx);
@@ -71,11 +70,30 @@ public abstract class JsonCatalog {
return custom.set(content.toString());
}
- /**
- * Shows a dialog to manually edit the catalog
- */
+
+ @Override
+ public JSONObject getJson() {
+ return getCatalog();
+ }
+
+ @Override
+ public JSONObject getBuiltInJson() {
+ return getBuiltIn();
+ }
+
+ @Override
+ public String saveJson(JSONObject data) {
+ return save(data) ? null : "Unable to save";
+ }
+
+ @Override
+ public int getEditorDescription() {
+ return editorDescription;
+ }
+
+
public void showEditor() {
- JsonEditor.show(getCatalog(), getBuiltIn(), editorDescription, cntx, this::save);
+ showEditor(cntx);
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/trianguloy/urlchecker/utilities/methods/JavaUtils.java b/app/src/main/java/com/trianguloy/urlchecker/utilities/methods/JavaUtils.java
index 41c0cd2..820f50c 100644
--- a/app/src/main/java/com/trianguloy/urlchecker/utilities/methods/JavaUtils.java
+++ b/app/src/main/java/com/trianguloy/urlchecker/utilities/methods/JavaUtils.java
@@ -14,9 +14,7 @@ import java.util.List;
*/
public interface JavaUtils {
- /**
- * Converts an iterator to a list
- */
+ /** Converts an iterator to a list */
static List toList(Iterator iterator) {
List list = new ArrayList<>();
while (iterator.hasNext()) {
@@ -25,9 +23,7 @@ public interface JavaUtils {
return list;
}
- /**
- * Converts a string into a json object, returns empty on failure
- */
+ /** Converts a string into a json object, returns empty on failure */
static JSONObject toJson(String content) {
try {
return new JSONObject(content);
@@ -37,9 +33,7 @@ public interface JavaUtils {
}
}
- /**
- * Clamps a value between two other values.
- */
+ /** Clamps a value between two other values. */
static int clamp(int min, int value, int max) {
return min <= max ? Math.max(min, Math.min(value, max))
// just in case
@@ -108,17 +102,13 @@ public interface JavaUtils {
else list.add(element);
}
- /**
- * java.util.function.Consumer requires api 24
- */
+ /** java.util.function.Consumer requires api 24 */
@FunctionalInterface
interface Consumer {
void accept(T t);
}
- /**
- * java.util.function.Function requires api 24
- */
+ /** java.util.function.Function requires api 24 */
@FunctionalInterface
interface Function {
R apply(T t);
@@ -129,9 +119,7 @@ public interface JavaUtils {
return t -> !function.apply(t);
}
- /**
- * java.util.function.UnaryOperator requires api 24
- */
+ /** java.util.function.UnaryOperator requires api 24 */
@FunctionalInterface
interface UnaryOperator extends Function {
}
diff --git a/app/src/main/res/drawable/format.xml b/app/src/main/res/drawable/format.xml
index 7edc1b4..d10bbc2 100644
--- a/app/src/main/res/drawable/format.xml
+++ b/app/src/main/res/drawable/format.xml
@@ -5,6 +5,6 @@
android:width="24dp"
xmlns:android="http://schemas.android.com/apk/res/android">
diff --git a/app/src/main/res/layout/activity_json_editor.xml b/app/src/main/res/layout/activity_json_editor.xml
new file mode 100644
index 0000000..557455c
--- /dev/null
+++ b/app/src/main/res/layout/activity_json_editor.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/config_clearurls.xml b/app/src/main/res/layout/config_clearurls.xml
index cc1e914..7e9381f 100644
--- a/app/src/main/res/layout/config_clearurls.xml
+++ b/app/src/main/res/layout/config_clearurls.xml
@@ -53,7 +53,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="@string/json_edit" />
+ android:text="@string/json_editor" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/config_hosts.xml b/app/src/main/res/layout/config_hosts.xml
index de08e1f..46fdf40 100644
--- a/app/src/main/res/layout/config_hosts.xml
+++ b/app/src/main/res/layout/config_hosts.xml
@@ -14,13 +14,15 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
-
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/config_patterns.xml b/app/src/main/res/layout/config_patterns.xml
index d359d21..84d202f 100644
--- a/app/src/main/res/layout/config_patterns.xml
+++ b/app/src/main/res/layout/config_patterns.xml
@@ -14,7 +14,7 @@
style="?android:attr/buttonBarButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/json_edit" />
+ android:text="@string/json_editor" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/activity_json_editor.xml b/app/src/main/res/menu/activity_json_editor.xml
new file mode 100644
index 0000000..0df7cfe
--- /dev/null
+++ b/app/src/main/res/menu/activity_json_editor.xml
@@ -0,0 +1,27 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index eaa675a..4b8fc05 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -91,7 +91,7 @@
التاليالسابقتجاهل
- محرر متقدم
+ محرر متقدمالتحقق من عناوين الويب URLs الموجودة في الحافظةفحص النمطإصلاح مجموعات الفحص النمطية الاختيارية (تعطيلها إذا كان الفحص النمطي لا يعمل بشكل صحيح)
@@ -163,7 +163,6 @@
إنهاء الدليل التعليميإعادة الضبطلم يتم اكتشاف أي روابط
- [ميزة تجريبية] هذا محرر متقدم، يجب تنسيق المحتوى إلى JSON صالح. يمكنك الضغط على الزر في الزاوية العلوية اليمنى لتنسيقه والتحقق من صحته.هذه الوحدة تقوم بفحص عنوان الويب باستخدام أنماط الفحص النمطية التي تحذر، تقترح أو تطبق الاستبدالات. يمكنك تعديل أو إنشاء أنماط خاصة بك، أو حتى استخدام أنماط تم إنشاؤها من قبل المستخدمين.
\nالأنماط المضمنة تشمل:
\n- تحذير عندما يحتوي على أحرف غير ascii مثل الحروف اليونانية. يمكن استخدام هذا للصيد الاحتيالي: googĺe.com بدلاً من google.com
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 2ee8606..19fb130 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -122,7 +122,7 @@
\n- \'enabled\': boolean: nastavte na false, abyste vzor deaktivovali.
\nPoznámka: Pokud si vzory upravíte, nové výchozí vzory z aktualizací aplikace se automaticky nepřidají (můžete je obnovit pomocí možnosti reset).Otevřít v %s
- Pokročilý editor
+ Pokročilý editorSeznam změnZde jsou uvedeny všechny dostupné moduly, u kterých si můžete zkontrolovat jejich popis a nastavení. Můžete také změnit jejich pořadí, přepnout viditelnost názvu či je povolit/zakázat.Otevírání odkazů v této aplikaci: V průběhu let Android změnil způsob nastavení otevírání odkazů a značně se tak liší mezi jednotlivými verzemi. Níže najdete výběr možných kroků nastavení pro vaše zařízení. Pokud se odkazy v této aplikaci neotevírají, vyzkoušejte je všechny.
@@ -145,7 +145,6 @@
\n
\nSeznam modulů otevřete na hlavní obrazovce nebo klepnutím na tlačítko níže.
Zpět
- [Funkce v betě] Toto je pokročilý editor, obsah musí být naformátován do platného JSON. Stisknutím pravého horního tlačítka jej naformátujete a potvrdíte.Najít URL odkaz(y) ve schránceTento modul kontroluje adresu URL pomocí vzorů regulárních výrazů (regex), které varují, navrhují či nahrazují. Můžete upravovat nebo vytvářet své vlastní vzory, nebo dokonce používat ty vytvořené uživatelem.
\nMezi vestavěné vzory patří:
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 23deacd..33e91a4 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -34,7 +34,7 @@
Geräte-StandardWeiterZurück
- Erweiterter Editor
+ Erweiterter EditorURLs aus der Zwischenablage prüfenTippen Sie zum Testen auf folgenden Link:Module
@@ -56,7 +56,6 @@
TDiese App fungiert als Zwischenschritt beim Öffnen angeklickter Links. Wenn diese App zum Öffnen ausgewählt wurde, wird ein Dialog mit einigen Informationen über den Link angezeigt. Über den Module-Button unten können Sie alle verfügbaren Module prüfen und konfigurieren.Alle Titel umschalten
- [Beta-Funktion] Dies ist ein erweiterter Editor, der Inhalt muss gültiges JSON sein. Sie können die Schaltfläche oben rechts drücken, um das JSON zu formatieren und zu validieren.Muster (RegEx)Öffnen und TeilenBenutzerdefinierte Tabs:
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 95c573d..eac8b02 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -99,8 +99,15 @@ Hay algunos enlaces cuyo único propósito es redirigirte a otro enlace. Si el e
- [Funcionalidad beta] Este es un editor avanzado, el contenido debe ser JSON válido. Puedes pulsar el botón de arriba a la derecha para formatearlo y validarlo.
- Editor avanzado
+ Editor JSON
+ Mostrar información
+ El contenido no es JSON válido. Quieres descartarlo y cerrar el editor?
+ Descartar y cerrar
+ Hay cambios sin guardar, quieres guardarlos o descartarlos?
+ No se ha podido guardar: %s
+ El contenido no es JSON válido, no se puede validar.
+ Cuidado, esto reemplazará el contenido del editor con el json guardado. Todos los cambios realizados se perderán. Quieres continuar?
+ Cuidado, esto reemplazará el contenido del editor con el json por defecto. Todos los cambios realizados se perderán, aunque el contenido guardado no se modificará a no ser que se guarde manualmente. Quieres continuar?
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index f4f2b32..0aba489 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -95,8 +95,7 @@ Ceci est le didacticiel, si vous souhaitez l'ignorer vous pouvez le faire en uti
- [Fonctionnalité bêta] Il s\'agit d\'un éditeur avancé, le contenu doit être formaté en JSON valide. Vous pouvez appuyer sur le bouton en haut à droite pour le formater et le valider.
- Éditeur avancé
+ Éditeur avancé
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 8300403..d7f9281 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -50,7 +50,6 @@
अमान्य http scheme बड़ा किया।वर्तमान संस्करण: %sवैकल्पिक regex समूहों को ठीक करें (यदि regex सही ढंग से काम नहीं कर रहा है तो अक्षम करें)
- [बीटा सुविधा] यह एक उन्नत संपादक है, सामग्री को वैध JSON में स्वरूपित किया जाना चाहिए। आप इसे प्रारूपित करने और सत्यापित करने के लिए शीर्ष-दाएं बटन दबा सकते हैं।HTTP लिंक। HTTPS का उपयोग विचारें।अगलाउपयोगकर्ता द्वारा बनाए गए अन्य उपयोगी पैटर्न की सूची: %s
@@ -85,7 +84,7 @@
लागूHTTP scheme अनुपलब्ध।अमान्य https scheme बड़ा किया।
- उन्नत संपादक
+ उन्नत संपादकलागू किया - %sयूआरएल क्लिपबोर्ड पर कॉपी किया गयासाझा
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 31ea05f..0a53133 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -58,7 +58,6 @@
Modul ini menghilangkan pelacakan, perujuk, dan parameter lain yang tidak bermanfaat di URL. Ia juga bisa melacak pengalihan URL luring yang umum digunakan.Tidak dapat melakukan koneksi ke VirusTotal. Pastikan Anda terhubung ke internet, atau coba lagi nanti.Perbaiki grup regex yang opsional (nonaktifkan jika regex tidak bekerja dengan baik)
- [Fitur beta] Berikut ini adalah editor tingkat lanjut, konten terkait harus berupa JSON yang valid. Anda bisa menekan tombol di sebelah kanan atas untuk memformat dan memvalidasinya.Link HTTP. Pertimbangkan untuk beralih ke HTTPS.Cek statusJika Anda mengubah urutan modul, modul baru yang ditambahkan pada pembaruan selanjutnya akan diletakkan di atas modul ini.
@@ -152,7 +151,7 @@
TerapkanSkema HTTP tidak ditemukan.Skema https tidak valid.
- Editor tingkat lanjut
+ Editor tingkat lanjut%s - telah diterapkanModul Awakutu/PenandaURL telah disalin ke papan klip
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 595b7f4..9681bd0 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -57,8 +57,7 @@ Traduzioni: %s."CondividiCancellatoImpostazioni predefinite
- "[Funzionalità beta] Questo è un editor avanzato, il contenuto dev'essere formattato in JSON. Puoi premere il pulsante in alto a destra per formattare e controllare."
- Editor avanzato
+ Editor avanzatoControllo dei pattern"Controlla cose comuni nell'url. Patterns inclusi:
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 0f516ee..f4ebb7b 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -31,8 +31,7 @@
להצילאיפוסשתף אפליקציה
- [תכונת בטא] זהו עורך מתקדם, התוכן חייב להיות בפורמט ל-JSON חוקי. אתה יכול ללחוץ על הכפתור הימני העליון כדי לעצב ולאמת אותו.
- עורך מתקדם
+ עורך מתקדםבודק דפוסים"בודק בעיות נפוצות בכתובת האתר. דפוסים מובנים:
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index dfd68e6..a858079 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -57,8 +57,7 @@
このアプリを友達に自慢するキャンセルされましたデバイスの設定に従う
- [ベータ機能] これは上級者向けのエディタです。内容は有効な JSON にフォーマットされている必要があります。右上のボタンをタップすると、フォーマット・検証ができます。
- 上級者向けエディタ
+ 上級者向けエディタパターンチェッカー"正規表現パターンで URL をチェックし、警告・提案・置換をします。パターンは変更したり、独自に作成したり、あるいは他のユーザーが作成したものを使用することもできます。
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 26efc5c..fb0551e 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -85,12 +85,11 @@
카탈로그 규칙: https://docs.clearurls.xyz/latest/specs/rules/ 의 형식을 따라야 합니다.
\n부모 객체인 \'providers\'는 업데이트되었을 때 덮어씌어진다는 점을 주의하세요. 만약 개인적으로 규칙을 만들고 싶다면 아무 이름이나로 다른 부모 객체를 만들어서 규칙을 설정하세요.유효하지 않음
- [베타 기능] 이 고급 편집에서는 유효한 JSON 파일이 반드시 포함되어야 합니다. 오른쪽 위 버튼을 눌러서 유효한지 확인하세요.지우기클립보드에서 URL 확인하기주의: %d/%d 엔진이 URL을 감지했습니다. (%s 기준)스캔하기
- 고급 편집
+ 고급 편집VirusTotal™은 Google, Inc.의 트레이드마크입니다.스캔 중…이 모듈이 활성화되어 있을 때 VirusTotal을 이용해 URL을 검사할 수 있습니다. 개인 VirusTotal API 키가 필요하며, 키는 https://www.virustotal.com/gui/join-us 에서 무료로 회원가입 후 받을 수 있습니다.
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 090e21f..b77cc2e 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -26,7 +26,7 @@
EnhetsforvalgNesteTilbake
- Avansert tekstbehandler
+ Avansert tekstbehandlerBrukSjekk nettadresser fra utklippstavlenHTTP-lenke. Overvei å bruke HTTPS.
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 3bfbf7e..22c2e48 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -20,7 +20,6 @@
Herhaal tutorialKan geen verbinding maken met VirusTotal. Zorg ervoor dat u verbonden bent met internet of probeer het later opnieuw.Optionele regex-groepen repareren (uitschakelen als regex niet correct werkt)
- [Bètafunctie] Dit is een geavanceerde editor, de inhoud moet worden opgemaakt in geldige JSON. U kunt op de knop rechtsboven drukken om deze te formatteren en te valideren.TutorialDe app is nu de standaardwebbrowserHTTP-link. Overweeg het gebruik van HTTPS.
@@ -155,7 +154,7 @@
\n
\nOpen de lijst met modules vanuit het hoofdscherm of door op de onderstaande knop te tikken.Ongeldig hoofdlettergebruik van https-schema.
- Geavanceerde editor
+ Geavanceerde editorToegepast - %sDebug/Marker-moduleURL gekopieerd naar klembord
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 657d979..ea670b3 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -7,7 +7,7 @@
TutorialCanceladoPróximo
- Editor avançado
+ Editor avançadoDesabilitado por padrãoAplicarSem dados
@@ -129,7 +129,6 @@
Catálogo embutido copiado do ClearURLs: https://docs.clearurls.xyz/latest/specs/rules/- BLOQUEADO!- ignorado devido a exceção %s
- [Função Beta] Este é um editor avançado, o conteúdo deve ser formatado em JSON válido. Você pode pressionar o botão no canto superior direito para formatá-lo e validá-lo.Esquema HTTPS ausente.Não há padrões correspondentes.Verifique automaticamente as URLs que correspondem ao seguinte padrão de expressão regular. Aviso! É aconselhável especificar um padrão restritivo (e não .* para todos) caso contrário, servidores mal-intencionados podem registrar seu endereço IP.
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 7725b4b..1b0f724 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -68,8 +68,7 @@ Translations: %s."
- [Função Beta] Isto é um editor avançado, o conteudo tem que estar formatado em JSON válido. Podes pressionar o botão no canto superior direito para formatar e validar.
- Editor Avançado
+ Editor Avançado
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 2fa06f0..fcb59d8 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -98,8 +98,7 @@
Dispozitiv implicitUrmătorÎnapoi
- [Funcția beta] Acesta este un editor avansat, conținutul trebuie formatat în JSON valid. Puteți apăsa butonul din dreapta sus pentru a-l formata și valida.
- Editor avansat
+ Editor avansatAcest modul verifică adresa URL cu modele regex care avertizează, sugerează sau aplică înlocuiri. Puteți modifica sau crea propriile modele sau chiar să le utilizați pe cele create de utilizator.
\nModelele încorporate includ:
\n- Avertizare când conține caractere non-ascii, cum ar fi literele grecești. Acesta poate fi folosit pentru phishing: googĺe.com vs google.com
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 38e3ada..d4e62b6 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -76,7 +76,7 @@
\nВажно: Все действия выполняются вручную. Приложение не будет ничего модифицировать, а также не будет подключаться к интернету, если вы отдельно не разрешите этого, но некоторые действия при вашем желании могут применяться автоматически.
\n
\nОткройте список модулей на главном экране или нажав на кнопку ниже.
- Продвинутый редактор
+ Продвинутый редакторПоделитьсяВыключено по умолчаниюВыберите приложение
@@ -89,7 +89,6 @@
Последнее обновление:Невозможно подключиться к VirusTotal. Удостоверьтесь, что вы подключены к интернету, или попробуйте позже.Исправить необязательные группы регулярных выражений (отключите, если регулярные выражения работают неправильно)
- [Бета-функция] Это продвинутый редактор, содержимое обязано быть форматировано в допустимый JSON. Вы можете нажать кнопку в правом верхнем углу для форматирования и проверки.HTTP ссылка. Лучше использовать HTTPS.Проверить состояниеЕсли вы переставите модули, то те, добавленные в будущих обновлениях, будут размещены выше этого.
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 0dc7a35..b6dcaa8 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -100,8 +100,7 @@ Umarım uygulamayı yararlı bulursunuz! Ve özellikler önermekten, hataları b
- [Beta özelliği] Bu gelişmiş bir düzenleyicidir, içerik geçerli JSON olarak biçimlendirilmelidir. Biçimlendirmek ve doğrulamak için sağ üstteki butona basabilirsiniz.
- Gelişmiş düzenleyici
+ Gelişmiş düzenleyici
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 62431a6..d32242a 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -179,8 +179,7 @@
Đóng hộp thoại sau khi sao chépBỏ quaQuay lại
- [Tính năng Beta] Đây là trình chỉnh sửa nâng cao, nội dung phải được định dạng thành JSON hợp lệ. Bạn có thể nhấn nút trên cùng bên phải để định dạng và xác nhận nó.
- Trình chỉnh sửa nâng cao
+ Trình chỉnh sửa nâng caoKiểm tra URL từ clipboardTrình kiểm tra mẫuSửa các nhóm biểu thức chính quy tùy chọn (vô hiệu hóa nếu biểu thức chính quy không hoạt động chính xác)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 9b7cdb3..c16e7ff 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -86,8 +86,7 @@
下一步返回
- [测试功能] 这是一个进阶编辑器,内容必须为有效的 JSON 格式。您可以点击右上角的按钮进行格式化和验证。
- 进阶编辑器
+ 进阶编辑器检查剪贴板中的链接
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a836284..ebded15 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -86,7 +86,7 @@
檢查中…立即更新套用
- 進階編輯器
+ 進階編輯器已將網址複製到剪貼簿分享編輯記錄檔
@@ -138,7 +138,6 @@
縮址還原器廣告/惡意軟體未與任何型樣相符
- [測試版功能] 此為進階編輯器,輸入的內容必須符合 JSON 的格式規範。點選右上角的按鈕即可自動排版並驗證之。伺服器錯誤:%s未與任何規則相符型樣檢查器
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 58855ab..8ab0b77 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -142,11 +142,20 @@ Hope you find the app useful! And don't hesitate to suggest features, report bug
SmallNormalBig
+ Format
+ Discard
- [Beta feature] This is an advanced editor, the content must be formatted into valid JSON. You can press the top-right button to format and validate it.
- Advanced editor
+ JSON editor
+ Show info
+ The content is not valid JSON. Do you want to discard it and close the editor?
+ Discard and close
+ There are unsaved changes, do you want to save or discard them?
+ Unable to save: %s
+ The content is not valid JSON, can\'t be parsed.
+ Warning, this will replace the editor content with the saved json. All changes made will be lost. Do you want to continue?
+ Warning, this will replace the editor content with the built-in json. All editor changes made will be lost, but saved content will not be modified unless manually saved. Do you want to continue?