From e3c694d7c395f07ad8fe9c3e82d72cb9a09e0525 Mon Sep 17 00:00:00 2001
From: gdlbo <41114720+gdlbo@users.noreply.github.com>
Date: Mon, 13 Feb 2023 18:57:29 +0300
Subject: [PATCH] added group stories adblock
---
app/src/main/java/com/vtosters/lite/R.java | 103 +++++++++++-------
.../ru/vtosters/lite/hooks/AdBlockHook.java | 45 ++++++++
.../ru/vtosters/lite/hooks/NewsfeedHook.java | 23 ++++
.../lite/ui/fragments/FeedFragment.java | 6 +
.../ru/vtosters/lite/ui/vkui/MenuBuilder.java | 10 +-
smali/res/values-be/strings.xml | 2 +
smali/res/values-ru/strings.xml | 2 +
smali/res/values-uk/strings.xml | 2 +
smali/res/values/strings.xml | 6 +-
9 files changed, 153 insertions(+), 46 deletions(-)
diff --git a/app/src/main/java/com/vtosters/lite/R.java b/app/src/main/java/com/vtosters/lite/R.java
index cb6bacc0e..d39ab7a9a 100644
--- a/app/src/main/java/com/vtosters/lite/R.java
+++ b/app/src/main/java/com/vtosters/lite/R.java
@@ -4978,7 +4978,24 @@ public final class R {
public static final int roundmsg = 0x7f080bd3; // 2131233747
public static final int tgs_entry_background = 0x7f080bd4; // 2131233748
public static final int yandex = 0x7f080bd7; // 2131233751
- public static final int checker_background = 0x7f080bd8; // 2131233752
+ public static final int $splash__0 = 0x7f080bd8; // 2131233752
+ public static final int $splash__1 = 0x7f080bd9; // 2131233753
+ public static final int $splash__10 = 0x7f080bda; // 2131233754
+ public static final int $splash__11 = 0x7f080bdb; // 2131233755
+ public static final int $splash__12 = 0x7f080bdc; // 2131233756
+ public static final int $splash__13 = 0x7f080bdd; // 2131233757
+ public static final int $splash__14 = 0x7f080bde; // 2131233758
+ public static final int $splash__15 = 0x7f080bdf; // 2131233759
+ public static final int $splash__2 = 0x7f080be0; // 2131233760
+ public static final int $splash__3 = 0x7f080be1; // 2131233761
+ public static final int $splash__4 = 0x7f080be2; // 2131233762
+ public static final int $splash__5 = 0x7f080be3; // 2131233763
+ public static final int $splash__6 = 0x7f080be4; // 2131233764
+ public static final int $splash__7 = 0x7f080be5; // 2131233765
+ public static final int $splash__8 = 0x7f080be6; // 2131233766
+ public static final int $splash__9 = 0x7f080be7; // 2131233767
+ public static final int checker_background = 0x7f080be8; // 2131233768
+ public static final int splash = 0x7f080be9; // 2131233769
public static final int abc_control_background_material = 0x7f080032; // 2131230770
public static final int ic_action_close = 0x7f080322; // 2131231522
public static final int ic_camera_outline_28_new = 0x7f0803a0; // 2131231648
@@ -19530,47 +19547,49 @@ public final class R {
public static final int accent_color_summ = 0x7f12183b; // 2131892283
public static final int accent_color_title = 0x7f12183c; // 2131892284
public static final int accents = 0x7f12183d; // 2131892285
- public static final int amoledtheme_summ = 0x7f12183e; // 2131892286
- public static final int amoledtheme_title = 0x7f12183f; // 2131892287
- public static final int app_open_by_default_settings = 0x7f121840; // 2131892288
- public static final int audio_deleted_from_cache = 0x7f121841; // 2131892289
- public static final int blockminiapps_summ = 0x7f121842; // 2131892290
- public static final int blockminiapps_title = 0x7f121843; // 2131892291
- public static final int businessDisabler_title = 0x7f121844; // 2131892292
- public static final int by_choice = 0x7f121845; // 2131892293
- public static final int calls_not_available = 0x7f121846; // 2131892294
- public static final int cannot_write = 0x7f121847; // 2131892295
- public static final int change_accent_color = 0x7f121848; // 2131892296
- public static final int copydebuginfo_summ = 0x7f121849; // 2131892297
- public static final int copydebuginfo_title = 0x7f12184a; // 2131892298
- public static final int copyownlink_summ = 0x7f12184b; // 2131892299
- public static final int copyownlink_title = 0x7f12184c; // 2131892300
- public static final int crash_service_name = 0x7f12184d; // 2131892301
- public static final int current_theme = 0x7f12184e; // 2131892302
- public static final int custom_links_warning = 0x7f12184f; // 2131892303
- public static final int data_updated = 0x7f121850; // 2131892304
- public static final int device_info = 0x7f121851; // 2131892305
- public static final int device_info_copied = 0x7f121852; // 2131892306
- public static final int dialogstats = 0x7f121853; // 2131892307
- public static final int downloading_update = 0x7f121854; // 2131892308
- public static final int invalid_pack_link = 0x7f121855; // 2131892309
- public static final int maxquality_summ = 0x7f121856; // 2131892310
- public static final int maxquality_title = 0x7f121857; // 2131892311
- public static final int monettheme_summ = 0x7f121858; // 2131892312
- public static final int monettheme_title = 0x7f121859; // 2131892313
- public static final int newsfeed_notif_summ = 0x7f12185a; // 2131892314
- public static final int newsfeed_notif_title = 0x7f12185b; // 2131892315
- public static final int open_bot = 0x7f12185c; // 2131892316
- public static final int promotedstickers_title = 0x7f12185d; // 2131892317
- public static final int select_color = 0x7f12185e; // 2131892318
- public static final int select_palette = 0x7f12185f; // 2131892319
- public static final int sources = 0x7f121860; // 2131892320
- public static final int updateverifdata_summ = 0x7f121861; // 2131892321
- public static final int updateverifdata_title = 0x7f121862; // 2131892322
- public static final int useOldAppVer_summ = 0x7f121863; // 2131892323
- public static final int useOldAppVer_title = 0x7f121864; // 2131892324
- public static final int vkx_integration_enabled_info = 0x7f121865; // 2131892325
- public static final int writebar_ios_title = 0x7f121866; // 2131892326
+ public static final int add_to_ads_stories_whitelist = 0x7f12183e; // 2131892286
+ public static final int amoledtheme_summ = 0x7f12183f; // 2131892287
+ public static final int amoledtheme_title = 0x7f121840; // 2131892288
+ public static final int app_open_by_default_settings = 0x7f121841; // 2131892289
+ public static final int audio_deleted_from_cache = 0x7f121842; // 2131892290
+ public static final int blockminiapps_summ = 0x7f121843; // 2131892291
+ public static final int blockminiapps_title = 0x7f121844; // 2131892292
+ public static final int businessDisabler_title = 0x7f121845; // 2131892293
+ public static final int by_choice = 0x7f121846; // 2131892294
+ public static final int calls_not_available = 0x7f121847; // 2131892295
+ public static final int cannot_write = 0x7f121848; // 2131892296
+ public static final int change_accent_color = 0x7f121849; // 2131892297
+ public static final int copydebuginfo_summ = 0x7f12184a; // 2131892298
+ public static final int copydebuginfo_title = 0x7f12184b; // 2131892299
+ public static final int copyownlink_summ = 0x7f12184c; // 2131892300
+ public static final int copyownlink_title = 0x7f12184d; // 2131892301
+ public static final int crash_service_name = 0x7f12184e; // 2131892302
+ public static final int current_theme = 0x7f12184f; // 2131892303
+ public static final int custom_links_warning = 0x7f121850; // 2131892304
+ public static final int data_updated = 0x7f121851; // 2131892305
+ public static final int device_info = 0x7f121852; // 2131892306
+ public static final int device_info_copied = 0x7f121853; // 2131892307
+ public static final int dialogstats = 0x7f121854; // 2131892308
+ public static final int downloading_update = 0x7f121855; // 2131892309
+ public static final int invalid_pack_link = 0x7f121856; // 2131892310
+ public static final int maxquality_summ = 0x7f121857; // 2131892311
+ public static final int maxquality_title = 0x7f121858; // 2131892312
+ public static final int monettheme_summ = 0x7f121859; // 2131892313
+ public static final int monettheme_title = 0x7f12185a; // 2131892314
+ public static final int newsfeed_notif_summ = 0x7f12185b; // 2131892315
+ public static final int newsfeed_notif_title = 0x7f12185c; // 2131892316
+ public static final int open_bot = 0x7f12185d; // 2131892317
+ public static final int promotedstickers_title = 0x7f12185e; // 2131892318
+ public static final int remove_from_ads_stories_whitelist = 0x7f12185f; // 2131892319
+ public static final int select_color = 0x7f121860; // 2131892320
+ public static final int select_palette = 0x7f121861; // 2131892321
+ public static final int sources = 0x7f121862; // 2131892322
+ public static final int updateverifdata_summ = 0x7f121863; // 2131892323
+ public static final int updateverifdata_title = 0x7f121864; // 2131892324
+ public static final int useOldAppVer_summ = 0x7f121865; // 2131892325
+ public static final int useOldAppVer_title = 0x7f121866; // 2131892326
+ public static final int vkx_integration_enabled_info = 0x7f121867; // 2131892327
+ public static final int writebar_ios_title = 0x7f121868; // 2131892328
}
public static final class style {
diff --git a/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java b/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java
index 544a0a997..00096abd7 100644
--- a/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java
+++ b/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java
@@ -252,6 +252,30 @@ public class AdBlockHook {
return items;
}
+ private static void parseStoriesItem(JSONObject item) throws JSONException {
+ var stories = item.optJSONArray("stories");
+ var newStories = new JSONArray();
+
+ if (stories == null) return;
+
+ for (int j = 0; j < stories.length(); j++) {
+ var story = stories.optJSONObject(j);
+
+ if (!story.optBoolean("is_ads") && !story.optBoolean("is_promo")) {
+ if (isStoryNotAd(story)) {
+ newStories.put(story);
+ }
+ } else {
+ if (dev()) Log.d("StoriesAds", "Fetched ad, owner id " + story.optString("owner_id") + ", caption " + story.optString("caption"));
+ }
+ }
+
+ item.put("stories", newStories);
+ }
+
+ private static Boolean isStoryNotAd(JSONObject json) {
+ return !getBoolValue("storiesGroupsAdBlock", false) || (json.has("link") ? isWhitelistedAdStories(json) : true);
+ }
public static JSONObject storiesads(JSONObject json, boolean isDeleteFix) throws JSONException {
if (!adsstories()) {
@@ -277,6 +301,16 @@ public class AdBlockHook {
}
}
+ var items = json.optJSONArray("items");
+ if (items != null) {
+ for (int i = 0; i < items.length(); i++) {
+ var item = items.optJSONObject(i);
+ if (item != null) {
+ parseStoriesItem(item);
+ }
+ }
+ }
+
return json;
}
@@ -340,6 +374,17 @@ public class AdBlockHook {
return whitelist.contains(id);
}
+ public static Boolean isWhitelistedAdStories(JSONObject list) {
+ var id = String.valueOf(list.optInt("owner_id"));
+
+ var whitelist = AndroidUtils.getDefaultPrefs().getStringSet(
+ "whitelisted_stories_ad",
+ Collections.emptySet()
+ );
+
+ return whitelist.contains(id);
+ }
+
public static Boolean hasMiniAppAds(JSONObject list) {
var attachments = list.optJSONArray("attachments");
diff --git a/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java b/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java
index a2ce9a9f9..d0fac6988 100644
--- a/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java
+++ b/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java
@@ -79,6 +79,13 @@ public class NewsfeedHook {
).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
}
+ public static boolean isWhitelistedAdStories(ExtendedCommunityProfile eup) {
+ return getDefaultPrefs().getStringSet(
+ "whitelisted_stories_ad",
+ Collections.emptySet()
+ ).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
+ }
+
public static void setWhitelistedFilter(ExtendedCommunityProfile eup, boolean needWhitelist) {
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
@@ -111,6 +118,22 @@ public class NewsfeedHook {
getDefaultPrefs().edit().putStringSet("whitelisted_ad_groups", mutableAdsSet).apply();
}
+ public static void setWhitelistedAdStories(ExtendedCommunityProfile eup, boolean needWhitelist) {
+ var id = String.valueOf(AccountManagerUtils.getUserID(eup));
+
+ var mutableAdsSet = new LinkedHashSet<>(getDefaultPrefs().getStringSet(
+ "whitelisted_stories_ad",
+ Collections.emptySet()));
+
+ if (needWhitelist) {
+ mutableAdsSet.add(id);
+ } else {
+ mutableAdsSet.remove(id);
+ }
+
+ getDefaultPrefs().edit().putStringSet("whitelisted_stories_ad", mutableAdsSet).apply();
+ }
+
public static void adsParams(HashSet hashSet) {
if (ads()) {
hashSet.add("ads_disabled");
diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java
index 6e810993f..97d7dd6d4 100644
--- a/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java
+++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java
@@ -64,6 +64,12 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
findPreference("whitelisted_ad_groups").setSummary(countSet("whitelisted_ad_groups"));
findPreference("whitelisted_filters_groups").setSummary(countSet("whitelisted_filters_groups"));
+ findPreference("whitelisted_stories_ad").setSummary(countSet("whitelisted_stories_ad"));
+
+ findPreference("whitelisted_stories_ad").setOnPreferenceClickListener(preference -> {
+ remdialog("whitelisted_stories_ad", getContext());
+ return true;
+ });
findPreference("whitelisted_ad_groups").setOnPreferenceClickListener(preference -> {
remdialog("whitelisted_ad_groups", getContext());
diff --git a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java
index 8eae5b7fb..7343b8cc7 100644
--- a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java
+++ b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java
@@ -1,8 +1,7 @@
package ru.vtosters.lite.ui.vkui;
import static ru.vtosters.lite.foaf.FoafBase.loadAndShow;
-import static ru.vtosters.lite.hooks.NewsfeedHook.setWhitelistedAd;
-import static ru.vtosters.lite.hooks.NewsfeedHook.setWhitelistedFilter;
+import static ru.vtosters.lite.hooks.NewsfeedHook.*;
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserID;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
@@ -85,6 +84,7 @@ public class MenuBuilder {
final Context ctx = ((View) apView.get(builder)).getContext();
final boolean isPageWhitelistedFilter = NewsfeedHook.isWhitelistedFilter(ecp);
final boolean isPageWhitelistedAds = NewsfeedHook.isWhitelistedAd(ecp);
+ final boolean isPageWhitelistedAdsStories = NewsfeedHook.isWhitelistedAdStories(ecp);
addItem(builder, AndroidUtils.getString(R.string.menu_copy_id), () -> {
copy(ctx, String.valueOf(getUserID(ecp)));
@@ -108,6 +108,12 @@ public class MenuBuilder {
return Unit.a;
});
+ addItem(builder, AndroidUtils.getString(isPageWhitelistedAdsStories ? R.string.remove_from_ads_stories_whitelist : R.string.add_to_ads_stories_whitelist), () -> {
+ setWhitelistedAdStories(ecp, !isPageWhitelistedAdsStories);
+ sendToast(AndroidUtils.getString(isPageWhitelistedAdsStories ? R.string.removed_from_whitelist_success : R.string.added_to_whitelist_success));
+ return Unit.a;
+ });
+
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
diff --git a/smali/res/values-be/strings.xml b/smali/res/values-be/strings.xml
index 787bb4300..9cfbe1c51 100644
--- a/smali/res/values-be/strings.xml
+++ b/smali/res/values-be/strings.xml
@@ -6093,6 +6093,8 @@ QR-код"
Выдаліць з вайтліста фільтраў
Дадаць у вайтліст рэкламы
Выдаліць з вайтліста рэкламы
+ Дадаць у вайтліст гісторый
+ Выдаліць з вайтліста гісторый
Група выдалена з вайтліста
Група дададзена ў вайтліст
Вайтліст рэкламы
diff --git a/smali/res/values-ru/strings.xml b/smali/res/values-ru/strings.xml
index ab4ed67fd..ec9e20db5 100644
--- a/smali/res/values-ru/strings.xml
+++ b/smali/res/values-ru/strings.xml
@@ -6185,6 +6185,8 @@
Удалить из вайтлиста фильтров
Добавить в вайтлист рекламы
Удалить из вайтлиста рекламы
+ Добавить в вайтлист историй
+ Удалить из вайтлиста историй
Группа удалена из вайтлиста
Группа добавлена в вайтлист
diff --git a/smali/res/values-uk/strings.xml b/smali/res/values-uk/strings.xml
index 726165df2..e0e6a6f88 100644
--- a/smali/res/values-uk/strings.xml
+++ b/smali/res/values-uk/strings.xml
@@ -6110,6 +6110,8 @@
Видалити з вайтліста фільтрів
Додати до вайтліста реклами
Видалити з вайтліста реклами
+ Додати до вайтліста історій
+ Видалити з вайтліста історій
Група видалена з вайтліста
Група додана до вайтліста
diff --git a/smali/res/values/strings.xml b/smali/res/values/strings.xml
index aeab3e01c..ab675f96f 100644
--- a/smali/res/values/strings.xml
+++ b/smali/res/values/strings.xml
@@ -6321,8 +6321,10 @@ May look like a fake leaving the online"
Add to filters whitelist
Remove from filters whitelist
- Add to ads whitelist
- Remove from ads whitelist
+ Add to stories whitelist
+ Remove from stories whitelist
+ Add to ads stories whitelist
+ Remove from ads stories whitelist
Group removed from whitelist
Group added to whitelist