Compare commits

..
Author SHA1 Message Date
gdlbo 86041e6031 invert exceptions filters 2023-06-19 01:40:22 +03:00
gdlbo e140ce2661 fixed monet msg colors 2023-06-19 00:46:27 +03:00
gdlbo f6f15132a2 Update build.yml 2023-06-18 18:35:53 +03:00
gdlbo e73751ecf3 Update build.yml 2023-06-18 18:26:12 +03:00
gdlbo 3c0516b4cd cleanup ThemesUtils.java 2023-06-18 18:20:48 +03:00
gdlbo 38d9f4a818 update gradle 2023-06-18 18:20:25 +03:00
gdlbo 207fa4f2e7 fixed memories vkui 2023-06-18 02:38:39 +03:00
abslikeandabslike f9f778b8f4 Updating light nonmilkshake theme (#1374)
Co-authored-by: abslike <abslike@vk.com>
2023-06-17 21:46:13 +03:00
gdlbo 962dcdec67 fixed search engine issue 2023-06-16 22:45:02 +03:00
gdlbo 486026b8aa updated translations 2023-06-14 17:36:34 +03:00
gdlbo e78d08fb94 added frag title for data sett 2023-06-12 16:32:47 +03:00
gdlbo a5e81dbd87 some data sett updated 2023-06-12 16:30:22 +03:00
gdlbo 49051dae9a added filtered buttons for profile #767 2023-06-12 15:28:37 +03:00
gdlbo 94236c87e3 fix incorrect sig 2023-06-10 20:32:06 +03:00
gdlbo 449ba8c768 cleanup NewsFeedFiltersUtils.java 2023-06-10 20:08:28 +03:00
gdlbo 0da81c01e9 fixed monet theme applying 2023-06-10 20:08:13 +03:00
gdlbo b4a0b7e1ea Fixed false filtering of users' own messages 2023-06-10 18:06:13 +03:00
abslikeandabslike f2209eca49 Updating Light and Dark milkshake monet theme (#1359)
Co-authored-by: abslike <abslike@vk.com>
2023-06-10 15:08:13 +03:00
gdlbo 4a004971c6 Update CatalogJsonInjector.java 2023-05-30 19:25:30 +03:00
gdlbo e400b8761c fixed false injection cache playlist in old audio catalog 2023-05-30 17:17:59 +03:00
Vologhat ff8e7b7f41 fix incorrect displaying of selected image searcher 2023-05-30 12:31:21 +03:00
gdlbo 2c501606be amoled vkui issues fix 2023-05-28 18:02:09 +03:00
gdlbo 73420fe1c4 updated vkui injection for new versions 2023-05-28 15:50:11 +03:00
Vologhat 337f81346c replace microsoft icon to bing icon 2023-05-27 20:13:04 +03:00
Vologhat 06f9a4545b added sauceNAO and trace.moe icons 2023-05-27 14:36:09 +03:00
gdlbo fa99df93c4 refactoring some code 2023-05-26 21:03:23 +03:00
Vologhat adcd2472d5 rewrite and fix PhotoViewer hook
- optimize code
- create SearchEngine enum for image searchers
- fix "search photo" on non-monet theme
- fix icon colors in photo viewer context menu
2023-05-26 16:46:43 +03:00
gdlbo 7527b9a07e added update button for all non-dev users 2023-05-26 14:47:49 +03:00
gdlbo 800c223baa fixed dropdown monet icons in menu 2023-05-26 14:37:06 +03:00
gdlbo d1123d3ccf Update MediaNative.java 2023-05-25 23:18:15 +03:00
gdlbo f61fc99d9c Revert "upgraded voice bitrate"
This reverts commit 64303b1709.
2023-05-25 23:04:09 +03:00
gdlbo 60653cc739 medianative converted to java 2023-05-25 23:03:00 +03:00
gdlbo d25bba10b0 fixed profiles crash 2023-05-25 17:06:48 +03:00
gdlbo 3b67ecaa5e deleted voip libs
-10 mb
2023-05-25 17:06:29 +03:00
gdlbo 6600f32392 some settings update 2023-05-25 16:48:04 +03:00
gdlbo 64303b1709 upgraded voice bitrate
opus_encoder_ctl

16000 -> 48000
2023-05-24 20:34:57 +03:00
gdlbo 5c7e50d61e delete pin fix
good fix
2023-05-24 15:18:39 +03:00
gdlbo f68ad105a6 Update Preferences.java 2023-05-24 01:32:02 +03:00
gdlbo 164479da1d disabled profiles/groups rename 2023-05-24 01:00:53 +03:00
gdlbo d93bf41d28 fixed discover bug 2023-05-23 23:43:23 +03:00
gdlbo 38a2b3f2b2 cleanup banner msg code 2023-05-23 23:17:20 +03:00
gdlbo 342534676c fixed another strange issue with banners 2023-05-23 23:08:53 +03:00
gdlbo 56a6a6de03 fixed messages issue 2023-05-23 23:03:10 +03:00
gdlbo d1445c2801 disable language change for miui
https://xiaomi.eu/community/threads/miui-14-per-app-language-support.69022

china number one!!!!!!!!!
2023-05-23 22:28:13 +03:00
66 changed files with 1874 additions and 2838 deletions
+2 -2
View File
@@ -21,10 +21,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up JDK 14
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '14'
java-version: '17'
distribution: 'adopt'
- uses: actions/checkout@v3
+3
View File
@@ -72,6 +72,9 @@ android {
}
namespace 'ru.vtosters.lite'
ndkVersion '25.2.9519653'
buildFeatures {
aidl true
}
}
dependencies {
@@ -0,0 +1,502 @@
package com.vk.medianative;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Process;
import android.os.*;
import android.util.Log;
import androidx.annotation.Keep;
import androidx.annotation.Nullable;
import com.facebook.soloader.SoLoader;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.util.Scanner;
public final class MediaNative {
private static final String a = NativeMediaEncoder.class.getSimpleName();
private static final Object f17443d = new Object();
@SuppressLint("StaticFieldLeak")
@Keep
public static volatile Context context;
private static boolean isMediaLoaded = false;
private static boolean isMediaMasksLoaded = false;
public static int HSLToIntRGB(float f2, float f3, float f4) {
int[] iArr = new int[3];
waitForContext();
nativeHSLToRGB(f2, f3, f4, iArr);
return Color.argb(255, iArr[0], iArr[1], iArr[2]);
}
public static void HSLToRGB(float f2, float f3, float f4, int[] iArr) {
waitForContext();
nativeHSLToRGB(f2, f3, f4, iArr);
}
public static int HSVToIntRGB(float f2, float f3, float f4) {
int[] iArr = new int[3];
waitForContext();
nativeHSVToRGB(f2, f3, f4, iArr);
return Color.argb(255, iArr[0], iArr[1], iArr[2]);
}
public static void HSVToRGB(float f2, float f3, float f4, int[] iArr) {
waitForContext();
nativeHSVToRGB(f2, f3, f4, iArr);
}
public static int LabToIntRGB(float f2, float f3, float f4) {
int[] iArr = new int[3];
waitForContext();
nativeLabToRGB(f2, f3, f4, iArr);
return Color.argb(255, iArr[0], iArr[1], iArr[2]);
}
public static void LabToRGB(float f2, float f3, float f4, int[] iArr) {
waitForContext();
nativeLabToRGB(f2, f3, f4, iArr);
}
public static void RGBToHSL(int i, int i2, int i3, float[] fArr) {
waitForContext();
nativeRGBToHSL(i, i2, i3, fArr);
}
public static void RGBToHSV(int i, int i2, int i3, float[] fArr) {
waitForContext();
nativeRGBToHSV(i, i2, i3, fArr);
}
public static void RGBToLab(int i, int i2, int i3, float[] fArr) {
waitForContext();
nativeRGBToLab(i, i2, i3, fArr);
}
public static long animationPlayerCreate(String str, int i, int i2, boolean z) {
waitForContext();
return nativeAnimationPlayerCreate(str, i, i2, z);
}
public static int animationPlayerDecode(long j, Bitmap bitmap) {
waitForContext();
return nativeAnimationPlayerDecode(j, bitmap);
}
public static int animationPlayerGetSize(long j) {
waitForContext();
return nativeAnimationPlayerGetSize(j);
}
public static void animationPlayerRelease(long j) {
waitForContext();
nativeAnimationPlayerRelease(j);
}
public static boolean animationPlayerSeek(long j, int i) {
waitForContext();
return nativeAnimationPlayerSeek(j, i);
}
public static void applyCurveAndSaturationBitmap(Bitmap bitmap, int[] iArr, float f2) {
waitForContext();
nativeCurveSaturation(bitmap, iArr, f2, Runtime.getRuntime().availableProcessors());
}
public static long audioGetTotalPcmDuration() {
waitForContext();
return nativeAudioGetTotalPcmDuration();
}
public static byte[] audioGetWaveform(short[] sArr, int i) {
waitForContext();
return nativeAudioGetWaveform(sArr, i);
}
public static int audioIsOpusFile(String str) {
waitForContext();
return nativeAudioIsOpusFile(str);
}
public static void audioReadOpusFile(ByteBuffer byteBuffer, int i, int[] iArr) {
waitForContext();
nativeAudioReadOpusFile(byteBuffer, i, iArr);
}
public static int audioSeekOpusFile(float f2) {
waitForContext();
return nativeAudioSeekOpusFile(f2);
}
public static int audioStartRecord(String str) { // need to hack
waitForContext();
return nativeAudioStartRecord(str);
}
public static void audioStopRecord() { // need to hack
waitForContext();
nativeAudioStopRecord();
}
public static int audioWriteFrame(ByteBuffer byteBuffer, int i) { // need to hack
waitForContext();
return nativeAudioWriteFrame(byteBuffer, i);
}
private static void waitForContext() {
synchronized (f17443d) {
if (context == null) {
try {
f17443d.wait();
} catch (InterruptedException e2) {
Log.e(a, "Interrupted while waiting for context", e2);
}
}
}
}
public static void blurBitmap(Bitmap bitmap, int i) {
waitForContext();
nativeBlur(bitmap, i);
}
private static String c() {
return getProcMaps(String.valueOf(Process.myPid()));
}
public static void cameraProcessorCreate() {
waitForContext();
nativeProcessorCreate();
}
public static boolean cameraProcessorDo(byte[] bArr, long[] jArr) {
waitForContext();
return nativeProcessorDo(bArr, jArr);
}
public static int cameraProcessorGetVersion() {
waitForContext();
return nativeProcessorGetVersion();
}
public static boolean cameraProcessorInit(String str, int i, int i2) {
waitForContext();
return nativeProcessorInit(str, i, i2);
}
public static boolean cameraProcessorLoad(String str, boolean z) {
waitForContext();
return nativeProcessorLoad(str, z);
}
public static void cameraProcessorMouseTap(int i, float f2, float f3) {
waitForContext();
nativeProcessorMouseTap(i, f2, f3);
}
public static void cameraProcessorRelease() {
waitForContext();
nativeProcessorRelease();
}
public static void colorCorrectionBitmap(Bitmap bitmap, Bitmap bitmap2, float[] fArr) {
waitForContext();
nativeColorCorrection(bitmap, bitmap2, fArr, fArr.length, Runtime.getRuntime().availableProcessors());
}
public static byte[] compressBitmapJpeg(Bitmap bitmap, int i) {
waitForContext();
return nativeJpegTurboCompress(bitmap, i);
}
public static String createAllInOneShader() {
waitForContext();
return nativeAllInOneShader();
}
public static void createCurve(int[] iArr, int[] iArr2, int[] iArr3, int[] iArr4, int[] iArr5, float f2, float f3, float f4, float f5, float f6) {
waitForContext();
nativeCreateCurve(iArr, iArr2, iArr3, iArr4, iArr5, f2, f3, f4, f5, f6);
}
public static String createOneInAllShader() {
waitForContext();
return nativeOneInAllShader();
}
private static String d() {
return getProcMaps("self");
}
public static String dump() {
return "LD_LIBRARY_PATH:\n" + SoLoader.makeLdLibraryPath() + "\nSELF_MAPS:\n" + d() + "\nPID_MAPS:\n" + c() + "\n";
}
private static void e() {
isMediaMasksLoaded = NativeLibLoader.loadLibrary("vkmediamasks");
}
public static void enhanceBitmap(Bitmap bitmap, float f2) {
waitForContext();
nativeEnhance(bitmap, f2, Runtime.getRuntime().availableProcessors());
}
private static void loadVKMediaLibs() {
if (isMediaLoaded) {
return;
}
NativeLibLoader.loadLibrary("ffmpeg");
isMediaLoaded = NativeLibLoader.loadLibrary("vkmedia");
isMediaLoaded = NativeLibLoader.loadLibrary("vkmediaencoder");
}
public static void flipHorizontallyBitmap(Bitmap bitmap) {
waitForContext();
nativeFlipHorizontally(bitmap);
}
public static void flipVerticallyBitmap(Bitmap bitmap) {
waitForContext();
nativeFlipVertically(bitmap);
}
public static void generateHistogram(Bitmap bitmap, int[] iArr, int[] iArr2, int[] iArr3, int[] iArr4) {
waitForContext();
nativeHistogram(bitmap, iArr, iArr2, iArr3, iArr4);
}
public static void init(Context context2) {
synchronized (f17443d) {
context = context2;
SoLoader.init(context2, false);
NativeLibLoader.loadLibrary("gnustl_shared");
NativeLibLoader.loadLibrary("vkchronicle");
loadVKMediaLibs();
f17443d.notifyAll();
}
}
public static void intRGBToHSL(int i, float[] fArr) {
waitForContext();
nativeRGBToHSL(Color.red(i), Color.green(i), Color.blue(i), fArr);
}
public static void intRGBToHSV(int i, float[] fArr) {
waitForContext();
nativeRGBToHSV(Color.red(i), Color.green(i), Color.blue(i), fArr);
}
public static void intRGBToLab(int i, float[] fArr) {
waitForContext();
nativeRGBToLab(Color.red(i), Color.green(i), Color.blue(i), fArr);
}
public static boolean isAsus() {
return "asus".equalsIgnoreCase(Build.MANUFACTURER);
}
public static boolean isMediaSupported() {
if (!isMediaMasksLoaded) {
e();
}
return isMediaMasksLoaded;
}
public static boolean isX86() {
try {
String str = Build.SUPPORTED_ABIS[0];
if (str != null) {
return str.startsWith("x86");
}
return false;
} catch (Throwable unused) {
return false;
}
}
public static void lookupBitmap(Bitmap bitmap, Bitmap bitmap2) {
waitForContext();
nativeLookup(bitmap, bitmap2, Runtime.getRuntime().availableProcessors());
}
public static long mediaEncoderCreate(MediaEncoderSettings mediaEncoderSettings) {
waitForContext();
return nativeCreateEncoder(mediaEncoderSettings);
}
public static int mediaEncoderDoEncode(long j) {
waitForContext();
return nativeDoEncode(j);
}
public static void mediaEncoderDoRelease(long j) {
waitForContext();
nativeReleaseEncoder(j);
}
private static native String nativeAllInOneShader();
private static native long nativeAnimationPlayerCreate(String str, int i, int i2, boolean z);
private static native int nativeAnimationPlayerDecode(long j, Bitmap bitmap);
private static native int nativeAnimationPlayerGetSize(long j);
private static native void nativeAnimationPlayerRelease(long j);
private static native boolean nativeAnimationPlayerSeek(long j, int i);
private static native long nativeAudioGetTotalPcmDuration();
private static native byte[] nativeAudioGetWaveform(short[] sArr, int i);
private static native int nativeAudioIsOpusFile(String str);
private static native int nativeAudioOpenOpusFile(String str);
private static native void nativeAudioReadOpusFile(ByteBuffer byteBuffer, int i, int[] iArr);
private static native int nativeAudioSeekOpusFile(float f2);
private static native int nativeAudioStartRecord(String str);
private static native void nativeAudioStopRecord();
private static native int nativeAudioWriteFrame(ByteBuffer byteBuffer, int i);
private static native void nativeBlur(Bitmap bitmap, int i);
private static native void nativeColorCorrection(Bitmap bitmap, Bitmap bitmap2, float[] fArr, int i, int i2);
private static native String nativeCreateColorCorrectionShader(float[] fArr, int i, int i2);
private static native void nativeCreateCurve(int[] iArr, int[] iArr2, int[] iArr3, int[] iArr4, int[] iArr5, float f2, float f3, float f4, float f5, float f6);
private static native long nativeCreateEncoder(MediaEncoderSettings mediaEncoderSettings);
private static native void nativeCurveSaturation(Bitmap bitmap, int[] iArr, double d2, int i);
private static native int nativeDoEncode(long j);
private static native void nativeEnhance(Bitmap bitmap, double d2, int i);
private static native void nativeFlipHorizontally(Bitmap bitmap);
private static native void nativeFlipVertically(Bitmap bitmap);
private static native void nativeHSLToRGB(float f2, float f3, float f4, int[] iArr);
private static native void nativeHSVToRGB(float f2, float f3, float f4, int[] iArr);
private static native void nativeHistogram(Bitmap bitmap, int[] iArr, int[] iArr2, int[] iArr3, int[] iArr4);
private static native byte[] nativeJpegTurboCompress(Bitmap bitmap, int i);
private static native void nativeLabToRGB(float f2, float f3, float f4, int[] iArr);
private static native void nativeLookup(Bitmap bitmap, Bitmap bitmap2, int i);
private static native String nativeOneInAllShader();
private static native void nativePinBitmap(Bitmap bitmap);
private static native void nativeProcessorCreate();
private static native boolean nativeProcessorDo(byte[] bArr, long[] jArr);
private static native int nativeProcessorGetVersion();
private static native boolean nativeProcessorInit(String str, int i, int i2);
private static native boolean nativeProcessorLoad(String str, boolean z);
private static native void nativeProcessorMouseTap(int i, float f2, float f3);
private static native void nativeProcessorRelease();
private static native void nativeRGBToHSL(int i, int i2, int i3, float[] fArr);
private static native void nativeRGBToHSV(int i, int i2, int i3, float[] fArr);
private static native void nativeRGBToLab(int i, int i2, int i3, float[] fArr);
private static native void nativeReleaseEncoder(long j);
private static native void nativeResize(Bitmap bitmap, Bitmap bitmap2, int i);
public static int openOpusFile(String str) {
waitForContext();
return nativeAudioOpenOpusFile(str);
}
public static void pinBitmap(Bitmap bitmap) {
waitForContext();
nativePinBitmap(bitmap);
}
public static void resizeBitmap(Bitmap bitmap, Bitmap bitmap2) {
waitForContext();
nativeResize(bitmap, bitmap2, Runtime.getRuntime().availableProcessors());
}
private static String getProcMaps(String str) {
try (InputStream inputStream = Runtime.getRuntime().exec("cat /proc/" + str + "/maps").getInputStream()) {
return new Scanner(inputStream).useDelimiter("\\A").next();
} catch (Exception e) {
return "empty";
}
}
public static class EncoderHandler extends Handler {
private Callback a;
public EncoderHandler(Looper looper) {
super(looper);
}
@Keep
public static Object postEventFromNative(Object obj, int i, int i2, int i3) {
EncoderHandler encoderHandler;
if (obj != null && (encoderHandler = (EncoderHandler) ((WeakReference<?>) obj).get()) != null) {
if (i == 2) {
return encoderHandler.a.getLayerBitmap(i2, i3);
}
encoderHandler.sendMessage(encoderHandler.obtainMessage(i, i2, i3, null));
}
return null;
}
@Override // android.os.Handler
public void handleMessage(Message message) {
Callback callback = this.a;
if (callback == null) {
return;
}
int i = message.what;
if (i == 0) {
callback.onBytes(message.arg1);
} else if (i != 1) {
String str = MediaNative.a;
Log.e(str, "Unknown message type " + message.what);
} else {
callback.onProgress(message.arg1);
}
}
public void setCallback(Callback callback) {
this.a = callback;
}
public interface Callback {
@Nullable
Bitmap getLayerBitmap(int i, int i2);
void onBytes(int i);
void onProgress(int i);
}
}
}
+87 -79
View File
@@ -4976,30 +4976,29 @@ public final class R {
public static final int ic_deepl_logo_icon = 0x7f080bcb; // 2131233739
public static final int ic_google_translate_logo = 0x7f080bcc; // 2131233740
public static final int ic_yandex_translate_icon = 0x7f080bd1; // 2131233745
public static final int microsoft = 0x7f080bd2; // 2131233746
public static final int $splash__0 = 0x7f080bd2; // 2131233746
public static final int roundmsg = 0x7f080bd3; // 2131233747
public static final int tgs_entry_background = 0x7f080bd4; // 2131233748
public static final int yandex = 0x7f080bd7; // 2131233751
public static final int $splash__0 = 0x7f080bd8; // 2131233752
public static final int $splash__1 = 0x7f080bd9; // 2131233753
public static final int $splash__10 = 0x7f080bda; // 2131233754
public static final int $splash__11 = 0x7f080bdb; // 2131233755
public static final int $splash__12 = 0x7f080bdc; // 2131233756
public static final int $splash__13 = 0x7f080bdd; // 2131233757
public static final int $splash__14 = 0x7f080bde; // 2131233758
public static final int $splash__15 = 0x7f080bdf; // 2131233759
public static final int $splash__2 = 0x7f080be0; // 2131233760
public static final int $splash__3 = 0x7f080be1; // 2131233761
public static final int $splash__4 = 0x7f080be2; // 2131233762
public static final int $splash__5 = 0x7f080be3; // 2131233763
public static final int $splash__6 = 0x7f080be4; // 2131233764
public static final int $splash__7 = 0x7f080be5; // 2131233765
public static final int $splash__8 = 0x7f080be6; // 2131233766
public static final int $splash__9 = 0x7f080be7; // 2131233767
public static final int $splash__1 = 0x7f080bd8; // 2131233752
public static final int $splash__10 = 0x7f080bd9; // 2131233753
public static final int $splash__11 = 0x7f080bda; // 2131233754
public static final int $splash__12 = 0x7f080bdb; // 2131233755
public static final int $splash__13 = 0x7f080bdc; // 2131233756
public static final int $splash__14 = 0x7f080bdd; // 2131233757
public static final int $splash__15 = 0x7f080bde; // 2131233758
public static final int $splash__2 = 0x7f080bdf; // 2131233759
public static final int $splash__3 = 0x7f080be0; // 2131233760
public static final int $splash__4 = 0x7f080be1; // 2131233761
public static final int $splash__5 = 0x7f080be2; // 2131233762
public static final int $splash__6 = 0x7f080be3; // 2131233763
public static final int $splash__7 = 0x7f080be4; // 2131233764
public static final int $splash__8 = 0x7f080be5; // 2131233765
public static final int $splash__9 = 0x7f080be6; // 2131233766
public static final int checker_background = 0x7f080be8; // 2131233768
public static final int custom_thumb_selector = 0x7f080be9; // 2131233769
public static final int custom_track_selector = 0x7f080bea; // 2131233770
public static final int splash = 0x7f080beb; // 2131233771
public static final int splash = 0x7f080bec; // 2131233772
public static final int abc_control_background_material = 0x7f080032; // 2131230770
public static final int ic_action_close = 0x7f080322; // 2131231522
public static final int ic_camera_outline_28_new = 0x7f0803a0; // 2131231648
@@ -6797,6 +6796,9 @@ public final class R {
public static final int ic_telegram_24 = 0x7f080bcf; // 2131233743
public static final int ic_telegram_outline_28 = 0x7f080bd0; // 2131233744
public static final int vtlogo = 0x7f080bd6; // 2131233750
public static final int bing = 0x7f080be7; // 2131233767
public static final int sauceNAO = 0x7f080beb; // 2131233771
public static final int tracemoe = 0x7f080bed; // 2131233773
public static final int bg_music_play_button_white = 0x7f08015e; // 2131231070
public static final int bg_poll_bg_thumb = 0x7f080181; // 2131231105
public static final int bg_stickers_suggestions_left = 0x7f0801ad; // 2131231149
@@ -19592,67 +19594,73 @@ public final class R {
public static final int calls_not_available = 0x7f12184a; // 2131892298
public static final int cannot_write = 0x7f12184b; // 2131892299
public static final int change_accent_color = 0x7f12184c; // 2131892300
public static final int copydebuginfo_summ = 0x7f12184d; // 2131892301
public static final int copydebuginfo_title = 0x7f12184e; // 2131892302
public static final int copyownlink_summ = 0x7f12184f; // 2131892303
public static final int copyownlink_title = 0x7f121850; // 2131892304
public static final int crash_service_name = 0x7f121851; // 2131892305
public static final int currentLanguage = 0x7f121852; // 2131892306
public static final int current_theme = 0x7f121853; // 2131892307
public static final int custom_links_warning = 0x7f121854; // 2131892308
public static final int data = 0x7f121855; // 2131892309
public static final int data_updated = 0x7f121856; // 2131892310
public static final int datasettings_title = 0x7f121857; // 2131892311
public static final int device_info = 0x7f121858; // 2131892312
public static final int device_info_copied = 0x7f121859; // 2131892313
public static final int dialogstats = 0x7f12185a; // 2131892314
public static final int disable_analytics = 0x7f12185b; // 2131892315
public static final int disable_analytics_summ = 0x7f12185c; // 2131892316
public static final int downloading_update = 0x7f12185d; // 2131892317
public static final int error_applying_accent = 0x7f12185e; // 2131892318
public static final int error_no_text = 0x7f12185f; // 2131892319
public static final int error_saving_file = 0x7f121860; // 2131892320
public static final int failed_to_get_text = 0x7f121861; // 2131892321
public static final int invalid_pack_link = 0x7f121862; // 2131892322
public static final int invalidate_theme_cache_title = 0x7f121863; // 2131892323
public static final int logColors_title = 0x7f121864; // 2131892324
public static final int maxquality_summ = 0x7f121865; // 2131892325
public static final int maxquality_title = 0x7f121866; // 2131892326
public static final int monettheme_summ = 0x7f121867; // 2131892327
public static final int monettheme_title = 0x7f121868; // 2131892328
public static final int newsfeed_notif_summ = 0x7f121869; // 2131892329
public static final int newsfeed_notif_title = 0x7f12186a; // 2131892330
public static final int open_bot = 0x7f12186b; // 2131892331
public static final int promotedstickers_title = 0x7f12186c; // 2131892332
public static final int remove_encryption_key = 0x7f12186d; // 2131892333
public static final int remove_from_ads_stories_whitelist = 0x7f12186e; // 2131892334
public static final int reset_accounts = 0x7f12186f; // 2131892335
public static final int reset_all_settings = 0x7f121870; // 2131892336
public static final int restore_accounts = 0x7f121871; // 2131892337
public static final int restore_settings = 0x7f121872; // 2131892338
public static final int save_accounts = 0x7f121873; // 2131892339
public static final int save_online_data = 0x7f121874; // 2131892340
public static final int select_color = 0x7f121875; // 2131892341
public static final int select_palette = 0x7f121876; // 2131892342
public static final int sources = 0x7f121877; // 2131892343
public static final int storiesGroupsAdBlock = 0x7f121878; // 2131892344
public static final int storiesGroupsAdBlocksummary = 0x7f121879; // 2131892345
public static final int systemtheme = 0x7f12187a; // 2131892346
public static final int systemtheme_enabled = 0x7f12187b; // 2131892347
public static final int systemtheme_summ = 0x7f12187c; // 2131892348
public static final int updateverifdata_summ = 0x7f12187d; // 2131892349
public static final int updateverifdata_title = 0x7f12187e; // 2131892350
public static final int useCustomPrefsStyle_summ = 0x7f12187f; // 2131892351
public static final int useCustomPrefsStyle_title = 0x7f121880; // 2131892352
public static final int useGenius_summ = 0x7f121881; // 2131892353
public static final int useGenius_title = 0x7f121882; // 2131892354
public static final int useNewColorEngine_summ = 0x7f121883; // 2131892355
public static final int useNewColorEngine_title = 0x7f121884; // 2131892356
public static final int useOldAppVer_summ = 0x7f121885; // 2131892357
public static final int useOldAppVer_title = 0x7f121886; // 2131892358
public static final int vkx_integration_enabled_info = 0x7f121887; // 2131892359
public static final int whitelisted_ad_groups_stories_title = 0x7f121888; // 2131892360
public static final int writebar_ios_title = 0x7f121889; // 2131892361
public static final int compression_types = 0x7f12184d; // 2131892301
public static final int compression_types_selection = 0x7f12184e; // 2131892302
public static final int copydebuginfo_summ = 0x7f12184f; // 2131892303
public static final int copydebuginfo_title = 0x7f121850; // 2131892304
public static final int copyownlink_summ = 0x7f121851; // 2131892305
public static final int copyownlink_title = 0x7f121852; // 2131892306
public static final int crash_service_name = 0x7f121853; // 2131892307
public static final int currentLanguage = 0x7f121854; // 2131892308
public static final int current_theme = 0x7f121855; // 2131892309
public static final int custom_links_warning = 0x7f121856; // 2131892310
public static final int data = 0x7f121857; // 2131892311
public static final int data_updated = 0x7f121858; // 2131892312
public static final int datasettings_title = 0x7f121859; // 2131892313
public static final int device_info = 0x7f12185a; // 2131892314
public static final int device_info_copied = 0x7f12185b; // 2131892315
public static final int dialogstats = 0x7f12185c; // 2131892316
public static final int disable_analytics = 0x7f12185d; // 2131892317
public static final int disable_analytics_summ = 0x7f12185e; // 2131892318
public static final int downloading_update = 0x7f12185f; // 2131892319
public static final int error_applying_accent = 0x7f121860; // 2131892320
public static final int error_no_text = 0x7f121861; // 2131892321
public static final int error_saving_file = 0x7f121862; // 2131892322
public static final int failed_to_get_text = 0x7f121863; // 2131892323
public static final int invalid_pack_link = 0x7f121864; // 2131892324
public static final int invalidate_theme_cache_title = 0x7f121865; // 2131892325
public static final int logColors_title = 0x7f121866; // 2131892326
public static final int maxquality_summ = 0x7f121867; // 2131892327
public static final int maxquality_title = 0x7f121868; // 2131892328
public static final int microgsett = 0x7f121869; // 2131892329
public static final int monettheme_summ = 0x7f12186a; // 2131892330
public static final int monettheme_title = 0x7f12186b; // 2131892331
public static final int newsfeed_notif_summ = 0x7f12186c; // 2131892332
public static final int newsfeed_notif_title = 0x7f12186d; // 2131892333
public static final int open_bot = 0x7f12186e; // 2131892334
public static final int promotedstickers_title = 0x7f12186f; // 2131892335
public static final int remove_encryption_key = 0x7f121870; // 2131892336
public static final int remove_from_ads_stories_whitelist = 0x7f121871; // 2131892337
public static final int reset_accounts = 0x7f121872; // 2131892338
public static final int reset_all_settings = 0x7f121873; // 2131892339
public static final int restore_accounts = 0x7f121874; // 2131892340
public static final int restore_settings = 0x7f121875; // 2131892341
public static final int save_accounts = 0x7f121876; // 2131892342
public static final int save_online_data = 0x7f121877; // 2131892343
public static final int select_color = 0x7f121878; // 2131892344
public static final int select_palette = 0x7f121879; // 2131892345
public static final int sources = 0x7f12187a; // 2131892346
public static final int storiesGroupsAdBlock = 0x7f12187b; // 2131892347
public static final int storiesGroupsAdBlocksummary = 0x7f12187c; // 2131892348
public static final int systemtheme = 0x7f12187d; // 2131892349
public static final int systemtheme_enabled = 0x7f12187e; // 2131892350
public static final int systemtheme_summ = 0x7f12187f; // 2131892351
public static final int updateverifdata_summ = 0x7f121880; // 2131892352
public static final int updateverifdata_title = 0x7f121881; // 2131892353
public static final int useCustomPrefsStyle_summ = 0x7f121882; // 2131892354
public static final int useCustomPrefsStyle_title = 0x7f121883; // 2131892355
public static final int useGenius_summ = 0x7f121884; // 2131892356
public static final int useGenius_title = 0x7f121885; // 2131892357
public static final int useNewColorEngine_summ = 0x7f121886; // 2131892358
public static final int useNewColorEngine_title = 0x7f121887; // 2131892359
public static final int useOldAppVer_summ = 0x7f121888; // 2131892360
public static final int useOldAppVer_title = 0x7f121889; // 2131892361
public static final int vkx_integration_enabled_info = 0x7f12188a; // 2131892362
public static final int whitelisted_ad_groups_stories_title = 0x7f12188b; // 2131892363
public static final int writebar_ios_title = 0x7f12188c; // 2131892364
public static final int cache_size = 0x7f12188d; // 2131892365
public static final int cache_size_summ = 0x7f12188e; // 2131892366
public static final int clear_all_cache = 0x7f12188f; // 2131892367
}
public static final class style {
@@ -19,13 +19,10 @@ import static ru.vtosters.hooks.other.Preferences.isValidSignature;
public class GcmHook {
private static final String agent = String.format("Android-GCM/1.5 (%s %s)", Build.MODEL, Build.MODEL);
private static KeyPair pair;
private static int rid = 0;
static {
genNewKey();
}
@@ -35,15 +32,15 @@ public class GcmHook {
}
public static String requestToken(String orig) {
return "yssp9o9p9pamz5t-nvmq8spgwtin3e0==";
return isValidSignature() ? "yssp9o9p9pamz5t-nvmq8spgwtin3e0==" : requestToken();
}
public static String requestToken() {
String xappide;
try {
String aid = getRandomAid();
String pub2 = genNewKey();
String sig = getSig(pub2);
String xappide;
try {
byte[] bytes = MessageDigest.getInstance("SHA1").digest(pair.getPublic().getEncoded());
bytes[0] = (byte) (((bytes[0] & 15) + 112) & 255);
@@ -200,7 +197,6 @@ public class GcmHook {
}).getBytes(StandardCharsets.UTF_8));
return Base64.encodeToString(sign.sign(), 0);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@@ -91,6 +91,7 @@ public class NewsfeedHook {
public static boolean isPowerSaveMode() {
var pw = (PowerManager) getGlobalContext().getSystemService(Context.POWER_SERVICE);
return !getBoolValue("force_disable_psm", false) && pw.isPowerSaveMode();
// return !getBoolValue("force_disable_psm", false) && pw.isPowerSaveMode();
return false;
}
}
@@ -7,16 +7,14 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import com.vk.core.dialogs.actionspopup.ActionsPopup;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.ui.themes.VKThemeHelper;
import com.vk.core.util.ContextExtKt;
import com.vk.core.util.ToastUtils;
import com.vk.dto.common.AttachmentWithMedia;
import com.vk.dto.common.ImageSize;
@@ -24,318 +22,157 @@ import com.vtosters.lite.R;
import com.vtosters.lite.attachments.DocumentAttachment;
import com.vtosters.lite.attachments.PhotoAttachment;
import okhttp3.*;
import okio.BufferedSink;
import okio.Okio;
import org.json.JSONException;
import org.json.JSONObject;
import ru.vtosters.hooks.other.Preferences;
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
import ru.vtosters.lite.themes.utils.RecolorUtils;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.SearchEngine;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
public class PhotoViewer {
static OkHttpClient client = VtOkHttpClient.getInstance();
//region INSERTION INTO SMALI
@SuppressLint("UseCompatLoadingForDrawables")
public static void addMenuItems(AttachmentWithMedia attachment, ActionsPopup.b actionPopup, int i, boolean z) {
actionPopup.a(
R.string.copy,
RecolorUtils.fixActionMenuIcons(R.drawable.ic_copy_outline_28),
false,
() -> {
copyImage(attachment);
return null;
}
).a(
R.string.search_photo_content,
RecolorUtils.fixActionMenuIcons(R.drawable.ic_menu_search_outline_28),
false,
() -> {
searchImageWithUrl(attachment);
return null;
}
).a(
R.string.copy_photo_url_content,
RecolorUtils.fixActionMenuIcons(R.drawable.ic_copy_outline_28),
false,
() -> {
copyImageUrl(attachment);
return null;
}
).a(
R.string.open_original_photo_content,
RecolorUtils.fixActionMenuIcons(R.drawable.ic_link_outline_28),
false,
() -> {
openUrl(getImageUrlFromAttachment(attachment));
return null;
}
);
}
@SuppressLint("NonConstantResourceId")
public static boolean interceptClick(AttachmentWithMedia attachment, MenuItem item, View view) {
switch (item.getItemId()) {
case R.id.copy_image -> {
if (attachment instanceof PhotoAttachment) {
copyImage(getUrlFromPhotoAttachment((PhotoAttachment) attachment), String.valueOf(attachment.getId()));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyImage(getUrlFromDocumentAttachment(documentAttachment), String.valueOf(attachment.getId()));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return true;
}
case R.id.copy_photo_url -> {
if (attachment instanceof PhotoAttachment) {
copyPhotoUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyPhotoUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return true;
}
case R.id.open_original_photo -> {
if (attachment instanceof PhotoAttachment) {
openUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
openUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return true;
}
case R.id.copy_image -> copyImage(attachment);
case R.id.search_photo -> searchImageWithUrl(attachment);
case R.id.copy_photo_url -> copyImageUrl(attachment);
case R.id.open_original_photo -> openUrl(getImageUrlFromAttachment(attachment));
}
return true;
}
//endregion
@SuppressLint("UseCompatLoadingForDrawables")
public static void addMenuItems(AttachmentWithMedia attachment, ActionsPopup.b actionPopup, int i, boolean z) {
actionPopup.a(R.string.copy,
ContextExtKt.b(AndroidUtils.getGlobalContext(), R.drawable.ic_copy_outline_28, VKThemeHelper.g(R.attr.header_tint)),
false,
() -> {
if (attachment instanceof PhotoAttachment) {
copyImage(getUrlFromPhotoAttachment((PhotoAttachment) attachment), String.valueOf(attachment.getId()));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyImage(getUrlFromDocumentAttachment(documentAttachment), String.valueOf(attachment.getId()));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return null;
}
);
actionPopup.a(R.string.search_photo_content,
ContextExtKt.b(AndroidUtils.getGlobalContext(), R.drawable.ic_menu_search_outline_28, VKThemeHelper.g(R.attr.header_tint)),
false,
() -> {
if (attachment instanceof PhotoAttachment) {
searchDialog(LifecycleUtils.getCurrentActivity(), getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
searchDialog(LifecycleUtils.getCurrentActivity(), getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return null;
}
);
actionPopup.a(R.string.copy_photo_url_content,
ContextExtKt.b(AndroidUtils.getGlobalContext(), R.drawable.ic_copy_outline_28, VKThemeHelper.g(R.attr.header_tint)),
false,
() -> {
if (attachment instanceof PhotoAttachment) {
copyPhotoUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyPhotoUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return null;
}
);
actionPopup.a(R.string.open_original_photo_content,
ContextExtKt.b(AndroidUtils.getGlobalContext(), R.drawable.ic_link_outline_28, VKThemeHelper.g(R.attr.header_tint)),
false,
() -> {
if (attachment instanceof PhotoAttachment) {
openUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
openUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return null;
}
);
}
private static String getUrlFromDocumentAttachment(DocumentAttachment attachment) {
List<ImageSize> imageSizes = null;
if (attachment.J != null) {
imageSizes = attachment.J.t1();
}
return getUrlFromImageSizeList(imageSizes);
}
private static String getUrlFromPhotoAttachment(PhotoAttachment attachment) {
var imageSizes = attachment.D.Q.t1();
return getUrlFromImageSizeList(imageSizes);
}
@Nullable
private static String getUrlFromImageSizeList(List<ImageSize> imageSizes) {
if (imageSizes.isEmpty())
return null;
var max = imageSizes.get(0);
for (int i = 1; i < imageSizes.size(); ++i) {
var size = imageSizes.get(i);
if (max != null && max.t1() < size.t1()) {
max = size;
}
}
return max.url;
}
private static void searchDialog(Context context, String url) {
if (selectedEngine() == 0) {
var items = new String[]{
"Yandex", "Google", "Bing", "TraceMoe", "Ascii2d", "Saucenao"
};
new VkAlertDialog.Builder(context)
.setItems(items, (dl, i) -> {
searchPhoto(i + 1, url);
})
.show();
} else {
searchPhoto(selectedEngine(), url);
}
}
private static void copyImage(String link, String name) {
Request request = new Request.a().b(link).a();
File file = new File(AndroidUtils.getGlobalContext().getExternalCacheDir(), name + ".jpg");
if (file.exists()) {
copyImageToClipboard(file);
return;
}
new Thread() {
@Override
public void run() {
try (Response response = client.a(request).execute()) {
try (BufferedSink sink = Okio.a(Okio.b(file))) {
sink.a(response.a().f());
}
copyImageToClipboard(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
private static void copyImageToClipboard(File file) {
Uri path = FileProvider.getUriForFile(AndroidUtils.getGlobalContext(), "com.vtosters.lite.common.VKFileProvider", file);
ClipData clip = ClipData.newUri(AndroidUtils.getGlobalContext().getContentResolver(), "Image", path);
((ClipboardManager) AndroidUtils.getGlobalContext().getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(clip);
}
private static int selectedEngine() {
return Preferences.getPreferences().getInt("search_engine", 0);
}
private static void searchPhoto(int i, String url) {
if (url == null || url.isEmpty()) {
Log.d("PhotoViewer", "url is null or empty");
return;
}
switch (i) {
case 1 -> searchWithYandex(url);
case 2 -> searchWithGoogle(url);
case 3 -> searchWithBing(url);
case 4 -> searchWithTraceMoe(url);
case 5 -> searchWithAscii2d(url);
case 6 -> searchWithSaucenao(url);
}
}
private static void searchPhoto(String url) {
searchPhoto(selectedEngine(), url);
}
private static void searchWithYandex(String url) {
var request = new Request.a()
.b(String.format("https://yandex.ru/images-apphost/image-download?url=%s&images_avatars_size=preview&images_avatars_namespace=images-cbir",
URLEncoder.encode(url)))
private static void copyImage(AttachmentWithMedia attachment) {
var req = new Request.a()
.b(getImageUrlFromAttachment(attachment))
.a();
client.a(request).a(new Callback() {
client.a(req).a(new Callback() {
@Override
public void a(Call call, IOException e) {
Log.d("PhotoViewer", e.getMessage());
e.printStackTrace();
}
@Override
public void a(Call call, Response response) throws IOException {
try {
JSONObject payload = new JSONObject(response.a().g());
var cbirId = payload.optInt("image_shard") + "/" + payload.optString("image_id");
var imageUrl = String.format("https://avatars.mds.yandex.net/get-images-cbir/%s/orig", cbirId);
var searchUrl = String.format("https://yandex.ru/images/search?rpt=imageview&url=%s&cbir_id=%s", imageUrl, cbirId);
openUrl(searchUrl);
} catch (JSONException e) {
e.printStackTrace();
public void a(Call call, Response response)
throws IOException {
var tmpImage = new File(AndroidUtils.getGlobalContext().getExternalCacheDir(), attachment.getId() + ".jpg");
try (var resp = client.a(req).execute();
var sink = Okio.a(Okio.b(tmpImage))) {
sink.a(resp.a().f());
var manager = (ClipboardManager) AndroidUtils.getGlobalContext().getSystemService(Context.CLIPBOARD_SERVICE);
var uri = FileProvider.getUriForFile(
AndroidUtils.getGlobalContext(),
"com.vtosters.lite.common.VKFileProvider",
tmpImage);
var data = ClipData.newUri(
AndroidUtils.getGlobalContext().getContentResolver(),
"image",
uri);
manager.setPrimaryClip(data);
}
}
});
}
private static void searchWithGoogle(String url) {
openUrl("https://www.google.com/searchbyimage?image_url=" + URLEncoder.encode(url) + "&client=app");
private static void searchImageWithUrl(AttachmentWithMedia attachment) {
String url = getImageUrlFromAttachment(attachment);
if (TextUtils.isEmpty(url)) return;
int selectedEngine = SearchEngine.getDefaultSearchEngine();
if (selectedEngine < 0) {
var items = new String[SearchEngine.values().length];
for (int i = 0; i < SearchEngine.values().length; ++i)
items[i] = SearchEngine.values()[i].mTitle;
new VkAlertDialog.Builder(LifecycleUtils.getCurrentActivity())
.setItems(items, (di, i) -> openUrl(SearchEngine.values()[i].buildSearchUrl(url)))
.show();
} else {
// index correction for old versions with numeration "1-x"
if (selectedEngine >= SearchEngine.values().length) SearchEngine.setDefaultSearchEngine(--selectedEngine);
openUrl(SearchEngine.values()[selectedEngine].buildSearchUrl(url));
}
}
private static void searchWithTraceMoe(String url) {
openUrl("https://trace.moe/?url=" + URLEncoder.encode(url));
}
private static void searchWithAscii2d(String url) {
openUrl("https://ascii2d.net/search/url/" + URLEncoder.encode(url));
}
private static void searchWithSaucenao(String url) {
openUrl("https://saucenao.com/search.php?url=" + URLEncoder.encode(url));
}
private static void searchWithBing(String url) {
openUrl("https://www.bing.com/images/search?view=detailv2&iss=SBI&form=SBIIDP&sbisrc=UrlPaste&q=imgurl:"
+ URLEncoder.encode(url));
}
private static void copyPhotoUrl(String url) {
if (url == null || url.isEmpty()) return;
private static void copyImageUrl(AttachmentWithMedia attachment) {
String url = getImageUrlFromAttachment(attachment);
if (TextUtils.isEmpty(url)) return;
ClipboardManager manager = (ClipboardManager) AndroidUtils.getGlobalContext().getSystemService(Context.CLIPBOARD_SERVICE);
manager.setPrimaryClip(ClipData.newPlainText("vk_photo_url", url));
Toast.makeText(AndroidUtils.getGlobalContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show();
}
private static void openUrl(String url) {
var uri = Uri.parse(url);
var intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (TextUtils.isEmpty(url)) {
Log.d("PhotoViewer", "url is null or empty");
return;
}
var intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
AndroidUtils.getGlobalContext().startActivity(intent);
}
private static String getImageUrlFromAttachment(AttachmentWithMedia attachment) {
List<ImageSize> imageSizes;
if (attachment instanceof PhotoAttachment) {
imageSizes = ((PhotoAttachment) attachment).D.Q.t1();
} else if (attachment instanceof DocumentAttachment && ((DocumentAttachment) attachment).J != null) {
imageSizes = ((DocumentAttachment) attachment).J.t1();
} else {
ToastUtils.a(R.string.photo_get_error);
return "";
}
if (imageSizes.isEmpty()) return "";
var max = imageSizes.get(0);
for (int i = 1; i < imageSizes.size(); i++) {
var tmp = imageSizes.get(i);
if (max.t1() < tmp.t1()) max = tmp;
}
return max.url;
}
}
@@ -7,25 +7,25 @@ import ru.vtosters.lite.utils.RenameTool;
public class RenameHook {
public static void injectIntoJson(JSONObject obj) throws JSONException {
int i = obj.getInt("id");
if (RenameTool.updateRequested) {
RenameTool.reloadDB();
}
Pair<String, String> user = RenameTool.renamedUsers.get(i);
if (user == null) return;
obj.put(RenameTool.COLUMN_FIRSTNAME, user.first).put(RenameTool.COLUMN_LASTNAME, user.second);
// int i = obj.getInt("id");
// if (RenameTool.updateRequested) {
// RenameTool.reloadDB();
// }
//
// Pair<String, String> user = RenameTool.renamedUsers.get(i);
// if (user == null) return;
// obj.put(RenameTool.COLUMN_FIRSTNAME, user.first).put(RenameTool.COLUMN_LASTNAME, user.second);
}
public static void injectIntoJsonGroup(JSONObject obj) throws JSONException {
int i = obj.getInt("id");
if (RenameTool.updateRequested) {
RenameTool.reloadDB();
}
String user = RenameTool.renamedGroups.get(i);
if (user == null) return;
obj.put("name", user);
// int i = obj.getInt("id");
//
// if (RenameTool.updateRequested) {
// RenameTool.reloadDB();
// }
//
// String user = RenameTool.renamedGroups.get(i);
// if (user == null) return;
// obj.put("name", user);
}
}
@@ -23,7 +23,7 @@ public class VKUIHook {
}
private static void applyVKUIStyles(WebView webView) {
if (getBoolValue("VKUI_INJ", true)) {
if (getBoolValue("VKUI_INJ", true) && !webView.getUrl().contains("static.vk.com/memories")) {
if (!WebViewColoringUtils.isLoaded) {
WebViewColoringUtils.load();
}
@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.os.StrictMode;
import com.vk.medianative.MediaImageEncoder;
import com.vk.medianative.MediaNative;
import com.vtosters.lite.data.Users;
import com.vtosters.lite.fragments.SettingsListFragment;
import ru.vtosters.hooks.GmsHook;
@@ -22,7 +23,9 @@ public class Preferences {
public static void init(Application application) throws Exception {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
StrictMode.setThreadPolicy(policy); // fix profiles hide hook
MediaNative.init(application);
GmsHook.fixGapps();
ProxyUtils.setProxy();
@@ -163,7 +166,7 @@ public class Preferences {
}
public static boolean superapp() {
return getBoolValue("superapp", true);
return getBoolValue("superapp", true) && milkshake();
}
public static boolean vkpay() {
@@ -327,7 +330,7 @@ public class Preferences {
}
public static long getSizeForDelete() {
return switch (Preferences.getPreferences().getString("clearcache", "")) {
return switch (Preferences.getPreferences().getString("autoclearcache", "")) {
case "100mb" -> 104857600L;
case "500mb" -> 524288000L;
case "1gb" -> 1073741824L;
@@ -28,6 +28,7 @@ import com.vk.core.ui.themes.VKThemeHelper;
import com.vtosters.lite.R;
import com.vtosters.lite.data.ThemeTracker;
import ru.vtosters.lite.deviceinfo.OEMDetector;
import ru.vtosters.lite.themes.ThemesCore;
import ru.vtosters.lite.themes.ThemesHacks;
import ru.vtosters.lite.ui.wallpapers.WallpapersHooks;
import ru.vtosters.lite.utils.LifecycleUtils;
@@ -55,14 +56,6 @@ public class ThemesUtils {
return ColorStateList.valueOf(getAccentColor());
}
public static int getSystemModeTheme() {
return AppCompatDelegate.getDefaultNightMode();
}
public static void setSystemModeTheme(int theme) {
AppCompatDelegate.setDefaultNightMode(theme);
}
public static void setTheme(VKTheme theme, Activity activity, Boolean restartActivity) {
setThemeFL(theme, activity, getCenterScreenCoords(), restartActivity);
} // apply changed theme
@@ -72,6 +65,7 @@ public class ThemesUtils {
activity = LifecycleUtils.getCurrentActivity();
}
VKThemeHelper.theme(theme, activity, fl);
ThemesCore.clear();
if (restartActivity) activity.recreate();
ThemeTracker.a();
WebViewColoringUtils.isLoaded = false;
@@ -261,14 +255,6 @@ public class ThemesUtils {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? isDarkTheme() ? View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR : 0 : 0;
}
public static int getStockAccent() {
if (isMilkshake()) {
return isDarkTheme() ? Color.parseColor("#71aaeb") : Color.parseColor("#3f8ae0");
} else {
return isDarkTheme() ? Color.parseColor("#71aaeb") : Color.parseColor("#528bcc");
}
}
public static int getDarkThemeRes() {
if (isMonetTheme()) {
if (isAmoledTheme()) {
@@ -408,15 +394,11 @@ public class ThemesUtils {
}
public static int getNavigationHeight(int Default) {
int VKME = R.dimen.design_bottom_sheet_peek_height_min;
return vkme() ? VKME : Default;
return vkme() ? R.dimen.design_bottom_sheet_peek_height_min : Default;
}
public static int getNavigationWidth(int Default) {
int VKME = R.dimen.app_minimumsize_h;
return vkme() ? VKME : Default;
return vkme() ? R.dimen.app_minimumsize_h : Default;
}
public static ColorStateList getCSTDock() {
@@ -427,12 +409,8 @@ public class ThemesUtils {
},
new int[]{
dockbar_accent() ? getAccentColor() : (isDarkTheme() ? getResources().getColor(R.color.white) : getResources().getColor(R.color.gray_700)),
isDarkTheme() ? getResources().getColor(R.color.gray_500) : getResources().getColor(R.color.vk_steel_gray_300)
getColorFromAttr(R.attr.tabbar_inactive_icon)
}
);
}
private void getCurrentThemeID(VKTheme paramVKTheme) {
Preference.b("vk_theme_helper", "current_theme", paramVKTheme.getId());
}
}
@@ -9,8 +9,8 @@ import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
public class BannerHook {
public static JSONObject convBar(JSONObject orig) throws JSONException {
return ImBanner.convBar(orig);
public static JSONObject convBar(JSONObject orig) {
return ImBanner.convertToBanner(orig);
}
public static boolean showAlert() {
@@ -8,6 +8,7 @@ import com.vk.im.engine.utils.ImDialogsUtils;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import ru.vtosters.hooks.other.ThemesUtils;
import ru.vtosters.lite.concurrent.VTExecutors;
import ru.vtosters.lite.net.Request;
import ru.vtosters.lite.proxy.ProxyUtils;
import ru.vtosters.lite.utils.AccountManagerUtils;
@@ -43,7 +44,7 @@ public class Requests {
}
public static void pinnedMsg(int dialogid, boolean needToBePinned) {
Thread thread = new Thread(() -> {
VTExecutors.getIoExecutor().execute(() -> {
try {
var request = new okhttp3.Request.a()
.b("https://" + ProxyUtils.getApi() + "/method/" + (needToBePinned ? "messages.pinConversation" : "messages.unpinConversation") + "?peer_id=" + dialogid + "&access_token=" + AccountManagerUtils.getUserToken() + "&v=5.119")
@@ -56,8 +57,6 @@ public class Requests {
}
});
thread.start();
AndroidUtils.sendToast(AndroidUtils.getString(com.vtosters.lite.R.string.pin_dialog) + " " + AndroidUtils.getString(needToBePinned ? com.vtosters.lite.R.string.dialog_pinned : com.vtosters.lite.R.string.dialog_unpinned));
}
}
@@ -30,79 +30,22 @@ public class CatalogJsonInjector {
public static JSONObject music(JSONObject json) throws JSONException {
var catalog = json.optJSONObject("catalog");
JSONArray oldItems = null;
if (catalog != null) {
oldItems = catalog.optJSONArray("sections");
}
var oldItems = catalog != null ? catalog.optJSONArray("sections") : null;
var useOldAppVer = getBoolValue("useOldAppVer", false);
var isUsersCatalog = oldItems.optJSONObject(0).optString("url").equals("https://vk.com/audios" + getUserId() + "?section=" + (useOldAppVer ? "all" : "general"));
var blocks = oldItems.optJSONObject(0).optJSONArray("blocks");
if (isUsersCatalog) {
var blocks = oldItems.optJSONObject(0).optJSONArray("blocks");
if (isUsersCatalog && blocks != null) {
if (!useOldAppVer) {
fixDailyMix(blocks);
if (blocks != null) {
for (int i = 0; i < blocks.length(); i++) {
var block = blocks.optJSONObject(i);
var layout = block.optJSONObject("layout");
if (layout != null) {
var name = layout.optString("name");
if (name.equals("header_extended")) {
if (layout.has("top_title")) blocks.remove(i);
try {
layout.put("name", "header");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
var playlists = fetchCatalogId("https://vk.com/audio?section=my_playlists");
if (playlists != null) {
var catalogarr = playlists.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
removeUnsupportedLayouts(blocks);
var title = catalogarr.optString("title");
var id = catalogarr.optString("id");
var url = catalogarr.optString("url");
fetchCatalogId("https://vk.com/audio?section=my_playlists", oldItems);
Log.d("VKMusic", "Added " + title + " in music sections");
fetchCatalogId("https://vk.com/audio?section=albums", oldItems);
oldItems.put(new JSONObject().put("id", id).put("title", title).put("url", url));
}
var albums = fetchCatalogId("https://vk.com/audio?section=albums");
if (albums != null) {
var catalogarr = albums.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
var title = catalogarr.optString("title");
var id = catalogarr.optString("id");
var url = catalogarr.optString("url");
Log.d("VKMusic", "Added " + title + " in music sections");
oldItems.put(new JSONObject().put("id", id).put("title", title).put("url", url));
}
for (int i = 0; i < oldItems.length(); i++) {
var item = oldItems.optJSONObject(i);
var title = item.optString("title");
var id = item.optString("id");
var url = item.optString("url");
var value = Preferences.getString("musicdefcatalog");
Log.d("VKMusic", "title: " + title + " id: " + id + " url: " + url + " value: " + value);
if (url.contains(value) && !value.isEmpty()) {
catalog.put("default_section", id);
Log.d("VKMusic", "Added " + title + " as default music section");
}
}
setDefaultAudioPage(oldItems, catalog);
}
if (CacheDatabaseDelegate.hasTracks() && !LibVKXClient.isIntegrationEnabled()) { // inj in playlist list
@@ -112,15 +55,11 @@ public class CatalogJsonInjector {
json.put("playlists", new JSONArray().put(getPlaylist()));
Log.d("catalogInjector", "added new pl");
} else {
try {
json.optJSONArray("playlists").put(getPlaylist());
Log.d("catalogInjector", "added to exist pl");
} catch (Exception e) {
Log.d("catalogInjector", e.toString());
}
json.optJSONArray("playlists").put(getPlaylist());
Log.d("catalogInjector", "added to exist pl");
}
if (blocks != null && (!useOldAppVer || noPlaylists)) {
if (!useOldAppVer || noPlaylists) {
var newBlocks = new JSONArray();
newBlocks
@@ -155,6 +94,7 @@ public class CatalogJsonInjector {
if (!isUsersCatalog || !CacheDatabaseDelegate.hasTracks() || LibVKXClient.isIntegrationEnabled()) {
return; // early return if not users catalog or no tracks or integration enabled
}
var noPlaylists = !json.has("playlists");
if (noPlaylists) {
@@ -169,7 +109,7 @@ public class CatalogJsonInjector {
}
}
if (!useOldAppVer || noPlaylists) {
if (!useOldAppVer && !noPlaylists) {
var newBlocks = new JSONArray();
newBlocks
@@ -278,9 +218,38 @@ public class CatalogJsonInjector {
}
}
private static JSONObject fetchCatalogId(String section) {
if (section.isEmpty()) return null;
private static void removeUnsupportedLayouts(JSONArray blocks) throws JSONException {
for (int i = 0; i < blocks.length(); i++) {
var block = blocks.optJSONObject(i);
var layout = block.optJSONObject("layout");
if (layout != null) {
var name = layout.optString("name");
if (name.equals("header_extended")) {
if (layout.has("top_title")) blocks.remove(i);
layout.put("name", "header");
}
}
}
}
private static void setDefaultAudioPage(JSONArray jsonArray, JSONObject catalog) throws JSONException {
for (int i = 0; i < jsonArray.length(); i++) {
var item = jsonArray.optJSONObject(i);
var title = item.optString("title");
var id = item.optString("id");
var url = item.optString("url");
var value = Preferences.getString("musicdefcatalog");
Log.d("VKMusic", "title: " + title + " id: " + id + " url: " + url + " value: " + value);
if (url.contains(value) && !value.isEmpty()) {
catalog.put("default_section", id);
Log.d("VKMusic", "Added " + title + " as default music section");
}
}
}
private static void fetchCatalogId(String sectionUrl, JSONArray jsonArray) {
var request = new Request.a()
.b("https://" + getApi() + "/method/" + "catalog.getAudio"
+ "?v=5.119"
@@ -291,16 +260,23 @@ public class CatalogJsonInjector {
+ "&device_id="
+ DeviceIdProvider.d(AndroidUtils.getGlobalContext())
+ "&url="
+ section
+ sectionUrl
+ "&access_token="
+ AccountManagerUtils.getUserToken())
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
try {
return new JSONObject(mClient.a(request).execute().a().g()).getJSONObject("response");
var json = new JSONObject(mClient.a(request).execute().a().g()).getJSONObject("response");
var catalogarr = json.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
var title = catalogarr.optString("title");
var id = catalogarr.optString("id");
var url = catalogarr.optString("url");
Log.d("VKMusic", "Added " + title + " in music sections");
jsonArray.put(new JSONObject().put("id", id).put("title", title).put("url", url));
} catch (JSONException | IOException e) {
Log.d("VTLMusic", "Error: " + e.getMessage());
}
return null;
}
}
@@ -5,46 +5,63 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Optional;
public class ImBanner {
private static final String TAG = "ImBanner";
public static JSONObject convBar(JSONObject orig) throws JSONException {
var user_id = orig.getJSONObject("peer").getInt("id");
public static JSONObject convertToBanner(JSONObject original) {
final String PEER = "peer";
final String ID = "id";
final String PICTURE = "picture";
final String TEXT = "text";
final String LINK = "link";
final String LINK_TEXT = "link_text";
final String NAME = "name";
final String BUTTONS = "buttons";
final String ICON = "icon";
if (!UsersList.hasBanner(user_id) || user_id == 0) {
Optional<JSONObject> user = Optional.ofNullable(original.optJSONObject(PEER));
int userId = user.map(u -> u.optInt(ID)).orElse(0);
if (userId == 0 || !UsersList.hasBanner(userId)) {
return null;
}
JSONObject banner = Handler.getBanner(userId);
if (banner == null) {
return null;
}
try {
var jsonBanner = Handler.getBanner(user_id);
var pic = jsonBanner.optString("picture");
var text = jsonBanner.getString("text");
String picture = banner.optString(PICTURE);
String text = banner.getString(TEXT);
String link = banner.optString(LINK);
String linkText = banner.optString(LINK_TEXT);
var link = jsonBanner.optString("link");
var link_text = jsonBanner.optString("link_text");
boolean hasIcon = !picture.isEmpty();
boolean hasButton = !link.isEmpty();
boolean isPicture = picture.endsWith(".png") || picture.endsWith(".jpg") || picture.endsWith(".jpeg") || picture.endsWith(".webp");
var hasIcon = !pic.isEmpty();
var hasButton = !link.isEmpty();
var isPicture = pic.endsWith(".png") || pic.endsWith(".jpg") || pic.endsWith(".jpeg") || pic.endsWith(".webp");
JSONObject json = new JSONObject();
var json = new JSONObject();
JSONObject buttonJson = new JSONObject();
buttonJson.put("layout", "tertiary");
buttonJson.put("text", linkText);
buttonJson.put("type", "link");
buttonJson.put("link", link);
var buttonsJson = new JSONObject();
buttonsJson.put("layout", "tertiary");
buttonsJson.put("text", link_text);
buttonsJson.put("type", "link");
buttonsJson.put("link", link);
JSONArray buttons = new JSONArray(); // max 3 buttons in array
var buttons = new JSONArray(); // max 3 buttons in array
if (hasButton) buttons.put(buttonJson);
if (hasButton) buttons.put(buttonsJson);
json.put("name", "group_admin_welcome");
json.put("text", text);
json.put("buttons", buttons);
json.put(NAME, "group_admin_welcome");
json.put(TEXT, text);
json.put(BUTTONS, buttons);
if (hasIcon && isPicture) {
json.put("icon", pic);
json.put(ICON, picture);
}
return json;
@@ -143,8 +143,11 @@ public class ThemesCore {
themedColors.put(R.attr.im_reply_separator, accentColor);
themedColors.put(R.attr.im_text_name, accentColor);
outgoinging_msg = ThemesUtils.lighten(accentColor, 0.76f);
outgoinging_msg_highlight = ThemesUtils.lighten(accentColor, 0.5f);
float out = ThemesUtils.isMonetTheme() ? 0.85f : 0.76f;
float outhighlight = ThemesUtils.isMonetTheme() ? 0.75f : 0.5f;
outgoinging_msg = ThemesUtils.lighten(accentColor, out);
outgoinging_msg_highlight = ThemesUtils.lighten(accentColor, outhighlight);
themedColors.put(R.attr.im_ic_send_msg, accentColor);
themedColors.put(R.attr.im_bubble_wallpaper_outgoing, accentColor);
@@ -1,21 +1,37 @@
package ru.vtosters.lite.ui.fragments;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.WindowInsetsController;
import android.webkit.WebView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.appcompat.view.ContextThemeWrapper;
import b.h.g.m.FileUtils;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.im.engine.ImEngine1;
import com.vk.im.engine.ImEngineExt;
import com.vk.im.ui.providers.audiomsg.ImAudioMsgPlayerProvider;
import com.vk.im.ui.providers.audiomsg.PlayerActionSources;
import com.vk.imageloader.VKImageLoader;
import com.vk.media.player.cache.AutoPlayCacheHolder;
import com.vk.mediastore.MediaStorage;
import com.vk.stickers.Stickers;
import com.vtosters.lite.im.ImEngineProvider;
import ru.vtosters.hooks.SwitchHook;
import ru.vtosters.hooks.other.Preferences;
import ru.vtosters.hooks.other.ThemesUtils;
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
import ru.vtosters.lite.ui.components.BackupManager;
import ru.vtosters.lite.utils.AccountManagerUtils;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.VKAccountDB;
import ru.vtosters.lite.utils.*;
import java.io.IOException;
@@ -58,6 +74,108 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme
}
}
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), AndroidUtils.getString("data"));
PreferenceFragmentUtils.addPreference(
getPreferenceScreen(),
"currcache",
getString(com.vtosters.lite.R.string.cache_size),
getString(com.vtosters.lite.R.string.cache_size_summ) + ": " + CacheUtils.humanReadableByteCountBin(IOUtils.getDirSize(AndroidUtils.getGlobalContext().getCacheDir())),
null,
preference -> {
new VkAlertDialog.Builder(requireContext())
.setTitle(getString(com.vtosters.lite.R.string.clear_all_cache))
.setPositiveButton(requireContext().getString(com.vtosters.lite.R.string.yes), (dialogInterface, i) -> {
new WebView(requireContext()).clearCache(true);
VKImageLoader.e();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
FileUtils.l();
AutoPlayCacheHolder.d.a();
MediaStorage.a();
updateCacheSize();
})
.setNegativeButton(requireContext().getString(com.vtosters.lite.R.string.cancel), (dialogInterface, i) -> dialogInterface.dismiss())
.show();
return false;
}
);
PreferenceFragmentUtils.addPreference(
getPreferenceScreen(),
"",
AndroidUtils.getString("clearcache_other_title"),
"",
null,
preference -> {
new VkAlertDialog.Builder(getContext())
.setTitle(requireContext().getString(com.vtosters.lite.R.string.select_which_clean))
.setItems(AndroidUtils.getArray(com.vtosters.lite.R.array.cache_cleaner), (dialog, which) -> {
switch (which) {
case 0 -> {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
new WebView(requireContext()).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();
}
case 1 -> {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
Stickers.l.c();
}
case 2 -> {
VKImageLoader.e();
ImEngineExt.a(ImEngine1.a());
}
case 3 -> {
AutoPlayCacheHolder.d.a();
MediaStorage.a();
}
case 4 -> {
ImEngineProvider.b().a();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
}
case 5 -> new WebView(requireContext()).clearCache(true);
}
Toast.makeText(getContext(), requireContext().getString(com.vtosters.lite.R.string.cache_cleaned), Toast.LENGTH_SHORT).show();
updateCacheSize();
})
.show();
return false;
}
);
PreferenceFragmentUtils.addPreference(
getPreferenceScreen(),
"autoclearcache_btn",
AndroidUtils.getString("autoclearcache"),
"",
null,
preference -> {
cacheAutoCleanDialog();
return false;
}
);
var pref = Preferences.getPreferences().getString("autoclearcache", "Default");
switch (pref) {
case "Default" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_disabled));
case "100mb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_100mb));
case "500mb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_500mb));
case "1gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_1gb));
case "2gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_2gb));
case "5gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_5gb));
}
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), AndroidUtils.getString("accounts"));
PreferenceFragmentUtils.addPreference(
@@ -177,4 +295,59 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme
findPreference("analyticsDisabled").setVisible(Preferences.isValidSignature());
}
private void updateCacheSize() {
findPreference("currcache").setSummary(getString(com.vtosters.lite.R.string.cache_size_summ) + ": " + CacheUtils.humanReadableByteCountBin(IOUtils.getDirSize(AndroidUtils.getGlobalContext().getCacheDir())));
}
@SuppressLint({"CommitPrefEdits", "SetTextI18n"})
private void cacheAutoCleanDialog() {
String[] cacheText = {null, "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"};
var val = Preferences.getPreferences().getInt("autoclearcache_size", 0);
RadioGroup rg = new RadioGroup(getContext());
rg.setPadding(AndroidUtils.dp2px(18f), AndroidUtils.dp2px(12f), AndroidUtils.dp2px(18f), 0);
for (int item = 0; item <= 5; item++) {
RadioButton rb = new RadioButton(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
SwitchHook.setCompoundButton(rb);
rg.addView(rb);
rb.setId(item);
rb.setTextSize(TypedValue.COMPLEX_UNIT_PX, AndroidUtils.dp2px(14f));
var text = cacheText[item];
rb.setText(text != null ? text : AndroidUtils.getString("autoclearcachedisabled"));
rb.setTextColor(ThemesUtils.getTextAttr());
rb.setChecked(val == item);
}
new VkAlertDialog.Builder(getContext())
.setTitle(requireContext().getString(com.vtosters.lite.R.string.cache_clean_title))
.setMessage(requireContext().getString(com.vtosters.lite.R.string.cache_select_size))
.setCancelable(true)
.setNegativeButton(requireContext().getString(com.vtosters.lite.R.string.cancel), null)
.setView(rg)
.setPositiveButton(requireContext().getString(com.vtosters.lite.R.string.save), (dialog, which) -> {
var sizes = new String[]{"Default", "100mb", "500mb", "1gb", "2gb", "5gb"};
var id = rg.getCheckedRadioButtonId();
Preferences.getPreferences().edit()
.putInt("autoclearcache_size", id)
.putString("autoclearcache", sizes[id])
.apply();
})
.show();
}
@Override
public int T4() {
return com.vtosters.lite.R.string.data;
}
@Override
public void onResume() {
super.onResume();
updateCacheSize();
}
}
@@ -34,7 +34,9 @@ public class InterfaceFragment extends TrackedMaterialPreferenceToolbarFragment
return true;
});
findPreference("superapp").setOnPreferenceClickListener(preference -> {
var superapp = findPreference("superapp");
superapp.setVisible(Preferences.milkshake());
superapp.setOnPreferenceClickListener(preference -> {
LifecycleUtils.restartApplicationWithTimer();
return true;
@@ -70,6 +72,8 @@ public class InterfaceFragment extends TrackedMaterialPreferenceToolbarFragment
return true;
});
findPreference("friendsblock").setVisible(Preferences.milkshake());
if (Preferences.getPreferences().getInt("pic_rounding", 0) == 0) {
findPreference("customrounding").setSummary(requireContext().getString(R.string.disabled));
} else {
@@ -20,6 +20,7 @@ import okhttp3.Request;
import org.json.JSONObject;
import ru.vtosters.hooks.other.Preferences;
import ru.vtosters.hooks.other.ThemesUtils;
import ru.vtosters.lite.concurrent.VTExecutors;
import ru.vtosters.lite.downloaders.AudioDownloader;
import ru.vtosters.lite.downloaders.VideoDownloader;
import ru.vtosters.lite.music.LastFMScrobbler;
@@ -29,8 +30,8 @@ import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
import ru.vtosters.lite.utils.AccountManagerUtils;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.SearchEngine;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -133,26 +134,26 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
});
findPreference("select_photo_search_engine").setOnPreferenceClickListener(preference -> {
var deficon = ThemesUtils.recolorDrawable(AndroidUtils.getResources().getDrawable(R.drawable.ic_picture_outline_28));
var choiceicon = ThemesUtils.recolorDrawable(AndroidUtils.getResources().getDrawable(R.drawable.link_outline_28));
var items = new ImagineArrayAdapter.ImagineArrayAdapterItem[SearchEngine.values().length + 1];
items[0] = new ImagineArrayAdapter.ImagineArrayAdapterItem(
ThemesUtils.recolorDrawable(AndroidUtils.getResources().getDrawable(R.drawable.link_outline_28)),
AndroidUtils.getString("by_choice"));
for (int i = 0; i < SearchEngine.values().length; ++i) {
var engine = SearchEngine.values()[i];
items[i + 1] = engine.mIconRes != R.drawable.ic_picture_outline_28
? new ImagineArrayAdapter.ImagineArrayAdapterItem(engine.mIconRes, engine.mTitle)
: new ImagineArrayAdapter.ImagineArrayAdapterItem(
ThemesUtils.recolorDrawable(AndroidUtils.getResources().getDrawable(R.drawable.ic_picture_outline_28)),
engine.mTitle);
}
var items = Arrays.asList(
new ImagineArrayAdapter.ImagineArrayAdapterItem(choiceicon, AndroidUtils.getString("by_choice")),
new ImagineArrayAdapter.ImagineArrayAdapterItem(R.drawable.yandex, "Yandex"),
new ImagineArrayAdapter.ImagineArrayAdapterItem(R.drawable.google, "Google"),
new ImagineArrayAdapter.ImagineArrayAdapterItem(R.drawable.microsoft, "Bing"),
new ImagineArrayAdapter.ImagineArrayAdapterItem(deficon, "TraceMoe"),
new ImagineArrayAdapter.ImagineArrayAdapterItem(deficon, "Ascii2d"),
new ImagineArrayAdapter.ImagineArrayAdapterItem(deficon, "Saucenao")
);
var adapter = new ImagineArrayAdapter(requireContext(), items);
adapter.setSelected(Preferences.getPreferences().getInt("search_engine", 0));
var adapter = new ImagineArrayAdapter(requireContext(), Arrays.asList(items));
adapter.setSelected(SearchEngine.getDefaultSearchEngine() + 1);
new VkAlertDialog.Builder(getActivity())
.setAdapter(adapter, (dialog, which) -> {
Preferences.getPreferences().edit().putInt("search_engine", which).apply();
dialog.cancel();
.setAdapter(adapter, (di, i) -> {
SearchEngine.setDefaultSearchEngine(i != 0 ? i - 1 : -1);
di.cancel();
})
.show();
return true;
@@ -239,32 +240,26 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
}
public void deleteVideoHistory() {
Thread thread = new Thread(() -> {
VTExecutors.getIoExecutor().execute(() -> {
var request = new Request.a()
.b("https://" + ProxyUtils.getApi() + "/method/" + "video.clearViewingHistoryRecords" + "?https=1" + "&access_token=" + AccountManagerUtils.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 request = new Request.a()
.b("https://" + ProxyUtils.getApi() + "/method/" + "video.clearViewingHistoryRecords" + "?https=1" + "&access_token=" + AccountManagerUtils.getUserToken() + "&v=5.119")
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
.a();
var response = new JSONObject(new OkHttpClient().a(request).execute().a().g());
try {
var response = new JSONObject(new OkHttpClient().a(request).execute().a().g());
if (response.optInt("response") == 1) {
requireActivity().runOnUiThread(() -> AndroidUtils.sendToast(requireContext().getString(R.string.video_history_cleaned)));
} else {
requireActivity().runOnUiThread(() -> AndroidUtils.sendToast(requireContext().getString(R.string.delete_video_history_error)));
}
Log.d("VideoHistory", response.toString());
} catch (IOException e) {
e.printStackTrace();
if (response.optInt("response") == 1) {
requireActivity().runOnUiThread(() -> AndroidUtils.sendToast(requireContext().getString(R.string.video_history_cleaned)));
} else {
requireActivity().runOnUiThread(() -> AndroidUtils.sendToast(requireContext().getString(R.string.delete_video_history_error)));
}
Log.d("VideoHistory", response.toString());
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
}
private void deleteVideoHistoryDialog(Context context) {
@@ -111,11 +111,6 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment {
return true;
});
findPreference("clearcache").setOnPreferenceClickListener(preference -> {
cacheCleanDialog();
return true;
});
findPreference("copyownlink").setOnPreferenceClickListener(preference -> {
copyText("https://vk.com/id" + AccountManagerUtils.getUserId());
ToastUtils.a(requireContext().getString(R.string.link_copied));
@@ -127,11 +122,6 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment {
return true;
});
findPreference("autoclearcache").setOnPreferenceClickListener(preference -> {
cacheAutoCleanDialog();
return true;
});
findPreference("datasettings").setOnPreferenceClickListener(preference -> {
NavigatorUtils.switchFragment(requireContext(), DataSettingsFragment.class);
return true;
@@ -146,19 +136,6 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment {
return true;
});
var pref = Preferences.getPreferences().getString("autoclearcache", "Default");
switch (pref) {
case "Default" ->
findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_disabled));
case "100mb" ->
findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_100mb));
case "500mb" ->
findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_500mb));
case "1gb" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_1gb));
case "2gb" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_2gb));
case "5gb" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_5gb));
}
var vkAdminTokenPref = findPreference("vk_admin_token");
vkAdminTokenPref.setVisible(Preferences.getPreferences().getBoolean("new_music_downloading_way", false));
if (vkAdminTokenPref.isVisible()) {
@@ -170,93 +147,7 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment {
}
}
@SuppressLint({"CommitPrefEdits", "SetTextI18n"})
private void cacheAutoCleanDialog() {
String[] cacheText = {null, "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"};
var val = Preferences.getPreferences().getInt("autoclearcache_size", 0);
RadioGroup rg = new RadioGroup(getContext());
rg.setPadding(AndroidUtils.dp2px(18f), AndroidUtils.dp2px(12f), AndroidUtils.dp2px(18f), 0);
for (int item = 0; item <= 5; item++) {
RadioButton rb = new RadioButton(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
SwitchHook.setCompoundButton(rb);
rg.addView(rb);
rb.setId(item);
rb.setTextSize(TypedValue.COMPLEX_UNIT_PX, AndroidUtils.dp2px(14f));
var text = cacheText[item];
rb.setText(text != null ? text : AndroidUtils.getString("autoclearcachedisabled"));
rb.setTextColor(ThemesUtils.getTextAttr());
rb.setChecked(val == item);
}
new VkAlertDialog.Builder(getContext())
.setTitle(requireContext().getString(R.string.cache_clean_title))
.setMessage(requireContext().getString(R.string.cache_select_size))
.setCancelable(true)
.setNegativeButton(requireContext().getString(R.string.cancel), null)
.setView(rg)
.setPositiveButton(requireContext().getString(R.string.save), (dialog, which) -> {
var sizes = new String[]{"Default", "100mb", "500mb", "1gb", "2gb", "5gb"};
var id = rg.getCheckedRadioButtonId();
Preferences.getPreferences().edit()
.putInt("autoclearcache_size", id)
.putString("autoclearcache", sizes[id])
.apply();
})
.show();
}
private void cacheCleanDialog() {
new VkAlertDialog.Builder(getContext())
.setTitle(requireContext().getString(R.string.select_which_clean))
.setItems(AndroidUtils.getArray(R.array.cache_cleaner), (dialog, which) -> {
switch (which) {
case 0 -> {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
clearWebViewCache();
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();
}
case 1 -> {
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs2.edit().clear().commit();
Stickers.l.c();
}
case 2 -> {
VKImageLoader.e();
ImEngineExt.a(ImEngine1.a());
}
case 3 -> {
AutoPlayCacheHolder.d.a();
MediaStorage.a();
}
case 4 -> {
ImEngineProvider.b().a();
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a);
}
case 5 -> clearWebViewCache();
}
Toast.makeText(getContext(), requireContext().getString(R.string.cache_cleaned), Toast.LENGTH_SHORT).show();
})
.show();
}
private void clearWebViewCache() {
new WebView(requireContext()).clearCache(true);
}
private void copyText(String src) {
var manager = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
@@ -33,6 +33,7 @@ import ru.vtosters.hooks.other.ThemesUtils;
import ru.vtosters.hooks.ui.SystemThemeChangerHook;
import ru.vtosters.lite.BuildConfig;
import ru.vtosters.lite.concurrent.VTExecutors;
import ru.vtosters.lite.deviceinfo.OEMDetector;
import ru.vtosters.lite.ssfs.Utils;
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
import ru.vtosters.lite.ui.dialogs.OTADialog;
@@ -487,7 +488,7 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment impleme
}
);
if (Build.VERSION.SDK_INT >= 33) {
if (Build.VERSION.SDK_INT >= 33 && !OEMDetector.isMIUI()) {
PreferenceFragmentUtils.addPreference(
getPreferenceScreen(),
"",
@@ -571,7 +572,7 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment impleme
}
);
if (Preferences.isValidSignature() && BuildConfig.BUILD_TYPE.equals("release")) {
if (Preferences.isValidSignature() && !BuildConfig.BUILD_TYPE.equals("dev")) {
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), requireContext().getString(R.string.updates));
PreferenceFragmentUtils.addPreference(
@@ -46,15 +46,17 @@ public class MenuBuilder {
cfambObject = CommunityFragmentActionsMenuBuilder.class.getDeclaredField("b");
cfambObject.setAccessible(true);
} catch (NoSuchFieldException | NoSuchMethodException e) {
Log.e("VTLite", "Reflection failed");
Log.e("MenuBuilder", "Reflection failed");
e.printStackTrace();
}
}
public static void injectAP(final ProfileFragmentActionsMenuBuilder mb, final ActionsPopup.b builder) {
try {
final ExtendedUserProfile eup = (ExtendedUserProfile) pfambObject.get(mb);
final Context ctx = ((View) Objects.requireNonNull(apView.get(builder))).getContext();
ExtendedUserProfile eup = (ExtendedUserProfile) pfambObject.get(mb);
Context ctx = ((View) Objects.requireNonNull(apView.get(builder))).getContext();
boolean isPageWhitelistedFilter = isWhitelistedFilter(eup);
boolean isPageWhitelistedAdsStories = isWhitelistedAdStories(eup);
addItem(builder, AndroidUtils.getString(R.string.menu_copy_id), () -> {
copy(ctx, String.valueOf(AccountManagerUtils.getUserID(eup)));
return Unit.a;
@@ -65,11 +67,22 @@ public class MenuBuilder {
return Unit.a;
});
addItem(builder, AndroidUtils.getString(R.string.menu_change_name), () -> {
RenameTool.createDialog(eup, ctx);
// addItem(builder, AndroidUtils.getString(R.string.menu_change_name), () -> {
// RenameTool.createDialog(eup, ctx);
// return Unit.a;
// });
addItem(builder, AndroidUtils.getString(isPageWhitelistedFilter ? R.string.remove_from_filter_whitelist : R.string.add_to_filter_whitelist), () -> {
setWhitelistedFilter(eup, !isPageWhitelistedFilter);
AndroidUtils.sendToast(AndroidUtils.getString(isPageWhitelistedFilter ? R.string.removed_from_whitelist_success : R.string.added_to_whitelist_success));
return Unit.a;
});
addItem(builder, AndroidUtils.getString(isPageWhitelistedAdsStories ? R.string.remove_from_ads_stories_whitelist : R.string.add_to_ads_stories_whitelist), () -> {
setWhitelistedAdStories(eup, !isPageWhitelistedAdsStories);
AndroidUtils.sendToast(AndroidUtils.getString(isPageWhitelistedAdsStories ? R.string.removed_from_whitelist_success : R.string.added_to_whitelist_success));
return Unit.a;
});
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
@@ -77,21 +90,21 @@ public class MenuBuilder {
public static void injectAP(final CommunityFragmentActionsMenuBuilder mb, final ActionsPopup.b builder) {
try {
final ExtendedCommunityProfile ecp = (ExtendedCommunityProfile) cfambObject.get(mb);
final Context ctx = ((View) apView.get(builder)).getContext();
final boolean isPageWhitelistedFilter = isWhitelistedFilter(ecp);
final boolean isPageWhitelistedAds = isWhitelistedAd(ecp);
final boolean isPageWhitelistedAdsStories = isWhitelistedAdStories(ecp);
ExtendedCommunityProfile ecp = (ExtendedCommunityProfile) cfambObject.get(mb);
Context ctx = ((View) apView.get(builder)).getContext();
boolean isPageWhitelistedFilter = isWhitelistedFilter(ecp);
boolean isPageWhitelistedAds = isWhitelistedAd(ecp);
boolean isPageWhitelistedAdsStories = isWhitelistedAdStories(ecp);
addItem(builder, AndroidUtils.getString(R.string.menu_copy_id), () -> {
copy(ctx, String.valueOf(AccountManagerUtils.getUserID(ecp)));
return Unit.a;
});
addItem(builder, AndroidUtils.getString(R.string.menu_change_name), () -> {
RenameTool.createDialogGroup(ecp, ctx);
return Unit.a;
});
// addItem(builder, AndroidUtils.getString(R.string.menu_change_name), () -> {
// RenameTool.createDialogGroup(ecp, ctx);
// return Unit.a;
// });
addItem(builder, AndroidUtils.getString(isPageWhitelistedFilter ? R.string.remove_from_filter_whitelist : R.string.add_to_filter_whitelist), () -> {
setWhitelistedFilter(ecp, !isPageWhitelistedFilter);
@@ -110,7 +123,6 @@ public class MenuBuilder {
AndroidUtils.sendToast(AndroidUtils.getString(isPageWhitelistedAdsStories ? R.string.removed_from_whitelist_success : R.string.added_to_whitelist_success));
return Unit.a;
});
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
@@ -148,6 +160,19 @@ public class MenuBuilder {
).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
}
public static boolean isWhitelistedFilter(ExtendedUserProfile eup) {
return Preferences.getPreferences().getStringSet(
"whitelisted_filters_groups", Collections.emptySet()
).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
}
public static boolean isWhitelistedAdStories(ExtendedUserProfile eup) {
return Preferences.getPreferences().getStringSet(
"whitelisted_stories_ad",
Collections.emptySet()
).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
}
public static void setWhitelistedFilter(ExtendedCommunityProfile eup, boolean needWhitelist) {
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
@@ -195,4 +220,36 @@ public class MenuBuilder {
Preferences.getPreferences().edit().putStringSet("whitelisted_stories_ad", mutableAdsSet).apply();
}
public static void setWhitelistedFilter(ExtendedUserProfile eup, boolean needWhitelist) {
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
var mutableAdsSet = new LinkedHashSet<>(Preferences.getPreferences().getStringSet(
"whitelisted_filters_groups",
Collections.emptySet())
);
if (needWhitelist) {
mutableAdsSet.add(id);
} else {
mutableAdsSet.remove(id);
}
Preferences.getPreferences().edit().putStringSet("whitelisted_filters_groups", mutableAdsSet).apply();
}
public static void setWhitelistedAdStories(ExtendedUserProfile eup, boolean needWhitelist) {
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
var mutableAdsSet = new LinkedHashSet<>(Preferences.getPreferences().getStringSet(
"whitelisted_stories_ad",
Collections.emptySet()));
if (needWhitelist) {
mutableAdsSet.add(id);
} else {
mutableAdsSet.remove(id);
}
Preferences.getPreferences().edit().putStringSet("whitelisted_stories_ad", mutableAdsSet).apply();
}
}
@@ -14,57 +14,46 @@ import static ru.vtosters.hooks.other.Preferences.*;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
public class NewsFeedFiltersUtils {
public static List<String> mFilters;
public static List<String> mFiltersNames;
public static List<String> mFiltersLinks;
public static List<String> mFilters = new ArrayList<>();
public static List<String> mFiltersNames = new ArrayList<>();
public static List<String> mFiltersLinks = new ArrayList<>();
public static void setupFilters() {
mFilters = new ArrayList<>();
mFiltersNames = new ArrayList<>();
mFiltersLinks = new ArrayList<>();
getFilter("refsfilter", "Referals.txt", mFilters);
getFilter("shortlinkfilter", "LinkShorter.txt", mFilters);
getFilter("default_ad_list", "StandartFilter.txt", mFilters);
getFilter("shitposting", "IDontWantToReadIt.txt", mFilters);
getFilter("cringecopyright", "CopyrightAds.txt", mFiltersLinks);
var customFilters = getString("spamfilters");
if (!customFilters.isEmpty()) {
mFilters.addAll(Arrays.asList(customFilters.toLowerCase().split(", ")));
}
var sourceNameFilter = getString("sourcenamefilter");
if (!sourceNameFilter.isEmpty()) {
mFiltersNames.addAll(Arrays.asList(sourceNameFilter.toLowerCase().split(", ")));
}
var linkFilter = getString("linkfilter");
if (!linkFilter.isEmpty()) {
mFiltersLinks.addAll(Arrays.asList(linkFilter.toLowerCase().split(", ")));
}
setCustomFilters(mFilters, getString("spamfilters"));
setCustomFilters(mFiltersNames, getString("sourcenamefilter"));
setCustomFilters(mFiltersLinks, getString("linkfilter"));
}
// Get needed filter list from assets
public static void getFilter(String boolname, String filename, List<String> list) {
var ctx = getGlobalContext();
if (getBoolValue(boolname, false)) {
try {
Scanner scanner;
scanner = new Scanner(ctx.getAssets().open(filename));
try (Scanner scanner = new Scanner(getGlobalContext().getAssets().open(filename))) {
while (scanner.hasNextLine()) {
var line = scanner.nextLine();
if (!line.isEmpty())
list.add(line.toLowerCase());
addNonEmptyLineToList(scanner.nextLine(), list);
}
} catch (IOException e) {
Log.d("NewsFeedFiltersUtils", e.getMessage());
}
}
} // Get needed filter list from assets
}
public static boolean injectFiltersReposts(JSONObject obj) throws JSONException {
private static void addNonEmptyLineToList(String line, List<String> list) {
if (!line.isEmpty()) {
list.add(line.toLowerCase());
}
}
public static void setCustomFilters(List<String> list, String filters) {
if (!filters.isEmpty()) list.addAll(Arrays.asList(filters.toLowerCase().split(", ")));
}
public static boolean injectFiltersReposts(JSONObject obj) {
if (obj.has("copy_history")) {
var copyHistoryNode = obj.optJSONArray("copy_history");
if (copyHistoryNode != null && copyHistoryNode.length() != 0) {
@@ -94,6 +83,7 @@ public class NewsFeedFiltersUtils {
}
}
}
return false;
}
@@ -101,17 +91,12 @@ public class NewsFeedFiltersUtils {
if (json.has("copyright")) {
if (copyright_post()) return true;
var copyright = json.optJSONObject("copyright");
JSONObject copyright = json.optJSONObject("copyright");
String copyrightName = null;
if (copyright != null) {
copyrightName = copyright.getString("name").toLowerCase();
}
String copyrightLink = null;
if (copyright != null) {
copyrightName = copyright.getString("name").toLowerCase();
copyrightLink = copyright.getString("link").toLowerCase();
}
@@ -126,8 +111,8 @@ public class NewsFeedFiltersUtils {
if (copyrightLink != null && copyrightLink.contains(filter)) return true;
}
}
}
return false;
}
@@ -144,7 +129,6 @@ public class NewsFeedFiltersUtils {
}
}
return false;
}
@@ -154,9 +138,8 @@ public class NewsFeedFiltersUtils {
var caption = postJson.optJSONObject("caption");
if (postsrecomm()) {
try {
String type;
if (caption != null) {
type = caption.getString("type");
String type = caption.getString("type");
return type.equals("explorebait") || // Может быть интересно
type.equals("shared") || // Поделился записью
type.equals("digest") || // Рекомедации
@@ -187,7 +170,7 @@ public class NewsFeedFiltersUtils {
var title = item.optString("title");
if (TextUtils.isEmpty(id) || TextUtils.isEmpty(title)
// this items not working
// these items not working
|| id.equals("kpop") || id.equals("foryou")
|| id.equals("qazaqstan") || id.equals("podcasts"))
continue;
@@ -201,8 +184,8 @@ public class NewsFeedFiltersUtils {
.put("is_unavailable", hide);
Log.d("NewsfeedListInj", "Unlocked " + id + " in newsfeed list");
}
Preferences.getPreferences().edit().putStringSet("news_feed_items_set", mutableFiltersSet)
.apply();
Preferences.getPreferences().edit().putStringSet("news_feed_items_set", mutableFiltersSet).apply();
return items;
}
@@ -284,45 +267,6 @@ public class NewsFeedFiltersUtils {
return true;
}
public static JSONObject discoverObj() throws JSONException {
var mainjson = new JSONObject();
var info = new JSONObject();
info.put("title", "Test Injection");
info.put("text_color", "#ffffff");
info.put("description", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat");
var image = new JSONArray();
var imageQuality1 = new JSONObject();
imageQuality1.put("url", "https://w7.pngwing.com/pngs/505/1021/png-transparent-konata-izumi-lucky-star-desktop-anime-anime-blue-mammal-face.png");
imageQuality1.put("width", 72); // 72, 108, 144, 216, 288
imageQuality1.put("height", 72); // 72, 108, 144, 216, 288
image.put(imageQuality1);
var background = new JSONArray();
var backgroundQuality1 = new JSONObject();
backgroundQuality1.put("url", "https://2ch.life/vg/arch/2022-08-22/src/38524739/16440606579870.jpg");
backgroundQuality1.put("width", 344); // 344, 516, 680, 1032, 1376
backgroundQuality1.put("height", 215); // 215, 323, 426, 645, 860
background.put(backgroundQuality1);
info.put("image", image);
info.put("background", background);
mainjson.put("info", info);
mainjson.put("track_code", "info_banner_donut_catalog");
mainjson.put("template", "info");
var action = new JSONObject();
action.put("type", "open_url");
action.put("url", "vk.com/vtosters_official");
action.put("target", "internal");
mainjson.put("action", action);
return mainjson;
}
public static void parseStoriesItem(JSONObject item) throws JSONException {
var stories = item.optJSONArray("stories");
var newStories = new JSONArray();
@@ -382,7 +326,7 @@ public class NewsFeedFiltersUtils {
id = String.valueOf(list.optInt("source_id"));
}
if (id.equals("-189659924")) {
if (id.equals("-189659924") || id.equals(String.valueOf(AccountManagerUtils.getUserId()))) {
return true;
}
@@ -391,7 +335,7 @@ public class NewsFeedFiltersUtils {
Collections.emptySet()
);
return whitelist.contains(id);
return Preferences.getBoolValue("invertFilters", false) != whitelist.contains(id);
}
public static Boolean isWhitelistedAd(JSONObject list) {
@@ -425,7 +369,7 @@ public class NewsFeedFiltersUtils {
if (attachments != null && getBoolValue("blockminiapps", false)) {
for (int j = 0; j < attachments.length(); j++) {
var type = attachments.optJSONObject(j).optString("type");
String type = attachments.optJSONObject(j).optString("type");
if (type.contains("mini_app")) return true;
}
}
@@ -439,7 +383,7 @@ public class NewsFeedFiltersUtils {
for (int i = 0; i < (items != null ? items.length() : 0); i++) {
try {
var curr = items.getJSONObject(i);
JSONObject curr = items.getJSONObject(i);
if (!curr.optString("template").contains("info") && discoverAdBlock(curr)) {
newObj.put(items.optJSONObject(i));
}
@@ -460,11 +404,11 @@ public class NewsFeedFiltersUtils {
var newItems = new JSONArray();
for (int j = 0; j < items.length(); j++) {
var list = items.optJSONObject(j);
JSONObject list = items.optJSONObject(j);
if (list == null) continue;
var type = list.optString("type");
String type = list.optString("type");
if (isAds(list, type)) {
continue;
@@ -549,7 +493,7 @@ public class NewsFeedFiltersUtils {
}
if (json.has("ads")) {
var ad = json.optJSONObject("ads");
JSONObject ad = json.optJSONObject("ads");
if (isDeleteFix) {
if (ad != null) {
ad.optJSONObject("settings")
@@ -567,10 +511,10 @@ public class NewsFeedFiltersUtils {
}
}
var items = json.optJSONArray("items");
JSONArray items = json.optJSONArray("items");
if (items != null) {
for (int i = 0; i < items.length(); i++) {
var item = items.optJSONObject(i);
JSONObject item = items.optJSONObject(i);
if (item != null) {
parseStoriesItem(item);
}
@@ -27,19 +27,18 @@ import static ru.vtosters.hooks.other.ThemesUtils.getTextAttr;
import static ru.vtosters.lite.utils.AndroidUtils.*;
public class RenameTool {
private static final int DB_VERSION = 2;
private static final String COLUMN_NAME = "name";
public static final String COLUMN_FIRSTNAME = "first_name";
public static final String COLUMN_LASTNAME = "last_name";
public static final SparseArray<Pair<String, String>> renamedUsers = new SparseArray<>();
public static final SparseArray<String> renamedGroups = new SparseArray<>();
private static final int DB_VERSION = 2;
private static final String COLUMN_NAME = "name";
private static final String COLUMN_VKID = "vk_id";
private static final String DB_NAME = "vt_rename.db";
private static final String TABLE_NAME = "renames";
private static final String TABLE_NAME_GROUP = "renames_group";
public static final SparseArray<Pair<String, String>> renamedUsers = new SparseArray<>();
public static final SparseArray<String> renamedGroups = new SparseArray<>();
private static RenameTool.DbHelper helperInstance;
public static boolean updateRequested = true;
private static RenameTool.DbHelper helperInstance;
protected static RenameTool.DbHelper getHelper() {
if (helperInstance == null) {
@@ -0,0 +1,51 @@
package ru.vtosters.lite.utils;
import androidx.annotation.DrawableRes;
import com.vtosters.lite.R;
import ru.vtosters.hooks.other.Preferences;
import java.net.URLEncoder;
public enum SearchEngine {
YANDEX(R.drawable.yandex,
"Yandex",
"https://yandex.com/images/search?rpt=imageview&url="),
GOOGLE(R.drawable.google,
"Google",
"https://www.google.com/searchbyimage?client=app&image_url="),
BING(R.drawable.bing,
"Bing",
"https://www.bing.com/images/search?view=detailv2&iss=SBI&form=SBIIDP&sbisrc=UrlPaste&q=imgurl:"),
TRACEMOE(R.drawable.tracemoe,
"trace.moe",
"https://trace.moe/?url="),
ASCII2D(R.drawable.ic_picture_outline_28,
"Ascii2d",
"https://ascii2d.net/search/url/"),
SAUCENAO(R.drawable.sauceNAO,
"SauceNAO",
"https://saucenao.com/search.php?url=");
@DrawableRes
public final int mIconRes;
public final String mTitle;
private final String mBaseUrl;
SearchEngine(@DrawableRes int iconRes, String title, String baseUrl) {
this.mIconRes = iconRes;
this.mTitle = title;
this.mBaseUrl = baseUrl;
}
public static int getDefaultSearchEngine() {
return Preferences.getPreferences().getInt("search_engine", -1);
}
public static void setDefaultSearchEngine(int i) {
Preferences.getPreferences().edit().putInt("search_engine", i).apply();
}
public String buildSearchUrl(String targetUrl) {
return this.mBaseUrl + URLEncoder.encode(targetUrl);
}
}
@@ -3,10 +3,6 @@ package ru.vtosters.lite.utils;
import android.webkit.WebView;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import static ru.vtosters.hooks.other.ThemesUtils.*;
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
@@ -16,30 +12,27 @@ public class WebViewColoringUtils {
public static String loadedCSS = "";
public static String loadedCSSAmoled = "";
private static String load(String str) {
private static String readCSS(String str) {
try (var is = getGlobalContext().getAssets().open(str)) {
return IOUtils.readAllLines(is);
return IOUtils.readAllLines(is)
.replace("%header_background%", hex(getHeaderBackground()))
.replace("%background_content%", hex(getBackgroundContent()))
.replace("%header_text%", hex(getHeaderText()))
.replace("%accent%", hex(getAccentColor()))
.replace("%background_page%", hex(getBackgroundPage()))
.replace("%content_tint_background%", hex(getColorFromAttr(com.vtosters.lite.R.attr.content_tint_background)))
.replace("%button_primary_background%", hex(getColorFromAttr(com.vtosters.lite.R.attr.button_primary_background)))
.replace("%button_outline_foreground%", hex(getColorFromAttr(com.vtosters.lite.R.attr.button_outline_foreground)))
.replace("%button_outline_border%", hex(getColorFromAttr(com.vtosters.lite.R.attr.button_outline_border)))
.replace("%text_primary%", hex(getTextAttr()));
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void load() {
loadedCSS = load("vt_ui_accent.css")
.replace("%header_background%", hex(getHeaderBackground()))
.replace("%background_content%", hex(getBackgroundContent()))
.replace("%header_text%", hex(getHeaderText()))
.replace("%accent%", hex(getAccentColor()))
.replace("%background_page%", hex(getBackgroundPage()))
.replace("%content_tint_background%", hex(getColorFromAttr(com.vtosters.lite.R.attr.content_tint_background)))
.replace("%button_primary_background%", hex(getColorFromAttr(com.vtosters.lite.R.attr.button_primary_background)))
.replace("%button_outline_foreground%", hex(getColorFromAttr(com.vtosters.lite.R.attr.button_outline_foreground)))
.replace("%button_outline_border%", hex(getColorFromAttr(com.vtosters.lite.R.attr.button_outline_border)))
.replace("%text_primary%", hex(getTextAttr()));
loadedCSSAmoled = load("vt_ui_oled.css");
loadedCSS = readCSS("vt_ui_accent.css");
loadedCSSAmoled = readCSS("vt_ui_oled.css");
isLoaded = true;
}
+1 -1
View File
@@ -8,7 +8,7 @@ buildscript {
}
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath 'com.android.tools.build:gradle:8.0.2'
classpath 'org.mozilla.rust-android-gradle:plugin:0.9.3'
// NOTE: Do not place your application dependencies here; they belong
+3
View File
@@ -14,3 +14,6 @@
android.useAndroidX=true
android.enableJetifier=true
android.jetifier.ignorelist=classes-dex2jar.jar, classes2-dex2jar.jar, classes3-dex2jar.jar, classes4-dex2jar.jar, classes5-dex2jar.jar, classes6-dex2jar.jar, classes7-dex2jar.jar
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false
+1 -1
View File
@@ -1,6 +1,6 @@
#Tue Aug 16 21:49:57 MSK 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
+30 -4
View File
@@ -1,12 +1,14 @@
/* vkui.css V2 by iTaysonLab */
/* vkui coloring V2 by iTaysonLab */
/* rewrited by vtosters team */
/* Generic VKUI */
/* additional fixes for various VKUI */
.Tooltip__content {
background-color: %accent% !important;
}
.vkuibright_light, [scheme=bright_light], body[scheme=bright_light] {
.vkuibright_light, [scheme=bright_light], body[scheme=bright_light], .vkui--vkBase--light, .vkui--vkIOS--light, .vkui--vkCom--light {
--accent: %accent% !important;
--vkui--color_icon_accent: %accent% !important;
--action_sheet_action_foreground: %accent% !important;
--attach_picker_tab_active_background: %accent% !important;
--attach_picker_tab_active_text: %accent% !important;
@@ -29,22 +31,33 @@
--landing_text_title: %accent% !important;
--landing_secondary_button_foreground: %accent% !important;
--link_alternate: %accent% !important;
--vkui--color_text_link_themed: %accent% !important;
--loader_track_value_fill: %accent% !important;
--vkui--color_track_buffer: %accent% !important;
--feed_recommended_friend_promo_background: %accent% !important;
--tabbar_active_icon: %accent% !important;
--tabbar_tablet_active_icon: %accent% !important;
--text_link: %accent% !important;
--text_name: %accent% !important;
--vkui--color_text_link: %accent% !important;
--vkui--color_text_name: %accent% !important;
--writebar_icon: %accent% !important;
--vkui--color_write_bar_icon: %accent% !important;
--dynamic_blue: %accent% !important;
/* backgrounds */
--background_content: %background_content% !important;
--vkui--color_background_content: %background_content% !important;
--background_page: %background_page% !important;
--vkui--color_background: %background_page% !important;
--content_tint_background: %content_tint_background% !important;
--vkui--color_background_secondary: %content_tint_background% !important;
--loader_background: %background_page% !important;
--header_background: %header_background% !important;
--header_background_before_blur: %header_background% !important;
--header_background_before_blur_alternate: %header_background% !important;
--vkui--color_header_background: %header_background% !important;
--vkui--color_header_background_before_blur: %header_background% !important;
--vkui--color_header_background_before_blur_alternate: %header_background% !important;
--header_alternate_background: %header_background% !important;
--header_text_alternate: %header_text% !important;
@@ -52,12 +65,14 @@
--header_text_secondary: %header_text% !important;
--header_tint: %header_text% !important;
--header_tint_alternate: %header_text% !important;
--vkui--color_icon_accent_themed: %header_text% !important;
}
.vkuispace_gray, [scheme=space_gray], body[scheme=space_gray] {
.vkuispace_gray, [scheme=space_gray], body[scheme=space_gray], .vkui--vkBase--dark, .vkui--vkIOS--dark, .vkui--vkCom--dark {
--accent: %accent% !important;
--vkui--color_icon_accent: %accent% !important;
--action_sheet_action_foreground: %accent% !important;
--attach_picker_tab_active_background: %accent% !important;
--attach_picker_tab_active_text: %accent% !important;
@@ -80,25 +95,36 @@
--landing_text_title: %accent% !important;
--landing_secondary_button_foreground: %accent% !important;
--link_alternate: %accent% !important;
--vkui--color_text_link_themed: %accent% !important;
--loader_track_value_fill: %accent% !important;
--vkui--color_track_buffer: %accent% !important;
--feed_recommended_friend_promo_background: %accent% !important;
--tabbar_active_icon: %accent% !important;
--tabbar_tablet_active_icon: %accent% !important;
--text_link: %accent% !important;
--text_name: %accent% !important;
--vkui--color_text_link: %accent% !important;
--vkui--color_text_name: %accent% !important;
--writebar_icon: %accent% !important;
--vkui--color_write_bar_icon: %accent% !important;
--dynamic_blue: %accent% !important;
--background_content: %background_content% !important;
--vkui--color_background_content: %background_content% !important;
--background_page: %background_page% !important;
--vkui--color_background: %background_page% !important;
--content_tint_background: %content_tint_background% !important;
--vkui--color_background_secondary: %content_tint_background% !important;
--loader_background: %background_page% !important;
--header_background: %header_background% !important;
--header_background_before_blur: %header_background% !important;
--header_background_before_blur_alternate: %header_background% !important;
--vkui--color_header_background: %header_background% !important;
--vkui--color_header_background_before_blur: %header_background% !important;
--vkui--color_header_background_before_blur_alternate: %header_background% !important;
--header_alternate_background: %header_background% !important;
--header_tint: %header_text% !important;
--header_tint_alternate: %header_text% !important;
--vkui--color_icon_accent_themed: %header_text% !important;
--header_text_alternate: %header_text% !important;
--header_text: %header_text% !important;
--header_text_secondary: %header_text% !important;
+19 -3
View File
@@ -1,4 +1,5 @@
/* vkui.css V2 by iTaysonLab */
/* vkui coloring V2 by iTaysonLab */
/* rewrited by vtosters team */
/* Articles */
body.article_body.article_dark {
background-color: #000000 !important;
@@ -19,7 +20,7 @@ body.article_body.article_dark {
}
.article_dark .article>h1 {
color: %textColorPrimary% !important;
color: %text_primary% !important;
}
.article__info_line {
@@ -48,45 +49,60 @@ body.article_body.article_dark {
}
/* Generic VKUI */
.vkuispace_gray, [scheme=space_gray], body[scheme=space_gray] {
.vkuispace_gray, [scheme=space_gray], body[scheme=space_gray], .vkui--vkBase--dark, .vkui--vkIOS--dark, .vkui--vkCom--dark {
/* light background */
--attach_picker_tab_active_icon: #000000 !important;
--background_content: #000000 !important;
--vkui--color_background_content: %background_content% !important;
--button_bot_shadow: #000000 !important;
--button_primary_foreground: #000000 !important;
--content_tint_background: #000000 !important;
--vkui--color_background_secondary: %content_tint_background% !important;
--counter_secondary_text: #000000 !important;
--loader_background: #000000 !important;
--overlay_status_background: #000000 !important;
--header_background: #000000 !important;
--header_alternate_background: #000000 !important;
--header_alternate_background: #000000 !important;
--vkui--color_header_background: #000000 !important;
--separator_alternate: #000000 !important;
--segmented_control_bar_background: #000000 !important;
--search_bar_background: #000000 !important;
/* background */
--background_page: #000000 !important;
--vkui--color_background: #000000 !important;
--header_background_before_blur: #000000 !important;
--header_background_before_blur_alternate: #000000 !important;
--vkui--color_header_background_before_blur: #000000 !important;
--vkui--color_header_background_before_blur_alternate: #000000 !important;
/* lighter BG (text fields) */
--attach_picker_tab_inactive_background: #121212 !important;
--background_keyboard: #121212 !important;
--background_suggestions: #121212 !important;
--vkui--color_background_modal: #121212 !important;
--field_background: #121212 !important;
--im_bubble_incoming: #121212 !important;
--input_border: #121212 !important;
--vkui--color_write_bar_input_background: #121212 !important;
--modal_card_background: #121212 !important;
--separator_common: #121212 !important;
--vkui--color_separator_primary: #121212 !important;
--snippet_background: #121212 !important;
--android_active_color: #121212 !important;
--switch_ios_off_border: #121212 !important;
/* third BG (buttons) */
--button_secondary_background: #212121 !important;
--vkui--color_background_secondary_alpha: #212121 !important;
--header_search_field_background: #212121 !important;
--icon_tertiary: #212121 !important;
--vkui--color_icon_tertiary: #212121 !important;
--im_bubble_outgoing: #212121 !important;
--input_background: #212121 !important;
--vkui--color_write_bar_input_background: #212121 !important;
--loader_track_fill: #212121 !important;
--vkui--color_track_background: #212121 !important;
--search_bar_field_background: #212121 !important;
--vkui--color_search_field_background: #212121 !important;
--selection_off_icon: #212121 !important;
--panel_tab_active_background: #212121 !important;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

+10 -4
View File
@@ -6327,8 +6327,8 @@
<string name="globalUsersOnline_summ">Можа выклікаць доўгія загрузкі раздзелаў і вялікае спажыванне трафіку \n\nНе
рэкамендуецца ўключаць дадзеную функцыю
</string>
<string name="savemsgsett_title">Захоўваць налады паведамленняў</string>
<string name="savemsgsett_summ">Захоўваць становішча тумблераў у наладах паведамленняў</string>
<string name="savemsgsett_title">Захоўваць параметры адпраўкі паведамленняў</string>
<string name="savemsgsett_summ">Захоўваць выбраныя параметры статусу выходных паведамленняў як знікненне паведамленняў і бясшумная адпраўка</string>
<string name="screenshotdetect_title">Адключыць дэтэкт скрыншотаў</string>
<string name="screenshotdetect_summ">Адключыць апавяшчэнне аб тым, што вы зрабілі скрыншот</string>
<string name="hideDeviceInfo_title">Адключыць адпраўку метрыкі</string>
@@ -6823,8 +6823,8 @@
<string name="remove_from_ads_whitelist">Выдаліць з вайтліста рэкламы</string>
<string name="add_to_ads_stories_whitelist">Дадаць у вайтліст гісторый</string>
<string name="remove_from_ads_stories_whitelist">Выдаліць з вайтліста гісторый</string>
<string name="removed_from_whitelist_success">Група выдалена з вайтліста</string>
<string name="added_to_whitelist_success">Група дададзена ў вайтліст</string>
<string name="removed_from_whitelist_success">Выдаленая з вайтлиста</string>
<string name="added_to_whitelist_success">Дададзена ў вайтліст</string>
<string name="whitelisted_ad_groups_title">Вайтліст рэкламы</string>
<string name="whitelisted_ad_groups_stories_title">Вайтліст рэкламы гісторый</string>
@@ -6942,6 +6942,8 @@
<string name="promotedstickers_title">Не атрымліваць промостикеры</string>
<string name="useOldAppVer_title">Выкарыстоўваць стары дызайн</string>
<string name="useOldAppVer_summ">Працуе \"як ёсць\". Могуць быць памылкі</string>
<string name="invertFilters">Інвертаваць выключэння</string>
<string name="invertFilters_summ">Дададзеныя ў выключэння групы будуць фільтраваць</string>
<string name="downloading_update">Спампоўка абнаўлення</string>
<string name="sources">Крыніцы</string>
<string name="businessDisabler_title">Адключыць бізнес-паведамлення</string>
@@ -7025,4 +7027,8 @@
<string name="compression_types">Спосаб кампрэсіі фота</string>
<string name="compression_types_selection">Выберыце спосаб кампрэсіі</string>
<string name="clear_all_cache">Ачысціць ўвесь кэш?</string>
<string name="cache_size">Памер прыкладання</string>
<string name="cache_size_summ">Вага кэша прыкладання</string>
</resources>
+10 -4
View File
@@ -5649,8 +5649,8 @@
<string name="onlinefix_title">Обходить онлайн</string>
<string name="globalUsersOnline_title">Глобальный обход онлайна</string>
<string name="globalUsersOnline_summ">Может вызывать долгие загрузки разделов и большое потребление трафика \n\nНе рекомендуется включать данную функцию</string>
<string name="savemsgsett_title">Сохранять настройки сообщений</string>
<string name="savemsgsett_summ">Сохранять положение тумблеров в настройках сообщений</string>
<string name="savemsgsett_title">Сохранять параметры отправки сообщений</string>
<string name="savemsgsett_summ">Сохранять выбранные параметры статуса исходящих сообщений как исчезновение сообщений и бесшумная отправка</string>
<string name="screenshotdetect_title">Отключить детект скриншотов</string>
<string name="screenshotdetect_summ">Отключить уведомление о том, что вы сделали скриншот</string>
<string name="hideDeviceInfo_title">Отключить отправку метрики</string>
@@ -6191,8 +6191,8 @@
<string name="remove_from_ads_whitelist">Удалить из вайтлиста рекламы</string>
<string name="add_to_ads_stories_whitelist">Добавить в вайтлист историй</string>
<string name="remove_from_ads_stories_whitelist">Удалить из вайтлиста историй</string>
<string name="removed_from_whitelist_success">Группа удалена из вайтлиста</string>
<string name="added_to_whitelist_success">Группа добавлена в вайтлист</string>
<string name="removed_from_whitelist_success">Удалено из вайтлиста</string>
<string name="added_to_whitelist_success">Добавлено в вайтлист</string>
<string name="whitelisted_ad_groups_title">Вайтлист рекламы</string>
<string name="whitelisted_filters_groups_title">Вайтлист фильтров и источников</string>
@@ -6330,6 +6330,8 @@
<string name="promotedstickers_title">Не получать промостикеры</string>
<string name="useOldAppVer_title">Использовать старый дизайн</string>
<string name="useOldAppVer_summ">Работает \"как есть\". Могут быть ошибки</string>
<string name="invertFilters">Инвертировать исключения</string>
<string name="invertFilters_summ">Добавленные в исключения группы будут фильтроваться</string>
<string name="downloading_update">Скачивание обновления</string>
<string name="sources">Источники</string>
@@ -6407,4 +6409,8 @@
<string name="compression_types">Способ компрессии фото</string>
<string name="compression_types_selection">Выберите способ компрессии</string>
<string name="clear_all_cache">Очистить весь кеш?</string>
<string name="cache_size">Размер приложения</string>
<string name="cache_size_summ">Вес кеша приложения</string>
</resources>
+10 -4
View File
@@ -5576,8 +5576,8 @@
<string name="onlinefix_title">Обходити онлайн</string>
<string name="globalUsersOnline_title">Глобальний обхід онлайну</string>
<string name="globalUsersOnline_summ">Може викликати тривале завантаження розділів і велике споживання трафіку \n\nНе рекомендується включати цю функцію</string>
<string name="savemsgsett_title">Зберігати налаштування повідомлень</string>
<string name="savemsgsett_summ">Зберігати положення тумблерів у налаштуваннях повідомлень</string>
<string name="savemsgsett_title">Зберігати параметри відправки повідомлень</string>
<string name="savemsgsett_summ">Зберігати вибрані параметри статусу вихідних повідомлень як зникнення повідомлень і безшумна відправка</string>
<string name="screenshotdetect_title">Вимкнути виявлення скріншотів</string>
<string name="screenshotdetect_summ">Відключити повідомлення про те, що ви зробили скриншот</string>
<string name="hideDeviceInfo_title">Вимкнути відправку метрики</string>
@@ -6116,8 +6116,8 @@
<string name="remove_from_ads_whitelist">Видалити з вайтліста реклами</string>
<string name="add_to_ads_stories_whitelist">Додати до вайтліста історій</string>
<string name="remove_from_ads_stories_whitelist">Видалити з вайтліста історій</string>
<string name="removed_from_whitelist_success">Група видалена з вайтліста</string>
<string name="added_to_whitelist_success">Група додана до вайтліста</string>
<string name="removed_from_whitelist_success">Видалена з вайтліста</string>
<string name="added_to_whitelist_success">Додана до вайтліста</string>
<string name="whitelisted_ad_groups_title">Вайтліст реклами</string>
<string name="whitelisted_filters_groups_title">Вайтліст фільтрів та джерел</string>
@@ -6255,6 +6255,8 @@
<string name="promotedstickers_title">Не отримувати промостикери</string>
<string name="useOldAppVer_title">Використовувати старий дизайн</string>
<string name="useOldAppVer_summ">Працює \"як є\". Можливі помилки</string>
<string name="invertFilters">Інвертувати винятки</string>
<string name="invertFilters_summ">Додані в виключення групи будуть фільтруватися</string>
<string name="downloading_update">Завантаження оновлення</string>
<string name="sources">Джерела</string>
@@ -6332,4 +6334,8 @@
<string name="compression_types">Спосіб компресії фото</string>
<string name="compression_types_selection">Виберіть спосіб компресії</string>
<string name="clear_all_cache">Очистити весь кеш?</string>
<string name="cache_size">Розмір програми</string>
<string name="cache_size_summ">Вага кеша додатки</string>
</resources>
File diff suppressed because it is too large Load Diff
+163 -5
View File
@@ -212,6 +212,11 @@
<public type="array" name="targetlang_value" id="0x7f030074" />
<public type="array" name="undel_value" id="0x7f030075" />
<public type="array" name="wallpaper_change_dialog" id="0x7f030076" />
<public type="array" name="accent_select_type" id="0x7f030077" />
<public type="array" name="compression" id="0x7f030078" />
<public type="array" name="compression_value" id="0x7f030079" />
<public type="array" name="theme_type_name" id="0x7f03007a" />
<public type="array" name="theme_type_name_checkbox" id="0x7f03007b" />
<public type="attr" name="BMSB_error_text_color" id="0x7f040000" />
<public type="attr" name="BuyMusicSubscriptionButtonStyle" id="0x7f040001" />
<public type="attr" name="PIAlphaNormal" id="0x7f040002" />
@@ -2122,6 +2127,7 @@
<public type="attr" name="zOrderOnTop" id="0x7f040773" />
<public type="attr" name="im_ic_msgdl" id="0x7f040774" />
<public type="attr" name="im_ic_msgreload" id="0x7f040775" />
<public type="attr" name="im_ic_stats" id="0x7f040776" />
<public type="bool" name="abc_action_bar_embed_tabs" id="0x7f050000" />
<public type="bool" name="abc_allow_stacked_button_bar" id="0x7f050001" />
<public type="bool" name="abc_config_actionMenuItemAllCaps" id="0x7f050002" />
@@ -2138,6 +2144,7 @@
<public type="bool" name="spb_default_progressiveStart_activated" id="0x7f05000d" />
<public type="bool" name="spb_default_reversed" id="0x7f05000e" />
<public type="bool" name="vk_is_tablet" id="0x7f05000f" />
<public type="bool" name="com_samsung_android_icon_container_has_icon_container" id="0x7f050010" />
<public type="color" name="abc_background_cache_hint_selector_material_dark" id="0x7f060000" />
<public type="color" name="abc_background_cache_hint_selector_material_light" id="0x7f060001" />
<public type="color" name="abc_btn_colored_borderless_text_material" id="0x7f060002" />
@@ -2944,6 +2951,7 @@
<public type="color" name="yellow_sunflower" id="0x7f060324" />
<public type="color" name="iclauncher" id="0x7f060325" />
<public type="color" name="abc_color_highlight_material" id="0x7f060004" />
<public type="color" name="alpha05" id="0x7f060326" />
<public type="dimen" name="_post_side_padding" id="0x7f070000" />
<public type="dimen" name="abc_action_bar_content_inset_material" id="0x7f070001" />
<public type="dimen" name="abc_action_bar_content_inset_with_nav" id="0x7f070002" />
@@ -4944,10 +4952,29 @@
<public type="drawable" name="ic_deepl_logo_icon" id="0x7f080bcb" />
<public type="drawable" name="ic_google_translate_logo" id="0x7f080bcc" />
<public type="drawable" name="ic_yandex_translate_icon" id="0x7f080bd1" />
<public type="drawable" name="microsoft" id="0x7f080bd2" />
<public type="drawable" name="$splash__0" id="0x7f080bd2" />
<public type="drawable" name="roundmsg" id="0x7f080bd3" />
<public type="drawable" name="tgs_entry_background" id="0x7f080bd4" />
<public type="drawable" name="yandex" id="0x7f080bd7" />
<public type="drawable" name="$splash__1" id="0x7f080bd8" />
<public type="drawable" name="$splash__10" id="0x7f080bd9" />
<public type="drawable" name="$splash__11" id="0x7f080bda" />
<public type="drawable" name="$splash__12" id="0x7f080bdb" />
<public type="drawable" name="$splash__13" id="0x7f080bdc" />
<public type="drawable" name="$splash__14" id="0x7f080bdd" />
<public type="drawable" name="$splash__15" id="0x7f080bde" />
<public type="drawable" name="$splash__2" id="0x7f080bdf" />
<public type="drawable" name="$splash__3" id="0x7f080be0" />
<public type="drawable" name="$splash__4" id="0x7f080be1" />
<public type="drawable" name="$splash__5" id="0x7f080be2" />
<public type="drawable" name="$splash__6" id="0x7f080be3" />
<public type="drawable" name="$splash__7" id="0x7f080be4" />
<public type="drawable" name="$splash__8" id="0x7f080be5" />
<public type="drawable" name="$splash__9" id="0x7f080be6" />
<public type="drawable" name="checker_background" id="0x7f080be8" />
<public type="drawable" name="custom_thumb_selector" id="0x7f080be9" />
<public type="drawable" name="custom_track_selector" id="0x7f080bea" />
<public type="drawable" name="splash" id="0x7f080bec" />
<public type="drawable" name="abc_control_background_material" id="0x7f080032" />
<public type="drawable" name="ic_action_close" id="0x7f080322" />
<public type="drawable" name="ic_camera_outline_28_new" id="0x7f0803a0" />
@@ -6745,6 +6772,9 @@
<public type="drawable" name="ic_telegram_24" id="0x7f080bcf" />
<public type="drawable" name="ic_telegram_outline_28" id="0x7f080bd0" />
<public type="drawable" name="vtlogo" id="0x7f080bd6" />
<public type="drawable" name="bing" id="0x7f080be7" />
<public type="drawable" name="sauceNAO" id="0x7f080beb" />
<public type="drawable" name="tracemoe" id="0x7f080bed" />
<public type="drawable" name="bg_music_play_button_white" id="0x7f08015e" />
<public type="drawable" name="bg_poll_bg_thumb" id="0x7f080181" />
<public type="drawable" name="bg_stickers_suggestions_left" id="0x7f0801ad" />
@@ -6867,10 +6897,6 @@
<public type="font" name="vk_sans_text_light" id="0x7f09001a" />
<public type="font" name="vk_sans_text_medium" id="0x7f09001b" />
<public type="font" name="vk_sans_text_regular" id="0x7f09001c" />
<public name="color_preview" id="0x7f0a1021" type="id" />
<public name="color_name" id="0x7f0a1022" type="id" />
<public name="color_value" id="0x7f0a1023" type="id" />
<public name="color_preview_border" id="0x7f0a1024" type="id" />
<public type="id" name="ALT" id="0x7f0a0000" />
<public type="id" name="CIRCLE" id="0x7f0a0001" />
<public type="id" name="CTRL" id="0x7f0a0002" />
@@ -11000,6 +11026,12 @@
<public type="id" name="savedmsg" id="0x7f0a101e" />
<public type="id" name="search_photo" id="0x7f0a101f" />
<public type="id" name="text_hex_wrapper" id="0x7f0a1020" />
<public type="id" name="color_preview" id="0x7f0a1021" />
<public type="id" name="color_name" id="0x7f0a1022" />
<public type="id" name="color_value" id="0x7f0a1023" />
<public type="id" name="color_preview_border" id="0x7f0a1024" />
<public type="id" name="account_backup_view" id="0x7f0a1025" />
<public type="id" name="copy_image" id="0x7f0a1026" />
<public type="integer" name="abc_config_activityDefaultDur" id="0x7f0b0000" />
<public type="integer" name="abc_config_activityShortDur" id="0x7f0b0001" />
<public type="integer" name="angle_rtl_180" id="0x7f0b0002" />
@@ -12811,6 +12843,7 @@
<public type="layout" name="tgs_entry" id="0x7f0d06de" />
<public type="layout" name="wppreview" id="0x7f0d06df" />
<public type="layout" name="write_bar_i" id="0x7f0d06e0" />
<public type="layout" name="color_picker_item" id="0x7f0d06e1" />
<public type="menu" name="add" id="0x7f0e0000" />
<public type="menu" name="attach_item" id="0x7f0e0001" />
<public type="menu" name="audio" id="0x7f0e0002" />
@@ -12923,6 +12956,30 @@
<public type="mipmap" name="vt_changeable_foreground" id="0x7f0f0044" />
<public type="mipmap" name="vt_launcher" id="0x7f0f0045" />
<public type="mipmap" name="vt_party_foreground" id="0x7f0f0047" />
<public type="mipmap" name="ic_launcher_balloon_pink" id="0x7f0f0048" />
<public type="mipmap" name="ic_launcher_balloon_pink_background" id="0x7f0f0049" />
<public type="mipmap" name="ic_launcher_balloon_pink_foreground" id="0x7f0f004a" />
<public type="mipmap" name="ic_launcher_bubble_gum" id="0x7f0f004b" />
<public type="mipmap" name="ic_launcher_bubble_gum_background" id="0x7f0f004c" />
<public type="mipmap" name="ic_launcher_bubble_gum_foreground" id="0x7f0f004d" />
<public type="mipmap" name="ic_launcher_comics" id="0x7f0f004e" />
<public type="mipmap" name="ic_launcher_comics_background" id="0x7f0f004f" />
<public type="mipmap" name="ic_launcher_comics_foreground" id="0x7f0f0050" />
<public type="mipmap" name="ic_launcher_flowers" id="0x7f0f0051" />
<public type="mipmap" name="ic_launcher_flowers_background" id="0x7f0f0052" />
<public type="mipmap" name="ic_launcher_flowers_foreground" id="0x7f0f0053" />
<public type="mipmap" name="ic_launcher_metal_dark" id="0x7f0f0054" />
<public type="mipmap" name="ic_launcher_metal_dark_background" id="0x7f0f0055" />
<public type="mipmap" name="ic_launcher_metal_dark_foreground" id="0x7f0f0056" />
<public type="mipmap" name="ic_launcher_pin_blue" id="0x7f0f0057" />
<public type="mipmap" name="ic_launcher_pin_blue_background" id="0x7f0f0058" />
<public type="mipmap" name="ic_launcher_pin_blue_foreground" id="0x7f0f0059" />
<public type="mipmap" name="ic_launcher_rabbit" id="0x7f0f005a" />
<public type="mipmap" name="ic_launcher_rabbit_background" id="0x7f0f005b" />
<public type="mipmap" name="ic_launcher_rabbit_foreground" id="0x7f0f005c" />
<public type="mipmap" name="ic_launcher_shine" id="0x7f0f005d" />
<public type="mipmap" name="ic_launcher_shine_background" id="0x7f0f005e" />
<public type="mipmap" name="ic_launcher_shine_foreground" id="0x7f0f005f" />
<public type="mipmap" name="vt_adaptive_launcher_foneground" id="0x7f0f0043" />
<public type="mipmap" name="vt_launcher_round" id="0x7f0f0046" />
<public type="mipmap" name="ic_logo_facebook_28" id="0x7f0f0003" />
@@ -19465,6 +19522,88 @@
<public type="string" name="whitelisted_filters_groups_title" id="0x7f121838" />
<public type="string" name="why_news_not_updated_summ" id="0x7f121839" />
<public type="string" name="why_news_not_updated_title" id="0x7f12183a" />
<public type="string" name="accent_color_summ" id="0x7f12183b" />
<public type="string" name="accent_color_title" id="0x7f12183c" />
<public type="string" name="accents" id="0x7f12183d" />
<public type="string" name="accounts_saved_by_path" id="0x7f12183e" />
<public type="string" name="add_to_ads_stories_whitelist" id="0x7f12183f" />
<public type="string" name="amoledtheme_summ" id="0x7f121840" />
<public type="string" name="amoledtheme_title" id="0x7f121841" />
<public type="string" name="appLanguage" id="0x7f121842" />
<public type="string" name="app_open_by_default_settings" id="0x7f121843" />
<public type="string" name="applying_accent" id="0x7f121844" />
<public type="string" name="audio_deleted_from_cache" id="0x7f121845" />
<public type="string" name="blockminiapps_summ" id="0x7f121846" />
<public type="string" name="blockminiapps_title" id="0x7f121847" />
<public type="string" name="businessDisabler_title" id="0x7f121848" />
<public type="string" name="by_choice" id="0x7f121849" />
<public type="string" name="calls_not_available" id="0x7f12184a" />
<public type="string" name="cannot_write" id="0x7f12184b" />
<public type="string" name="change_accent_color" id="0x7f12184c" />
<public type="string" name="compression_types" id="0x7f12184d" />
<public type="string" name="compression_types_selection" id="0x7f12184e" />
<public type="string" name="copydebuginfo_summ" id="0x7f12184f" />
<public type="string" name="copydebuginfo_title" id="0x7f121850" />
<public type="string" name="copyownlink_summ" id="0x7f121851" />
<public type="string" name="copyownlink_title" id="0x7f121852" />
<public type="string" name="crash_service_name" id="0x7f121853" />
<public type="string" name="currentLanguage" id="0x7f121854" />
<public type="string" name="current_theme" id="0x7f121855" />
<public type="string" name="custom_links_warning" id="0x7f121856" />
<public type="string" name="data" id="0x7f121857" />
<public type="string" name="data_updated" id="0x7f121858" />
<public type="string" name="datasettings_title" id="0x7f121859" />
<public type="string" name="device_info" id="0x7f12185a" />
<public type="string" name="device_info_copied" id="0x7f12185b" />
<public type="string" name="dialogstats" id="0x7f12185c" />
<public type="string" name="disable_analytics" id="0x7f12185d" />
<public type="string" name="disable_analytics_summ" id="0x7f12185e" />
<public type="string" name="downloading_update" id="0x7f12185f" />
<public type="string" name="error_applying_accent" id="0x7f121860" />
<public type="string" name="error_no_text" id="0x7f121861" />
<public type="string" name="error_saving_file" id="0x7f121862" />
<public type="string" name="failed_to_get_text" id="0x7f121863" />
<public type="string" name="invalid_pack_link" id="0x7f121864" />
<public type="string" name="invalidate_theme_cache_title" id="0x7f121865" />
<public type="string" name="logColors_title" id="0x7f121866" />
<public type="string" name="maxquality_summ" id="0x7f121867" />
<public type="string" name="maxquality_title" id="0x7f121868" />
<public type="string" name="microgsett" id="0x7f121869" />
<public type="string" name="monettheme_summ" id="0x7f12186a" />
<public type="string" name="monettheme_title" id="0x7f12186b" />
<public type="string" name="newsfeed_notif_summ" id="0x7f12186c" />
<public type="string" name="newsfeed_notif_title" id="0x7f12186d" />
<public type="string" name="open_bot" id="0x7f12186e" />
<public type="string" name="promotedstickers_title" id="0x7f12186f" />
<public type="string" name="remove_encryption_key" id="0x7f121870" />
<public type="string" name="remove_from_ads_stories_whitelist" id="0x7f121871" />
<public type="string" name="reset_accounts" id="0x7f121872" />
<public type="string" name="reset_all_settings" id="0x7f121873" />
<public type="string" name="restore_accounts" id="0x7f121874" />
<public type="string" name="restore_settings" id="0x7f121875" />
<public type="string" name="save_accounts" id="0x7f121876" />
<public type="string" name="save_online_data" id="0x7f121877" />
<public type="string" name="select_color" id="0x7f121878" />
<public type="string" name="select_palette" id="0x7f121879" />
<public type="string" name="sources" id="0x7f12187a" />
<public type="string" name="storiesGroupsAdBlock" id="0x7f12187b" />
<public type="string" name="storiesGroupsAdBlocksummary" id="0x7f12187c" />
<public type="string" name="systemtheme" id="0x7f12187d" />
<public type="string" name="systemtheme_enabled" id="0x7f12187e" />
<public type="string" name="systemtheme_summ" id="0x7f12187f" />
<public type="string" name="updateverifdata_summ" id="0x7f121880" />
<public type="string" name="updateverifdata_title" id="0x7f121881" />
<public type="string" name="useCustomPrefsStyle_summ" id="0x7f121882" />
<public type="string" name="useCustomPrefsStyle_title" id="0x7f121883" />
<public type="string" name="useGenius_summ" id="0x7f121884" />
<public type="string" name="useGenius_title" id="0x7f121885" />
<public type="string" name="useNewColorEngine_summ" id="0x7f121886" />
<public type="string" name="useNewColorEngine_title" id="0x7f121887" />
<public type="string" name="useOldAppVer_summ" id="0x7f121888" />
<public type="string" name="useOldAppVer_title" id="0x7f121889" />
<public type="string" name="vkx_integration_enabled_info" id="0x7f12188a" />
<public type="string" name="whitelisted_ad_groups_stories_title" id="0x7f12188b" />
<public type="string" name="writebar_ios_title" id="0x7f12188c" />
<public type="style" name="ActionBarGrayTheme" id="0x7f130000" />
<public type="style" name="ActionBarProgress" id="0x7f130001" />
<public type="style" name="ActionBarSpinner" id="0x7f130002" />
@@ -20606,6 +20745,24 @@
<public type="style" name="Base.V26.Widget.AppCompat.Toolbar" id="0x7f1300a1" />
<public type="style" name="Base.V28.Theme.AppCompat" id="0x7f1300a2" />
<public type="style" name="Base.V28.Theme.AppCompat.Light" id="0x7f1300a3" />
<public type="style" name="Vk.Theme.VkApp.amoled_monet_generated" id="0x7f130475" />
<public type="style" name="Vk.Theme.VkApp.amoled_monet_old_generated" id="0x7f130476" />
<public type="style" name="Vk.Theme.VkApp.bright_light_monet_generated" id="0x7f130477" />
<public type="style" name="Vk.Theme.VkApp.client_dark_monet_generated" id="0x7f130478" />
<public type="style" name="Vk.Theme.VkApp.client_light_monet_generated" id="0x7f130479" />
<public type="style" name="Vk.Theme.VkApp.space_gray_monet_generated" id="0x7f13047a" />
<public type="style" name="VkAmoledMonetStyle" id="0x7f13047b" />
<public type="style" name="VkAmoledMonetTheme" id="0x7f13047c" />
<public type="style" name="VkDarkMonetStyle" id="0x7f13047d" />
<public type="style" name="VkDarkMonetTheme" id="0x7f13047e" />
<public type="style" name="VkLightMonetStyle" id="0x7f13047f" />
<public type="style" name="VkLightMonetTheme" id="0x7f130480" />
<public type="style" name="VkMilkAmoledMonetStyle" id="0x7f130481" />
<public type="style" name="VkMilkAmoledMonetTheme" id="0x7f130482" />
<public type="style" name="VkMilkDarkMonetStyle" id="0x7f130483" />
<public type="style" name="VkMilkDarkMonetTheme" id="0x7f130484" />
<public type="style" name="VkMilkLightMonetStyle" id="0x7f130485" />
<public type="style" name="VkMilkLightMonetTheme" id="0x7f130486" />
<public type="xml" name="account_preferences" id="0x7f150000" />
<public type="xml" name="authenticator" id="0x7f150001" />
<public type="xml" name="contacts_custom_type" id="0x7f150002" />
@@ -20637,4 +20794,5 @@
<public type="xml" name="preferences_proxy" id="0x7f15001c" />
<public type="xml" name="preferences_tgs" id="0x7f15001d" />
<public type="xml" name="preferences_themes" id="0x7f15001e" />
<public type="xml" name="locales_config" id="0x7f15001f" />
</resources>
+10 -4
View File
@@ -5783,8 +5783,8 @@ You need to restart the application to apply proxy settings"</string>
<string name="onlinefix_title">Bypass online indicator</string>
<string name="globalUsersOnline_title">Global online bypass</string>
<string name="globalUsersOnline_summ">May cause slow partition loading and high traffic consumption \n\nIt is not recommended to enable this feature</string>
<string name="savemsgsett_title">Save message settings</string>
<string name="savemsgsett_summ">Save the position of the toggle switches in the message settings</string>
<string name="savemsgsett_title">Save message sending parameters</string>
<string name="savemsgsett_summ">Save selected outgoing message status parameters like message disappearing and silent sending</string>
<string name="screenshotdetect_title">Disable screenshot detection</string>
<string name="screenshotdetect_summ">Turn off the notification that you took a screenshot</string>
<string name="hideDeviceInfo_title">Disable sending metric</string>
@@ -6329,8 +6329,8 @@ May look like a fake leaving the online"</string>
<string name="remove_from_ads_stories_whitelist">Remove from stories whitelist</string>
<string name="add_to_ads_whitelist">Add to ads stories whitelist</string>
<string name="remove_from_ads_whitelist">Remove from ads stories whitelist</string>
<string name="removed_from_whitelist_success">Group removed from whitelist</string>
<string name="added_to_whitelist_success">Group added to whitelist</string>
<string name="removed_from_whitelist_success">Removed from whitelist</string>
<string name="added_to_whitelist_success">Added to whitelist</string>
<string name="whitelisted_ad_groups_title">Ads whitelist</string>
<string name="whitelisted_filters_groups_title">Filters whitelist and copyrights</string>
@@ -6468,6 +6468,8 @@ May look like a fake leaving the online"</string>
<string name="promotedstickers_title">Don\'t receive promoted stickers</string>
<string name="useOldAppVer_title">Use old music catalog</string>
<string name="useOldAppVer_summ">Works \"as is\". There may be errors</string>
<string name="invertFilters">Invert exceptions</string>
<string name="invertFilters_summ">Groups added to exceptions will be filtered</string>
<string name="downloading_update">Downloading update</string>
<string name="sources">Sources</string>
@@ -6545,4 +6547,8 @@ May look like a fake leaving the online"</string>
<string name="compression_types">Photo compression method</string>
<string name="compression_types_selection">Choose the compression method</string>
<string name="clear_all_cache">Clear all cache?</string>
<string name="cache_size">App size</string>
<string name="cache_size_summ">Cache size</string>
</resources>
+15 -10
View File
@@ -89,6 +89,16 @@
<Preference
android:key="whitelisted_filters_groups"
android:title="@string/whitelisted_filters_groups_title"/>
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="invertFilters"
android:summary="@string/invertFilters_summ"
android:title="@string/invertFilters"/>
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="blockminiapps"
android:summary="@string/blockminiapps_summ"
android:title="@string/blockminiapps_title"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/sources">
<EditTextPreference
@@ -141,20 +151,15 @@
<Preference
android:key="newsfeedlistmanager_reset"
android:title="@string/newsfeedlistmanager_reset_title"/>
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="force_disable_psm"
android:summary="@string/force_disable_psm_summ"
android:title="@string/force_disable_psm_title"/>
<!-- <com.vtosters.lite.ui.MaterialSwitchPreference-->
<!-- android:defaultValue="false"-->
<!-- android:key="force_disable_psm"-->
<!-- android:summary="@string/force_disable_psm_summ"-->
<!-- android:title="@string/force_disable_psm_title"/>-->
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="feedcache"
android:summary="@string/feed_other_cache_summary"
android:title="@string/vtlfeedcache"/>
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="blockminiapps"
android:summary="@string/blockminiapps_summ"
android:title="@string/blockminiapps_title"/>
</PreferenceCategory>
</PreferenceScreen>
-6
View File
@@ -4,12 +4,6 @@
<Preference
android:key="datasettings"
android:title="@string/datasettings_title"/>
<Preference
android:key="clearcache"
android:title="@string/clearcache_other_title"/>
<Preference
android:key="autoclearcache"
android:title="@string/autoclearcache"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/other_fix_app">
<Preference
@@ -43,9 +43,9 @@
# .line 4
# array-length v1, p1
#
# const/4 v2, 0x0
#
# const/4 v3, 0x0
const/4 v2, 0x0
const/4 v3, 0x0
#
# :goto_0
# if-ge v3, v1, :cond_0
@@ -778,42 +778,42 @@
}
.end annotation
.line 2
invoke-static {}, Lcom/vk/dto/discover/DiscoverItem$Template;->values()[Lcom/vk/dto/discover/DiscoverItem$Template;
# .line 2
# invoke-static {}, Lcom/vk/dto/discover/DiscoverItem$Template;->values()[Lcom/vk/dto/discover/DiscoverItem$Template;
move-result-object v0
# move-result-object v0
.line 3
new-instance v1, Ljava/util/ArrayList;
# .line 3
# new-instance v1, Ljava/util/ArrayList;
array-length v2, v0
# array-length v2, v0
invoke-direct {v1, v2}, Ljava/util/ArrayList;-><init>(I)V
# invoke-direct {v1, v2}, Ljava/util/ArrayList;-><init>(I)V
.line 4
array-length v2, v0
# .line 4
# array-length v2, v0
const/4 v3, 0x0
const/4 v4, 0x0
:goto_0
if-ge v4, v2, :cond_0
# :goto_0
# if-ge v4, v2, :cond_0
aget-object v5, v0, v4
# aget-object v5, v0, v4
.line 5
invoke-virtual {v5}, Lcom/vk/dto/discover/DiscoverItem$Template;->b()Ljava/lang/String;
# .line 5
# invoke-virtual {v5}, Lcom/vk/dto/discover/DiscoverItem$Template;->b()Ljava/lang/String;
move-result-object v5
# move-result-object v5
invoke-interface {v1, v5}, Ljava/util/Collection;->add(Ljava/lang/Object;)Z
# invoke-interface {v1, v5}, Ljava/util/Collection;->add(Ljava/lang/Object;)Z
add-int/lit8 v4, v4, 0x1
# add-int/lit8 v4, v4, 0x1
goto :goto_0
# goto :goto_0
:cond_0
# :cond_0
invoke-static {}, Lru/vtosters/hooks/DiscoverTemplates;->getTemplates()Ljava/util/ArrayList;
@@ -234,20 +234,6 @@
.line 6
iget v2, p0, Lcom/vk/im/engine/internal/api_commands/messages/MessagesGetConversationsApiCmd;->a:I
const-string v3, "major_sort_id"
const-string v4, "1023"
const v5, 0x7fffffff
if-eq v5, v2, :cond_4
const-string v4, "0"
.line 6
:cond_4
invoke-virtual {v1, v3, v4}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a;
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
@@ -303,11 +289,6 @@
invoke-virtual {v1, v0}, Lcom/vk/api/internal/MethodCall$a;->b(Z)Lcom/vk/api/internal/MethodCall$a;
const-string v2, "5.131"
.line 10
invoke-virtual {v1, v2}, Lcom/vk/api/internal/MethodCall$a;->b(Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a;
.line 13
invoke-virtual {v1}, Lcom/vk/api/internal/MethodCall$a;->a()Lcom/vk/api/internal/MethodCall;
@@ -1,27 +0,0 @@
.class public interface abstract Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;
.super Ljava/lang/Object;
.source "MediaNative.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/vk/medianative/MediaNative$EncoderHandler;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x609
name = "Callback"
.end annotation
# virtual methods
.method public abstract getLayerBitmap(II)Landroid/graphics/Bitmap;
.annotation build Landroidx/annotation/Nullable;
.end annotation
.end method
.method public abstract onBytes(I)V
.end method
.method public abstract onProgress(I)V
.end method
@@ -1,157 +0,0 @@
.class public Lcom/vk/medianative/MediaNative$EncoderHandler;
.super Landroid/os/Handler;
.source "MediaNative.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/vk/medianative/MediaNative;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = "EncoderHandler"
.end annotation
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;
}
.end annotation
# instance fields
.field private a:Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;
# direct methods
.method constructor <init>(Landroid/os/Looper;)V
.locals 0
.line 1
invoke-direct {p0, p1}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V
return-void
.end method
.method public static postEventFromNative(Ljava/lang/Object;III)Ljava/lang/Object;
.locals 2
.annotation build Landroidx/annotation/Keep;
.end annotation
const/4 v0, 0x0
if-nez p0, :cond_0
return-object v0
.line 1
:cond_0
check-cast p0, Ljava/lang/ref/WeakReference;
invoke-virtual {p0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;
move-result-object p0
check-cast p0, Lcom/vk/medianative/MediaNative$EncoderHandler;
if-eqz p0, :cond_2
const/4 v1, 0x2
if-ne p1, v1, :cond_1
.line 2
iget-object p0, p0, Lcom/vk/medianative/MediaNative$EncoderHandler;->a:Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;
invoke-interface {p0, p2, p3}, Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;->getLayerBitmap(II)Landroid/graphics/Bitmap;
move-result-object p0
return-object p0
.line 3
:cond_1
invoke-virtual {p0, p1, p2, p3, v0}, Landroid/os/Handler;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
move-result-object p1
.line 4
invoke-virtual {p0, p1}, Landroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
:cond_2
return-object v0
.end method
# virtual methods
.method public handleMessage(Landroid/os/Message;)V
.locals 3
.line 1
iget-object v0, p0, Lcom/vk/medianative/MediaNative$EncoderHandler;->a:Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;
if-nez v0, :cond_0
return-void
.line 2
:cond_0
iget v1, p1, Landroid/os/Message;->what:I
if-eqz v1, :cond_2
const/4 v2, 0x1
if-eq v1, v2, :cond_1
.line 3
invoke-static {}, Lcom/vk/medianative/MediaNative;->a()Ljava/lang/String;
move-result-object v0
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Unknown message type "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget p1, p1, Landroid/os/Message;->what:I
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-static {v0, p1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
return-void
.line 4
:cond_1
iget p1, p1, Landroid/os/Message;->arg1:I
invoke-interface {v0, p1}, Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;->onProgress(I)V
return-void
.line 5
:cond_2
iget p1, p1, Landroid/os/Message;->arg1:I
invoke-interface {v0, p1}, Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;->onBytes(I)V
return-void
.end method
.method public setCallback(Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;)V
.locals 0
.line 1
iput-object p1, p0, Lcom/vk/medianative/MediaNative$EncoderHandler;->a:Lcom/vk/medianative/MediaNative$EncoderHandler$Callback;
return-void
.end method
File diff suppressed because it is too large Load Diff
@@ -758,7 +758,7 @@
.line 3
sget-object v0, Lcom/vk/core/util/AppContextHolder;->a:Landroid/content/Context;
invoke-static {v0}, Lcom/vk/medianative/MediaNative;->init(Landroid/content/Context;)V
# invoke-static {v0}, Lcom/vk/medianative/MediaNative;->init(Landroid/content/Context;)V
.line 4
sget-object v0, Lcom/vk/libvideo/storage/VideoPositionStorage;->e:Lcom/vk/libvideo/storage/VideoPositionStorage$c;
@@ -3941,6 +3941,8 @@
move-result v0
const v0, 0x1 # disable calls in nonmilk
if-nez v0, :cond_8
const v0, 0x7f0e0029
@@ -777,94 +777,96 @@
.method private static loadLibraries(Landroid/content/Context;)Z
.locals 6
.line 1
sget-boolean p0, Lru/mail/voip2/VoipImpl2;->_nativeLibsLoaded:Z
# .line 1
# sget-boolean p0, Lru/mail/voip2/VoipImpl2;->_nativeLibsLoaded:Z
const/4 v0, 0x1
# const/4 v0, 0x1
if-eqz p0, :cond_0
# if-eqz p0, :cond_0
return v0
# return v0
.line 2
:cond_0
sget p0, Landroid/os/Build$VERSION;->SDK_INT:I
# .line 2
# :cond_0
# sget p0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x15
# const/16 v1, 0x15
const-string v2, "arm64"
# const-string v2, "arm64"
const/4 v3, 0x0
# const/4 v3, 0x0
if-lt p0, v1, :cond_3
# if-lt p0, v1, :cond_3
.line 3
sget-object p0, Landroid/os/Build;->SUPPORTED_64_BIT_ABIS:[Ljava/lang/String;
# .line 3
# sget-object p0, Landroid/os/Build;->SUPPORTED_64_BIT_ABIS:[Ljava/lang/String;
array-length v1, p0
# array-length v1, p0
const/4 v4, 0x0
# const/4 v4, 0x0
:goto_0
if-ge v4, v1, :cond_2
# :goto_0
# if-ge v4, v1, :cond_2
aget-object v5, p0, v4
# aget-object v5, p0, v4
.line 4
invoke-virtual {v5, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
# .line 4
# invoke-virtual {v5, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
move-result v5
# move-result v5
if-eqz v5, :cond_1
# if-eqz v5, :cond_1
const/4 p0, 0x0
# const/4 p0, 0x0
goto :goto_1
# goto :goto_1
:cond_1
add-int/lit8 v4, v4, 0x1
# :cond_1
# add-int/lit8 v4, v4, 0x1
goto :goto_0
# goto :goto_0
:cond_2
const/4 p0, 0x0
# :cond_2
# const/4 p0, 0x0
goto :goto_1
# goto :goto_1
.line 5
:cond_3
sget-object p0, Landroid/os/Build;->CPU_ABI:Ljava/lang/String;
# .line 5
# :cond_3
# sget-object p0, Landroid/os/Build;->CPU_ABI:Ljava/lang/String;
invoke-virtual {p0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
# invoke-virtual {p0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
move-result p0
# move-result p0
:goto_1
if-eqz p0, :cond_4
# :goto_1
# if-eqz p0, :cond_4
const-string p0, "voip_armv7-a-neon"
# const-string p0, "voip_armv7-a-neon"
goto :goto_2
# goto :goto_2
:cond_4
const-string p0, "voip_armv7-a-neon"
# :cond_4
# const-string p0, "voip_armv7-a-neon"
.line 6
:goto_2
:try_start_0
invoke-static {p0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
# .line 6
# :goto_2
# :try_start_0
# invoke-static {p0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
.line 7
sput-boolean v0, Lru/mail/voip2/VoipImpl2;->_nativeLibsLoaded:Z
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
# .line 7
# sput-boolean v0, Lru/mail/voip2/VoipImpl2;->_nativeLibsLoaded:Z
# :try_end_0
# .catchall {:try_start_0 .. :try_end_0} :catchall_0
goto :goto_3
# goto :goto_3
:catchall_0
# :catchall_0
# const/4 v0, 0x0
# :goto_3
const/4 v0, 0x0
:goto_3
return v0
.end method