From 66af3670c00cf9237a7a28c6371ddb4c3f7de7a3 Mon Sep 17 00:00:00 2001
From: 0xd9a <0xd9a@noreply.codeberg.org>
Date: Tue, 26 Oct 2021 21:25:46 +0530
Subject: [PATCH] Support wikiless
---
.../android/client/Entities/Status.java | 23 +++++++++
.../fragments/ContentSettingsFragment.java | 48 +++++++++++++++++++
.../fedilab/android/helper/BaseHelper.java | 11 +++++
.../res/layout/fragment_settings_privacy.xml | 46 ++++++++++++++++++
app/src/main/res/values/strings.xml | 4 ++
5 files changed, 132 insertions(+)
diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java
index fc163b56b..30ef36d0e 100644
--- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java
+++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java
@@ -371,6 +371,29 @@ public class Status implements Parcelable {
}
}
+ matcher = Helper.wikipediaPattern.matcher(content);
+ boolean wikipedia = Helper.getSharedValue(context, Helper.REPLACE_WIKIPEDIA);
+ if (wikipedia) {
+ while (matcher.find()) {
+ String subdomain = matcher.group(1);
+ String path = matcher.group(2);
+ String wikipediaReplaceHost = sharedpreferences.getString(Helper.REPLACE_WIKIPEDIA_HOST, Helper.DEFAULT_REPLACE_WIKIPEDIA_HOST).toLowerCase();
+ String lang = "";
+ if (path != null && subdomain != null && !subdomain.equals("www")) {
+ lang = (path.contains("?")) ? TextUtils.htmlEncode("&") : "?";
+ lang = lang + "lang=" + subdomain;
+ }
+ content = content.replaceAll(
+ "https://" + Pattern.quote(matcher.group()),
+ Matcher.quoteReplacement("https://" + wikipediaReplaceHost + "/" + path + lang)
+ );
+ content = content.replaceAll(
+ ">" + Pattern.quote(matcher.group()),
+ Matcher.quoteReplacement(">" + wikipediaReplaceHost + "/" + path)
+ );
+ }
+ }
+
Pattern aLink = Pattern.compile("]*(((?!");
Matcher matcherALink = aLink.matcher(content);
int count = 0;
diff --git a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java
index d4ddc8666..1aaa5e7c7 100644
--- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java
+++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java
@@ -2304,6 +2304,54 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
editor.apply();
}
});
+
+ EditText replace_wikipedia_host_edit_text = rootView.findViewById(R.id.replace_wikipedia_host);
+ boolean replace_wikipedia = Helper.getSharedValue(context, Helper.REPLACE_WIKIPEDIA);
+ final SwitchCompat replace_wikipedia_switch = rootView.findViewById(R.id.replace_wikipedia);
+ replace_wikipedia_switch.setChecked(replace_wikipedia);
+
+ replace_wikipedia_switch.setOnClickListener(v -> {
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ editor.putBoolean(Helper.REPLACE_WIKIPEDIA, replace_wikipedia_switch.isChecked());
+ editor.apply();
+ if (replace_wikipedia_switch.isChecked()) {
+ replace_wikipedia_host_edit_text.setVisibility(View.VISIBLE);
+ } else {
+ replace_wikipedia_host_edit_text.setVisibility(View.GONE);
+ }
+ });
+ if (replace_wikipedia) {
+ replace_wikipedia_host_edit_text.setVisibility(View.VISIBLE);
+ } else {
+ replace_wikipedia_host_edit_text.setVisibility(View.GONE);
+ }
+
+ String replaceWikipediaHost = sharedpreferences.getString(Helper.REPLACE_WIKIPEDIA_HOST, null);
+ if (replaceWikipediaHost != null) {
+ replace_wikipedia_host_edit_text.setText(replaceWikipediaHost);
+ }
+ replace_wikipedia_host_edit_text.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ if (s.toString().trim().length() > 0) {
+ editor.putString(Helper.REPLACE_WIKIPEDIA_HOST, s.toString().toLowerCase().trim());
+ } else {
+ editor.putString(Helper.REPLACE_WIKIPEDIA_HOST, null);
+ }
+ editor.apply();
+ }
+ });
} else if (type == MENU) {
rootView = inflater.inflate(R.layout.fragment_settings_menu, container, false);
diff --git a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java
index fa026d0a6..f8a628a3c 100644
--- a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java
+++ b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java
@@ -458,6 +458,10 @@ public class BaseHelper {
public static final String REPLACE_MEDIUM_HOST = "medium_replace_host";
public static final String DEFAULT_REPLACE_MEDIUM_HOST = "scribe.rip";
+ public static final String REPLACE_WIKIPEDIA = "replace_wikipedia";
+ public static final String REPLACE_WIKIPEDIA_HOST = "wikipedia_replace_host";
+ public static final String DEFAULT_REPLACE_WIKIPEDIA_HOST = "wikiless.org";
+
public static final String SET_NOTIF_VALIDATION = "set_share_validation";
public static final String SET_NOTIF_VALIDATION_FAV = "set_share_validation_fav";
public static final String SET_WIFI_ONLY = "set_wifi_only";
@@ -543,6 +547,7 @@ public class BaseHelper {
public static final Pattern ouichesPattern = Pattern.compile("https?://ouich\\.es/tag/(\\w+)");
public static final Pattern xmppPattern = Pattern.compile("xmpp:[-a-zA-Z0-9+$&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
public static final Pattern mediumPattern = Pattern.compile("([\\w@-]*)?\\.?medium.com/@?([/\\w-]+)");
+ public static final Pattern wikipediaPattern = Pattern.compile("([\\w_-]+)\\.wikipedia.org/(((?!([\"'<])).)*)");
//Default values
public final static int DEFAULT_VIDEO_WIDTH = 640;
public final static int DEFAULT_VIDEO_BITRATE = 450000;
@@ -4475,6 +4480,12 @@ public class BaseHelper {
} else {
return sharedpreferences.getBoolean(type, false);
}
+ } else if (type.compareTo(Helper.REPLACE_WIKIPEDIA) == 0) {
+ if (BuildConfig.lite) {
+ return true;
+ } else {
+ return sharedpreferences.getBoolean(type, false);
+ }
} else if (type.compareTo(Helper.SET_CONSOLE_MODE) == 0) {
if (BuildConfig.lite) {
return false;
diff --git a/app/src/main/res/layout/fragment_settings_privacy.xml b/app/src/main/res/layout/fragment_settings_privacy.xml
index b99d4ae32..df79cc608 100644
--- a/app/src/main/res/layout/fragment_settings_privacy.xml
+++ b/app/src/main/res/layout/fragment_settings_privacy.xml
@@ -270,6 +270,52 @@
android:hint="@string/replace_medium_host"
android:inputType="textWebEditText" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Replace medium.com links with an open source alternative front-end focused on privacy.
Default: scribe.rip
+ Replace Wikipedia links
+ Replace Wikipedia link with an open source alternative front-end focused on privacy.
+ Default: wikiless.org
+
Hide Fedilab notification bar
For hiding the remaining notification in the status bar, tap on the eye icon button then uncheck: \"Display in status bar\"
Use a push notifications system for getting notifications in real time.