groups filters whitelist

This commit is contained in:
gdlbo
2022-08-22 03:31:44 +03:00
parent de4d283f75
commit 657d038d9c
5 changed files with 170 additions and 7 deletions
@@ -1,13 +1,11 @@
package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.foaf.FoafBase.getLastSeen;
import static ru.vtosters.lite.foaf.FoafBase.getBypassedOnlineInfo;
import static ru.vtosters.lite.hooks.OnlineFormatterHook.onlineHookProfiles;
import static ru.vtosters.lite.hooks.DateHook.getLocale;
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
import static ru.vtosters.lite.proxy.ProxyUtils.getStatic;
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
import static ru.vtosters.lite.utils.Base64Utils.decode;
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCaption;
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCopyright;
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.isBadNews;
@@ -437,6 +435,30 @@ public class JsonInjectors {
return false;
}
public static Boolean isWhitelistedFilters(JSONObject list) throws JSONException {
var id = String.valueOf(list.optInt("owner_id"));
if (id.equals("0")) {
id = String.valueOf(list.optInt("source_id"));
}
var whitelist = AndroidUtils.getDefaultPrefs().getStringSet("whitelisted_filters_groups", Collections.synchronizedSet(new LinkedHashSet<>()));
return whitelist.contains(id);
}
public static Boolean isWhitelistedAd(JSONObject list) throws JSONException {
var id = String.valueOf(list.optInt("owner_id"));
if (id.equals("0")) {
id = String.valueOf(list.optInt("source_id"));
}
var whitelist = AndroidUtils.getDefaultPrefs().getStringSet("whitelisted_ad_groups", Collections.synchronizedSet(new LinkedHashSet<>()));
return whitelist.contains(id);
}
public static JSONArray newsfeedlist(JSONArray items) throws JSONException {
var selectedItems = getDefaultPrefs().getString("news_feed_selected_items", "");
var filtersSet = getDefaultPrefs().getStringSet("news_feed_items_set", null);
@@ -482,10 +504,20 @@ public class JsonInjectors {
var list = items.optJSONObject(j);
var type = list.optString("type");
if (isWhitelistedAd(list)) {
newItems.put(list);
continue;
}
if (isAds(list, type)) {
continue;
}
if (isWhitelistedFilters(list)) {
newItems.put(list);
continue;
}
if (authorsrecomm() && (type.equals("authors_rec")
|| type.startsWith("recommended_") && (type.endsWith("audios")
|| type.endsWith("artists")
@@ -1,6 +1,7 @@
package ru.vtosters.lite.hooks;
import static java.lang.Long.MAX_VALUE;
import static ru.vtosters.lite.utils.AndroidUtils.*;
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCaption;
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCopyright;
@@ -23,14 +24,20 @@ import static ru.vtosters.lite.utils.Preferences.milkshake;
import static ru.vtosters.lite.utils.Preferences.vkme;
import com.vk.core.preference.Preference;
import com.vtosters.lite.api.ExtendedCommunityProfile;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import ru.vtosters.lite.utils.AccountManagerUtils;
import ru.vtosters.lite.utils.AndroidUtils;
public class NewsfeedHook {
public static boolean injectFilters(JSONObject obj) throws JSONException {
if (getBoolValue("newadblock", true)) return true;
@@ -102,18 +109,57 @@ public class NewsfeedHook {
return params.toArray(new String[0]);
}
public static boolean isWhitelistedFilter(ExtendedCommunityProfile eup) {
return getDefaultPrefs().getStringSet("whitelisted_filters_groups", Collections.synchronizedSet(new LinkedHashSet<>())).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
}
public static boolean isWhitelistedAd(ExtendedCommunityProfile eup) {
return getDefaultPrefs().getStringSet("whitelisted_ad_groups", Collections.synchronizedSet(new LinkedHashSet<>())).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
}
public static void setWhitelistedFilter(ExtendedCommunityProfile eup, boolean needWhitelist) {
var mutableAdsSet = Collections.synchronizedSet(new LinkedHashSet<String>());
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
mutableAdsSet.addAll(getDefaultPrefs().getStringSet("whitelisted_filters_groups", mutableAdsSet));
if (needWhitelist) {
mutableAdsSet.add(id);
} else {
mutableAdsSet.remove(id);
}
getDefaultPrefs().edit().putStringSet("whitelisted_filters_groups", mutableAdsSet).apply();
}
public static void setWhitelistedAd(ExtendedCommunityProfile eup, boolean needWhitelist) {
var mutableAdsSet = Collections.synchronizedSet(new LinkedHashSet<String>());
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
mutableAdsSet.addAll(getDefaultPrefs().getStringSet("whitelisted_ad_groups", mutableAdsSet));
if (needWhitelist) {
mutableAdsSet.add(id);
} else {
mutableAdsSet.remove(id);
}
getDefaultPrefs().edit().putStringSet("whitelisted_ad_groups", mutableAdsSet).apply();
}
public static void adsParams(HashSet<String> hashSet) {
if (ads() || adsslider()) {
if (ads()) {
hashSet.add("ads_disabled");
if (milkshake()) {
return;
}
hashSet.add("ads_app_slider");
return;
}
hashSet.add("ads_app");
hashSet.add("ads_site");
hashSet.add("ads_post");
hashSet.add("ads_app_slider");
if (adsslider()) {
hashSet.add("ads_app_slider");
}
hashSet.add("ads_site_slider");
hashSet.add("ads_app_video");
hashSet.add("ads_post_pretty_cards");
@@ -1,9 +1,14 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.utils.AndroidUtils.edit;
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
import static ru.vtosters.lite.utils.AndroidUtils.getString;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import static ru.vtosters.lite.utils.Preferences.copyright_post;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import android.content.Context;
import android.content.Intent;
@@ -12,6 +17,7 @@ import android.text.TextUtils;
import androidx.preference.Preference;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.navigation.Navigator;
import com.vk.newsfeed.NewsfeedSettingsFragment;
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
@@ -34,6 +40,20 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
findPreference("spamfilters").setSummary(count(getPrefsValue("spamfilters")));
findPreference("sourcenamefilter").setSummary(count(getPrefsValue("sourcenamefilter")));
findPreference("linkfilter").setSummary(count(getPrefsValue("linkfilter")));
findPreference("whitelisted_ad_groups").setSummary(countSet("whitelisted_ad_groups"));
findPreference("whitelisted_filters_groups").setSummary(countSet("whitelisted_filters_groups"));
findPreference("whitelisted_ad_groups").setOnPreferenceClickListener(preference -> {
remdialog("whitelisted_ad_groups", getContext());
return true;
});
findPreference("whitelisted_filters_groups").setOnPreferenceClickListener(preference -> {
remdialog("whitelisted_filters_groups", getContext());
return true;
});
findPreference("newsfeedlistmanager").setOnPreferenceClickListener(preference -> {
NewsfeedListManager.callEditorPopup(getActivity());
return true;
@@ -59,6 +79,36 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
}
}
private void remdialog(String key, Context context) {
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context);
builder.setTitle("Внимание!");
builder.setMessage("Вы действительно хотите удалить все элементы из списка?");
builder.setCancelable(false);
builder.setPositiveButton("Да", (dialogInterface, i) -> edit().remove(key).apply());
builder.setNegativeButton("Отмена", (dialogInterface, i) -> dialogInterface.dismiss());
builder.show();
sendToast("Все элементы списка удалены");
}
private String countSet(String key) {
var set = getDefaultPrefs().getStringSet(key, null);
StringBuilder str = new StringBuilder();
if (set != null) {
for (var s : set) {
str.append(s).append(", ");
}
}
var count = str.toString().split(", ").length;
if (count < 1 || (str.length() == 0)) {
return AndroidUtils.getString("feed_no_elements");
} else {
return String.format(AndroidUtils.getString("feed_elements_count"), count);
}
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
findPreference("cringecopyright").setEnabled(!copyright_post());
@@ -1,6 +1,7 @@
package ru.vtosters.lite.ui.vkui;
import static ru.vtosters.lite.foaf.FoafBase.loadAndShow;
import static ru.vtosters.lite.hooks.NewsfeedHook.setWhitelistedFilter;
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserID;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
@@ -24,6 +25,7 @@ import java.util.Objects;
import kotlin.Unit;
import kotlin.jvm.b.Functions;
import ru.vtosters.lite.hooks.NewsfeedHook;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.RenameTool;
@@ -91,6 +93,33 @@ public class MenuBuilder {
return Unit.a;
});
if (NewsfeedHook.isWhitelistedFilter(ecp)) {
addItem(builder, "Удалить из вайтлиста фильтров", () -> {
setWhitelistedFilter(ecp, false);
return Unit.a;
});
} else {
addItem(builder, "Добавить в вайтлист фильтров", () -> {
setWhitelistedFilter(ecp, true);
sendToast("Группа добавлена в вайтлист");
return Unit.a;
});
}
if (NewsfeedHook.isWhitelistedAd(ecp)) {
addItem(builder, "Удалить из вайтлиста рекламы", () -> {
NewsfeedHook.setWhitelistedAd(ecp, false);
sendToast("Группа удалена из вайтлиста");
return Unit.a;
});
} else {
addItem(builder, "Добавить в вайтлист рекламы", () -> {
NewsfeedHook.setWhitelistedAd(ecp, true);
sendToast("Группа добавлена в вайтлист");
return Unit.a;
});
}
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
+6
View File
@@ -21,6 +21,9 @@
android:key="adsstories"
android:summary="@string/feed_ads_stories_summary"
android:title="@string/vtldas" />
<Preference
android:key="whitelisted_ad_groups"
android:title="Вайтлист фильтров по рекламе" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/vtlfilters">
<Preference
@@ -74,6 +77,9 @@
android:key="copyright_post"
android:summary="@string/feed_ads_sources_summary"
android:title="@string/feed_ads_sources" />
<Preference
android:key="whitelisted_filters_groups"
android:title="Вайтлист фильтров по группам" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/vtlrecommend">
<com.vtosters.lite.ui.MaterialSwitchPreference