From 7cf2b2f6988a84238b08e4aa713b327b8bf94b0b Mon Sep 17 00:00:00 2001 From: Balazs Toldi Date: Tue, 9 Feb 2021 11:17:33 +0100 Subject: [PATCH] Added Libreddit support --- .../android/activities/SettingsActivity.java | 28 +++++++++++ app/src/lite/res/layout/activity_settings.xml | 14 ++++++ .../android/client/Entities/Status.java | 11 +++++ .../drawers/BaseStatusListAdapter.java | 9 ++++ .../fragments/ContentSettingsFragment.java | 46 +++++++++++++++++++ .../fedilab/android/helper/BaseHelper.java | 5 ++ .../res/layout/fragment_settings_privacy.xml | 45 ++++++++++++++++++ app/src/main/res/values/strings.xml | 4 ++ 8 files changed, 162 insertions(+) diff --git a/app/src/lite/java/app/fedilab/android/activities/SettingsActivity.java b/app/src/lite/java/app/fedilab/android/activities/SettingsActivity.java index 00dbbd749..397fc7a93 100644 --- a/app/src/lite/java/app/fedilab/android/activities/SettingsActivity.java +++ b/app/src/lite/java/app/fedilab/android/activities/SettingsActivity.java @@ -229,6 +229,34 @@ public class SettingsActivity extends BaseActivity { } }); + TextView set_libreddit_host = findViewById(R.id.set_libreddit_host); + + String libredditHost = sharedpreferences.getString(Helper.SET_LIBREDDIT_HOST, null); + if (libredditHost != null) { + set_libreddit_host.setText(libredditHost); + } + set_libreddit_host.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.SET_LIBREDDIT_HOST, s.toString().toLowerCase().trim()); + } else { + editor.putString(Helper.SET_LIBREDDIT_HOST, null); + } + editor.apply(); + } + }); boolean expand_cw = sharedpreferences.getBoolean(Helper.SET_EXPAND_CW, false); final SwitchCompat set_expand_cw = findViewById(R.id.set_expand_cw); diff --git a/app/src/lite/res/layout/activity_settings.xml b/app/src/lite/res/layout/activity_settings.xml index 8eecbfbad..26ad5f77e 100644 --- a/app/src/lite/res/layout/activity_settings.xml +++ b/app/src/lite/res/layout/activity_settings.xml @@ -615,5 +615,19 @@ android:hint="@string/set_bibliogram_host" android:inputType="textWebEditText" /> + + + + 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 282e925d5..55a546dd2 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 @@ -317,6 +317,17 @@ public class Status implements Parcelable { } } + matcher = Helper.libredditPattern.matcher(content); + boolean libreddit = Helper.getSharedValue(context, Helper.SET_LIBREDDIT); + if (libreddit) { + while (matcher.find()) { + final String libreddit_directory = matcher.group(3); + String libreddit_host = sharedpreferences.getString(Helper.SET_LIBREDDIT_HOST, Helper.DEFAULT_LIBREDDIT_HOST).toLowerCase(); + content = content.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + libreddit_host +"/"+ libreddit_directory)); + content = content.replaceAll(">" + Pattern.quote(matcher.group()), Matcher.quoteReplacement(">" + libreddit_host +"/"+ libreddit_directory)); + } + } + matcher = Helper.ouichesPattern.matcher(content); while (matcher.find()) { diff --git a/app/src/main/java/app/fedilab/android/drawers/BaseStatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/BaseStatusListAdapter.java index 6b42a2434..f4106d6f3 100644 --- a/app/src/main/java/app/fedilab/android/drawers/BaseStatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/BaseStatusListAdapter.java @@ -2131,6 +2131,15 @@ public abstract class BaseStatusListAdapter extends RecyclerView.Adapter { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_LIBREDDIT, set_libreddit.isChecked()); + editor.apply(); + if (set_libreddit.isChecked()) { + set_libreddit_host.setVisibility(View.VISIBLE); + } else { + set_libreddit_host.setVisibility(View.GONE); + } + }); + if (libreddit) { + set_libreddit_host.setVisibility(View.VISIBLE); + } else { + set_libreddit_host.setVisibility(View.GONE); + } + + String libredditHost = sharedpreferences.getString(Helper.SET_LIBREDDIT_HOST, null); + if (libredditHost != null) { + set_libreddit_host.setText(libredditHost); + } + set_libreddit_host.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.SET_LIBREDDIT_HOST, s.toString().toLowerCase().trim()); + } else { + editor.putString(Helper.SET_LIBREDDIT_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 0286f2310..34c05d66c 100644 --- a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java @@ -450,6 +450,10 @@ public class BaseHelper { public static final String SET_BIBLIOGRAM_HOST = "set_bibliogram_host"; public static final String DEFAULT_BIBLIOGRAM_HOST = "bibliogram.art"; + public static final String SET_LIBREDDIT = "set_libreddit"; + public static final String SET_LIBREDDIT_HOST = "set_libreddit_host"; + public static final String DEFAULT_LIBREDDIT_HOST = "libredd.it"; + 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"; @@ -531,6 +535,7 @@ public class BaseHelper { public static final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)"); public static final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)"); public static final Pattern bibliogramPattern = Pattern.compile("(m\\.|www\\.)?instagram.com(/p/[\\w-/]+)"); + 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+&@#/%=~_|]"); //Default values diff --git a/app/src/main/res/layout/fragment_settings_privacy.xml b/app/src/main/res/layout/fragment_settings_privacy.xml index b2cc7b203..2290a9b88 100644 --- a/app/src/main/res/layout/fragment_settings_privacy.xml +++ b/app/src/main/res/layout/fragment_settings_privacy.xml @@ -178,6 +178,51 @@ android:ellipsize="end" android:hint="@string/set_bibliogram_host" android:inputType="textWebEditText" /> + + + + + + + + + + + + + + + + Bibliogram is an open source alternative Instagram front-end focused on privacy. Enter your custom host or leave blank for using bibliogram.art + Replace Reddit with Libreddit + Libreddit is an open source alternative Reddit front-end focused on privacy. + Enter your custom host or leave blank for using libredd.it + 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\" Notifications will be delayed every 30 seconds. That will allow to drain less battery.