Compare commits
37
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc70e55b53 | ||
|
|
ed08e97a50 | ||
|
|
44904786d9 | ||
|
|
12b67ce189 | ||
|
|
21b0edf092 | ||
|
|
2adb446d80 | ||
|
|
60738458bb | ||
|
|
a591026258 | ||
|
|
1bab7fa17c | ||
|
|
2713216728 | ||
|
|
f9a529275a | ||
|
|
e992203b7c | ||
|
|
0ed057d705 | ||
|
|
9b70ca6faf | ||
|
|
422c3e4a6c | ||
|
|
6dac880d61 | ||
|
|
c911b2d64e | ||
|
|
39f72f9058 | ||
|
|
2bff354ad0 | ||
|
|
cb55e9b96f | ||
|
|
33f551d464 | ||
|
|
282fa7bdda | ||
|
|
0abd97e8e1 | ||
|
|
5dd616685d | ||
|
|
aff99be92d | ||
|
|
c255f1e498 | ||
|
|
70342daf07 | ||
|
|
f95672e57d | ||
|
|
8f5da42df4 | ||
|
|
4022903069 | ||
|
|
4600c185e4 | ||
|
|
30e8ec0038 | ||
|
|
367b212ca3 | ||
|
|
6533feb62b | ||
|
|
95ef37f6a3 | ||
|
|
6216c66d95 | ||
|
|
02b6e4a728 |
@@ -8,14 +8,14 @@ VTosters Lite - это модифицированный клиент (деком
|
||||
|
||||
Стабильные сборки находятся в [Releases](https://github.com/vtosters/lite/releases)
|
||||
|
||||
## Откладка
|
||||
## Отладка приложения
|
||||
|
||||
Для откладки с помощью Android Studio необходимо пройти в `/smali/AndroidManifest.xml`
|
||||
Для отладки с помощью Android Studio необходимо пройти в `/smali/AndroidManifest.xml`
|
||||
```
|
||||
android:debuggable="false" -> android:debuggable="true"
|
||||
```
|
||||
|
||||
Для дополнительной откладки ответов, доп логов и подмены данных для дебаг приложения необходимо включить **Режим разработчика**
|
||||
Для дополнительной отладки ответов, доп логов и подмены данных для дебаг приложения необходимо включить **Режим разработчика**
|
||||
```
|
||||
Настройки -> Для разработчиков -> Режим разработчика
|
||||
```
|
||||
@@ -92,4 +92,4 @@ android:debuggable="false" -> android:debuggable="true"
|
||||
build.bat
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -86,6 +86,7 @@ android {
|
||||
sourceCompatibility JavaVersion.VERSION_11
|
||||
targetCompatibility JavaVersion.VERSION_11
|
||||
}
|
||||
namespace 'ru.vtosters.lite'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="ru.vtosters.lite">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
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.util.Base64;
|
||||
|
||||
@@ -108,7 +111,7 @@ public class GCMFix {
|
||||
params.add("X-X-subscription=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-osv=30");
|
||||
params.add("X-sig=" + sig);
|
||||
@@ -129,12 +132,12 @@ public class GCMFix {
|
||||
if (!del) {
|
||||
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("sender=841415684880");
|
||||
params.add("device=" + androidId);
|
||||
params.add("cert=48761eef50ee53afc4cc9c5f10e6bde7f8f5b82f");
|
||||
params.add("app_ver=3439");
|
||||
params.add("app_ver=" + VKVersionBuild());
|
||||
params.add("gcm_ver=11949470");
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package ru.vtosters.lite.badmanners;
|
||||
package ru.vtosters.lite.deviceinfo;
|
||||
|
||||
public class Device {
|
||||
private String androidId;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package ru.vtosters.lite.badmanners;
|
||||
package ru.vtosters.lite.deviceinfo;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
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;
|
||||
|
||||
import static ru.vtosters.lite.utils.About.*;
|
||||
import static ru.vtosters.lite.utils.Globals.*;
|
||||
import static ru.vtosters.lite.utils.Preferences.*;
|
||||
import static ru.vtosters.lite.utils.About.getBuildNumber;
|
||||
import static ru.vtosters.lite.utils.Globals.getContext;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Notification;
|
||||
@@ -20,7 +19,7 @@ import com.vtosters.lite.R;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import ru.vtosters.lite.badmanners.DeviceInfoCollector;
|
||||
import ru.vtosters.lite.deviceinfo.DeviceInfoCollector;
|
||||
|
||||
public class Crashreporter {
|
||||
protected static String logString;
|
||||
@@ -37,7 +36,7 @@ public class Crashreporter {
|
||||
}
|
||||
|
||||
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) {
|
||||
var notificationChannel = new NotificationChannel("crashes", "crash", NotificationManager.IMPORTANCE_DEFAULT);
|
||||
notificationChannel.enableVibration(true);
|
||||
@@ -61,7 +60,7 @@ public class Crashreporter {
|
||||
|
||||
var builder = new Notification.Builder(getContext());
|
||||
builder.setSmallIcon(R.drawable.ic_bug_24);
|
||||
builder.setContentTitle("VTL Крашнулся!");
|
||||
builder.setContentTitle("Произошла ошибка в работе VTLite!");
|
||||
builder.setContentText(logString);
|
||||
builder.setStyle(new Notification.BigTextStyle().bigText(logString));
|
||||
builder.setAutoCancel(true);
|
||||
|
||||
@@ -74,6 +74,8 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
|
||||
@Override // android.support.v7.preference.Preference.c
|
||||
public boolean a(Preference preference) {
|
||||
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
|
||||
prefs.edit().clear().commit();
|
||||
VKImageLoader.b();
|
||||
ImEngineProvider.a().h();
|
||||
AudioMessageUtils.j();
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
||||
|
||||
import static ru.vtosters.lite.utils.Globals.getContext;
|
||||
import static ru.vtosters.lite.utils.Themes.getAccentColor;
|
||||
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@@ -62,11 +64,17 @@ public class DockBarInjector {
|
||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
||||
MenuItem add = menu.add(0, tab.id, 0, tab.titleID);
|
||||
Drawable drawable = getContext().getResources().getDrawable(tab.iconID);
|
||||
ColorStateList colorStateList = getContext().getResources().getColorStateList(com.vtosters.lite.R.color.bottom_navigation_item);
|
||||
// if (isAndroidMonet()) {
|
||||
// colorStateList = ColorStateList.valueOf(Themes.getAccentColor());
|
||||
// }
|
||||
add.setIcon(new RecoloredDrawable(drawable, colorStateList));
|
||||
ColorStateList dockcolors = new ColorStateList(
|
||||
new int[][]{
|
||||
new int[]{android.R.attr.state_checked},
|
||||
new int[]{-android.R.attr.state_checked}
|
||||
},
|
||||
new int[] {
|
||||
getAccentColor(),
|
||||
Color.parseColor("#ffaaaeb3")
|
||||
}
|
||||
);
|
||||
add.setIcon(new RecoloredDrawable(drawable, dockcolors));
|
||||
add.setShowAsAction(1);
|
||||
add.setCheckable(true);
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import static ru.vtosters.lite.utils.Preferences.newfeed;
|
||||
import static ru.vtosters.lite.utils.Preferences.olddock;
|
||||
|
||||
import com.vk.apps.AppsFragment;
|
||||
import com.vk.discover.DiscoverFeedFragment;
|
||||
import com.vk.discover.DiscoverFragment;
|
||||
import com.vk.discover.GatewaysFragment;
|
||||
import com.vk.fave.fragments.FaveTabFragment;
|
||||
import com.vk.feedlikes.fragments.FeedLikesFragment;
|
||||
import com.vk.menu.MenuFragment;
|
||||
@@ -80,7 +80,7 @@ public class DockBarManager {
|
||||
|
||||
if (!dockbar.exists()) {
|
||||
mSelectedTabs.add(new DockBarTab("tab_news", olddock() ? R.drawable.ic_newsfeed_28 : R.drawable.ic_menu_newsfeed_outline_28, R.string.newsfeed, R.id.tab_news, newfeed() ? HomeFragment.class : NewsfeedFragment.class));
|
||||
mSelectedTabs.add(new DockBarTab("tab_discover", olddock() ? R.drawable.ic_search_28 : R.drawable.ic_menu_search_outline_28, R.string.search, R.id.tab_discover, newfeed() ? DiscoverFragment.class : DiscoverFeedFragment.class));
|
||||
mSelectedTabs.add(new DockBarTab("tab_discover", olddock() ? R.drawable.ic_search_28 : R.drawable.ic_menu_search_outline_28, R.string.search, R.id.tab_discover, newfeed() ? GatewaysFragment.class : DiscoverFragment.class ));
|
||||
mSelectedTabs.add(new DockBarTab("tab_messages", olddock() ? R.drawable.ic_menu_messages_28 : R.drawable.ic_message_28_outline, R.string.messages, R.id.tab_messages, DialogsFragment.class));
|
||||
mSelectedTabs.add(new DockBarTab("tab_feedback", olddock() ? R.drawable.ic_menu_notifications_28 : R.drawable.ic_menu_notification_outline_28, R.string.feedback, R.id.tab_feedback, NotificationsContainerFragment.class));
|
||||
mSelectedTabs.add(new DockBarTab("tab_menu", olddock() ? R.drawable.ic_menu_more_28 : R.drawable.ic_menu_more_outline_28, R.string.menu, R.id.tab_menu, MenuFragment.class));
|
||||
@@ -118,14 +118,14 @@ public class DockBarManager {
|
||||
if (newfeed()) {
|
||||
if (tab.fragmentClass == NewsfeedFragment.class) {
|
||||
tab.fragmentClass = HomeFragment.class;
|
||||
} else if (tab.fragmentClass == DiscoverFeedFragment.class) {
|
||||
} else if (tab.fragmentClass == DiscoverFragment.class) {
|
||||
tab.fragmentClass = DiscoverFragment.class;
|
||||
}
|
||||
} else {
|
||||
if (tab.fragmentClass == HomeFragment.class) {
|
||||
tab.fragmentClass = NewsfeedFragment.class;
|
||||
} else if (tab.fragmentClass == DiscoverFragment.class) {
|
||||
tab.fragmentClass = DiscoverFeedFragment.class;
|
||||
} else if (tab.fragmentClass == GatewaysFragment.class) {
|
||||
tab.fragmentClass = GatewaysFragment.class;
|
||||
}
|
||||
}
|
||||
mSelectedTabs.add(tab);
|
||||
@@ -144,14 +144,14 @@ public class DockBarManager {
|
||||
if (newfeed()) {
|
||||
if (tab.fragmentClass == NewsfeedFragment.class) {
|
||||
tab.fragmentClass = HomeFragment.class;
|
||||
} else if (tab.fragmentClass == DiscoverFeedFragment.class) {
|
||||
tab.fragmentClass = DiscoverFragment.class;
|
||||
} else if (tab.fragmentClass == DiscoverFragment.class) {
|
||||
tab.fragmentClass = GatewaysFragment.class;
|
||||
}
|
||||
} else {
|
||||
if (tab.fragmentClass == HomeFragment.class) {
|
||||
tab.fragmentClass = NewsfeedFragment.class;
|
||||
} else if (tab.fragmentClass == DiscoverFragment.class) {
|
||||
tab.fragmentClass = DiscoverFeedFragment.class;
|
||||
} else if (tab.fragmentClass == GatewaysFragment.class) {
|
||||
tab.fragmentClass = DiscoverFragment.class;
|
||||
}
|
||||
}
|
||||
mDisabledTabs.add(tab);
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
||||
|
||||
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.isNetworkConnected;
|
||||
import static ru.vtosters.lite.utils.Globals.restartApplication;
|
||||
import static ru.vtosters.lite.utils.Themes.getTextAttr;
|
||||
import static ru.vtosters.lite.utils.Themes.recolorDrawable;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
@@ -127,6 +130,8 @@ public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.Mult
|
||||
VKAccount b = VKAccountManager.b();
|
||||
PushSubscriber.a.a(b.b(), b.c());
|
||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
||||
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
|
||||
prefs.edit().clear().commit();
|
||||
restartApplication();
|
||||
});
|
||||
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();
|
||||
PushSubscriber.a.a(b.b(), b.c());
|
||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
||||
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
|
||||
prefs.edit().clear().commit();
|
||||
restartApplication();
|
||||
|
||||
});
|
||||
@@ -164,6 +171,8 @@ public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.Mult
|
||||
VKAccount b = VKAccountManager.b();
|
||||
PushSubscriber.a.a(b.b(), b.c());
|
||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
||||
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
|
||||
prefs.edit().clear().commit();
|
||||
restartApplication();
|
||||
});
|
||||
}
|
||||
|
||||
+21
-3
@@ -12,6 +12,8 @@ import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import ru.vtosters.lite.utils.Globals;
|
||||
|
||||
public class MultiAccountManager {
|
||||
|
||||
public static void migrate() {
|
||||
@@ -20,7 +22,15 @@ public class MultiAccountManager {
|
||||
SharedPreferences NewPrefs = getContext().getSharedPreferences("pref_account_manager0", Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor editor = NewPrefs.edit();
|
||||
editor.putString("key_vk_account", OldPrefsValue);
|
||||
editor.apply();
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public static void migrationRestart() {
|
||||
SharedPreferences prefs = getPreferences();
|
||||
if (prefs.getBoolean("multiaccount_restart", true)) {
|
||||
prefs.edit().putBoolean("multiaccount_restart", false).commit();
|
||||
Globals.restartApplication();
|
||||
}
|
||||
}
|
||||
|
||||
public static SharedPreferences getCurrentAccount() {
|
||||
@@ -80,7 +90,15 @@ public class MultiAccountManager {
|
||||
prefs.edit().clear().commit();
|
||||
File file = new File(new File(getContext().getFilesDir().getParent(), "shared_prefs"), "pref_account_manager" + i);
|
||||
if (file.exists()) file.delete();
|
||||
if (account == i && getAccountPrefsCount() > 0)
|
||||
switchAccount(buildList().get(0).index);
|
||||
if (account == i && getAccountPrefsCount() > 0) {
|
||||
List<MultiAccountItem> accounts = buildList();
|
||||
if (accounts.size() > 0)
|
||||
switchAccount(buildList().get(0).index);
|
||||
else {
|
||||
getContext().getSharedPreferences("pref_account_manager", Context.MODE_PRIVATE)
|
||||
.edit().clear().commit();
|
||||
Globals.getPreferences().edit().putBoolean("multiaccount_restart", true).commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
import static ru.vtosters.lite.utils.Globals.*;
|
||||
import static ru.vtosters.lite.utils.Preferences.*;
|
||||
import static ru.vtosters.lite.utils.Globals.getApplicationName;
|
||||
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;
|
||||
|
||||
|
||||
@@ -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.isEmpty;
|
||||
import static ru.vtosters.lite.utils.Preferences.*;
|
||||
import static ru.vtosters.lite.utils.Preferences.isEnableExternalOpening;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
|
||||
@@ -16,10 +16,10 @@ import android.net.NetworkInfo;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.vk.core.util.ToastUtils;
|
||||
import com.vtosters.lite.UserProfile;
|
||||
import com.vtosters.lite.VKActivity;
|
||||
import com.vtosters.lite.api.ExtendedUserProfile;
|
||||
@@ -34,6 +34,13 @@ import java.util.Locale;
|
||||
public class Globals {
|
||||
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
|
||||
public static int getUserId() {
|
||||
return VKAccountManager.b().a();
|
||||
@@ -137,7 +144,7 @@ public class Globals {
|
||||
}
|
||||
|
||||
public static void sendToast(String text) {
|
||||
ToastUtils.a(text);
|
||||
Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
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() {
|
||||
return getContext().getApplicationInfo().loadLabel(getContext().getPackageManager()).toString();
|
||||
}
|
||||
@@ -227,4 +239,13 @@ public class Globals {
|
||||
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
|
||||
return context;
|
||||
}
|
||||
|
||||
public static float[] getCenterScreenCoords() {
|
||||
int width = getResources().getDisplayMetrics().widthPixels;
|
||||
int height = getResources().getDisplayMetrics().heightPixels;
|
||||
|
||||
int centerWidth = width/2;
|
||||
int centerHeight = height/2;
|
||||
return new float[] {centerWidth, centerHeight};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@ import static ru.vtosters.lite.utils.Preferences.postsrecomm;
|
||||
|
||||
import com.vk.apps.AppsFragment;
|
||||
import com.vk.core.preference.Preference;
|
||||
import com.vk.discover.DiscoverFeedFragment;
|
||||
import com.vk.discover.DiscoverFragment;
|
||||
import com.vk.discover.GatewaysFragment;
|
||||
import com.vk.fave.fragments.FaveTabFragment;
|
||||
import com.vk.menu.MenuFragment;
|
||||
import com.vk.music.fragment.MusicFragment;
|
||||
@@ -52,9 +52,7 @@ public class Newsfeed {
|
||||
|
||||
public static boolean isBlockedByFilter(String str) {
|
||||
for (String str2 : mFilters) {
|
||||
if (str.toLowerCase().contains(str2.toLowerCase())) {
|
||||
return true;
|
||||
}
|
||||
if (str.toLowerCase().contains(str2.toLowerCase())) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -119,8 +117,7 @@ public class Newsfeed {
|
||||
if (!Preferences.captions()) {
|
||||
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) {
|
||||
return false;
|
||||
}
|
||||
@@ -174,92 +171,69 @@ public class Newsfeed {
|
||||
}
|
||||
|
||||
public static String getCommentsSort(String def) {
|
||||
String string = getPreferences().getString("commentssort", "");
|
||||
if (string.isEmpty()) {
|
||||
return def;
|
||||
switch (getPreferences().getString("commentssort", "")) {
|
||||
case "new":
|
||||
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) {
|
||||
String string = getPreferences().getString("newsupdate", "");
|
||||
if (string.isEmpty()) {
|
||||
return Preference.b().getLong(refresh_timeout ? "refresh_timeout_top" : "refresh_timeout_recent", 600000L);
|
||||
switch (getPreferences().getString("newsupdate", "")) {
|
||||
case "no_update":
|
||||
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() {
|
||||
String string = getPreferences().getString("start_values", "");
|
||||
if (string.equals("default")) {
|
||||
return getInstance().getSelectedTabs().get(0).fragmentClass;
|
||||
switch (getPreferences().getString("start_values", "")) {
|
||||
case "newsfeed":
|
||||
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() ? DiscoverFragment.class : DiscoverFeedFragment.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,15 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.migrate;
|
||||
import static ru.vtosters.lite.utils.Globals.*;
|
||||
import static ru.vtosters.lite.utils.Newsfeed.*;
|
||||
import static ru.vtosters.lite.utils.Proxy.*;
|
||||
import static ru.vtosters.lite.utils.DeletedMessagesHandler.reloadMessagesList;
|
||||
import static ru.vtosters.lite.utils.Globals.fixGapps;
|
||||
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 static ru.vtosters.lite.utils.Themes.systemThemeChanger;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@@ -19,14 +25,21 @@ import java.util.Locale;
|
||||
public class Preferences {
|
||||
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) {
|
||||
setupFilters();
|
||||
fixGapps();
|
||||
setProxy();
|
||||
migrate();
|
||||
reloadMessagesList();
|
||||
registerActivities(application);
|
||||
LoadLibrary("vkopustest");
|
||||
systemThemeChanger();
|
||||
}
|
||||
|
||||
|
||||
public static boolean BooleanFalse(String key) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
return prefs.getBoolean(key, false);
|
||||
@@ -37,6 +50,14 @@ public class Preferences {
|
||||
return prefs.getBoolean(key, true);
|
||||
}
|
||||
|
||||
public static boolean opusmodule() {
|
||||
return BooleanTrue("opusmodule");
|
||||
}
|
||||
|
||||
public static boolean systemtheme() {
|
||||
return BooleanTrue("systemtheme");
|
||||
}
|
||||
|
||||
public static boolean authorsrecomm() {
|
||||
return BooleanTrue("authorsrecomm");
|
||||
}
|
||||
@@ -302,11 +323,17 @@ public class Preferences {
|
||||
}
|
||||
|
||||
public static String VKVersion() {
|
||||
String string = getPreferences().getString("vkversion", "");
|
||||
if (!string.isEmpty()) {
|
||||
return string;
|
||||
}
|
||||
return "5.29";
|
||||
String string = getPreferences().getString("vkver", "");
|
||||
return !string.isEmpty() ? string : VKVER;
|
||||
}
|
||||
|
||||
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() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
import static java.lang.System.*;
|
||||
import static ru.vtosters.lite.utils.Globals.*;
|
||||
import static ru.vtosters.lite.utils.Preferences.*;
|
||||
|
||||
@@ -81,54 +82,80 @@ public class Proxy {
|
||||
}
|
||||
|
||||
public static void setProxy() {
|
||||
Properties properties = getProperties();
|
||||
switch (getPreferences().getString("proxy", "")) {
|
||||
case "zaborona":
|
||||
Properties properties = System.getProperties();
|
||||
properties.setProperty("socksProxyHost", "socks.zaboronahelp.pp.ua");
|
||||
properties.setProperty("socksProxyPort", "1488");
|
||||
System.clearProperty("https.proxyHost");
|
||||
System.clearProperty("https.proxyPort");
|
||||
System.clearProperty("http.proxyHost");
|
||||
System.clearProperty("http.proxyPort");
|
||||
resetProxySocks();
|
||||
break;
|
||||
case "socks":
|
||||
Properties properties2 = System.getProperties();
|
||||
properties2.setProperty("socksProxyHost", proxyHostSocks());
|
||||
properties2.setProperty("socksProxyPort", proxyPortSocks());
|
||||
System.clearProperty("https.proxyHost");
|
||||
System.clearProperty("https.proxyPort");
|
||||
System.clearProperty("http.proxyHost");
|
||||
System.clearProperty("http.proxyPort");
|
||||
properties.setProperty("socksProxyHost", proxyHostSocks());
|
||||
properties.setProperty("socksProxyPort", proxyPortSocks());
|
||||
resetProxySocks();
|
||||
break;
|
||||
case "http":
|
||||
Properties properties3 = System.getProperties();
|
||||
properties3.setProperty("http.proxyHost", proxyHostHTTP());
|
||||
properties3.setProperty("http.proxyPort", proxyPortHTTP());
|
||||
System.clearProperty("socksProxyHost");
|
||||
System.clearProperty("socksPortHost");
|
||||
System.clearProperty("https.proxyHost");
|
||||
System.clearProperty("https.proxyPort");
|
||||
properties.setProperty("http.proxyHost", proxyHostHTTP());
|
||||
properties.setProperty("http.proxyPort", proxyPortHTTP());
|
||||
properties.setProperty("http.proxyUser", proxyUserHTTP());
|
||||
properties.setProperty("http.proxyPassword", proxyPassHTTP());
|
||||
resetProxyHttp();
|
||||
break;
|
||||
case "https":
|
||||
Properties properties4 = System.getProperties();
|
||||
properties4.setProperty("https.proxyHost", proxyHostHTTPS());
|
||||
properties4.setProperty("https.proxyPort", proxyPortHTTPS());
|
||||
System.clearProperty("socksProxyHost");
|
||||
System.clearProperty("socksPortHost");
|
||||
System.clearProperty("http.proxyHost");
|
||||
System.clearProperty("http.proxyPort");
|
||||
properties.setProperty("https.proxyHost", proxyHostHTTPS());
|
||||
properties.setProperty("https.proxyPort", proxyPortHTTPS());
|
||||
properties.setProperty("https.proxyUser", proxyUserHTTPS());
|
||||
properties.setProperty("https.proxyPassword", proxyPassHTTPS());
|
||||
resetProxyHttps();
|
||||
break;
|
||||
default:
|
||||
System.clearProperty("socksProxyHost");
|
||||
System.clearProperty("socksPortHost");
|
||||
System.clearProperty("https.proxyHost");
|
||||
System.clearProperty("https.proxyPort");
|
||||
System.clearProperty("http.proxyHost");
|
||||
System.clearProperty("http.proxyPort");
|
||||
resetProxy();
|
||||
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() {
|
||||
String string = getPreferences().getString("proxyHostHTTP", "");
|
||||
return string.isEmpty() ? "192.168.0.1" : string;
|
||||
@@ -159,6 +186,26 @@ public class Proxy {
|
||||
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() {
|
||||
return getPreferences().getString("proxy", "").equals("apiproxy");
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
import static ru.vtosters.lite.utils.About.*;
|
||||
import static ru.vtosters.lite.utils.Globals.*;
|
||||
import static ru.vtosters.lite.utils.Preferences.*;
|
||||
import static ru.vtosters.lite.utils.Proxy.*;
|
||||
import static ru.vtosters.lite.utils.About.getBuildNumber;
|
||||
import static ru.vtosters.lite.utils.Globals.getPreferences;
|
||||
import static ru.vtosters.lite.utils.Globals.getUserSecret;
|
||||
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;
|
||||
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
import static ru.vtosters.lite.utils.Globals.*;
|
||||
import static ru.vtosters.lite.utils.Preferences.*;
|
||||
import static ru.vtosters.lite.utils.Globals.getContext;
|
||||
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.systemtheme;
|
||||
import static ru.vtosters.lite.utils.Preferences.vksans;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
@@ -15,6 +21,7 @@ import com.vk.core.d.RecoloredDrawable;
|
||||
import com.vk.core.ui.themes.VKTheme;
|
||||
import com.vk.core.ui.themes.VKThemeHelper;
|
||||
import com.vk.im.ui.themes.ImTheme;
|
||||
import com.vk.im.ui.themes.ImThemeHelper;
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
public class Themes {
|
||||
@@ -51,41 +58,35 @@ public class Themes {
|
||||
}
|
||||
|
||||
public static VKTheme getDarkTheme() {
|
||||
String string = getPreferences().getString("darktheme", "");
|
||||
if (string.isEmpty()) {
|
||||
return VKTheme.DARK;
|
||||
switch (getPreferences().getString("darktheme", "")) {
|
||||
case "amoled":
|
||||
return VKTheme.AMOLED;
|
||||
default:
|
||||
return VKTheme.DARK;
|
||||
}
|
||||
if (string.equals("amoled")) {
|
||||
return VKTheme.AMOLED;
|
||||
}
|
||||
return VKTheme.DARK;
|
||||
}
|
||||
|
||||
public static ImTheme getImDarkTheme() {
|
||||
String string = getPreferences().getString("darktheme", "");
|
||||
if (string.isEmpty()) {
|
||||
return ImTheme.VKAPP_DARK;
|
||||
switch (getPreferences().getString("darktheme", "")) {
|
||||
case "amoled":
|
||||
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() {
|
||||
String string = getPreferences().getString("lighttheme", "");
|
||||
if (string.isEmpty()) {
|
||||
return VKTheme.DEFAULT_LIGHT;
|
||||
switch (getPreferences().getString("lighttheme", "")) {
|
||||
default:
|
||||
return VKTheme.DEFAULT_LIGHT;
|
||||
}
|
||||
return VKTheme.DEFAULT_LIGHT;
|
||||
}
|
||||
|
||||
public static ImTheme getImLightTheme() {
|
||||
String string = getPreferences().getString("lighttheme", "");
|
||||
if (string.isEmpty()) {
|
||||
return ImTheme.VKAPP_LIGHT;
|
||||
switch (getPreferences().getString("lighttheme", "")) {
|
||||
default:
|
||||
return ImTheme.VKAPP_LIGHT;
|
||||
}
|
||||
return ImTheme.VKAPP_LIGHT;
|
||||
}
|
||||
|
||||
public static int getColorFromAttr(int attr) {
|
||||
@@ -97,11 +98,7 @@ public class Themes {
|
||||
}
|
||||
|
||||
public static boolean isAndroidMonet() {
|
||||
if (color_grishka()) {
|
||||
return Build.VERSION.SDK_INT >= 31;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return color_grishka() && Build.VERSION.SDK_INT >= 31;
|
||||
}
|
||||
|
||||
public static boolean isColorRefAccented(int i) {
|
||||
@@ -200,4 +197,26 @@ public class Themes {
|
||||
}
|
||||
return "images";
|
||||
}
|
||||
|
||||
public static void systemThemeChanger() {
|
||||
if (!systemtheme())
|
||||
return;
|
||||
int currentNightMode = getContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||
switch (currentNightMode) {
|
||||
case Configuration.UI_MODE_NIGHT_UNDEFINED:
|
||||
changeTheme(getLightTheme(), getImLightTheme());
|
||||
break;
|
||||
case Configuration.UI_MODE_NIGHT_NO:
|
||||
changeTheme(getLightTheme(), getImLightTheme());
|
||||
break;
|
||||
case Configuration.UI_MODE_NIGHT_YES:
|
||||
changeTheme(getDarkTheme(), getImDarkTheme());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void changeTheme(VKTheme theme, ImTheme imtheme) {
|
||||
VKThemeHelper.b.a(theme);
|
||||
ImThemeHelper.b.a(imtheme);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.2.0-rc01'
|
||||
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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">
|
||||
<item>
|
||||
<selector>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/picker_blue_pressed" />
|
||||
<solid android:color="?accent" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/picker_blue_pressed" />
|
||||
<solid android:color="?accent" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<item android:state_pressed="true">
|
||||
<shape android:shape="rectangle">
|
||||
<corners android:radius="10000.0dip" />
|
||||
<solid android:color="@color/picker_blue_pressed" />
|
||||
<solid android:color="?accent" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
@@ -5,5 +5,5 @@
|
||||
android:topRightRadius="12.0dip"
|
||||
android:bottomLeftRadius="12.0dip"
|
||||
android:bottomRightRadius="12.0dip" />
|
||||
<solid android:color="@color/blue_300" />
|
||||
<solid android:color="?accent" />
|
||||
</shape>
|
||||
@@ -7,7 +7,7 @@
|
||||
<solid android:color="@android:color/transparent" />
|
||||
<stroke
|
||||
android:width="0.5dip"
|
||||
android:color="@color/blue_300" />
|
||||
android:color="?accent" />
|
||||
<padding
|
||||
android:left="0.0dip"
|
||||
android:top="0.0dip"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_enabled="false">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_200_muted" />
|
||||
<solid android:color="?accent" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:state_pressed="true">
|
||||
@@ -12,7 +12,7 @@
|
||||
</item>
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_300" />
|
||||
<solid android:color="?accent" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout android:background="#fffafbfc"
|
||||
<FrameLayout android:background="?tabbar_background"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
<com.vk.im.ui.views.span.SpanPressableTextView
|
||||
android:textSize="14.0sp"
|
||||
android:textColor="#ff71757a"
|
||||
android:textColor="?text_primary"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_gravity="center_vertical"
|
||||
@@ -56,13 +56,13 @@
|
||||
android:layout_height="48.0dip"
|
||||
android:src="@drawable/ic_cancel_24"
|
||||
android:scaleType="centerInside"
|
||||
android:tint="@color/light_gray"
|
||||
android:tint="?text_primary"
|
||||
android:contentDescription="@null" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:textSize="14.0sp"
|
||||
android:textColor="#ff71757a"
|
||||
android:textColor="?text_primary"
|
||||
android:ellipsize="end"
|
||||
android:layout_gravity="start|center"
|
||||
android:id="@id/loading"
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
<TextView
|
||||
android:textSize="14.0sp"
|
||||
android:textColor="#ff71757a"
|
||||
android:textColor="?text_primary"
|
||||
android:ellipsize="end"
|
||||
android:layout_gravity="start|center"
|
||||
android:id="@id/error"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:background="?background_content"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
android:layout_width="16.0dip"
|
||||
android:layout_height="16.0dip"
|
||||
android:src="@drawable/ic_favorite_16"
|
||||
android:tint="@color/blue_200_muted"
|
||||
android:tint="?accent"
|
||||
android:layout_marginEnd="4.0dip"
|
||||
app:layout_constraintBottom_toBottomOf="@id/game_title"
|
||||
app:layout_constraintEnd_toStartOf="@id/game_menu"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:background="?header_alternate_background"
|
||||
android:background="?background_content"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
style="@style/VKAppBar">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.vk.sharing.view.SharingActionsView android:orientation="horizontal"
|
||||
android:id="@id/sharing_actions_container"
|
||||
android:background="@color/pale_grey"
|
||||
android:background="?tabbar_background"
|
||||
android:paddingLeft="4.0dip"
|
||||
android:paddingTop="8.0dip"
|
||||
android:paddingRight="4.0dip"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout android:orientation="horizontal"
|
||||
android:id="@id/picker_attach_gallery_camera_layout"
|
||||
android:background="?tabbar_background"
|
||||
android:background="#ffffffff"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="56.0dip"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<ScrollView
|
||||
android:background="?background_content"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<com.vtosters.lite.ui.ConstrainedLinearLayout
|
||||
android:background="?background_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
@@ -103,11 +105,11 @@
|
||||
|
||||
<TextView
|
||||
android:textSize="16.0sp"
|
||||
android:textColor="#ffffffff"
|
||||
android:textColor="?header_text"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="bottom"
|
||||
android:id="@id/tv_apply_params"
|
||||
android:background="@drawable/picker_btn_blue"
|
||||
android:background="?tabbar_background"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="48.0dip"
|
||||
android:text="@string/discover_search_show_result"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<ScrollView
|
||||
android:background="?background_content"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:fillViewport="true">
|
||||
@@ -15,6 +16,7 @@
|
||||
android:paddingRight="@dimen/standard_list_item_padding"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?background_content"
|
||||
app:max_width="400.0dip">
|
||||
|
||||
<include layout="@layout/discover_search_header" />
|
||||
@@ -147,11 +149,11 @@
|
||||
|
||||
<TextView
|
||||
android:textSize="16.0sp"
|
||||
android:textColor="#ffffffff"
|
||||
android:textColor="?header_text"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="bottom"
|
||||
android:id="@id/tv_apply_params"
|
||||
android:background="@drawable/picker_btn_blue"
|
||||
android:background="?tabbar_background"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="48.0dip"
|
||||
android:text="@string/discover_search_show_result"
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
android:layout_height="24.0dip"
|
||||
android:layout_marginTop="12.0dip"
|
||||
android:src="@drawable/ic_tag_24"
|
||||
android:tint="@color/blue_200_muted"
|
||||
android:tint="?accent"
|
||||
android:layout_marginStart="16.0dip" />
|
||||
|
||||
<com.vk.fave.views.FaveTagViewGroup
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@id/search_voice"
|
||||
android:background="?accent"
|
||||
android:background="?header_background"
|
||||
android:layout_width="48.0dip"
|
||||
android:layout_height="48.0dip"
|
||||
android:src="@drawable/ic_voice_24"
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@id/search_done"
|
||||
android:background="?accent"
|
||||
android:background="?header_background"
|
||||
android:layout_width="48.0dip"
|
||||
android:layout_height="48.0dip"
|
||||
android:src="@drawable/ic_check_24"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout android:background="#fffafbfc"
|
||||
<FrameLayout android:background="?tabbar_background"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
@@ -64,7 +64,7 @@
|
||||
android:layout_marginTop="4.0dip"
|
||||
android:src="@drawable/ic_cancel_24"
|
||||
android:scaleType="centerInside"
|
||||
android:tint="@color/light_gray"
|
||||
android:tint="?text_primary"
|
||||
android:contentDescription="@null" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -445,7 +445,7 @@
|
||||
<item>Украинский</item>
|
||||
</string-array>
|
||||
<string-array name="start">
|
||||
<item>Стандартное</item>
|
||||
<item>По умолчанию</item>
|
||||
<item>Новости</item>
|
||||
<item>Диалоги</item>
|
||||
<item>Меню</item>
|
||||
@@ -500,4 +500,9 @@
|
||||
<item>Не обновлять</item>
|
||||
<item>Обновлять мгновенно</item>
|
||||
</string-array>
|
||||
<string-array name="undel_value">
|
||||
<item>[Удалено]</item>
|
||||
<item>🗑</item>
|
||||
<item>❌</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -1773,7 +1773,7 @@
|
||||
без ограничений"</string>
|
||||
<string name="music_subs_try_free">Попробовать</string>
|
||||
<string name="music_subscription_agreement">Условия использования</string>
|
||||
<string name="music_subscription_exist">У Вас уже оформлена подписка на Музыку</string>
|
||||
<string name="music_subscription_exist">Данный трэк нельзя воспроизвести без настоящей подписки на музыку</string>
|
||||
<string name="music_subscription_label_payment_type">Cпособ оплаты</string>
|
||||
<string name="music_subscription_label_status">Статус подписки</string>
|
||||
<string name="music_subscription_purchase_btn_title">Оформить за %1$s в месяц</string>
|
||||
@@ -4118,7 +4118,7 @@
|
||||
<string name="ctypedisabled">Не установлено</string>
|
||||
<string name="ctypesocks">Socks</string>
|
||||
<string name="dnr">Нечиталка</string>
|
||||
<string name="dns">Отправка статуса просмотра истории</string>
|
||||
<string name="dns">Статус просмотра/прочтения историй</string>
|
||||
<string name="dnw">Неписалка</string>
|
||||
<string name="docknumbers">Счётчики в докбаре</string>
|
||||
<string name="docknumberssum">Отключение не работает в интерфейсе для планшетов</string>
|
||||
@@ -4151,7 +4151,7 @@
|
||||
Показать полностью..."</string>
|
||||
<string name="interfacenewsfeed">Лента</string>
|
||||
<string name="interfacenewsfeedswipe">Боковая камера в новостях</string>
|
||||
<string name="interfacenewsfeedswipesum">Работает только со стандартным дизайном новостей</string>
|
||||
<string name="interfacenewsfeedswipesum">Работает только с классическим дизайном новостей</string>
|
||||
<string name="interfacestartfr">Стандартный стартовый фрагмент</string>
|
||||
<string name="interfacestartfrsum">Выберите стартовый фрагмент</string>
|
||||
<string name="interfacevideo">Видео</string>
|
||||
@@ -4204,7 +4204,7 @@
|
||||
<string name="shitposting">Однотипные новости</string>
|
||||
<string name="shitpostingsummary">Фильтр очистки постов с РФ и действиями связанными на Украине</string>
|
||||
<string name="showstories">Показывать истории</string>
|
||||
<string name="showstoriessum">Показывать истории в верхней части ленты</string>
|
||||
<string name="showstoriessum">Блок истории в верхней части ленты</string>
|
||||
<string name="showvtfire">Показывать специальные верификации</string>
|
||||
<string name="showvtverify">Показывать верификации</string>
|
||||
<string name="sprefsctype">Тип подключения</string>
|
||||
@@ -4242,10 +4242,10 @@
|
||||
<string name="useproxy">Вариант прокси</string>
|
||||
<string name="useproxyinfo">Информация об использовании прокси</string>
|
||||
<string name="useproxysum">Выберите вариант прокси</string>
|
||||
<string name="vkuiinj">Покраска VKUI</string>
|
||||
<string name="vkuiinj">Покраска веб страниц</string>
|
||||
<string name="vtlawayphpsummary">Слежка за пользователем для персонализации рекламы. Также проверка ссылок на блэклист от ВКонтакте и антивирус</string>
|
||||
<string name="vtloffline">Отправка статуса онлайн</string>
|
||||
<string name="vtloffline2">Принудительно отправлять офлайн запросы</string>
|
||||
<string name="vtloffline2">Принудительный офлайн</string>
|
||||
<string name="vtloffline2summary">"Работает только при отключении отправки статуса онлайн
|
||||
Отправляет мгновенно в офлайн после отправки сообщений и прочих методов апи которые отправляют в онлайн
|
||||
|
||||
|
||||
@@ -1638,7 +1638,7 @@
|
||||
без обмежень"</string>
|
||||
<string name="music_subs_try_free">Спробувати</string>
|
||||
<string name="music_subscription_agreement">Умови використання</string>
|
||||
<string name="music_subscription_exist">У Вас уже оформлена підписка на Музику</string>
|
||||
<string name="music_subscription_exist">Данный трэк нельзя воспроизвести без настоящей подписки на музыку</string>
|
||||
<string name="music_subscription_label_payment_type">Спосіб оплати</string>
|
||||
<string name="music_subscription_label_status">Статус підписки</string>
|
||||
<string name="music_subscription_purchase_btn_title">Оформити за %1$s в місяць</string>
|
||||
|
||||
+500
-28
@@ -147,7 +147,7 @@
|
||||
<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">@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_tint">@android:color/system_neutral2_200</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_inactive_text">@color/gray_400</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_search_field_background">@android:color/system_accent1_400</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_title">@color/white</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_tint">@color/gray_500</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_secondary_background">@color/black_blue45_alpha10</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_tertiary_background">@color/clear</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_inactive_text">@color/gray_400</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_search_field_background">@android:color/system_accent1_400</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_button_background">@color/black_blue45_alpha10</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_gift_background">@color/gold_200</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_muted_background">#ffa9b0b8</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_foreground">@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_secondary">@color/steel_gray_200</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_field_background">?background_page</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_inactive_icon">@color/steel_gray_300</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_muted">?text_secondary</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_light">false</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_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_inv">@color/white</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_start">@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_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">@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_disabled">@android:color/system_accent1_400</item>
|
||||
<item name="im_btn_reject_background">@color/black</item>
|
||||
@@ -839,7 +839,7 @@
|
||||
</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_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>
|
||||
<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_separator">#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_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_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">@color/im_old_accent_muted</item>
|
||||
<item name="im_history_incoming_foreground_name">@color/im_old_accent_muted</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">@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_border">#26000000</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_selected">@android:color/system_accent1_300
|
||||
</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_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_name">@color/im_old_accent_muted</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">@color/im_old_accent_muted</item>
|
||||
<item name="im_history_sending_icon">@color/im_old_accent</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">@color/im_old_accent</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">@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_tertiary">@color/im_old_gray_light</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_title">@color/white</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_tint">@android:color/system_neutral2_200</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="tabbar_fix">?tabbar_background</item>
|
||||
</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">?accent</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>
|
||||
|
||||
@@ -696,4 +696,14 @@
|
||||
<item>no_update</item>
|
||||
<item>imd_update</item>
|
||||
</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>
|
||||
|
||||
@@ -4243,7 +4243,7 @@ Warning! It can cause long downloads of user lists if there are a lot of users i
|
||||
<string name="ctypedisabled">Not set</string>
|
||||
<string name="ctypesocks">Socks</string>
|
||||
<string name="dnr">Do not read</string>
|
||||
<string name="dns">Send status of viewing stories</string>
|
||||
<string name="dns">Status of viewing/checking stories</string>
|
||||
<string name="dnw">Do not write</string>
|
||||
<string name="docknumbers">Counters in dockbar</string>
|
||||
<string name="docknumberssum">"Disabling doesn't work in the tablet interface"</string>
|
||||
@@ -4276,7 +4276,7 @@ Registration date:"</string>
|
||||
Expand text..."</string>
|
||||
<string name="interfacenewsfeed">Feed</string>
|
||||
<string name="interfacenewsfeedswipe">Side camera in the news</string>
|
||||
<string name="interfacenewsfeedswipesum">Works only with the default newsfeed design</string>
|
||||
<string name="interfacenewsfeedswipesum">Works only with classic newsfeed design</string>
|
||||
<string name="interfacestartfr">Default start fragment</string>
|
||||
<string name="interfacestartfrsum">Select start fragment</string>
|
||||
<string name="interfacevideo">Video</string>
|
||||
@@ -4329,7 +4329,7 @@ You need to restart the application to apply proxy settings"</string>
|
||||
<string name="shitposting">The same type of news</string>
|
||||
<string name="shitpostingsummary">Filter for cleaning posts with the Russian Federation and actions related in Ukraine</string>
|
||||
<string name="showstories">Show stories</string>
|
||||
<string name="showstoriessum">Show stories at the top of the feed</string>
|
||||
<string name="showstoriessum">The story section at the top of the feed</string>
|
||||
<string name="showvtfire">Show special verifications</string>
|
||||
<string name="showvtverify">Show verifications</string>
|
||||
<string name="sprefsctype">Connection type</string>
|
||||
@@ -4367,10 +4367,10 @@ You need to restart the application to apply proxy settings"</string>
|
||||
<string name="useproxy">Proxy variant</string>
|
||||
<string name="useproxyinfo">Information about using a proxy</string>
|
||||
<string name="useproxysum">Select the proxy variant</string>
|
||||
<string name="vkuiinj">VKUI theming</string>
|
||||
<string name="vkuiinj">Coloring web pages</string>
|
||||
<string name="vtlawayphpsummary">Tracking the user to personalize ads. Also checking links to the blacklist from VKontakte and antivirus</string>
|
||||
<string name="vtloffline">Send online status</string>
|
||||
<string name="vtloffline2">Force offline requests</string>
|
||||
<string name="vtloffline2">Force offline</string>
|
||||
<string name="vtloffline2summary">"Works only when online status sending is disabledsends instantly offline after sending messages and other api methods that are sent online
|
||||
|
||||
May look like a fake leaving the online"</string>
|
||||
|
||||
@@ -8016,7 +8016,7 @@
|
||||
</style>
|
||||
|
||||
<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_peekHeight">auto</item>
|
||||
<item name="behavior_skipCollapsed">false</item>
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:title="@string/dnr">
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="Функция позволяет вам не отправлять статус прочтения вами сообщения собеседника"
|
||||
android:title="Что это за функция?" />
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="Визуально может работать некорректно (сообщение прочиталось локально), но у собеседника она прочитана не будет"
|
||||
android:title="Внимание!" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="read_pm"
|
||||
@@ -16,6 +24,10 @@
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/dnw">
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="Функция позволяет вам не отправлять статус вашего набора/написания сообщения"
|
||||
android:title="Что это за функция?" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="write_pm"
|
||||
@@ -30,6 +42,32 @@
|
||||
android:title="@string/act_bot" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/stories_vtl">
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="Функция позволяет вам не отправлять статус просмотра вами историй"
|
||||
android:title="Что это за функция?" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="dns"
|
||||
android:title="@string/dns" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="Анти-удаление сообщений">
|
||||
<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.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/online_vtl">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
@@ -46,13 +84,6 @@
|
||||
android:title="@string/vtloffline2" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/stories_vtl">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="dns"
|
||||
android:title="@string/dns" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/privacy_vtl">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
@@ -64,5 +95,15 @@
|
||||
android:key="benchmark"
|
||||
android:summary="@string/benchapisummary"
|
||||
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>
|
||||
</PreferenceScreen>
|
||||
@@ -3,18 +3,13 @@
|
||||
android:key="preferences_debug">
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="Данное меню предназначено только для тестирования работоспособности приложения. Если вы являетесь рядовым юзером, то вам не следует ничего не трогать в данных настройках, что бы не было проблем с работой приложения!"
|
||||
android:summary="Данное меню предназначено только для тестирования работоспособности приложения. Если вы являетесь рядовым юзером, то вам не следует ничего не трогать в данных настройках!"
|
||||
android:title="Внимание!" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="devmenu"
|
||||
android:title="Показывать пункт дебага в настройках" />
|
||||
<PreferenceCategory android:title="Experimental">
|
||||
<EditTextPreference
|
||||
android:defaultValue=""
|
||||
android:key="vkversion"
|
||||
android:summary="Требуется перезапуск"
|
||||
android:title="Изменение версии вк" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="usevkui"
|
||||
@@ -33,14 +28,6 @@
|
||||
android:defaultValue="false"
|
||||
android:key="vkme_msg"
|
||||
android:title="VK Me MSG mode" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="color_grishka"
|
||||
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
|
||||
android:defaultValue="false"
|
||||
android:key="libverify"
|
||||
@@ -50,6 +37,10 @@
|
||||
android:defaultValue="false"
|
||||
android:key="msgflat"
|
||||
android:title="@string/vtlmsgflat" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="opusmodule"
|
||||
android:title="Opus Module" />
|
||||
<com.vtosters.lite.ui.SummaryListPreference
|
||||
android:defaultValue="system"
|
||||
android:dialogTitle="Выберите язык приложения"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="__dbg_no_ads"
|
||||
android:summary="Обычные рекламные вставки в ленте между постами"
|
||||
android:title="@string/vtldads" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
@@ -13,10 +14,12 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="__dbg_no_slider_ads"
|
||||
android:summary="Реклама со списком (товаров)"
|
||||
android:title="@string/vtldca" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="adsstories"
|
||||
android:summary="Реклама при перехеходе между историями"
|
||||
android:title="@string/vtldas" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
@@ -55,14 +58,17 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="friendsrecomm"
|
||||
android:summary="Рекомендации возможных друзей"
|
||||
android:title="@string/vtlrecommendfriend" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="authorsrecomm"
|
||||
android:summary="Рекомендации постов популярных авторов контента"
|
||||
android:title="@string/vtlrecommendauthor" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="postsrecomm"
|
||||
android:summary="Рекомендации лайкнутых постов твоих друзей"
|
||||
android:title="@string/vtlrecommendfriendpost" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
@@ -89,6 +95,7 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="feedcache"
|
||||
android:summary="Оставлять список загруженных постов в ленте"
|
||||
android:title="@string/vtlfeedcache" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
@@ -73,6 +73,5 @@
|
||||
android:key="dockcounter"
|
||||
android:summary="@string/docknumberssum"
|
||||
android:title="@string/docknumbers" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
@@ -9,6 +9,7 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="msgtails"
|
||||
android:summary="Может некорректно работать с вложениями"
|
||||
android:title="@string/vtlmsgtails" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
|
||||
@@ -24,6 +24,5 @@
|
||||
android:key="gcmfix"
|
||||
android:summary="Актуально если музыкальный раздел не работает (не отображается музыка или вместо музыки написано Слушайте в официальном приложении ВКонтакте) или же отсутствует компонент GMS"
|
||||
android:title="Исправление музыкального раздела" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
@@ -1,30 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:title="@string/vtsystem">
|
||||
<PreferenceCategory android:title="Исправление работы приложения">
|
||||
<Preference
|
||||
android:key="firebasefix"
|
||||
android:summary="@string/firebasefixsum"
|
||||
android:title="@string/firebasefix" />
|
||||
<Preference
|
||||
android:key="clearcache"
|
||||
android:summary="@string/clearcachesum"
|
||||
android:title="@string/clearcache" />
|
||||
<Preference
|
||||
android:key="tokencopy"
|
||||
android:title="@string/copytokenbtn" />
|
||||
<Preference
|
||||
android:key="stickfix"
|
||||
android:title="Очистить кэш стикеров"
|
||||
android:summary="Исправление загрузки стикеров при их полном отсутствии" />
|
||||
<Preference
|
||||
android:key="deleteprefs"
|
||||
android:summary="Сбрасывает включенные вами функции модификации на значения по умолчанию"
|
||||
android:title="Сбросить настройки" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="color_grishka"
|
||||
android:title="Исправление покрасок для Android 12" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vtsystem">
|
||||
<Preference
|
||||
android:key="clearcache"
|
||||
android:summary="@string/clearcachesum"
|
||||
android:title="@string/clearcache" />
|
||||
<Preference
|
||||
android:key="applicationrestart"
|
||||
android:title="@string/applicationrestart" />
|
||||
<Preference
|
||||
android:key="applicationstop"
|
||||
android:title="@string/killappbtn" />
|
||||
<Preference
|
||||
android:key="tokencopy"
|
||||
android:title="@string/copytokenbtn" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<!-- <PreferenceCategory android:title="Backup system">
|
||||
@@ -60,6 +68,5 @@
|
||||
android:defaultValue="true"
|
||||
android:key="VT_Fire"
|
||||
android:title="@string/showvtfire" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
@@ -38,6 +38,16 @@
|
||||
android:defaultValue=""
|
||||
android:key="proxyPortHTTP"
|
||||
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 />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/proxyhttps">
|
||||
@@ -49,6 +59,16 @@
|
||||
android:defaultValue=""
|
||||
android:key="proxyPortHTTPS"
|
||||
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 />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/proxysocks">
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
android:entryValues="@array/lighttheme"
|
||||
android:key="lighttheme"
|
||||
android:title="Светлая тема приложения" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="systemtheme"
|
||||
android:summary="Применение системной темы при запуске приложения"
|
||||
android:title="Использовать системную тему" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vticon">
|
||||
@@ -33,11 +38,12 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="navbar"
|
||||
android:summary="Если системно имеется"
|
||||
android:title="@string/vtlnavbar" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="VKUI_INJ"
|
||||
android:summary="Покраска страниц как VKID под тему приложения"
|
||||
android:title="@string/vkuiinj" />
|
||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
@@ -261,6 +261,10 @@
|
||||
|
||||
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;
|
||||
|
||||
.line 108
|
||||
|
||||
@@ -36,37 +36,37 @@
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
|
||||
|
||||
# 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;
|
||||
value = {
|
||||
"Ljava/util/List<",
|
||||
@@ -43,7 +43,7 @@
|
||||
.end annotation
|
||||
.end field
|
||||
|
||||
.field private g:Ljava/util/List;
|
||||
.field public g:Ljava/util/List;
|
||||
.annotation system Ldalvik/annotation/Signature;
|
||||
value = {
|
||||
"Ljava/util/List<",
|
||||
@@ -53,11 +53,11 @@
|
||||
.end annotation
|
||||
.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
|
||||
|
||||
@@ -241,6 +241,8 @@
|
||||
.method public c()V
|
||||
.locals 4
|
||||
|
||||
return-void
|
||||
|
||||
.line 73
|
||||
invoke-virtual {p0}, Lcom/vk/n/MasksAnalytics;->b()V
|
||||
|
||||
|
||||
@@ -102,28 +102,28 @@
|
||||
:try_start_0
|
||||
const-class p1, Landroid/support/v4/view/ViewPager;
|
||||
|
||||
const-string p4, "mScroller"
|
||||
const-string p4, "m"
|
||||
|
||||
.line 776
|
||||
invoke-virtual {p1, p4}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
|
||||
|
||||
move-result-object p4
|
||||
|
||||
const-string v0, "m"
|
||||
const-string v0, "scrollerField"
|
||||
|
||||
.line 777
|
||||
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
|
||||
|
||||
const-string v0, "sInterpolator"
|
||||
const-string v0, "f"
|
||||
|
||||
.line 778
|
||||
invoke-virtual {p1, v0}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
|
||||
|
||||
move-result-object p1
|
||||
|
||||
const-string v0, "f"
|
||||
const-string v0, "interpolator"
|
||||
|
||||
.line 779
|
||||
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
|
||||
@@ -268,28 +268,28 @@
|
||||
:try_start_0
|
||||
const-class v0, Landroid/support/v4/view/ViewPager;
|
||||
|
||||
const-string v1, "mScroller"
|
||||
const-string v1, "m"
|
||||
|
||||
.line 111
|
||||
invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const-string v2, "m"
|
||||
const-string v2, "scroller"
|
||||
|
||||
.line 112
|
||||
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
|
||||
|
||||
const-string v2, "sInterpolator"
|
||||
const-string v2, "f"
|
||||
|
||||
.line 113
|
||||
invoke-virtual {v0, v2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
const-string v3, "f"
|
||||
const-string v3, "interpolator"
|
||||
|
||||
.line 114
|
||||
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
|
||||
|
||||
.line 180
|
||||
iget-object v0, p0, Lcom/vk/sharing/view/SharingActionsView$a;->l:Landroid/text/TextPaint;
|
||||
|
||||
const v1, 0x7f0600ab
|
||||
|
||||
invoke-static {p1, v1}, Landroid/support/v4/content/ContextCompat;->c(Landroid/content/Context;I)I
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getHeaderText()I
|
||||
|
||||
move-result v1
|
||||
|
||||
|
||||
@@ -275,6 +275,11 @@
|
||||
|
||||
.line 105
|
||||
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
|
||||
.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
|
||||
.locals 4
|
||||
|
||||
return-void
|
||||
|
||||
.line 912
|
||||
new-instance v0, Lorg/json/JSONObject;
|
||||
|
||||
|
||||
+2
@@ -655,6 +655,8 @@
|
||||
|
||||
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
|
||||
|
||||
:pswitch_data_0
|
||||
|
||||
@@ -768,18 +768,6 @@
|
||||
if-eqz v7, :cond_a
|
||||
|
||||
.line 109
|
||||
invoke-virtual {v7}, Lcom/vk/dto/common/VerifyInfo;->e()Z
|
||||
|
||||
move-result v8
|
||||
|
||||
if-eqz v8, :cond_7
|
||||
|
||||
const v7, 0x7f0808cf
|
||||
|
||||
goto :goto_3
|
||||
|
||||
.line 109
|
||||
:cond_7
|
||||
invoke-virtual {v7}, Lcom/vk/dto/common/VerifyInfo;->d()Z
|
||||
|
||||
move-result v8
|
||||
|
||||
@@ -190,7 +190,9 @@
|
||||
|
||||
const-string v2, "music_build_version"
|
||||
|
||||
const/16 v3, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v3
|
||||
|
||||
.line 809
|
||||
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
|
||||
@@ -376,7 +376,9 @@
|
||||
|
||||
const-string v5, "music_build_version"
|
||||
|
||||
const/16 v6, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v6
|
||||
|
||||
.line 745
|
||||
invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
@@ -1142,7 +1144,9 @@
|
||||
|
||||
const-string v2, "music_build_version"
|
||||
|
||||
const/16 v3, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v3
|
||||
|
||||
.line 579
|
||||
invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
@@ -2499,7 +2503,9 @@
|
||||
|
||||
const-string v0, "music_build_version"
|
||||
|
||||
const/16 v1, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v1
|
||||
|
||||
.line 394
|
||||
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
return-object p1
|
||||
.end method
|
||||
|
||||
.method b()Ljava/util/ArrayList;
|
||||
.method public b()Ljava/util/ArrayList;
|
||||
.locals 12
|
||||
.annotation system Ldalvik/annotation/Signature;
|
||||
value = {
|
||||
@@ -1148,6 +1148,50 @@
|
||||
|
||||
new-instance v5, Lcom/vtosters/lite/fragments/SettingsListFragment$a;
|
||||
|
||||
const v6, 0x7f080340
|
||||
|
||||
const v7, 0x7f040022
|
||||
|
||||
new-instance v8, Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v8, "Скачать последнюю версию"
|
||||
|
||||
new-instance v9, Lcom/vtosters/lite/fragments/VTDownload;
|
||||
|
||||
invoke-direct {v9, p0}, Lcom/vtosters/lite/fragments/VTDownload;-><init>(Lcom/vtosters/lite/fragments/SettingsListFragment$b;)V
|
||||
|
||||
invoke-direct {v5, v6, v7, v8, v9}, Lcom/vtosters/lite/fragments/SettingsListFragment$a;-><init>(IILjava/lang/Object;Ljava/lang/Runnable;)V
|
||||
|
||||
invoke-static {v4, v5}, Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;->a(ILjava/lang/Object;)Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v0, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
|
||||
|
||||
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-static {v3, v2}, Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;->d(ILjava/lang/Object;)Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-virtual {v0, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
|
||||
|
||||
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-static {v3, v2}, Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;->c(ILjava/lang/Object;)Lcom/vtosters/lite/ui/holder/RecyclerSectionAdapter$a;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
invoke-virtual {v0, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
|
||||
|
||||
new-instance v5, Lcom/vtosters/lite/fragments/SettingsListFragment$a;
|
||||
|
||||
const v6, 0x7f08063e
|
||||
|
||||
iget-object v7, p0, Lcom/vtosters/lite/fragments/SettingsListFragment$b;->a:Lcom/vtosters/lite/fragments/SettingsListFragment;
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
.class public Lcom/vtosters/lite/fragments/VTDownload;
|
||||
.super Ljava/lang/Object;
|
||||
.source "VTDownload.java"
|
||||
|
||||
# interfaces
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingMethod;
|
||||
value = Lcom/vtosters/lite/fragments/SettingsListFragment$b;->b()Ljava/util/ArrayList;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x0
|
||||
name = null
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field final synthetic a:Lcom/vtosters/lite/fragments/SettingsListFragment$b;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method constructor <init>(Lcom/vtosters/lite/fragments/SettingsListFragment$b;)V
|
||||
.locals 0
|
||||
|
||||
.line 216
|
||||
iput-object p1, p0, Lcom/vtosters/lite/fragments/VTDownload;->a:Lcom/vtosters/lite/fragments/SettingsListFragment$b;
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public run()V
|
||||
.locals 2
|
||||
|
||||
.line 220
|
||||
iget-object v0, p0, Lcom/vtosters/lite/fragments/VTDownload;->a:Lcom/vtosters/lite/fragments/SettingsListFragment$b;
|
||||
|
||||
iget-object v0, v0, Lcom/vtosters/lite/fragments/SettingsListFragment$b;->a:Lcom/vtosters/lite/fragments/SettingsListFragment;
|
||||
|
||||
invoke-virtual {v0}, Lcom/vtosters/lite/fragments/SettingsListFragment;->n()Landroid/content/Context;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const-string v1, "https://github.com/vtosters/lite/releases/latest/"
|
||||
|
||||
invoke-static {v0, v1}, Lcom/vk/common/links/LinkProcessor;->a(Landroid/content/Context;Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -1404,12 +1404,22 @@
|
||||
|
||||
.line 720
|
||||
iget v6, v5, Landroid/content/pm/PackageInfo;->versionCode:I
|
||||
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v6
|
||||
|
||||
:try_end_0
|
||||
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
|
||||
|
||||
.line 721
|
||||
:try_start_1
|
||||
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
|
||||
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_1 .. :try_end_1} :catch_1
|
||||
|
||||
|
||||
@@ -423,6 +423,11 @@
|
||||
|
||||
.line 213
|
||||
iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I
|
||||
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result p0
|
||||
|
||||
:try_end_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
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
.method public run()V
|
||||
.locals 7
|
||||
|
||||
return-void
|
||||
|
||||
.line 110
|
||||
iget-object v0, p0, Lcom/vk/attachpicker/analytics/EditorAnalytics$1;->a:Lcom/vk/attachpicker/analytics/EditorAnalytics;
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
|
||||
# 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
|
||||
@@ -61,8 +61,17 @@
|
||||
|
||||
# virtual methods
|
||||
.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"
|
||||
|
||||
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
@@ -83,8 +92,19 @@
|
||||
.end method
|
||||
|
||||
.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"
|
||||
|
||||
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
@@ -120,8 +140,19 @@
|
||||
.end method
|
||||
|
||||
.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"
|
||||
|
||||
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
|
||||
+2
@@ -21,6 +21,8 @@
|
||||
.method public constructor <init>(Lcom/vk/im/engine/internal/storage/CacheEnvironment;)V
|
||||
.locals 7
|
||||
|
||||
invoke-static {p1}, Lru/vtosters/lite/utils/DeletedMessagesHandler;->grabVKDatabase(Lcom/vk/im/engine/internal/storage/CacheEnvironment;)V
|
||||
|
||||
const-string v0, "env"
|
||||
|
||||
invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->b(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
|
||||
+12
@@ -168,6 +168,10 @@
|
||||
|
||||
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;
|
||||
|
||||
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
|
||||
|
||||
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;
|
||||
|
||||
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
|
||||
|
||||
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;
|
||||
|
||||
|
||||
@@ -3665,6 +3665,11 @@
|
||||
|
||||
.line 1303
|
||||
iget v1, v1, Landroid/content/pm/PackageInfo;->versionCode:I
|
||||
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v1
|
||||
|
||||
:try_end_0
|
||||
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
|
||||
|
||||
|
||||
@@ -552,7 +552,9 @@
|
||||
.method private final c()V
|
||||
.locals 8
|
||||
|
||||
const/16 v0, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v0
|
||||
|
||||
.line 159
|
||||
invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
|
||||
|
||||
@@ -34,6 +34,11 @@
|
||||
|
||||
.line 23
|
||||
iget v1, v1, Landroid/content/pm/PackageInfo;->versionCode:I
|
||||
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v1
|
||||
|
||||
:try_end_0
|
||||
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
|
||||
|
||||
|
||||
@@ -96,6 +96,11 @@
|
||||
move-result-object p0
|
||||
|
||||
iget p0, p0, Landroid/content/pm/PackageInfo;->versionCode:I
|
||||
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result p0
|
||||
|
||||
:try_end_0
|
||||
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
|
||||
|
||||
|
||||
@@ -272,6 +272,10 @@
|
||||
.line 66
|
||||
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;
|
||||
|
||||
move-result-object v1
|
||||
@@ -281,6 +285,10 @@
|
||||
.line 67
|
||||
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;
|
||||
:try_end_0
|
||||
.catchall {:try_start_0 .. :try_end_0} :catchall_0
|
||||
|
||||
@@ -47,7 +47,9 @@
|
||||
|
||||
aput-object v2, v1, v3
|
||||
|
||||
const/16 v2, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v2
|
||||
|
||||
.line 39
|
||||
invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
const/16 v2, 0xd6f
|
||||
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->VKVersionBuild()I
|
||||
|
||||
move-result v2
|
||||
|
||||
.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
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
|
||||
const/16 v6, 0xd6f
|
||||
|
||||
.line 26
|
||||
invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
@@ -569,7 +569,9 @@
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -126,7 +126,9 @@
|
||||
|
||||
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
|
||||
|
||||
@@ -161,7 +163,9 @@
|
||||
|
||||
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
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user