From 3c9fb0da26aa9777cbd2dbdbf48c0da6fa2155c2 Mon Sep 17 00:00:00 2001 From: 0xd9a <0xd9a@noreply.codeberg.org> Date: Mon, 25 Oct 2021 20:30:37 +0530 Subject: [PATCH] Support scribe.rip --- .../android/client/Entities/Status.java | 16 +++++++ .../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, 125 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 e00399538..fc163b56b 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 @@ -355,6 +355,22 @@ public class Status implements Parcelable { } } + matcher = Helper.mediumPattern.matcher(content); + boolean medium = Helper.getSharedValue(context, Helper.REPLACE_MEDIUM); + if (medium) { + while (matcher.find()) { + String path = matcher.group(2); + String user = matcher.group(1); + if (user != null && user.length() > 0 & !user.equals("www")) { + path = user + "/" + path; + } + + String mediumReplaceHost = sharedpreferences.getString(Helper.REPLACE_MEDIUM_HOST, Helper.DEFAULT_REPLACE_MEDIUM_HOST).toLowerCase(); + content = content.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + mediumReplaceHost + "/" + path)); + content = content.replaceAll(">" + Pattern.quote(matcher.group()), Matcher.quoteReplacement(">" + mediumReplaceHost + "/" + 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 b4c400203..d4ddc8666 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java @@ -2256,6 +2256,54 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot editor.apply(); } }); + + EditText replace_medium_host_edit_text = rootView.findViewById(R.id.replace_medium_host); + boolean replace_medium = Helper.getSharedValue(context, Helper.REPLACE_MEDIUM); + final SwitchCompat replace_medium_switch = rootView.findViewById(R.id.replace_medium); + replace_medium_switch.setChecked(replace_medium); + + replace_medium_switch.setOnClickListener(v -> { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.REPLACE_MEDIUM, replace_medium_switch.isChecked()); + editor.apply(); + if (replace_medium_switch.isChecked()) { + replace_medium_host_edit_text.setVisibility(View.VISIBLE); + } else { + replace_medium_host_edit_text.setVisibility(View.GONE); + } + }); + if (replace_medium) { + replace_medium_host_edit_text.setVisibility(View.VISIBLE); + } else { + replace_medium_host_edit_text.setVisibility(View.GONE); + } + + String replaceMediumHost = sharedpreferences.getString(Helper.REPLACE_MEDIUM_HOST, null); + if (replaceMediumHost != null) { + replace_medium_host_edit_text.setText(replaceMediumHost); + } + replace_medium_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_MEDIUM_HOST, s.toString().toLowerCase().trim()); + } else { + editor.putString(Helper.REPLACE_MEDIUM_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 292663f4e..fa026d0a6 100644 --- a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java @@ -454,6 +454,10 @@ public class BaseHelper { public static final String SET_LIBREDDIT_HOST = "set_libreddit_host"; public static final String DEFAULT_LIBREDDIT_HOST = "libredd.it"; + public static final String REPLACE_MEDIUM = "replace_medium"; + public static final String REPLACE_MEDIUM_HOST = "medium_replace_host"; + public static final String DEFAULT_REPLACE_MEDIUM_HOST = "scribe.rip"; + 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"; @@ -538,6 +542,7 @@ public class BaseHelper { public static final Pattern libredditPattern = Pattern.compile("(www\\.|m\\.)?(reddit\\.com|preview\\.redd\\.it|i\\.redd\\.it|redd\\.it)/(((?!([\"'<])).)*)"); 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-]+)"); //Default values public final static int DEFAULT_VIDEO_WIDTH = 640; public final static int DEFAULT_VIDEO_BITRATE = 450000; @@ -4464,6 +4469,12 @@ public class BaseHelper { } else { return sharedpreferences.getBoolean(type, false); } + } else if (type.compareTo(Helper.REPLACE_MEDIUM) == 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 2290a9b88..b99d4ae32 100644 --- a/app/src/main/res/layout/fragment_settings_privacy.xml +++ b/app/src/main/res/layout/fragment_settings_privacy.xml @@ -224,6 +224,52 @@ android:hint="@string/set_libreddit_host" android:inputType="textWebEditText" /> + + + + + + + + + + + + + + + + + Libreddit is an open source alternative Reddit front-end focused on privacy. Enter your custom host or leave blank for using libredd.it + Replace Medium links + Replace medium.com link with an open source alternative front-end focused on privacy. + Default: scribe.rip + 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.