Compare commits

...
21 Commits
Author SHA1 Message Date
gdlbo e992203b7c Some color fixes + upped default app version 2022-05-10 22:34:56 +03:00
gdlbo 0ed057d705 Added another cringe feature 2022-05-10 22:12:40 +03:00
gdlbo 9b70ca6faf Fixed doc upload 2022-05-10 21:27:25 +03:00
gdlbo 422c3e4a6c Fixed stats crash 2022-05-10 21:07:29 +03:00
gdlbo 6dac880d61 Custom opus lib bridges 2022-05-10 20:22:39 +03:00
gdlbo c911b2d64e Custom opus lib bridges 2022-05-10 20:18:59 +03:00
gdlbo 39f72f9058 Crashreporter fix 2022-05-10 14:35:33 +03:00
gdlbo 2bff354ad0 Amoled monet accent + color fixes 2022-05-10 14:11:14 +03:00
gdlbo cb55e9b96f Disabled stats.track*** 2022-05-10 13:53:14 +03:00
gdlbo 33f551d464 Fixed vk cringe refl 2022-05-10 13:26:00 +03:00
gdlbo 282fa7bdda Beautify code 2022-05-07 18:31:07 +03:00
gdlbo 0abd97e8e1 Deleted unused code 2022-05-07 11:16:22 +03:00
gdlbo 5dd616685d Decrypt 2022-05-06 14:50:02 +03:00
gdlbo aff99be92d Fixes 2022-05-06 14:05:23 +03:00
gdlbo c255f1e498 Undelete feature + fixes 2022-05-06 13:43:42 +03:00
gdlbo 70342daf07 Merge branch 'master' of https://github.com/vtosters/lite 2022-05-06 01:58:35 +03:00
gdlbo f95672e57d Encryption + Undelete code base 2022-05-06 01:57:33 +03:00
gdlbo 8f5da42df4 color fixes 2022-05-04 16:41:59 +03:00
gdlbo 4022903069 Fixed crash 2022-05-04 14:23:25 +03:00
gdlbo 4600c185e4 Added proxy user/pass auth 2022-05-04 13:12:39 +03:00
gdlbo 30e8ec0038 Update README.md 2022-05-03 23:45:37 +03:00
91 changed files with 1966 additions and 306 deletions
+4 -4
View File
@@ -8,14 +8,14 @@ VTosters Lite - это модифицированный клиент (деком
Стабильные сборки находятся в [Releases](https://github.com/vtosters/lite/releases) Стабильные сборки находятся в [Releases](https://github.com/vtosters/lite/releases)
## Откладка ## Отладка приложения
Для откладки с помощью Android Studio необходимо пройти в `/smali/AndroidManifest.xml` Для отладки с помощью Android Studio необходимо пройти в `/smali/AndroidManifest.xml`
``` ```
android:debuggable="false" -> android:debuggable="true" android:debuggable="false" -> android:debuggable="true"
``` ```
Для дополнительной откладки ответов, доп логов и подмены данных для дебаг приложения необходимо включить **Режим разработчика** Для дополнительной отладки ответов, доп логов и подмены данных для дебаг приложения необходимо включить **Режим разработчика**
``` ```
Настройки -> Для разработчиков -> Режим разработчика Настройки -> Для разработчиков -> Режим разработчика
``` ```
@@ -92,4 +92,4 @@ android:debuggable="false" -> android:debuggable="true"
build.bat build.bat
``` ```
![](https://cdn.discordapp.com/attachments/762063967979175946/961682299366309928/unknown.png) ![](https://cdn.discordapp.com/attachments/762063967979175946/961682299366309928/unknown.png)
@@ -1,5 +1,8 @@
package ru.vtosters.lite.audio.gcm; package ru.vtosters.lite.audio.gcm;
import static ru.vtosters.lite.utils.Preferences.VKVersion;
import static ru.vtosters.lite.utils.Preferences.VKVersionBuild;
import android.os.Build; import android.os.Build;
import android.util.Base64; import android.util.Base64;
@@ -108,7 +111,7 @@ public class GCMFix {
params.add("X-X-subscription=841415684880"); params.add("X-X-subscription=841415684880");
} }
params.add("X-X-subtype=841415684880"); params.add("X-X-subtype=841415684880");
params.add("X-app_ver=3439"); params.add("X-app_ver=" + VKVersionBuild());
params.add("X-kid=|ID|" + rid + "|"); params.add("X-kid=|ID|" + rid + "|");
params.add("X-osv=30"); params.add("X-osv=30");
params.add("X-sig=" + sig); params.add("X-sig=" + sig);
@@ -129,12 +132,12 @@ public class GCMFix {
if (!del) { if (!del) {
params.add("X-gmp_app_id=1:841415684880:android:632f429381141121"); params.add("X-gmp_app_id=1:841415684880:android:632f429381141121");
} }
params.add("X-app_ver_name=5.29"); params.add("X-app_ver_name=" + VKVersion());
params.add("app=com.vkontakte.android"); params.add("app=com.vkontakte.android");
params.add("sender=841415684880"); params.add("sender=841415684880");
params.add("device=" + androidId); params.add("device=" + androidId);
params.add("cert=48761eef50ee53afc4cc9c5f10e6bde7f8f5b82f"); params.add("cert=48761eef50ee53afc4cc9c5f10e6bde7f8f5b82f");
params.add("app_ver=3439"); params.add("app_ver=" + VKVersionBuild());
params.add("gcm_ver=11949470"); params.add("gcm_ver=11949470");
} }
@@ -1,4 +1,4 @@
package ru.vtosters.lite.badmanners; package ru.vtosters.lite.deviceinfo;
public class Device { public class Device {
private String androidId; private String androidId;
@@ -1,4 +1,4 @@
package ru.vtosters.lite.badmanners; package ru.vtosters.lite.deviceinfo;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.content.Context; import android.content.Context;
@@ -0,0 +1,116 @@
package ru.vtosters.lite.encryption;
import android.util.Log;
import android.util.Pair;
import com.vk.im.engine.models.messages.Msg;
import com.vk.im.engine.models.messages.MsgFromUser;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import ru.vtosters.lite.encryption.base.IMProcessor;
import ru.vtosters.lite.encryption.processors.BeeCryptProcessor;
import ru.vtosters.lite.encryption.processors.DefaultCoffeeProcessor;
import ru.vtosters.lite.encryption.processors.DonateCoffeeProcessor;
import ru.vtosters.lite.encryption.processors.MP3InvisibleProcessor;
import ru.vtosters.lite.encryption.processors.VTostersAESProcessor;
import ru.vtosters.lite.encryption.processors.VTostersProcessor;
public class EncryptProvider {
public static List<IMProcessor> processors = new ArrayList<>();
public static IMProcessor getProcessorFor(int peerId) {
IMProcessor enabled = null;
for (IMProcessor processor: EncryptProvider.processors) {
if (processor.isUsedToEncrypt(peerId)) {
enabled = processor;
}
}
return enabled;
}
public static String getBody(MsgFromUser msg) {
return msg.E();
}
public static int getPeerId(Msg msg) {
return msg.b();
}
// This will run through EVERY single processor available.
public static String decryptMessage(MsgFromUser msg) {
return decryptMessage(getBody(msg), getPeerId(msg));
}
public static String decryptMessage(String msgBody, int peer) {
try {
for (IMProcessor processor : processors) {
if ((processor.isUsed() || !processor.isPublic()) && processor.isEncrypted(msgBody) && (processor.isPublic() || getKeyForProcessor(processor, peer) != null))
return "\uD83D\uDD12 " + processor.decode(msgBody, getKeyForProcessor(processor, peer));
}
} catch (Exception e) {
e.printStackTrace();
}
return msgBody;
}
private static byte[] getKeyForProcessor(IMProcessor processor, int peer) {
if (processor.isPublic()) return null;
String keyString = processor.getEncryptionKeyFor(peer);
if (keyString == null) return null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(keyString.getBytes());
byte[] key = new byte[16];
System.arraycopy(hash, 0, key, 0, key.length);
return key;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return keyString.getBytes();
}
// This will use only the processor which was chosen in chat menu [that's why ID is needed, bruh]
public static String encryptMessage(MsgFromUser msg) {
String msgBody = getBody(msg);
Log.d("EncryptProvider", "encryptMessage: msg = " + msg.toString());
Log.d("EncryptProvider", "encryptMessage: body = " + msgBody);
Log.d("EncryptProvider", "encryptMessage: peerId = " + getPeerId(msg));
for (IMProcessor processor: processors) {
int peer = getPeerId(msg);
if (processor.isUsedToEncrypt(peer)) {
return processor.encode(msgBody, getKeyForProcessor(processor, peer));
}
}
return msgBody;
}
// For rendering UI
public static List<Pair<String, String>> getUserVisibleEncoders() {
List<Pair<String, String>> theList = new ArrayList<>();
for (IMProcessor processor: processors) {
if (processor.isPublic()) theList.add(new Pair<>("VT_IMDecode_"+processor.getPrefKey(), processor.getUIName()));
}
return theList;
}
static {
processors.add(new VTostersProcessor());
processors.add(new VTostersAESProcessor());
processors.add(new DefaultCoffeeProcessor());
processors.add(new DonateCoffeeProcessor());
processors.add(new BeeCryptProcessor());
processors.add(new MP3InvisibleProcessor());
}
}
@@ -0,0 +1,78 @@
package ru.vtosters.lite.encryption.base;
import static ru.vtosters.lite.utils.Preferences.BooleanFalse;
import static ru.vtosters.lite.utils.Preferences.BooleanTrue;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import ru.vtosters.lite.utils.Globals;
public abstract class IMProcessor {
// By default it checks start and end tag.
public boolean isEncrypted(String source) {
//Log.d("IMProcessor", "Checking if encrypted: "+source+" / "+getUIName());
return source.startsWith(startTag()) && source.endsWith(endTag());
}
// Key can be null - if it's a public processor
@NonNull protected abstract String encodeInternal(@NonNull String source, @Nullable byte[] key);
@NonNull protected abstract String decodeInternal(@NonNull String source, @Nullable byte[] key);
// Automatically removes tags. Magic!
@NonNull
public String encode(@NonNull String source, @Nullable byte[] key) {
//Log.d("IMProcessor", "Encoding "+source);
return startTag() + encodeInternal(source, key) + endTag();
}
@NonNull
public String decode(@NonNull String source, @Nullable byte[] key) {
//Log.d("IMProcessor", "Decoding");
return decodeInternal(source.substring(startTag().length(), source.length() - endTag().length()), key);
}
// Public - no key required.
public boolean isPublic() {
return true;
}
// UI thing
@NonNull abstract public String getUIName();
@NonNull abstract public String getPrefKey();
@NonNull public String startTag() {
return "";
}
@NonNull public String endTag() {
return "";
}
public boolean isUsed() {
//Log.d("IMProcessor", "Checking if decoded with "+getUIName());
return BooleanTrue("VT_IMDecode_"+getPrefKey());
}
public boolean isUsedToEncrypt(int id) {
//Log.d("IMProcessor", "Checking if "+id+" is ready to be encrypted with "+getUIName());
return BooleanFalse("VT_IMEncode_"+getPrefKey()+"_"+id);
}
public void enableEncryptFor(int id) {
Globals.getPrefs().edit().putBoolean("VT_IMEncode_"+getPrefKey()+"_"+id, true).apply();
}
public void disableEncryptFor(int id) {
Globals.getPrefs().edit().putBoolean("VT_IMEncode_"+getPrefKey()+"_"+id, false).apply();
}
public void setEncryptionKeyFor(int id, @Nullable String key) {
if (key == null || key.isEmpty()) key = "VTAesDefault";
Globals.getPrefs().edit().putString("VT_IMEncodeKey_"+getPrefKey()+"_"+id, key).apply();
}
@Nullable
public String getEncryptionKeyFor(int id) {
return Globals.getPrefs().getString("VT_IMEncodeKey_"+getPrefKey()+"_"+id, null);
}
}
@@ -0,0 +1,75 @@
package ru.vtosters.lite.encryption.processors;
import android.util.Base64;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.nio.charset.StandardCharsets;
import ru.vtosters.lite.encryption.base.IMProcessor;
public class BeeCryptProcessor extends IMProcessor {
private static final String BC_CHARSET = "жъЖЪ";
@NonNull
@Override
protected String encodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
String a = Base64.encodeToString(source.getBytes(StandardCharsets.UTF_8), 2);
StringBuilder res = new StringBuilder();
for (int i = 0; i < a.length(); i++) {
StringBuilder bintxt = new StringBuilder();
int c = a.charAt(i);
for (int j = 0; j < 4; j++) {
bintxt.insert(0, BC_CHARSET.charAt(c % 4));
c /= 4;
}
res.append(bintxt);
}
return res.toString();
} catch (java.lang.Exception e) {
e.printStackTrace();
return source;
}
}
@Override
public boolean isEncrypted(String source) {
return source.matches("[жъЖЪ]{16,}");
}
@NonNull
@Override
protected String decodeInternal(@NonNull String source, @Nullable byte[] key) {
StringBuilder b64 = new StringBuilder();
int i = 0;
while (i < source.length() - 3) {
try {
String bintxt = source.substring(i, i + 4);
int c = 0;
for (int j = 0; j < 4; j++) {
c = (c * 4) + Math.max(0, BC_CHARSET.indexOf(bintxt.charAt(j)));
}
b64.append((char) c);
i += 4;
} catch (java.lang.Exception e) {
e.printStackTrace();
return source;
}
}
return new String(Base64.decode(b64.toString(), 2), StandardCharsets.UTF_8);
}
@NonNull
@Override
public String getUIName() {
return "MP3 [beecrypt]";
}
@NonNull
@Override
public String getPrefKey() {
return "mp3_bc";
}
}
@@ -0,0 +1,103 @@
package ru.vtosters.lite.encryption.processors;
import android.util.Base64;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import ru.vtosters.lite.encryption.base.IMProcessor;
public class DefaultCoffeeProcessor extends IMProcessor {
private final static String KEY = "stupidUsersMustD";
private static Cipher dCipher, eCipher;
static {
try {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
dCipher = Cipher.getInstance("AES");
dCipher.init(Cipher.DECRYPT_MODE, key);
eCipher = Cipher.getInstance("AES");
eCipher.init(Cipher.ENCRYPT_MODE, key);
} catch (Exception e) {
e.printStackTrace();
}
}
private String toHex(String text) {
char[] chars = text.toCharArray();
StringBuilder str = new StringBuilder();
for (char aChar : chars) {
String s = Integer.toHexString(aChar);
if (s.length() < 2) s = "0" + s;
str.append(s.toUpperCase()).append(" ");
}
String string = str.toString();
return string.substring(0, string.length()-1);
}
private String fromHex(String text) {
text = text.replace(" ", "");
char[] chars = text.toCharArray();
char[] chars2 = new char[chars.length/2];
for (int i = 0; i < chars.length; i+=2) {
String c = String.valueOf(chars[i]) + chars[i + 1];
chars2[i/2] = (char) Integer.parseInt(c, 16);
}
return new String(chars2);
}
@NonNull
@Override
protected String encodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
return toHex(Base64.encodeToString(eCipher.doFinal(source.getBytes()), 0));
} catch (Exception e) {
e.printStackTrace();
}
return source;
}
@NonNull
@Override
protected String decodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
return new String(dCipher.doFinal(Base64.decode(fromHex(source), 0)));
} catch (Exception e) {
e.printStackTrace();
}
return source;
}
@Override
@NonNull
public String startTag() {
return "VK CO FF EE ";
}
@Override
@NonNull
public String endTag() {
return " VK CO FF EE";
}
@NonNull
@Override
public String getUIName() {
return "VK Coffee [default]";
}
@NonNull
@Override
public String getPrefKey() {
return "coffee_default";
}
}
@@ -0,0 +1,29 @@
package ru.vtosters.lite.encryption.processors;
import androidx.annotation.NonNull;
public class DonateCoffeeProcessor extends DefaultCoffeeProcessor {
@Override
@NonNull
public String startTag() {
return "II ";
}
@Override
@NonNull
public String endTag() {
return " II";
}
@NonNull
@Override
public String getUIName() {
return "VK Coffee [hidden]";
}
@NonNull
@Override
public String getPrefKey() {
return "coffee_donate";
}
}
@@ -0,0 +1,79 @@
package ru.vtosters.lite.encryption.processors;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.nio.charset.StandardCharsets;
import ru.vtosters.lite.encryption.base.IMProcessor;
public class MP3InvisibleProcessor extends IMProcessor {
@NonNull
@Override
protected String encodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
byte[] bytes = source.getBytes(StandardCharsets.UTF_8);
java.lang.String[] plainText = new String[bytes.length];
for (int i = 0; i < plainText.length; i++) {
plainText[i] = toStr(bytes[i] & 255, " ​‌‏ ");
}
return "  " + TextUtils.join(" ", plainText);
} catch (java.lang.Exception e) {
e.printStackTrace();
return source;
}
}
@NonNull
@Override
protected String decodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
java.lang.String[] t = source.replaceAll("^" + "  ", "").split(" ");
byte[] plainText = new byte[t.length];
for (int i = 0; i < plainText.length; i++) {
plainText[i] = (byte) toNum(t[i], " ​‌‏ ");
}
return new String(plainText, StandardCharsets.UTF_8);
} catch (java.lang.Exception e) {
e.printStackTrace();
return source;
}
}
private static String toStr(int a, String cc) {
StringBuilder s = new StringBuilder();
while (a > 0) {
s.insert(0, cc.charAt(a % cc.length()));
a /= cc.length();
}
return s.toString();
}
private static int toNum(String a, String cc) {
int n = 0;
for (int i = 0; i < a.length(); i++) {
int start = (a.length() - i) - 1;
n = (int) (((double) n) + (((double) cc.indexOf(a.substring(start, start + 1))) * Math.pow(cc.length(), i)));
}
return n;
}
@Override
public boolean isEncrypted(String source) {
return source.matches("^" + "  " + "([" + " ​‌‏ " + "\\s]*)");
}
@NonNull
@Override
public String getUIName() {
return "MP3 [invisible]";
}
@NonNull
@Override
public String getPrefKey() {
return "mp3";
}
}
@@ -0,0 +1,130 @@
package ru.vtosters.lite.encryption.processors;
import android.util.Base64;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import ru.vtosters.lite.encryption.base.IMProcessor;
import ru.vtosters.lite.utils.Globals;
public class VTostersAESProcessor extends IMProcessor {
private final static String CIPHER_INSTANCE = "AES/CBC/PKCS7Padding";
private final static String KEY_METHOD = "AES";
private HashMap<byte[], Cipher> decodeMap = new HashMap<>(), encodeMap = new HashMap<>();
public void free(byte[] key) {
decodeMap.remove(key);
encodeMap.remove(key);
}
@NonNull
private Cipher wrapEncoder(byte[] key) throws InvalidAlgorithmParameterException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
if (encodeMap.containsKey(key)) return encodeMap.get(key);
Triple<Cipher, SecretKeySpec, IvParameterSpec> encodeCipher = getBaseCipher(key);
encodeCipher.first.init(Cipher.ENCRYPT_MODE, encodeCipher.second, encodeCipher.third);
encodeMap.put(key, encodeCipher.first);
return encodeCipher.first;
}
@NonNull
private Cipher wrapDecoder(byte[] key) throws InvalidAlgorithmParameterException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
if (decodeMap.containsKey(key)) return decodeMap.get(key);
Triple<Cipher, SecretKeySpec, IvParameterSpec> decodeCipher = getBaseCipher(key);
decodeCipher.first.init(Cipher.DECRYPT_MODE, decodeCipher.second, decodeCipher.third);
decodeMap.put(key, decodeCipher.first);
return decodeCipher.first;
}
@NonNull
private Triple<Cipher, SecretKeySpec, IvParameterSpec> getBaseCipher(byte[] key) throws NoSuchPaddingException, NoSuchAlgorithmException {
byte[] off = new byte[16];
System.arraycopy(key, 0, off, 0, off.length);
return new Triple<>(Cipher.getInstance(CIPHER_INSTANCE), new SecretKeySpec(key, KEY_METHOD), new IvParameterSpec(off));
}
@NonNull
@Override
protected String encodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
return Base64.encodeToString(wrapEncoder(key).doFinal(source.getBytes(StandardCharsets.UTF_8)), Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
return source;
}
}
@NonNull
@Override
protected String decodeInternal(@NonNull String source, @Nullable byte[] key) {
try {
return new String(wrapDecoder(key).doFinal(Base64.decode(source, Base64.DEFAULT)), StandardCharsets.UTF_8);
} catch (Exception e) {
e.printStackTrace();
return source;
}
}
@Override
public boolean isPublic() {
return false;
}
@NonNull
@Override
public String startTag() {
return "VT0ST3RS [AES] ";
}
@NonNull
@Override
public String endTag() {
return " VT0ST3RS [AES]";
}
@NonNull
@Override
public String getUIName() {
return "VTosters [AES]";
}
@NonNull
@Override
public String getPrefKey() {
return "vtaes";
}
@Nullable
@Override
public String getEncryptionKeyFor(int id) {
return Globals.getPrefs().getString("VT_IMEncodeKey_"+getPrefKey()+"_"+id, "VTAesDefault");
}
public static class Triple<F, S, T> {
public final F first;
public final S second;
public final T third;
public Triple(F first, S second, T third) {
this.first = first;
this.second = second;
this.third = third;
}
}
}
@@ -0,0 +1,46 @@
package ru.vtosters.lite.encryption.processors;
import android.util.Base64;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import ru.vtosters.lite.encryption.base.IMProcessor;
public class VTostersProcessor extends IMProcessor {
@NonNull
@Override
protected String encodeInternal(@NonNull String source, @Nullable byte[] key) {
return Base64.encodeToString(source.getBytes(), Base64.DEFAULT);
}
@NonNull
@Override
protected String decodeInternal(@NonNull String source, @Nullable byte[] key) {
return new String(Base64.decode(source, Base64.DEFAULT));
}
@Override
@NonNull
public String startTag() {
return "VT0ST3RS ";
}
@Override
@NonNull
public String endTag() {
return " VT0ST3RS";
}
@NonNull
@Override
public String getUIName() {
return "VTosters Classique [Base64]";
}
@NonNull
@Override
public String getPrefKey() {
return "vt64";
}
}
@@ -1,8 +1,7 @@
package ru.vtosters.lite.f0x1d; package ru.vtosters.lite.f0x1d;
import static ru.vtosters.lite.utils.About.*; import static ru.vtosters.lite.utils.About.getBuildNumber;
import static ru.vtosters.lite.utils.Globals.*; import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Preferences.*;
import android.app.Activity; import android.app.Activity;
import android.app.Notification; import android.app.Notification;
@@ -20,7 +19,7 @@ import com.vtosters.lite.R;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
import ru.vtosters.lite.badmanners.DeviceInfoCollector; import ru.vtosters.lite.deviceinfo.DeviceInfoCollector;
public class Crashreporter { public class Crashreporter {
protected static String logString; protected static String logString;
@@ -37,7 +36,7 @@ public class Crashreporter {
} }
static void start(Thread.UncaughtExceptionHandler uncaughtExceptionHandler, Thread thread, Throwable th, Activity activity) { static void start(Thread.UncaughtExceptionHandler uncaughtExceptionHandler, Thread thread, Throwable th, Activity activity) {
logString = getStackTrace(th) + "\n\n" + new DeviceInfoCollector().collect(getContext()).toDeviceName() + "\n VTL Version: " + VERSIONNAME + ", build: " + getBuildNumber(); logString = getStackTrace(th) + "\n\n" + new DeviceInfoCollector().collect(getContext()).toDeviceName() + ", commit: " + getBuildNumber();
if (Build.VERSION.SDK_INT >= 26) { if (Build.VERSION.SDK_INT >= 26) {
var notificationChannel = new NotificationChannel("crashes", "crash", NotificationManager.IMPORTANCE_DEFAULT); var notificationChannel = new NotificationChannel("crashes", "crash", NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.enableVibration(true); notificationChannel.enableVibration(true);
@@ -61,7 +60,7 @@ public class Crashreporter {
var builder = new Notification.Builder(getContext()); var builder = new Notification.Builder(getContext());
builder.setSmallIcon(R.drawable.ic_bug_24); builder.setSmallIcon(R.drawable.ic_bug_24);
builder.setContentTitle("VTL Крашнулся!"); builder.setContentTitle("Произошла ошибка в работе VTLite!");
builder.setContentText(logString); builder.setContentText(logString);
builder.setStyle(new Notification.BigTextStyle().bigText(logString)); builder.setStyle(new Notification.BigTextStyle().bigText(logString));
builder.setAutoCancel(true); builder.setAutoCancel(true);
@@ -74,6 +74,8 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
@Override // android.support.v7.preference.Preference.c @Override // android.support.v7.preference.Preference.c
public boolean a(Preference preference) { public boolean a(Preference preference) {
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
VKImageLoader.b(); VKImageLoader.b();
ImEngineProvider.a().h(); ImEngineProvider.a().h();
AudioMessageUtils.j(); AudioMessageUtils.j();
@@ -1,12 +1,15 @@
package ru.vtosters.lite.ui.fragments.multiaccount; package ru.vtosters.lite.ui.fragments.multiaccount;
import static ru.vtosters.lite.utils.Globals.convertDpToPixel; import static ru.vtosters.lite.utils.Globals.convertDpToPixel;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getResources; import static ru.vtosters.lite.utils.Globals.getResources;
import static ru.vtosters.lite.utils.Globals.isNetworkConnected; import static ru.vtosters.lite.utils.Globals.isNetworkConnected;
import static ru.vtosters.lite.utils.Globals.restartApplication; import static ru.vtosters.lite.utils.Globals.restartApplication;
import static ru.vtosters.lite.utils.Themes.getTextAttr; import static ru.vtosters.lite.utils.Themes.getTextAttr;
import static ru.vtosters.lite.utils.Themes.recolorDrawable; import static ru.vtosters.lite.utils.Themes.recolorDrawable;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
@@ -127,6 +130,8 @@ public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.Mult
VKAccount b = VKAccountManager.b(); VKAccount b = VKAccountManager.b();
PushSubscriber.a.a(b.b(), b.c()); PushSubscriber.a.a(b.b(), b.c());
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply(); AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication(); restartApplication();
}); });
Drawable drawable = recolorDrawable(getResources().getDrawable(R.drawable.ic_list_add)); Drawable drawable = recolorDrawable(getResources().getDrawable(R.drawable.ic_list_add));
@@ -143,6 +148,8 @@ public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.Mult
VKAccount b = VKAccountManager.b(); VKAccount b = VKAccountManager.b();
PushSubscriber.a.a(b.b(), b.c()); PushSubscriber.a.a(b.b(), b.c());
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply(); AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication(); restartApplication();
}); });
@@ -164,6 +171,8 @@ public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.Mult
VKAccount b = VKAccountManager.b(); VKAccount b = VKAccountManager.b();
PushSubscriber.a.a(b.b(), b.c()); PushSubscriber.a.a(b.b(), b.c());
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply(); AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication(); restartApplication();
}); });
} }
@@ -1,7 +1,9 @@
package ru.vtosters.lite.utils; package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.Globals.*; import static ru.vtosters.lite.utils.Globals.getApplicationName;
import static ru.vtosters.lite.utils.Preferences.*; import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Preferences.VERSIONNAME;
import static ru.vtosters.lite.utils.Preferences.oldabout;
import android.content.Context; import android.content.Context;
@@ -0,0 +1,172 @@
package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getPreferences;
import static ru.vtosters.lite.utils.Preferences.BooleanFalse;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.TextUtils;
import com.vk.im.engine.events.OnMsgUpdateEvent;
import com.vk.im.engine.internal.longpoll.a.MsgDeleteLpTask;
import com.vk.im.engine.internal.storage.CacheEnvironment;
import com.vk.im.engine.models.messages.Msg;
import com.vk.im.engine.models.messages.MsgFromUser;
import com.vk.im.engine.models.messages.NestedMsg;
import com.vk.libsqliteext.CustomSqliteExtensions;
import org.sqlite.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import ru.vtosters.lite.encryption.EncryptProvider;
public class DeletedMessagesHandler {
private static List<Integer> sDeletedMessagesList = new ArrayList<>();
private static SQLiteDatabase sVKSQLiteDatabase;
private static int sBodyIndex = -1;
private static DeletedMessagesDBHelper sVTDatabase;
public static void reloadMessagesList() {
if (sVTDatabase == null) {
sVTDatabase = new DeletedMessagesDBHelper();
}
sDeletedMessagesList = new ArrayList<>(sVTDatabase.loadAllMessages());
}
public static void grabVKDatabase(CacheEnvironment storageEnvironment) {
sVKSQLiteDatabase = storageEnvironment.b();
}
public static boolean hook() {
return BooleanFalse("undeletemsg");
}
public static void setBodyDBParser(Msg msg) {
if (!(msg instanceof MsgFromUser)) return;
for (Integer integer : sDeletedMessagesList) {
MsgFromUser msgFromUser = (MsgFromUser) msg;
checkForNestedMsg(msgFromUser.g);
if (integer == msg.d) {
editTextOfMsg((MsgFromUser) msg);
break;
}
}
}
private static void checkForNestedMsg(List<NestedMsg> nestedMsgs) {
for (NestedMsg nestedMsg : nestedMsgs) {
if (!nestedMsg.i.isEmpty()) checkForNestedMsg(nestedMsg.i);
nestedMsg.b(EncryptProvider.decryptMessage(nestedMsg.E(), nestedMsg.h().c));
}
}
private static void editTextOfMsg(MsgFromUser msgFromUser) {
if (!msgFromUser.e.startsWith(getPreifxUndelete())) {
msgFromUser.e = getPreifxUndelete() + EncryptProvider.decryptMessage(msgFromUser);
}
}
private static String getPreifxUndelete() {
String string = getPreferences().getString("undeletemsg_prefix", "");
if (string.isEmpty()) {
return "[Удалено] ";
}
if (string.equals("icon")) {
return "\uD83D\uDDD1 ";
}
if (string.equals("icon2")) {
return "❌ ";
}
return "[Удалено] ";
}
public static void updateDialog(MsgDeleteLpTask msgDeleteLpTask) {
Cursor c = getMessageFromDatabaseById(msgDeleteLpTask.c);
if (c == null) return;
int localId = c.getInt(c.getColumnIndex("local_id"));
String str = DeletedMessagesHandler.class.getSimpleName();
msgDeleteLpTask.a.a(str, new OnMsgUpdateEvent(str, msgDeleteLpTask.b, localId));
}
public static void hookDeletedMessageId(MsgDeleteLpTask msgDeleteLpTask) {
if (!hook()) return;
int messageId = msgDeleteLpTask.c;
Cursor c = getMessageFromDatabaseById(messageId);
if (c == null) return;
if (sBodyIndex == -1) sBodyIndex = c.getColumnIndex("body");
if (TextUtils.isEmpty(c.getString(sBodyIndex))) {
deleteMessageFromDB(messageId);
return;
}
sDeletedMessagesList.add(messageId);
sVTDatabase.saveDeletedMessage(messageId);
}
public static Cursor getMessageFromDatabaseById(int messageId) {
String query = "SELECT * FROM messages WHERE vk_id = " + messageId;
Cursor c = CustomSqliteExtensions.a(sVKSQLiteDatabase, query);
if (!c.moveToFirst()) return null;
return c;
}
public static void deleteMessageFromDB(int messageId) {
sVKSQLiteDatabase.execSQL("DELETE FROM messages WHERE vk_id = " + messageId);
}
public static class DeletedMessagesDBHelper extends SQLiteOpenHelper {
public DeletedMessagesDBHelper() {
super(getContext(), "deleted_msgs", null, 1);
}
@Override
public void onCreate(android.database.sqlite.SQLiteDatabase db) {
db.execSQL("create table deleted_msgs (id integer primary key, msgId integer)");
}
@Override
public void onUpgrade(android.database.sqlite.SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void saveDeletedMessage(int msgId) {
android.database.sqlite.SQLiteDatabase sqLiteDatabase = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("msgId", msgId);
sqLiteDatabase.insert("deleted_msgs", null, contentValues);
sqLiteDatabase.close();
}
public List<Integer> loadAllMessages() {
List<Integer> msgIdsList = new ArrayList<>();
Cursor cursor = getReadableDatabase().query("deleted_msgs", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
int msgIdIndex = cursor.getColumnIndex("msgId");
do {
msgIdsList.add(cursor.getInt(msgIdIndex));
} while (cursor.moveToNext());
cursor.close();
}
return msgIdsList;
}
}
}
@@ -2,7 +2,7 @@ package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.Globals.getContext; import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.isEmpty; import static ru.vtosters.lite.utils.Globals.isEmpty;
import static ru.vtosters.lite.utils.Preferences.*; import static ru.vtosters.lite.utils.Preferences.isEnableExternalOpening;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
@@ -16,10 +16,10 @@ import android.net.NetworkInfo;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.vk.core.util.ToastUtils;
import com.vtosters.lite.UserProfile; import com.vtosters.lite.UserProfile;
import com.vtosters.lite.VKActivity; import com.vtosters.lite.VKActivity;
import com.vtosters.lite.api.ExtendedUserProfile; import com.vtosters.lite.api.ExtendedUserProfile;
@@ -34,6 +34,13 @@ import java.util.Locale;
public class Globals { public class Globals {
private static final List<Activity> activities = new ArrayList<>(); private static final List<Activity> activities = new ArrayList<>();
static SharedPreferences prefs = getContext().getSharedPreferences("com.vtosters.lite_preferences", Context.MODE_PRIVATE);
public static SharedPreferences getPrefs() {
if (prefs == null) prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
return prefs;
}
// Current UserId // Current UserId
public static int getUserId() { public static int getUserId() {
return VKAccountManager.b().a(); return VKAccountManager.b().a();
@@ -137,7 +144,7 @@ public class Globals {
} }
public static void sendToast(String text) { public static void sendToast(String text) {
ToastUtils.a(text); Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
} }
public static boolean isEmpty(String str) { public static boolean isEmpty(String str) {
@@ -207,6 +214,11 @@ public class Globals {
}); });
} }
public static Activity getCurrentActivity() {
if (activities.size() == 0) return null;
else return activities.get(0);
}
public static String getApplicationName() { public static String getApplicationName() {
return getContext().getApplicationInfo().loadLabel(getContext().getPackageManager()).toString(); return getContext().getApplicationInfo().loadLabel(getContext().getPackageManager()).toString();
} }
@@ -52,9 +52,7 @@ public class Newsfeed {
public static boolean isBlockedByFilter(String str) { public static boolean isBlockedByFilter(String str) {
for (String str2 : mFilters) { for (String str2 : mFilters) {
if (str.toLowerCase().contains(str2.toLowerCase())) { if (str.toLowerCase().contains(str2.toLowerCase())) return true;
return true;
}
} }
return false; return false;
} }
@@ -119,8 +117,7 @@ public class Newsfeed {
if (!Preferences.captions()) { if (!Preferences.captions()) {
return true; return true;
} }
boolean postsrecomm = postsrecomm(); return (jSONObject2.getString(NavigatorKeys.j).equals("explorebait") && !postsrecomm()) || ((jSONObject2.getString(NavigatorKeys.j).equals("shared") && postsrecomm()) || ((jSONObject.getString(NavigatorKeys.j).equals("digest") && postsrecomm()) || ((jSONObject2.getString(NavigatorKeys.j).equals("commented") && postsrecomm()) || (jSONObject2.getString(NavigatorKeys.j).equals("voted") && postsrecomm()))));
return (jSONObject2.getString(NavigatorKeys.j).equals("explorebait") && !postsrecomm) || ((jSONObject2.getString(NavigatorKeys.j).equals("shared") && postsrecomm) || ((jSONObject.getString(NavigatorKeys.j).equals("digest") && postsrecomm) || ((jSONObject2.getString(NavigatorKeys.j).equals("commented") && postsrecomm) || (jSONObject2.getString(NavigatorKeys.j).equals("voted") && postsrecomm))));
} catch (JSONException unused) { } catch (JSONException unused) {
return false; return false;
} }
@@ -174,92 +171,69 @@ public class Newsfeed {
} }
public static String getCommentsSort(String def) { public static String getCommentsSort(String def) {
String string = getPreferences().getString("commentssort", ""); switch (getPreferences().getString("commentssort", "")) {
if (string.isEmpty()) { case "new":
return def; return "desc";
case "old":
return "asc";
default:
return def;
} }
if (string.equals("new")) {
return "desc";
}
if (string.equals("old")) {
return "asc";
}
return def;
} }
public static long getUpdateNewsfeed(boolean refresh_timeout) { public static long getUpdateNewsfeed(boolean refresh_timeout) {
String string = getPreferences().getString("newsupdate", ""); switch (getPreferences().getString("newsupdate", "")) {
if (string.isEmpty()) { case "no_update":
return Preference.b().getLong(refresh_timeout ? "refresh_timeout_top" : "refresh_timeout_recent", 600000L); return MAX_VALUE;
case "imd_update":
return 10000L;
default:
return Preference.b().getLong(refresh_timeout ? "refresh_timeout_top" : "refresh_timeout_recent", 600000L);
} }
if (string.equals("no_update")) {
return MAX_VALUE;
}
if (string.equals("imd_update")) {
return 10000L;
}
return Preference.b().getLong(refresh_timeout ? "refresh_timeout_top" : "refresh_timeout_recent", 600000L);
} }
public static Class getStartFragment() { public static Class getStartFragment() {
String string = getPreferences().getString("start_values", ""); switch (getPreferences().getString("start_values", "")) {
if (string.equals("default")) { case "newsfeed":
return getInstance().getSelectedTabs().get(0).fragmentClass; return newfeed() ? HomeFragment.class : NewsfeedFragment.class;
case "messenger":
return DialogsFragment.class;
case "groups":
return GroupsFragment.class;
case "music":
return MusicFragment.class;
case "friends":
return FriendsFragment.class;
case "photos":
return PhotosFragment.class;
case "videos":
return VideosFragment.class;
case "settings":
return SettingsListFragment.class;
case "apps":
return AppsFragment.class;
case "discover":
return newfeed() ? GatewaysFragment.class : DiscoverFragment.class;
case "notifications":
return NotificationsContainerFragment.class;
case "money":
return MoneyTransfersFragment.class;
case "games":
return GamesFragment.class;
case "liked":
return FaveTabFragment.class;
case "menu":
return MenuFragment.class;
case "profile":
return ProfileFragment.class;
case "lives":
return LivesTabsFragment.class;
case "docs":
return DocumentsViewFragment.class;
case "brtd":
return BirthdaysFragment.class;
default:
return getInstance().getSelectedTabs().get(0).fragmentClass;
} }
if (string.equals("newsfeed")) {
return newfeed() ? HomeFragment.class : NewsfeedFragment.class;
}
if (string.equals("messenger")) {
return DialogsFragment.class;
}
if (string.equals("groups")) {
return GroupsFragment.class;
}
if (string.equals("music")) {
return MusicFragment.class;
}
if (string.equals("friends")) {
return FriendsFragment.class;
}
if (string.equals("photos")) {
return PhotosFragment.class;
}
if (string.equals("videos")) {
return VideosFragment.class;
}
if (string.equals("settings")) {
return SettingsListFragment.class;
}
if (string.equals("apps")) {
return AppsFragment.class;
}
if (string.equals("discover")) {
return newfeed() ? GatewaysFragment.class : DiscoverFragment.class;
}
if (string.equals("notifications")) {
return NotificationsContainerFragment.class;
}
if (string.equals("money")) {
return MoneyTransfersFragment.class;
}
if (string.equals("games")) {
return GamesFragment.class;
}
if (string.equals("liked")) {
return FaveTabFragment.class;
}
if (string.equals("menu")) {
return MenuFragment.class;
}
if (string.equals("profile")) {
return ProfileFragment.class;
}
if (string.equals("lives")) {
return LivesTabsFragment.class;
}
if (string.equals("docs")) {
return DocumentsViewFragment.class;
}
return string.equals("brtd") ? BirthdaysFragment.class : getInstance().getSelectedTabs().get(0).fragmentClass;
} }
} }
@@ -0,0 +1,61 @@
package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.Preferences.dev;
import static ru.vtosters.lite.utils.Preferences.opusmodule;
import android.util.Log;
import com.vk.medianative.MediaNative;
import java.nio.ByteBuffer;
public class OpusLoader {
private static long timetracker;
private static boolean inited;
public static void LoadLibrary(String libname){
try {
System.loadLibrary(libname);
inited = true;
} catch (UnsatisfiedLinkError unused2) {
if(dev()) Log.d("VTLite", "Failed to load " + libname);
inited = false;
}
}
public static long getLength() {
if (isReadyToUse()) {
long length = System.currentTimeMillis() - timetracker;
timetracker = System.currentTimeMillis();
return length;
}
return 0L;
}
public static int AudioStartRecordBridge(String str) {
if (isReadyToUse()) {
// Init custom AudioStartRecord
timetracker = System.currentTimeMillis();
return 1;
}
return MediaNative.nativeAudioStartRecord(str);
}
public static int AudioWriteFrameBridge(ByteBuffer buffer, int length) {
if (isReadyToUse()) {
// Init custom AudioWriteFrame
}
return MediaNative.nativeAudioWriteFrame(buffer, length);
}
public static void AudioStopRecordBridge() {
if (isReadyToUse()) {
// Init custom AudioStopRecord
}
MediaNative.nativeAudioStopRecord();
}
private static boolean isReadyToUse() {
return opusmodule() && inited;
}
}
@@ -1,9 +1,14 @@
package ru.vtosters.lite.utils; package ru.vtosters.lite.utils;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.migrate; import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.migrate;
import static ru.vtosters.lite.utils.Globals.*; import static ru.vtosters.lite.utils.DeletedMessagesHandler.reloadMessagesList;
import static ru.vtosters.lite.utils.Newsfeed.*; import static ru.vtosters.lite.utils.Globals.fixGapps;
import static ru.vtosters.lite.utils.Proxy.*; import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getPreferences;
import static ru.vtosters.lite.utils.Globals.registerActivities;
import static ru.vtosters.lite.utils.Newsfeed.setupFilters;
import static ru.vtosters.lite.utils.OpusLoader.LoadLibrary;
import static ru.vtosters.lite.utils.Proxy.setProxy;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
@@ -19,12 +24,17 @@ import java.util.Locale;
public class Preferences { public class Preferences {
public static String VERSIONNAME = "Beta"; public static String VERSIONNAME = "Beta";
public static Integer VKBUILD = 12116; // 3439 orig
public static String VKVER = "7.24"; // 5.29 orig
public static void init(Application application) { public static void init(Application application) {
setupFilters(); setupFilters();
fixGapps(); fixGapps();
setProxy(); setProxy();
migrate(); migrate();
reloadMessagesList();
registerActivities(application); registerActivities(application);
LoadLibrary("vkopustest");
} }
public static boolean BooleanFalse(String key) { public static boolean BooleanFalse(String key) {
@@ -37,6 +47,10 @@ public class Preferences {
return prefs.getBoolean(key, true); return prefs.getBoolean(key, true);
} }
public static boolean opusmodule() {
return BooleanTrue("opusmodule");
}
public static boolean authorsrecomm() { public static boolean authorsrecomm() {
return BooleanTrue("authorsrecomm"); return BooleanTrue("authorsrecomm");
} }
@@ -302,11 +316,17 @@ public class Preferences {
} }
public static String VKVersion() { public static String VKVersion() {
String string = getPreferences().getString("vkversion", ""); String string = getPreferences().getString("vkver", "");
if (!string.isEmpty()) { return !string.isEmpty() ? string : VKVER;
return string; }
}
return "5.29"; public static int VKVersionBuild() {
String string = getPreferences().getString("vkbuild", "");
return !string.isEmpty() ? Integer.parseInt(string) : VKBUILD;
}
public static long VKVersionBuildLong() {
return (long) VKVersionBuild();
} }
public static String getLocale() { public static String getLocale() {
@@ -1,5 +1,6 @@
package ru.vtosters.lite.utils; package ru.vtosters.lite.utils;
import static java.lang.System.*;
import static ru.vtosters.lite.utils.Globals.*; import static ru.vtosters.lite.utils.Globals.*;
import static ru.vtosters.lite.utils.Preferences.*; import static ru.vtosters.lite.utils.Preferences.*;
@@ -81,54 +82,80 @@ public class Proxy {
} }
public static void setProxy() { public static void setProxy() {
Properties properties = getProperties();
switch (getPreferences().getString("proxy", "")) { switch (getPreferences().getString("proxy", "")) {
case "zaborona": case "zaborona":
Properties properties = System.getProperties();
properties.setProperty("socksProxyHost", "socks.zaboronahelp.pp.ua"); properties.setProperty("socksProxyHost", "socks.zaboronahelp.pp.ua");
properties.setProperty("socksProxyPort", "1488"); properties.setProperty("socksProxyPort", "1488");
System.clearProperty("https.proxyHost"); resetProxySocks();
System.clearProperty("https.proxyPort");
System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort");
break; break;
case "socks": case "socks":
Properties properties2 = System.getProperties(); properties.setProperty("socksProxyHost", proxyHostSocks());
properties2.setProperty("socksProxyHost", proxyHostSocks()); properties.setProperty("socksProxyPort", proxyPortSocks());
properties2.setProperty("socksProxyPort", proxyPortSocks()); resetProxySocks();
System.clearProperty("https.proxyHost");
System.clearProperty("https.proxyPort");
System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort");
break; break;
case "http": case "http":
Properties properties3 = System.getProperties(); properties.setProperty("http.proxyHost", proxyHostHTTP());
properties3.setProperty("http.proxyHost", proxyHostHTTP()); properties.setProperty("http.proxyPort", proxyPortHTTP());
properties3.setProperty("http.proxyPort", proxyPortHTTP()); properties.setProperty("http.proxyUser", proxyUserHTTP());
System.clearProperty("socksProxyHost"); properties.setProperty("http.proxyPassword", proxyPassHTTP());
System.clearProperty("socksPortHost"); resetProxyHttp();
System.clearProperty("https.proxyHost");
System.clearProperty("https.proxyPort");
break; break;
case "https": case "https":
Properties properties4 = System.getProperties(); properties.setProperty("https.proxyHost", proxyHostHTTPS());
properties4.setProperty("https.proxyHost", proxyHostHTTPS()); properties.setProperty("https.proxyPort", proxyPortHTTPS());
properties4.setProperty("https.proxyPort", proxyPortHTTPS()); properties.setProperty("https.proxyUser", proxyUserHTTPS());
System.clearProperty("socksProxyHost"); properties.setProperty("https.proxyPassword", proxyPassHTTPS());
System.clearProperty("socksPortHost"); resetProxyHttps();
System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort");
break; break;
default: default:
System.clearProperty("socksProxyHost"); resetProxy();
System.clearProperty("socksPortHost");
System.clearProperty("https.proxyHost");
System.clearProperty("https.proxyPort");
System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort");
break; break;
} }
} }
public static void resetProxy() {
clearProperty("https.proxyHost");
clearProperty("https.proxyPort");
clearProperty("https.proxyUser");
clearProperty("https.proxyPassword");
clearProperty("http.proxyHost");
clearProperty("http.proxyPort");
clearProperty("http.proxyUser");
clearProperty("http.proxyPassword");
clearProperty("socksProxyHost");
clearProperty("socksPortHost");
}
public static void resetProxySocks() {
clearProperty("https.proxyHost");
clearProperty("https.proxyPort");
clearProperty("https.proxyUser");
clearProperty("https.proxyPassword");
clearProperty("http.proxyHost");
clearProperty("http.proxyPort");
clearProperty("http.proxyUser");
clearProperty("http.proxyPassword");
}
public static void resetProxyHttp() {
clearProperty("https.proxyHost");
clearProperty("https.proxyPort");
clearProperty("https.proxyUser");
clearProperty("https.proxyPassword");
clearProperty("socksProxyHost");
clearProperty("socksPortHost");
}
public static void resetProxyHttps() {
clearProperty("http.proxyHost");
clearProperty("http.proxyPort");
clearProperty("http.proxyUser");
clearProperty("http.proxyPassword");
clearProperty("socksProxyHost");
clearProperty("socksPortHost");
}
public static String proxyHostHTTP() { public static String proxyHostHTTP() {
String string = getPreferences().getString("proxyHostHTTP", ""); String string = getPreferences().getString("proxyHostHTTP", "");
return string.isEmpty() ? "192.168.0.1" : string; return string.isEmpty() ? "192.168.0.1" : string;
@@ -159,6 +186,26 @@ public class Proxy {
return string.isEmpty() ? "8888" : string; return string.isEmpty() ? "8888" : string;
} }
public static String proxyUserHTTP() {
String string = getPreferences().getString("proxyUserHTTP", "");
return string.isEmpty() ? "" : string;
}
public static String proxyUserHTTPS() {
String string = getPreferences().getString("proxyUserHTTPS", "");
return string.isEmpty() ? "" : string;
}
public static String proxyPassHTTP() {
String string = getPreferences().getString("proxyPassHTTP", "");
return string.isEmpty() ? "" : string;
}
public static String proxyPassHTTPS() {
String string = getPreferences().getString("proxyPassHTTPS", "");
return string.isEmpty() ? "" : string;
}
public static boolean proxy() { public static boolean proxy() {
return getPreferences().getString("proxy", "").equals("apiproxy"); return getPreferences().getString("proxy", "").equals("apiproxy");
} }
@@ -1,9 +1,13 @@
package ru.vtosters.lite.utils; package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.About.*; import static ru.vtosters.lite.utils.About.getBuildNumber;
import static ru.vtosters.lite.utils.Globals.*; import static ru.vtosters.lite.utils.Globals.getPreferences;
import static ru.vtosters.lite.utils.Preferences.*; import static ru.vtosters.lite.utils.Globals.getUserSecret;
import static ru.vtosters.lite.utils.Proxy.*; import static ru.vtosters.lite.utils.Globals.getUserToken;
import static ru.vtosters.lite.utils.Preferences.dev;
import static ru.vtosters.lite.utils.Preferences.getLocale;
import static ru.vtosters.lite.utils.Preferences.vksans;
import static ru.vtosters.lite.utils.Proxy.proxy;
import com.vk.core.ui.themes.VKThemeHelper; import com.vk.core.ui.themes.VKThemeHelper;
@@ -1,7 +1,11 @@
package ru.vtosters.lite.utils; package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.Globals.*; import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Preferences.*; import static ru.vtosters.lite.utils.Globals.getPreferences;
import static ru.vtosters.lite.utils.Preferences.color_grishka;
import static ru.vtosters.lite.utils.Preferences.isBGStickersEnabled;
import static ru.vtosters.lite.utils.Preferences.navbar;
import static ru.vtosters.lite.utils.Preferences.vksans;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
@@ -51,41 +55,35 @@ public class Themes {
} }
public static VKTheme getDarkTheme() { public static VKTheme getDarkTheme() {
String string = getPreferences().getString("darktheme", ""); switch (getPreferences().getString("darktheme", "")) {
if (string.isEmpty()) { case "amoled":
return VKTheme.DARK; return VKTheme.AMOLED;
default:
return VKTheme.DARK;
} }
if (string.equals("amoled")) {
return VKTheme.AMOLED;
}
return VKTheme.DARK;
} }
public static ImTheme getImDarkTheme() { public static ImTheme getImDarkTheme() {
String string = getPreferences().getString("darktheme", ""); switch (getPreferences().getString("darktheme", "")) {
if (string.isEmpty()) { case "amoled":
return ImTheme.VKAPP_DARK; return ImTheme.VKAPP_AMOLED;
default:
return ImTheme.VKAPP_DARK;
} }
if (string.equals("amoled")) {
return ImTheme.VKAPP_AMOLED;
}
return ImTheme.VKAPP_DARK;
} }
public static VKTheme getLightTheme() { public static VKTheme getLightTheme() {
String string = getPreferences().getString("lighttheme", ""); switch (getPreferences().getString("lighttheme", "")) {
if (string.isEmpty()) { default:
return VKTheme.DEFAULT_LIGHT; return VKTheme.DEFAULT_LIGHT;
} }
return VKTheme.DEFAULT_LIGHT;
} }
public static ImTheme getImLightTheme() { public static ImTheme getImLightTheme() {
String string = getPreferences().getString("lighttheme", ""); switch (getPreferences().getString("lighttheme", "")) {
if (string.isEmpty()) { default:
return ImTheme.VKAPP_LIGHT; return ImTheme.VKAPP_LIGHT;
} }
return ImTheme.VKAPP_LIGHT;
} }
public static int getColorFromAttr(int attr) { public static int getColorFromAttr(int attr) {
@@ -97,11 +95,7 @@ public class Themes {
} }
public static boolean isAndroidMonet() { public static boolean isAndroidMonet() {
if (color_grishka()) { return color_grishka() && Build.VERSION.SDK_INT >= 31;
return Build.VERSION.SDK_INT >= 31;
} else {
return false;
}
} }
public static boolean isColorRefAccented(int i) { public static boolean isColorRefAccented(int i) {
+1 -1
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ripple android:color="@color/picker_blue_pressed" <ripple android:color="?accent"
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ripple android:color="@color/picker_blue_pressed" <ripple android:color="?accent"
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<selector> <selector>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ripple android:color="@color/picker_blue_pressed" <ripple android:color="?accent"
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
+1 -1
View File
@@ -2,7 +2,7 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"> <item android:state_pressed="true">
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="@color/picker_blue_pressed" /> <solid android:color="?accent" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -2,7 +2,7 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"> <item android:state_pressed="true">
<shape android:shape="oval"> <shape android:shape="oval">
<solid android:color="@color/picker_blue_pressed" /> <solid android:color="?accent" />
</shape> </shape>
</item> </item>
<item> <item>
+1 -1
View File
@@ -3,7 +3,7 @@
<item android:state_pressed="true"> <item android:state_pressed="true">
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<corners android:radius="10000.0dip" /> <corners android:radius="10000.0dip" />
<solid android:color="@color/picker_blue_pressed" /> <solid android:color="?accent" />
</shape> </shape>
</item> </item>
<item> <item>
+5 -5
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:background="#fffafbfc" <FrameLayout android:background="?tabbar_background"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
@@ -27,7 +27,7 @@
<com.vk.im.ui.views.span.SpanPressableTextView <com.vk.im.ui.views.span.SpanPressableTextView
android:textSize="14.0sp" android:textSize="14.0sp"
android:textColor="#ff71757a" android:textColor="?text_primary"
android:ellipsize="end" android:ellipsize="end"
android:gravity="center_vertical" android:gravity="center_vertical"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
@@ -56,13 +56,13 @@
android:layout_height="48.0dip" android:layout_height="48.0dip"
android:src="@drawable/ic_cancel_24" android:src="@drawable/ic_cancel_24"
android:scaleType="centerInside" android:scaleType="centerInside"
android:tint="@color/light_gray" android:tint="?text_primary"
android:contentDescription="@null" /> android:contentDescription="@null" />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:textSize="14.0sp" android:textSize="14.0sp"
android:textColor="#ff71757a" android:textColor="?text_primary"
android:ellipsize="end" android:ellipsize="end"
android:layout_gravity="start|center" android:layout_gravity="start|center"
android:id="@id/loading" android:id="@id/loading"
@@ -77,7 +77,7 @@
<TextView <TextView
android:textSize="14.0sp" android:textSize="14.0sp"
android:textColor="#ff71757a" android:textColor="?text_primary"
android:ellipsize="end" android:ellipsize="end"
android:layout_gravity="start|center" android:layout_gravity="start|center"
android:id="@id/error" android:id="@id/error"
+1 -1
View File
@@ -6,7 +6,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.AppBarLayout <android.support.design.widget.AppBarLayout
android:background="?header_alternate_background" android:background="?background_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="?actionBarSize" android:layout_height="?actionBarSize"
style="@style/VKAppBar"> style="@style/VKAppBar">
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.vk.sharing.view.SharingActionsView android:orientation="horizontal" <com.vk.sharing.view.SharingActionsView android:orientation="horizontal"
android:id="@id/sharing_actions_container" android:id="@id/sharing_actions_container"
android:background="@color/pale_grey" android:background="?tabbar_background"
android:paddingLeft="4.0dip" android:paddingLeft="4.0dip"
android:paddingTop="8.0dip" android:paddingTop="8.0dip"
android:paddingRight="4.0dip" android:paddingRight="4.0dip"
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="horizontal" <LinearLayout android:orientation="horizontal"
android:id="@id/picker_attach_gallery_camera_layout" android:id="@id/picker_attach_gallery_camera_layout"
android:background="?tabbar_background" android:background="#ffffffff"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="56.0dip" android:layout_height="56.0dip"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
+4 -2
View File
@@ -3,11 +3,13 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<ScrollView <ScrollView
android:background="?background_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:fillViewport="true"> android:fillViewport="true">
<com.vtosters.lite.ui.ConstrainedLinearLayout <com.vtosters.lite.ui.ConstrainedLinearLayout
android:background="?background_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:orientation="vertical" android:orientation="vertical"
@@ -103,11 +105,11 @@
<TextView <TextView
android:textSize="16.0sp" android:textSize="16.0sp"
android:textColor="#ffffffff" android:textColor="?header_text"
android:gravity="center" android:gravity="center"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:id="@id/tv_apply_params" android:id="@id/tv_apply_params"
android:background="@drawable/picker_btn_blue" android:background="?tabbar_background"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="48.0dip" android:layout_height="48.0dip"
android:text="@string/discover_search_show_result" android:text="@string/discover_search_show_result"
+4 -2
View File
@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<ScrollView <ScrollView
android:background="?background_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:fillViewport="true"> android:fillViewport="true">
@@ -15,6 +16,7 @@
android:paddingRight="@dimen/standard_list_item_padding" android:paddingRight="@dimen/standard_list_item_padding"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?background_content"
app:max_width="400.0dip"> app:max_width="400.0dip">
<include layout="@layout/discover_search_header" /> <include layout="@layout/discover_search_header" />
@@ -147,11 +149,11 @@
<TextView <TextView
android:textSize="16.0sp" android:textSize="16.0sp"
android:textColor="#ffffffff" android:textColor="?header_text"
android:gravity="center" android:gravity="center"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:id="@id/tv_apply_params" android:id="@id/tv_apply_params"
android:background="@drawable/picker_btn_blue" android:background="?tabbar_background"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="48.0dip" android:layout_height="48.0dip"
android:text="@string/discover_search_show_result" android:text="@string/discover_search_show_result"
+2 -2
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:background="#fffafbfc" <FrameLayout android:background="?tabbar_background"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
@@ -64,7 +64,7 @@
android:layout_marginTop="4.0dip" android:layout_marginTop="4.0dip"
android:src="@drawable/ic_cancel_24" android:src="@drawable/ic_cancel_24"
android:scaleType="centerInside" android:scaleType="centerInside"
android:tint="@color/light_gray" android:tint="?text_primary"
android:contentDescription="@null" /> android:contentDescription="@null" />
</LinearLayout> </LinearLayout>
+5
View File
@@ -500,4 +500,9 @@
<item>Не обновлять</item> <item>Не обновлять</item>
<item>Обновлять мгновенно</item> <item>Обновлять мгновенно</item>
</string-array> </string-array>
<string-array name="undel_value">
<item>[Удалено]</item>
<item>🗑</item>
<item>❌</item>
</string-array>
</resources> </resources>
+500 -28
View File
@@ -147,7 +147,7 @@
<item name="landing_text_secondary">@color/white_alpha60</item> <item name="landing_text_secondary">@color/white_alpha60</item>
<item name="landing_text_title">@color/white</item> <item name="landing_text_title">@color/white</item>
<item name="like_text_tint">@color/red_light</item> <item name="like_text_tint">@color/red_light</item>
<item name="link_alternate">@android:color/system_neutral1_50</item> <item name="link_alternate">?accent</item>
<item name="loader_background">@android:color/system_neutral1_900</item> <item name="loader_background">@android:color/system_neutral1_900</item>
<item name="loader_tint">@android:color/system_neutral2_200</item> <item name="loader_tint">@android:color/system_neutral2_200</item>
<item name="loader_track_fill">@color/gray_700</item> <item name="loader_track_fill">@color/gray_700</item>
@@ -287,7 +287,7 @@
<item name="header_alternate_tab_active_text">@android:color/system_accent1_600</item> <item name="header_alternate_tab_active_text">@android:color/system_accent1_600</item>
<item name="header_alternate_tab_inactive_text">@color/gray_400</item> <item name="header_alternate_tab_inactive_text">@color/gray_400</item>
<item name="header_background">?background_page</item> <item name="header_background">?background_page</item>
<item name="header_background_before_blur">@color/blue_A400</item> <item name="header_background_before_blur">?accent</item>
<item name="header_background_before_blur_alternate">@color/white</item> <item name="header_background_before_blur_alternate">@color/white</item>
<item name="header_search_field_background">@android:color/system_accent1_400</item> <item name="header_search_field_background">@android:color/system_accent1_400</item>
<item name="header_search_field_tint">@android:color/system_accent1_700</item> <item name="header_search_field_tint">@android:color/system_accent1_700</item>
@@ -343,7 +343,7 @@
<item name="landing_text_secondary">@color/white_alpha60</item> <item name="landing_text_secondary">@color/white_alpha60</item>
<item name="landing_text_title">@color/white</item> <item name="landing_text_title">@color/white</item>
<item name="like_text_tint">@color/red_nice</item> <item name="like_text_tint">@color/red_nice</item>
<item name="link_alternate">@android:color/system_accent1_900</item> <item name="link_alternate">?accent</item>
<item name="loader_background">@color/gray_50</item> <item name="loader_background">@color/gray_50</item>
<item name="loader_tint">@color/gray_500</item> <item name="loader_tint">@color/gray_500</item>
<item name="loader_track_fill">@color/gray_100</item> <item name="loader_track_fill">@color/gray_100</item>
@@ -441,7 +441,7 @@
<item name="button_primary_foreground_disabled">#66ffffff</item> <item name="button_primary_foreground_disabled">#66ffffff</item>
<item name="button_secondary_background">@color/black_blue45_alpha10</item> <item name="button_secondary_background">@color/black_blue45_alpha10</item>
<item name="button_secondary_background_disabled">#0a003973</item> <item name="button_secondary_background_disabled">#0a003973</item>
<item name="button_secondary_foreground">@color/blue_600</item> <item name="button_secondary_foreground">?accent</item>
<item name="button_secondary_foreground_disabled">#6645678f</item> <item name="button_secondary_foreground_disabled">#6645678f</item>
<item name="button_tertiary_background">@color/clear</item> <item name="button_tertiary_background">@color/clear</item>
<item name="button_tertiary_background_disabled">#66000000</item> <item name="button_tertiary_background_disabled">#66000000</item>
@@ -482,7 +482,7 @@
<item name="header_alternate_tab_active_text">?accent</item> <item name="header_alternate_tab_active_text">?accent</item>
<item name="header_alternate_tab_inactive_text">@color/gray_400</item> <item name="header_alternate_tab_inactive_text">@color/gray_400</item>
<item name="header_background">?background_page</item> <item name="header_background">?background_page</item>
<item name="header_background_before_blur">@color/blue_A400</item> <item name="header_background_before_blur">?accent</item>
<item name="header_background_before_blur_alternate">@color/white</item> <item name="header_background_before_blur_alternate">@color/white</item>
<item name="header_search_field_background">@android:color/system_accent1_400</item> <item name="header_search_field_background">@android:color/system_accent1_400</item>
<item name="header_search_field_tint">@android:color/system_accent1_700</item> <item name="header_search_field_tint">@android:color/system_accent1_700</item>
@@ -539,7 +539,7 @@
<item name="im_bubble_border_alternate_highlighted">@color/gray_A150</item> <item name="im_bubble_border_alternate_highlighted">@color/gray_A150</item>
<item name="im_bubble_button_background">@color/black_blue45_alpha10</item> <item name="im_bubble_button_background">@color/black_blue45_alpha10</item>
<item name="im_bubble_button_background_disabled">#0a003973</item> <item name="im_bubble_button_background_disabled">#0a003973</item>
<item name="im_bubble_button_foreground">@color/blue_600</item> <item name="im_bubble_button_foreground">?accent</item>
<item name="im_bubble_button_foreground_disabled">#6645678f</item> <item name="im_bubble_button_foreground_disabled">#6645678f</item>
<item name="im_bubble_gift_background">@color/gold_200</item> <item name="im_bubble_gift_background">@color/gold_200</item>
<item name="im_bubble_gift_text">@color/gold_500</item> <item name="im_bubble_gift_text">@color/gold_500</item>
@@ -560,7 +560,7 @@
<item name="im_conversation_unread_counter_foreground">@color/white</item> <item name="im_conversation_unread_counter_foreground">@color/white</item>
<item name="im_conversation_unread_counter_muted_background">#ffa9b0b8</item> <item name="im_conversation_unread_counter_muted_background">#ffa9b0b8</item>
<item name="im_conversation_verified_icon">#ff67a5eb</item> <item name="im_conversation_verified_icon">#ff67a5eb</item>
<item name="im_forward_line_tint">@color/blue_600</item> <item name="im_forward_line_tint">?accent</item>
<item name="im_history_common_badge_background">#66000000</item> <item name="im_history_common_badge_background">#66000000</item>
<item name="im_history_common_badge_foreground">@color/white</item> <item name="im_history_common_badge_foreground">@color/white</item>
<item name="im_history_divider_background">@color/white</item> <item name="im_history_divider_background">@color/white</item>
@@ -651,7 +651,7 @@
<item name="placeholder_icon_foreground_primary">@color/steel_gray_300</item> <item name="placeholder_icon_foreground_primary">@color/steel_gray_300</item>
<item name="placeholder_icon_foreground_secondary">@color/steel_gray_200</item> <item name="placeholder_icon_foreground_secondary">@color/steel_gray_200</item>
<item name="placeholder_icon_tint">@color/black_blue24</item> <item name="placeholder_icon_tint">@color/black_blue24</item>
<item name="poll_option_background">@color/blue_600</item> <item name="poll_option_background">?accent</item>
<item name="search_bar_background">?text_secondary</item> <item name="search_bar_background">?text_secondary</item>
<item name="search_bar_field_background">?background_page</item> <item name="search_bar_field_background">?background_page</item>
<item name="search_bar_field_tint">@color/steel_gray_300</item> <item name="search_bar_field_tint">@color/steel_gray_300</item>
@@ -673,7 +673,7 @@
<item name="tabbar_background">?background_page</item> <item name="tabbar_background">?background_page</item>
<item name="tabbar_inactive_icon">@color/steel_gray_300</item> <item name="tabbar_inactive_icon">@color/steel_gray_300</item>
<item name="text_action_counter">@color/steel_gray_400</item> <item name="text_action_counter">@color/steel_gray_400</item>
<item name="text_link">@color/blue_A500</item> <item name="text_link">?accent</item>
<item name="text_link_hightlighted_background">@color/black</item> <item name="text_link_hightlighted_background">@color/black</item>
<item name="text_muted">?text_secondary</item> <item name="text_muted">?text_secondary</item>
<item name="text_name">?text_primary</item> <item name="text_name">?text_primary</item>
@@ -792,10 +792,10 @@
<item name="im_app_background_navbar">@color/black</item> <item name="im_app_background_navbar">@color/black</item>
<item name="im_app_background_navbar_light">false</item> <item name="im_app_background_navbar_light">false</item>
<item name="im_app_background_secondary">#ffebedf0</item> <item name="im_app_background_secondary">#ffebedf0</item>
<item name="im_app_background_statusbar">@color/muted_blue</item> <item name="im_app_background_statusbar">?accent</item>
<item name="im_app_background_statusbar_light">false</item> <item name="im_app_background_statusbar_light">false</item>
<item name="im_app_background_tabbar">#fffafafa</item> <item name="im_app_background_tabbar">#fffafafa</item>
<item name="im_app_icon">@color/im_old_accent</item> <item name="im_app_icon">?accent</item>
<item name="im_app_icon_destructive">@color/red</item> <item name="im_app_icon_destructive">@color/red</item>
<item name="im_app_icon_inv">@color/white</item> <item name="im_app_icon_inv">@color/white</item>
<item name="im_app_icon_secondary">@color/im_old_blue_gray_light</item> <item name="im_app_icon_secondary">@color/im_old_blue_gray_light</item>
@@ -807,12 +807,12 @@
<item name="im_app_toolbar_foreground_semitransparent">#80ffffff</item> <item name="im_app_toolbar_foreground_semitransparent">#80ffffff</item>
<item name="im_app_toolbar_foreground_start">@color/white</item> <item name="im_app_toolbar_foreground_start">@color/white</item>
<item name="im_app_toolbar_tabs_indicator">@color/white</item> <item name="im_app_toolbar_tabs_indicator">@color/white</item>
<item name="im_attach_tint">@color/sky_300</item> <item name="im_attach_tint">?accent</item>
<item name="im_btn_accept_background">@color/black</item> <item name="im_btn_accept_background">@color/black</item>
<item name="im_btn_accept_background_dark">@color/black</item> <item name="im_btn_accept_background_dark">@color/black</item>
<item name="im_btn_accept_foreground">@color/white</item> <item name="im_btn_accept_foreground">@color/white</item>
<item name="im_btn_confirm">@drawable/vkim_btn_confirm_default</item> <item name="im_btn_confirm">@drawable/vkim_btn_confirm_default</item>
<item name="im_btn_confirm_background">@color/blue_300</item> <item name="im_btn_confirm_background">?accent</item>
<item name="im_btn_confirm_background_dark">@android:color/system_neutral1_50</item> <item name="im_btn_confirm_background_dark">@android:color/system_neutral1_50</item>
<item name="im_btn_confirm_background_disabled">@android:color/system_accent1_400</item> <item name="im_btn_confirm_background_disabled">@android:color/system_accent1_400</item>
<item name="im_btn_reject_background">@color/black</item> <item name="im_btn_reject_background">@color/black</item>
@@ -839,7 +839,7 @@
</item> </item>
<item name="im_bubble_outgoing_highlighted">@android:color/system_accent1_800</item> <item name="im_bubble_outgoing_highlighted">@android:color/system_accent1_800</item>
<item name="im_conversation_error_icon">@color/red_error</item> <item name="im_conversation_error_icon">@color/red_error</item>
<item name="im_conversation_sending_icon">@color/im_old_accent</item> <item name="im_conversation_sending_icon">?accent</item>
<item name="im_conversation_unread_counter_background">@android:color/system_neutral1_50 <item name="im_conversation_unread_counter_background">@android:color/system_neutral1_50
</item> </item>
<item name="im_conversation_unread_counter_foreground">@color/white</item> <item name="im_conversation_unread_counter_foreground">@color/white</item>
@@ -852,44 +852,44 @@
<item name="im_history_divider_foreground">@color/im_old_blue_gray_medium</item> <item name="im_history_divider_foreground">@color/im_old_blue_gray_medium</item>
<item name="im_history_divider_separator">#1e000000</item> <item name="im_history_divider_separator">#1e000000</item>
<item name="im_history_image_bubbleless_border">#1e000000</item> <item name="im_history_image_bubbleless_border">#1e000000</item>
<item name="im_history_incoming_attachment_icon">@color/im_old_accent_muted</item> <item name="im_history_incoming_attachment_icon">?accent</item>
<item name="im_history_incoming_background">#ffebeced</item> <item name="im_history_incoming_background">#ffebeced</item>
<item name="im_history_incoming_background_selected">#ffc2c7cc</item> <item name="im_history_incoming_background_selected">#ffc2c7cc</item>
<item name="im_history_incoming_button">@color/im_old_accent</item> <item name="im_history_incoming_button">?accent</item>
<item name="im_history_incoming_foreground">@color/black</item> <item name="im_history_incoming_foreground">@color/black</item>
<item name="im_history_incoming_foreground_caption">@color/im_old_gray_medium</item> <item name="im_history_incoming_foreground_caption">@color/im_old_gray_medium</item>
<item name="im_history_incoming_foreground_caption_inv">@color/white</item> <item name="im_history_incoming_foreground_caption_inv">@color/white</item>
<item name="im_history_incoming_foreground_link">@color/im_old_accent_muted</item> <item name="im_history_incoming_foreground_link">?accent</item>
<item name="im_history_incoming_foreground_name">@color/im_old_accent_muted</item> <item name="im_history_incoming_foreground_name">?accent</item>
<item name="im_history_incoming_image_placeholder_background">#14000c1a</item> <item name="im_history_incoming_image_placeholder_background">#14000c1a</item>
<item name="im_history_incoming_snippet_placeholder_background"> <item name="im_history_incoming_snippet_placeholder_background">
@color/im_old_accent_muted_14 @color/im_old_accent_muted_14
</item> </item>
<item name="im_history_incoming_snippet_placeholder_icon">@color/im_old_accent_muted</item> <item name="im_history_incoming_snippet_placeholder_icon">?accent</item>
<item name="im_history_info_bar_background">#fffafbfc</item> <item name="im_history_info_bar_background">#fffafbfc</item>
<item name="im_history_info_bar_border">#26000000</item> <item name="im_history_info_bar_border">#26000000</item>
<item name="im_history_live_badge_background">#ffff3347</item> <item name="im_history_live_badge_background">#ffff3347</item>
<item name="im_history_outgoing_attachment_icon">@color/im_old_accent_muted</item> <item name="im_history_outgoing_attachment_icon">?accent</item>
<item name="im_history_outgoing_background">@android:color/system_neutral1_800</item> <item name="im_history_outgoing_background">@android:color/system_neutral1_800</item>
<item name="im_history_outgoing_background_selected">@android:color/system_accent1_300 <item name="im_history_outgoing_background_selected">@android:color/system_accent1_300
</item> </item>
<item name="im_history_outgoing_button">@color/im_old_accent_muted</item> <item name="im_history_outgoing_button">?accent</item>
<item name="im_history_outgoing_foreground">@color/black</item> <item name="im_history_outgoing_foreground">@color/black</item>
<item name="im_history_outgoing_foreground_caption">@color/im_old_gray_medium</item> <item name="im_history_outgoing_foreground_caption">@color/im_old_gray_medium</item>
<item name="im_history_outgoing_foreground_link">@color/im_old_accent</item> <item name="im_history_outgoing_foreground_link">?accent</item>
<item name="im_history_outgoing_foreground_name">@color/im_old_accent_muted</item> <item name="im_history_outgoing_foreground_name">?accent</item>
<item name="im_history_outgoing_image_placeholder_background">#14000c1a</item> <item name="im_history_outgoing_image_placeholder_background">#14000c1a</item>
<item name="im_history_outgoing_snippet_placeholder_background"> <item name="im_history_outgoing_snippet_placeholder_background">
@color/im_old_accent_muted_14 @color/im_old_accent_muted_14
</item> </item>
<item name="im_history_outgoing_snippet_placeholder_icon">@color/im_old_accent_muted</item> <item name="im_history_outgoing_snippet_placeholder_icon">?accent</item>
<item name="im_history_sending_icon">@color/im_old_accent</item> <item name="im_history_sending_icon">?accent</item>
<item name="im_history_sticker_badge_background">#e6ffffff</item> <item name="im_history_sticker_badge_background">#e6ffffff</item>
<item name="im_history_sticker_badge_foreground">@color/im_old_gray_medium</item> <item name="im_history_sticker_badge_foreground">@color/im_old_gray_medium</item>
<item name="im_history_unread_icon">@color/im_old_accent</item> <item name="im_history_unread_icon">?accent</item>
<item name="im_is_vk_me">false</item> <item name="im_is_vk_me">false</item>
<item name="im_item_foreground_caption">@color/im_old_gray_medium</item> <item name="im_item_foreground_caption">@color/im_old_gray_medium</item>
<item name="im_item_foreground_name">@color/im_old_accent_muted</item> <item name="im_item_foreground_name">?accent</item>
<item name="im_item_foreground_subhead">@color/im_old_gray_dark</item> <item name="im_item_foreground_subhead">@color/im_old_gray_dark</item>
<item name="im_item_foreground_tertiary">@color/im_old_gray_light</item> <item name="im_item_foreground_tertiary">@color/im_old_gray_light</item>
<item name="im_menu_foreground">@color/gray_800</item> <item name="im_menu_foreground">@color/gray_800</item>
@@ -912,7 +912,7 @@
<item name="landing_text_secondary">@color/white_alpha60</item> <item name="landing_text_secondary">@color/white_alpha60</item>
<item name="landing_text_title">@color/white</item> <item name="landing_text_title">@color/white</item>
<item name="like_text_tint">@color/red_light</item> <item name="like_text_tint">@color/red_light</item>
<item name="link_alternate">@android:color/system_neutral1_50</item> <item name="link_alternate">?accent</item>
<item name="loader_background">@android:color/system_neutral1_900</item> <item name="loader_background">@android:color/system_neutral1_900</item>
<item name="loader_tint">@android:color/system_neutral2_200</item> <item name="loader_tint">@android:color/system_neutral2_200</item>
<item name="loader_track_fill">@color/gray_700</item> <item name="loader_track_fill">@color/gray_700</item>
@@ -969,4 +969,476 @@
<item name="writebar_icon">@android:color/system_neutral2_200</item> <item name="writebar_icon">@android:color/system_neutral2_200</item>
<item name="tabbar_fix">?tabbar_background</item> <item name="tabbar_fix">?tabbar_background</item>
</style> </style>
<style name="Vk.Theme.client_amoled_generated" parent="@style/Vk.Theme.Dark">
<item name="accent">@android:color/system_neutral1_200</item>
<item name="action_sheet_action_foreground">@color/white</item>
<item name="action_sheet_separator">@color/white_alpha12</item>
<item name="activity_indicator_tint">@color/gray_600</item>
<item name="attach_picker_tab_active_background">@color/gray_100</item>
<item name="attach_picker_tab_active_icon">@color/black</item>
<item name="attach_picker_tab_active_text">@color/gray_100</item>
<item name="attach_picker_tab_inactive_background">@color/black</item>
<item name="attach_picker_tab_inactive_icon">@color/gray_100</item>
<item name="attach_picker_tab_inactive_text">@color/gray_500</item>
<item name="background_content">@color/black</item>
<item name="background_highlighted">@color/white_alpha12</item>
<item name="background_keyboard">@color/black</item>
<item name="background_light">@color/black</item>
<item name="background_page">@color/black</item>
<item name="background_suggestions">@color/black</item>
<item name="button_bot_shadow">@color/black</item>
<item name="button_bot_shadow_disabled">#6619191a</item>
<item name="button_commerce_background">@color/green</item>
<item name="button_commerce_background_disabled">#664bb34b</item>
<item name="button_commerce_foreground">@color/white</item>
<item name="button_commerce_foreground_disabled">#66ffffff</item>
<item name="button_muted_background">@color/black</item>
<item name="button_muted_background_disabled">#662c2d2e</item>
<item name="button_muted_foreground">@color/gray_100</item>
<item name="button_muted_foreground_disabled">#66e1e3e6</item>
<item name="button_outline_border">@color/gray_100</item>
<item name="button_outline_border_disabled">#66e1e3e6</item>
<item name="button_outline_foreground">@color/gray_100</item>
<item name="button_outline_foreground_disabled">#66e1e3e6</item>
<item name="button_primary_background">@color/gray_100</item>
<item name="button_primary_background_disabled">#66e1e3e6</item>
<item name="button_primary_foreground">@color/black</item>
<item name="button_primary_foreground_disabled">#6619191a</item>
<item name="button_secondary_background">@color/gray_700</item>
<item name="button_secondary_background_disabled">#66454647</item>
<item name="button_secondary_foreground">@color/gray_100</item>
<item name="button_secondary_foreground_disabled">#66e1e3e6</item>
<item name="button_tertiary_background">@color/clear</item>
<item name="button_tertiary_background_disabled">#66000000</item>
<item name="button_tertiary_foreground">@color/gray_100</item>
<item name="button_tertiary_foreground_disabled">#66e1e3e6</item>
<item name="cell_button_foreground">@color/gray_100</item>
<item name="cell_button_foreground_disabled">#66e1e3e6</item>
<item name="content_placeholder_icon">@color/gray_300</item>
<item name="content_placeholder_text">@color/gray_300</item>
<item name="content_tint_background">@color/black</item>
<item name="content_tint_foreground">@color/gray_400</item>
<item name="control_background">@color/gray_700</item>
<item name="control_foreground">@color/gray_100</item>
<item name="control_tint">@color/black</item>
<item name="control_tint_muted">@color/gray_400</item>
<item name="counter_primary_background">@android:color/system_neutral1_200</item>
<item name="counter_primary_text">@color/white</item>
<item name="counter_secondary_background">@color/gray_500</item>
<item name="counter_secondary_text">@color/black</item>
<item name="destructive">@color/red_light</item>
<item name="feed_recommended_friend_promo_background">@color/steel_gray_500</item>
<item name="field_background">@color/black</item>
<item name="field_border">@color/white_alpha12</item>
<item name="field_error_background">@color/red_dark</item>
<item name="field_error_border">@color/red_light</item>
<item name="field_text_placeholder">@color/gray_500</item>
<item name="field_valid_border">@color/green</item>
<item name="float_button_background">@color/gray_700</item>
<item name="float_button_background_disabled">#66454647</item>
<item name="float_button_background_highlighted">@color/black</item>
<item name="float_button_background_highlighted_disabled">#660a0a0a</item>
<item name="float_button_border">@color/black_alpha12</item>
<item name="float_button_border_disabled">#0c000000</item>
<item name="float_button_foreground">@color/gray_300</item>
<item name="float_button_foreground_disabled">#66aaaeb3</item>
<item name="header_alternate_background">@color/black</item>
<item name="header_alternate_tab_active_indicator">@color/gray_100</item>
<item name="header_alternate_tab_active_text">@color/gray_100</item>
<item name="header_alternate_tab_inactive_text">@color/gray_500</item>
<item name="header_background">@color/gray_900</item>
<item name="header_background_before_blur">@color/gray_950</item>
<item name="header_background_before_blur_alternate">@color/gray_950</item>
<item name="header_search_field_background">@color/gray_700</item>
<item name="header_search_field_tint">@color/gray_100</item>
<item name="header_tab_active_background">@color/gray_600</item>
<item name="header_tab_active_indicator">@color/gray_100</item>
<item name="header_tab_active_text">@color/gray_100</item>
<item name="header_tab_inactive_text">@color/gray_500</item>
<item name="header_text">@color/gray_100</item>
<item name="header_text_alternate">@color/gray_100</item>
<item name="header_text_secondary">@color/white_alpha60</item>
<item name="header_tint">@color/gray_100</item>
<item name="header_tint_alternate">@color/gray_100</item>
<item name="icon_alpha_placeholder">@color/gray_100</item>
<item name="icon_medium">@color/gray_400</item>
<item name="icon_name">@color/gray_300</item>
<item name="icon_outline_medium">@color/gray_300</item>
<item name="icon_outline_secondary">@color/gray_400</item>
<item name="icon_secondary">@color/gray_500</item>
<item name="icon_tertiary">@color/gray_700</item>
<item name="im_attach_tint">@android:color/system_neutral1_200</item>
<item name="im_bubble_border_alternate">@color/clear</item>
<item name="im_bubble_border_alternate_highlighted">@color/clear</item>
<item name="im_bubble_button_background">@color/black</item>
<item name="im_bubble_button_background_disabled">#66313233</item>
<item name="im_bubble_button_foreground">@color/gray_100</item>
<item name="im_bubble_button_foreground_disabled">#66e1e3e6</item>
<item name="im_bubble_gift_background">@color/gold_300</item>
<item name="im_bubble_gift_text">@color/gold_100</item>
<item name="im_bubble_gift_text_secondary">@color/gold_150</item>
<item name="im_bubble_incoming">@color/black</item>
<item name="im_bubble_incoming_alternate">@color/black</item>
<item name="im_bubble_incoming_alternate_highlighted">@color/gray_600</item>
<item name="im_bubble_incoming_highlighted">@color/gray_600</item>
<item name="im_bubble_outgoing">@color/gray_700</item>
<item name="im_bubble_outgoing_alternate">@color/gray_700</item>
<item name="im_bubble_outgoing_alternate_highlighted">@color/gray_500</item>
<item name="im_bubble_outgoing_highlighted">@color/gray_600</item>
<item name="im_forward_line_tint">@color/white</item>
<item name="im_reply_sender_text">@color/white</item>
<item name="im_reply_separator">@color/white</item>
<item name="im_service_message_text">@color/steel_gray_400</item>
<item name="im_toolbar_separator">@color/gray_300</item>
<item name="im_toolbar_voice_msg_background">@color/gray_700</item>
<item name="image_border">@color/white_alpha8</item>
<item name="input_background">@color/gray_700</item>
<item name="input_border">@color/gray_700</item>
<item name="landing_background">?accent</item>
<item name="landing_primary_button_background">@color/white</item>
<item name="landing_primary_button_background_disabled">#66ffffff</item>
<item name="landing_primary_button_foreground">?accent</item>
<item name="landing_primary_button_foreground_disabled">#665181b8</item>
<item name="landing_snippet_border">@color/clear</item>
<item name="landing_text_secondary">@color/white_alpha60</item>
<item name="landing_text_title">@color/white</item>
<item name="like_text_tint">@color/red_light</item>
<item name="link_alternate">?accent</item>
<item name="loader_background">@color/black</item>
<item name="loader_tint">@color/gray_500</item>
<item name="loader_track_fill">@color/gray_700</item>
<item name="loader_track_value_fill">@android:color/system_neutral1_200</item>
<item name="media_overlay_button_background">@color/white</item>
<item name="media_overlay_button_background_disabled">#66ffffff</item>
<item name="media_overlay_button_foreground">@color/black</item>
<item name="media_overlay_button_foreground_disabled">#662c2d2e</item>
<item name="modal_card_background">@color/black</item>
<item name="modal_card_border">@color/white_alpha12</item>
<item name="modal_card_header_close">@color/white</item>
<item name="music_playback_icon">@color/white</item>
<item name="overlay_status_background">@color/black</item>
<item name="overlay_status_foreground">@color/gray_100</item>
<item name="overlay_status_icon">@color/gray_50</item>
<item name="panel_tab_active_background">@color/gray_700</item>
<item name="panel_tab_active_text">@color/gray_100</item>
<item name="panel_tab_inactive_text">@color/gray_500</item>
<item name="placeholder_icon_background">@color/white_alpha8</item>
<item name="placeholder_icon_foreground_primary">@color/gray_400</item>
<item name="placeholder_icon_foreground_secondary">@color/gray_600</item>
<item name="placeholder_icon_tint">@color/white</item>
<item name="poll_option_background">@color/white</item>
<item name="search_bar_background">@color/black</item>
<item name="search_bar_field_background">@color/gray_700</item>
<item name="search_bar_field_tint">@color/gray_300</item>
<item name="search_bar_segmented_control_tint">@color/gray_400</item>
<item name="segmented_control_bar_background">@color/black</item>
<item name="segmented_control_tint">@color/gray_500</item>
<item name="selection_off_icon">@color/gray_700</item>
<item name="separator_alpha">@color/white_alpha15</item>
<item name="separator_alternate">@color/black</item>
<item name="separator_common">@color/black</item>
<item name="snippet_background">@color/black</item>
<item name="snippet_border">@color/white_alpha12</item>
<item name="snippet_icon_tertiary">@color/gray_600</item>
<item name="splashscreen_icon">@color/black</item>
<item name="statusbar_alternate_legacy_background">@color/clear</item>
<item name="stories_skeleton_loader_background">@color/gray_700</item>
<item name="switch_ios_off_border">@color/black</item>
<item name="tabbar_active_icon">@color/white</item>
<item name="tabbar_background">@color/gray_900</item>
<item name="tabbar_inactive_icon">@color/gray_500</item>
<item name="text_action_counter">@color/gray_300</item>
<item name="text_link">@android:color/system_neutral1_200</item>
<item name="text_link_hightlighted_background">@android:color/system_neutral1_200</item>
<item name="text_muted">@color/gray_200</item>
<item name="text_name">@color/gray_100</item>
<item name="text_placeholder">@color/gray_300</item>
<item name="text_primary">@color/gray_100</item>
<item name="text_secondary">@color/gray_500</item>
<item name="text_subhead">@color/gray_400</item>
<item name="text_tertiary">@color/gray_600</item>
<item name="toolbar_attach_background_from">@color/gray_500</item>
<item name="toolbar_attach_background_to">@color/gray_600</item>
<item name="writebar_icon">@color/gray_400</item>
<item name="tabbar_fix">?tabbar_background</item>
</style>
<style name="VkIm.Theme.VkApp.Amoled" parent="@style/VkIm.Theme.VkApp">
<item name="accent">@android:color/system_neutral1_200</item>
<item name="action_sheet_action_foreground">@color/white</item>
<item name="action_sheet_separator">@color/white_alpha12</item>
<item name="activity_indicator_tint">@color/gray_600</item>
<item name="attach_picker_tab_active_background">@color/gray_100</item>
<item name="attach_picker_tab_active_icon">@color/black</item>
<item name="attach_picker_tab_active_text">@color/gray_100</item>
<item name="attach_picker_tab_inactive_background">@color/black</item>
<item name="attach_picker_tab_inactive_icon">@color/gray_100</item>
<item name="attach_picker_tab_inactive_text">@color/gray_500</item>
<item name="background_content">@color/black</item>
<item name="background_highlighted">@color/white_alpha12</item>
<item name="background_keyboard">@color/black</item>
<item name="background_light">@color/black</item>
<item name="background_page">@color/black</item>
<item name="background_suggestions">@color/black</item>
<item name="button_bot_shadow">@color/black</item>
<item name="button_bot_shadow_disabled">#6619191a</item>
<item name="button_commerce_background">@color/green</item>
<item name="button_commerce_background_disabled">#664bb34b</item>
<item name="button_commerce_foreground">@color/white</item>
<item name="button_commerce_foreground_disabled">#66ffffff</item>
<item name="button_muted_background">@color/black</item>
<item name="button_muted_background_disabled">#662c2d2e</item>
<item name="button_muted_foreground">@color/gray_100</item>
<item name="button_muted_foreground_disabled">#66e1e3e6</item>
<item name="button_outline_border">@color/gray_100</item>
<item name="button_outline_border_disabled">#66e1e3e6</item>
<item name="button_outline_foreground">@color/gray_100</item>
<item name="button_outline_foreground_disabled">#66e1e3e6</item>
<item name="button_primary_background">@color/gray_100</item>
<item name="button_primary_background_disabled">#66e1e3e6</item>
<item name="button_primary_foreground">@color/black</item>
<item name="button_primary_foreground_disabled">#6619191a</item>
<item name="button_secondary_background">@color/gray_700</item>
<item name="button_secondary_background_disabled">#66454647</item>
<item name="button_secondary_foreground">@color/gray_100</item>
<item name="button_secondary_foreground_disabled">#66e1e3e6</item>
<item name="button_tertiary_background">@color/clear</item>
<item name="button_tertiary_background_disabled">#66000000</item>
<item name="button_tertiary_foreground">@color/gray_100</item>
<item name="button_tertiary_foreground_disabled">#66e1e3e6</item>
<item name="cell_button_foreground">@color/gray_100</item>
<item name="cell_button_foreground_disabled">#66e1e3e6</item>
<item name="content_placeholder_icon">@color/gray_300</item>
<item name="content_placeholder_text">@color/gray_300</item>
<item name="content_tint_background">@color/black</item>
<item name="content_tint_foreground">@color/gray_400</item>
<item name="control_background">@color/gray_700</item>
<item name="control_foreground">@color/gray_100</item>
<item name="control_tint">@color/black</item>
<item name="control_tint_muted">@color/gray_400</item>
<item name="counter_primary_background">@android:color/system_neutral1_200</item>
<item name="counter_primary_text">@color/white</item>
<item name="counter_secondary_background">@color/gray_500</item>
<item name="counter_secondary_text">@color/black</item>
<item name="destructive">@color/red_light</item>
<item name="feed_recommended_friend_promo_background">@color/steel_gray_500</item>
<item name="field_background">@color/black</item>
<item name="field_border">@color/white_alpha12</item>
<item name="field_error_background">@color/red_dark</item>
<item name="field_error_border">@color/red_light</item>
<item name="field_text_placeholder">@color/gray_500</item>
<item name="field_valid_border">@color/green</item>
<item name="float_button_background">@color/gray_700</item>
<item name="float_button_background_disabled">#66454647</item>
<item name="float_button_background_highlighted">@color/black</item>
<item name="float_button_background_highlighted_disabled">#660a0a0a</item>
<item name="float_button_border">@color/black_alpha12</item>
<item name="float_button_border_disabled">#0c000000</item>
<item name="float_button_foreground">@color/gray_300</item>
<item name="float_button_foreground_disabled">#66aaaeb3</item>
<item name="header_alternate_background">@color/black</item>
<item name="header_alternate_tab_active_indicator">@color/gray_100</item>
<item name="header_alternate_tab_active_text">@color/gray_100</item>
<item name="header_alternate_tab_inactive_text">@color/gray_500</item>
<item name="header_background">@color/gray_900</item>
<item name="header_background_before_blur">@color/black</item>
<item name="header_background_before_blur_alternate">@color/black</item>
<item name="header_search_field_background">@color/gray_700</item>
<item name="header_search_field_tint">@color/gray_100</item>
<item name="header_tab_active_background">@color/gray_600</item>
<item name="header_tab_active_indicator">@color/gray_100</item>
<item name="header_tab_active_text">@color/gray_100</item>
<item name="header_tab_inactive_text">@color/gray_500</item>
<item name="header_text">@color/gray_100</item>
<item name="header_text_alternate">@color/gray_100</item>
<item name="header_text_secondary">@color/white_alpha60</item>
<item name="header_tint">@color/gray_100</item>
<item name="header_tint_alternate">@color/gray_100</item>
<item name="icon_alpha_placeholder">@color/gray_100</item>
<item name="icon_medium">@color/gray_400</item>
<item name="icon_name">@color/gray_300</item>
<item name="icon_outline_medium">@color/gray_300</item>
<item name="icon_outline_secondary">@color/gray_400</item>
<item name="icon_secondary">@color/gray_500</item>
<item name="icon_tertiary">@color/gray_700</item>
<item name="im_accent">?accent</item>
<item name="im_accent_dark">?accent</item>
<item name="im_alert">@color/red</item>
<item name="im_app_background_chat">?background_content</item>
<item name="im_app_background_navbar">@color/black</item>
<item name="im_app_background_navbar_light">false</item>
<item name="im_app_background_secondary">#ffebedf0</item>
<item name="im_app_background_statusbar">?accent</item>
<item name="im_app_background_statusbar_light">false</item>
<item name="im_app_background_tabbar">#fffafafa</item>
<item name="im_app_icon">?accent</item>
<item name="im_app_icon_destructive">@color/red</item>
<item name="im_app_icon_inv">@color/white</item>
<item name="im_app_icon_secondary">@color/im_old_blue_gray_light</item>
<item name="im_app_icon_toolbar">@color/white</item>
<item name="im_app_swipe_background_end">#ff4cb8ff</item>
<item name="im_app_swipe_background_start">#ff3f7fe0</item>
<item name="im_app_toolbar_foreground">@color/white</item>
<item name="im_app_toolbar_foreground_end">@color/white</item>
<item name="im_app_toolbar_foreground_semitransparent">#80ffffff</item>
<item name="im_app_toolbar_foreground_start">@color/white</item>
<item name="im_app_toolbar_tabs_indicator">@color/white</item>
<item name="im_attach_tint">@android:color/system_neutral1_200</item>
<item name="im_btn_accept_background">@color/black</item>
<item name="im_btn_accept_background_dark">@color/black</item>
<item name="im_btn_accept_foreground">@color/white</item>
<item name="im_btn_confirm">@drawable/vkim_btn_confirm_default</item>
<item name="im_btn_confirm_background">?accent</item>
<item name="im_btn_confirm_background_dark">?accent</item>
<item name="im_btn_confirm_background_disabled">@color/blue_200_muted</item>
<item name="im_btn_reject_background">@color/black</item>
<item name="im_btn_reject_background_dark">@color/black</item>
<item name="im_btn_reject_foreground">@color/white</item>
<item name="im_bubble_border_alternate">@color/clear</item>
<item name="im_bubble_border_alternate_highlighted">@color/clear</item>
<item name="im_bubble_button_background">@color/gray_750</item>
<item name="im_bubble_button_background_disabled">#66313233</item>
<item name="im_bubble_button_foreground">@color/gray_100</item>
<item name="im_bubble_button_foreground_disabled">#66e1e3e6</item>
<item name="im_bubble_gift_background">@color/gold_300</item>
<item name="im_bubble_gift_text">@color/gold_100</item>
<item name="im_bubble_gift_text_secondary">@color/gold_150</item>
<item name="im_bubble_incoming">@color/gray_800</item>
<item name="im_bubble_incoming_alternate">@color/gray_800</item>
<item name="im_bubble_incoming_alternate_highlighted">@color/gray_600</item>
<item name="im_bubble_incoming_highlighted">@color/gray_600</item>
<item name="im_bubble_outgoing">@color/gray_750</item>
<item name="im_bubble_outgoing_alternate">@color/gray_750</item>
<item name="im_bubble_outgoing_alternate_highlighted">@color/gray_500</item>
<item name="im_bubble_outgoing_highlighted">@color/gray_600</item>
<item name="im_conversation_error_icon">@color/red_error</item>
<item name="im_conversation_sending_icon">?accent</item>
<item name="im_conversation_unread_counter_background">?accent</item>
<item name="im_conversation_unread_counter_foreground">@color/white</item>
<item name="im_conversation_unread_counter_muted_background">#ffa9b0b8</item>
<item name="im_conversation_verified_icon">#ff67a5eb</item>
<item name="im_forward_line_tint">@color/white</item>
<item name="im_history_common_badge_background">#66000000</item>
<item name="im_history_common_badge_foreground">@color/white</item>
<item name="im_history_divider_background">@color/white</item>
<item name="im_history_divider_foreground">@color/im_old_blue_gray_medium</item>
<item name="im_history_divider_separator">#1e000000</item>
<item name="im_history_image_bubbleless_border">#1e000000</item>
<item name="im_history_incoming_attachment_icon">?accent</item>
<item name="im_history_incoming_background">#ffebeced</item>
<item name="im_history_incoming_background_selected">#ffc2c7cc</item>
<item name="im_history_incoming_button">?accent</item>
<item name="im_history_incoming_foreground">@color/black</item>
<item name="im_history_incoming_foreground_caption">@color/im_old_gray_medium</item>
<item name="im_history_incoming_foreground_caption_inv">@color/white</item>
<item name="im_history_incoming_foreground_link">?accent</item>
<item name="im_history_incoming_foreground_name">?accent</item>
<item name="im_history_incoming_image_placeholder_background">#14000c1a</item>
<item name="im_history_incoming_snippet_placeholder_background">
@color/im_old_accent_muted_14
</item>
<item name="im_history_incoming_snippet_placeholder_icon">?accent</item>
<item name="im_history_info_bar_background">#fffafbfc</item>
<item name="im_history_info_bar_border">#26000000</item>
<item name="im_history_live_badge_background">#ffff3347</item>
<item name="im_history_outgoing_attachment_icon">?accent</item>
<item name="im_history_outgoing_background">#ffc2ddfc</item>
<item name="im_history_outgoing_background_selected">#ffa3bedc</item>
<item name="im_history_outgoing_button">?accent</item>
<item name="im_history_outgoing_foreground">@color/black</item>
<item name="im_history_outgoing_foreground_caption">@color/im_old_gray_medium</item>
<item name="im_history_outgoing_foreground_link">?accent</item>
<item name="im_history_outgoing_foreground_name">?accent</item>
<item name="im_history_outgoing_image_placeholder_background">#14000c1a</item>
<item name="im_history_outgoing_snippet_placeholder_background">
@color/im_old_accent_muted_14
</item>
<item name="im_history_outgoing_snippet_placeholder_icon">?accent</item>
<item name="im_history_sending_icon">?accent</item>
<item name="im_history_sticker_badge_background">#e6ffffff</item>
<item name="im_history_sticker_badge_foreground">@color/im_old_gray_medium</item>
<item name="im_history_unread_icon">?accent</item>
<item name="im_is_vk_me">false</item>
<item name="im_item_foreground_caption">@color/im_old_gray_medium</item>
<item name="im_item_foreground_name">?accent</item>
<item name="im_item_foreground_subhead">@color/im_old_gray_dark</item>
<item name="im_item_foreground_tertiary">@color/im_old_gray_light</item>
<item name="im_menu_foreground">@color/gray_800</item>
<item name="im_reply_sender_text">@color/white</item>
<item name="im_reply_separator">@color/white</item>
<item name="im_service_message_text">@color/steel_gray_400</item>
<item name="im_tabbar_icon_active">?accent</item>
<item name="im_tabbar_icon_inactive">@color/im_old_blue_gray_light</item>
<item name="im_toolbar_separator">@color/gray_300</item>
<item name="im_toolbar_voice_msg_background">@color/gray_700</item>
<item name="image_border">@color/white_alpha8</item>
<item name="input_background">@color/gray_700</item>
<item name="input_border">@color/gray_700</item>
<item name="landing_background">?accent</item>
<item name="landing_primary_button_background">@color/white</item>
<item name="landing_primary_button_background_disabled">#66ffffff</item>
<item name="landing_primary_button_foreground">?accent</item>
<item name="landing_primary_button_foreground_disabled">#665181b8</item>
<item name="landing_snippet_border">@color/clear</item>
<item name="landing_text_secondary">@color/white_alpha60</item>
<item name="landing_text_title">@color/white</item>
<item name="like_text_tint">@color/red_light</item>
<item name="link_alternate">?accent</item>
<item name="loader_background">@color/black</item>
<item name="loader_tint">@color/gray_500</item>
<item name="loader_track_fill">@color/gray_700</item>
<item name="loader_track_value_fill">@android:color/system_neutral1_200</item>
<item name="media_overlay_button_background">@color/white</item>
<item name="media_overlay_button_background_disabled">#66ffffff</item>
<item name="media_overlay_button_foreground">@color/black</item>
<item name="media_overlay_button_foreground_disabled">#662c2d2e</item>
<item name="modal_card_background">@color/black</item>
<item name="modal_card_border">@color/white_alpha12</item>
<item name="modal_card_header_close">@color/white</item>
<item name="music_playback_icon">@color/white</item>
<item name="overlay_status_background">@color/black</item>
<item name="overlay_status_foreground">@color/gray_100</item>
<item name="overlay_status_icon">@color/gray_50</item>
<item name="panel_tab_active_background">@color/gray_700</item>
<item name="panel_tab_active_text">@color/gray_100</item>
<item name="panel_tab_inactive_text">@color/gray_500</item>
<item name="placeholder_icon_background">@color/white_alpha8</item>
<item name="placeholder_icon_foreground_primary">@color/gray_400</item>
<item name="placeholder_icon_foreground_secondary">@color/gray_600</item>
<item name="placeholder_icon_tint">@color/white</item>
<item name="poll_option_background">@color/white</item>
<item name="search_bar_background">@color/black</item>
<item name="search_bar_field_background">@color/gray_700</item>
<item name="search_bar_field_tint">@color/gray_300</item>
<item name="search_bar_segmented_control_tint">@color/gray_400</item>
<item name="segmented_control_bar_background">@color/black</item>
<item name="segmented_control_tint">@color/gray_500</item>
<item name="selection_off_icon">@color/gray_700</item>
<item name="separator_alpha">@color/white_alpha15</item>
<item name="separator_alternate">@color/black</item>
<item name="separator_common">@color/gray_750</item>
<item name="snippet_background">@color/black</item>
<item name="snippet_border">@color/white_alpha12</item>
<item name="snippet_icon_tertiary">@color/gray_600</item>
<item name="splashscreen_icon">@color/black</item>
<item name="statusbar_alternate_legacy_background">@color/clear</item>
<item name="stories_skeleton_loader_background">@color/gray_700</item>
<item name="switch_ios_off_border">@color/black</item>
<item name="tabbar_active_icon">@color/white</item>
<item name="tabbar_background">@color/gray_900</item>
<item name="tabbar_inactive_icon">@color/gray_500</item>
<item name="text_action_counter">@color/gray_300</item>
<item name="text_link">@android:color/system_neutral1_200</item>
<item name="text_link_hightlighted_background">@android:color/system_neutral1_200</item>
<item name="text_muted">@color/gray_200</item>
<item name="text_name">@color/gray_100</item>
<item name="text_placeholder">@color/gray_300</item>
<item name="text_primary">@color/gray_100</item>
<item name="text_secondary">@color/gray_500</item>
<item name="text_subhead">@color/gray_400</item>
<item name="text_tertiary">@color/gray_600</item>
<item name="toolbar_attach_background_from">@color/gray_500</item>
<item name="toolbar_attach_background_to">@color/gray_600</item>
<item name="writebar_icon">@color/gray_400</item>
</style>
</resources> </resources>
+10
View File
@@ -696,4 +696,14 @@
<item>no_update</item> <item>no_update</item>
<item>imd_update</item> <item>imd_update</item>
</string-array> </string-array>
<string-array name="undel_value">
<item>[Deleted]</item>
<item>🗑</item>
<item>❌</item>
</string-array>
<string-array name="undel">
<item>default</item>
<item>icon</item>
<item>icon2</item>
</string-array>
</resources> </resources>
+1 -1
View File
@@ -8016,7 +8016,7 @@
</style> </style>
<style name="Widget.Design.BottomSheet.Modal" parent="@android:style/Widget"> <style name="Widget.Design.BottomSheet.Modal" parent="@android:style/Widget">
<item name="android:background">?android:colorBackground</item> <item name="android:background">?background_content</item>
<item name="behavior_hideable">true</item> <item name="behavior_hideable">true</item>
<item name="behavior_peekHeight">auto</item> <item name="behavior_peekHeight">auto</item>
<item name="behavior_skipCollapsed">false</item> <item name="behavior_skipCollapsed">false</item>
+22
View File
@@ -54,6 +54,18 @@
<com.vtosters.lite.ui.MaterialSectionDividerPreference /> <com.vtosters.lite.ui.MaterialSectionDividerPreference />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/privacy_vtl"> <PreferenceCategory android:title="@string/privacy_vtl">
<com.vtosters.lite.ui.SummaryListPreference
android:defaultValue="default"
android:dialogTitle="Выберите значение"
android:entries="@array/undel_value"
android:entryValues="@array/undel"
android:key="undeletemsg_prefix"
android:title="Пометка удаленного сообщения" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="undeletemsg"
android:summary="Может не сохранять вложения"
android:title="Оставлять удаленные сообщения" />
<com.vtosters.lite.ui.MaterialSwitchPreference <com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="awayphp" android:key="awayphp"
@@ -64,5 +76,15 @@
android:key="benchmark" android:key="benchmark"
android:summary="@string/benchapisummary" android:summary="@string/benchapisummary"
android:title="@string/benchapi" /> android:title="@string/benchapi" />
<EditTextPreference
android:defaultValue="7.24"
android:key="vkver"
android:summary="Требуется перезапуск"
android:title="Подмена версии ВК" />
<EditTextPreference
android:defaultValue="12116"
android:key="vkbuild"
android:summary="Требуется перезапуск"
android:title="Подмена версии билда ВК" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>
+4 -9
View File
@@ -10,11 +10,6 @@
android:key="devmenu" android:key="devmenu"
android:title="Показывать пункт дебага в настройках" /> android:title="Показывать пункт дебага в настройках" />
<PreferenceCategory android:title="Experimental"> <PreferenceCategory android:title="Experimental">
<EditTextPreference
android:defaultValue=""
android:key="vkversion"
android:summary="Требуется перезапуск"
android:title="Изменение версии вк" />
<com.vtosters.lite.ui.MaterialSwitchPreference <com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="usevkui" android:key="usevkui"
@@ -37,10 +32,6 @@
android:defaultValue="true" android:defaultValue="true"
android:key="color_grishka" android:key="color_grishka"
android:title="Фикс некоторых покрасок Monet" /> android:title="Фикс некоторых покрасок Monet" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="vkim_msg"
android:title="VK Me theme" />
<com.vtosters.lite.ui.MaterialSwitchPreference <com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="libverify" android:key="libverify"
@@ -50,6 +41,10 @@
android:defaultValue="false" android:defaultValue="false"
android:key="msgflat" android:key="msgflat"
android:title="@string/vtlmsgflat" /> android:title="@string/vtlmsgflat" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="opusmodule"
android:title="Opus Module" />
<com.vtosters.lite.ui.SummaryListPreference <com.vtosters.lite.ui.SummaryListPreference
android:defaultValue="system" android:defaultValue="system"
android:dialogTitle="Выберите язык приложения" android:dialogTitle="Выберите язык приложения"
+20
View File
@@ -38,6 +38,16 @@
android:defaultValue="" android:defaultValue=""
android:key="proxyPortHTTP" android:key="proxyPortHTTP"
android:title="@string/proxyport" /> android:title="@string/proxyport" />
<EditTextPreference
android:defaultValue=""
android:key="proxyUserHTTP"
android:summary="Если имеется"
android:title="Логин" />
<EditTextPreference
android:defaultValue=""
android:key="proxyPassHTTP"
android:summary="Если имеется"
android:title="Пароль" />
<com.vtosters.lite.ui.MaterialSectionDividerPreference /> <com.vtosters.lite.ui.MaterialSectionDividerPreference />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/proxyhttps"> <PreferenceCategory android:title="@string/proxyhttps">
@@ -49,6 +59,16 @@
android:defaultValue="" android:defaultValue=""
android:key="proxyPortHTTPS" android:key="proxyPortHTTPS"
android:title="@string/proxyport" /> android:title="@string/proxyport" />
<EditTextPreference
android:defaultValue=""
android:key="proxyUserHTTPS"
android:summary="Если имеется"
android:title="Логин" />
<EditTextPreference
android:defaultValue=""
android:key="proxyPassHTTPS"
android:summary="Если имеется"
android:title="Пароль" />
<com.vtosters.lite.ui.MaterialSectionDividerPreference /> <com.vtosters.lite.ui.MaterialSectionDividerPreference />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/proxysocks"> <PreferenceCategory android:title="@string/proxysocks">
@@ -261,6 +261,10 @@
move-result-object v6 move-result-object v6
invoke-static {p0}, Lru/vtosters/lite/encryption/EncryptProvider;->encryptMessage(Lcom/vk/im/engine/models/messages/MsgFromUser;)Ljava/lang/String;
move-result-object v6
invoke-interface {v2, v5, v6}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; invoke-interface {v2, v5, v6}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 108 .line 108
@@ -36,37 +36,37 @@
# instance fields # instance fields
.field private c:I .field public c:I
.field private d:I .field public d:I
.field private e:I .field public e:I
.field private f:I .field public f:I
.field private g:I .field public g:I
.field private h:J .field public h:J
.field private i:Lcom/vk/im/engine/models/Member; .field public i:Lcom/vk/im/engine/models/Member;
.field private j:Z .field public j:Z
.field private k:Z .field public k:Z
.field private l:Z .field public l:Z
.field private m:Z .field public m:Z
.field private n:Lcom/vk/im/engine/models/messages/MsgSyncState; .field public n:Lcom/vk/im/engine/models/messages/MsgSyncState;
.field private o:Lcom/vk/im/engine/models/Weight; .field public o:Lcom/vk/im/engine/models/Weight;
.field private p:Z .field public p:Z
.field private q:Z .field public q:Z
.field private r:I .field public r:I
# direct methods # direct methods
@@ -29,11 +29,11 @@
# instance fields # instance fields
.field private d:Ljava/lang/String; .field public d:Ljava/lang/String;
.field private e:Ljava/lang/String; .field public e:Ljava/lang/String;
.field private f:Ljava/util/List; .field public f:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature; .annotation system Ldalvik/annotation/Signature;
value = { value = {
"Ljava/util/List<", "Ljava/util/List<",
@@ -43,7 +43,7 @@
.end annotation .end annotation
.end field .end field
.field private g:Ljava/util/List; .field public g:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature; .annotation system Ldalvik/annotation/Signature;
value = { value = {
"Ljava/util/List<", "Ljava/util/List<",
@@ -53,11 +53,11 @@
.end annotation .end annotation
.end field .end field
.field private h:Ljava/lang/String; .field public h:Ljava/lang/String;
.field private i:Ljava/lang/String; .field public i:Ljava/lang/String;
.field private j:Ljava/lang/String; .field public j:Ljava/lang/String;
# direct methods # direct methods
@@ -241,6 +241,8 @@
.method public c()V .method public c()V
.locals 4 .locals 4
return-void
.line 73 .line 73
invoke-virtual {p0}, Lcom/vk/n/MasksAnalytics;->b()V invoke-virtual {p0}, Lcom/vk/n/MasksAnalytics;->b()V
@@ -102,28 +102,28 @@
:try_start_0 :try_start_0
const-class p1, Landroid/support/v4/view/ViewPager; const-class p1, Landroid/support/v4/view/ViewPager;
const-string p4, "mScroller" const-string p4, "m"
.line 776 .line 776
invoke-virtual {p1, p4}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field; invoke-virtual {p1, p4}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object p4 move-result-object p4
const-string v0, "m" const-string v0, "scrollerField"
.line 777 .line 777
invoke-static {p4, v0}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p4, v0}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
invoke-virtual {p4, p3}, Ljava/lang/reflect/Field;->setAccessible(Z)V invoke-virtual {p4, p3}, Ljava/lang/reflect/Field;->setAccessible(Z)V
const-string v0, "sInterpolator" const-string v0, "f"
.line 778 .line 778
invoke-virtual {p1, v0}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field; invoke-virtual {p1, v0}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object p1 move-result-object p1
const-string v0, "f" const-string v0, "interpolator"
.line 779 .line 779
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
@@ -268,28 +268,28 @@
:try_start_0 :try_start_0
const-class v0, Landroid/support/v4/view/ViewPager; const-class v0, Landroid/support/v4/view/ViewPager;
const-string v1, "mScroller" const-string v1, "m"
.line 111 .line 111
invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field; invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v1 move-result-object v1
const-string v2, "m" const-string v2, "scroller"
.line 112 .line 112
invoke-static {v1, v2}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {v1, v2}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
invoke-virtual {v1, p2}, Ljava/lang/reflect/Field;->setAccessible(Z)V invoke-virtual {v1, p2}, Ljava/lang/reflect/Field;->setAccessible(Z)V
const-string v2, "sInterpolator" const-string v2, "f"
.line 113 .line 113
invoke-virtual {v0, v2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field; invoke-virtual {v0, v2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v2 move-result-object v2
const-string v3, "f" const-string v3, "interpolator"
.line 114 .line 114
invoke-static {v2, v3}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {v2, v3}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
@@ -203,11 +203,7 @@
invoke-virtual {v0, v1}, Landroid/text/TextPaint;->setTextSize(F)V invoke-virtual {v0, v1}, Landroid/text/TextPaint;->setTextSize(F)V
.line 180 .line 180
iget-object v0, p0, Lcom/vk/sharing/view/SharingActionsView$a;->l:Landroid/text/TextPaint; invoke-static {}, Lru/vtosters/lite/utils/Themes;->getHeaderText()I
const v1, 0x7f0600ab
invoke-static {p1, v1}, Landroid/support/v4/content/ContextCompat;->c(Landroid/content/Context;I)I
move-result v1 move-result v1
@@ -275,6 +275,11 @@
.line 105 .line 105
iget-object v0, v0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String; iget-object v0, v0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String;
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersion()Ljava/lang/String;
move-result-object v0
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
@@ -136,6 +136,8 @@
.method private final a(Ljava/lang/String;)V .method private final a(Ljava/lang/String;)V
.locals 4 .locals 4
return-void
.line 912 .line 912
new-instance v0, Lorg/json/JSONObject; new-instance v0, Lorg/json/JSONObject;
@@ -655,6 +655,8 @@
invoke-virtual {v0, p1}, Lcom/vk/im/engine/models/messages/Msg;->f(I)V invoke-virtual {v0, p1}, Lcom/vk/im/engine/models/messages/Msg;->f(I)V
invoke-static {v0}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->setBodyDBParser(Lcom/vk/im/engine/models/messages/Msg;)V
return-object v0 return-object v0
:pswitch_data_0 :pswitch_data_0
@@ -190,7 +190,9 @@
const-string v2, "music_build_version" const-string v2, "music_build_version"
const/16 v3, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v3
.line 809 .line 809
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
@@ -376,7 +376,9 @@
const-string v5, "music_build_version" const-string v5, "music_build_version"
const/16 v6, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v6
.line 745 .line 745
invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
@@ -1142,7 +1144,9 @@
const-string v2, "music_build_version" const-string v2, "music_build_version"
const/16 v3, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v3
.line 579 .line 579
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
@@ -2499,7 +2503,9 @@
const-string v0, "music_build_version" const-string v0, "music_build_version"
const/16 v1, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v1
.line 394 .line 394
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
@@ -1404,12 +1404,22 @@
.line 720 .line 720
iget v6, v5, Landroid/content/pm/PackageInfo;->versionCode:I iget v6, v5, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v6
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
.line 721 .line 721
:try_start_1 :try_start_1
iget-object v4, v5, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String; iget-object v4, v5, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String;
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersion()Ljava/lang/String;
move-result-object v4
:try_end_1 :try_end_1
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_1 .. :try_end_1} :catch_1 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_1 .. :try_end_1} :catch_1
@@ -423,6 +423,11 @@
.line 213 .line 213
iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result p0
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
.catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_0 .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_0
@@ -38,6 +38,8 @@
.method public run()V .method public run()V
.locals 7 .locals 7
return-void
.line 110 .line 110
iget-object v0, p0, Lcom/vk/attachpicker/analytics/EditorAnalytics$1;->a:Lcom/vk/attachpicker/analytics/EditorAnalytics; iget-object v0, p0, Lcom/vk/attachpicker/analytics/EditorAnalytics$1;->a:Lcom/vk/attachpicker/analytics/EditorAnalytics;
@@ -4,11 +4,11 @@
# instance fields # instance fields
.field private final a:Lcom/vk/im/engine/ImEnvironment; .field public final a:Lcom/vk/im/engine/ImEnvironment;
.field private final b:I .field public final b:I
.field private final c:I .field public final c:I
# direct methods # direct methods
@@ -61,8 +61,17 @@
# virtual methods # virtual methods
.method protected b(Lcom/vk/im/engine/internal/longpoll/LongPollChanges;)V .method protected b(Lcom/vk/im/engine/internal/longpoll/LongPollChanges;)V
.locals 2 .locals 4
invoke-static {}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->hook()Z
move-result v0
if-eqz v0, :cond_7
return-void
:cond_7
const-string v0, "out" const-string v0, "out"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
@@ -83,8 +92,19 @@
.end method .end method
.method protected b(Lcom/vk/im/engine/internal/longpoll/LongPollEntityInfo;Lcom/vk/im/engine/internal/longpoll/LongPollEntityMissed;)V .method protected b(Lcom/vk/im/engine/internal/longpoll/LongPollEntityInfo;Lcom/vk/im/engine/internal/longpoll/LongPollEntityMissed;)V
.locals 1 .locals 4
invoke-static {p0}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->hookDeletedMessageId(Lcom/vk/im/engine/internal/longpoll/a/MsgDeleteLpTask;)V
invoke-static {}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->hook()Z
move-result v0
if-eqz v0, :cond_a
return-void
:cond_a
const-string v0, "lpInfo" const-string v0, "lpInfo"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
@@ -120,8 +140,19 @@
.end method .end method
.method protected c(Lcom/vk/im/engine/internal/longpoll/LongPollEntityInfo;)V .method protected c(Lcom/vk/im/engine/internal/longpoll/LongPollEntityInfo;)V
.locals 3 .locals 5
invoke-static {}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->hook()Z
move-result v0
if-eqz v0, :cond_a
invoke-static {p0}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->updateDialog(Lcom/vk/im/engine/internal/longpoll/a/MsgDeleteLpTask;)V
return-void
:cond_a
const-string v0, "lpInfo" const-string v0, "lpInfo"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
@@ -21,6 +21,8 @@
.method public constructor <init>(Lcom/vk/im/engine/internal/storage/CacheEnvironment;)V .method public constructor <init>(Lcom/vk/im/engine/internal/storage/CacheEnvironment;)V
.locals 7 .locals 7
invoke-static {p1}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->grabVKDatabase(Lcom/vk/im/engine/internal/storage/CacheEnvironment;)V
const-string v0, "env" const-string v0, "env"
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
@@ -168,6 +168,10 @@
move-result-object v2 move-result-object v2
invoke-static {p1}, Lru/vtosters/lite/encryption/EncryptProvider;->decryptMessage(Lcom/vk/im/engine/models/messages/MsgFromUser;)Ljava/lang/String;
move-result-object v2
check-cast v2, Ljava/lang/CharSequence; check-cast v2, Ljava/lang/CharSequence;
invoke-virtual {v1, v2}, Lcom/vk/im/ui/components/viewcontrollers/msg_list/entry/MsgTextBuilder;->a(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; invoke-virtual {v1, v2}, Lcom/vk/im/ui/components/viewcontrollers/msg_list/entry/MsgTextBuilder;->a(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
@@ -502,6 +506,14 @@
move-result-object v2 move-result-object v2
invoke-virtual {p1}, Lcom/vk/im/engine/models/messages/NestedMsg;->b()I
move-result v3
invoke-static {v2, v3}, Lru/vtosters/lite/encryption/EncryptProvider;->decryptMessage(Ljava/lang/String;I)Ljava/lang/String;
move-result-object v2
check-cast v2, Ljava/lang/CharSequence; check-cast v2, Ljava/lang/CharSequence;
invoke-virtual {v1, v2}, Lcom/vk/im/ui/components/viewcontrollers/msg_list/entry/MsgTextBuilder;->a(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; invoke-virtual {v1, v2}, Lcom/vk/im/ui/components/viewcontrollers/msg_list/entry/MsgTextBuilder;->a(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
@@ -339,7 +339,9 @@
move-result v5 move-result v5
const/16 v6, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v6
invoke-direct {p0}, Lcom/vk/pushes/PushSubscriber;->a()Ljava/lang/String; invoke-direct {p0}, Lcom/vk/pushes/PushSubscriber;->a()Ljava/lang/String;
+5
View File
@@ -3665,6 +3665,11 @@
.line 1303 .line 1303
iget v1, v1, Landroid/content/pm/PackageInfo;->versionCode:I iget v1, v1, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v1
:try_end_0 :try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
@@ -552,7 +552,9 @@
.method private final c()V .method private final c()V
.locals 8 .locals 8
const/16 v0, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v0
.line 159 .line 159
invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
@@ -292,7 +292,9 @@
:try_start_0 :try_start_0
new-instance v0, Lcom/vk/api/internal/InternalGetNotifications; new-instance v0, Lcom/vk/api/internal/InternalGetNotifications;
const/16 v1, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v1
invoke-static {}, Lcom/vtosters/lite/data/Analytics;->e()Ljava/lang/String; invoke-static {}, Lcom/vtosters/lite/data/Analytics;->e()Ljava/lang/String;
@@ -425,7 +427,9 @@
:try_start_0 :try_start_0
new-instance v0, Lcom/vk/api/internal/InternalGetUserNotifications; new-instance v0, Lcom/vk/api/internal/InternalGetUserNotifications;
const/16 v4, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v4
.line 260 .line 260
invoke-static {}, Lcom/vtosters/lite/data/Analytics;->e()Ljava/lang/String; invoke-static {}, Lcom/vtosters/lite/data/Analytics;->e()Ljava/lang/String;
@@ -34,6 +34,11 @@
.line 23 .line 23
iget v1, v1, Landroid/content/pm/PackageInfo;->versionCode:I iget v1, v1, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v1
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
@@ -96,6 +96,11 @@
move-result-object p0 move-result-object p0
iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result p0
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
@@ -272,6 +272,10 @@
.line 66 .line 66
iget v1, v0, Landroid/content/pm/PackageInfo;->versionCode:I iget v1, v0, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v1
invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
move-result-object v1 move-result-object v1
@@ -281,6 +285,10 @@
.line 67 .line 67
iget-object v0, v0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String; iget-object v0, v0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String;
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersion()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/firebase/iid/o;->c:Ljava/lang/String; iput-object v0, p0, Lcom/google/firebase/iid/o;->c:Ljava/lang/String;
:try_end_0 :try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0
@@ -47,7 +47,9 @@
aput-object v2, v1, v3 aput-object v2, v1, v3
const/16 v2, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v2
.line 39 .line 39
invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
@@ -26,7 +26,9 @@
const/4 v1, 0x0 const/4 v1, 0x0
const/16 v2, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v2
.line 117 .line 117
invoke-direct {p0, p1, v0, v1, v2}, Landroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V invoke-direct {p0, p1, v0, v1, v2}, Landroid/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V
@@ -43,7 +43,9 @@
aput-object v0, v4, v5 aput-object v0, v4, v5
const/16 v6, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v6
.line 26 .line 26
invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
@@ -26,9 +26,9 @@
# instance fields # instance fields
.field private b:Lcom/vk/im/engine/models/MemberType; .field public b:Lcom/vk/im/engine/models/MemberType;
.field private c:I .field public c:I
# direct methods # direct methods
@@ -569,7 +569,9 @@
move-result-wide v0 move-result-wide v0
const-wide/16 v2, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuildLong()J
move-result-wide v2
cmp-long v4, v0, v2 cmp-long v4, v0, v2
@@ -126,7 +126,9 @@
long-to-int v0, v0 long-to-int v0, v0
const/16 v1, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v1
if-eq v0, v1, :cond_0 if-eq v0, v1, :cond_0
@@ -161,7 +163,9 @@
iget-object v1, p0, Lcom/vk/stickers/storage/StickersStorage;->b:Ljava/lang/String; iget-object v1, p0, Lcom/vk/stickers/storage/StickersStorage;->b:Ljava/lang/String;
const/16 v2, 0xd6f invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result v2
int-to-long v2, v2 int-to-long v2, v2
@@ -87,6 +87,8 @@
invoke-virtual {v0, v1}, Lorg/json/JSONArray;->put(Ljava/lang/Object;)Lorg/json/JSONArray; invoke-virtual {v0, v1}, Lorg/json/JSONArray;->put(Ljava/lang/Object;)Lorg/json/JSONArray;
return-void
.line 71 .line 71
new-instance v1, Lcom/vtosters/lite/api/l/StatTrackCustomEvents; new-instance v1, Lcom/vtosters/lite/api/l/StatTrackCustomEvents;
@@ -48,6 +48,11 @@
move-result-object p0 move-result-object p0
iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result p0
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
@@ -701,6 +706,10 @@
iget-object p0, p0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String; iget-object p0, p0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String;
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersion()Ljava/lang/String;
move-result p0
invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v0 move-result v0
@@ -519,6 +519,10 @@
iget p1, p1, Landroid/content/pm/PackageInfo;->versionCode:I iget p1, p1, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result p1
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
@@ -222,6 +222,11 @@
move-result-object p0 move-result-object p0
iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
move-result p0
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
@@ -395,6 +395,8 @@
.method private final d()V .method private final d()V
.locals 3 .locals 3
return-void
.line 191 .line 191
new-instance v0, Lcom/vk/api/sdk/a/VKBooleanRequest; new-instance v0, Lcom/vk/api/sdk/a/VKBooleanRequest;
@@ -39,7 +39,7 @@
.locals 0 .locals 0
.line 295 .line 295
invoke-static {}, Lcom/vk/medianative/MediaNative;->nativeAudioStopRecord()V invoke-static {}, Lru/vtosters/lite/utils/OpusLoader;->AudioStopRecordBridge()V
return-void return-void
.end method .end method
@@ -198,7 +198,7 @@
move-result v3 move-result v3
:goto_2 :goto_2
invoke-static {v1, v3}, Lcom/vk/medianative/MediaNative;->nativeAudioWriteFrame(Ljava/nio/ByteBuffer;I)I invoke-static {v1, v3}, Lru/vtosters/lite/utils/OpusLoader;->AudioWriteFrameBridge(Ljava/nio/ByteBuffer;I)I
move-result v1 move-result v1
@@ -116,7 +116,7 @@
move-result-object v3 move-result-object v3
invoke-static {v3}, Lcom/vk/medianative/MediaNative;->nativeAudioStartRecord(Ljava/lang/String;)I invoke-static {v3}, Lru/vtosters/lite/utils/OpusLoader;->AudioStartRecordBridge(Ljava/lang/String;)I
move-result v3 move-result v3
@@ -207,7 +207,9 @@
.line 360 .line 360
iget-object v3, p0, Lcom/vk/audio/AudioMessageUtils$c;->a:Lcom/vk/audio/AudioMessageUtils; iget-object v3, p0, Lcom/vk/audio/AudioMessageUtils$c;->a:Lcom/vk/audio/AudioMessageUtils;
const-wide/16 v4, 0x0 invoke-static {}, Lru/vtosters/lite/utils/OpusLoader;->getLength()J
move-result-wide v4
invoke-static {v3, v4, v5}, Lcom/vk/audio/AudioMessageUtils;->a(Lcom/vk/audio/AudioMessageUtils;J)J invoke-static {v3, v4, v5}, Lcom/vk/audio/AudioMessageUtils;->a(Lcom/vk/audio/AudioMessageUtils;J)J
@@ -324,7 +326,7 @@
invoke-interface {v3, v4}, Lcom/vk/audio/AudioRecordObserver;->a(Ljava/lang/String;)V invoke-interface {v3, v4}, Lcom/vk/audio/AudioRecordObserver;->a(Ljava/lang/String;)V
.line 373 .line 373
invoke-static {}, Lcom/vk/medianative/MediaNative;->nativeAudioStopRecord()V invoke-static {}, Lru/vtosters/lite/utils/OpusLoader;->AudioStopRecordBridge()V
.line 374 .line 374
iget-object v3, p0, Lcom/vk/audio/AudioMessageUtils$c;->a:Lcom/vk/audio/AudioMessageUtils; iget-object v3, p0, Lcom/vk/audio/AudioMessageUtils$c;->a:Lcom/vk/audio/AudioMessageUtils;
@@ -31,19 +31,19 @@
# instance fields # instance fields
.field private b:Lcom/vk/im/engine/models/messages/NestedMsg$Type; .field public b:Lcom/vk/im/engine/models/messages/NestedMsg$Type;
.field private c:I .field public c:I
.field private d:I .field public d:I
.field private e:Lcom/vk/im/engine/models/Member; .field public e:Lcom/vk/im/engine/models/Member;
.field private f:Ljava/lang/String; .field public f:Ljava/lang/String;
.field private g:Ljava/lang/String; .field public g:Ljava/lang/String;
.field private h:Ljava/util/List; .field public h:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature; .annotation system Ldalvik/annotation/Signature;
value = { value = {
"Ljava/util/List<", "Ljava/util/List<",
@@ -53,7 +53,7 @@
.end annotation .end annotation
.end field .end field
.field private i:Ljava/util/List; .field public i:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature; .annotation system Ldalvik/annotation/Signature;
value = { value = {
"Ljava/util/List<", "Ljava/util/List<",
@@ -63,7 +63,7 @@
.end annotation .end annotation
.end field .end field
.field private j:J .field public j:J
# direct methods # direct methods
@@ -173,6 +173,8 @@
.line 66 .line 66
:cond_0 :cond_0
return-void
new-instance p0, Lcom/vk/api/base/ApiRequest; new-instance p0, Lcom/vk/api/base/ApiRequest;
const-string p1, "stats.trackEvents" const-string p1, "stats.trackEvents"
@@ -1595,6 +1595,8 @@
.method private final br()V .method private final br()V
.locals 3 .locals 3
return-void
.line 740 .line 740
invoke-virtual {p0}, Lcom/vk/webapp/VkUiConnectFragment;->aC()Lio/reactivex/disposables/CompositeDisposable; invoke-virtual {p0}, Lcom/vk/webapp/VkUiConnectFragment;->aC()Lio/reactivex/disposables/CompositeDisposable;
@@ -62,6 +62,8 @@
.line 10 .line 10
invoke-direct {p0}, Ljava/lang/Object;-><init>()V invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const p1, 0x0
iput p1, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->d:I iput p1, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->d:I
iput-object p2, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->e:Ljava/lang/String; iput-object p2, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->e:Ljava/lang/String;
@@ -101,6 +103,10 @@
.method private final c()Lio/reactivex/disposables/Disposable; .method private final c()Lio/reactivex/disposables/Disposable;
.locals 12 .locals 12
const/4 v0, 0x0
return-object v0
.line 60 .line 60
iget-object v0, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->c:Ljava/util/List; iget-object v0, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->c:Ljava/util/List;
@@ -259,6 +265,10 @@
.method public final a()Lio/reactivex/disposables/Disposable; .method public final a()Lio/reactivex/disposables/Disposable;
.locals 3 .locals 3
const/4 v0, 0x0
return-object v0
.line 14 .line 14
new-instance v0, Lcom/vtosters/lite/api/ResultlessAPIRequest; new-instance v0, Lcom/vtosters/lite/api/ResultlessAPIRequest;
@@ -303,6 +313,8 @@
.method public a(I)V .method public a(I)V
.locals 5 .locals 5
return-void
.line 28 .line 28
iget v0, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->d:I iget v0, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->d:I
@@ -400,6 +412,8 @@
.method public b(I)V .method public b(I)V
.locals 6 .locals 6
return-void
.line 43 .line 43
iget v0, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->d:I iget v0, p0, Lcom/vk/webapp/helpers/VkAppsAnalytics;->d:I
@@ -7,6 +7,8 @@
.method public constructor <init>(Ljava/lang/String;Ljava/lang/String;JJILjava/lang/String;Ljava/lang/Exception;)V .method public constructor <init>(Ljava/lang/String;Ljava/lang/String;JJILjava/lang/String;Ljava/lang/Exception;)V
.locals 1 .locals 1
return-void
const-string v0, "stats.trackDownloadServerState" const-string v0, "stats.trackDownloadServerState"
.line 11 .line 11
@@ -407,6 +407,10 @@
.method public d()Lcom/vtosters/lite/data/Analytics$a; .method public d()Lcom/vtosters/lite/data/Analytics$a;
.locals 5 .locals 5
const/4 p0, 0x0
return-object p0
.line 588 .line 588
iget-object v0, p0, Lcom/vtosters/lite/data/Analytics$a;->d:Ljava/lang/String; iget-object v0, p0, Lcom/vtosters/lite/data/Analytics$a;->d:Ljava/lang/String;
@@ -293,6 +293,11 @@
move-result-object p0 move-result-object p0
iget-object p0, p0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String; iget-object p0, p0, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String;
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersion()Ljava/lang/String;
move-result-object p0
:try_end_0 :try_end_0
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0 .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0