Merge pull request #555 from iNotFlying/vtl-remaster && update from vtl-remaster branch

Remove dead VK code, update colors.xml
This commit is contained in:
aliveoutside
2022-08-01 19:09:53 +03:00
committed by GitHub
152 changed files with 2488 additions and 4959 deletions
+4
View File
@@ -4,11 +4,15 @@ on:
push:
branches:
- '*'
paths-ignore:
- '**.md'
pull_request:
types:
- opened
- synchronize
- reopened
paths-ignore:
- '**.md'
workflow_dispatch:
+147 -57
View File
@@ -1,99 +1,189 @@
# VTosters Lite
<p align="center">
<a href="https://vtosters.app/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.discordapp.com/attachments/918864618116481029/1002916719595106344/VT_Fill_Logo_Dark.svg">
<img src="https://cdn.discordapp.com/attachments/918864618116481029/1002916719381201036/VT_Fill_Logo_Light.svg">
</picture>
</a>
<br>
<br>
<a href="https://t.me/s/vtosters">
<img src="https://img.shields.io/badge/-Telegram-blue?style=for-the-badge&logo=telegram&color=2AABEE"/>
</a>
<a href="https://vk.com/vtosters_official">
<img src="https://img.shields.io/badge/-VK-blue?style=for-the-badge&logo=vk&color=0077FF"/>
</a>
<a href="https://discord.gg/j9CAt3uYXj">
<img src="https://img.shields.io/badge/-Discord-blue?style=for-the-badge&logo=discord&color=5865F2&logoColor=FFFFFF"/>
</a>
<br>
<a href="https://github.com/vtosters/lite/issues">
<img src="https://img.shields.io/github/issues/vtosters/lite?style=flat-square"/>
</a>
<a href="https://github.com/vtosters/lite/network/members">
<img src="https://img.shields.io/github/forks/vtosters/lite?style=flat-square"/>
</a>
<a href="https://github.com/vtosters/lite/stargazers">
<img src="https://img.shields.io/github/stars/vtosters/lite?style=flat-square"/>
</a>
</p>
ВТостерс Lite - это модифицированный клиент (декомпиляция) официального ВКонтакте основанный на версии 5.56.1 (4838)
**ВТостерс Lite** — это модифицированный клиент официального ВКонтакте, основанный на версии **5.56.1 (4838)**
О найденных багах сообщать в [issues](https://github.com/vtosters/lite/issues), просьба не плодить дубликаты, воспользуйтесь поиском перед созданием нового issue
* Вы можете предложить свои идеи/сообщить о багах в [Issues](https://github.com/vtosters/lite/issues)
Скачивать самые актуальные версии можно с [Actions](https://github.com/vtosters/lite/actions)
* Скачивать самые актуальные версии можно с [Actions](https://github.com/vtosters/lite/actions)
<sup><sub>(могут содержать баги)</sub></sup>
Стабильные сборки находятся в [Releases](https://github.com/vtosters/lite/releases)
* Стабильные сборки находятся в [Releases](https://github.com/vtosters/lite/releases)
Зеркало на нашем [Git](https://git.maki.su/gdlbo/lite)
Зеркало на нашем [<img src="https://git.maki.su/assets/img/logo.svg" align="center" width="20" height="20"/> Git](https://git.maki.su/gdlbo/lite)
Зеркало на [Github](https://github.com/vtosters/lite)
### Быстрая навигация
* [Функционал](#функционал)
* [Отладка приложения](#отладка-приложения)
* [Разработка](#разработка)
* [Всё необходимое для сборки и компиляции](#всё-необходимое-для-сборки-и-компиляции)
* [Необходимые зависимости](#необходимые-зависимости)
* [Linux/macOS](#linuxmacos)
* [Windows](#windows)
## Функционал
* Лента
* Блокировка рекламы в ленте
* Блокировка постов через фильтры
* Возможность отключить рекомендации от ВК
* Редактор докбара
* Редактор элементов Superapp
* Медиа контент
* Округление дат
* 1 января в 4:20
* 1 января в 4:20:00
* 1 января 2000 в 4:20:00
* Округление чисел
* Сокращение постов **(Показать полностью)**
* Результаты опросов без участия
* Интеграция с <a href="https://www.last.fm/">LAST.FM</a> (а также возможность скробблинга)
* Новый раздел музыки
* Возможность скачивать видео
* Возможность найти фотографию через поисковые системы
* Интеграция с <a href="https://vkx.app/">VK X</a>
* Сообщения
* Обои в сообщениях
* Возможность выключения кнопки записи голосовых сообщений
* Возможность скрыть блок рекомендаций в сообщениях
* Режим **VK Me**
* Возможность вернуть вкладку уведомлений
* Встроенный переводчик текста для сообщений
* Возможность выбрать язык перевода
* Автоматический перевод ваших сообщений на выбранный язык
* Альтернативный дизайн эмодзи меню
* Возможность использовать системные эмодзи
* Активность
* Возможность видеть удаленные сообщения
* Функционал, позволяющий оставаться в «оффлайне» (принудительный оффлайн/не отправлять статус онлайна и т.п.)
* Нечиталка/неписалка для ЛС/бесед/ботов/групп
* Возможность отключить информацию о том, что вы просмотрели историю/прослушали голосовое сообщение
* Возможность видеть онлайн пользователей, если у вас скрыт онлайн через VK Messenger
* Отключить уведомление о том, что вы сделали скриншот в беседе
* Отключение редиректа через away.php
* Внешний вид
* **Milkshake** тема (дизайн новых версий ВК)
* Название заголовков в докбаре
* Возможность использовать акцент для иконок
* Возможность отключить счётчики в докбаре
* Смена иконки приложения (содержит много уникальных иконок для донатеров)
* Возможность покрасить панель навигации, веб-страницы
* Telegram Стикеры
* Возможность загружать свои стикерпаки из Telegram во ВКонтакте
* Интерфейс
* Возможность отключить блок историй наверху ленты
* Возможность отключить боковую камеру в разделе «Новости»
* Возможность отключить блок «Что у вас нового?» в разделе «Новости»
* Возможность менять раздел, который запускается при запуске
* Анимации фрагментов
* Возможность отключить редизайн видеопостов
* Возможность отключить блок миниаппов/VK Pay/Superapp
* Возможность отключить сокращение названий разделов в меню
* Возможность скрыть блок рекомендаций друзей в разделе «Друзья»
* Возможность скрыть подписи в настройках
* Прокси
* Возможность использовать **HTTP/HTTPS/SOCKS** прокси, менять домены **API/OAuth/Static**
* Другое
* Очистка кеша приложения (**всё/стикеры/изображения/видео/сообщения/WebView**)
* Автоочистка кеша при достижении указанного вами значения (**100/500 MB, 1/2/5 GB**)
* Функционал для **дебага приложения/бэкап возможности/верификации VTosters**
А также:
* Галочки, которые видны только пользователям приложения **ВТостерс Lite** (подробнее тут: [vtosters.app](https://vtosters.app) ➝ Пожертвования)
* Оптимизация приложения VK (удаление ненужных библиотек, которые встроены в оригинальный VK)
И многое другое!
## Отладка приложения
Для отладки с помощью Android Studio необходимо пройти в `/smali/AndroidManifest.xml`
```
android:debuggable="false" -> android:debuggable="true"
```
Для отладки с помощью <a href="#"><img src="https://i.imgur.com/cPvvFDP.png" align="center" width="20" height="23"/></a> Android Studio необходимо пройти в `/smali/AndroidManifest.xml` и изменить значение `android:debuggable`:
Для дополнительной отладки ответов, доп логов и подмены данных для дебаг приложения необходимо включить **Режим разработчика**
```
Настройки -> О приложении -> Для разработчиков -> Режим разработчика
```
`android:debuggable="false"` ➝ `android:debuggable="true"`
Для просмотра трафика необходимо отключить функцию **SSL Pinning**
Настройки, необходимые для **отладки** вне Android Studio, находятся по этой ссылке: [vk.com/vt/debug](https://vk.com/vt/debug)
```
Настройки -> О приложении -> Для разработчиков -> SSL Pinning
```
* Для дополнительной отладки ответов и логов необходимо включить **[Режим разработчика]**
Для логгирования внутренних запросов к API необходимо включить функции **Логгирование API**
* Для просмотра SSL-трафика необходимо **отключить** функцию **[SSL Pinning]**
(Работает только при использовании внутреннего логгера!)
* Для логгирования внутренних запросов к API необходимо включить функцию **[Логгирование API]** <sup>(работает только при использовании внутреннего логгера!)</sup>
```
Настройки -> О приложении -> Для разработчиков -> Логгирование API
```
* Для использования внутреннего логгера необходимо включить функцию **[Запись логов в файл]**
Для использования внутреннего логгера необходимо включить функции **Запись логов в файл**
```
Настройки -> О приложении -> Для разработчиков -> Запись логов в файл
```
Сразу после нажатия на запись аппа начнет записывать **все действия** в файлы по пути
```
/VK/logs/com.vtosters.lite
```
При следующем открытии аппы она автоматически запакует эти файлы и отправит вам в **Документы** ВК
Сразу после нажатия на запись приложение начнет записывать **все ваши действия** по пути `/Download/VK/logs/com.vtosters.lite/`
Позже архив можно будет скачать и работать с файлами логов которые находятся в нем
При следующем открытии приложения оно автоматически сохранит логи и отправит вам в [**Документы** ВК](https://vk.com/docs), откуда вы можете скачать архив логов и работать с ними.
## Разработка
Для понимания декомпилированного кода требуется использовать **Dex to Java** декомпилятор [jadx](https://github.com/skylot/jadx) или же сторонние варианты как [Fernflower](https://github.com/fesh0r/fernflower)
Для понимания работы декомпилированного кода требуется использовать **Dex to Java** декомпилятор [jadx](https://github.com/skylot/jadx) или же сторонние варианты как [Fernflower](https://github.com/fesh0r/fernflower)
Рекомендуется установка **Android Debug Bridge** в систему ([Гайд как это сделать](https://technastic.com/system-wide-adb-fastboot-windows-10))
При нахождении решения каких-либо проблем ждем вас в [Pull Requests](https://github.com/vtosters/lite/pulls)
Для индексации декомпилированного кода в Studio используется [dex2jar](https://github.com/pxb1988/dex2jar)
* Рекомендуется установка **ADB** в систему ([гайд](https://technastic.com/system-wide-adb-fastboot-windows-10))
Сгенерированные библиотеки из дексов находятся в `/app/libs`
* Для индексации декомпилированного кода в Studio используется [dex2jar](https://github.com/pxb1988/dex2jar)
При чистой перекомпиляции дексов в jar может сломаться некоторая индексация файлов, исправляйте ручками что попадется (К примеру какие-то функции в дексах изменены с **private** на **public**)
Сгенерированные библиотеки из .dex файлов находятся в `/app/libs`
При чистой перекомпиляции .dex в .jar может сломаться некоторая индексация файлов, исправляйте ручками что попадется (К примеру какие-то функции в дексах изменены с **private** на **public**)
Для сборки декомпилированного кода и ресурсов используется [Apktool](https://github.com/iBotPeaches/Apktool)
А при нахождении решения каких-либо проблем ждем вас в [Pull Requests](https://github.com/vtosters/lite/pulls)
### Всё необходимое для сборки и компиляции
`Не меняйте packagename во избе­жа­ние проблем с приложением`
```diff
- Не меняйте имя пакета во избежание проблем с приложением
`Некоторые функции связанные с музыкой не будут работать в пересобранном приложении`
- Некоторые функции, связанные с музыкой не будут работать в пересобранном приложении
```
Весь декомпилированный код клиента находится в `/smali`
* Весь декомпилированный код клиента находится в `/smali`
Весь исходный код модификации находится в `/app`
* Весь исходный код модификации находится в `/app`
Все необходимые скрипты/жарники для компиляции APK, его подписывании и не только находятся в `/scripts`
* Все необходимые скрипты/.jar файлы для компиляции APK, его подписывании и не только находятся в `/scripts`
### Необходимые зависимости
Требуется установленная **Java** >11 версии
<a href="https://www.oracle.com/java/technologies/downloads/"><img src="https://i.imgur.com/z8ZN19a.png" align="center" width="20" height="23"/> **JDK**</a> >11 версии
Требуется установленная **Android Studio**
<a href="https://developer.android.com/studio"><img src="https://i.imgur.com/cPvvFDP.png" align="center" width="20" height="23"/> **Android Studio**</a>
### Linux/macOS
```
./build.sh
```
![](https://cdn.discordapp.com/attachments/762063967979175946/961657476317581393/unknown.png)
Для сборки используется файл `./build.sh`
<img src="https://i.imgur.com/8BMX8lG.png" width="550" height="368"/>
### Windows
```
build.bat
```
Для сборки используется файл `build.bat`
![](https://cdn.discordapp.com/attachments/762063967979175946/961682299366309928/unknown.png)
<img src="https://i.imgur.com/iZSUKJ6.png" width="550" height="368"/>
+1 -1
View File
@@ -73,7 +73,7 @@ android {
defaultConfig {
applicationId "ru.vtosters.lite.utils.lite"
minSdkVersion 24
minSdkVersion 21
targetSdkVersion 32
versionCode 1
versionName "1.0"
Binary file not shown.
@@ -1,6 +1,5 @@
package bruhcollective.itaysonlab.libvkx.client;
import static ru.vtosters.lite.music.Scrobbler.scrobbleTrack;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
@@ -16,23 +15,23 @@ import java.util.List;
import bruhcollective.itaysonlab.libvkx.ILibVkxService;
public class LibVKXClient{
public class LibVKXClient {
@SuppressLint("StaticFieldLeak")
private static LibVKXClientImpl impl;
public static LibVKXClientImpl getInstance(Context context){
public static LibVKXClientImpl getInstance(Context context) {
if (impl == null) {
impl = new LibVKXClientImpl(context);
}
return impl;
}
public static LibVKXClientImpl getInstance(){
public static LibVKXClientImpl getInstance() {
LibVKXClientImpl libVKXClientImpl = impl;
return libVKXClientImpl == null ? getInstance(getGlobalContext()) : libVKXClientImpl;
}
public static boolean isVkxInstalled(){
public static boolean isVkxInstalled() {
try {
getGlobalContext().getPackageManager().getPackageInfo("ua.itaysonlab.vkx", 0);
return true;
@@ -41,13 +40,11 @@ public class LibVKXClient{
}
} // VKX check
public static boolean isIntegrationEnabled(){
public static boolean isIntegrationEnabled() {
return getBoolValue("libvkx_integration", false) && isVkxInstalled();
}
public static boolean play(MusicTrack musicTrack, List<MusicTrack> list, MusicPlaybackLaunchContext playerRefer){
scrobbleTrack(musicTrack.h, musicTrack.C, musicTrack.f, musicTrack.y1());
public static boolean play(MusicTrack musicTrack, List<MusicTrack> list, MusicPlaybackLaunchContext playerRefer) {
if (!isIntegrationEnabled()) {
return false;
}
@@ -57,7 +54,7 @@ public class LibVKXClient{
return getInstance().runOnService(action);
}
public static void lambdaplay(List<MusicTrack> list, MusicTrack musicTrack, ILibVkxService iLibVkxService){
public static void lambdaplay(List<MusicTrack> list, MusicTrack musicTrack, ILibVkxService iLibVkxService) {
int indexOf = list.indexOf(musicTrack);
var ids = new ArrayList<String>();
for (var track : list) {
@@ -74,7 +71,7 @@ public class LibVKXClient{
}
}
private static String asId(MusicTrack musicTrack){
private static String asId(MusicTrack musicTrack) {
String str = musicTrack.e + "_" + musicTrack.d;
if (musicTrack.O == null || musicTrack.O.equals("")) {
return str;
@@ -0,0 +1,35 @@
package com.vk.api.gifts;
import android.content.Context;
import com.vk.api.base.ApiRequest;
import com.vk.dto.gift.CatalogedGift;
import org.json.JSONException;
import org.json.JSONObject;
public class GiftGetByStickerId extends ApiRequest<GiftGetByStickerId.a> {
public static class a {
public final int a;
public final CatalogedGift b;
public a(int i, CatalogedGift catalogedGift) {
this.a = i;
this.b = catalogedGift;
}
}
public GiftGetByStickerId(Context context, int i) {
super("execute.getGiftByStickerId");
b("sticker_id", i);
c("no_inapp", "0");
b("force_payment", 1);
}
@Override // com.vk.api.sdk.o.VKRequest
public GiftGetByStickerId.a a(JSONObject jSONObject) throws JSONException {
JSONObject jSONObject2 = jSONObject.getJSONObject("response");
return new a(jSONObject2.optInt("balance"),
new CatalogedGift(jSONObject2.getJSONObject("gift")));
}
}
@@ -0,0 +1,37 @@
package com.vk.im.ui.components.common;
public enum DialogAction {
OPEN_USER_PROFILE,
OPEN_GROUP_PROFILE,
CHAT_SETTINGS,
SEARCH,
ADD_CHAT_MEMBER,
CREATE_SHORTCUT,
PINNED_MSG_HIDE,
PINNED_MSG_SHOW,
PINNED_MSG_DETACH,
SHOW_ATTACHES,
NOTIFICATIONS_ON,
NOTIFICATIONS_OFF,
GROUP_RECEIVE_MSGS_ENABLE,
GROUP_RECEIVE_MSGS_DISABLE,
GROUP_RECEIVE_NOTIFY_DISABLE,
CHANNEL_INVITE_LINK,
CLEAR_HISTORY,
CLEAR_HISTORY_AND_LEAVE,
LEAVE,
LEAVE_CHANNEL,
RETURN,
RETURN_TO_CHANNEL,
MARK_AS_READ,
AUDIO_BTN_AUDIO_CALL,
AUDIO_BTN_VIDEO_CALL,
VIDEO_BTN_VIDEO_CALL,
VIDEO_BTN_AUDIO_CALL,
DNR_ON,
DNR_OFF,
DNT_ON,
DNT_OFF,
pinmsg,
unpinmsg,
}
@@ -0,0 +1,148 @@
package com.vk.im.ui.components.common;
import com.vk.core.extensions.CollectionExt;
import com.vk.core.network.TimeProvider;
import com.vk.im.engine.ImConfig;
import com.vk.im.engine.models.MemberType;
import com.vk.im.engine.models.Profile;
import com.vk.im.engine.models.ProfilesSimpleInfo;
import com.vk.im.engine.models.dialogs.ChatSettings;
import com.vk.im.engine.models.dialogs.Dialog;
import com.vk.im.engine.models.groups.Group;
import com.vk.im.engine.utils.DialogPermissionHelper;
import com.vk.im.ui.p.ImBridge7;
import java.util.ArrayList;
import java.util.List;
import ru.vtosters.lite.dnr.DNRInjector;
public final class DialogActionsHelper {
public static final DialogActionsHelper a = new DialogActionsHelper();
public final List<DialogAction> a(ImConfig imConfig, Dialog dialog, ProfilesSimpleInfo profilesSimpleInfo) {
if (dialog != null && profilesSimpleInfo != null) {
long b2 = TimeProvider.f.b();
ChatSettings z1 = dialog.z1();
boolean z = false;
boolean I1 = z1 != null && z1.I1();
ArrayList<DialogAction> arrayList = new ArrayList<>();
DNRInjector.inject(dialog, arrayList);
arrayList.add(DialogAction.SEARCH);
if (dialog.S1()) {
arrayList.add(DialogAction.SHOW_ATTACHES);
}
if (!I1 && !dialog.W1()) {
arrayList.add(DialogAction.CLEAR_HISTORY);
}
if (I1) {
arrayList.add(DialogAction.CHANNEL_INVITE_LINK);
}
if (dialog.K1() != null) {
CollectionExt.a(arrayList, DialogAction.PINNED_MSG_DETACH, !I1);
CollectionExt.a(arrayList, DialogAction.PINNED_MSG_SHOW, !dialog.L1());
CollectionExt.a(arrayList, DialogAction.PINNED_MSG_HIDE, dialog.L1());
}
if (dialog.a(MemberType.USER)) {
arrayList.add(DialogAction.OPEN_USER_PROFILE);
}
if (dialog.a(MemberType.GROUP)) {
arrayList.add(DialogAction.OPEN_GROUP_PROFILE);
Group group = profilesSimpleInfo.w1().get(dialog.I1());
if (group != null) {
if (group.v1()) {
arrayList.add(DialogAction.GROUP_RECEIVE_MSGS_DISABLE);
} else {
CollectionExt.a(arrayList, DialogAction.GROUP_RECEIVE_NOTIFY_DISABLE, group.w1());
CollectionExt.a(arrayList, DialogAction.GROUP_RECEIVE_MSGS_ENABLE, !group.w1());
}
}
}
if (dialog.W1()) {
DialogAction dialogAction = DialogAction.ADD_CHAT_MEMBER;
ChatSettings z12 = dialog.z1();
if (z12 != null) {
z = z12.y1();
}
CollectionExt.a(arrayList, dialogAction, z);
CollectionExt.a(arrayList, DialogAction.CHAT_SETTINGS, DialogPermissionHelper.a.a(dialog));
}
CollectionExt.a(arrayList, DialogAction.NOTIFICATIONS_ON, !dialog.b(b2));
CollectionExt.a(arrayList, DialogAction.NOTIFICATIONS_OFF, dialog.b(b2));
return arrayList;
}
return new ArrayList<>();
}
public final List<DialogAction> a(Dialog dialog, ProfilesSimpleInfo profilesSimpleInfo) {
long b2 = TimeProvider.f.b();
Profile profile = profilesSimpleInfo.get(dialog.getId());
if (!(profile instanceof Group)) {
profile = null;
}
Group group = (Group) profile;
ChatSettings z1 = dialog.z1();
ArrayList<DialogAction> arrayList = new ArrayList<>();
DNRInjector.inject(dialog, arrayList);
// if (dialog.hasUnread()) {
arrayList.add(DialogAction.MARK_AS_READ);
// }
if (!dialog.W1()) {
arrayList.add(DialogAction.CREATE_SHORTCUT);
arrayList.add(DialogAction.CLEAR_HISTORY);
CollectionExt.a(arrayList, DialogAction.NOTIFICATIONS_OFF, dialog.b(b2));
CollectionExt.a(arrayList, DialogAction.NOTIFICATIONS_ON, !dialog.b(b2));
}
if (dialog.a(MemberType.GROUP) && group != null) {
if (group.v1()) {
arrayList.add(DialogAction.GROUP_RECEIVE_MSGS_DISABLE);
} else {
CollectionExt.a(arrayList, DialogAction.GROUP_RECEIVE_NOTIFY_DISABLE, group.w1());
CollectionExt.a(arrayList, DialogAction.GROUP_RECEIVE_MSGS_ENABLE, !group.w1());
}
}
if (dialog.W1() && z1 != null) {
if (!z1.L1()) {
arrayList.add(DialogAction.CREATE_SHORTCUT);
CollectionExt.a(arrayList, DialogAction.NOTIFICATIONS_OFF, dialog.b(b2));
CollectionExt.a(arrayList, DialogAction.NOTIFICATIONS_ON, !dialog.b(b2));
}
CollectionExt.a(arrayList, DialogAction.CLEAR_HISTORY, z1.L1());
if (z1.I1()) {
CollectionExt.a(arrayList, DialogAction.LEAVE_CHANNEL, !z1.L1());
CollectionExt.a(arrayList, DialogAction.RETURN_TO_CHANNEL, z1.L1());
} else {
CollectionExt.a(arrayList, DialogAction.RETURN, z1.L1());
CollectionExt.a(arrayList, DialogAction.LEAVE, !z1.L1());
CollectionExt.a(arrayList, DialogAction.CLEAR_HISTORY_AND_LEAVE, !z1.L1());
}
}
return arrayList;
}
public final boolean a(Dialog dialog) {
if (dialog.V1() || !dialog.y1()) {
return false;
}
return !dialog.U1() || !ImBridge7.a().a();
}
}
@@ -0,0 +1,15 @@
package com.vk.im.ui.components.common;
public enum MsgAction {
RETRY,
REPLY,
FORWARD,
COPY,
EDIT,
DELETE,
SPAM,
PIN,
UNPIN,
TRANSLATE,
READTO
}
@@ -0,0 +1,43 @@
package com.vk.im.ui.components.common;
import com.vk.core.extensions.CollectionExt;
import com.vk.im.engine.ImConfig;
import com.vk.im.engine.ImEngine;
import com.vk.im.engine.models.dialogs.Dialog;
import com.vk.im.engine.models.messages.Msg;
import com.vk.im.engine.utils.MsgPermissionHelper;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public final class MsgActionHelper {
public static final MsgActionHelper a = new MsgActionHelper();
public final List<MsgAction> a(ImEngine imEngine, Dialog dialog, Collection<? extends Msg> collection) {
return a(imEngine != null ? imEngine.g() : null, dialog, collection);
}
public final List<MsgAction> a(ImConfig imConfig, Dialog dialog, Collection<? extends Msg> collection) {
if (imConfig != null && dialog != null && collection != null) {
MsgPermissionHelper.a aVar = new MsgPermissionHelper.a(imConfig, dialog, collection);
ArrayList<MsgAction> arrayList = new ArrayList<>();
CollectionExt.a(arrayList, MsgAction.RETRY, MsgPermissionHelper.b.g(aVar));
CollectionExt.a(arrayList, MsgAction.REPLY, MsgPermissionHelper.b.f(aVar));
CollectionExt.a(arrayList, MsgAction.FORWARD, MsgPermissionHelper.b.d(aVar));
CollectionExt.a(arrayList, MsgAction.COPY, MsgPermissionHelper.b.a(aVar));
CollectionExt.a(arrayList, MsgAction.EDIT, MsgPermissionHelper.b.c(aVar));
CollectionExt.a(arrayList, MsgAction.DELETE, MsgPermissionHelper.b.b(aVar));
CollectionExt.a(arrayList, MsgAction.SPAM, MsgPermissionHelper.b.h(aVar));
CollectionExt.a(arrayList, MsgAction.PIN, MsgPermissionHelper.b.e(aVar));
CollectionExt.a(arrayList, MsgAction.UNPIN, MsgPermissionHelper.b.i(aVar));
CollectionExt.a(arrayList, MsgAction.TRANSLATE, true);
CollectionExt.a(arrayList, MsgAction.READTO, true);
return arrayList;
}
return new ArrayList<>();
}
}
@@ -4,18 +4,37 @@ import static ru.vtosters.lite.dnr.DNRModule.hookDNR;
import static ru.vtosters.lite.dnr.DNRModule.hookDNT;
import static ru.vtosters.lite.dnr.DNRModule.isDnrEnabledFor;
import static ru.vtosters.lite.dnr.DNRModule.isDntEnabledFor;
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import android.content.Context;
import android.util.Log;
import com.vk.core.network.Network;
import com.vk.im.engine.models.dialogs.Dialog;
import com.vk.im.engine.models.messages.Msg;
import com.vk.im.engine.models.messages.MsgFromUser;
import com.vk.im.ui.components.common.DialogAction;
import com.vk.im.ui.components.common.MsgAction;
import com.vk.im.ui.components.viewcontrollers.popup.DelegateMsg;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import ru.vtosters.lite.ui.dialogs.Translate;
public class DNRInjector {
public static void inject(Dialog dialog, List<DialogAction> list) {
int peerId = dialog.getId();
list.add(DialogAction.valueOf("pinmsg"));
list.add(DialogAction.valueOf("unpinmsg"));
if (isDnrEnabledFor(peerId)) {
list.add(DialogAction.valueOf("DNR_OFF"));
} else {
@@ -34,6 +53,10 @@ public class DNRInjector {
hashMap.put(DialogAction.valueOf("DNR_OFF"), getIdentifier("DNR_OFF", "string"));
hashMap.put(DialogAction.valueOf("DNT_ON"), getIdentifier("DNT_ON", "string"));
hashMap.put(DialogAction.valueOf("DNT_OFF"), getIdentifier("DNT_OFF", "string"));
hashMap.put(DialogAction.valueOf("pinmsg"), getIdentifier("pinmsg", "string"));
hashMap.put(DialogAction.valueOf("unpinmsg"), getIdentifier("unpinmsg", "string"));
return hashMap;
}
@@ -60,9 +83,75 @@ public class DNRInjector {
return true;
}
if (action == DialogAction.valueOf("pinmsg")) {
pinnedMsg(id, true);
return true;
} else if (action == DialogAction.valueOf("unpinmsg")) {
pinnedMsg(id, false);
return true;
}
return false;
}
public static LinkedHashMap<MsgAction, DelegateMsg.a.a> injectToHashMapMsg(LinkedHashMap<MsgAction, DelegateMsg.a.a> hashMap) {
hashMap.put(MsgAction.valueOf("TRANSLATE"), new DelegateMsg.a.a(getIdentifier("translator", "string")));
hashMap.put(MsgAction.valueOf("READTO"), new DelegateMsg.a.a(getIdentifier("readto", "string")));
return hashMap;
}
public static boolean onClickMsg(Context context, MsgAction action, Msg msg) {
var text = ((MsgFromUser) msg).f();
var fullMsg = ((MsgFromUser) msg).j2(); // text + reply
var reply = fullMsg.substring(text.length() + 1);
if (action == MsgAction.valueOf("READTO")) {
DNRModule.hookReadStartMsgTo(msg);
return true;
}
var isTextExist = !text.isEmpty() && !text.equals(" ");
var isReplyExist = !reply.isEmpty() && !reply.equals(" ");
if (action == MsgAction.valueOf("TRANSLATE")) {
if (isTextExist && isReplyExist) {
Translate.showTranslatedText(context, text + "\n\nРеплай:\n" + reply);
} else if (isReplyExist) {
Translate.showTranslatedText(context, "Реплай:\n" + reply);
} else if (isTextExist) {
Translate.showTranslatedText(context, text);
} else {
sendToast("Нет текста для перевода");
}
}
return false;
}
public static void pinnedMsg(int dialogid, boolean needToBePinned) {
Thread thread = new Thread(() -> {
try {
var request = new Request.a()
.b("https://api.vk.com/method/" + (needToBePinned ? "messages.pinConversation" : "messages.unpinConversation") + "?peer_id=" + dialogid + "&access_token=" + getUserToken() + "&v=5.119")
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
.a();
try {
var response = new OkHttpClient().a(request).execute().a().g();
Log.d("Pins", response);
} catch (IOException e) {
Log.e("Pins", "Error while pinning message", e);
}
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
sendToast("Диалог успешно " + (needToBePinned ? "закреплен" : "откреплен"));
}
public static void setDnr(Dialog dialog, boolean value) {
hookDNR(dialog.getId());
}
@@ -4,8 +4,11 @@ import static ru.vtosters.lite.net.Request.makeRequest;
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
import static ru.vtosters.lite.utils.ProxyUtils.getApi;
import android.util.Log;
import com.vk.im.engine.commands.messages.SetUserActivityCmd;
import com.vk.im.engine.models.dialogs.Dialog;
import com.vk.im.engine.models.messages.Msg;
import java.util.List;
@@ -54,6 +57,12 @@ public class DNRModule {
});
}
public static void hookReadStartMsgTo(Msg dialog) {
Log.d("DNR", "hookReadStartMsgTo: " + dialog.C1() + " " + dialog.v1());
makeRequest("https://" + getApi() + "/method/messages.markAsRead?start_message_id=" + dialog.C1() + "&peer_id=" + dialog.v1() + "&v=5.119&access_token=" + getUserToken(), response -> {
});
}
public static void hookDNR(int peerId) {
mDoNotReadDBHelper.setEnabledForPeerId(peerId, !mDoNotReadDBHelper.isEnabledForPeerId(peerId));
}
@@ -2,6 +2,7 @@ package ru.vtosters.lite.foaf;
import static android.widget.Toast.LENGTH_SHORT;
import static android.widget.Toast.makeText;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.getString;
import static ru.vtosters.lite.utils.ProxyUtils.apiproxy;
@@ -100,7 +101,7 @@ public class FoafBase {
a2.setMessage(getString("foafid") + " " + i + getString("foafregdate") + " " + normalHumanDate + getString("foafdate") + " " + daysPassedFromFoafDate(normalHumanDate)).setPositiveButton(17039370, null).create().show();
} catch (Exception e) {
e.printStackTrace();
makeText(context, getString("foaferr"), LENGTH_SHORT).show();
makeText(getGlobalContext(), getString("foaferr"), LENGTH_SHORT).show();
}
}
@@ -0,0 +1,39 @@
package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import android.util.Log;
import java.util.Random;
public class DeviceInfoHook{
public static String getDeviceInfo(String input) {
Log.d("DeviceInfoHook", "getDeviceInfo: " + input);
if (getBoolValue("hideDeviceInfo", true)) return "";
return input;
}
public static String getDeviceId(String input) {
Log.d("DeviceInfoHook", "getDeviceId: " + input);
Log.d("DeviceInfoHook", "getDeviceId shuffled: " + shuffle(input));
if (getBoolValue("hideDeviceInfo", true)) return shuffle(input);
return input;
}
public static String shuffle(String string) {
StringBuilder sb = new StringBuilder(string.length());
double rnd;
for (char c: string.toCharArray()) {
rnd = Math.random();
if (rnd < 0.34)
sb.append(c);
else if (rnd < 0.67)
sb.insert(sb.length() / 2, c);
else
sb.insert(0, c);
sb.append(new Random().nextInt(10));
sb.deleteCharAt(0);
}
return sb.toString();
}
}
@@ -463,8 +463,7 @@ public class JsonInjectors {
oldItems = catalog.optJSONArray("sections");
}
if (oldItems != null) {
if (oldItems != null && oldItems.optJSONObject(0).optString("url").contains("general")) {
if (podcastcatalog()) {
var podcasts = fetchCatalogPodcast();
if (podcasts != null) {
@@ -0,0 +1,107 @@
package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.ui.dialogs.MessageSettings.argDialog;
import static ru.vtosters.lite.ui.dialogs.MessageSettings.bombCount;
import static ru.vtosters.lite.ui.dialogs.MessageSettings.isSilentEnabled;
import static ru.vtosters.lite.utils.Preferences.autoalltranslate;
import static ru.vtosters.lite.utils.Preferences.autotranslate;
import static ru.vtosters.lite.utils.Preferences.savemsgsett;
import android.text.TextUtils;
import android.view.View;
import com.vk.api.internal.MethodCall;
import ru.vtosters.lite.translators.BaseTranslator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
public class MessagesHook {
public static String injectOwnText(String oldText) {
if (!autotranslate() || TextUtils.isEmpty(oldText))
return oldText;
var instance = BaseTranslator.getInstance();
return replaceMentions(oldText, instance);
}
public static String injectOwnTextAll(String oldText) {
if (!autoalltranslate() || TextUtils.isEmpty(oldText)) {
return oldText;
}
var instance = BaseTranslator.getInstance();
return replaceMentions(oldText, instance);
}
public static String replaceMentions(String oldText, BaseTranslator instance) {
try {
var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])|(@[^\\s]+)").matcher(oldText);
var mentionsCount = 0;
var textBuff = new StringBuffer();
var mentions = new ArrayList<String>();
while (matcher.find()) {
mentions.add(matcher.group());
matcher.appendReplacement(textBuff, "vtl_mention" + mentionsCount + ""); ++mentionsCount;
}
matcher.appendTail(textBuff);
var translatedText = instance.getTranslation(textBuff.toString());
var matcherMentions = Pattern.compile("vtl_mention(\\d+)").matcher(translatedText);
var retTextBuff = new StringBuffer();
while (matcherMentions.find()) {
matcherMentions.appendReplacement(retTextBuff, mentions.get(
Integer.parseInt(matcherMentions.group(1))
));
}
matcherMentions.appendTail(retTextBuff);
return retTextBuff.toString();
} catch(Exception e) {
e.printStackTrace();
return instance.getTranslation(oldText);
}
}
public static void onLongClick(View view) {
view.setOnLongClickListener(v -> {
argDialog(v.getContext());
return true;
});
}
public static void injRequest(MethodCall.a req) {
var time = expireTime();
if (time > 0) {
req.a("expire_ttl", time);
if (!savemsgsett()) bombCount = "0";
}
if (isSilentEnabled) {
req.a("silent", 1);
if (!savemsgsett()) isSilentEnabled = false;
}
}
private static int expireTime() {
switch (bombCount) {
case "15s":
return 15;
case "1m":
return 60;
case "5m":
return 300;
case "1h":
return 3600;
case "24h":
return 86400;
default:
return 0;
}
}
}
@@ -3,6 +3,7 @@ package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
import android.annotation.SuppressLint;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
@@ -52,6 +53,7 @@ public class PhotoViewer {
return true;
}
@SuppressLint("UseCompatLoadingForDrawables")
public static void addMenuItems(AttachmentWithMedia attachment, ActionsPopup.b actionPopup, int i, boolean z) {
actionPopup.a(getIdentifier("search_photo_content", "string"),
ThemesUtils.isDarkTheme()
@@ -0,0 +1,67 @@
package ru.vtosters.lite.hooks;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.vk.newsfeed.holders.BaseFooterHolder;
import com.vtosters.lite.R;
import ru.vtosters.lite.utils.Preferences;
public class PostViewHook {
/**
* For displaying child elements with custom direction in rtl container we should remove their, set layout direction and add again */
private static void saveChildDirectionForRlt(ViewGroup container) {
var children = new View[container.getChildCount()];
for (int i = 0; i < container.getChildCount(); i++) {
var child = container.getChildAt(i);
child.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
children[i] = child;
}
container.removeAllViews();
for (View child : children) {
container.addView(child);
}
container.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
}
// res/layout/likes_panel.xml
public static void injectBaseFooterHolder(BaseFooterHolder baseFooterHolder) {
if (!Preferences.isLikesOnRightEnabled())
return;
try {
var container = (ViewGroup) ((RecyclerView.ViewHolder) baseFooterHolder).itemView;
saveChildDirectionForRlt((ViewGroup) container.getChildAt(1));
} catch (Exception e) {
e.printStackTrace();
}
}
// res/layout/photo_viewer_bottom.xml
public static void injectPhotoViewer(View container) {
if (!Preferences.isLikesOnRightEnabled())
return;
try {
var bottomPanel = (ViewGroup) container.findViewById(R.id.photo_viewer_bottom_panel);
saveChildDirectionForRlt(bottomPanel);
} catch (Exception e) {
e.printStackTrace();
}
}
// res/layout/video_bottom_view.xml
public static void injectVideoView(RelativeLayout container) {
if (!Preferences.isLikesOnRightEnabled())
return;
try {
var bottomBar = (ViewGroup) container.findViewById(R.id.bottom_bar);
saveChildDirectionForRlt(bottomBar);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,26 @@
package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.utils.Preferences.dev;
import android.util.Log;
import com.vk.api.internal.MethodCall;
import java.util.LinkedHashMap;
public class RequestDumper{
public static void addParams(MethodCall.a paramslist, String method, LinkedHashMap params, String apiver) {
if (method.contains("execute.getGiftByStickerId")) {
apiver = "5.187";
}
if (dev()) {
Log.d("RequestDumper", "Method: " + method);
Log.d("RequestDumper", "API version: " + apiver);
Log.d("RequestDumper", "Params: " + params);
}
paramslist.a(method);
paramslist.a(params);
paramslist.b(apiver);
}
}
@@ -5,7 +5,6 @@ import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import static ru.vtosters.lite.utils.Preferences.milkshake;
import static ru.vtosters.lite.utils.Preferences.superapp;
import static ru.vtosters.lite.utils.Preferences.useNewSettings;
import static ru.vtosters.lite.utils.Preferences.videonewcatalog;
import static ru.vtosters.lite.utils.Preferences.vkme;
@@ -34,6 +33,8 @@ import com.vtosters.lite.fragments.y2.VideosFragment;
import com.vtosters.lite.general.fragments.GamesFragment;
import com.vtosters.lite.general.fragments.PhotosFragment;
import ru.vtosters.lite.ui.fragments.VTSettings;
public class StartFragmentHook {
public static Class getStartFragment() {
if (vkme()) {
@@ -55,7 +56,7 @@ public class StartFragmentHook {
case "videos":
return videonewcatalog() ? VideoCatalogFragment.class : VideosFragment.class;
case "settings":
return useNewSettings();
return VTSettings.class;
case "apps":
return AppsFragment.class;
case "discover":
@@ -5,8 +5,10 @@ import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import static ru.vtosters.lite.utils.ThemesUtils.getAccentColor;
import static ru.vtosters.lite.utils.ThemesUtils.getAttrId;
import static ru.vtosters.lite.utils.ThemesUtils.getBackgroundContent;
import static ru.vtosters.lite.utils.ThemesUtils.getBackgroundPage;
import static ru.vtosters.lite.utils.ThemesUtils.getColorFromAttr;
import static ru.vtosters.lite.utils.ThemesUtils.getHeaderBackground;
import static ru.vtosters.lite.utils.ThemesUtils.getHeaderText;
import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr;
@@ -59,8 +61,13 @@ public class VKUIHook {
.replace("%header_text%", hex(getHeaderText()))
.replace("%accent%", hex(getAccentColor()))
.replace("%background_page%", hex(getBackgroundPage()))
.replace("%content_tint_background%", hex(getColorFromAttr(getAttrId("content_tint_background"))))
.replace("%button_primary_background%", hex(getColorFromAttr(getAttrId("button_primary_background"))))
.replace("%button_outline_foreground%", hex(getColorFromAttr(getAttrId("button_outline_foreground"))))
.replace("%button_outline_border%", hex(getColorFromAttr(getAttrId("button_outline_border"))))
.replace("%text_primary%", hex(getTextAttr()));
loadedCSSAmoled = load("vt_ui_oled.css");
isLoaded = true;
}
@@ -1,5 +1,5 @@
package ru.vtosters.lite.music;
import static java.lang.String.*;
import static java.lang.String.valueOf;
import static ru.vtosters.lite.utils.AndroidUtils.MD5;
import static ru.vtosters.lite.utils.AndroidUtils.edit;
@@ -9,6 +9,8 @@ import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import android.util.Log;
import com.vk.dto.music.MusicTrack;
import org.json.JSONException;
import org.json.JSONObject;
@@ -22,16 +24,15 @@ import ru.vtosters.lite.net.NetCallback;
import ru.vtosters.lite.net.NetClient;
import ru.vtosters.lite.net.NetRequest;
import ru.vtosters.lite.net.NetResponse;
import ru.vtosters.lite.utils.Preferences;
public class Scrobbler{
public class Scrobbler {
private static final String key = "5965d63402414776c54c266db0211746";
private static final String keysecret = "d982180eed13275bb948e41cf225f88f";
private static final String url = "https://ws.audioscrobbler.com/2.0/";
private static final NetClient client = new NetClient.Builder().build();
private static final ArrayList<String> scrobbled = new ArrayList<>();
public static void scrobbleTrack(long duration, String artist, String title, String uid){
public static void scrobbleTrack(long duration, String artist, String title, String uid) {
var string = getDefaultPrefs().getString("sessionKey", null);
var timestamp = System.currentTimeMillis() / 1000;
@@ -59,21 +60,35 @@ public class Scrobbler{
treeMap.put("api_sig", signMD5(treeMap));
treeMap.put("format", "json");
client.newCall(new NetRequest.Builder().url(url).post().params(treeMap).build()).enqueue(new NetCallback(){
client.newCall(new NetRequest.Builder().url(url).post().params(treeMap).build()).enqueue(new NetCallback() {
@Override
public void onFailure(NetCall call, IOException e){
public void onFailure(NetCall call, IOException e) {
Log.d("Scrobbler", "Error: " + e.getMessage());
}
@Override
public void onResponse(NetCall call, NetResponse response){
public void onResponse(NetCall call, NetResponse response) {
Log.d("Scrobbler", "Scrobbled: " + artist + " - " + title);
Log.d("Scrobbler", "Response scrobble: " + response.getDataString());
}
});
}
private static String signMD5(Map<String, String> map){
public static void grabMusicTrack(MusicTrack musictrack) {
var uid = musictrack.y1();
var artist = musictrack.C;
var title = musictrack.f;
var duration = musictrack.h;
if (uid.isEmpty() || artist == null || artist.isEmpty() || title == null || title.isEmpty() || duration == 0) {
Log.d("Scrobbler", "grabTrackInfo: " + "Empty track, info: " + artist + " - " + title + " - " + duration + " - " + uid);
return;
}
scrobbleTrack(duration, artist, title, uid);
}
private static String signMD5(Map<String, String> map) {
var sb = new StringBuilder();
for (Map.Entry<String, String> entry : map.entrySet()) {
@@ -86,7 +101,7 @@ public class Scrobbler{
return MD5(sb.toString());
}
public static void auth(String login, String pass){
public static void auth(String login, String pass) {
if (login == null || pass == null) {
sendToast("Логин или пароль не заданы");
return;
@@ -100,15 +115,15 @@ public class Scrobbler{
treeMap.put("api_sig", signMD5(treeMap));
treeMap.put("format", "json");
client.newCall(new NetRequest.Builder().url(url).post().params(treeMap).build()).enqueue(new NetCallback(){
client.newCall(new NetRequest.Builder().url(url).post().params(treeMap).build()).enqueue(new NetCallback() {
@Override
public void onFailure(NetCall call, IOException e){
public void onFailure(NetCall call, IOException e) {
Log.d("Scrobbler", "Auth failed", e);
sendToast("Ошибка входа");
}
@Override
public void onResponse(NetCall call, NetResponse response){
public void onResponse(NetCall call, NetResponse response) {
try {
var jSONObject = new JSONObject(response.getDataString());
sessionFetcher(jSONObject);
@@ -120,7 +135,7 @@ public class Scrobbler{
});
}
public static void sessionFetcher(JSONObject jsonObject) throws JSONException{
public static void sessionFetcher(JSONObject jsonObject) throws JSONException {
if (!jsonObject.has("session")) {
Log.d("Scrobbler", "Auth failed - no session");
return;
@@ -136,26 +151,26 @@ public class Scrobbler{
Log.d("Scrobbler", "Auth success as " + name + ", key " + key);
}
public static void logout(){
public static void logout() {
edit().remove("username").apply();
edit().remove("sessionKey").apply();
scrobbled.clear();
sendToast("Вы успешно вышли из учетной записи");
}
public static boolean needToBeScrobble(String uid){
public static boolean needToBeScrobble(String uid) {
return isLoggedIn() && isScrobblingEnabled() && !scrobbled.contains(uid);
}
public static boolean isLoggedIn(){
public static boolean isLoggedIn() {
return getDefaultPrefs().getString("sessionKey", null) != null;
}
public static boolean isScrobblingEnabled(){
public static boolean isScrobblingEnabled() {
return getPreferences().getBoolean("lastfm_enabled", false);
}
public static String getUserName(){
public static String getUserName() {
return getDefaultPrefs().getString("username", null);
}
}
@@ -3,8 +3,6 @@ package ru.vtosters.lite.net;
import android.util.Base64;
import android.util.Log;
import org.json.JSONException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -0,0 +1,54 @@
package ru.vtosters.lite.translators;
import static ru.vtosters.lite.utils.Preferences.preferences;
import androidx.annotation.NonNull;
import androidx.collection.LruCache;
import java.util.Locale;
import ru.vtosters.lite.utils.AndroidUtils;
public abstract class BaseTranslator {
private final LruCache<String, String> cache = new LruCache<>(200);
private static final int YANDEX = 0;
private static final int GOOGLE = 1;
private static final int DEEPL = 2;
@NonNull
public abstract String translate(String text, String tl);
@NonNull
public final String getTranslation(String text) {
var val = cache.get(text);
if (val != null)
return val;
var translation = translate(text, getToLanguage());
cache.put(text, translation);
return translation;
}
public static String getToLanguage() {
var lang = preferences.getString("lang_target", "system");
var systemLang = Locale.getDefault().getLanguage();
if (lang.isEmpty() || lang.equals(systemLang) || lang.equals("system"))
return systemLang;
return lang;
}
public static BaseTranslator getInstance() {
switch (AndroidUtils.getPreferences().getInt("translator", 0)) {
case YANDEX:
return YandexTranslator.getInstance();
case GOOGLE:
return GoogleTranslator.getInstance();
case DEEPL:
return DeepLTranslator.getInstance();
}
return null;
}
}
@@ -0,0 +1,134 @@
package ru.vtosters.lite.translators;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import org.json.JSONObject;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Pattern;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
public class DeepLTranslator extends BaseTranslator {
private static final OkHttpClient client = new OkHttpClient();
private static final Pattern pattern = Pattern.compile("[i]");
private static final String REQUEST_BODY_FORMAT = "{\n" +
" \"method\": \"LMT_handle_texts\",\n" +
" \"id\": %s,\n" +
" \"jsonrpc\": \"2.0\",\n" +
" \"params\": {\n" +
" \"splitting\": \"newlines\",\n" +
" \"texts\": [{\n" +
" \"requestAlternatives\": 0,\n" +
" \"text\": \"%s\"\n" +
" }],\n" +
" \"lang\": {\n" +
" \"target_lang\": \"%s\",\n" +
" \"source_lang_user_selected\": \"\"\n" +
" },\n" +
" \"commonJobParams\": {\n" +
" \"regionalVariant\": null,\n" +
" \"wasSpoken\": false,\n" +
" \"formality\": \"informal\"\n" +
" },\n" +
" \"timestamp\": %s\n" +
" }\n" +
"}";
private static DeepLTranslator instance;
public static DeepLTranslator getInstance() {
if (instance == null)
instance = new DeepLTranslator();
return instance;
}
@NonNull
@Override
public String translate(String text, String tl) {
try {
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
if (tl.contains("-"))
tl = tl.toUpperCase();
var i = 1;
while (pattern.matcher(text).find()) {
i++;
}
var id = new AtomicLong(ThreadLocalRandom.current().nextLong(Long.parseLong("10000000000")));
var requestBody = String.format(REQUEST_BODY_FORMAT,
id.incrementAndGet(),
text,
tl,
getTimestamp(i)
);
requestBody = (id.get() + 3) % 13 == 0 || (id.get() + 5) % 29 == 0
? requestBody.replace("hod\":\"", "hod\" : \"")
: requestBody.replace("hod\":\"", "hod\": \"");
String uuid = UUID.randomUUID().toString();
var request = new Request.a()
.b("https://www2.deepl.com/jsonrpc")
.a("referer", "https://www.deepl.com/")
.a("user-agent", "DeepL-Android/VersionName(name=1.0.1) Android 10 (aarch64)")
.a("x-app-os-name", "Android")
.a("x-app-os-version", "10")
.a("x-app-version", "1.0.1")
.a("x-app-build", "13")
.a("x-app-device", "Pixel 5")
.a("x-app-instance-id", uuid)
.a("accept-encoding", "gzip")
.a(RequestBody.a(MediaType.a("application/json; charset=utf-8"), requestBody.getBytes(StandardCharsets.UTF_8)))
.a();
var response = client.a(request).execute();
var payload = response.a().g();
Log.d("DeepL", response.toString());
Log.d("DeepL", payload);
if (!TextUtils.isEmpty(payload)) {
var json = new JSONObject(payload);
if (!json.has("result"))
return text;
var result = json.getJSONObject("result");
if (!result.has("texts"))
return text;
var sb = new StringBuilder();
var texts = result.getJSONArray("texts");
for (int j = 0; j < texts.length(); j++) {
var value = texts.getJSONObject(j).getString("text");
Log.d("DeepL", value);
sb.append(value);
}
return sb.toString();
}
return text;
} catch (Throwable e) {
Log.d("DeepL", e + "");
}
return text;
}
private static Long getTimestamp(int iNumber) {
var now = System.currentTimeMillis();
return Long.valueOf((((long) iNumber) + now) - (now % ((long) iNumber)));
}
}
@@ -0,0 +1,74 @@
package ru.vtosters.lite.translators;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import org.json.JSONObject;
import java.net.URLEncoder;
import okhttp3.OkHttpClient;
import okhttp3.Request;
public class GoogleTranslator extends BaseTranslator {
private static final OkHttpClient client = new OkHttpClient();
private static final String[] devices = new String[]{
"Linux; U; Android 10; Pixel 4",
"Linux; U; Android 10; Pixel 4 XL",
"Linux; U; Android 10; Pixel 4a",
"Linux; U; Android 10; Pixel 4a XL",
"Linux; U; Android 11; Pixel 4",
"Linux; U; Android 11; Pixel 4 XL",
"Linux; U; Android 11; Pixel 4a",
"Linux; U; Android 11; Pixel 4a XL",
"Linux; U; Android 11; Pixel 5",
"Linux; U; Android 11; Pixel 5a",
"Linux; U; Android 12; Pixel 4",
"Linux; U; Android 12; Pixel 4 XL",
"Linux; U; Android 12; Pixel 4a",
"Linux; U; Android 12; Pixel 4a XL",
"Linux; U; Android 12; Pixel 5",
"Linux; U; Android 12; Pixel 5a",
"Linux; U; Android 12; Pixel 6",
"Linux; U; Android 12; Pixel 6 Pro",
};
private static GoogleTranslator instance;
public static GoogleTranslator getInstance() {
if (instance == null)
instance = new GoogleTranslator();
return instance;
}
@NonNull
@Override
public String translate(String text, String tl) {
try {
var request = new Request.a()
.b("https://translate.googleapis.com/translate_a/single?dj=1" +
"&q=" + URLEncoder.encode(text, "UTF-8") +
"&sl=auto" +
"&tl=" + tl +
"&ie=UTF-8&oe=UTF-8&client=at&dt=t&otf=2")
.a("User-Agent",
"GoogleTranslate/6.28.0.05.421483610 (" + devices[(int) Math.round(Math.random() * (devices.length - 1))] + ")")
.a();
var payload = client.a(request).execute().a().g();
if (!TextUtils.isEmpty(payload)) {
var sb = new StringBuilder();
var object = new JSONObject(payload);
var array = object.getJSONArray("sentences");
for (int i = 0; i < array.length(); i++) {
sb.append(array.getJSONObject(i).getString("trans"));
}
return sb.toString();
}
} catch (Throwable e) {
e.printStackTrace();
}
return text;
}
}
@@ -0,0 +1,58 @@
package ru.vtosters.lite.translators;
import android.util.Log;
import androidx.annotation.NonNull;
import org.json.JSONObject;
import java.net.URLEncoder;
import java.util.UUID;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
public class YandexTranslator extends BaseTranslator {
private static final OkHttpClient client = new OkHttpClient();
private static final String uuid = UUID.randomUUID().toString().replace("-", "");
private static YandexTranslator instance;
public static YandexTranslator getInstance() {
if (instance == null)
instance = new YandexTranslator();
return instance;
}
@NonNull
@Override
public String translate(String text, String tl) {
try {
var request = new Request.a()
.b("https://translate.yandex.net/api/v1/tr.json/translate?&srv=android&id=" + uuid + "-0-0")
.a("User-Agent", "ru.yandex.translate/21.15.4.21402814 (Xiaomi Redmi K20 Pro; Android 11)")
.a(RequestBody.a(MediaType.a("application/x-www-form-urlencoded"),
"lang=" + tl + "&text=" + URLEncoder.encode(text, "UTF-8")))
.a();
var payload = client.a(request).execute().a().g();
var json = new JSONObject(payload);
if (!json.has("text") && json.has("message")) {
Log.d("YandexTranslator", json.getString("message"));
return text;
}
var array = json.getJSONArray("text");
var sb = new StringBuilder();
var length = array.length();
for (int i = 0; i < length; i++) {
sb.append(array.getString(i));
}
return sb.toString();
} catch (Throwable e) {
e.printStackTrace();
}
return text;
}
}
@@ -5,7 +5,6 @@ import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import static ru.vtosters.lite.utils.Preferences.milkshake;
import static ru.vtosters.lite.utils.Preferences.superapp;
import static ru.vtosters.lite.utils.Preferences.useNewSettings;
import static ru.vtosters.lite.utils.Preferences.videonewcatalog;
import static ru.vtosters.lite.utils.Preferences.vkme;
import static ru.vtosters.lite.utils.Preferences.vkme_notifs;
@@ -43,6 +42,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import ru.vtosters.lite.ui.fragments.VTSettings;
import ru.vtosters.lite.ui.items.DockBarTab;
import ru.vtosters.lite.utils.AndroidUtils;
@@ -261,7 +261,7 @@ public class DockBarEditorManager {
R.drawable.ic_settings_outline_28,
R.string.menu_settings,
R.id.menu_settings,
useNewSettings());
VTSettings.class);
}
}
}
@@ -0,0 +1,132 @@
package ru.vtosters.lite.ui.dialogs;
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.TypedValue;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.SwitchCompat;
import com.vk.core.dialogs.alert.VkAlertDialog;
import ru.vtosters.lite.utils.LayoutUtils;
public class MessageSettings {
public static Boolean isSilentEnabled = false;
public static String bombCount = "0";
@SuppressLint("SetTextI18n")
public static void argDialog(Context context) {
LinearLayout mContainer = new LinearLayout(context);
RadioGroup rg = new RadioGroup(context);
rg.setOrientation(LinearLayout.VERTICAL);
rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0);
RadioButton zero = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
RadioButton one = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
RadioButton two = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
RadioButton three = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
RadioButton four = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
RadioButton five = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
rg.addView(zero);
rg.addView(one);
rg.addView(two);
rg.addView(three);
rg.addView(four);
rg.addView(five);
zero.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
one.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
two.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
three.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
four.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
five.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
zero.setText("Отключить");
one.setText("15 секунд");
two.setText("1 минута");
three.setText("5 минут");
four.setText("1 час");
five.setText("24 часа");
zero.setTextColor(getTextAttr());
one.setTextColor(getTextAttr());
two.setTextColor(getTextAttr());
three.setTextColor(getTextAttr());
four.setTextColor(getTextAttr());
five.setTextColor(getTextAttr());
switch (bombCount) {
case "15s":
one.setChecked(true);
break;
case "1m":
two.setChecked(true);
break;
case "5m":
three.setChecked(true);
break;
case "1h":
four.setChecked(true);
break;
case "24h":
five.setChecked(true);
break;
default:
zero.setChecked(true);
break;
}
@SuppressLint("UseSwitchCompatOrMaterialCode")
var silentSwitch = new SwitchCompat(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_Switch));
silentSwitch.setText("Бесшумные сообщения");
silentSwitch.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
silentSwitch.setTextColor(getTextAttr());
silentSwitch.setChecked(isSilentEnabled);
silentSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
isSilentEnabled = isChecked;
});
silentSwitch.setPadding(dp2px(24f), dp2px(12f), dp2px(18f), dp2px(12f));
mContainer.setLayoutParams(LayoutUtils.createLinear(-1, -1));
mContainer.setOrientation(LinearLayout.VERTICAL);
mContainer.addView(rg, LayoutUtils.createLinear(-1, -2));
mContainer.addView(silentSwitch, LayoutUtils.createLinear(-1, -2));
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context);
builder.setTitle("Настройки отправки");
builder.setMessage("Выберите время исчезновения сообщения");
builder.setCancelable(true);
builder.setNegativeButton("Отмена", null);
builder.setView(mContainer);
builder.setPositiveButton("Применить", (dialog, which) -> {
var checked = rg.getCheckedRadioButtonId();
if (checked == zero.getId()) {
bombCount = "0";
} else if (checked == one.getId()) {
bombCount = "15s";
} else if (checked == two.getId()) {
bombCount = "1m";
} else if (checked == three.getId()) {
bombCount = "5m";
} else if (checked == four.getId()) {
bombCount = "1h";
} else if (checked == five.getId()) {
bombCount = "24h";
}
});
builder.show();
}
}
@@ -0,0 +1,44 @@
package ru.vtosters.lite.ui.dialogs;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.vk.core.dialogs.alert.VkAlertDialog;
import ru.vtosters.lite.translators.BaseTranslator;
public class Translate {
public static void showTranslatedText(Context context, String text) {
new Thread(() -> {
try {
var translation = BaseTranslator.getInstance().getTranslation(text);
new Handler(Looper.getMainLooper()).post(() -> {
showDialog(context, translation);
});
} catch (Exception e) {
Log.e("Translate", e + "");
}
}).start();
}
private static void showDialog(Context context, String text) {
VkAlertDialog.Builder alertDialog = new VkAlertDialog.Builder(context);
alertDialog.setTitle("Переводчик");
alertDialog.setMessage(text);
alertDialog.setPositiveButton("Закрыть", (dialog, which) -> {
dialog.cancel();
});
alertDialog.setNeutralButton("Скопировать", (dialog, which) -> {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text);
clipboard.setPrimaryClip(clip);
sendToast("Скопировано в буфер обмена");
});
var alert = alertDialog.create();
alert.show();
}
}
@@ -1,6 +1,8 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
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;
@@ -22,6 +24,13 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
private void prefs() {
findPreference("officialnewssett").setOnPreferenceClickListener(new openofficialsett());
findPreference("cringecopyright").setEnabled(!copyright_post());
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
findPreference("cringecopyright").setEnabled(!copyright_post());
return super.onPreferenceTreeClick(preference);
}
public class openofficialsett implements Preference.OnPreferenceClickListener {
@@ -20,6 +20,7 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
private void prefs() {
findPreference("stories").setOnPreferenceClickListener(new restart());
findPreference("swipe").setOnPreferenceClickListener(new restart());
findPreference("is_likes_on_right").setOnPreferenceClickListener(new restart());
}
public boolean restart(Preference preference) {
@@ -1,10 +1,12 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.music.Scrobbler.isLoggedIn;
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
import static ru.vtosters.lite.utils.AndroidUtils.edit;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer;
import static ru.vtosters.lite.utils.ThemesUtils.getAccentColor;
import static ru.vtosters.lite.utils.ThemesUtils.getAlertStyle;
@@ -15,6 +17,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.EditText;
@@ -25,10 +28,15 @@ import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.network.Network;
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
import java.io.IOException;
import java.util.Arrays;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import ru.vtosters.lite.downloaders.VideoDownloader;
import ru.vtosters.lite.music.Scrobbler;
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
@@ -107,6 +115,30 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment {
alert.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(getAccentColor());
}
public static void deleteVideoHistory() {
Thread thread = new Thread(() -> {
try {
var request = new Request.a()
.b("https://api.vk.com/method/" + "video.clearViewingHistoryRecords" + "?https=1" + "&access_token=" + getUserToken() + "&v=5.187")
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
.a();
try {
var response = new OkHttpClient().a(request).execute().a().g();
Log.d("VideoHistory", response);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
sendToast("История просмотра видео очищена");
}
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
@@ -116,6 +148,10 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment {
private void prefs() {
findPreference("download_video").setOnPreferenceClickListener(new MediaFragment.download());
findPreference("clearvideohistory").setOnPreferenceClickListener(preference -> {
deleteVideoHistory();
return true;
});
findPreference("dateformat").setOnPreferenceChangeListener(new MediaFragment.restart());
findPreference("lastfm_auth").setOnPreferenceClickListener(preference -> {
if (isLoggedIn()) {
@@ -1,17 +1,26 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer;
import static ru.vtosters.lite.utils.Preferences.autoalltranslate;
import static ru.vtosters.lite.utils.Preferences.offline;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.ListView;
import androidx.preference.Preference;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.navigation.Navigator;
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
import java.util.Arrays;
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
import ru.vtosters.lite.ui.wallpapers.WallpaperMenuFragment;
public class MessagesFragment extends MaterialPreferenceToolbarFragment {
@@ -27,6 +36,37 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment {
findPreference("vkme_notifs").setOnPreferenceClickListener(new MessagesFragment.restart());
findPreference("systememoji").setOnPreferenceClickListener(new MessagesFragment.restart());
findPreference("wallpapers").setOnPreferenceClickListener(new MessagesFragment.openwp());
findPreference("autotranslate").setEnabled(!autoalltranslate());
findPreference("lang_service").setOnPreferenceClickListener(preference -> {
var items = Arrays.asList(
new ImagineArrayAdapter.ImagineArrayAdapterItem(getIdentifier("ic_yandex_translate_icon", "drawable"), "Yandex Translate"),
new ImagineArrayAdapter.ImagineArrayAdapterItem(getIdentifier("ic_google_translate_logo", "drawable"), "Google Translate")
// new ImagineArrayAdapter.ImagineArrayAdapterItem(getIdentifier("ic_deepl_logo_icon", "drawable"), "DeepL")
);
var alert = new VkAlertDialog.Builder(getActivity())
.create();
var listView = (ListView) LayoutInflater.from(getContext()).inflate(com.vtosters.lite.R.layout.abc_select_dialog_material, null, false);
var adapter = new ImagineArrayAdapter(getContext(), items, i -> {
getPreferences().edit().putInt("translator", i).apply();
alert.dismiss();
});
adapter.setSelected(getPreferences().getInt("translator", 0));
listView.setAdapter(adapter);
alert.setView(listView);
alert.show();
return true;
});
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
findPreference("autotranslate").setEnabled(!autoalltranslate());
return super.onPreferenceTreeClick(preference);
}
public boolean restart(Preference preference) {
@@ -11,10 +11,8 @@ import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
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.CacheUtils.deleteCache;
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication;
import static ru.vtosters.lite.utils.ThemesUtils.getAccentColor;
import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr;
import android.annotation.SuppressLint;
@@ -22,7 +20,6 @@ import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
@@ -34,7 +31,6 @@ import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.preference.Preference;
@@ -43,7 +39,6 @@ import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.util.ToastUtils;
import com.vk.im.engine.ImEngine1;
import com.vk.im.engine.ImEngineExt;
import com.vk.im.engine.models.Sticker;
import com.vk.im.ui.providers.audiomsg.ImAudioMsgPlayerProvider;
import com.vk.im.ui.providers.audiomsg.PlayerActionSources;
import com.vk.imageloader.VKImageLoader;
@@ -58,7 +53,6 @@ import com.vtosters.lite.im.ImEngineProvider;
import java.io.IOException;
import b.h.g.m.FileUtils;
import ru.vtosters.lite.music.Scrobbler;
import ru.vtosters.lite.ui.activities.VKAdminTokenActivity;
import ru.vtosters.lite.ui.components.BackupManager;
import ru.vtosters.lite.utils.AndroidUtils;
@@ -102,7 +96,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
});
var pref = getDefaultPrefs().getString("autoclearcache", "Default");
switch(pref) {
switch (pref) {
case "Default":
findPreference("autoclearcache").setSummary("Не включено");
break;
@@ -228,47 +222,47 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
private void cacheCleanDialog() {
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(getContext());
builder.setTitle("Выберите что вы хотите очистить");
builder.setItems(new String[]{"Очистить весь кэш", "Очистить кеш стикеров", "Очистить кеш изображений", "Очистить кеш видео", "Очистить кеш сообщений", "Очистить кеш WebView" }, (dialog, which) -> {
switch(which) {
case 0: {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
new WebView(getActivity()).clearCache(true);
VKImageLoader.e();
ImEngineProvider.b().a();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
FileUtils.l();
Stickers.l.c();
ImEngineExt.a(ImEngine1.a());
AutoPlayCacheHolder.d.a();
MediaStorage.a();
deleteCache();
break;
}
case 1: {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
Stickers.l.c();
break;
}
case 2:
VKImageLoader.e();
ImEngineExt.a(ImEngine1.a());
break;
case 3:
AutoPlayCacheHolder.d.a();
MediaStorage.a();
break;
case 4:
ImEngineProvider.b().a();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
break;
case 5:
new WebView(getActivity()).clearCache(true);
break;
builder.setItems(new String[]{"Очистить весь кеш", "Очистить кеш стикеров", "Очистить кеш изображений", "Очистить кеш видео", "Очистить кеш сообщений", "Очистить кеш WebView"}, (dialog, which) -> {
switch (which) {
case 0: {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
new WebView(getActivity()).clearCache(true);
VKImageLoader.e();
ImEngineProvider.b().a();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
FileUtils.l();
Stickers.l.c();
ImEngineExt.a(ImEngine1.a());
AutoPlayCacheHolder.d.a();
MediaStorage.a();
deleteCache();
break;
}
case 1: {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
Stickers.l.c();
break;
}
case 2:
VKImageLoader.e();
ImEngineExt.a(ImEngine1.a());
break;
case 3:
AutoPlayCacheHolder.d.a();
MediaStorage.a();
break;
case 4:
ImEngineProvider.b().a();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
break;
case 5:
new WebView(getActivity()).clearCache(true);
break;
}
Toast.makeText(getContext(), "Кеш очищен", LENGTH_SHORT).show();
});
@@ -341,6 +335,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
return true;
}
}
public static class saveprefs implements Preference.OnPreferenceClickListener {
saveprefs() {
}
@@ -1,7 +1,5 @@
package ru.vtosters.lite.ui.fragments;
import static com.vk.bridges.AuthBridge.logout;
import static ru.vtosters.lite.ui.PreferencesUtil.addListPreferenceIcon;
import static ru.vtosters.lite.ui.PreferencesUtil.addMaterialSwitchPreference;
import static ru.vtosters.lite.ui.PreferencesUtil.addPreference;
import static ru.vtosters.lite.ui.PreferencesUtil.addPreferenceCategory;
@@ -17,8 +15,6 @@ import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
import static ru.vtosters.lite.utils.CacheUtils.humanReadableByteCountBin;
import static ru.vtosters.lite.utils.GmsUtils.isGmsInstalled;
import static ru.vtosters.lite.utils.ImageUtils.getDrawableFromUrl;
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication;
import static ru.vtosters.lite.utils.Preferences.DoNotUseOldIcons;
import static ru.vtosters.lite.utils.Preferences.ads;
import static ru.vtosters.lite.utils.Preferences.devmenu;
import static ru.vtosters.lite.utils.Preferences.disableSettingsSumms;
@@ -50,7 +46,9 @@ import com.vk.balance.BalanceFragment;
import com.vk.navigation.Navigator;
import com.vk.notifications.settings.NotificationsSettingsFragment;
import com.vk.webapp.fragments.PrivacyFragment;
import com.vtosters.lite.MainActivity;
import com.vtosters.lite.auth.VKAccountManager;
import com.vtosters.lite.auth.VKAuth;
import com.vtosters.lite.fragments.money.music.control.subscription.MusicSubscriptionControlFragment;
import com.vtosters.lite.fragments.n2.SettingsDebugFragment;
import com.vtosters.lite.fragments.w2.BlacklistFragment;
@@ -149,14 +147,22 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
this.addPreferencesFromResource(vtosterXml);
addPreferenceDrawable(this, "", getUsername(), hasVerification() ? AndroidUtils.getString("thanksfordonate") : AndroidUtils.getString("getdonate"), getDrawableFromUrl(getUserPhoto(), "ic_user_circle_outline_28", true, true), preference -> {
logout();
restartApplication();
try {
VKAuth.a("logout", false);
} catch (Exception ignored) { }
var intent = new Intent(getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent);
return false;
});
addPreferenceCategory(this, AndroidUtils.getString("vtsettdarktheme"));
addMaterialSwitchPreference(this, "isdark", AndroidUtils.getString("vtsettdarktheme"), "", !DoNotUseOldIcons() ? "ic_palette_24" : "ic_palette_outline_28", false, (preference, o) -> {
addMaterialSwitchPreference(this, "isdark", AndroidUtils.getString("vtsettdarktheme"), "", "ic_palette_outline_28", false, (preference, o) -> {
boolean value = (boolean) o;
if (!value) { // inverted
@@ -170,7 +176,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
if (Build.VERSION.SDK_INT >= 28 && false) { // TODO refactoring system theme
addMaterialSwitchPreference(this, "systemtheme", AndroidUtils.getString("appearance_theme_use_system"), AndroidUtils.getString("appearance_theme_use_system_summary"), !DoNotUseOldIcons() ? "ic_recent_24" : "ic_recent_outline_28", true, (preference, o) -> {
addMaterialSwitchPreference(this, "systemtheme", AndroidUtils.getString("appearance_theme_use_system"), AndroidUtils.getString("appearance_theme_use_system_summary"), "ic_recent_outline_28", true, (preference, o) -> {
boolean value = (boolean) o;
edit().putBoolean("systemtheme", value).commit();
@@ -191,7 +197,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
if (devmenu()) {
addPreferenceCategory(this, AndroidUtils.getString("sett_debug"));
addPreference(this, "", AndroidUtils.getString("sett_debug"), "", !DoNotUseOldIcons() ? "ic_bug_24" : "ic_bug_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("sett_debug"), "", "ic_bug_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(SettingsDebugFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -199,7 +205,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addMaterialSwitchPreference(this, "ssl", AndroidUtils.getString("debug_developer_force_ssl"), AndroidUtils.getString("debug_developer_force_ssl_summary"), !DoNotUseOldIcons() ? "ic_globe_20" : "ic_globe_outline_28", true, (preference, o) -> {
addMaterialSwitchPreference(this, "ssl", AndroidUtils.getString("debug_developer_force_ssl"), AndroidUtils.getString("debug_developer_force_ssl_summary"), "ic_globe_outline_28", true, (preference, o) -> {
boolean value = (boolean) o;
edit().putBoolean("ssl", value).commit();
return true;
@@ -208,7 +214,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
addPreferenceCategory(this, AndroidUtils.getString("vtsettaccount"));
addPreference(this, "", AndroidUtils.getString("vkconnect"), "", !DoNotUseOldIcons() ? "ic_tags_24" : "ic_user_circle_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vkconnect"), "", "ic_user_circle_outline_28", preference -> {
Context context = getContext();
VKUIwrapper.officalLinks("account");
Intent a2 = new Navigator(VKUIwrapper.class).b(context);
@@ -217,7 +223,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("privacy_settings"), "", !DoNotUseOldIcons() ? "ic_privacy_24" : "ic_privacy_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("privacy_settings"), "", "ic_privacy_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(PrivacyFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -225,7 +231,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("sett_account"), "", !DoNotUseOldIcons() ? "ic_user_24" : "ic_user_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("sett_account"), "", "ic_user_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(SettingsAccountFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -234,7 +240,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
if (isVKTester()) {
addPreference(this, "", AndroidUtils.getString("bugs"), "", !DoNotUseOldIcons() ? "ic_bug_24" : "ic_bug_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("bugs"), "", "ic_bug_outline_28", preference -> {
Context context = getContext();
VKUIwrapper.officalLinks("bugs");
Intent a2 = new Navigator(VKUIwrapper.class).b(context);
@@ -244,7 +250,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
}
addPreference(this, "", AndroidUtils.getString("vtssfs"), ssfs, !DoNotUseOldIcons() ? "ic_link_24" : "ic_link_circle_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtssfs"), ssfs, "ic_link_circle_outline_28", preference -> {
Context context = getContext();
VKUIwrapper.setLink(SSFSUtils.getSSFSLink());
Intent a2 = new Navigator(VKUIwrapper.class).b(context);
@@ -255,7 +261,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
addPreferenceCategory(this, AndroidUtils.getString("notification_settings"));
addPreference(this, "", AndroidUtils.getString("sett_general"), "", !DoNotUseOldIcons() ? "ic_settings_24" : "ic_settings_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("sett_general"), "", "ic_settings_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(SettingsGeneralFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -263,7 +269,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("blacklist"), "", !DoNotUseOldIcons() ? "ic_users_24" : "ic_users_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("blacklist"), "", "ic_users_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(BlacklistFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -271,7 +277,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("sett_notifications"), "", !DoNotUseOldIcons() ? "ic_notification_24" : "ic_menu_notification_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("sett_notifications"), "", "ic_menu_notification_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(NotificationsSettingsFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -280,7 +286,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
if (VKAccountManager.d().isMusicSubs()) {
addPreference(this, "", AndroidUtils.getString("subscription_music"), "", !DoNotUseOldIcons() ? "ic_music_24" : "ic_music_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("subscription_music"), "", "ic_music_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(MusicSubscriptionControlFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -289,7 +295,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
}
addPreference(this, "", AndroidUtils.getString("votes"), "", !DoNotUseOldIcons() ? "ic_coins_24" : "ic_coins_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("votes"), "", "ic_coins_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(BalanceFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -300,7 +306,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
addPreferenceCategory(this, AndroidUtils.getString("vtsettmod"));
if (!vkme()) {
addPreference(this, "", AndroidUtils.getString("vtlfeed"), feedsumm, !DoNotUseOldIcons() ? "ic_newsfeed_24" : "ic_newsfeed_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlfeed"), feedsumm, "ic_newsfeed_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(FeedFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -308,7 +314,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("dockbar_editor"), docksumm, !DoNotUseOldIcons() ? "ic_list_24" : "ic_list_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("dockbar_editor"), docksumm, "ic_list_outline_28", preference -> {
Context context = getContext();
Intent intent = new Navigator(DockBarEditorFragment.class).b(context);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -317,7 +323,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
if (milkshake() && superapp()) {
addPreference(this, "", "Редактор Superapp", superapp, "ic_explore_outline_28", (preference) -> {
addPreference(this, "", AndroidUtils.getString("superapp_editor"), superapp, "ic_services_outline_28", (preference) -> {
Context context = getContext();
Intent intent = new Navigator(SuperAppEditorFragment.class).b(context);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -326,7 +332,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
});
}
} else {
addPreference(this, "", "Внимание!", "Некоторые пункты настроек были скрыты из-за режима VK Me \n\nДля отключения режима перейдите в настройки Сообщений", !DoNotUseOldIcons() ? "ic_about_24" : "ic_about_outline_28", preference -> false);
addPreference(this, "", "Внимание!", "Некоторые пункты настроек были скрыты из-за режима VK Me \n\nДля отключения режима перейдите в настройки Сообщений", "ic_about_outline_28", preference -> false);
}
addPreference(this, "", AndroidUtils.getString("vtlmedia"), mediasumm, "ic_media_outline_28", preference -> {
@@ -337,7 +343,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtlmessages"), msgsumm, !DoNotUseOldIcons() ? "ic_message_24" : "ic_message_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlmessages"), msgsumm, "ic_message_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(MessagesFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -345,7 +351,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtlactivity"), activitysumm, !DoNotUseOldIcons() ? "ic_write_24" : "ic_write_outline_28_new_accent", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlactivity"), activitysumm, "ic_write_outline_28_new_accent", preference -> {
Context context = getContext();
Intent a2 = new Navigator(ActivityFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -353,7 +359,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtlthemes"), themessumm, !DoNotUseOldIcons() ? "ic_palette_24" : "ic_write_outline_24", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlthemes"), themessumm, "ic_write_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(ThemesFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -361,7 +367,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtltgs"), tgssumm, !DoNotUseOldIcons() ? "ic_telegram_24" : "ic_telegram_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtltgs"), tgssumm, "ic_telegram_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(StickersFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -369,7 +375,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtlinterface"), interfacesumm, !DoNotUseOldIcons() ? "ic_interface_24" : "ic_interface_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlinterface"), interfacesumm, "ic_interface_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(InterfaceFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -377,7 +383,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtlproxy"), proxysumm, !DoNotUseOldIcons() ? "ic_globe_20" : "ic_globe_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlproxy"), proxysumm, "ic_globe_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(ProxySettingsFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -385,7 +391,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("vtlother"), othersumm, !DoNotUseOldIcons() ? "ic_more_24" : "ic_more_horizontal_28", preference -> {
addPreference(this, "", AndroidUtils.getString("vtlother"), othersumm, "ic_more_horizontal_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(OtherFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -395,7 +401,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
addPreferenceCategory(this, AndroidUtils.getString("vtsettaboutmod"));
addPreference(this, "", AndroidUtils.getString("menu_about"), about, !DoNotUseOldIcons() ? "ic_about_24" : "ic_about_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("menu_about"), about, "ic_about_outline_28", preference -> {
Context context = getContext();
Intent a2 = new Navigator(AboutAppFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -403,17 +409,17 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
addPreference(this, "", AndroidUtils.getString("opencommit"), "", !DoNotUseOldIcons() ? "ic_link_24" : "ic_link_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("opencommit"), "", "ic_link_outline_28", preference -> {
getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse(getCommitLink())));
return false;
});
addPreference(this, "", AndroidUtils.getString("vtfaq"), AndroidUtils.getString("vtfaqsumm"), !DoNotUseOldIcons() ? "ic_help_24" : "ic_help_outline_24", preference -> {
addPreference(this, "", AndroidUtils.getString("vtfaq"), AndroidUtils.getString("vtfaqsumm"), "ic_help_outline_28", preference -> {
getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://t.me/s/vtosters_faq")));
return false;
});
addPreference(this, "", AndroidUtils.getString("reportbug"), AndroidUtils.getString("reportbugsumm"), !DoNotUseOldIcons() ? "ic_bug_24" : "ic_bug_outline_28", preference -> {
addPreference(this, "", AndroidUtils.getString("reportbug"), AndroidUtils.getString("reportbugsumm"), "ic_bug_outline_28", preference -> {
getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://github.com/vtosters/lite/issues")));
return false;
});
@@ -421,7 +427,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
if (isValidSignature()) {
addPreferenceCategory(this, AndroidUtils.getString("updates"));
addPreference(this, "", AndroidUtils.getString("checkforupdates"), "", "ic_download_outline_24", preference -> {
addPreference(this, "", AndroidUtils.getString("checkforupdates"), "", "ic_download_outline_28", preference -> {
OTADialog.checkUpdates(getActivity());
return false;
});
@@ -1,53 +1,36 @@
package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.AndroidUtils.edit;
import static ru.vtosters.lite.utils.AndroidUtils.getApplicationName;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
import static ru.vtosters.lite.utils.Preferences.VERSIONNAME;
import static ru.vtosters.lite.utils.Preferences.devmenu;
import static ru.vtosters.lite.utils.Preferences.isValidSignature;
import static ru.vtosters.lite.utils.Preferences.oldabout;
import android.content.Context;
import com.vk.about.Items;
import com.vk.about.Items1;
import com.vk.about.Items2;
import android.view.View;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;
public class About {
public static void injectAbout(List<Items2> list) {
list.clear();
list.add(new Items1());
if (!oldabout()) {
list.add(new Items(21, getIdentifier("opencommit", "string")));
list.add(new Items(8, getIdentifier("tgchannel", "string")));
list.add(new Items(9, getIdentifier("tgchat", "string")));
list.add(new Items(16, getIdentifier("vtfaq", "string")));
list.add(new Items(19, getIdentifier("vtsite", "string")));
list.add(new Items(20, getIdentifier("donate", "string")));
list.add(new Items(17, getIdentifier("vkgroup", "string")));
list.add(new Items(18, getIdentifier("sett_debug", "string")));
return;
}
list.add(new Items(0, getIdentifier("about_app_feedback", "string")));
list.add(new Items(1, getIdentifier("about_app_estimate", "string")));
list.add(new Items(2, getIdentifier("about_app_privacy", "string")));
list.add(new Items(5, getIdentifier("about_app_cookie", "string")));
list.add(new Items(3, getIdentifier("about_app_terms_to_use", "string")));
list.add(new Items(4, getIdentifier("about_app_license", "string")));
list.add(new Items(6, getIdentifier("about_app_data_protect", "string")));
list.add(new Items(8, getIdentifier("sett_debug", "string")));
}
public static String getBuildNumber() {
return getBuild(getGlobalContext(), "version.properties");
}
public static void injectToToolBar(View view) {
view.setOnLongClickListener(v -> {
if (devmenu()) {
sendToast("Меню для разработчиков уже активировано");
} else {
edit().putBoolean("devmenu", true).apply();
sendToast("Меню для разработчиков активировано");
}
return true;
});
}
public static String getCommitLink() {
return "https://git.maki.su/gdlbo/lite/commit/" + getBuild(getGlobalContext(), "version.properties"); // https://github.com/vtosters/lite/commit/ github repo
}
@@ -118,7 +118,7 @@ public class AndroidUtils {
Toast.makeText(getGlobalContext(), text, Toast.LENGTH_SHORT).show();
}
public static String MD5(String s){
public static String MD5(String s) {
try {
var messageDigest = MessageDigest.getInstance("MD5");
var sb = new StringBuilder();
@@ -126,7 +126,7 @@ public class AndroidUtils {
byte[] digest = messageDigest.digest();
for (byte b : digest) {
String hexString = Integer.toHexString(b & 255);
while(hexString.length() < 2) {
while (hexString.length() < 2) {
hexString = "0" + hexString;
}
sb.append(hexString);
@@ -44,7 +44,7 @@ public class CacheUtils {
size = IOUtils.getDirSize(getGlobalContext().getCacheDir());
if (size >= getSizeForDelete()) {
if (dev()) sendToast("Кэш очищен");
if (dev()) sendToast("Кеш очищен");
deleteCache();
size = 0;
}
@@ -1,8 +1,8 @@
package ru.vtosters.lite.utils;
import static android.text.TextUtils.isEmpty;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.Preferences.isEnableExternalOpening;
import static ru.vtosters.lite.utils.StringUtils.isEmpty;
import android.app.Activity;
import android.app.AlertDialog;
@@ -10,7 +10,6 @@ import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.setupFilters;
import static ru.vtosters.lite.utils.ProxyUtils.setProxy;
import static ru.vtosters.lite.utils.SignatureChecker.validateAppSignature;
import static ru.vtosters.lite.utils.ThemesUtils.isDarkTheme;
import static ru.vtosters.lite.utils.ThemesUtils.systemThemeChanger;
import static ru.vtosters.lite.utils.VTVerifications.isPrometheus;
import static ru.vtosters.lite.utils.VTVerifications.isVerified;
@@ -21,12 +20,9 @@ import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import com.vtosters.lite.data.Users;
import com.vtosters.lite.fragments.SettingsListFragment;
import java.security.NoSuchAlgorithmException;
import ru.vtosters.lite.ui.fragments.VTSettings;
public class Preferences {
public static SharedPreferences preferences = getGlobalContext().getSharedPreferences("com.vtosters.lite_preferences", Context.MODE_PRIVATE);
public static String VERSIONNAME = "Beta";
@@ -37,7 +33,6 @@ public class Preferences {
setProxy();
reloadMessagesList();
LifecycleUtils.registerActivities(application);
systemThemeChanger(null);
getInstance().autoCleaningCache();
} // VK Init
@@ -66,10 +61,6 @@ public class Preferences {
return getBoolValue("opusmodule", true);
}
public static boolean DoNotUseOldIcons() {
return true;
}
public static boolean systemtheme() {
return false; //getBoolValue("systemtheme", true) && VERSION.SDK_INT >= 28;
}
@@ -142,11 +133,6 @@ public class Preferences {
return getBoolValue("foaf", false);
}
public static Class useNewSettings() {
boolean bool = getBoolValue("useNewSettings", true);
return bool ? VTSettings.class : SettingsListFragment.class;
}
public static boolean VKUI_INJ() {
return getBoolValue("VKUI_INJ", true);
}
@@ -195,6 +181,10 @@ public class Preferences {
return getBoolValue("miniapps", true);
}
public static boolean savemsgsett() {
return getBoolValue("savemsgsett", false);
}
public static boolean friendsblock() {
return getBoolValue("friendsblock", false);
}
@@ -263,6 +253,15 @@ public class Preferences {
return getBoolValue("setoffline", false);
}
public static boolean autotranslate() {
if (autoalltranslate()) return true;
return getBoolValue("autotranslate", false);
}
public static boolean autoalltranslate() {
return getBoolValue("autoalltranslate", false);
}
public static boolean shortinfo() {
return getBoolValue("shortinfo", true);
}
@@ -349,6 +348,10 @@ public class Preferences {
return isPrometheus(AccountManagerUtils.getUserId());
}
public static boolean isLikesOnRightEnabled() {
return getBoolValue("is_likes_on_right", false);
}
public static long getSizeForDelete() {
switch (getPrefsValue("clearcache")) {
case "100mb":
@@ -53,9 +53,9 @@ public class ReflectionUtils {
public static <T> T getObjectField(Class<?> clz, String fieldName, Object instance) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = clz.getField(fieldName);
field = getField(clz, fieldName);
} catch (NoSuchFieldException e) {
field = clz.getDeclaredField(fieldName);
field = getDeclaredField(clz, fieldName);
}
return (T) field.get(instance);
}
@@ -76,9 +76,9 @@ public class ReflectionUtils {
public static void setObjectField(Class<?> clz, String fieldName, Object instance, Object value) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = clz.getField(fieldName);
field = getField(clz, fieldName);
} catch (NoSuchFieldException e) {
field = clz.getDeclaredField(fieldName);
field = getDeclaredField(clz, fieldName);
}
field.set(instance, value);
}
@@ -112,9 +112,9 @@ public class ReflectionUtils {
public static void setObjectFinalField(Class<?> clz, String fieldName, Object instance, Object value) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = clz.getField(fieldName);
field = getField(clz, fieldName);
} catch (NoSuchFieldException e) {
field = clz.getDeclaredField(fieldName);
field = getDeclaredField(clz, fieldName);
}
if (!Modifier.isFinal(field.getModifiers())) return;
@@ -143,9 +143,9 @@ public class ReflectionUtils {
public static void setObjectStaticField(Class<?> clz, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = clz.getField(fieldName);
field = getField(clz, fieldName);
} catch (NoSuchFieldException e) {
field = clz.getDeclaredField(fieldName);
field = getDeclaredField(clz, fieldName);
}
field.set(null, value);
}
@@ -166,9 +166,9 @@ public class ReflectionUtils {
public static void setObjectFinalStaticField(Class<?> clz, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = clz.getField(fieldName);
field = getField(clz, fieldName);
} catch (NoSuchFieldException e) {
field = clz.getDeclaredField(fieldName);
field = getDeclaredField(clz, fieldName);
}
if (!Modifier.isFinal(field.getModifiers())) return;
@@ -197,9 +197,9 @@ public class ReflectionUtils {
public static <T> T getObjectField(Class<?> clz, String fieldName) throws NoSuchFieldException, IllegalAccessException {
Field field;
try {
field = clz.getField(fieldName);
field = getField(clz, fieldName);
} catch (NoSuchFieldException e) {
field = clz.getDeclaredField(fieldName);
field = getDeclaredField(clz, fieldName);
}
return (T) field.get(null);
}
@@ -1,6 +1,5 @@
package ru.vtosters.lite.utils;
import static ru.vtosters.lite.ui.PreferencesUtil.getSTextColor;
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
import static ru.vtosters.lite.utils.AndroidUtils.getResources;
@@ -1,8 +0,0 @@
package ru.vtosters.lite.utils;
public class StringUtils {
public static boolean isEmpty(String str) {
return str == null || str.isEmpty();
}
}
+8 -8
View File
@@ -11,9 +11,9 @@ body[scheme=bright_light] {
--attach_picker_tab_active_background: %accent% !important;
--attach_picker_tab_active_text: %accent% !important;
--button_muted_foreground: %accent% !important;
--button_outline_border: %accent% !important;
--button_outline_foreground: %accent% !important;
--button_primary_background: %accent% !important;
--button_outline_border: %button_outline_border% !important;
--button_outline_foreground: %button_outline_foreground% !important;
--button_primary_background: %button_primary_background% !important;
--button_secondary_foreground: %accent% !important;
--button_tertiary_foreground: %accent% !important;
--cell_button_foreground: %accent% !important;
@@ -40,7 +40,7 @@ body[scheme=bright_light] {
/* backgrounds */
--background_content: %background_content% !important;
--background_page: %background_page% !important;
--content_tint_background: %background_page% !important;
--content_tint_background: %content_tint_background% !important;
--loader_background: %background_page% !important;
--header_background: %header_background% !important;
--header_background_before_blur: %header_background% !important;
@@ -62,9 +62,9 @@ body[scheme=space_gray] {
--attach_picker_tab_active_background: %accent% !important;
--attach_picker_tab_active_text: %accent% !important;
--button_muted_foreground: %accent% !important;
--button_outline_border: %accent% !important;
--button_outline_foreground: %accent% !important;
--button_primary_background: %accent% !important;
--button_outline_border: %button_outline_border% !important;
--button_outline_foreground: %button_outline_foreground% !important;
--button_primary_background: %button_primary_background% !important;
--button_secondary_foreground: %accent% !important;
--button_tertiary_foreground: %accent% !important;
--cell_button_foreground: %accent% !important;
@@ -90,7 +90,7 @@ body[scheme=space_gray] {
--dynamic_blue: %accent% !important;
--background_content: %background_content% !important;
--background_page: %background_page% !important;
--content_tint_background: %background_page% !important;
--content_tint_background: %content_tint_background% !important;
--loader_background: %background_page% !important;
--header_background: %header_background% !important;
--header_background_before_blur: %header_background% !important;
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.167,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.167,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="24.0dip"
android:height="24.0dip"
android:viewportWidth="24.0"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:duration="@integer/hide_password_duration"
android:interpolator="@android:interpolator/fast_out_slow_in"
android:propertyName="pathData"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:duration="@integer/hide_password_duration"
android:interpolator="@android:interpolator/fast_out_slow_in"
android:propertyName="trimPathEnd"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="24.0dip"
android:height="24.0dip"
android:viewportWidth="24.0"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:duration="@integer/show_password_duration"
android:interpolator="@android:interpolator/fast_out_linear_in"
android:propertyName="pathData"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:duration="@integer/show_password_duration"
android:interpolator="@android:interpolator/fast_out_linear_in"
android:propertyName="trimPathEnd"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="28.0dip"
android:height="28.0dip"
android:viewportWidth="28.0"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:ordering="together">
<objectAnimator
android:duration="167"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:ordering="together">
<objectAnimator
android:duration="133"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:ordering="together">
<objectAnimator
android:duration="133"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:ordering="together">
<objectAnimator
android:duration="1000"
-1
View File
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:drawable="@drawable/$avd_hide_password__0">
<target
android:name="eye_mask"
-1
View File
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:drawable="@drawable/$avd_show_password__0">
<target
android:name="eye_mask"
+12 -12
View File
@@ -3,16 +3,16 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M23.745,12.27C23.745,11.48 23.675,10.73 23.555,10L12.255,10L12.255,14.51L18.725,14.51C18.435,15.99 17.585,17.24 16.325,18.09L16.325,21.09L20.185,21.09C22.445,19 23.745,15.92 23.745,12.27Z"
android:fillColor="#4285F4"/>
<path
android:pathData="M12.255,24C15.495,24 18.205,22.92 20.185,21.09L16.325,18.09C15.245,18.81 13.875,19.25 12.255,19.25C9.125,19.25 6.475,17.14 5.525,14.29L1.545,14.29L1.545,17.38C3.515,21.3 7.565,24 12.255,24Z"
android:fillColor="#34A853"/>
<path
android:pathData="M5.525,14.29C5.275,13.57 5.145,12.8 5.145,12C5.145,11.2 5.285,10.43 5.525,9.71L5.525,6.62L1.545,6.62C0.725,8.24 0.255,10.06 0.255,12C0.255,13.94 0.725,15.76 1.545,17.38L5.525,14.29Z"
android:fillColor="#FBBC05"/>
<path
android:pathData="M12.255,4.75C14.025,4.75 15.605,5.36 16.855,6.55L20.275,3.13C18.205,1.19 15.495,0 12.255,0C7.565,0 3.515,2.7 1.545,6.62L5.525,9.71C6.475,6.86 9.125,4.75 12.255,4.75Z"
android:fillColor="#EA4335"/>
<path
android:fillColor="#4285F4"
android:pathData="M23.745,12.27C23.745,11.48 23.675,10.73 23.555,10L12.255,10L12.255,14.51L18.725,14.51C18.435,15.99 17.585,17.24 16.325,18.09L16.325,21.09L20.185,21.09C22.445,19 23.745,15.92 23.745,12.27Z" />
<path
android:fillColor="#34A853"
android:pathData="M12.255,24C15.495,24 18.205,22.92 20.185,21.09L16.325,18.09C15.245,18.81 13.875,19.25 12.255,19.25C9.125,19.25 6.475,17.14 5.525,14.29L1.545,14.29L1.545,17.38C3.515,21.3 7.565,24 12.255,24Z" />
<path
android:fillColor="#FBBC05"
android:pathData="M5.525,14.29C5.275,13.57 5.145,12.8 5.145,12C5.145,11.2 5.285,10.43 5.525,9.71L5.525,6.62L1.545,6.62C0.725,8.24 0.255,10.06 0.255,12C0.255,13.94 0.725,15.76 1.545,17.38L5.525,14.29Z" />
<path
android:fillColor="#EA4335"
android:pathData="M12.255,4.75C14.025,4.75 15.605,5.36 16.855,6.55L20.275,3.13C18.205,1.19 15.495,0 12.255,0C7.565,0 3.515,2.7 1.545,6.62L5.525,9.71C6.475,6.86 9.125,4.75 12.255,4.75Z" />
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="64"
android:viewportHeight="64">
<path
android:fillColor="#042B48"
android:pathData="M54.579,12.268l-20.375,-11.625c-1.375,-0.75 -3.125,-0.75 -4.5,-0l-20.375,11.625c-1.375,0.75 -2.25,2.25 -2.25,3.875l0,23.75c0,1.625 0.875,3.125 2.25,3.875l35.125,20.25l0,-14.375l10.125,-5.875c1.375,-0.75 2.25,-2.25 2.25,-3.875l0,-23.75C56.954,14.518 55.954,13.018 54.579,12.268zM28.829,38.393c0,2.375 -1.875,4.25 -4.25,4.25c-2.375,-0 -4.25,-1.875 -4.25,-4.25c0,-2.375 1.875,-4.25 4.25,-4.25c1.125,-0 2,0.375 2.75,1l7.5,-4.25c0.375,0.875 0.875,1.75 1.375,2.5l-7.5,4.25C28.829,37.893 28.829,38.143 28.829,38.393zM41.829,32.768c-2.375,-0 -4.25,-1.875 -4.25,-4.25c0,-0.25 0,-0.5 0.125,-0.75l-10.25,-5.875c-0.75,0.625 -1.75,1 -2.75,1c-2.375,-0 -4.25,-1.875 -4.25,-4.25c0,-2.375 1.875,-4.25 4.25,-4.25c2.375,-0 4.25,1.875 4.25,4.25c0,0.25 0,0.5 -0.125,0.75l10.25,5.875c0.75,-0.625 1.75,-1.125 2.875,-1.125c2.375,-0 4.25,1.875 4.25,4.25C46.079,30.768 44.204,32.768 41.829,32.768z" />
</vector>
@@ -0,0 +1,58 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="47.990383dp"
android:height="48dp"
android:viewportWidth="998.1"
android:viewportHeight="998.3">
<path
android:fillColor="#DBDBDB"
android:pathData="M931.7,998.3c36.5,0 66.4,-29.4 66.4,-65.4V265.8c0,-36 -29.9,-65.4 -66.4,-65.4H283.6l260.1,797.9h388z" />
<path
android:fillColor="#DCDCDC"
android:pathData="M931.7,230.4c9.7,0 18.9,3.8 25.8,10.6 6.8,6.7 10.6,15.5 10.6,24.8v667.1c0,9.3 -3.7,18.1 -10.6,24.8 -6.9,6.8 -16.1,10.6 -25.8,10.6H565.5L324.9,230.4h606.8m0,-30H283.6l260.1,797.9h388c36.5,0 66.4,-29.4 66.4,-65.4V265.8c0,-36 -29.9,-65.4 -66.4,-65.4z" />
<path
android:fillColor="#4352B8"
android:pathData="M482.3,809.8l61.4,188.5l170.7,-188.5z" />
<path
android:fillColor="#607988"
android:pathData="M936.1,476.1V437H747.6v-63.2h-61.2V437H566.1v39.1h239.4c-12.8,45.1 -41.1,87.7 -68.7,120.8 -48.9,-57.9 -49.1,-76.7 -49.1,-76.7h-50.8s2.1,28.2 70.7,108.6c-22.3,22.8 -39.2,36.3 -39.2,36.3l15.6,48.8s23.6,-20.3 53.1,-51.6c29.6,32.1 67.8,70.7 117.2,116.7l32.1,-32.1c-52.9,-48 -91.7,-86.1 -120.2,-116.7 38.2,-45.2 77,-102.1 85.2,-154.2H936v0.1z" />
<path
android:fillColor="#4285F4"
android:pathData="M66.4,0C29.9,0 0,29.9 0,66.5v677c0,36.5 29.9,66.4 66.4,66.4h648.1L454.4,0h-388z" />
<path android:pathData="M534.3,200.4h397.4c36.5,0 66.4,29.4 66.4,65.4V666L534.3,200.4z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="998.1"
android:endY="433.2"
android:startX="534.3"
android:startY="433.2"
android:type="linear">
<item
android:color="#33FFFFFF"
android:offset="0" />
<item
android:color="#05FFFFFF"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#EEEEEE"
android:pathData="M371.4,430.6c-2.5,30.3 -28.4,75.2 -91.1,75.2 -54.3,0 -98.3,-44.9 -98.3,-100.2s44,-100.2 98.3,-100.2c30.9,0 51.5,13.4 63.3,24.3l41.2,-39.6c-27.1,-25 -62.4,-40.6 -104.5,-40.6 -86.1,0 -156,69.9 -156,156s69.9,156 156,156c90.2,0 149.8,-63.3 149.8,-152.6 0,-12.8 -1.6,-22.2 -3.7,-31.8h-146v53.4l91,0.1z" />
<path android:pathData="M931.7,200.4H518.8L454.4,0h-388C29.9,0 0,29.9 0,66.5v677c0,36.5 29.9,66.4 66.4,66.4h415.9l61.4,188.4h388c36.5,0 66.4,-29.4 66.4,-65.4V265.8c0,-36 -29.9,-65.4 -66.4,-65.4z">
<aapt:attr name="android:fillColor">
<gradient
android:centerX="65.21"
android:centerY="19.37"
android:gradientRadius="1398.27"
android:type="radial">
<item
android:color="#19FFFFFF"
android:offset="0" />
<item
android:color="#00FFFFFF"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</vector>
@@ -0,0 +1,46 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="44dp"
android:height="44dp"
android:viewportWidth="44"
android:viewportHeight="44">
<group>
<clip-path android:pathData="M22,22m-17,0a17,17 0,1 1,34 0a17,17 0,1 1,-34 0" />
<path
android:fillColor="#FC3F1D"
android:pathData="M39,39h-9.63L14.63,5H39v34z" />
<path
android:fillColor="#2B2B2B"
android:pathData="M39,39h-9.63L14.63,5H39v34z" />
<path
android:fillColor="#fff"
android:fillType="evenOdd"
android:pathData="M33.71,19.33a4.1,4.1 0,0 0,-2.2 -2.17c0.18,-0.8 0.24,-1.46 0.26,-1.9h-1.8a9.8,9.8 0,0 1,-0.2 1.41c-1.4,-0.2 -2.98,0 -4.5,0.54 -0.17,-0.98 -0.28,-1.9 -0.34,-2.7 5.41,-0.3 8.6,-1.58 8.75,-1.65L33,11.24c-0.03,0 -3.06,1.2 -8.13,1.5 0,-1.21 -0.04,-1.2 0.02,-1.61l-1.8,-0.02c-0.04,0.34 -0.03,0.7 -0.02,1.7h-0.17c-1.62,0 -3.12,-0.12 -3.48,-0.15l-0.33,1.79c0.53,0.04 2.15,0.13 3.6,0.13h0.22l0.23,-0.01c0.07,1 0.2,2.16 0.44,3.42 -2.39,1.4 -4.3,4.1 -3.32,6.3 0.4,0.92 1.19,1.52 2.2,1.67 0.18,0.02 0.36,0.04 0.54,0.04 1.03,0 2.21,-0.41 3.34,-1.11a10.8,10.8 0,0 0,1.39 1.7l1.24,-1.29c-0.02,-0.01 -0.54,-0.5 -1.2,-1.49a12.86,12.86 0,0 0,3.26 -4.91c0.4,0.23 0.8,0.57 1.02,1.09 0.72,1.75 -0.32,3.78 -1.3,4.66l1.23,1.3c1.62,-1.47 2.73,-4.21 1.74,-6.62zM22.73,24.2a0.98,0.98 0,0 1,-0.83 -0.62c-0.44,-1.01 0.52,-2.67 2.1,-3.77 0.4,1.4 0.9,2.6 1.41,3.56 -0.96,0.6 -1.95,0.94 -2.68,0.83zM27.24,21.8 L26.84,22.22c-0.44,-0.9 -0.88,-1.98 -1.2,-3.26a8.31,8.31 0,0 1,3.65 -0.58,11.12 11.12,0 0,1 -2.05,3.43z" />
<path
android:fillColor="#FC3F1D"
android:pathData="M5,5h9.63l14.74,34H5V5z" />
<path
android:fillAlpha="0.4"
android:pathData="M5,5h9.63l14.74,34H5V5z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="13.14"
android:endY="32.31"
android:startX="49.36"
android:startY="1.11"
android:type="linear">
<item
android:color="#FFFFFFFF"
android:offset="0" />
<item
android:color="#00FFFFFF"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#fff"
android:fillType="evenOdd"
android:pathData="M15.38,17.42 L9.52,30.96h2.4l1.44,-3.61h5.93l1.44,3.61h2.4l-5.86,-13.54h-1.9zM16.32,20.21 L18.51,25.52h-4.37l2.18,-5.31z" />
</group>
</vector>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:drawable="@drawable/$notification_receive_28_60fps__0">
<target
android:name="_R_G_L_1_G"
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="1.0dip" />
+4 -5
View File
@@ -2,13 +2,12 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="15dp"/>
<solid android:color="?attr/tabbar_background"/>
<corners android:radius="15dp" />
<solid android:color="?attr/tabbar_background" />
<padding
android:bottom="10dp"
android:left="20dp"
android:top="10dp"
android:right="20dp"
android:bottom="10dp" >
</padding>
android:top="10dp"></padding>
</shape>
+6 -6
View File
@@ -3,10 +3,10 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2.04,12c0,-5.523 4.476,-10 10,-10 5.522,0 10,4.477 10,10s-4.478,10 -10,10c-5.524,0 -10,-4.477 -10,-10z"
android:fillColor="#FC3F1D"/>
<path
android:pathData="M13.32,7.666h-0.924c-1.694,0 -2.585,0.858 -2.585,2.123 0,1.43 0.616,2.1 1.881,2.959l1.045,0.704 -3.003,4.487H7.49l2.695,-4.014c-1.55,-1.111 -2.42,-2.19 -2.42,-4.015 0,-2.288 1.595,-3.85 4.62,-3.85h3.003v11.868H13.32V7.666z"
android:fillColor="#fff"/>
<path
android:fillColor="#FC3F1D"
android:pathData="M2.04,12c0,-5.523 4.476,-10 10,-10 5.522,0 10,4.477 10,10s-4.478,10 -10,10c-5.524,0 -10,-4.477 -10,-10z" />
<path
android:fillColor="#fff"
android:pathData="M13.32,7.666h-0.924c-1.694,0 -2.585,0.858 -2.585,2.123 0,1.43 0.616,2.1 1.881,2.959l1.045,0.704 -3.003,4.487H7.49l2.695,-4.014c-1.55,-1.111 -2.42,-2.19 -2.42,-4.015 0,-2.288 1.595,-3.85 4.62,-3.85h3.003v11.868H13.32V7.666z" />
</vector>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

+2 -2
View File
@@ -4924,7 +4924,7 @@ Los mensajes no se marcarán como leídos hasta que aceptes la solicitud."</stri
<string name="vkim_onboarding_dialogs_grant_contacts_permission">Permitir el acceso a los contactos</string>
<string name="vkim_onboarding_dialogs_syncing">Sincronizando contactos</string>
<string name="vkim_onboarding_dialogs_title">No hay chats</string>
<string name="vkim_one_msg_is_expired_description">Este mensaje se autodestruyó después de cierto tiempo. Puedes enviar este tipo de mensajes también en VK Me.</string>
<string name="vkim_one_msg_is_expired_description">Este mensaje se autodestruyó después de cierto tiempo.</string>
<string name="vkim_one_msg_is_expired_title">Mensaje que se autodestruye</string>
<string name="vkim_one_time_story_dialog_description">Esta historia se autodestruyó después de ser vista. Puedes enviar este tipo de historias en VK Me.</string>
<string name="vkim_one_time_story_dialog_title">Historia que se autodestruye</string>
@@ -5109,7 +5109,7 @@ en la barra de búsqueda"</string>
<string name="vkim_share_title">Compartir</string>
<string name="vkim_share_to_casper_chat">En los chats fantasmas, los mensajes se autodestruyen una hora después de ser enviados</string>
<string name="vkim_share_waiting_for_network">Esperando conexión…</string>
<string name="vkim_some_msg_is_expired_description">Estos mensajes se autodestruyen después de cierto tiempo. Puedes enviar este tipo de mensajes también en VK Me.</string>
<string name="vkim_some_msg_is_expired_description">Estos mensajes se autodestruyen después de cierto tiempo.</string>
<string name="vkim_some_msg_is_expired_title">Mensaje que desaparece</string>
<string name="vkim_stickers_pack_description">Para obtener %1$s paquete de pegatinas necesitas descargar VK Me.</string>
<string name="vkim_stickers_pack_description_default">Para obtener este paquete de pegatinas necesitas descargar VK Me.</string>
+2 -2
View File
@@ -4874,7 +4874,7 @@ https://vk.me"</string>
<string name="vkim_onboarding_dialogs_grant_contacts_permission">Контактілерге рұқсат беру</string>
<string name="vkim_onboarding_dialogs_syncing">Контактілерді жүктеу</string>
<string name="vkim_onboarding_dialogs_title">Әзірше әңгімелер жоқ</string>
<string name="vkim_one_msg_is_expired_description">Осы хабарлама жіберілгеннен кейін кішкене уақыт өте жоқ болып кетті. Сондай хабарламаларды тек VK Me мессенджерінен жіберуге болады.</string>
<string name="vkim_one_msg_is_expired_description">Осы хабарлама жіберілгеннен кейін кішкене уақыт өте жоқ болып кетті.</string>
<string name="vkim_one_msg_is_expired_title">Жойылатын хабарлама</string>
<string name="vkim_one_time_story_dialog_description">Осы сторис көрілгеннен кейін жойылды. Осындай стористерді VK Me мессенджері арқылы жіберуге болады.</string>
<string name="vkim_one_time_story_dialog_title">Жойылатын сторис</string>
@@ -5059,7 +5059,7 @@ https://vk.me"</string>
<string name="vkim_share_title">Бөлісу</string>
<string name="vkim_share_to_casper_chat">Фантом-чатта хабарламалар жіберілгеннен кейін бір сағат өте жойылып тұрады</string>
<string name="vkim_share_waiting_for_network">Желіні күтудеміз…</string>
<string name="vkim_some_msg_is_expired_description">Осы хабарламалар жіберілгеннен кейін кішкене уақыт өте жоқ болып кетті. Сондай хабарламаларды тек VK Me мессенджерінен жіберуге болады.</string>
<string name="vkim_some_msg_is_expired_description">Осы хабарламалар жіберілгеннен кейін кішкене уақыт өте жоқ болып кетті.</string>
<string name="vkim_some_msg_is_expired_title">Жойылатын хабарлама</string>
<string name="vkim_stickers_pack_description">«%1$s» стикерлер жинағын алу үшін VK Me мессенджерін орнату керек.</string>
<string name="vkim_stickers_pack_description_default">Стикерлер жинағын алу үшін VK Me мессенджерін орнату керек.</string>
+2 -2
View File
@@ -4892,7 +4892,7 @@ Os remetentes não saberão que você viu as mensagens deles até você clicar e
<string name="vkim_onboarding_dialogs_grant_contacts_permission">Permitir acesso a contatos</string>
<string name="vkim_onboarding_dialogs_syncing">Carregando os contatos</string>
<string name="vkim_onboarding_dialogs_title">Ainda não há conversas</string>
<string name="vkim_one_msg_is_expired_description">Esta mensagem desapareceu algum tempo após o envio. As mensagens que desaparecem podem ser enviadas somente no VK Me.</string>
<string name="vkim_one_msg_is_expired_description">Esta mensagem desapareceu algum tempo após o envio.</string>
<string name="vkim_one_msg_is_expired_title">Mensagem que desaparece</string>
<string name="vkim_one_time_story_dialog_description">Esta história desapareceu após a visualização. As histórias deste tipo podem ser enviadas no messenger VK Me.</string>
<string name="vkim_one_time_story_dialog_title">História que desaparece</string>
@@ -5075,7 +5075,7 @@ no campo da pesquisa"</string>
<string name="vkim_share_title">Compartilhar</string>
<string name="vkim_share_to_casper_chat">No chat fantasma todas as mensagens se apagam uma hora após o envio</string>
<string name="vkim_share_waiting_for_network">Aguardando conexão…</string>
<string name="vkim_some_msg_is_expired_description">Estas mensagens desapareceram algum tempo após o envio. As mensagens que desaparecem podem ser enviadas somente no VK Me.</string>
<string name="vkim_some_msg_is_expired_description">Estas mensagens desapareceram algum tempo após o envio.</string>
<string name="vkim_some_msg_is_expired_title">Mensagens que desaparecem</string>
<string name="vkim_stickers_pack_description">Para receber o pacote de adesivos \"%1$s\", é necessário baixar o messenger VK Me.</string>
<string name="vkim_stickers_pack_description_default">Para receber o pacote de adesivos, é necessário baixar o messenger VK Me.</string>
+10
View File
@@ -600,6 +600,16 @@
<item>Сторонний HTTPS</item>
<item>Сторонний SOCKS</item>
</string-array>
<string-array name="targetlang_value">
<item>Системный</item>
<item>Русский</item>
<item>Английский</item>
<item>Украинский</item>
<item>Немецкий</item>
<item>Французский</item>
<item>Казахский</item>
<item>Китайский</item>
</string-array>
<string-array name="msgcount_value">
<item>По умолчанию</item>
<item>40 сообщений</item>
+16 -11
View File
@@ -4951,7 +4951,7 @@
<string name="vkim_onboarding_dialogs_grant_contacts_permission">Разрешить доступ к контактам</string>
<string name="vkim_onboarding_dialogs_syncing">Загрузка контактов</string>
<string name="vkim_onboarding_dialogs_title">Бесед пока нет</string>
<string name="vkim_one_msg_is_expired_description">Это сообщение исчезло спустя некоторое время после отправки. Отправлять такие сообщения можно только в мессенджере VK Me.</string>
<string name="vkim_one_msg_is_expired_description">Это сообщение исчезло спустя некоторое время после отправки.</string>
<string name="vkim_one_msg_is_expired_title">Исчезающее сообщение</string>
<string name="vkim_one_time_story_dialog_description">Эта история исчезла после просмотра. Отправлять такие истории можно в мессенджере VK Me.</string>
<string name="vkim_one_time_story_dialog_title">Исчезающая история</string>
@@ -5136,7 +5136,7 @@
<string name="vkim_share_title">Поделиться</string>
<string name="vkim_share_to_casper_chat">В фантом-чате сообщения исчезают через час после отправки</string>
<string name="vkim_share_waiting_for_network">Ожидание сети…</string>
<string name="vkim_some_msg_is_expired_description">Эти сообщения исчезли спустя некоторое время после отправки. Отправлять такие сообщения можно только в мессенджере VK Me.</string>
<string name="vkim_some_msg_is_expired_description">Эти сообщения исчезли спустя некоторое время после отправки.</string>
<string name="vkim_some_msg_is_expired_title">Исчезающие сообщения</string>
<string name="vkim_stickers_pack_description">Чтобы получить набор стикеров «%1$s», необходимо установить мессенджер VK Me.</string>
<string name="vkim_stickers_pack_description_default">Чтобы получить набор стикеров, необходимо установить мессенджер VK Me.</string>
@@ -5374,12 +5374,12 @@
<string name="vtlrecommendmarksummary">Посты по типу Вам может быть интересно и тд</string>
<string name="vtlfeedwork">Прочее</string>
<string name="vtlfeedreload">Автоматическое обновление ленты</string>
<string name="vtlfeedcache">Кэшировать посты в ленте</string>
<string name="vtlfeedcache">Кешировать посты в ленте</string>
<string name="vtlrecommendmark">Отключить посты с пометкой рекомендовано</string>
<string name="vtlmsgtails">Хвосты сообщений</string>
<string name="vtlmsgflat">Плоские сообщения</string>
<string name="vtlupdmsg">Обновить</string>
<string name="BGStickerssum">Для включения/отключения вам необходимо очистить кэш приложения</string>
<string name="BGStickerssum">Для включения/отключения вам необходимо очистить кеш приложения</string>
<string name="addinf">Дополнительная информация</string>
<string name="copyid">Скопировать айди</string>
<string name="vtssfs">VT Функции</string>
@@ -5391,6 +5391,8 @@
<string name="experts">Эксперты</string>
<string name="DNT_OFF">Отключить неписалку</string>
<string name="DNT_ON">Включить неписалку</string>
<string name="pinmsg">Закрепить чат</string>
<string name="unpinmsg">Открепить чат</string>
<string name="accounts">Аккаунты</string>
<string name="act_bot">Для ботов/групп</string>
<string name="act_cnv">Для бесед</string>
@@ -5402,9 +5404,9 @@
<string name="applicationrestart">Перезапустить приложение</string>
<string name="benchapi">Бенчмарк апи</string>
<string name="benchapisummary">Тестирование скорости отправки запросов. Бесполезная функция для всех, кроме разработчиков ВКонтакте</string>
<string name="cachecleaned">Кэш очищен</string>
<string name="clearcache">Очистить весь кэш</string>
<string name="clearcachesum">Чистка всего кэша приложения (кроме кэша ленты)</string>
<string name="cachecleaned">Кеш очищен</string>
<string name="clearcache">Очистить весь кеш</string>
<string name="clearcachesum">Чистка всего ккша приложения (кроме кеша ленты)</string>
<string name="convUsersOnline">Фикс показа онлайна в беседах</string>
<string name="convUsersOnlinesum">"Фикс показа онлайна других пользователей в беседах (нужно только если Вы скрыли свой онлайн)
@@ -5624,7 +5626,7 @@
<string name="proxy_password_title">Пароль</string>
<string name="other_fix_app">Исправление работы приложения</string>
<string name="other_clear_stickers_cache">Очистить кэш стикеров</string>
<string name="other_clear_stickers_cache">Очистить кеш стикеров</string>
<string name="other_clear_stickers_cache_summary">Исправление загрузки стикеров при их полном отсутствии</string>
<string name="other_reset_settings">Сбросить настройки</string>
<string name="other_reset_settings_summary">Сбрасывает включенные вами функции модификации на значения по умолчанию</string>
@@ -5689,8 +5691,8 @@
<string name="debug_cache">Кэш</string>
<string name="debug_cache_trusted_hash">Очистить хэш 2фа</string>
<string name="debug_cache_webview">Очистить кэш WebView</string>
<string name="debug_cache_video">Очистить видео кэш</string>
<string name="debug_cache_webview">Очистить кеш WebView</string>
<string name="debug_cache_video">Очистить видео кеш</string>
<string name="debug_system">Системные</string>
<string name="debug_system_language">Подменить язык</string>
@@ -5787,10 +5789,13 @@
<string name="downloaderr">Ошибка загрузки файла</string>
<string name="download_mp3">Скачать как mp3</string>
<string name="remove_from_cache">Удалить из кэша</string>
<string name="remove_from_cache">Удалить из кеша</string>
<string name="thanksfordonate">Спасибо тебе за поддержку проекта!</string>
<string name="getdonate">Поддержи проект донатом и получи бонусы</string>
<string name="wallpapers">Обои</string>
<string name="readto">Прочитать до</string>
<string name="translator">Перевести</string>
</resources>
+2 -2
View File
@@ -4899,7 +4899,7 @@
<string name="vkim_onboarding_dialogs_grant_contacts_permission">Надайте доступ до контактів</string>
<string name="vkim_onboarding_dialogs_syncing">Завантаження контактів</string>
<string name="vkim_onboarding_dialogs_title">Бесід наразі немає</string>
<string name="vkim_one_msg_is_expired_description">Це повідомлення зникло через деякий час після надсилання. Надіслати такі повідомлення можна лише в месенджері VK Me.</string>
<string name="vkim_one_msg_is_expired_description">Це повідомлення зникло через деякий час після надсилання.</string>
<string name="vkim_one_msg_is_expired_title">Повідомлення що зникає</string>
<string name="vkim_one_time_story_dialog_description">Ця історія зникла після перегляду. Надсилати такі історії можна в месенджері VK Me.</string>
<string name="vkim_one_time_story_dialog_title">Зникаюча історія</string>
@@ -5084,7 +5084,7 @@
<string name="vkim_share_title">Поділитися</string>
<string name="vkim_share_to_casper_chat">У фантом-чаті повідомлення зникають через годину після надсилання</string>
<string name="vkim_share_waiting_for_network">Очікування мережі…</string>
<string name="vkim_some_msg_is_expired_description">Ці повідомлення зникли через деякий час після надсилання. Надіслати такі повідомлення можна лишн в месенджері VK Me.</string>
<string name="vkim_some_msg_is_expired_description">Ці повідомлення зникли через деякий час після надсилання.</string>
<string name="vkim_some_msg_is_expired_title">Повідомлення що зникають</string>
<string name="vkim_stickers_pack_description">Щоб отримати набір стікерів «%1$s», необхідно встановити месенджер VK Me.</string>
<string name="vkim_stickers_pack_description_default">Щоб отримати набір стікерів, необхідно встановити месенджер VK Me.</string>
+20
View File
@@ -756,6 +756,26 @@
<item>https</item>
<item>socks</item>
</string-array>
<string-array name="targetlang_value">
<item>System</item>
<item>Russian</item>
<item>English</item>
<item>Ukrainian</item>
<item>German</item>
<item>French</item>
<item>Kazakh</item>
<item>Chinese</item>
</string-array>
<string-array name="targetlang">
<item>system</item>
<item>ru</item>
<item>en</item>
<item>uk</item>
<item>de</item>
<item>fr</item>
<item>kk</item>
<item>zh</item>
</string-array>
<string-array name="msgcount_value">
<item>Default</item>
<item>40 messages</item>
+528 -143
View File
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="abc_decor_view_status_guard">#ff000000</color>
<color name="abc_decor_view_status_guard_light">#ffffffff</color>
<color name="abc_input_method_navigation_guard">@android:color/black</color>
<color name="abc_search_url_text_normal">#ff7fa87f</color>
<color name="abc_search_url_text_pressed">@android:color/black</color>
@@ -11,16 +13,18 @@
<color name="account_stub_light">#ffdbdde1</color>
<color name="almost_black">#ff2e3033</color>
<color name="ampm_text_color">#ff8c8c8c</color>
<color name="androidx_core_ripple_material_light">#1f000000</color>
<color name="androidx_core_secondary_text_default_material_light">#8a000000</color>
<color name="attach_title">#ff5a5d61</color>
<color name="attachpicker_item_background">#14001c3d</color>
<color name="audio_ad_progress_color">#fff5a623</color>
<color name="azure_100_muted">#ff67a5eb</color>
<color name="azure_300">#ff3f8ae0</color>
<color name="azure_100_muted">@color/vk_azure_100_muted</color>
<color name="azure_300">@color/vk_azure_300</color>
<color name="azure_300_alpha10">#193f8ae0</color>
<color name="azure_300_alpha15">#263f8ae0</color>
<color name="azure_350">#ff2975cc</color>
<color name="azure_A100">#ff2787f5</color>
<color name="azure_A400">#ff4986cc</color>
<color name="azure_350">@color/vk_azure_350</color>
<color name="azure_A100">@color/vk_azure_A100</color>
<color name="azure_A400">@color/vk_azure_A400</color>
<color name="azure_A400_alpha10">#194986cc</color>
<color name="azure_A400_alpha15">#264986cc</color>
<color name="background">#fffdfffc</color>
@@ -32,61 +36,63 @@
<color name="background_tab_pressed">#6633b5e5</color>
<color name="base">#ff00b956</color>
<color name="big_photo_placeholder">#1a000000</color>
<color name="biometric_error_color">#ffff5722</color>
<color name="black">#ff000000</color>
<color name="black_alpha05">#0d000000</color>
<color name="black_alpha12">#1f000000</color>
<color name="black_alpha15">#26000000</color>
<color name="black_alpha16">#28000000</color>
<color name="black_alpha20">#4d000000</color>
<color name="black_alpha24">#3d000000</color>
<color name="black_alpha35">#59000000</color>
<color name="black_alpha6">#0f000000</color>
<color name="black_alpha60">#99000000</color>
<color name="black_alpha75">#bf000000</color>
<color name="black_alpha8">#14000000</color>
<color name="black_alpha05">@color/vk_black_alpha05</color>
<color name="black_alpha12">@color/vk_black_alpha12</color>
<color name="black_alpha15">@color/vk_black_alpha15</color>
<color name="black_alpha16">@color/vk_black_alpha16</color>
<color name="black_alpha20">@color/vk_black_alpha20</color>
<color name="black_alpha24">@color/vk_black_alpha24</color>
<color name="black_alpha35">@color/vk_black_alpha35</color>
<color name="black_alpha45">@color/vk_black_alpha45</color>
<color name="black_alpha6">@color/vk_black_alpha6</color>
<color name="black_alpha60">@color/vk_black_alpha60</color>
<color name="black_alpha75">@color/vk_black_alpha75</color>
<color name="black_alpha8">@color/vk_black_alpha8</color>
<color name="black_alpha90">#e5000000</color>
<color name="black_blue10">#ff000c1a</color>
<color name="black_blue24">#ff001c3d</color>
<color name="black_blue24_alpha24">#3d001c3d</color>
<color name="black_blue24_alpha8">#14001c3d</color>
<color name="black_blue30_alpha66">#a800244d</color>
<color name="black_blue45_alpha10">#1a003973</color>
<color name="black_blue10">@color/vk_black_blue10</color>
<color name="black_blue24">@color/vk_black_blue24</color>
<color name="black_blue24_alpha24">@color/vk_black_blue24_alpha24</color>
<color name="black_blue24_alpha8">@color/vk_black_blue24_alpha8</color>
<color name="black_blue30_alpha66">@color/vk_black_blue30_alpha66</color>
<color name="black_blue45_alpha10">@color/vk_black_blue45_alpha10</color>
<color name="black_lavender_alpha5">@color/vk_black_lavender_alpha5</color>
<color name="black_opacity_08">#14000000</color>
<color name="black_opacity_15">#27000000</color>
<color name="black_opacity_20">#33000000</color>
<color name="black_opacity_25">#3f000000</color>
<color name="black_opacity_36">#5c000000</color>
<color name="blue">#ff5c9ce6</color>
<color name="blue_200">#ff5c9ce6</color>
<color name="blue_200_muted">#ff74a2d6</color>
<color name="blue_300">#ff528bcc</color>
<color name="blue_400">#ff5181b8</color>
<color name="blue_600">#ff45678f</color>
<color name="blue_A300">#ff4772a6</color>
<color name="blue_A400">#ff346cad</color>
<color name="blue_A500">#ff3c6a9e</color>
<color name="blue_A800">#ff28436e</color>
<color name="blue_facebook">#ff4367a3</color>
<color name="blue_200">@color/vk_blue_200</color>
<color name="blue_200_muted">@color/vk_blue_200_muted</color>
<color name="blue_300">@color/vk_blue_300</color>
<color name="blue_400">@color/vk_blue_400</color>
<color name="blue_600">@color/vk_blue_600</color>
<color name="blue_A300">@color/vk_blue_A300</color>
<color name="blue_A400">@color/vk_blue_A400</color>
<color name="blue_A500">@color/vk_blue_A500</color>
<color name="blue_A800">@color/vk_blue_A800</color>
<color name="blue_facebook">@color/vk_blue_facebook</color>
<color name="blue_gray">#ff61768f</color>
<color name="blue_overlight_1_alpha32">#52add3ff</color>
<color name="blue_overlight_2_alpha80">#ccc2deff</color>
<color name="blue_overlight_3">#ff92b2d6</color>
<color name="blue_overlight_1_alpha32">@color/vk_blue_overlight_1_alpha32</color>
<color name="blue_overlight_2_alpha80">@color/vk_blue_overlight_2_alpha80</color>
<color name="blue_overlight_3">@color/vk_blue_overlight_3</color>
<color name="bottom_menu_color">#fffafafa</color>
<color name="brand_dark">#ff38618d</color>
<color name="bright_foreground_disabled_material_dark">#80ffffff</color>
<color name="bright_foreground_disabled_material_light">#80000000</color>
<color name="bright_foreground_inverse_material_dark">@color/bright_foreground_material_light
</color>
<color name="bright_foreground_inverse_material_light">@color/bright_foreground_material_dark
</color>
<color name="bright_foreground_inverse_material_dark">@color/bright_foreground_material_light</color>
<color name="bright_foreground_inverse_material_light">@color/bright_foreground_material_dark</color>
<color name="bright_foreground_material_dark">@android:color/white</color>
<color name="bright_foreground_material_light">@android:color/black</color>
<color name="brown_gold">#ff9e8f72</color>
<color name="brown_light">#ffc2b79f</color>
<color name="brown_gold">@color/vk_brown_gold</color>
<color name="brown_light">@color/vk_brown_light</color>
<color name="browser_actions_bg_grey">#fff5f5f5</color>
<color name="browser_actions_divider_color">#1e000000</color>
<color name="browser_actions_text_color">#de000000</color>
<color name="browser_actions_title_color">#ff646464</color>
<color name="bugtracker_blue">#ff528bcc</color>
<color name="button_material_dark">#ff5a595b</color>
<color name="button_material_light">#ffd6d7d7</color>
<color name="calendar_header">#ff999999</color>
@@ -103,18 +109,44 @@
<color name="cardview_light_background">#ffffffff</color>
<color name="cardview_shadow_end_color">#03000000</color>
<color name="cardview_shadow_start_color">#37000000</color>
<color name="charcoal">#ff384452</color>
<color name="cast_expanded_controller_ad_break_marker_color">#fffec92f</color>
<color name="cast_expanded_controller_ad_container_white_stripe_color">#1affffff</color>
<color name="cast_expanded_controller_ad_in_progress_text_color">#ffffffff</color>
<color name="cast_expanded_controller_ad_label_background_color">#fffec92f</color>
<color name="cast_expanded_controller_ad_label_text_color">#ffffffff</color>
<color name="cast_expanded_controller_background_color">#ff000000</color>
<color name="cast_expanded_controller_live_indicator_color">#ffd0021b</color>
<color name="cast_expanded_controller_loading_indicator_color">#ffffffff</color>
<color name="cast_expanded_controller_progress_text_color">#e5ffffff</color>
<color name="cast_expanded_controller_seek_bar_progress_background_tint_color">#46ffffff</color>
<color name="cast_expanded_controller_text_color">#ffffffff</color>
<color name="cast_intro_overlay_background_color">#cc000000</color>
<color name="cast_intro_overlay_button_background_color">#bb33b5e5</color>
<color name="cast_libraries_material_featurehighlight_outer_highlight_default_color">#ff2196f3</color>
<color name="cast_libraries_material_featurehighlight_text_body_color">#ffffffff</color>
<color name="cast_libraries_material_featurehighlight_text_header_color">#ffffffff</color>
<color name="cast_mini_controller_loading_indicator_color">#ff000000</color>
<color name="cast_seekbar_progress_thumb_color">#ffd0021b</color>
<color name="cast_seekbar_secondary_progress_color">#a6ffffff</color>
<color name="cast_seekbar_tooltip_background_color">#e6616161</color>
<color name="cast_seekbar_unseekable_progress_color">#4dffffff</color>
<color name="charcoal">@color/vk_charcoal</color>
<color name="circle_background">#fff2f2f2</color>
<color name="clear">#00000000</color>
<color name="clear">@color/vk_clear</color>
<color name="clip_action_button_background_color">@color/vk_azure_A400</color>
<color name="clip_action_button_text_color">@color/vk_white</color>
<color name="clip_clickable_description">@color/vk_white_alpha60</color>
<color name="clip_feed_page_selector_color">@color/vk_white_alpha20</color>
<color name="clip_timeline">@color/vk_white</color>
<color name="colorAccent">#ff80cbc4</color>
<color name="colorPrimary">#ff212121</color>
<color name="colorPrimaryDark">@android:color/black</color>
<color name="colored_notification_bg">@color/white</color>
<color name="com_facebook_blue">#ff1877f2</color>
<color name="com_facebook_button_background_color">@color/com_facebook_blue</color>
<color name="com_facebook_button_background_color_disabled">#ffebedf0</color>
<color name="com_facebook_button_background_color_pressed">#ff186bda</color>
<color name="com_facebook_button_send_background_color">@color/com_facebook_messenger_blue
</color>
<color name="com_facebook_button_send_background_color">@color/com_facebook_messenger_blue</color>
<color name="com_facebook_button_send_background_color_pressed">#ff006fff</color>
<color name="com_facebook_device_auth_text">#ff90949c</color>
<color name="com_facebook_likeboxcountview_border_color">#ff6a7180</color>
@@ -143,10 +175,36 @@
<color name="darker_blue">#ff0099cc</color>
<color name="date_picker_text_normal">#ff999999</color>
<color name="date_picker_view_animator">#fff2f2f2</color>
<color name="debug_view_bg">#a044678f</color>
<color name="debug_view_error_bg">#a0e6457a</color>
<color name="default_progress_bar_color">#ffffffff</color>
<color name="design_bottom_navigation_shadow_color">#14000000</color>
<color name="design_default_color_primary">#ff3f51b5</color>
<color name="design_default_color_primary_dark">#ff303f9f</color>
<color name="design_dark_default_color_background">#ff121212</color>
<color name="design_dark_default_color_error">#ffcf6679</color>
<color name="design_dark_default_color_on_background">#ffffffff</color>
<color name="design_dark_default_color_on_error">#ff000000</color>
<color name="design_dark_default_color_on_primary">#ff000000</color>
<color name="design_dark_default_color_on_secondary">#ff000000</color>
<color name="design_dark_default_color_on_surface">#ffffffff</color>
<color name="design_dark_default_color_primary">#ffba86fc</color>
<color name="design_dark_default_color_primary_dark">#ff000000</color>
<color name="design_dark_default_color_primary_variant">#ff3700b3</color>
<color name="design_dark_default_color_secondary">#ff03dac6</color>
<color name="design_dark_default_color_secondary_variant">#ff03dac6</color>
<color name="design_dark_default_color_surface">#ff121212</color>
<color name="design_default_color_background">#ffffffff</color>
<color name="design_default_color_error">#ffb00020</color>
<color name="design_default_color_on_background">#ff000000</color>
<color name="design_default_color_on_error">#ffffffff</color>
<color name="design_default_color_on_primary">#ffffffff</color>
<color name="design_default_color_on_secondary">#ff000000</color>
<color name="design_default_color_on_surface">#ff000000</color>
<color name="design_default_color_primary">#ff6200ee</color>
<color name="design_default_color_primary_dark">#ff3700b3</color>
<color name="design_default_color_primary_variant">#ff3700b3</color>
<color name="design_default_color_secondary">#ff03dac6</color>
<color name="design_default_color_secondary_variant">#ff018786</color>
<color name="design_default_color_surface">#ffffffff</color>
<color name="design_fab_shadow_end_color">@android:color/transparent</color>
<color name="design_fab_shadow_mid_color">#14000000</color>
<color name="design_fab_shadow_start_color">#44000000</color>
@@ -166,8 +224,17 @@
<color name="done_text_color_normal">#ff333333</color>
<color name="dot_unread">#ff7aa0cc</color>
<color name="drawer_bg_tablet">#ff384554</color>
<color name="emerald">@color/vk_emerald</color>
<color name="error_color_material_dark">#ffff7043</color>
<color name="error_color_material_light">#ffff5722</color>
<color name="exo_black_opacity_60">#98000000</color>
<color name="exo_black_opacity_70">#b3000000</color>
<color name="exo_bottom_bar_background">#b0000000</color>
<color name="exo_edit_mode_background_color">#fff4f3f0</color>
<color name="exo_error_message_background_color">#aa000000</color>
<color name="exo_styled_error_message_background">#80808080</color>
<color name="exo_white">#ffffffff</color>
<color name="exo_white_opacity_70">#b3ffffff</color>
<color name="fave_action_gray">#ffd8d8d8</color>
<color name="fave_dark_link">#ff44678f</color>
<color name="fave_dark_transparent">#880d0d0d</color>
@@ -177,40 +244,47 @@
<color name="fave_snippet_dark_gray">#ffbfc8d2</color>
<color name="fave_snippet_gray">#ffebedf0</color>
<color name="fave_transparent_gray">#26000000</color>
<color name="fcm_test_color">#ff4285f4</color>
<color name="fire_orange">#fff05c44</color>
<color name="foreground_material_dark">@android:color/white</color>
<color name="foreground_material_light">@android:color/black</color>
<color name="friend_request_notification_description">@color/vk_steel_gray_400</color>
<color name="friend_request_notification_subhead">@color/vk_steel_gray_500</color>
<color name="friend_request_notification_title">@color/vk_black</color>
<color name="game_gray">#ff9ca0a6</color>
<color name="games_gray">#ff6a6f75</color>
<color name="games_light_gray">#ff909499</color>
<color name="gifts_dialog_bg">#fff0f1f2</color>
<color name="gold_200">#fff4e7c3</color>
<color name="gold_250">#ffe3d3ac</color>
<color name="gold_300">#ffd1c097</color>
<color name="gold_400">#ffab9871</color>
<color name="gold_500">#ff857250</color>
<color name="gold_200">@color/vk_gold_200</color>
<color name="gold_250">@color/vk_gold_250</color>
<color name="gold_300">@color/vk_gold_300</color>
<color name="gold_400">@color/vk_gold_400</color>
<color name="gold_500">@color/vk_gold_500</color>
<color name="gray">#ff909499</color>
<color name="gray_100">#ffe1e3e6</color>
<color name="gray_1000">#ff0a0a0a</color>
<color name="gray_20">#fff9f9f9</color>
<color name="gray_200">#ffc4c8cc</color>
<color name="gray_300">#ffaaaeb3</color>
<color name="gray_40">#fff2f3f5</color>
<color name="gray_400">#ff909499</color>
<color name="gray_450">#ff7f8285</color>
<color name="gray_50">#ffebedf0</color>
<color name="gray_500">#ff76787a</color>
<color name="gray_600">#ff5d5f61</color>
<color name="gray_700">#ff454647</color>
<color name="gray_750">#ff363738</color>
<color name="gray_800">#ff2c2d2e</color>
<color name="gray_850">#ff232324</color>
<color name="gray_900">#ff19191a</color>
<color name="gray_950">#ff141414</color>
<color name="gray_A150">#ffd7d8d9</color>
<color name="gray_A40">#fff5f5f5</color>
<color name="gray_A970">#ff070708</color>
<color name="gray_alpha">#b3d7dbe0</color>
<color name="gray_100">@color/vk_gray_100</color>
<color name="gray_1000">@color/vk_gray_1000</color>
<color name="gray_20">@color/vk_gray_20</color>
<color name="gray_200">@color/vk_gray_200</color>
<color name="gray_300">@color/vk_gray_300</color>
<color name="gray_40">@color/vk_gray_40</color>
<color name="gray_400">@color/vk_gray_400</color>
<color name="gray_450">@color/vk_gray_450</color>
<color name="gray_50">@color/vk_gray_50</color>
<color name="gray_500">@color/vk_gray_500</color>
<color name="gray_600">@color/vk_gray_600</color>
<color name="gray_700">@color/vk_gray_700</color>
<color name="gray_750">@color/vk_gray_750</color>
<color name="gray_800">@color/vk_gray_800</color>
<color name="gray_850">@color/vk_gray_850</color>
<color name="gray_900">@color/vk_gray_900</color>
<color name="gray_950">@color/vk_gray_950</color>
<color name="gray_A150">@color/vk_gray_A150</color>
<color name="gray_A40">@color/vk_gray_A40</color>
<color name="gray_A970">@color/vk_gray_A970</color>
<color name="gray_alpha">@color/vk_gray_alpha</color>
<color name="gray_title">#86000205</color>
<color name="green">#ff4bb34b</color>
<color name="green">@color/vk_green</color>
<color name="green_alpha">@color/vk_green_alpha</color>
<color name="green_opacity40">#664bb34b</color>
<color name="header_blue">#ff5181b8</color>
<color name="header_blue_opacity16">#285181b8</color>
@@ -219,19 +293,75 @@
<color name="highlighted_positive">#0f003973</color>
<color name="highlighted_text_material_dark">#6680cbc4</color>
<color name="highlighted_text_material_light">#66009688</color>
<color name="icon_background_blue_start_color">#ff70b2ff</color>
<color name="icon_background_green_end_color">#ff32b332</color>
<color name="icon_background_green_start_color">#ff50c750</color>
<color name="icon_background_grey_start_color">#ffb1b6bd</color>
<color name="image_placeholder">#ffe6e8eb</color>
<color name="image_placeholder_discover">#fff7f7f7</color>
<color name="lavender_100">@color/vk_lavender_100</color>
<color name="lavender_200">@color/vk_lavender_200</color>
<color name="lavender_300">@color/vk_lavender_300</color>
<color name="lavender_700">@color/vk_lavender_700</color>
<color name="lavender_800">@color/vk_lavender_800</color>
<color name="lavender_900">@color/vk_lavender_900</color>
<color name="lavender_A100">@color/vk_lavender_A100</color>
<color name="lavender_A200">@color/vk_lavender_A200</color>
<color name="lavender_A300">@color/vk_lavender_A300</color>
<color name="lavender_A400">@color/vk_lavender_A400</color>
<color name="lavender_A700">@color/vk_lavender_A700</color>
<color name="lavender_A800">@color/vk_lavender_A800</color>
<color name="leak_canary_background_color">#ff242424</color>
<color name="leak_canary_class_name">#ffbababa</color>
<color name="leak_canary_count_default">#26ffcc32</color>
<color name="leak_canary_count_new">#ffffd34c</color>
<color name="leak_canary_count_new_border">@color/leak_canary_yellow</color>
<color name="leak_canary_extra">#ff919191</color>
<color name="leak_canary_gray">#ff2f2f2f</color>
<color name="leak_canary_gray_3f">#ff3f3f3f</color>
<color name="leak_canary_gray_6f">#ff6f6f6f</color>
<color name="leak_canary_gray_darkest">#ff151c1f</color>
<color name="leak_canary_gray_darkest_25p">#40151c1f</color>
<color name="leak_canary_gray_darkest_40p">#66151c1f</color>
<color name="leak_canary_gray_light">#ff939ca3</color>
<color name="leak_canary_gray_lightest">#fff2f4f5</color>
<color name="leak_canary_heap_app">#ff00ffff</color>
<color name="leak_canary_heap_boolean_array">#ff383838</color>
<color name="leak_canary_heap_byte_array">#ffe23ff7</color>
<color name="leak_canary_heap_char_array">#ffffa500</color>
<color name="leak_canary_heap_class_dump">#ff689959</color>
<color name="leak_canary_heap_double_array">#ff4d4d4d</color>
<color name="leak_canary_heap_float_array">#ff4d4d4d</color>
<color name="leak_canary_heap_hprof_string">#ff900000</color>
<color name="leak_canary_heap_image">#ff039dff</color>
<color name="leak_canary_heap_instance">#ff72547a</color>
<color name="leak_canary_heap_instance_string">#ffff0000</color>
<color name="leak_canary_heap_int_array">#ff797979</color>
<color name="leak_canary_heap_load_class">#ff12580f</color>
<color name="leak_canary_heap_long_array">#ff797979</color>
<color name="leak_canary_heap_object_array">#ffffffff</color>
<color name="leak_canary_heap_other">#ff000000</color>
<color name="leak_canary_heap_short_array">#ff797979</color>
<color name="leak_canary_heap_stack_trace">#ffffd40b</color>
<color name="leak_canary_heap_zygote">#ff000a8b</color>
<color name="leak_canary_help">#ff6a98b9</color>
<color name="leak_canary_leak">#ffbe383f</color>
<color name="leak_canary_reference">#ff9976a8</color>
<color name="leak_canary_white">#ffffffff</color>
<color name="leak_canary_yellow">#ffffcc32</color>
<color name="leak_canary_yellow_button">#ffffe79f</color>
<color name="leak_canary_yellow_button_pressed">#ffc4b47f</color>
<color name="libverify_secondary_icon_color">#ff757575</color>
<color name="libverify_settings_color">#ff2a56c6</color>
<color name="light_blue">#ff74a2d6</color>
<color name="light_blue_gray">#ff99a2ad</color>
<color name="light_blue_old">#ffe9eef3</color>
<color name="light_gray">#ffaaaeb3</color>
<color name="light_gray_2">#ffa9b0b8</color>
<color name="light_gray_2">@color/vk_light_gray_2</color>
<color name="light_transparent_white">#ccffffff</color>
<color name="likes_panel_icon_color">#8dffffff</color>
<color name="line_background">#ffcccccc</color>
<color name="list_dialog_blue">@color/header_blue</color>
<color name="list_dialog_blue">@color/vk_blue_400</color>
<color name="live_emoji_butt_default">#ffb4b7bb</color>
<color name="live_emoji_butt_hide">#ff638ebf</color>
<color name="live_end_broadcast_background">#d9000000</color>
@@ -245,13 +375,15 @@
<color name="live_keyboard_hint">#9dc9cdd2</color>
<color name="live_keyboard_popup_background">#ffebeef2</color>
<color name="live_new_messages_text">#ff71757a</color>
<color name="live_pending_background">#90000000</color>
<color name="live_pending_fullscreen_background">#cc000000</color>
<color name="live_recommended_element_back">#ff363636</color>
<color name="live_white_chat_transparent">#ffffffff</color>
<color name="material_blue_grey_800">#ff37474f</color>
<color name="material_blue_grey_900">#ff263238</color>
<color name="material_blue_grey_950">#ff21272b</color>
<color name="material_deep_teal_200">#ff80cbc4</color>
<color name="material_deep_teal_500">#ff009688</color>
<color name="material_deep_teal_500">#ff008577</color>
<color name="material_grey_100">#fff5f5f5</color>
<color name="material_grey_300">#ffe0e0e0</color>
<color name="material_grey_50">#fffafafa</color>
@@ -264,14 +396,163 @@
<color name="message_time">#ff78838f</color>
<color name="messages_background_color">#ffebf0f5</color>
<color name="mid_gray">#ffaaaeb3</color>
<color name="mint_100">#ffd4fde8</color>
<color name="mint_200">#ffaee6c9</color>
<color name="mint_400">#ff6d8f7e</color>
<color name="mint_500">#ff567867</color>
<color name="mint_A1_alpha12">#1f006732</color>
<color name="mint_100">@color/vk_mint_100</color>
<color name="mint_200">@color/vk_mint_200</color>
<color name="mint_400">@color/vk_mint_400</color>
<color name="mint_500">@color/vk_mint_500</color>
<color name="mint_A1_alpha12">@color/vk_mint_A1_alpha12</color>
<color name="modal_edittext_background">#fff2f3f5</color>
<color name="modal_edittext_stroke">#26000000</color>
<color name="money_transfer_create_bg">#ffebf0f5</color>
<color name="mr_cast_meta_black_scrim">#99000000</color>
<color name="mr_cast_meta_default_background">#ff25272b</color>
<color name="mr_cast_meta_default_text_color">#ffffffff</color>
<color name="mr_cast_progressbar_background_dark">#ff5f6368</color>
<color name="mr_cast_progressbar_background_light">#ffcbcccd</color>
<color name="mr_cast_progressbar_progress_and_thumb_dark">#ff5195ea</color>
<color name="mr_cast_progressbar_progress_and_thumb_light">#ff4285f4</color>
<color name="mr_cast_route_divider_dark">#803c4043</color>
<color name="mr_cast_route_divider_light">#1425272b</color>
<color name="mr_dynamic_dialog_background_dark">#ff000000</color>
<color name="mr_dynamic_dialog_background_light">#ffffffff</color>
<color name="mr_dynamic_dialog_header_text_color_dark">#ffbdc1c6</color>
<color name="mr_dynamic_dialog_header_text_color_light">#ff80868b</color>
<color name="mr_dynamic_dialog_icon_dark">#fff8f9fa</color>
<color name="mr_dynamic_dialog_icon_light">#ff202124</color>
<color name="mr_dynamic_dialog_route_text_color_dark">#ffffffff</color>
<color name="mr_dynamic_dialog_route_text_color_light">#ff25272b</color>
<color name="mrg_azure_100_muted">#ff67a5eb</color>
<color name="mrg_azure_300">#ff2688eb</color>
<color name="mrg_azure_350">#ff2975cc</color>
<color name="mrg_azure_A100">#ff0077ff</color>
<color name="mrg_azure_A400">#ff2d81e0</color>
<color name="mrg_black">#ff000000</color>
<color name="mrg_black_alpha05">#0d000000</color>
<color name="mrg_black_alpha12">#1f000000</color>
<color name="mrg_black_alpha15">#26000000</color>
<color name="mrg_black_alpha16">#28000000</color>
<color name="mrg_black_alpha20">#34000000</color>
<color name="mrg_black_alpha24">#3d000000</color>
<color name="mrg_black_alpha35">#59000000</color>
<color name="mrg_black_alpha45">#73000000</color>
<color name="mrg_black_alpha6">#0f000000</color>
<color name="mrg_black_alpha60">#99000000</color>
<color name="mrg_black_alpha75">#bf000000</color>
<color name="mrg_black_alpha8">#14000000</color>
<color name="mrg_black_blue10">#ff000c1a</color>
<color name="mrg_black_blue24">#ff001c3d</color>
<color name="mrg_black_blue24_alpha24">#3d001c3d</color>
<color name="mrg_black_blue24_alpha8">#14001c3d</color>
<color name="mrg_black_blue30_alpha66">#a800244d</color>
<color name="mrg_black_blue45_alpha10">#1a003973</color>
<color name="mrg_black_lavender_alpha5">#0d00083d</color>
<color name="mrg_blue_200">#ff5c9ce6</color>
<color name="mrg_blue_200_muted">#ff74a2d6</color>
<color name="mrg_blue_300">#ff528bcc</color>
<color name="mrg_blue_400">#ff5181b8</color>
<color name="mrg_blue_600">#ff45678f</color>
<color name="mrg_blue_A300">#ff4772a6</color>
<color name="mrg_blue_A400">#ff346cad</color>
<color name="mrg_blue_A500">#ff3c6a9e</color>
<color name="mrg_blue_A800">#ff28436e</color>
<color name="mrg_blue_facebook">#ff4367a3</color>
<color name="mrg_blue_overlight_1_alpha32">#52add3ff</color>
<color name="mrg_blue_overlight_2_alpha80">#ccc2deff</color>
<color name="mrg_blue_overlight_3">#ff92b2d6</color>
<color name="mrg_brown_gold">#ff9e8f72</color>
<color name="mrg_brown_light">#ffc2b79f</color>
<color name="mrg_charcoal">#ff384452</color>
<color name="mrg_clear">#00000000</color>
<color name="mrg_emerald">#ff4cd964</color>
<color name="mrg_gold_200">#fff4e7c3</color>
<color name="mrg_gold_250">#ffe3d3ac</color>
<color name="mrg_gold_300">#ffd1c097</color>
<color name="mrg_gold_400">#ffab9871</color>
<color name="mrg_gold_500">#ff857250</color>
<color name="mrg_gray_100">#ffe1e3e6</color>
<color name="mrg_gray_1000">#ff0a0a0a</color>
<color name="mrg_gray_20">#fff9f9f9</color>
<color name="mrg_gray_200">#ffc4c8cc</color>
<color name="mrg_gray_300">#ffaaaeb3</color>
<color name="mrg_gray_40">#fff2f3f5</color>
<color name="mrg_gray_400">#ff909499</color>
<color name="mrg_gray_450">#ff7f8285</color>
<color name="mrg_gray_50">#ffebedf0</color>
<color name="mrg_gray_500">#ff76787a</color>
<color name="mrg_gray_600">#ff5d5f61</color>
<color name="mrg_gray_700">#ff454647</color>
<color name="mrg_gray_750">#ff363738</color>
<color name="mrg_gray_800">#ff2c2d2e</color>
<color name="mrg_gray_850">#ff232324</color>
<color name="mrg_gray_900">#ff19191a</color>
<color name="mrg_gray_950">#ff141414</color>
<color name="mrg_gray_A150">#ffd7d8d9</color>
<color name="mrg_gray_A40">#fff5f5f5</color>
<color name="mrg_gray_A970">#ff070708</color>
<color name="mrg_gray_alpha">#b3d7dbe0</color>
<color name="mrg_green">#ff4bb34b</color>
<color name="mrg_green_alpha">#264bb34b</color>
<color name="mrg_lavender_100">#ffe6e9ff</color>
<color name="mrg_lavender_200">#ffccd3ff</color>
<color name="mrg_lavender_300">#ffadb8ff</color>
<color name="mrg_lavender_700">#ff5965b3</color>
<color name="mrg_lavender_800">#ff404980</color>
<color name="mrg_lavender_900">#ff262b4d</color>
<color name="mrg_lavender_A100">#ffe6e5ff</color>
<color name="mrg_lavender_A200">#ffceccff</color>
<color name="mrg_lavender_A300">#ffb0adff</color>
<color name="mrg_lavender_A400">#ff928fff</color>
<color name="mrg_lavender_A700">#ff4b47b2</color>
<color name="mrg_lavender_A800">#ff353380</color>
<color name="mrg_light_gray_2">#ffa9b0b8</color>
<color name="mrg_mint_100">#ffd4fde8</color>
<color name="mrg_mint_200">#ffaee6c9</color>
<color name="mrg_mint_400">#ff6d8f7e</color>
<color name="mrg_mint_500">#ff567867</color>
<color name="mrg_mint_A1_alpha12">#1f006732</color>
<color name="mrg_neon_pink">#fff45fff</color>
<color name="mrg_orange">#ffffa000</color>
<color name="mrg_orange_fire">#fff05c44</color>
<color name="mrg_pink">#ffe6457a</color>
<color name="mrg_pink_alpha">#2e1e000c</color>
<color name="mrg_pink_light">#fffaebeb</color>
<color name="mrg_purple">#ff735ce6</color>
<color name="mrg_purple_light">#ff937ff5</color>
<color name="mrg_raspberry_pink">#ffe03fab</color>
<color name="mrg_raspberry_pink_light">#fff060c0</color>
<color name="mrg_red">#ffe64646</color>
<color name="mrg_red_dark">#ff522e2e</color>
<color name="mrg_red_error">#ffeb4250</color>
<color name="mrg_red_light">#ffff5c5c</color>
<color name="mrg_red_nice">#ffff3347</color>
<color name="mrg_sky_300">#ff529ef4</color>
<color name="mrg_steel_gray_150">#ffb8c1cc</color>
<color name="mrg_steel_gray_200">#ffaeb7c2</color>
<color name="mrg_steel_gray_250">#ffa3adb8</color>
<color name="mrg_steel_gray_300">#ff99a2ad</color>
<color name="mrg_steel_gray_350">#ff9099a3</color>
<color name="mrg_steel_gray_400">#ff818c99</color>
<color name="mrg_steel_gray_500">#ff6d7885</color>
<color name="mrg_steel_gray_600">#ff5a6470</color>
<color name="mrg_turquoise">#ff63b9ba</color>
<color name="mrg_violet">#ff792ec0</color>
<color name="mrg_violet_dark">#ff1f1b2c</color>
<color name="mrg_violet_light">#ffa393f5</color>
<color name="mrg_violet_muted">#ff4b4d61</color>
<color name="mrg_white">#ffffffff</color>
<color name="mrg_white_alpha12">#1fffffff</color>
<color name="mrg_white_alpha15">#26ffffff</color>
<color name="mrg_white_alpha20">#33ffffff</color>
<color name="mrg_white_alpha32">#52ffffff</color>
<color name="mrg_white_alpha40">#66ffffff</color>
<color name="mrg_white_alpha60">#99ffffff</color>
<color name="mrg_white_alpha8">#14ffffff</color>
<color name="mrg_white_blue20">#ffcce4ff</color>
<color name="mrg_white_blue32">#ffadd3ff</color>
<color name="mrg_yellow">#ffffc107</color>
<color name="mrg_yellow_light">#ffffd54f</color>
<color name="mrg_yellow_overlight">#fffff2d6</color>
<color name="mrg_yellow_sunflower">#fffece00</color>
<color name="msg_search_selection">#1e0062d1</color>
<color name="mtrl_btn_bg_color_disabled">#1f000000</color>
<color name="mtrl_btn_text_color_disabled">#61000000</color>
@@ -280,6 +561,7 @@
<color name="mtrl_textinput_default_box_stroke_color">#6b000000</color>
<color name="mtrl_textinput_disabled_color">#1f000000</color>
<color name="mtrl_textinput_filled_box_default_background_color">#0a000000</color>
<color name="mtrl_textinput_focused_box_stroke_color">#00000000</color>
<color name="mtrl_textinput_hovered_box_stroke_color">#de000000</color>
<color name="music_action_button_blue">#ff518bcc</color>
<color name="music_action_button_gray">#ffaaaeb3</color>
@@ -297,7 +579,7 @@
<color name="music_check_button_bg_checked">#1a003973</color>
<color name="music_check_button_bg_normal">#ff5181b8</color>
<color name="music_check_button_bg_pressed">#ff71a1d8</color>
<color name="music_check_button_content_checked">@color/caption_gray</color>
<color name="music_check_button_content_checked">@color/vk_gray_400</color>
<color name="music_check_button_content_normal">#ffffffff</color>
<color name="music_controls_button">#ff45484c</color>
<color name="music_divider_bg">#1f000000</color>
@@ -306,10 +588,10 @@
<color name="music_follow_button_bg_pressed">@color/music_check_button_bg_pressed</color>
<color name="music_link_text_normal">#ff5a8fcc</color>
<color name="music_link_text_pressed">#ff71a1d8</color>
<color name="music_list_item_snippet_color">@color/caption_gray</color>
<color name="music_list_item_snippet_color">@color/vk_gray_400</color>
<color name="music_list_item_title_color">#ff2c2d2e</color>
<color name="music_placeholder_artist_bg">#14001c3d</color>
<color name="music_placeholder_bg">@color/placeholder_background</color>
<color name="music_placeholder_bg">@color/vk_black_blue24_alpha8</color>
<color name="music_placeholder_icon_tint">#ffafbac7</color>
<color name="music_playing_drawable_rect_blue">#ff518bcc</color>
<color name="music_playing_drawable_rect_white">#fffdfeff</color>
@@ -325,10 +607,10 @@
<color name="music_search_suggestion_highlight">#ff909499</color>
<color name="music_search_text_hint">#99ffffff</color>
<color name="music_selectable_bg_normal">#00000000</color>
<color name="music_selectable_bg_pressed">#33999999</color>
<color name="music_selectable_bg_selected">#33999999</color>
<color name="music_selectable_bg_pressed">#39999999</color>
<color name="music_selectable_bg_selected">#39999999</color>
<color name="music_subscription_link">#ff4d88d0</color>
<color name="music_tab_bg_normal">@color/header_blue</color>
<color name="music_tab_bg_normal">@color/vk_blue_400</color>
<color name="music_tab_bg_pressed">#ff71a1d8</color>
<color name="music_tab_text_normal">#b3ffffff</color>
<color name="music_tab_text_selected">#ffffffff</color>
@@ -343,9 +625,34 @@
<color name="muted_blue">#ff45678f</color>
<color name="muted_blue_old">#ff45678f</color>
<color name="muted_blue_opacity40">#6645678f</color>
<color name="myAssistant_background">#ffffffff</color>
<color name="myAssistant_black">#ff000000</color>
<color name="myAssistant_border">#142f3c5f</color>
<color name="myAssistant_brandedBlue">#ff005ff9</color>
<color name="myAssistant_cardBackground">@color/myAssistant_background</color>
<color name="myAssistant_cardBackground2">#ffffffff</color>
<color name="myAssistant_cardStroke">#14000000</color>
<color name="myAssistant_chatDark">#ff2f3c5f</color>
<color name="myAssistant_chatDivider">#fff3f3f3</color>
<color name="myAssistant_contrast">#ff000000</color>
<color name="myAssistant_dialogOverlay">#80ffffff</color>
<color name="myAssistant_dialogScrim">#80000000</color>
<color name="myAssistant_dialogSuggestBackground">#ffebf2fe</color>
<color name="myAssistant_dialogSuggestText">#ff004ac2</color>
<color name="myAssistant_grayBg">#fff3f3f3</color>
<color name="myAssistant_iconBlack">#ff000000</color>
<color name="myAssistant_iconDark">#ff2f3c5f</color>
<color name="myAssistant_iconGray">#ffc2cadc</color>
<color name="myAssistant_iconWhite">#ffffffff</color>
<color name="myAssistant_mainBlue">@color/myAssistant_brandedBlue</color>
<color name="myAssistant_messageBackground">#fff3f3f3</color>
<color name="myAssistant_textGray">#ffa1a9bc</color>
<color name="myAssistant_textGray2">#ffa1a9bc</color>
<color name="myAssistant_white">#ffffffff</color>
<color name="name">#ff4774a8</color>
<color name="narrative_bg_button_color">#a6ffffff</color>
<color name="narrative_more_bg">#ff363738</color>
<color name="neon_pink">@color/vk_neon_pink</color>
<color name="newpost_button_inactive">#ffa0a9b3</color>
<color name="newpost_done_inactive">#ffc8cacc</color>
<color name="newpost_search_background">#fff2f3f5</color>
@@ -355,20 +662,28 @@
<color name="nice_red">#ffff3347</color>
<color name="nice_red_opacity40">#66ff3347</color>
<color name="not_placeholder_color">#ffebebeb</color>
<color name="notification_action_color_filter">@color/secondary_text_default_material_light
</color>
<color name="notification_action_color_filter">@color/androidx_core_secondary_text_default_material_light</color>
<color name="notification_color">#ff5181b8</color>
<color name="notification_icon_bg_color">#ff9e9e9e</color>
<color name="notification_material_background_media_default_color">#ff424242</color>
<color name="numbers_text_color">#ff8c8c8c</color>
<color name="old">#ff24b56d</color>
<color name="orange">#ffffa000</color>
<color name="orange_fire">#fff05c44</color>
<color name="one_video_azur_300">#ff3f8ae0</color>
<color name="one_video_black">#ff000000</color>
<color name="one_video_blue_300">#ff528bcc</color>
<color name="one_video_gray">#ff909499</color>
<color name="one_video_gray_200">#ffc4c8cc</color>
<color name="one_video_steel_gray_400">#ff818c99</color>
<color name="one_video_subtitle_background">#66000000</color>
<color name="one_video_white">#ffffffff</color>
<color name="one_video_white_alpha60">#99ffffff</color>
<color name="orange">@color/vk_orange</color>
<color name="orange_fire">@color/vk_orange_fire</color>
<color name="outline_gray">#ffa0a6ad</color>
<color name="overlay">#fff7f7f7</color>
<color name="pale_grey">#fff0f1f3</color>
<color name="photo_placeholder">#fff2f2f2</color>
<color name="picker_blue">#ff5181b8</color>
<color name="picker_blue">@color/blue_400</color>
<color name="picker_blue_disabled">#ff718198</color>
<color name="picker_blue_pressed">#ff71a1d8</color>
<color name="picker_camera_button">#ff4774a8</color>
@@ -383,14 +698,17 @@
<color name="picker_tab_panel_bg">#fffafafa</color>
<color name="picker_tab_text_normal">#ff888e94</color>
<color name="picker_tab_text_selected">#ff5181b8</color>
<color name="pink">#ffe6457a</color>
<color name="pink_alpha">#2e1e000c</color>
<color name="pink_light">#fffaebeb</color>
<color name="pickup_point_marker_color">@color/vk_azure_300</color>
<color name="pin_keyboard_selected">#ffe6ebf1</color>
<color name="pink">@color/vk_pink</color>
<color name="pink_alpha">@color/vk_pink_alpha</color>
<color name="pink_light">@color/vk_pink_light</color>
<color name="placeholder_background">#12001c3d</color>
<color name="placeholder_foreground">#4000244d</color>
<color name="placeholder_icon_background_system_theme">@color/vk_black_blue24_alpha8</color>
<color name="post_dark_gray">#ff757c85</color>
<color name="post_light_gray">#fff5f6f7</color>
<color name="post_suggest_blue">@color/accent_blue</color>
<color name="post_suggest_blue">@color/vk_blue_300</color>
<color name="post_suggest_green">#ff62b362</color>
<color name="post_suggest_orange">#ffeb9823</color>
<color name="post_suggest_purple">#ffa351cc</color>
@@ -409,13 +727,20 @@
<color name="profile_icon_tint_light">#ffa9b2be</color>
<color name="profile_image_bg">#ffc9cdd1</color>
<color name="prompt_bg_color">#8f000000</color>
<color name="red">#ffe64646</color>
<color name="red_dark">#ff522e2e</color>
<color name="red_error">#ffeb4250</color>
<color name="purple">@color/vk_purple</color>
<color name="purple_light">@color/vk_purple_light</color>
<color name="raspberry_pink">@color/vk_raspberry_pink</color>
<color name="raspberry_pink_light">@color/vk_raspberry_pink_light</color>
<color name="recognition_background_color">#66ffffff</color>
<color name="recognition_border_color">#1e000000</color>
<color name="recognition_progress_color">@color/vk_white</color>
<color name="red">@color/vk_red</color>
<color name="red_dark">@color/vk_red_dark</color>
<color name="red_error">@color/vk_red_error</color>
<color name="red_error_alpha10">#19eb4250</color>
<color name="red_error_alpha15">#26eb4250</color>
<color name="red_light">#ffff5c5c</color>
<color name="red_nice">#ffff3347</color>
<color name="red_light">@color/vk_red_light</color>
<color name="red_nice">@color/vk_red_nice</color>
<color name="ripple_material_dark">#33ffffff</color>
<color name="ripple_material_light">#1f000000</color>
<color name="secondary_text_default_material_dark">#b3ffffff</color>
@@ -436,17 +761,20 @@
<color name="sharing_white_btn_pressed">#ffdddddd</color>
<color name="sharing_white_highlighter">#50ffffff</color>
<color name="single_video_placeholder">#ff262729</color>
<color name="sky_300">#ff71aaeb</color>
<color name="sky_300">@color/vk_sky_300</color>
<color name="slate_grey_87">#de5a6166</color>
<color name="spb_default_color">#ff33b5e5</color>
<color name="splash_background">#fff1f2f6</color>
<color name="status_bar_bg">#44000000</color>
<color name="steel_gray_150">#ffb8c1cc</color>
<color name="steel_gray_200">#ffaeb7c2</color>
<color name="steel_gray_250">#ffa3adb8</color>
<color name="steel_gray_300">#ff99a2ad</color>
<color name="steel_gray_350">#ff9099a3</color>
<color name="steel_gray_400">#ff818c99</color>
<color name="steel_gray_500">#ff6d7885</color>
<color name="steel_gray_150">@color/vk_steel_gray_150</color>
<color name="steel_gray_200">@color/vk_steel_gray_200</color>
<color name="steel_gray_250">@color/vk_steel_gray_250</color>
<color name="steel_gray_300">@color/vk_steel_gray_300</color>
<color name="steel_gray_350">@color/vk_steel_gray_350</color>
<color name="steel_gray_400">@color/vk_steel_gray_400</color>
<color name="steel_gray_500">@color/vk_steel_gray_500</color>
<color name="steel_gray_600">@color/vk_steel_gray_600</color>
<color name="stopwatch_text_color">@color/vk_white</color>
<color name="story_clickable_sticker_bright_hint">#88808080</color>
<color name="story_clickable_transparent_hint">#88ffffff</color>
<color name="story_dialog_background">#4d000000</color>
@@ -495,15 +823,14 @@
<color name="tip_background">#ff5a9eff</color>
<color name="toolbar_blueDialog_statusBarColorBack">#ff3b5f87</color>
<color name="toolbar_blueDialog_statusBarColorFront">#00000000</color>
<color name="toolbar_blue_background">@color/header_blue</color>
<color name="toolbar_blue_background">@color/vk_blue_400</color>
<color name="toolbar_blue_searchViewTextColorHint">#99ffffff</color>
<color name="toolbar_blue_statusBarColorBack">@color/header_blue</color>
<color name="toolbar_blue_statusBarColorBack">@color/vk_blue_400</color>
<color name="toolbar_blue_statusBarColorFront">#44000000</color>
<color name="toolbar_blue_textColorPrimary">@color/white</color>
<color name="toolbar_blue_textColorSecondary">@color/white</color>
<color name="toolbar_milk_background">#fff7f7f7</color>
<color name="toolbar_milk_searchViewTextColorHint">@color/toolbar_milk_textColorSecondary
</color>
<color name="toolbar_milk_searchViewTextColorHint">@color/toolbar_milk_textColorSecondary</color>
<color name="toolbar_milk_statusBarColorBack">@color/toolbar_milk_background</color>
<color name="toolbar_milk_statusBarColorFront">#00000000</color>
<color name="toolbar_milk_textColorPrimary">#ff444547</color>
@@ -518,47 +845,51 @@
<color name="tooltip_background_dark">#e6616161</color>
<color name="tooltip_background_light">#e6ffffff</color>
<color name="transparent_black">#7f000000</color>
<color name="turquoise">#ff63b9ba</color>
<color name="turquoise">@color/vk_turquoise</color>
<color name="tw__blue_default">#ff5baaf4</color>
<color name="tw__blue_pressed">#ff4186c8</color>
<color name="tw__light_gray">#ffccd6dd</color>
<color name="tw__solid_white">#ffffffff</color>
<color name="users_discover_age_color">#ccffffff</color>
<color name="video_blue">#ff91bff2</color>
<color name="video_dark_while">#44ffffff</color>
<color name="video_feed_background">#ff141414</color>
<color name="video_light_white">#67ffffff</color>
<color name="video_progress_background_color">#bf000000</color>
<color name="video_restriction_blur_color_filter">#3d1f1f1f</color>
<color name="video_subtitle_background">#66000000</color>
<color name="video_white">#ffffffff</color>
<color name="viewer_retry_button_text_color">#ff528bcc</color>
<color name="viewer_retry_description_text_color">#ffffffff</color>
<color name="violet">#ff792ec0</color>
<color name="violet_dark">#ff1f1b2c</color>
<color name="violet_light">#ffa393f5</color>
<color name="violet_muted">#ff4b4d61</color>
<color name="violet">@color/vk_violet</color>
<color name="violet_dark">@color/vk_violet_dark</color>
<color name="violet_light">@color/vk_violet_light</color>
<color name="violet_muted">@color/vk_violet_muted</color>
<color name="vk_azure_100_muted">#ff67a5eb</color>
<color name="vk_azure_300">#ff3f8ae0</color>
<color name="vk_azure_300">#ff2688eb</color>
<color name="vk_azure_350">#ff2975cc</color>
<color name="vk_azure_A100">#ff2787f5</color>
<color name="vk_azure_A400">#ff4986cc</color>
<color name="vk_azure_A100">#ff0077ff</color>
<color name="vk_azure_A400">#ff2d81e0</color>
<color name="vk_black">#ff000000</color>
<color name="vk_black_alpha05">#0d000000</color>
<color name="vk_black_alpha12">#1f000000</color>
<color name="vk_black_alpha15">#26000000</color>
<color name="vk_black_alpha16">#28000000</color>
<color name="vk_black_alpha20">#4d000000</color>
<color name="vk_black_alpha20">#34000000</color>
<color name="vk_black_alpha24">#3d000000</color>
<color name="vk_black_alpha35">#59000000</color>
<color name="vk_black_alpha45">#73000000</color>
<color name="vk_black_alpha6">#0f000000</color>
<color name="vk_black_alpha60">#99000000</color>
<color name="vk_black_alpha75">#bf000000</color>
<color name="vk_black_alpha8">#14000000</color>
<color name="vk_black_blue10">#ff000c1a</color>
<color name="vk_black_blue24">#ff001d3d</color>
<color name="vk_black_blue24">#ff001c3d</color>
<color name="vk_black_blue24_alpha24">#3d001c3d</color>
<color name="vk_black_blue24_alpha8">#14001d3d</color>
<color name="vk_black_blue24_alpha8">#14001c3d</color>
<color name="vk_black_blue30_alpha66">#a800244d</color>
<color name="vk_black_blue45_alpha10">#1a003973</color>
<color name="vk_black_lavender_alpha5">#0d00083d</color>
<color name="vk_blue_200">#ff5c9ce6</color>
<color name="vk_blue_200_muted">#ff74a2d6</color>
<color name="vk_blue_300">#ff528bcc</color>
@@ -576,12 +907,14 @@
<color name="vk_brown_light">#ffc2b79f</color>
<color name="vk_charcoal">#ff384452</color>
<color name="vk_clear">#00000000</color>
<color name="vk_emerald">#ff4cd964</color>
<color name="vk_gold_100">#fffffbf2</color>
<color name="vk_gold_150">#fffff1d4</color>
<color name="vk_gold_200">#fff4e4be</color>
<color name="vk_gold_300">#ffbbaa84</color>
<color name="vk_gold_400">#ff9e8d6b</color>
<color name="vk_gold_500">#ff7a6c4f</color>
<color name="vk_gold_200">#fff4e7c3</color>
<color name="vk_gold_250">#ffe3d3ac</color>
<color name="vk_gold_300">#ffd1c097</color>
<color name="vk_gold_400">#ffab9871</color>
<color name="vk_gold_500">#ff857250</color>
<color name="vk_gray_100">#ffe1e3e6</color>
<color name="vk_gray_1000">#ff0a0a0a</color>
<color name="vk_gray_20">#fff9f9f9</color>
@@ -604,18 +937,45 @@
<color name="vk_gray_A970">#ff070708</color>
<color name="vk_gray_alpha">#b3d7dbe0</color>
<color name="vk_green">#ff4bb34b</color>
<color name="vk_green_alpha">#264bb34b</color>
<color name="vk_green_call">@color/vk_green</color>
<color name="vk_header_blue">#ff5181b8</color>
<color name="vk_lavender_100">#ffe6e9ff</color>
<color name="vk_lavender_200">#ffccd3ff</color>
<color name="vk_lavender_300">#ffadb8ff</color>
<color name="vk_lavender_700">#ff5965b3</color>
<color name="vk_lavender_800">#ff404980</color>
<color name="vk_lavender_900">#ff262b4d</color>
<color name="vk_lavender_A100">#ffe6e5ff</color>
<color name="vk_lavender_A200">#ffceccff</color>
<color name="vk_lavender_A300">#ffb0adff</color>
<color name="vk_lavender_A400">#ff928fff</color>
<color name="vk_lavender_A700">#ff4b47b2</color>
<color name="vk_lavender_A800">#ff353380</color>
<color name="vk_light_gray_2">#ffa9b0b8</color>
<color name="vk_mint_100">#ffd4fde8</color>
<color name="vk_mint_200">#ffaee6c9</color>
<color name="vk_mint_400">#ff6d8f7e</color>
<color name="vk_mint_500">#ff567867</color>
<color name="vk_mint_A1_alpha12">#1f006732</color>
<color name="vk_neon_pink">#fff45fff</color>
<color name="vk_orange">#ffffa000</color>
<color name="vk_orange_fire">#fff05c44</color>
<color name="vk_pink">#ffe6457a</color>
<color name="vk_pink_alpha">#2e1e000c</color>
<color name="vk_pink_light">#fffaebeb</color>
<color name="vk_purple">#ff735ce6</color>
<color name="vk_purple_light">#ff937ff5</color>
<color name="vk_raspberry_pink">#ffe03fab</color>
<color name="vk_raspberry_pink_light">#fff060c0</color>
<color name="vk_red">#ffe64646</color>
<color name="vk_red_call">@color/vk_red</color>
<color name="vk_red_dark">#ff522e2e</color>
<color name="vk_red_error">#ffeb4250</color>
<color name="vk_red_light">#ffff4e5f</color>
<color name="vk_red_light">#ffff5c5c</color>
<color name="vk_red_nice">#ffff3347</color>
<color name="vk_sky_300">#ff71aaeb</color>
<color name="vk_silver_call">@color/vk_steel_gray_400</color>
<color name="vk_sky_300">#ff529ef4</color>
<color name="vk_steel_gray_150">#ffb8c1cc</color>
<color name="vk_steel_gray_200">#ffaeb7c2</color>
<color name="vk_steel_gray_250">#ffa3adb8</color>
@@ -623,25 +983,30 @@
<color name="vk_steel_gray_350">#ff9099a3</color>
<color name="vk_steel_gray_400">#ff818c99</color>
<color name="vk_steel_gray_500">#ff6d7885</color>
<color name="vk_steel_gray_600">#ff5a6470</color>
<color name="vk_terms_link">#ff528bcc</color>
<color name="vk_tip_background">#ff5a9eff</color>
<color name="vk_turquoise">#ff63b9ba</color>
<color name="vk_ui_navigation_background">#33282b2e</color>
<color name="vk_ui_navigation_background_pressed">#51282b2e</color>
<color name="vk_ui_navigation_toolbar_controls_type_divider">#3dffffff</color>
<color name="vk_violet">#ff792ec0</color>
<color name="vk_violet_dark">#ff1f1b2c</color>
<color name="vk_violet_light">#ff928dab</color>
<color name="vk_violet_light">#ffa393f5</color>
<color name="vk_violet_muted">#ff4b4d61</color>
<color name="vk_white">#ffffffff</color>
<color name="vk_white_alpha12">#1fffffff</color>
<color name="vk_white_alpha15">#26ffffff</color>
<color name="vk_white_alpha20">#4dffffff</color>
<color name="vk_white_alpha20">#33ffffff</color>
<color name="vk_white_alpha32">#52ffffff</color>
<color name="vk_white_alpha40">#66ffffff</color>
<color name="vk_white_alpha60">#99ffffff</color>
<color name="vk_white_alpha8">#14ffffff</color>
<color name="vk_white_blue20">#ffcce4ff</color>
<color name="vk_white_blue32">#ffadd3ff</color>
<color name="vk_yellow">#ffffc107</color>
<color name="vk_yellow_light">#ffffd54f</color>
<color name="vk_yellow_overlight">#fffff2d6</color>
<color name="vk_yellow_sunflower">#fffece00</color>
<color name="vkim_administration_title">#ff4d9950</color>
<color name="vkim_background_dim">#66000000</color>
@@ -659,17 +1024,36 @@
<color name="vkim_ripple_dark">#20444444</color>
<color name="vkim_ripple_light">#33ffffff</color>
<color name="vkim_white_semitransparent">#80ffffff</color>
<color name="vkrabota_brand_background">#ff8272c2</color>
<color name="voip_mic_base_color_disabled">@color/vk_black</color>
<color name="voip_mic_base_color_enabled">@color/vk_white</color>
<color name="voip_mic_sound_color">@color/vk_emerald</color>
<color name="voip_notification_bg_color">@color/vk_gray_800</color>
<color name="voip_notification_name_text_color">@color/vk_gray_100</color>
<color name="wallet_bright_foreground_disabled_holo_light">#ffb2b2b2</color>
<color name="wallet_bright_foreground_holo_dark">#fff3f3f3</color>
<color name="wallet_bright_foreground_holo_light">#ff000000</color>
<color name="wallet_dim_foreground_disabled_holo_dark">#80bebebe</color>
<color name="wallet_dim_foreground_holo_dark">#ffbebebe</color>
<color name="wallet_highlighted_text_holo_dark">#6633b5e5</color>
<color name="wallet_highlighted_text_holo_light">#6633b5e5</color>
<color name="wallet_hint_foreground_holo_dark">#ff808080</color>
<color name="wallet_hint_foreground_holo_light">#ff808080</color>
<color name="wallet_holo_blue_light">#ff33b5e5</color>
<color name="wallet_link_text_light">#ff0000ee</color>
<color name="waveform_light">#ffbacde3</color>
<color name="white">#ffffffff</color>
<color name="white">@color/vk_white</color>
<color name="white_alpha10">#02ffffff</color>
<color name="white_alpha12">#1fffffff</color>
<color name="white_alpha15">#26ffffff</color>
<color name="white_alpha20">#4dffffff</color>
<color name="white_alpha12">@color/vk_white_alpha12</color>
<color name="white_alpha15">@color/vk_white_alpha15</color>
<color name="white_alpha20">@color/vk_white_alpha20</color>
<color name="white_alpha30">#4cffffff</color>
<color name="white_alpha60">#99ffffff</color>
<color name="white_alpha32">@color/vk_white_alpha32</color>
<color name="white_alpha40">#66ffffff</color>
<color name="white_alpha60">@color/vk_white_alpha60</color>
<color name="white_alpha8">#15ffffff</color>
<color name="white_blue20">#ffcce4ff</color>
<color name="white_blue32">#ffadd3ff</color>
<color name="white_blue20">@color/vk_white_blue20</color>
<color name="white_blue32">@color/vk_white_blue32</color>
<color name="white_highlighter">#25ffffff</color>
<color name="white_highlighter_ripple">#50ffffff</color>
<color name="white_opacity10">#02ffffff</color>
@@ -682,8 +1066,9 @@
<color name="window_bg">#ffffffff</color>
<color name="window_bg_black">#ff000000</color>
<color name="window_bg_transparent">#00000000</color>
<color name="yellow">#ffffc107</color>
<color name="yellow_light">#ffffd54f</color>
<color name="yellow_sunflower">#fffece00</color>
<color name="yellow">@color/vk_yellow</color>
<color name="yellow_light">@color/vk_yellow_light</color>
<color name="yellow_overlight">@color/vk_yellow_overlight</color>
<color name="yellow_sunflower">@color/vk_yellow_sunflower</color>
<color name="iclauncher">#fffcfcfc</color>
</resources>
+7 -2
View File
@@ -5099,7 +5099,7 @@ The messages won't be marked as read until you accept the request."</string>
<string name="vkim_onboarding_dialogs_grant_contacts_permission">Allow access to contacts</string>
<string name="vkim_onboarding_dialogs_syncing">Syncing contacts</string>
<string name="vkim_onboarding_dialogs_title">No chats</string>
<string name="vkim_one_msg_is_expired_description">This message self-destructed after a certain amount of time. You can only send these kinds of messages on VK Me.</string>
<string name="vkim_one_msg_is_expired_description">This message self-destructed after a certain amount of time.</string>
<string name="vkim_one_msg_is_expired_title">Self-destructing message</string>
<string name="vkim_one_time_story_dialog_description">This story self-destructed after being viewed. You can send these kinds of stories on VK Me.</string>
<string name="vkim_one_time_story_dialog_title">Self-destructing story</string>
@@ -5284,7 +5284,7 @@ into the search bar"</string>
<string name="vkim_share_title">Share</string>
<string name="vkim_share_to_casper_chat">"In phantom chats, messages self-destruct an hour after they're sent"</string>
<string name="vkim_share_waiting_for_network">Waiting for network…</string>
<string name="vkim_some_msg_is_expired_description">These messages self-destructed after a certain amount of time. You can only send these kinds of messages on VK Me.</string>
<string name="vkim_some_msg_is_expired_description">These messages self-destructed after a certain amount of time.</string>
<string name="vkim_some_msg_is_expired_title">Self-destructing messages</string>
<string name="vkim_stickers_pack_description">To get the %1$s sticker pack, you need to download VK Me.</string>
<string name="vkim_stickers_pack_description_default">To get this sticker pack, you need to install VK Me.</string>
@@ -5543,6 +5543,8 @@ Does not affect vk.cc links"</string>
<string name="experts">Experts</string>
<string name="DNT_OFF">Disable Do Not Type</string>
<string name="DNT_ON">Enable Do Not Type</string>
<string name="pinmsg">Pin chat</string>
<string name="unpinmsg">Unpin chat</string>
<string name="accounts">Accounts</string>
<string name="act_bot">For Bots/Groups</string>
<string name="act_cnv">For Conversations</string>
@@ -5952,6 +5954,9 @@ May look like a fake leaving the online"</string>
<string name="wallpapers">Wallpapers</string>
<string name="translator">Translate</string>
<string name="readto">Read to</string>
<string name="vkiddisable">Disable protection</string>
<string name="vkidsumm">VK has started blocking the use of third-party applications, so for the stable operation of all parts of the application, it is necessary to disable Protection from suspicious applications \n\nVK ID -> Security and Login -> Protection from suspicious applications</string>
</resources>
+10
View File
@@ -105,6 +105,11 @@
android:title="Глобальный обход онлайна" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/privacy_vtl">
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="savemsgsett"
android:summary="Сохранять положение тумблеров в настройках сообщений"
android:title="Сохранять настройки сообщений" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="screenshotdetect"
@@ -115,5 +120,10 @@
android:key="awayphp"
android:summary="@string/vtlawayphpsummary"
android:title="@string/vtlawayphp" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="hideDeviceInfo"
android:summary="Отключить отправку информации об устройстве пользователя и вашем местоположении"
android:title="Отключить отправку метрики" />
</PreferenceCategory>
</PreferenceScreen>

Some files were not shown because too many files have changed in this diff Show More