refactor newsfeed manager

This commit is contained in:
Vologhat
2022-08-11 21:03:35 +03:00
parent a6f52af5d1
commit 9a9a73e89a
5 changed files with 79 additions and 57 deletions
+5 -1
View File
@@ -66,6 +66,7 @@
* Округление чисел
* Сокращение постов **(Показать полностью)**
* Результаты опросов без участия
* Возможность указывать папку для загрузки фото/видео/музыки/всего
* Интеграция с <a href="https://www.last.fm/">LAST.FM</a> (а также возможность скробблинга)
* Новый раздел музыки
* Возможность скачивать видео
@@ -90,6 +91,7 @@
* Возможность видеть онлайн пользователей, если у вас скрыт онлайн через VK Messenger
* Отключить уведомление о том, что вы сделали скриншот в беседе
* Отключение редиректа через away.php
* Отключение отправки метрики
* Внешний вид
* **Milkshake** тема (дизайн новых версий ВК)
* Название заголовков в докбаре
@@ -103,8 +105,10 @@
* Возможность отключить блок историй наверху ленты
* Возможность отключить боковую камеру в разделе «Новости»
* Возможность отключить блок «Что у вас нового?» в разделе «Новости»
* Возможность менять раздел, который запускается при запуске
* Возможность показывать лайки у постов справа
* Возможность менять стартовый раздел при запуске приложения
* Анимации фрагментов
* Возможность изменять размер закругления картинок (аватарок и прочего)
* Возможность отключить редизайн видеопостов
* Возможность отключить блок миниаппов/VK Pay/Superapp
* Возможность отключить сокращение названий разделов в меню
@@ -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;
+4 -4
View File
@@ -6359,8 +6359,8 @@
<item name="im_bubble_gift_background_highlighted">@color/gold_400</item>
<item name="im_bubble_gift_text">@color/white</item>
<item name="im_bubble_gift_text_secondary">@color/gold_250</item>
<item name="im_bubble_incoming">@color/black</item>
<item name="im_bubble_incoming_alternate">@color/black</item>
<item name="im_bubble_incoming">@color/gray_900</item>
<item name="im_bubble_incoming_alternate">@color/gray_900</item>
<item name="im_bubble_incoming_alternate_highlighted">@color/gray_600</item>
<item name="im_bubble_incoming_highlighted">@color/gray_600</item>
<item name="im_bubble_outgoing">@color/gray_800</item>
@@ -6619,8 +6619,8 @@
<item name="im_bubble_gift_background_highlighted">@color/gold_400</item>
<item name="im_bubble_gift_text">@color/white</item>
<item name="im_bubble_gift_text_secondary">@color/gold_250</item>
<item name="im_bubble_incoming">@color/black</item>
<item name="im_bubble_incoming_alternate">@color/black</item>
<item name="im_bubble_incoming">@color/gray_900</item>
<item name="im_bubble_incoming_alternate">@color/gray_900</item>
<item name="im_bubble_incoming_alternate_highlighted">@color/gray_600</item>
<item name="im_bubble_incoming_highlighted">@color/gray_600</item>
<item name="im_bubble_outgoing">@color/gray_800</item>