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