From 9a9a73e89af15ab0db416daca5119730ac050401 Mon Sep 17 00:00:00 2001
From: Vologhat <47892605+Vologhat@users.noreply.github.com>
Date: Thu, 11 Aug 2022 21:02:25 +0300
Subject: [PATCH] refactor newsfeed manager
---
README.md | 6 +-
.../ru/vtosters/lite/hooks/JsonInjectors.java | 45 ++++++++----
.../ui/components/NewsfeedListManager.java | 68 ++++++++-----------
.../lite/ui/fragments/FeedFragment.java | 9 ++-
smali/res/values/styles.xml | 8 +--
5 files changed, 79 insertions(+), 57 deletions(-)
diff --git a/README.md b/README.md
index ec1455629..86f19baf1 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,7 @@
* Округление чисел
* Сокращение постов **(Показать полностью)**
* Результаты опросов без участия
+ * Возможность указывать папку для загрузки фото/видео/музыки/всего
* Интеграция с LAST.FM (а также возможность скробблинга)
* Новый раздел музыки
* Возможность скачивать видео
@@ -90,6 +91,7 @@
* Возможность видеть онлайн пользователей, если у вас скрыт онлайн через VK Messenger
* Отключить уведомление о том, что вы сделали скриншот в беседе
* Отключение редиректа через away.php
+ * Отключение отправки метрики
* Внешний вид
* **Milkshake** тема (дизайн новых версий ВК)
* Название заголовков в докбаре
@@ -103,8 +105,10 @@
* Возможность отключить блок историй наверху ленты
* Возможность отключить боковую камеру в разделе «Новости»
* Возможность отключить блок «Что у вас нового?» в разделе «Новости»
- * Возможность менять раздел, который запускается при запуске
+ * Возможность показывать лайки у постов справа
+ * Возможность менять стартовый раздел при запуске приложения
* Анимации фрагментов
+ * Возможность изменять размер закругления картинок (аватарок и прочего)
* Возможность отключить редизайн видеопостов
* Возможность отключить блок миниаппов/VK Pay/Superapp
* Возможность отключить сокращение названий разделов в меню
diff --git a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java
index fa454b93d..f98d35db1 100644
--- a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java
+++ b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java
@@ -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());
+ 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;
diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java b/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java
index 63eb95a5e..0ef92837d 100644
--- a/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java
+++ b/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java
@@ -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 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();
- for (Map.Entry 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 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("Сброшены пункты для скрытия");
}
}
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 7e3643a4d..cbd749136 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
@@ -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;
diff --git a/smali/res/values/styles.xml b/smali/res/values/styles.xml
index 12b5ef973..a2d45b579 100644
--- a/smali/res/values/styles.xml
+++ b/smali/res/values/styles.xml
@@ -6359,8 +6359,8 @@
- @color/gold_400
- @color/white
- @color/gold_250
- - @color/black
- - @color/black
+ - @color/gray_900
+ - @color/gray_900
- @color/gray_600
- @color/gray_600
- @color/gray_800
@@ -6619,8 +6619,8 @@
- @color/gold_400
- @color/white
- @color/gold_250
- - @color/black
- - @color/black
+ - @color/gray_900
+ - @color/gray_900
- @color/gray_600
- @color/gray_600
- @color/gray_800