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.