refactor newsfeed manager

This commit is contained in:
Vologhat
2022-08-11 21:03:35 +03:00
parent 5c26dd8ea4
commit df3b374f3a
5 changed files with 79 additions and 57 deletions
@@ -2,6 +2,7 @@ package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.foaf.FoafBase.getLastSeen;
import static ru.vtosters.lite.hooks.DateHook.getLocale;
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;
@@ -17,11 +18,11 @@ import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import static ru.vtosters.lite.utils.Preferences.hasVerification;
import static ru.vtosters.lite.utils.Preferences.podcastcatalog;
import static ru.vtosters.lite.utils.Preferences.postsrecomm;
import static ru.vtosters.lite.utils.Preferences.preferences;
import static ru.vtosters.lite.utils.VTVerifications.isDeveloper;
import static ru.vtosters.lite.utils.VTVerifications.isPrometheus;
import static ru.vtosters.lite.utils.VTVerifications.isVerified;
import android.text.TextUtils;
import android.util.Log;
import com.vk.core.network.Network;
@@ -34,6 +35,8 @@ import org.json.JSONObject;
import java.io.IOException;
import java.text.ParseException;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Random;
@@ -372,19 +375,37 @@ public class JsonInjectors {
}
public static JSONArray newsfeedlist(JSONArray items) throws JSONException {
for (int j = 0; j < items.length(); j++) {
var list = items.optJSONObject(j);
var id = list.optString("id");
var title = list.optString("title");
var selectedItems = getDefaultPrefs().getString("news_feed_selected_items", "");
var filtersSet = getDefaultPrefs().getStringSet("news_feed_items_set", null);
var mutableFiltersSet = Collections.synchronizedSet(new LinkedHashSet<String>());
if (filtersSet != null)
mutableFiltersSet.addAll(filtersSet);
if (!id.equals("kpop") && !id.equals("foryou") && !id.equals("qazaqstan") && !id.equals("podcasts")) {
preferences.edit().putString("newsfeedlist_title_" + id, title).apply();
if (!getBoolValue("newsfeedlist_" + id, false)) {
Log.d("NewsfeedList", "Added list " + id + " to feed");
list.put("is_hidden", false).put("is_unavailable", false);
if (dev()) Log.d("NewsfeedListInj", "Unlocked " + id + " in newsfeed list");
}
synchronized (mutableFiltersSet) {
for (int i = 0; i < items.length(); i++) {
var item = items.optJSONObject(i);
if (item == null) continue;
var id = item.optString("id");
var title = item.optString("title");
if (TextUtils.isEmpty(id) || TextUtils.isEmpty(title)
// this items not working
|| id.equals("kpop") || id.equals("foryou")
|| id.equals("qazaqstan") || id.equals("podcasts"))
continue;
mutableFiltersSet.add(id + "|" + title);
var hide = selectedItems.contains(id);
Log.d("NewsfeedList", "Added list " + id + " to feed");
item.put("is_hidden", hide)
.put("is_unavailable", hide);
if (dev()) Log.d("NewsfeedListInj", "Unlocked " + id + " in newsfeed list");
}
getDefaultPrefs().edit().putStringSet("news_feed_items_set", mutableFiltersSet)
.apply();
}
return items;
@@ -1,70 +1,62 @@
package ru.vtosters.lite.ui.components;
import static ru.vtosters.lite.ui.vkui.VBListBuilder.VBListItem;
import static ru.vtosters.lite.ui.vkui.VBListBuilder.buildListOf;
import static ru.vtosters.lite.utils.AndroidUtils.edit;
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collections;
import java.util.LinkedHashSet;
import ru.vtosters.lite.ui.vkui.VBottomSheetBuilder;
public class NewsfeedListManager{
public static int hideitems = 0;
public class NewsfeedListManager {
public static void callEditorPopup(Activity activity){
List<VBListItem> list = new ArrayList<>();
public static void callEditorPopup(Activity activity) {
var selectedItems = getDefaultPrefs().getString("news_feed_selected_items", "");
var filtersSet = getDefaultPrefs().getStringSet("news_feed_items_set", Collections.synchronizedSet(new LinkedHashSet<>()));
var list = new ArrayList<VBListItem>();
for (Map.Entry<String, ?> entry : getDefaultPrefs().getAll().entrySet()) {
if (entry.getKey().startsWith("newsfeedlist_title_")) {
var boolname = entry.getKey().replace("newsfeedlist_title_", "newsfeedlist_");
var boolvalue = getBoolValue(boolname, false);
var title = entry.getValue().toString();
list.add(new VBListItem(boolname, title, boolvalue));
}
}
if (list.size() == 0) {
if (filtersSet.size() == 0) {
sendToast("Обновите ленту для получения списка доступных пунктов");
return;
}
synchronized (filtersSet) {
for (String item : filtersSet) {
var id = item.substring(0, item.indexOf("|"));
var title = item.substring(item.indexOf("|") + 1);
list.add(new VBListItem(id, title, selectedItems.contains(id)));
}
}
VBottomSheetBuilder.show(activity, new VBottomSheetBuilder.VBSContent(
"Выберите пункты для скрытия",
buildListOf(activity, list),
new VBottomSheetBuilder.VBSContent.VBSButton(
"Сохранить",
() -> {
for (VBListItem item : list) {
edit().putBoolean(item.id, item.checked).commit();
sendToast("Для применения изменений обновите ленту");
if (item.checked) {
hideitems++;
edit().putInt("newsfeedlistitems", hideitems).commit();
} else if (hideitems == 0) {
edit().putInt("newsfeedlistitems", hideitems).commit();
}
}
var newSelectedItems = "";
for (VBListItem item : list)
if (item.checked)
newSelectedItems += item.id + ",";
getDefaultPrefs().edit()
.putString("news_feed_selected_items", newSelectedItems)
.apply();
sendToast("Для применения изменений обновите ленту");
}
)
));
}
public static void resetHideItems(){
hideitems = 0;
for (Map.Entry<String, ?> entry : getDefaultPrefs().getAll().entrySet()) {
if (entry.getKey().startsWith("newsfeedlist_")) {
getDefaultPrefs().edit().remove(entry.getKey()).commit();
}
}
public static void resetHideItems() {
getDefaultPrefs().edit()
.putString("news_feed_selected_items", "")
.apply();
sendToast("Сброшены пункты для скрытия");
}
}
@@ -1,13 +1,14 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
import static ru.vtosters.lite.utils.Preferences.copyright_post;
import static ru.vtosters.lite.utils.Preferences.offline;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.preference.Preference;
@@ -36,7 +37,11 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
NewsfeedListManager.callEditorPopup(getActivity());
return true;
});
findPreference("newsfeedlistmanager").setSummary("Скрыто " + NewsfeedListManager.hideitems + " лент новостей");
var str = getDefaultPrefs().getString("news_feed_selected_items", "");
findPreference("newsfeedlistmanager").setSummary(
"Скрыто "
+ (!TextUtils.isEmpty(str) ? str.split(",").length : 0)
+ " лент новостей");
findPreference("newsfeedlistmanager_reset").setOnPreferenceClickListener(preference -> {
NewsfeedListManager.resetHideItems();
return true;