Compare commits

...
Author SHA1 Message Date
gdlbo dfa7ba031e shakal mode 2022-06-17 19:49:41 +03:00
gdlbo 6ddea672ad fixed multi account 2022-06-17 19:27:35 +03:00
gdlbo 047378a11d updated gh actions script 2022-06-17 19:13:27 +03:00
gdlbo 3420c4abb0 added compress disabler 2022-06-17 19:10:57 +03:00
gdlbo 15a8d70f5f added compress disabler 2022-06-17 19:08:37 +03:00
gdlbo 91f90a6609 Merge remote-tracking branch 'origin/master' 2022-06-17 18:35:06 +03:00
gdlbo e170b70999 added auto cleaning cache 2022-06-17 18:35:01 +03:00
gdlbo b489011d24 Merge pull request #342 from k1zn/master
Fix avatar position on tablet
2022-06-17 18:27:20 +03:00
gdlbo 58adfbd261 added auto cleaning cache 2022-06-17 18:21:10 +03:00
Erik Kiznov 3bb18b6daf Fix README.md 2022-06-17 20:09:03 +05:00
Erik Kiznov 120bf18416 Fix avatar position on tablet 2022-06-17 19:36:42 +05:00
Vologhat 428c4ef7d6 changed buttons style 2022-06-17 17:12:26 +03:00
gdlbo 40fc05fc15 fix foxbin.f0x1d.com/enotik 2022-06-17 15:12:59 +03:00
gdlbo 2e913223a2 fix 2022-06-17 14:54:47 +03:00
gdlbo 48f12a912c fix 99% problems on android 11 and lower 2022-06-17 14:19:27 +03:00
gdlbo 0228c0b8a1 fixed colors 2022-06-17 13:58:41 +03:00
gdlbo ba07aeb4d7 fix vk icon in menu 2022-06-17 13:53:17 +03:00
gdlbo 529b13f18b fixed crash android 5.1 2022-06-17 13:34:40 +03:00
gdlbo 5720fddb59 fix crash MusicFragment 2022-06-16 23:30:08 +03:00
gdlbo f5c80b230a gcmfix v2 is here 2022-06-16 22:46:07 +03:00
gdlbo 87ee01bac9 gcmfix v2 is here 2022-06-16 22:32:00 +03:00
gdlbo 126ad044f2 gcmfix v2 is here 2022-06-16 22:30:00 +03:00
gdlbo b636648457 counters is back 2022-06-16 21:58:13 +03:00
gdlbo bf3672a8c4 fix rounded msg + improved vkme msg mode 2022-06-16 21:25:41 +03:00
gdlbo e6478d5161 fixed bg stickers issue 2022-06-16 21:14:13 +03:00
gdlbo ddea78aa4b VKID Protection alert in music settings 2022-06-16 20:25:02 +03:00
gdlbo b872fb17b8 VKID Protection alert 2022-06-16 19:38:18 +03:00
gdlbo 4ec2c17df1 VKID Protection alert 2022-06-16 19:35:45 +03:00
gdlbo 38a51f48d0 fix sharing action buttons 2022-06-16 17:05:42 +03:00
gdlbo 838897611c small fixes 2022-06-16 16:51:27 +03:00
gdlbo f42150063c small fixes 2022-06-16 16:37:35 +03:00
gdlbo d164d1219d verif icon coloring in dialogs 2022-06-16 16:24:23 +03:00
gdlbo fb71b4d781 toolbar fixes 2022-06-16 16:02:19 +03:00
gdlbo f338738c1e writebar fix 2022-06-16 14:16:46 +03:00
gdlbo fb704c7388 fix msg loading 2022-06-16 14:03:39 +03:00
gdlbo c99bca4200 online fixes 2022-06-16 13:18:09 +03:00
gdlbo 92f43acb80 fix 2022-06-16 09:12:39 +03:00
gdlbo a7c85a24f2 added signature check to detect github actions builds and etc 2022-06-16 01:26:07 +03:00
gdlbo fe5616b3f7 fixes 2022-06-16 01:06:11 +03:00
gdlbo 5c882c5ce2 fixes 2022-06-16 00:33:40 +03:00
gdlbo 61a4ed43b9 fixed toast 2022-06-16 00:15:31 +03:00
Vologhat b242ad7ae4 Merge branch 'ota' 2022-06-16 00:09:40 +03:00
Vologhat 1b02e806f8 Final fixes 2022-06-16 00:04:34 +03:00
gdlbo eaf23a24ba impossible color fix 2022-06-15 23:08:58 +03:00
gdlbo ce64296c01 kill androidx 2022-06-15 21:47:21 +03:00
Vologhat 6e3716fe01 final changes
added apk downloading and installing features, bottomshit wrapper with mirroring
2022-06-15 21:29:09 +03:00
gdlbo 986ec2987c wtf debuggable must be false 2022-06-15 17:20:01 +03:00
gdlbo c98609db5d fixes 2022-06-15 17:13:18 +03:00
Vologhat 0b4e3c6303 added ota 2022-06-15 16:41:21 +03:00
91 changed files with 1166 additions and 176 deletions
-1
View File
@@ -34,7 +34,6 @@ jobs:
- name: Build VTLite
run: |
git checkout master
bash scripts/buildworkflow.sh
- name: Sign and verify the apk
+4 -4
View File
@@ -21,13 +21,13 @@ android:debuggable="false" -> android:debuggable="true"
Для дополнительной отладки ответов, доп логов и подмены данных для дебаг приложения необходимо включить **Режим разработчика**
```
Настройки -> Для разработчиков -> Режим разработчика
Настройки -> О приложении -> Для разработчиков -> Режим разработчика
```
Для просмотра трафика необходимо отключить функцию **SSL Pinning**
```
Настройки -> Для разработчиков -> SSL Pinning
Настройки -> О приложении -> Для разработчиков -> SSL Pinning
```
Для логгирования внутренних запросов к API необходимо включить функции **Логгирование API**
@@ -35,12 +35,12 @@ android:debuggable="false" -> android:debuggable="true"
(Работает только при использовании внутреннего логгера!)
```
Настройки -> Для разработчиков -> Логгирование API
Настройки -> О приложении -> Для разработчиков -> Логгирование API
```
Для использования внутреннего логгера необходимо включить функции **Запись логов в файл**
```
Настройки -> Для разработчиков -> Запись логов в файл
Настройки -> О приложении -> Для разработчиков -> Запись логов в файл
```
Сразу после нажатия на запись аппа начнет записывать **все действия** в файлы по пути
```
@@ -1,6 +1,7 @@
package com.vk.core.ui.themes;
import com.vk.s.R;
import ru.vtosters.lite.utils.Themes;
public enum VKTheme {
+1 -1
View File
@@ -15007,7 +15007,7 @@ public final class R {
public static final int dockbar_save = 0x7f11123b;
public static final int dockbar_selected_items = 0x7f11123c;
public static final int dockbar_unselected_items = 0x7f11123d;
public static final int download_latest_vtl = 0x7f11123e;
public static final int checkforupdates = 0x7f11123e;
public static final int other_fix_dynamic_colors = 0x7f11123f;
public static final int other_reset_settings = 0x7f111240;
public static final int other_reset_settings_summary = 0x7f111241;
@@ -1,7 +1,10 @@
package ru.vtosters.lite.audio.gcm;
import static ru.vtosters.lite.audio.gcm.NewGcmFix.FixToken;
import static ru.vtosters.lite.audio.gcm.NewGcmFix.FixToken2;
import static ru.vtosters.lite.utils.Preferences.VKVersion;
import static ru.vtosters.lite.utils.Preferences.VKVersionBuild;
import static ru.vtosters.lite.utils.Preferences.musicFixNew;
import android.os.Build;
import android.util.Base64;
@@ -38,7 +41,14 @@ public class GCMFix {
genNewKey();
}
public static String requestTokenV2(){
return FixToken2();
}
public static String requestToken() {
if(musicFixNew()){
return FixToken();
}
String xappide;
try {
String[] aidarr = {"3974055026275073921", "4418584909973341826", "4585634953328772978"};
@@ -71,7 +81,7 @@ public class GCMFix {
Thread.sleep(100);
}
String token = sb.toString();
if (token.equals("EGISTRATION_ERROR")) {
if (token.equals("REGISTRATION_ERROR")) {
return requestToken();
}
rid = 0;
@@ -79,12 +89,7 @@ public class GCMFix {
String sig2 = getSig(pub22);
params.clear();
fillParams(params, sig2, pub22, xappide, Long.parseLong(aid.split(" ")[1].split(":")[0]), true);
doRequest("https://android.clients.google.com/c2dm/register3", "POST", params, aid, new Callback() {
@Override
public void doCallback(String str) {
GCMFix.lambda$requestToken$1(str);
}
});
doRequest("https://android.clients.google.com/c2dm/register3", "POST", params, aid, GCMFix::lambda$requestToken$1);
return token;
} catch (FileNotFoundException e2) {
return requestToken();
@@ -0,0 +1,30 @@
package ru.vtosters.lite.audio.gcm;
public class NewGcmFix { // @Leyzymoy is not gay, thank you my friend, sir...
private static final short[] DATA = {835, 841, 841, 842, 771, 853, 771, 842, 771, 842, 859, 855, 832, 783, 846, 791, 852, 844, 855, 843, 770, 841, 842, 861, 845, 846, 851, 852, 777, 863, 778, 775, 775, 939, 951, 900, 934, 940, 905, 941, 935, 897, 935, 911, 935, 940, 931, 1015, 955, 916, 925, 900, 1015, 992, 939, 951, 900, 955, 940, 1020, 1019, 932, 916, 925, 903, 1016, 903, 909, 900, 1022, 916, 918, 896, 1022, 926, 922, 1022, 935, 936, 927, 992};
public static String FixToken() {
short[] sArr = DATA;
int hashCode = "۠ۡۦ".hashCode();
int hashCode2 = "ۤۢۨ".hashCode();
int hashCode3 = "ۦ۠ۤ".hashCode();
return convert(sArr, ((hashCode2 ^ (-1)) & 1751594) | ((-1751595) & hashCode2), ((hashCode3 ^ (-1)) & 1753419) | ((-1753420) & hashCode3), ((hashCode ^ (-1)) & 1747007) | ((-1747008) & hashCode));
}
public static String FixToken2() {
short[] sArr = DATA;
int hashCode = "ۦۧۢ".hashCode();
int hashCode2 = "ۥ۟ۡ".hashCode();
int hashCode3 = "ۣۤ۟".hashCode();
return convert(sArr, ((hashCode2 ^ (-1)) & 1752486) | ((-1752487) & hashCode2), ((hashCode3 ^ (-1)) & 1751664) | ((-1751665) & hashCode3), ((hashCode ^ (-1)) & 1753487) | ((-1753488) & hashCode));
}
private static String convert(short[] sArr, int i, int i2, int i3) {
char[] cArr = new char[i2];
for (int i4 = 0; i4 < i2; i4 = 1 - (0 - i4)) {
short s = sArr[0 - ((0 - i) - i4)];
cArr[i4] = (char) (((s ^ (-1)) & i3) | ((i3 ^ (-1)) & s));
}
return new String(cArr);
}
}
@@ -0,0 +1,71 @@
package ru.vtosters.lite.downloaders;
import static ru.vtosters.lite.utils.Globals.getString;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Environment;
import com.vk.core.f.FileUtils;
import java.io.File;
import ru.vtosters.lite.ui.activities.APKInstallActivity;
import ru.vtosters.lite.utils.Globals;
public class OTADownloader {
private static final BroadcastReceiver callback = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
var extras = intent.getExtras();
if (extras == null
|| !intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) return;
var query = new DownloadManager.Query();
var id = extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID);
query.setFilterById(id);
var manager = (DownloadManager) Globals.getContext().getSystemService(Context.DOWNLOAD_SERVICE);
var cursor = manager.query(query);
if (cursor.moveToFirst()) {
var status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_SUCCESSFUL) {
var downloadDir = new File(Environment.getExternalStorageDirectory(), "Download");
if (!downloadDir.exists()) return;
var list = downloadDir.listFiles();
if (list == null || list.length == 0) return;
var maxIndex = -1;
for (File file : list) {
var name = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("/") + 1);
if (file.isFile()
&& name.matches("VTLite-\\d+\\.apk"))
maxIndex = Math.max(maxIndex, Integer.parseInt(name.replaceFirst(".+-(\\d+).+", "$1")));
}
File apk = maxIndex == -1 ? new File(downloadDir, "VTLite.apk") : new File(downloadDir, "VTLite-" + maxIndex + ".apk");
APKInstallActivity.installOta(context, FileUtils.h(apk));
} else if (status == DownloadManager.STATUS_FAILED) {
Globals.sendToast(getString("downloaderr"));
}
}
}
};
public static void downloadBuild(String url) {
var context = Globals.getContext();
var uri = Uri.parse(url);
context.registerReceiver(callback, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
var request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setTitle("VTLite.apk");
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "VTLite.apk");
var manager = (DownloadManager) Globals.getContext().getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
}
@@ -14,7 +14,6 @@ import android.support.v7.app.AlertDialog;
import androidx.exifinterface.media.ExifInterface;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vtosters.lite.R;
import java.io.IOException;
import java.text.ParseException;
@@ -45,6 +45,20 @@ public class PreferencesUtil {
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
}
public static void addListPreferenceIcon(MaterialPreferenceToolbarFragment fragment, String key, String def, CharSequence title, String icon, CharSequence summary, CharSequence[] entries, CharSequence[] entriesValue) {
ListPreference preference = new ListPreference(getContext());
preference.a(entries);
preference.b(entriesValue);
preference.b(summary); // setSummary
preference.c(title); // setTitle
preference.a(title); // setDialogTitle
preference.d(key); // setKey
preference.b(def); // setDefaultValue
if (icon != null)
preference.a(setTint(getContext(), getDrawable(getContext(), icon))); // preference.setIcon
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
}
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment materialPreferenceToolbarFragment, String key, CharSequence title, CharSequence summary, boolean defValue) {
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(getContext());
materialSwitchPreference.c(title); // setTitle
@@ -0,0 +1,80 @@
package ru.vtosters.lite.ui.activities;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class APKInstallActivity extends AppCompatActivity {
public static final int REQUEST_INSTALL_PERMISSION = 1;
public static final String EXTRA_APK_URI = "apk_uri";
private Uri mApkUri;
public static void installOta(Context context, Uri apkUri) {
Intent intent = new Intent(context, APKInstallActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(EXTRA_APK_URI, apkUri);
context.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent == null) {
Toast.makeText(this, "No intent", Toast.LENGTH_SHORT).show();
finish();
return;
}
mApkUri = intent.getParcelableExtra(EXTRA_APK_URI);
if (mApkUri == null) {
Toast.makeText(this, "No apk uri", Toast.LENGTH_SHORT).show();
finish();
return;
}
installApk();
}
private void installApk() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (!getPackageManager().canRequestPackageInstalls()) {
Intent permIntent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getPackageName()));
startActivityForResult(permIntent, REQUEST_INSTALL_PERMISSION);
return;
}
}
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(mApkUri, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (Exception e) {
Toast.makeText(this, "Ошибка установки обновления " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
finish();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_INSTALL_PERMISSION)
installApk();
}
}
@@ -0,0 +1,47 @@
package ru.vtosters.lite.ui.dialogs;
import static ru.vtosters.lite.utils.Globals.getString;
import android.app.Activity;
import ru.vtosters.lite.downloaders.OTADownloader;
import ru.vtosters.lite.ui.vkui.ModalBottomSheetWrapper;
import ru.vtosters.lite.utils.OTAHelper;
public class OTADialog implements OTAHelper.OTAListener {
private Activity mActivity;
private OTAHelper mHelper;
public static OTADialog checkUpdates(Activity activity) {
return new OTADialog(activity);
}
public OTADialog(Activity activity) {
mActivity = activity;
mHelper = new OTAHelper(this);
mHelper.loadData();
}
@Override
public void onUpdateApplied() {
mActivity.runOnUiThread(() -> {
// Toast.makeText(mActivity, "Обновления найдены", Toast.LENGTH_SHORT).show();
new ModalBottomSheetWrapper(mActivity)
.setUpdateInfoView(mHelper.getNewVersionName(), mHelper.getUpdateDescription())
.setPositiveButton(getString("updateanddownload"), () -> {
OTADownloader.downloadBuild(mHelper.getDownloadUrl());
})
.show();
});
}
@Override
public void onUpdateCanceled() {
mActivity.runOnUiThread(() -> {
// Toast.makeText(mActivity, "Обновлений не найдено", Toast.LENGTH_SHORT).show();
});
}
}
@@ -0,0 +1,32 @@
package ru.vtosters.lite.ui.dialogs;
import static ru.vtosters.lite.utils.Globals.edit;
import static ru.vtosters.lite.utils.Globals.getString;
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import com.vk.navigation.Navigator;
import com.vk.webapp.VKConnect;
public class VKIDProtection {
public static void alert(final Activity activity) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(getString("debug_warning"));
builder.setMessage(getString("vkidsumm"));
builder.setCancelable(false);
// android.content.DialogInterface.OnClickListener
builder.setPositiveButton(getString("startbtn2"), (dialogInterface, i) -> edit().putBoolean("showAlertVkId", false).apply());
// android.content.DialogInterface.OnClickListener
builder.setNeutralButton(getString("vkiddisable"), (dialogInterface, i) -> {
edit().putBoolean("showAlertVkId", false).apply();
Intent a2 = new Navigator(VKConnect.class).a(activity);
activity.startActivity(a2);
});
if (getBoolValue("showAlertVkId", true)) {
builder.show();
}
}
}
@@ -21,10 +21,10 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
}
private void prefs() {
a("officialnewssett").a(new FeedFragment.openofficialsett());
a("officialnewssett").a(new openofficialsett());
}
public class openofficialsett implements Preference.c {
public static class openofficialsett implements Preference.c {
openofficialsett() {
}
@@ -1,7 +1,11 @@
package ru.vtosters.lite.ui.fragments;
import static ru.vtosters.lite.utils.CacheUtils.deleteCache;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.restartApplicationWithTimer;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.preference.Preference;
@@ -18,6 +22,10 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment {
private void prefs() {
a("vkme").a(new MessagesFragment.restart());
a("vkme_notifs").a(new MessagesFragment.restart());
a("isBGStickersEnabled").a(new MessagesFragment.clearCache());
a("roundedmsgs").a(new MessagesFragment.restart());
a("systememoji").a(new MessagesFragment.restart());
}
public boolean restart(Preference preference, Object obj) {
@@ -34,4 +42,24 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment {
return MessagesFragment.this.restart(preference, obj);
}
}
public boolean clearCache(Preference preference, Object obj) {
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
prefs2.edit().clear().commit();
deleteCache();
restartApplicationWithTimer();
return true;
}
public class clearCache implements Preference.b {
clearCache() {
}
@Override // android.support.v7.preference.Preference.b
public boolean a(Preference preference, Object obj) {
return MessagesFragment.this.restart(preference, obj);
}
}
}
@@ -2,6 +2,7 @@ package ru.vtosters.lite.ui.fragments;
import static android.widget.Toast.LENGTH_SHORT;
import static android.widget.Toast.makeText;
import static ru.vtosters.lite.utils.CacheUtils.deleteCache;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getString;
import static ru.vtosters.lite.utils.Globals.getUserToken;
@@ -68,24 +69,27 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
}
}
public class e implements Preference.c {
public static class e implements Preference.c {
e() {
}
@Override // android.support.v7.preference.Preference.c
public boolean a(Preference preference) {
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
prefs2.edit().clear().commit();
VKImageLoader.b();
ImEngineProvider.a().h();
AudioMessageUtils.j();
FileUtils.l();
deleteCache();
ToastUtils.a(getString("cachecleaned"));
return true;
}
}
public class b implements Preference.c {
public static class b implements Preference.c {
b() {
}
@@ -96,7 +100,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
}
}
public class d implements Preference.c {
public static class d implements Preference.c {
d() {
}
@@ -126,20 +130,23 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
}
}
public class f implements Preference.c {
public static class f implements Preference.c {
f() {
}
@Override // android.support.v7.preference.Preference.c
public boolean a(Preference preference) {
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication();
prefs2.edit().clear().commit();
deleteCache();
ToastUtils.a(getString("cachecleaned"));
return true;
}
}
public class deleteprefs implements Preference.c {
public static class deleteprefs implements Preference.c {
deleteprefs() {
}
@@ -151,7 +158,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
}
}
public class saveprefs implements Preference.c {
public static class saveprefs implements Preference.c {
saveprefs() {
}
@@ -162,7 +169,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
}
}
public class restoreprefs implements Preference.c {
public static class restoreprefs implements Preference.c {
restoreprefs() {
}
@@ -2,12 +2,12 @@ package ru.vtosters.lite.ui.fragments;
import static bruhcollective.itaysonlab.libvkx.client.LibVKXClient.isIntegrationEnabled;
import static ru.vtosters.lite.f0x1d.VTVerifications.vtverif;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.getAccountPrefsCount;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.getCurrentAccount;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.withRegex;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.workingAccounts;
import static ru.vtosters.lite.utils.About.getBuildNumber;
import static ru.vtosters.lite.utils.About.getCommitLink;
import static ru.vtosters.lite.utils.CacheUtils.humanReadableByteCountBin;
import static ru.vtosters.lite.utils.Globals.drawableFromUrl;
import static ru.vtosters.lite.utils.Globals.edit;
import static ru.vtosters.lite.utils.Globals.getContext;
@@ -21,6 +21,7 @@ import static ru.vtosters.lite.utils.Preferences.ads;
import static ru.vtosters.lite.utils.Preferences.devmenu;
import static ru.vtosters.lite.utils.Preferences.disableSettingsSumms;
import static ru.vtosters.lite.utils.Preferences.hasSpecialVerif;
import static ru.vtosters.lite.utils.Preferences.isValidSignature;
import static ru.vtosters.lite.utils.Preferences.navbar;
import static ru.vtosters.lite.utils.Preferences.offline;
import static ru.vtosters.lite.utils.Preferences.shortinfo;
@@ -56,10 +57,12 @@ import com.vtosters.lite.fragments.k.BlacklistFragment;
import com.vtosters.lite.fragments.money.music.control.subscription.MusicSubscriptionControlFragment;
import ru.vtosters.lite.ui.PreferencesUtil;
import ru.vtosters.lite.ui.dialogs.OTADialog;
import ru.vtosters.lite.ui.fragments.dockbar.DockBarFragment;
import ru.vtosters.lite.ui.fragments.dockbar.DockBarManager;
import ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountFragment;
import ru.vtosters.lite.ui.fragments.tgstickers.StickersFragment;
import ru.vtosters.lite.utils.CacheUtils;
public class VTSettings extends MaterialPreferenceToolbarFragment {
@@ -255,12 +258,13 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
PreferencesUtil.addPreference(this, "", getString("vtlmusic"), musicsumm, "ic_music_24", preference -> {
Context context = getContext();
Intent a2 = new Navigator(MusicFragment.class).a(context);
context.startActivity(a2);
return false;
});
if (isValidSignature())
PreferencesUtil.addPreference(this, "", getString("vtlmusic"), musicsumm, "ic_music_24", preference -> {
Context context = getContext();
Intent a2 = new Navigator(MusicFragment.class).a(context);
context.startActivity(a2);
return false;
});
}
PreferencesUtil.addPreference(this, "", getString("vtlmessages"), msgsumm, "ic_message_24", preference -> {
@@ -305,6 +309,13 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
PreferencesUtil.addListPreferenceIcon(this, "clearcache", "Default", getString("autoclearcache"), "ic_delete_24", getString("autoclearcachesumm") + " " + humanReadableByteCountBin(CacheUtils.getInstance().size), new CharSequence[]{
getString("autoclearcachedisabled"), "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"
}, new String[]{
"Default", "100mb", "500mb", "1gb", "2gb", "5gb"
});
PreferencesUtil.addPreference(this, "", getString("vtlother"), othersumm, "ic_more_24", preference -> {
Context context = getContext();
Intent a2 = new Navigator(OtherFragment.class).a(context);
@@ -326,20 +337,32 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return false;
});
PreferencesUtil.addPreference(this, "", getString("vtfaq"), "", "ic_help_24", preference -> {
PreferencesUtil.addPreference(this, "", getString("vtfaq"), getString("vtfaqsumm"), "ic_help_24", preference -> {
getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://t.me/s/vtosters_faq")));
return false;
});
PreferencesUtil.addPreference(this, "", getString("reportbug"), "", "ic_bug_24", preference -> {
PreferencesUtil.addPreference(this, "", getString("reportbug"), getString("reportbugsumm"), "ic_bug_24", preference -> {
getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://github.com/vtosters/lite/issues")));
return false;
});
PreferencesUtil.addPreference(this, "", getString("download_latest_vtl"), "", "ic_download_24", preference -> {
getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://github.com/vtosters/lite/releases/latest")));
return false;
});
if (isValidSignature()) {
PreferencesUtil.addPreferenceCategory(this, getString("updates"));
PreferencesUtil.addPreference(this, "", getString("checkforupdates"), "", "ic_download_24", preference -> {
OTADialog.checkUpdates(p());
return false;
});
PreferencesUtil.addMaterialSwitchPreference(this, "checkupdates", getString("checkupdates"), "", "ic_recent_24", true, (preference, o) -> {
boolean value = (boolean) o;
edit().putBoolean("checkupdates", value).commit();
return true;
});
}
}
public static String getValAsString(String stringid, Boolean value) {
@@ -373,7 +396,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
}
public static String getMultiAccsumm() {
if(disableSettingsSumms() || getAccountPrefsCount() <= 1) return "";
if(disableSettingsSumms() || workingAccounts() <= 1) return "";
return getString("vtlmultiaccsumm") + ": " + workingAccounts();
}
@@ -8,12 +8,13 @@ import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.a.ItemTouchHelper;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import me.grishka.appkit.fragments.ToolbarFragment;
@@ -40,7 +41,7 @@ public class DockBarFragment extends ToolbarFragment {
);
container.addView(buttonsContainer, new LinearLayout.LayoutParams(-1, -2));
Button save = new Button(n());
TextView save = new TextView(new ContextThemeWrapper(n(), com.vtosters.lite.R.style.VKUIButton_Primary));
save.setText(getString("dockbar_save"));
save.setOnClickListener(v -> {
DockBarManager.getInstance().save();
@@ -54,7 +55,7 @@ public class DockBarFragment extends ToolbarFragment {
View divider = new View(n());
buttonsContainer.addView(divider, new LinearLayout.LayoutParams(convertDpToPixel(10), 0));
Button reset = new Button(n());
TextView reset = new TextView(new ContextThemeWrapper(n(), com.vtosters.lite.R.style.VKUIButton_Primary));
reset.setText(getString("dockbar_reset"));
reset.setOnClickListener(v -> {
DockBarManager.getInstance().delete();
@@ -93,7 +93,7 @@ public class MultiAccountManager {
}
public static void addAccount() {
getPreferences().edit().putInt("account", workingAccounts()).commit();
getPreferences().edit().putInt("account", workingAccounts() + 1).commit();
}
public static void deleteAccount(int i) {
@@ -1,50 +0,0 @@
package ru.vtosters.lite.ui.vkui;
import android.app.Activity;
import android.view.View;
import com.vk.core.dialogs.bottomsheet.ModalBottomSheet;
public class ModalBottomSheetProxy {
public final ModalBottomSheet.a builder;
public ModalBottomSheetProxy(Activity activity) {
builder = new ModalBottomSheet.a(activity);
}
public void setTitle(String title) {
builder.b(title);
}
public void setClickableMessage(String text) {
builder.a(text, kostil -> {
});
}
public void setClickableMessage(String text, Runnable runnable) {
builder.a(text, listener -> runnable.run());
}
public void setPositiveButton(String text, Runnable runnable) {
builder.b(text, kostil -> runnable.run());
}
public void setSubtitle(String text) {
builder.b((CharSequence) text);
}
public void setView(View view) {
builder.a(view);
}
public ModalBottomSheet show() {
return builder.c(null);
}
public ModalBottomSheet show(boolean isCancellable) {
var sheet = builder.c(null);
sheet.b(isCancellable);
return sheet;
}
}
@@ -0,0 +1,97 @@
package ru.vtosters.lite.ui.vkui;
import static ru.vtosters.lite.utils.Globals.getString;
import android.app.Activity;
import android.graphics.Typeface;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.vk.core.dialogs.bottomsheet.ModalBottomSheet;
import ru.vtosters.lite.utils.Globals;
import ru.vtosters.lite.utils.Themes;
public class ModalBottomSheetWrapper {
public final ModalBottomSheet.a builder;
public ModalBottomSheetWrapper(Activity activity) {
builder = new ModalBottomSheet.a(activity);
}
public ModalBottomSheetWrapper setTitle(String title) {
builder.b(title);
return this;
}
public ModalBottomSheetWrapper setUpdateInfoView(String version, String changelog) {
var context = Globals.getContext();
var container = new LinearLayout(context);
var title = new TextView(context);
var changelogView = new TextView(context);
container.setOrientation(LinearLayout.VERTICAL);
title.setText(getString("newversion") + " " + version);
title.setTypeface(title.getTypeface(), Typeface.BOLD);
title.setSingleLine(true);
title.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
title.setTextColor(Themes.getTextAttr());
title.setTextSize(24.0f);
container.addView(title, new LinearLayout.LayoutParams(-1, -2));
changelogView.setPadding(0, Globals.convertDpToPixel(8), 0, 0);
changelogView.setText(getString("changelog") + ": \n" + changelog);
changelogView.setTextColor(Themes.getTextAttr());
container.addView(changelogView, new LinearLayout.LayoutParams(-1, -2));
builder.a(container);
return this;
}
// try to call a true function and you will understand my pain
public ModalBottomSheetWrapper setMessage(
String text
) {
builder.a(text, listener -> {});
return this;
}
public ModalBottomSheetWrapper setClickableMessage(
String text,
Runnable callback
) {
builder.a(text, listener -> callback.run());
return this;
}
public ModalBottomSheetWrapper setPositiveButton(
String text,
Runnable callback
) {
builder.b(text, kostil -> callback.run());
return this;
}
public ModalBottomSheetWrapper setSubtitle(String text) {
builder.b((CharSequence) text);
return this;
}
public ModalBottomSheetWrapper setView(View view) {
builder.a(view);
return this;
}
public ModalBottomSheet show() {
return builder.c(null);
}
public ModalBottomSheet show(boolean isCancellable) {
var sheet = builder.c(null);
sheet.b(isCancellable);
return sheet;
}
}
@@ -0,0 +1,88 @@
package ru.vtosters.lite.utils;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.sendToast;
import static ru.vtosters.lite.utils.Preferences.dev;
import static ru.vtosters.lite.utils.Preferences.getSizeForDelete;
import android.annotation.SuppressLint;
import java.io.File;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.Objects;
public class CacheUtils {
private static CacheUtils sInstance = new CacheUtils();
public long size = 0;
public static CacheUtils getInstance() {
if (sInstance == null)
sInstance = new CacheUtils();
return sInstance;
}
public void autoCleaningCache() {
size = getDirSize(getContext().getCacheDir());
if(size >= getSizeForDelete()) {
if(dev()) sendToast("Кэш очищен");
deleteCache();
size = 0;
}
}
public long getDirSize(File dir){
long size = 0;
for (File file : Objects.requireNonNull(dir.listFiles())) {
if (file != null && file.isDirectory()) {
size += getDirSize(file);
} else if (file != null && file.isFile()) {
size += file.length();
}
}
return size;
}
public static void deleteCache() {
try {
File dir = getContext().getCacheDir();
deleteDir(dir);
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i < Objects.requireNonNull(children).length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
return dir.delete();
} else if(dir!= null && dir.isFile()) {
return dir.delete();
} else {
return false;
}
}
@SuppressLint("DefaultLocale")
public static String humanReadableByteCountBin(long bytes) {
long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
if (absB < 1024) {
return bytes + " B";
}
long value = absB;
CharacterIterator ci = new StringCharacterIterator("KMGTPE");
for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) {
value >>= 10;
ci.next();
}
value *= Long.signum(bytes);
return String.format("%.1f %cB", value / 1024.0, ci.current());
}
}
@@ -1,6 +1,7 @@
package ru.vtosters.lite.utils;
import static androidx.core.content.ContextCompat.getDrawable;
import static ru.vtosters.lite.utils.Preferences.checkupdates;
import static ru.vtosters.lite.utils.Preferences.getLocale;
import static ru.vtosters.lite.utils.Preferences.preferences;
import static ru.vtosters.lite.utils.Themes.isDarkTheme;
@@ -49,6 +50,11 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import ru.vtosters.lite.ui.dialogs.DisableBattery;
import ru.vtosters.lite.ui.dialogs.InstallGMS;
import ru.vtosters.lite.ui.dialogs.OTADialog;
import ru.vtosters.lite.ui.dialogs.Start;
public class Globals {
private static final List<Activity> activities = new ArrayList<>();
@@ -57,6 +63,15 @@ public class Globals {
return preferences;
}
public static void MainActivityInit(Activity activity){
if(checkupdates())
OTADialog.checkUpdates(activity);
Start.alert(activity);
InstallGMS.alert(activity);
DisableBattery.alert(activity);
// VKIDProtection.alert(activity);
}
public static void componentSwitcher(String component, Boolean enabled) {
var packageManager = getContext().getPackageManager();
packageManager.setComponentEnabledSetting(new ComponentName(getPackageName(), getPackageName() + "." + component), enabled? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
@@ -185,7 +200,6 @@ public class Globals {
return null;
} // Getting the global context through reflection to use context on application initialization
public static boolean isGmsInstalled() {
try {
getContext().getPackageManager().getPackageInfo("com.google.android.gms", 0);
@@ -0,0 +1,126 @@
package ru.vtosters.lite.utils;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OTAHelper {
private static final String LATEST_RELEASE_URL = "https://api.github.com/repositories/473685743/releases/latest";
private static final String LATEST_RELEASE_COMMIT_URL = "https://api.github.com/repositories/473685743/git/ref/tags/%s";
private OTAListener mListener;
private final OkHttpClient mClient = new OkHttpClient();
private JSONObject mReleaseJson;
private JSONObject mCommitJson;
public OTAHelper(OTAListener listener) {
this.mListener = listener;
}
public void loadData() {
Request release = new Request.Builder()
.url(LATEST_RELEASE_URL)
.build();
mClient.newCall(release).a(new Callback() {
@Override
public void a(Call call, IOException e) {
Log.d("OTAHelper", "Error while getting latest release info: " + e);
mListener.onUpdateCanceled();
}
@Override
public void a(Call call, Response response) throws IOException {
try {
setData(response);
} catch (JSONException | NullPointerException e) {
e.printStackTrace();
}
}
});
}
void setData(Response response) throws IOException, JSONException {
mReleaseJson = new JSONObject(response.body().string());
String tag = mReleaseJson.getString("tag_name");
Request commit = new Request.Builder()
.url(String.format(LATEST_RELEASE_COMMIT_URL, tag))
.build();
mClient.newCall(commit).a(new Callback() {
@Override
public void a(Call call, IOException e) {
Log.d("OTAHelper", "Error while getting latest commit info: " + e);
mListener.onUpdateCanceled();
}
@Override
public void a(Call call, Response response) throws IOException {
try {
mCommitJson = new JSONObject(response.body().string());
if (isNewVersion())
mListener.onUpdateApplied();
else mListener.onUpdateCanceled();
} catch (NullPointerException | JSONException e) {
e.printStackTrace();
mListener.onUpdateCanceled();
}
}
});
}
public boolean isNewVersion() {
try {
String commitSHA = mCommitJson.getJSONObject("object").getString("sha");
return !commitSHA.startsWith(About.getBuildNumber());
} catch (Exception e) {
return false;
}
}
public String getNewVersionName() {
try {
return mReleaseJson.getString("name");
} catch (JSONException e) {
return null;
}
}
public String getUpdateDescription() {
try {
return mReleaseJson.getString("body");
} catch (JSONException e) {
return null;
}
}
public String getDownloadUrl() {
try {
return mReleaseJson.getJSONArray("assets")
.getJSONObject(0)
.getString("browser_download_url");
} catch (JSONException e) {
return null;
}
}
public interface OTAListener {
void onUpdateApplied();
void onUpdateCanceled();
}
}
@@ -1,9 +1,11 @@
package ru.vtosters.lite.utils;
import static android.os.Build.VERSION;
import static java.lang.Long.MAX_VALUE;
import static ru.vtosters.lite.f0x1d.VTVerifications.hasPrometheus;
import static ru.vtosters.lite.f0x1d.VTVerifications.isVerified;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.migrate;
import static ru.vtosters.lite.utils.CacheUtils.getInstance;
import static ru.vtosters.lite.utils.DeletedMessagesHandler.reloadMessagesList;
import static ru.vtosters.lite.utils.Globals.fixGapps;
import static ru.vtosters.lite.utils.Globals.getContext;
@@ -16,12 +18,14 @@ 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.SignatureChecker.validateAppSignature;
import static ru.vtosters.lite.utils.Themes.systemThemeChanger;
import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import android.util.Log;
@@ -30,6 +34,7 @@ import com.vk.im.engine.models.users.UserSex;
import com.vtosters.lite.data.Users;
import com.vtosters.lite.fragments.SettingsListFragment;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@@ -55,13 +60,16 @@ public class Preferences {
LoadLibrary("vkopustest");
}
systemThemeChanger();
getInstance().autoCleaningCache();
} // VK Init
public static void forceOffline() {
setupFilters();
getInstance().autoCleaningCache();
if (setoffline() && !offline()) {
Users.b();
}
setupFilters();
}
public static boolean getBoolValue(String key, Boolean value) {
@@ -147,6 +155,10 @@ public class Preferences {
return getBoolValue("awayphp", true);
}
public static boolean musicFixNew() {
return getBoolValue("musicFixNew", true);
}
public static Class useNewSettings() {
boolean bool = getBoolValue("useNewSettings", true);
return bool? VTSettings.class : SettingsListFragment.class;
@@ -197,7 +209,7 @@ public class Preferences {
}
public static boolean dockcounter() {
return getBoolValue("dockcounter", true) && !vkme();
return getBoolValue("dockcounter", true);
}
public static boolean feedcache() {
@@ -209,7 +221,7 @@ public class Preferences {
}
public static boolean gcmfix() {
return getBoolValue("gcmfix", true);
return getBoolValue("gcmfix", true) && isValidSignature();
}
public static boolean hasMusicSubscription() {
@@ -361,10 +373,23 @@ public class Preferences {
return getBoolValue("roundedmsgs", false);
}
public static boolean checkupdates() {
return getBoolValue("checkupdates", true) && isValidSignature();
}
public static boolean disableanimstickers() {
return getBoolValue("disableanimstickers", true);
}
public static boolean isValidSignature() {
try {
return validateAppSignature();
} catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
return false;
}
public static boolean disableSettingsSumms() {
return getBoolValue("disableSettingsSumms", false);
}
@@ -393,7 +418,6 @@ public class Preferences {
return hasPrometheus(getUserId());
}
public static String getLocale() {
String string = getPrefsValue("lang_value");
@@ -419,6 +443,37 @@ public class Preferences {
}
}
public static long getSizeForDelete() {
switch (getPrefsValue("clearcache")) {
case "100mb":
return 104857600L;
case "500mb":
return 524288000L;
case "1gb":
return 1073741824L;
case "2gb":
return 2147483648L;
case "5gb":
return 5368709120L;
default:
return MAX_VALUE;
}
}
public static int compress(int origquality) {
if(getBoolValue("shakal", false)) return 5;
if(!getBoolValue("compressPhotos", true)) return 100;
return origquality;
}
public static String nullOnline() {
return getString("onlineNull");
}
public static boolean isOnlineNull(int status) {
return status == 0;
}
@SuppressLint("SimpleDateFormat")
public static SimpleDateFormat setDateFormat() {
return new SimpleDateFormat(getDateFormat());
@@ -0,0 +1,47 @@
package ru.vtosters.lite.utils;
import static android.content.pm.PackageManager.GET_SIGNATURES;
import static android.content.pm.PackageManager.NameNotFoundException;
import static ru.vtosters.lite.f0x1d.VTVerifications.decode;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getPackageName;
import android.annotation.SuppressLint;
import android.content.pm.PackageInfo;
import android.content.pm.Signature;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SignatureChecker {
private static final String APP_SIGNATURE = "QzNFQTI3Q0ExNEJENzJFM0U2QUUyMDM0OTdCNDQ0NUFEQUMxRjk0NQ==";
public static String getSHA1(byte[] sig) throws NoSuchAlgorithmException{
MessageDigest digest = MessageDigest.getInstance("SHA1");
digest.update(sig);
byte[] hashtext = digest.digest();
return bytesToHex(hashtext);
}
public static String bytesToHex(byte[] bytes){
final char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] hexChars = new char[bytes.length * 2];
int v;
for (int j = 0; j < bytes.length; j++) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
public static boolean validateAppSignature() throws NameNotFoundException, NoSuchAlgorithmException{
@SuppressLint("PackageManagerGetSignatures") PackageInfo packageInfo = getContext().getPackageManager().getPackageInfo(getPackageName(), GET_SIGNATURES);
for (Signature signature : packageInfo.signatures) {
String sha1 = getSHA1(signature.toByteArray());
return decode(APP_SIGNATURE).equals(sha1);
}
return false;
} // Sig check to detect actions builds and etc
}
@@ -1,7 +1,12 @@
package ru.vtosters.lite.utils;
import static android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
import static com.vk.im.ui.themes.ImTheme.*;
import static com.vk.im.ui.themes.ImTheme.VKAPP_AMOLED;
import static com.vk.im.ui.themes.ImTheme.VKAPP_DARK;
import static com.vk.im.ui.themes.ImTheme.VKAPP_LIGHT;
import static com.vk.im.ui.themes.ImTheme.VKME_AMOLED;
import static com.vk.im.ui.themes.ImTheme.VKME_DARK;
import static com.vk.im.ui.themes.ImTheme.VKME_LIGHT;
import static ru.vtosters.lite.utils.Globals.edit;
import static ru.vtosters.lite.utils.Globals.getIdentifier;
import static ru.vtosters.lite.utils.Globals.getPrefsValue;
@@ -14,6 +19,7 @@ import static ru.vtosters.lite.utils.Preferences.systemtheme;
import static ru.vtosters.lite.utils.Preferences.vkme;
import static ru.vtosters.lite.utils.Preferences.vksans;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -161,8 +167,11 @@ public class Themes {
return color_grishka() && Build.VERSION.SDK_INT >= 31;
}
public static boolean isColorRefAccented(int i) {
return i == R.color.cornflower_blue || i == R.color.cornflower_blue_two || i == R.color.dot_unread || i == R.color.music_action_button_blue || i == R.color.fave_promo_btn_pressed || i == R.color.im_back_to_vk_gradient_start || i == R.color.live_emoji_butt_hide || i == R.color.picker_tab_bg_selected || i == R.color.sky_300 || i == R.color.text_blue || i == R.color.tw__blue_default || i == R.color.tw__blue_pressed || i == R.color.white_blue32 || i == R.color.name || i == R.color.picker_blue || i == R.color.picker_blue_pressed || i == R.color.picker_tab_text_selected || i == R.color.sharing_blue_btn_pressed || i == R.color.sharing_blue_btn_normal || i == R.color.tip_background || i == R.color.vkim_msg_sending_ic || i == R.color.vkim_playing_drawable_rect || i == R.color.accent_blue || i == R.color.light_blue_gray || i == R.color.light_blue || i == R.color.blue_200 || i == R.color.header_blue || i == R.color.blue_200_muted || i == R.color.im_old_accent || i == R.color.im_old_accent_muted || i == R.color.im_dark_accent || i == R.color.im_dark_accent_muted || i == R.color.azure_A400 || i == R.color.blue || i == R.color.blue_400 || i == R.color.blue_300 || i == R.color.cool_blue;
public static boolean isColorRefAccented(int color) {
for (int accent : new int[]{R.color.accent_blue, R.color.azure_A400, R.color.blue, R.color.blue_200, R.color.blue_200_muted, R.color.blue_300, R.color.blue_400, R.color.cool_blue, R.color.cornflower_blue, R.color.cornflower_blue_two, R.color.dot_unread, R.color.fave_promo_btn_pressed, R.color.header_blue, R.color.im_back_to_vk_gradient_start, R.color.im_dark_accent, R.color.im_dark_accent_muted, R.color.im_old_accent, R.color.im_old_accent_muted, R.color.light_blue, R.color.light_blue_gray, R.color.live_emoji_butt_hide, R.color.music_action_button_blue, R.color.name, R.color.picker_blue, R.color.picker_blue_pressed, R.color.picker_tab_bg_selected, R.color.picker_tab_text_selected, R.color.sharing_blue_btn_normal, R.color.sharing_blue_btn_pressed, R.color.sky_300, R.color.text_blue, R.color.tip_background, R.color.tw__blue_default, R.color.tw__blue_pressed, R.color.vkim_msg_sending_ic, R.color.vkim_playing_drawable_rect, R.color.white_blue32}) {
if(color == accent) return true;
}
return false;
} // Accent colors
public static void themeMonetToolbar(ImageButton imageButton, Toolbar toolbar) {
@@ -173,32 +182,60 @@ public class Themes {
}
public static Drawable recolorDrawable(Drawable drawable) {
if (drawable == null) {
return null;
}
if (drawable == null) return null;
return new RecoloredDrawable(drawable, getAccentColor());
} // Recolor drawable to accent color
public static Drawable recolorVKIconMenu(Drawable drawable) {
int accent = getHeaderText();
if (drawable == null) return null;
if(isAndroidMonet() || isDarkTheme()) accent = getAccentColor();
return new RecoloredDrawable(drawable, accent);
} // Recolor vk icon to accent color
public static Drawable recolorDrawableToolbar(Drawable drawable) {
if (drawable == null) {
return null;
}
if (drawable == null) return null;
if(!isAndroidMonet()) return drawable;
return new RecoloredDrawable(drawable, getHeaderText());
} // Recolor toolbar drawable to accent color
@SuppressLint("UseCompatLoadingForDrawables")
public static Drawable recolorDrawableInt(int drawable) {
if(!isAndroidMonet()) return getResources().getDrawable(drawable);
@SuppressLint("UseCompatLoadingForDrawables") Drawable res = getResources().getDrawable(drawable);
return new RecoloredDrawable(res, getAccentColor());
} // Get res drawable via id and coloring to accent
public static ColorStateList recolorCSL(ColorStateList colorStateList) {
if (colorStateList == null) {
return null;
}
if (colorStateList == null) return null;
if(!isAndroidMonet()) return colorStateList;
return ColorStateList.valueOf(getAccentColor());
} // Recolor ColorStateList to accent color
@SuppressLint("UseCompatLoadingForColorStateLists")
public static ColorStateList themeCSL(Context context, int color) {
if (isColorRefAccented(color) && isAndroidMonet()) {
return ColorStateList.valueOf(getAccentColor());
}
ColorStateList csl = context.getColorStateList(color);
ColorStateList csl;
if (Build.VERSION.SDK_INT >= 23) {
csl = context.getColorStateList(color);
} else {
csl = context.getResources().getColorStateList(color);
}
try {
int unsel = csl.getColorForState(new int[]{-android.R.attr.state_selected}, Color.BLACK);
int sel = csl.getColorForState(new int[]{android.R.attr.state_selected}, Color.BLACK);
+2 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="23" android:compileSdkVersionCodename="6.0-2438415" package="com.vtosters.lite" platformBuildVersionCode="23" platformBuildVersionName="6.0-2438415">
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="23" android:minSdkVersion="20" android:compileSdkVersionCodename="6.0-2438415" package="com.vtosters.lite" platformBuildVersionCode="23" platformBuildVersionName="6.0-2438415">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CAMERA"/>
@@ -75,6 +75,7 @@
<meta-data android:name="com.facebook.sdk.CodelessDebugLogEnabled" android:value="false"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
<meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/cornflower_blue"/>
<activity android:name="ru.vtosters.lite.ui.activities.APKInstallActivity" />
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.vtosters.lite.MainActivity" android:theme="@style/SplashTheme">
<intent-filter>
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER"/>
+1 -1
View File
@@ -23,7 +23,7 @@
style="@style/VKUIText.Title1" />
<TextView
android:textColor="?text_primary"
android:textColor="?text_secondary"
android:ellipsize="end"
android:id="@id/label"
android:layout_width="fill_parent"
@@ -33,7 +33,7 @@
<com.vtosters.lite.ui.BadooTextView
android:textSize="16.0dip"
android:textColor="@color/sharing_blue_btn_text"
android:textColor="@color/cool_blue"
android:gravity="center"
android:id="@android:id/text1"
android:duplicateParentState="true"
@@ -14,7 +14,7 @@
<com.vtosters.lite.ui.BadooTextView
android:textSize="16.0dip"
android:textColor="@color/dark_grey"
android:textColor="?text_primary"
android:id="@id/sharing_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@@ -23,7 +23,7 @@
<TextView
android:textSize="14.0dip"
android:textColor="@color/cool_grey"
android:textColor="?text_secondary"
android:ellipsize="end"
android:id="@id/sharing_subtitle"
android:visibility="gone"
@@ -39,7 +39,7 @@
android:layout_width="48.0dip"
android:layout_height="48.0dip"
android:layout_marginRight="4.0dip"
android:tint="@color/cool_grey"
android:tint="?text_primary"
android:contentDescription="@string/search"
android:layout_marginEnd="4.0dip"
app:srcCompat="@drawable/ic_search_24"
@@ -53,7 +53,7 @@
android:layout_height="48.0dip"
android:src="@drawable/ic_settings_24"
android:scaleType="center"
android:tint="@color/gray_300"
android:tint="?text_primary"
android:contentDescription="@string/menu_settings"
android:layout_marginEnd="4.0dip"
style="@style/Widget.AppCompat.ActionButton" />
@@ -17,7 +17,6 @@
android:textSize="12.0dip"
android:textColor="#fffafafa"
android:gravity="center"
android:layout_gravity="center"
android:id="@id/counter"
android:background="@drawable/bottom_navigation_counter_bg"
android:paddingLeft="@dimen/bottom_navigation_counter_padding"
@@ -23,7 +23,6 @@
<com.vk.imageloader.view.VKImageView
android:id="@id/iv_preview"
android:background="@drawable/picker_bg_graffiti_preview_top"
android:backgroundTint="?background_content"
android:paddingLeft="32.0dip"
android:paddingTop="32.0dip"
android:paddingRight="32.0dip"
@@ -35,11 +34,10 @@
<TextView
android:textSize="14.0sp"
android:textColor="?header_text"
android:textColor="#ffffffff"
android:gravity="center"
android:id="@id/tv_send_button"
android:background="@drawable/picker_bg_graffiti_preview_bottom"
android:backgroundTint="?accent"
android:paddingLeft="24.0dip"
android:paddingRight="24.0dip"
android:paddingBottom="24.0dip"
@@ -54,7 +54,7 @@
<TextView
android:textSize="14.0dip"
android:textColor="#ff8c8d8f"
android:textColor="?text_secondary"
android:ellipsize="marquee"
android:id="@id/label"
android:layout_width="fill_parent"
+1 -1
View File
@@ -71,7 +71,7 @@
<TextView
android:textSize="14.0dip"
android:textColor="#ff8c8d8f"
android:textColor="?text_secondary"
android:ellipsize="marquee"
android:id="@id/label"
android:layout_width="fill_parent"
+1 -1
View File
@@ -67,7 +67,7 @@
style="@style/VKUIText.Title1" />
<TextView
android:textColor="@color/gray_400"
android:textColor="?text_secondary"
android:id="@id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@@ -76,6 +76,7 @@
android:singleLine="true" />
<TextView
android:textColor="?text_secondary"
android:textSize="14.0dip"
android:ellipsize="marquee"
android:id="@id/label"
+1 -1
View File
@@ -60,7 +60,7 @@
<com.vk.im.ui.views.FixTextView
android:textSize="14.0sp"
android:textColor="?text_primary"
android:textColor="?text_secondary"
android:ellipsize="end"
android:id="@id/content_body"
android:layout_width="fill_parent"
@@ -2,6 +2,7 @@
<LinearLayout android:layout_gravity="start"
android:orientation="horizontal"
android:padding="12.0dip"
android:background="?tabbar_background"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
+18 -1
View File
@@ -4039,6 +4039,7 @@
<string name="tgchannel">Telegram Канал</string>
<string name="tgchat">Telegram Чат</string>
<string name="vkgroup">Наша группа в ВК</string>
<string name="vtfaqsumm">Ответы на все ваши вопросы здесь</string>
<string name="vtsite">Наш сайт</string>
<string name="installgms">Установите Сервисы Google Play</string>
<string name="vtldads">Отключить рекламу</string>
@@ -4200,6 +4201,10 @@
<string name="proxysocks">Socks Прокси</string>
<string name="proxystatic">Static Домен</string>
<string name="reportbug">Сообщить о баге</string>
<string name="autoclearcache">Автоочистка кэша</string>
<string name="autoclearcachesumm">Размер кэша:</string>
<string name="autoclearcachedisabled">Не очищать кэш</string>
<string name="reportbugsumm">Репорты багов помогают нам их исправлять</string>
<string name="restartapp">Перезапустите приложение</string>
<string name="savedmsg">Сохраненные сообщения</string>
<string name="selectacc">Выберите аккаунт</string>
@@ -4337,7 +4342,7 @@
<string name="add_another_account">Добавить новый аккаунт</string>
<string name="download_latest_vtl">Скачать последнюю версию</string>
<string name="checkforupdates">Проверить обновления</string>
<string name="debug_warning">Внимание!</string>
<string name="debug_warning_summary">Данное меню предназначено только для тестирования работоспособности приложения. Если вы являетесь рядовым юзером, то вам не следует ничего не трогать в данных настройках (пожалуйста)</string>
@@ -4437,6 +4442,9 @@
<string name="startbtn1">Новости</string>
<string name="startbtn2">Продолжить</string>
<string name="vkiddisable">Отключить защиту</string>
<string name="vkidsumm">ВКонтакте начали блокировать использование сторонних приложений, поэтому для стабильной работы всех разделов приложения необходимо отключить Защиту от подозрительных приложений \n\nVK ID -> Безопасность и вход -> Защита от подозрительных приложений</string>
<string name="videodownloaderr">Данное видео невозможно скачать</string>
<string name="roundedmsgs">Круглые сообщения</string>
@@ -4474,6 +4482,15 @@
<string name="vtlhidesumm">Скрыть подписи в настройках</string>
<string name="vtlssfssumm">Есть доступ</string>
<string name="checkupdates">Авто обновления</string>
<string name="updates">Обновления</string>
<string name="vkme_notifs">Вернуть вкладку уведомлений</string>
<string name="updateanddownload">Обновить</string>
<string name="newversion">Новая версия</string>
<string name="changelog">Список изменений</string>
<string name="downloaderr">Ошибка загрузки файла</string>
<string name="onlineNull">Онлайн скрыт</string>
<string name="empty_text" />
</resources>
+1 -1
View File
@@ -48,7 +48,7 @@
<dimen name="notification_header_bottom_padding">4.0dip</dimen>
<dimen name="notification_header_top_padding">17.0dip</dimen>
<dimen name="picker_dimen">400.0dip</dimen>
<dimen name="post_side_padding">32.0dip</dimen>
<dimen name="post_side_padding">20.0dip</dimen>
<dimen name="post_side_padding_btn">16.0dip</dimen>
<dimen name="post_side_padding_info">56.0dip</dimen>
<dimen name="post_side_padding_menu">20.0dip</dimen>
+1 -1
View File
@@ -2,7 +2,7 @@
<resources>
<dimen name="_post_side_padding">-32.0dip</dimen>
<dimen name="gift_min_size">128.0dip</dimen>
<dimen name="post_side_padding">32.0dip</dimen>
<dimen name="post_side_padding">20.0dip</dimen>
<dimen name="post_side_padding_btn">16.0dip</dimen>
<dimen name="post_side_padding_info">56.0dip</dimen>
<dimen name="post_side_padding_menu">20.0dip</dimen>
+3 -3
View File
@@ -117,9 +117,9 @@
<item name="im_bubble_button_background_disabled">#66313233</item>
<item name="im_bubble_button_foreground">@android:color/system_accent1_50</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_gift_background">@android:color/system_accent1_50</item>
<item name="im_bubble_gift_text">?text_primary</item>
<item name="im_bubble_gift_text_secondary">?text_secondary</item>
<item name="im_bubble_incoming">@android:color/system_neutral1_900</item>
<item name="im_bubble_incoming_alternate">@android:color/system_neutral1_900</item>
<item name="im_bubble_incoming_alternate_highlighted">@android:color/system_neutral2_200
+1 -1
View File
@@ -17,7 +17,7 @@
<dimen name="picker_item_size_image">160.0dip</dimen>
<dimen name="picker_item_size_image_small">140.0dip</dimen>
<dimen name="picker_sticker_size">200.0dip</dimen>
<dimen name="post_side_padding">32.0dip</dimen>
<dimen name="post_side_padding">20.0dip</dimen>
<dimen name="post_side_padding_btn">16.0dip</dimen>
<dimen name="post_side_padding_info">56.0dip</dimen>
<dimen name="post_side_padding_menu">20.0dip</dimen>
+1 -1
View File
@@ -14953,7 +14953,7 @@
<public type="string" name="dockbar_save" id="0x7f11123b" />
<public type="string" name="dockbar_selected_items" id="0x7f11123c" />
<public type="string" name="dockbar_unselected_items" id="0x7f11123d" />
<public type="string" name="download_latest_vtl" id="0x7f11123e" />
<public type="string" name="checkforupdates" id="0x7f11123e" />
<public type="string" name="other_fix_dynamic_colors" id="0x7f11123f" />
<public type="string" name="other_reset_settings" id="0x7f111240" />
<public type="string" name="other_reset_settings_summary" id="0x7f111241" />
+20 -3
View File
@@ -4164,6 +4164,7 @@ with video"</string>
<string name="tgchat">Telegram Chat</string>
<string name="vkgroup">Our VK Group</string>
<string name="vtfaq">FAQ</string>
<string name="vtfaqsumm">All your questions are answered here</string>
<string name="vtsite">Our site</string>
<string name="installgms">Install Google Play Services</string>
<string name="vtldads">Disable Ads</string>
@@ -4325,6 +4326,10 @@ You need to restart the application to apply proxy settings"</string>
<string name="proxysocks">Socks Proxy</string>
<string name="proxystatic">Static Domain</string>
<string name="reportbug">Report a bug</string>
<string name="autoclearcache">Auto cleaning app cache</string>
<string name="autoclearcachesumm">Cache size:</string>
<string name="autoclearcachedisabled">"Don't clear cache"</string>
<string name="reportbugsumm">Bug reports help us fix them</string>
<string name="restartapp">Please, restart app</string>
<string name="savedmsg">Saved messages</string>
<string name="selectacc">Select account</string>
@@ -4463,7 +4468,7 @@ May look like a fake leaving the online"</string>
<string name="add_another_account">Add new account</string>
<string name="download_latest_vtl">Download latest version</string>
<string name="checkforupdates">Check for updates</string>
<string name="debug_warning">Warning!</string>
<string name="debug_warning_summary">These options are for testing this app only. If you are a regular user, please, don\'t use them</string>
@@ -4588,8 +4593,8 @@ May look like a fake leaving the online"</string>
<string name="vtsettaboutmod">About modification</string>
<string name="vtsettmod">Mod settings</string>
<string name="vtlsettenabled">enabled</string>
<string name="vtlsettdisabled">disabled</string>
<string name="vtlsettenabled">Enabled</string>
<string name="vtlsettdisabled">Disabled</string>
<string name="vtlsettverifno">No</string>
<string name="vtlsettverifyes">Yes</string>
@@ -4608,6 +4613,18 @@ May look like a fake leaving the online"</string>
<string name="vtlhidesumm">Hide settings summaries</string>
<string name="vtlssfssumm">Have access</string>
<string name="checkupdates">Auto updates</string>
<string name="updates">Updates</string>
<string name="vkme_notifs">Back notification tab to dock</string>
<string name="updateanddownload">Update</string>
<string name="newversion">New version</string>
<string name="changelog">Changelog</string>
<string name="downloaderr">Download error</string>
<string name="onlineNull">Online is hidden</string>
<string name="vkiddisable">Disable protection</string>
<string name="vkidsumm">VK has started blocking the use of third-party applications, so for the stable operation of all parts of the application, it is necessary to disable Protection from suspicious applications \n\nVK ID -> Security and Login -> Protection from suspicious applications</string>
<item type="string" name="APKTOOL_DUMMY_10be" />
<item type="string" name="APKTOOL_DUMMY_10bf" />
+4
View File
@@ -69,6 +69,10 @@
android:defaultValue="true"
android:key="useNewSettings"
android:title="Use New Settings" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="shakal"
android:title="shakalish pikchi da" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/debug_developer_functions">
<com.vtosters.lite.ui.MaterialSwitchPreference
-10
View File
@@ -34,16 +34,6 @@
<PreferenceCategory
android:key="multimedia"
android:title="@string/sett_media">
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="compressPhotos"
android:title="@string/sett_compress_photos"
app:singleLine="false" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="compressVideos"
android:title="@string/sett_compress_videos"
app:singleLine="false" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="saveProcessedImage"
+1 -7
View File
@@ -29,16 +29,10 @@
android:key="vkme"
android:summary="@string/vkmesumm"
android:title="@string/vkme" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="vkme_msg"
android:summary="TODO"
android:title="@string/debug_experimental_vk_me_mode" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="vkme_notifs"
android:summary="Back notif tab"
android:title="vkme_notifs" />
android:title="@string/vkme_notifs" />
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
</PreferenceCategory>
<PreferenceCategory android:title="@string/interfaceemoji">
+4
View File
@@ -24,5 +24,9 @@
android:key="gcmfix"
android:summary="@string/vk_fix_music_summary"
android:title="@string/vk_fix_music" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="musicFixNew"
android:title="Фикс музыки v2" />
</PreferenceCategory>
</PreferenceScreen>
@@ -542,6 +542,10 @@
iget-object v1, p0, Landroid/support/v7/widget/ToolbarWidgetWrapper;->q:Landroid/graphics/drawable/Drawable;
:goto_0
invoke-static {v1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object v1
invoke-virtual {v0, v1}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
goto :goto_1
@@ -215,6 +215,10 @@
const/16 v6, 0x56
invoke-static {v6}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v6
invoke-virtual {v4, v5, v6, v3}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0
@@ -124,7 +124,7 @@
move-result v1
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result v1
@@ -2651,6 +2651,10 @@
check-cast v0, Landroid/graphics/drawable/Drawable;
invoke-static {v0}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object v0
invoke-virtual {p1, v0}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
:goto_0
@@ -231,7 +231,7 @@
move-result v1
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result v1
@@ -216,7 +216,9 @@
if-gtz v4, :cond_1
const-string p1, ""
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->nullOnline()Ljava/lang/String;
move-result-object p1
goto :goto_0
@@ -343,7 +343,7 @@
move-result v0
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result v0
@@ -832,7 +832,11 @@
sget v1, Lcom/vk/im/ui/R$e;->vkim_ic_verified:I
invoke-virtual {v0, v1}, Landroid/support/v7/widget/AppCompatImageView;->setImageResource(I)V
invoke-static {v1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableInt(I)Landroid/graphics/drawable/Drawable;
move-result-object v1
invoke-virtual {v0, v1}, Landroid/support/v7/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
.line 116
iget-object v0, v9, Lcom/vk/im/ui/views/dialogs/DialogItemView;->s:Landroid/support/v7/widget/AppCompatImageView;
@@ -203,7 +203,7 @@
invoke-virtual {v0, v1}, Landroid/text/TextPaint;->setTextSize(F)V
.line 180
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getHeaderText()I
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getSTextAttr()I
move-result v1
@@ -230,6 +230,10 @@
const/16 p2, 0x64
:goto_0
invoke-static {p2}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result p2
invoke-virtual {p0, v2, p2, v1}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_1
@@ -584,6 +584,10 @@
const/16 v14, 0x64
invoke-static {v14}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v14
check-cast v12, Ljava/io/OutputStream;
invoke-virtual {v10, v13, v14, v12}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
@@ -274,6 +274,10 @@
const/16 v10, 0x55
invoke-static {v10}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v10
invoke-virtual {v7, v9, v10, v8}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
.line 701
@@ -2224,13 +2224,13 @@
const-string v3, "last_seen"
.line 299
invoke-virtual {v1, v3}, Lorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
invoke-virtual {v1, v3}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
move-result-object v3
const-string v5, "time"
invoke-virtual {v3, v5}, Lorg/json/JSONObject;->getInt(Ljava/lang/String;)I
invoke-virtual {v3, v5}, Lorg/json/JSONObject;->optInt(Ljava/lang/String;)I
move-result v3
@@ -2239,7 +2239,7 @@
const-string v3, "last_seen"
.line 300
invoke-virtual {v1, v3}, Lorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
invoke-virtual {v1, v3}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
move-result-object v3
@@ -346,6 +346,10 @@
const/16 v4, 0x5a
invoke-static {v4}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v4
move-object v5, v2
check-cast v5, Ljava/io/OutputStream;
@@ -5556,6 +5556,31 @@
move-result-object p1
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p1
invoke-virtual {p0, p1}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
return-void
.end method
.method public setNavigationIconAcent(I)V
.locals 1
.line 939
invoke-virtual {p0}, Landroid/support/v7/widget/Toolbar;->getContext()Landroid/content/Context;
move-result-object v0
invoke-static {v0, p1}, Landroid/support/v7/c/a/AppCompatResources;->b(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
move-result-object p1
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorVKIconMenu(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p1
invoke-virtual {p0, p1}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
return-void
@@ -5629,7 +5654,7 @@
if-eqz v3, :cond_228
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p1
@@ -5680,6 +5705,10 @@
.line 1017
iget-object v0, p0, Landroid/support/v7/widget/Toolbar;->e:Landroid/support/v7/widget/ActionMenuView;
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p1
invoke-virtual {v0, p1}, Landroid/support/v7/widget/ActionMenuView;->setOverflowIcon(Landroid/graphics/drawable/Drawable;)V
return-void
@@ -376,6 +376,10 @@
move-result v3
invoke-static {v3}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v3
move-object/from16 v8, p2
invoke-virtual {v1, v5, v3, v8}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
@@ -974,6 +974,10 @@
const/16 v4, 0x64
invoke-static {v4}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v4
invoke-virtual {v2, v3, v4, v1}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
.line 437
@@ -121,6 +121,10 @@
const/16 v3, 0x64
invoke-static {v3}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v3
move-object v4, v1
check-cast v4, Ljava/io/OutputStream;
@@ -191,6 +191,10 @@
invoke-static {p2, p3}, Landroid/support/v4/a/a/DrawableCompat;->a(Landroid/graphics/drawable/Drawable;I)V
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p1
.line 53
invoke-virtual {p0, p1}, Landroid/support/v7/widget/Toolbar;->setOverflowIcon(Landroid/graphics/drawable/Drawable;)V
@@ -370,7 +370,7 @@
move-result v0
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result v0
@@ -861,7 +861,7 @@
move-result v0
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->roundedmsgs()Z
move-result v0
@@ -96,6 +96,13 @@
move-result p2
.line 180
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTextAttr()I
move-result v1
invoke-virtual {p1, v1}, Landroid/widget/TextView;->setTextColor(I)V
invoke-virtual {p1, p2}, Landroid/widget/TextView;->setText(I)V
return-void
@@ -254,6 +254,14 @@
iput-object p1, p0, Lcom/vk/sharing/view/SharingView;->l:Landroid/view/View;
iget-object p1, p0, Lcom/vk/sharing/view/SharingView;->l:Landroid/view/View;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result v1
invoke-virtual {p1, v1}, Landroid/view/View;->setBackgroundColor(I)V
const/16 p1, 0x200
.line 269
@@ -342,6 +350,14 @@
iput-object p1, p0, Lcom/vk/sharing/view/SharingView;->p:Landroid/widget/TextView;
iget-object p1, p0, Lcom/vk/sharing/view/SharingView;->p:Landroid/widget/TextView;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTextAttr()I
move-result v1
invoke-virtual {p1, v1}, Landroid/widget/TextView;->setTextColor(I)V
const p1, 0x7f0a09ea
.line 281
@@ -353,6 +369,12 @@
iput-object p1, p0, Lcom/vk/sharing/view/SharingView;->q:Landroid/widget/TextView;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getSTextAttr()I
move-result v1
invoke-virtual {p1, v1}, Landroid/widget/TextView;->setTextColor(I)V
.line 283
new-instance p1, Lcom/vk/sharing/view/SharingView$1;
@@ -504,6 +526,12 @@
move-result-object p1
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result v1
invoke-virtual {p1, v1}, Landroid/view/View;->setBackgroundColor(I)V
check-cast p1, Lcom/vk/sharing/view/SharingActionsView;
iput-object p1, p0, Lcom/vk/sharing/view/SharingView;->H:Lcom/vk/sharing/view/SharingActionsView;
@@ -528,6 +556,14 @@
iput-object p1, p0, Lcom/vk/sharing/view/SharingView;->I:Landroid/widget/LinearLayout;
iget-object p1, p0, Lcom/vk/sharing/view/SharingView;->I:Landroid/widget/LinearLayout;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result v1
invoke-virtual {p1, v1}, Landroid/widget/LinearLayout;->setBackgroundColor(I)V
.line 370
new-instance p1, Lcom/vk/sharing/view/SharingView$16;
@@ -2209,6 +2245,14 @@
iput-object v0, p0, Lcom/vk/sharing/view/SharingView;->O:Landroid/view/View;
iget-object v0, p0, Lcom/vk/sharing/view/SharingView;->O:Landroid/view/View;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result v1
invoke-virtual {v0, v1}, Landroid/view/View;->setBackgroundColor(I)V
.line 711
iget-object v0, p0, Lcom/vk/sharing/view/SharingView;->O:Landroid/view/View;
@@ -2244,6 +2288,14 @@
iput-object v0, p0, Lcom/vk/sharing/view/SharingView;->P:Landroid/view/View;
iget-object v0, p0, Lcom/vk/sharing/view/SharingView;->P:Landroid/view/View;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result v1
invoke-virtual {v0, v1}, Landroid/view/View;->setBackgroundColor(I)V
.line 719
iget-object v0, p0, Lcom/vk/sharing/view/SharingView;->P:Landroid/view/View;
@@ -2279,6 +2331,14 @@
iput-object v0, p0, Lcom/vk/sharing/view/SharingView;->Q:Landroid/view/View;
iget-object v0, p0, Lcom/vk/sharing/view/SharingView;->Q:Landroid/view/View;
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result v1
invoke-virtual {v0, v1}, Landroid/view/View;->setBackgroundColor(I)V
.line 727
iget-object v0, p0, Lcom/vk/sharing/view/SharingView;->Q:Landroid/view/View;
@@ -1036,6 +1036,10 @@
check-cast v13, Ljava/io/OutputStream;
invoke-static {v10}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v10
invoke-virtual {v3, v6, v10, v13}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
.line 126
@@ -139,6 +139,10 @@
const/16 v2, 0x64
invoke-static {v2}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v2
invoke-virtual {p2, v0, v2, v1}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
const-string p2, ""
@@ -765,6 +765,10 @@
const/16 v6, 0x5a
invoke-static {v6}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v6
check-cast v4, Ljava/io/OutputStream;
invoke-virtual {p1, v5, v6, v4}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
@@ -246,6 +246,10 @@
move-result p1
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result p1
invoke-virtual {p0, p1}, Lcom/vk/im/ui/views/WriteBarDisabled;->setBackgroundColor(I)V
const/16 p1, 0x11
@@ -307,6 +311,10 @@
const/4 p1, -0x1
invoke-static {}, Lru/vtosters/lite/utils/Themes;->getTabbarBackground()I
move-result p1
.line 57
invoke-virtual {p0, p1}, Lcom/vk/im/ui/views/WriteBarDisabled;->setBackgroundColor(I)V
@@ -566,11 +566,7 @@
.line 65
:cond_0
invoke-static {p0}, Lru/vtosters/lite/ui/dialogs/Start;->alert(Landroid/app/Activity;)V
invoke-static {p0}, Lru/vtosters/lite/ui/dialogs/InstallGMS;->alert(Landroid/app/Activity;)V
invoke-static {p0}, Lru/vtosters/lite/ui/dialogs/DisableBattery;->alert(Landroid/app/Activity;)V
invoke-static {p0}, Lru/vtosters/lite/utils/Globals;->MainActivityInit(Landroid/app/Activity;)V
invoke-virtual {p0}, Lcom/vtosters/lite/MainActivity;->getWindow()Landroid/view/Window;
@@ -568,6 +568,10 @@
invoke-static {v1, v2}, Landroid/support/v4/a/a/DrawableCompat;->a(Landroid/graphics/drawable/Drawable;I)V
invoke-static {v1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object v1
.line 627
invoke-virtual {v0, v1}, Landroid/support/v7/widget/Toolbar;->setOverflowIcon(Landroid/graphics/drawable/Drawable;)V
@@ -586,6 +586,10 @@
check-cast v0, Landroid/graphics/drawable/Drawable;
invoke-static {v0}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object v0
invoke-virtual {p2, v0}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
const v0, 0x7f11062b
@@ -2318,6 +2318,10 @@
.line 554
iget-object v0, p0, Landroid/support/v7/widget/ActionMenuView;->g:Landroid/support/v7/widget/ActionMenuPresenter;
invoke-static {p1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p1
invoke-virtual {v0, p1}, Landroid/support/v7/widget/ActionMenuPresenter;->a(Landroid/graphics/drawable/Drawable;)V
return-void
@@ -126,6 +126,10 @@
const/16 v3, 0xa
invoke-static {v3}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v3
invoke-virtual {v1, v2, v3, v0}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
.line 299
@@ -207,6 +207,17 @@
check-cast v4, Ljava/lang/String;
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->gcmfix()Z
move-result v6
if-eqz v6, :cond_10
invoke-static {}, Lru/vtosters/lite/audio/gcm/GCMFix;->requestTokenV2()Ljava/lang/String;
move-result-object v4
:cond_10
invoke-virtual {v0, v3, v4}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a;
const-string v3, "nonce"
@@ -85,6 +85,10 @@
move-result-object v1
invoke-static {v1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object v1
invoke-virtual {v0, v1}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
.line 49
@@ -673,7 +673,7 @@
move-result p1
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result p1
@@ -1127,7 +1127,7 @@
move-result v0
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result v0
@@ -2617,7 +2617,7 @@
move-result v0
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result v0
@@ -342,7 +342,7 @@
move-result p2
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result p2
@@ -873,7 +873,7 @@
const v3, 0x7f0803e3
.line 333
invoke-virtual {p3, v3}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(I)V
invoke-virtual {p3, v3}, Landroid/support/v7/widget/Toolbar;->setNavigationIconAcent(I)V
.line 334
invoke-virtual {p3}, Landroid/support/v7/widget/Toolbar;->getMenu()Landroid/view/Menu;
@@ -100,6 +100,10 @@
const/16 v6, 0x56
invoke-static {v6}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result v6
invoke-virtual {p1, v5, v6, v4}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0
@@ -346,7 +346,7 @@
move-result p1
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme_msg()Z
invoke-static {}, Lru/vtosters/lite/utils/Preferences;->vkme()Z
move-result p1
@@ -153,6 +153,10 @@
move-result-object v1
invoke-static {v1}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object v1
invoke-virtual {v0, v1}, Landroid/support/v7/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
.line 54
@@ -145,6 +145,10 @@
move-result-object p5
invoke-static {p5}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p5
invoke-virtual {p5}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable;
move-result-object p5
@@ -247,6 +251,10 @@
check-cast p2, Landroid/graphics/drawable/Drawable;
invoke-static {p2}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p2
invoke-virtual {p1, p2}, Landroid/support/v7/widget/Toolbar;->setOverflowIcon(Landroid/graphics/drawable/Drawable;)V
.line 88
@@ -2499,6 +2499,10 @@
aget-object p2, p2, v1
invoke-static {p2}, Lru/vtosters/lite/utils/Themes;->recolorDrawableToolbar(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
move-result-object p2
invoke-virtual {p1, p2}, Landroid/support/v7/widget/Toolbar;->setOverflowIcon(Landroid/graphics/drawable/Drawable;)V
.line 215