refactor newsfeed manager
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user