Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6b56e0e87 | ||
|
|
5360ca6c5e | ||
|
|
f2ac845797 | ||
|
|
a85e55a594 | ||
|
|
e2775db4e5 | ||
|
|
589e8928a0 | ||
|
|
cd189b1dda | ||
|
|
14c111a3e6 | ||
|
|
b506c56346 | ||
|
|
bbbc94e510 | ||
|
|
8cb2c380e7 | ||
|
|
b9879f9ed7 | ||
|
|
cf05e051e8 | ||
|
|
963c4d81ba | ||
|
|
099c699702 | ||
|
|
1117fc19d4 | ||
|
|
78dca26063 |
+2
-2
@@ -91,8 +91,8 @@ task testClasses {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.microsoft.appcenter:appcenter-analytics:5.0.1'
|
||||
implementation 'com.microsoft.appcenter:appcenter-crashes:5.0.1'
|
||||
implementation 'com.microsoft.appcenter:appcenter-analytics:5.0.2'
|
||||
implementation 'com.microsoft.appcenter:appcenter-crashes:5.0.2'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
|
||||
implementation 'net.sourceforge.streamsupport:streamsupport-minifuture:1.7.4'
|
||||
implementation 'com.google.guava:guava:23.3-android'
|
||||
|
||||
@@ -19664,6 +19664,35 @@ public final class R {
|
||||
public static final int invalidate_theme_cache_each_update_title = 0x7f121890; // 2131892368
|
||||
public static final int invertFilters = 0x7f121891; // 2131892369
|
||||
public static final int invertFilters_summ = 0x7f121892; // 2131892370
|
||||
public static final int invertcached_summ = 0x7f121893; // 2131892371
|
||||
public static final int invertcached_title = 0x7f121894; // 2131892372
|
||||
public static final int microg_dialog1 = 0x7f121895; // 2131892373
|
||||
public static final int microg_dialog2 = 0x7f121896; // 2131892374
|
||||
public static final int microg_dialog3 = 0x7f121897; // 2131892375
|
||||
public static final int serverFeaturesDisable = 0x7f121898; // 2131892376
|
||||
public static final int serverFeaturesDisable_summ = 0x7f121899; // 2131892377
|
||||
public static final int sett_autoupdates = 0x7f12189a; // 2131892378
|
||||
public static final int sett_autoupdates_summ = 0x7f12189b; // 2131892379
|
||||
public static final int sett_battery = 0x7f12189c; // 2131892380
|
||||
public static final int sett_battery_summ1 = 0x7f12189d; // 2131892381
|
||||
public static final int sett_battery_summ2 = 0x7f12189e; // 2131892382
|
||||
public static final int sett_chats = 0x7f12189f; // 2131892383
|
||||
public static final int sett_chats_summ = 0x7f1218a0; // 2131892384
|
||||
public static final int sett_community = 0x7f1218a1; // 2131892385
|
||||
public static final int sett_community_summ = 0x7f1218a2; // 2131892386
|
||||
public static final int sett_missing_links = 0x7f1218a3; // 2131892387
|
||||
public static final int sett_missing_links_summ = 0x7f1218a4; // 2131892388
|
||||
public static final int sett_nogms_summ = 0x7f1218a5; // 2131892389
|
||||
public static final int sett_notifs = 0x7f1218a6; // 2131892390
|
||||
public static final int sett_notifs_summ = 0x7f1218a7; // 2131892391
|
||||
public static final int sett_recommendations = 0x7f1218a8; // 2131892392
|
||||
public static final int tgs_token_missing = 0x7f1218aa; // 2131892394
|
||||
public static final int tgs_token_reset = 0x7f1218ab; // 2131892395
|
||||
public static final int tgs_token_reset_dialog = 0x7f1218ac; // 2131892396
|
||||
public static final int tgs_token_reset_menu = 0x7f1218ad; // 2131892397
|
||||
public static final int update_err = 0x7f1218ae; // 2131892398
|
||||
public static final int update_latest = 0x7f1218af; // 2131892399
|
||||
public static final int APKTOOL_DUMMY_18a9 = 0x7f1218a9; // 2131892393
|
||||
}
|
||||
|
||||
public static final class style {
|
||||
|
||||
@@ -0,0 +1,505 @@
|
||||
package com.vtosters.lite.api.execute;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.RectF;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import com.vk.api.base.utils.ApiUtils;
|
||||
import com.vk.core.network.Network;
|
||||
import com.vk.core.util.AppContextHolder;
|
||||
import com.vk.core.util.Screen;
|
||||
import com.vk.dto.common.data.VKList;
|
||||
import com.vk.dto.gift.GiftItem;
|
||||
import com.vk.dto.group.Group;
|
||||
import com.vk.dto.newsfeed.entries.ProfilesRecommendations;
|
||||
import com.vk.dto.photo.Photo;
|
||||
import com.vk.dto.user.UserProfile;
|
||||
import com.vk.dto.user.deactivation.UserDeactivation;
|
||||
import com.vtosters.lite.api.ExtendedUserProfile;
|
||||
import com.vtosters.lite.auth.VKAccountManager;
|
||||
import com.vtosters.lite.utils.Utils;
|
||||
import okhttp3.Headers;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.hooks.OnlineFormatterHook;
|
||||
import ru.vtosters.hooks.RenameHook;
|
||||
import ru.vtosters.hooks.ssfs.ProfileHook;
|
||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GetFullUserProfile extends GetFullProfile<ExtendedUserProfile> {
|
||||
private static final OkHttpClient mClient = VtOkHttpClient.getInstance();
|
||||
|
||||
public GetFullUserProfile(int i, String str, String str2) {
|
||||
super(i, "execute.getFullProfileNewNew");
|
||||
i = i == 0 ? VKAccountManager.d().D0() : i;
|
||||
b("user_id", i);
|
||||
b("func_v", 23); // 11
|
||||
this.F = i;
|
||||
if (!TextUtils.isEmpty(str2)) {
|
||||
c("source", str2);
|
||||
}
|
||||
b("photo_sizes", 1);
|
||||
b("skip_hidden", 1);
|
||||
if (TextUtils.isEmpty(str)) {
|
||||
return;
|
||||
}
|
||||
c("access_keys", str);
|
||||
}
|
||||
|
||||
public JSONArray getCitiesNames(String ids) {
|
||||
var request = new Request.a()
|
||||
.b("https://" + ProxyUtils.getApi() + "/method/" + "database.getCitiesById"
|
||||
+ "?v=5.119"
|
||||
+ "&city_ids="
|
||||
+ ids
|
||||
+ "&access_token="
|
||||
+ AccountManagerUtils.getUserToken())
|
||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
||||
|
||||
try {
|
||||
return new JSONObject(mClient.a(request).execute().a().g()).getJSONArray("response");
|
||||
} catch (JSONException | IOException e) {
|
||||
Log.d(this.getClass().getSimpleName(), e.toString());
|
||||
}
|
||||
|
||||
return new JSONArray();
|
||||
}
|
||||
|
||||
public JSONArray getCountriesNames(String ids) {
|
||||
var request = new Request.a()
|
||||
.b("https://" + ProxyUtils.getApi() + "/method/" + "database.getCountriesById"
|
||||
+ "?v=5.119"
|
||||
+ "&country_ids="
|
||||
+ ids
|
||||
+ "&access_token="
|
||||
+ AccountManagerUtils.getUserToken())
|
||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
||||
|
||||
try {
|
||||
return new JSONObject(mClient.a(request).execute().a().g()).getJSONArray("response");
|
||||
} catch (JSONException | IOException e) {
|
||||
Log.d(this.getClass().getSimpleName(), e.toString());
|
||||
}
|
||||
|
||||
return new JSONArray();
|
||||
}
|
||||
|
||||
|
||||
protected ExtendedUserProfile o() {
|
||||
return new ExtendedUserProfile();
|
||||
}
|
||||
|
||||
@SuppressLint("ResourceType")
|
||||
public void a(ExtendedUserProfile extendedUserProfile, JSONObject jSONObject) throws JSONException {
|
||||
char c;
|
||||
RenameHook.injectIntoJson(jSONObject);
|
||||
JSONObject onlineHook = OnlineFormatterHook.onlineHook(jSONObject);
|
||||
UserProfile userProfile = extendedUserProfile.a;
|
||||
int i = onlineHook.getInt("id");
|
||||
this.F = i;
|
||||
userProfile.b = i;
|
||||
ProfileHook.fetchInfo(extendedUserProfile, onlineHook);
|
||||
|
||||
extendedUserProfile.a.c = onlineHook.getString("first_name");
|
||||
extendedUserProfile.a.e = onlineHook.getString("last_name");
|
||||
extendedUserProfile.a.d = extendedUserProfile.a.c + " " + extendedUserProfile.a.e;
|
||||
extendedUserProfile.a.f = onlineHook.getString(Screen.a() > 1.0f ? "photo_medium_rec" : "photo_rec");
|
||||
extendedUserProfile.a.h = onlineHook.getInt("friend_status") == 3;
|
||||
extendedUserProfile.j = onlineHook.optString("photo_max", onlineHook.getString("photo_medium_rec"));
|
||||
extendedUserProfile.m = onlineHook.optString("activity", "");
|
||||
extendedUserProfile.a.g = onlineHook.getInt("sex") == 1;
|
||||
extendedUserProfile.a.E = UserProfile.d(jSONObject);
|
||||
|
||||
if (onlineHook.has("crop_photo")) {
|
||||
extendedUserProfile.k = new Photo(onlineHook.getJSONObject("crop_photo").getJSONObject("photo"));
|
||||
JSONObject jSONObject2 = onlineHook.getJSONObject("crop_photo").getJSONObject("rect");
|
||||
JSONObject jSONObject3 = onlineHook.getJSONObject("crop_photo").getJSONObject("crop");
|
||||
double d = jSONObject3.getDouble("x");
|
||||
double d2 = jSONObject3.getDouble("x2");
|
||||
double d3 = jSONObject3.getDouble("y");
|
||||
double d4 = jSONObject3.getDouble("y2");
|
||||
double d5 = jSONObject2.getDouble("x");
|
||||
double d6 = jSONObject2.getDouble("x2");
|
||||
double d7 = jSONObject2.getDouble("y");
|
||||
double d8 = (d2 - d) / 100.0d;
|
||||
double d9 = (d4 - d3) / 100.0d;
|
||||
double d10 = (d / 100.0d) + ((d5 / 100.0d) * d8);
|
||||
double d11 = (d3 / 100.0d) + ((d7 / 100.0d) * d9);
|
||||
extendedUserProfile.l = new RectF((float) d10, (float) d11, (float) (d10 + (((d6 - d5) / 100.0d) * d8)), (float) (d11 + (((jSONObject2.getDouble("y2") - d7) / 100.0d) * d9)));
|
||||
}
|
||||
|
||||
SparseArray<String> sparseArray = new SparseArray<>();
|
||||
SparseArray<String> sparseArray2 = new SparseArray<>();
|
||||
|
||||
if (onlineHook.has("cities") && onlineHook.getJSONArray("cities").length() > 0) {
|
||||
List<String> cityNames = new ArrayList<>();
|
||||
|
||||
JSONArray cities = onlineHook.getJSONArray("cities");
|
||||
|
||||
for (int i21 = 0; i21 < cities.length(); i21++) {
|
||||
cityNames.add(cities.getString(i21));
|
||||
}
|
||||
|
||||
JSONArray citiesNamesJSONArray = getCitiesNames(String.join(", ", cityNames));
|
||||
|
||||
Log.d(this.getClass().getSimpleName(), citiesNamesJSONArray.toString());
|
||||
|
||||
for (int i22 = 0; i22 < citiesNamesJSONArray.length(); i22++) {
|
||||
JSONObject cityJSONObject = citiesNamesJSONArray.getJSONObject(i22);
|
||||
int cityid = cityJSONObject.getInt("id");
|
||||
String cityTitle = cityJSONObject.getString("title");
|
||||
sparseArray.put(cityid, cityTitle);
|
||||
}
|
||||
|
||||
extendedUserProfile.i0 = sparseArray.get(cities.getInt(0));
|
||||
}
|
||||
|
||||
if (onlineHook.has("countries") && onlineHook.getJSONArray("countries").length() > 0) {
|
||||
JSONArray countries = onlineHook.getJSONArray("countries");
|
||||
List<String> countryList = new ArrayList<>();
|
||||
|
||||
for (int i23 = 0; i23 < countries.length(); i23++) {
|
||||
countryList.add(countries.getString(i23));
|
||||
}
|
||||
|
||||
JSONArray countryInfo = getCountriesNames(String.join(", ", countryList));
|
||||
|
||||
Log.d(this.getClass().getSimpleName(), countryInfo.toString());
|
||||
|
||||
for (int i24 = 0; i24 < countryInfo.length(); i24++) {
|
||||
JSONObject country = countryInfo.getJSONObject(i24);
|
||||
int countryid = country.getInt("id");
|
||||
String countryTitle = country.getString("title");
|
||||
sparseArray2.put(countryid, countryTitle);
|
||||
}
|
||||
|
||||
extendedUserProfile.j0 = sparseArray2.get(countries.getInt(0));
|
||||
}
|
||||
|
||||
extendedUserProfile.U = onlineHook.getInt("can_write_private_message") == 1;
|
||||
extendedUserProfile.X = onlineHook.getInt("can_post") == 1;
|
||||
extendedUserProfile.Y = onlineHook.optInt("can_suggest") == 1;
|
||||
extendedUserProfile.V = onlineHook.optInt("can_see_all_posts") == 1;
|
||||
extendedUserProfile.f0 = onlineHook.optInt("can_see_archived_posts") == 1;
|
||||
extendedUserProfile.a0 = "all".equals(onlineHook.optString("wall_default"));
|
||||
extendedUserProfile.W = onlineHook.optBoolean("can_call", false);
|
||||
extendedUserProfile.Z = onlineHook.optInt("blacklisted_by_me") == 1;
|
||||
|
||||
if (onlineHook.optInt("blacklisted") == 1) {
|
||||
extendedUserProfile.Y0 = new ExtendedUserProfile.c();
|
||||
}
|
||||
|
||||
extendedUserProfile.u = onlineHook.optInt("relation");
|
||||
if (onlineHook.has("relation_partner")) {
|
||||
extendedUserProfile.v = onlineHook.getJSONObject("relation_partner").getInt("id");
|
||||
extendedUserProfile.w = onlineHook.getJSONObject("relation_partner").getString("first_name") + " " + onlineHook.getJSONObject("relation_partner").getString("last_name");
|
||||
}
|
||||
|
||||
if (onlineHook.has("bdate")) {
|
||||
String string = onlineHook.getString("bdate");
|
||||
extendedUserProfile.a.I = string;
|
||||
String[] split = string.split("\\.");
|
||||
extendedUserProfile.s = Integer.parseInt(split[0]);
|
||||
extendedUserProfile.t = Integer.parseInt(split[1]);
|
||||
if (split.length > 2) {
|
||||
extendedUserProfile.r = Integer.parseInt(split[2]);
|
||||
}
|
||||
}
|
||||
|
||||
extendedUserProfile.d = onlineHook.optString("first_name_dat", extendedUserProfile.a.c);
|
||||
extendedUserProfile.b = onlineHook.optString("first_name_gen", extendedUserProfile.a.c);
|
||||
extendedUserProfile.c = onlineHook.optString("first_name_ins", extendedUserProfile.a.c);
|
||||
extendedUserProfile.h = onlineHook.optString("first_name_acc", extendedUserProfile.a.c);
|
||||
extendedUserProfile.g = onlineHook.optString("last_name_dat", extendedUserProfile.a.e);
|
||||
extendedUserProfile.e = onlineHook.optString("last_name_gen", extendedUserProfile.a.e);
|
||||
extendedUserProfile.f = onlineHook.optString("last_name_ins", extendedUserProfile.a.e);
|
||||
|
||||
String optString = onlineHook.optString("last_name_acc", extendedUserProfile.a.e);
|
||||
extendedUserProfile.i = optString;
|
||||
|
||||
if (onlineHook.has("mobile_phone") && !onlineHook.getString("mobile_phone").isEmpty()) {
|
||||
extendedUserProfile.l0 = onlineHook.getString("mobile_phone");
|
||||
}
|
||||
|
||||
if (onlineHook.has("home_phone") && !onlineHook.getString("home_phone").isEmpty()) {
|
||||
extendedUserProfile.m0 = onlineHook.getString("home_phone");
|
||||
}
|
||||
|
||||
if (onlineHook.has("skype")) {
|
||||
extendedUserProfile.n0 = onlineHook.getString("skype");
|
||||
}
|
||||
|
||||
if (onlineHook.has("twitter")) {
|
||||
extendedUserProfile.o0 = onlineHook.getString("twitter");
|
||||
}
|
||||
|
||||
if (onlineHook.has("livejournal")) {
|
||||
extendedUserProfile.r0 = onlineHook.getString("livejournal");
|
||||
}
|
||||
|
||||
if (onlineHook.has("facebook") && onlineHook.optLong("facebook", -1L) != -1) {
|
||||
extendedUserProfile.q0 = onlineHook.getLong("facebook");
|
||||
extendedUserProfile.p0 = onlineHook.getString("facebook_name");
|
||||
}
|
||||
|
||||
if (onlineHook.has("instagram")) {
|
||||
extendedUserProfile.u0 = onlineHook.getString("instagram");
|
||||
}
|
||||
|
||||
extendedUserProfile.R0 = onlineHook.getInt("friend_status");
|
||||
JSONArray optJSONArray = onlineHook.optJSONArray("schools");
|
||||
extendedUserProfile.v0 = new ArrayList<>();
|
||||
|
||||
ArrayList arrayList = null;
|
||||
if (optJSONArray != null) {
|
||||
for (int i4 = 0; i4 < optJSONArray.length(); i4++) {
|
||||
ExtendedUserProfile.f fVar = new ExtendedUserProfile.f();
|
||||
JSONObject jSONObject6 = optJSONArray.getJSONObject(i4);
|
||||
fVar.c = sparseArray.get(jSONObject6.optInt(optString));
|
||||
fVar.a = jSONObject6.optString("name", "???");
|
||||
fVar.g = jSONObject6.optInt("year_from");
|
||||
fVar.f = jSONObject6.optInt("year_to");
|
||||
fVar.h = jSONObject6.optInt("year_graduated");
|
||||
fVar.b = jSONObject6.optString("class", null);
|
||||
fVar.d = jSONObject6.optString("speciality", null);
|
||||
fVar.e = jSONObject6.optString("type_str", AppContextHolder.a.getResources().getString(2131889117));
|
||||
extendedUserProfile.v0.add(fVar);
|
||||
}
|
||||
}
|
||||
extendedUserProfile.w0 = new ArrayList<>();
|
||||
|
||||
JSONArray optJSONArray2 = onlineHook.optJSONArray("universities");
|
||||
if (optJSONArray2 != null) {
|
||||
for (int i5 = 0; i5 < optJSONArray2.length(); i5++) {
|
||||
ExtendedUserProfile.g gVar = new ExtendedUserProfile.g();
|
||||
JSONObject jSONObject7 = optJSONArray2.getJSONObject(i5);
|
||||
gVar.a = jSONObject7.getString("name").trim();
|
||||
if (jSONObject7.has("faculty_name")) {
|
||||
gVar.b = jSONObject7.getString("faculty_name").trim();
|
||||
}
|
||||
if (jSONObject7.has("chair_name")) {
|
||||
gVar.c = jSONObject7.getString("chair_name").trim();
|
||||
}
|
||||
gVar.d = jSONObject7.optInt("graduation");
|
||||
extendedUserProfile.w0.add(gVar);
|
||||
}
|
||||
}
|
||||
|
||||
if (onlineHook.has("interests") && onlineHook.getString("interests").length() > 0) {
|
||||
extendedUserProfile.y0 = onlineHook.getString("interests");
|
||||
}
|
||||
|
||||
if (onlineHook.has("movies") && onlineHook.getString("movies").length() > 0) {
|
||||
extendedUserProfile.A0 = onlineHook.getString("movies");
|
||||
}
|
||||
|
||||
if (onlineHook.has("music") && onlineHook.getString("music").length() > 0) {
|
||||
extendedUserProfile.z0 = onlineHook.getString("music");
|
||||
}
|
||||
|
||||
if (onlineHook.has("tv") && onlineHook.getString("tv").length() > 0) {
|
||||
extendedUserProfile.B0 = onlineHook.getString("tv");
|
||||
}
|
||||
|
||||
if (onlineHook.has("books") && onlineHook.getString("books").length() > 0) {
|
||||
extendedUserProfile.C0 = onlineHook.getString("books");
|
||||
}
|
||||
|
||||
if (onlineHook.has("games") && onlineHook.getString("games").length() > 0) {
|
||||
extendedUserProfile.D0 = onlineHook.getString("games");
|
||||
}
|
||||
|
||||
if (onlineHook.has("about") && onlineHook.getString("about").length() > 0) {
|
||||
extendedUserProfile.F0 = onlineHook.getString("about");
|
||||
}
|
||||
|
||||
if (onlineHook.has("quotes") && onlineHook.getString("quotes").length() > 0) {
|
||||
extendedUserProfile.E0 = onlineHook.getString("quotes");
|
||||
}
|
||||
|
||||
if (onlineHook.has("activities") && onlineHook.getString("activities").length() > 0) {
|
||||
extendedUserProfile.x0 = onlineHook.getString("activities");
|
||||
}
|
||||
|
||||
if (onlineHook.has("home_town") && onlineHook.getString("home_town").length() > 0) {
|
||||
extendedUserProfile.g0 = onlineHook.getString("home_town");
|
||||
}
|
||||
|
||||
if (onlineHook.has("site") && onlineHook.getString("site").length() > 0) {
|
||||
extendedUserProfile.M = onlineHook.getString("site");
|
||||
}
|
||||
|
||||
extendedUserProfile.a.Q.b(onlineHook);
|
||||
|
||||
JSONObject optJSONObject = onlineHook.optJSONObject("personal");
|
||||
if (optJSONObject != null) {
|
||||
JSONArray optJSONArray3 = optJSONObject.optJSONArray("langs");
|
||||
|
||||
if (optJSONArray3 != null) {
|
||||
ArrayList arrayList2 = new ArrayList<>();
|
||||
for (int i6 = 0; i6 < optJSONArray3.length(); i6++) {
|
||||
arrayList2.add(optJSONArray3.getString(i6));
|
||||
}
|
||||
extendedUserProfile.G0 = TextUtils.join(", ", arrayList2);
|
||||
}
|
||||
|
||||
extendedUserProfile.J0 = optJSONObject.optInt("political");
|
||||
extendedUserProfile.H0 = optJSONObject.optString("religion");
|
||||
extendedUserProfile.K0 = optJSONObject.optInt("life_main");
|
||||
extendedUserProfile.L0 = optJSONObject.optInt("people_main");
|
||||
extendedUserProfile.I0 = optJSONObject.optString("inspired_by");
|
||||
extendedUserProfile.M0 = optJSONObject.optInt("smoking");
|
||||
extendedUserProfile.N0 = optJSONObject.optInt("alcohol");
|
||||
}
|
||||
|
||||
SparseArray sparseArray3 = new SparseArray();
|
||||
JSONArray optJSONArray4 = onlineHook.optJSONArray("relatives_profiles");
|
||||
if (optJSONArray4 != null) {
|
||||
for (int i7 = 0; i7 < optJSONArray4.length(); i7++) {
|
||||
UserProfile userProfile2 = new UserProfile(optJSONArray4.getJSONObject(i7));
|
||||
sparseArray3.put(userProfile2.b, userProfile2);
|
||||
}
|
||||
}
|
||||
|
||||
JSONArray optJSONArray5 = onlineHook.optJSONArray("relatives");
|
||||
if (optJSONArray5 != null) {
|
||||
ArrayList arrayList3 = null;
|
||||
ArrayList arrayList4 = null;
|
||||
ArrayList arrayList5 = null;
|
||||
ArrayList arrayList6 = null;
|
||||
for (int i8 = 0; i8 < optJSONArray5.length(); i8++) {
|
||||
JSONObject jSONObject8 = optJSONArray5.getJSONObject(i8);
|
||||
int i9 = jSONObject8.getInt("id");
|
||||
if (ApiUtils.a(sparseArray3, i9)) {
|
||||
String valueOf = jSONObject8.getString("type");
|
||||
switch (valueOf.hashCode()) {
|
||||
case -995424086 -> {
|
||||
if (valueOf.equals("parent")) {
|
||||
c = 4;
|
||||
break;
|
||||
}
|
||||
c = 65535;
|
||||
}
|
||||
case -268316490 -> {
|
||||
if (valueOf.equals("grandparent")) {
|
||||
c = 1;
|
||||
break;
|
||||
}
|
||||
c = 65535;
|
||||
}
|
||||
case 94631196 -> {
|
||||
if (valueOf.equals("child")) {
|
||||
c = 2;
|
||||
break;
|
||||
}
|
||||
c = 65535;
|
||||
}
|
||||
case 395180944 -> {
|
||||
if (valueOf.equals("grandchild")) {
|
||||
c = 0;
|
||||
break;
|
||||
}
|
||||
c = 65535;
|
||||
}
|
||||
case 2083595970 -> {
|
||||
if (valueOf.equals("sibling")) {
|
||||
c = 3;
|
||||
break;
|
||||
}
|
||||
c = 65535;
|
||||
}
|
||||
default -> c = 65535;
|
||||
}
|
||||
switch (c) {
|
||||
case 0 -> arrayList6 = Utils.a(arrayList6, sparseArray3.get(i9));
|
||||
case 1 -> arrayList5 = Utils.a(arrayList5, sparseArray3.get(i9));
|
||||
case 2 -> arrayList4 = Utils.a(arrayList4, sparseArray3.get(i9));
|
||||
case 3 -> arrayList3 = Utils.a(arrayList3, sparseArray3.get(i9));
|
||||
case 4 -> arrayList = Utils.a(arrayList, sparseArray3.get(i9));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extendedUserProfile.A = Utils.a((ArrayList<UserProfile>) arrayList, UserProfile.CREATOR);
|
||||
extendedUserProfile.B = Utils.a((ArrayList<UserProfile>) arrayList3, UserProfile.CREATOR);
|
||||
extendedUserProfile.C = Utils.a((ArrayList<UserProfile>) arrayList4, UserProfile.CREATOR);
|
||||
extendedUserProfile.D = Utils.a((ArrayList<UserProfile>) arrayList5, UserProfile.CREATOR);
|
||||
extendedUserProfile.E = Utils.a((ArrayList<UserProfile>) arrayList6, UserProfile.CREATOR);
|
||||
}
|
||||
|
||||
JSONObject optJSONObject2 = onlineHook.optJSONObject("owner_state");
|
||||
if (optJSONObject2 != null) {
|
||||
extendedUserProfile.q = UserDeactivation.CREATOR.a(optJSONObject2);
|
||||
}
|
||||
|
||||
JSONObject optJSONObject3 = onlineHook.optJSONObject("gifts");
|
||||
if (optJSONObject3 != null) {
|
||||
extendedUserProfile.y1 = new VKList<>(optJSONObject3, GiftItem.C);
|
||||
}
|
||||
|
||||
JSONArray optJSONArray6 = onlineHook.optJSONArray("friends");
|
||||
if (optJSONArray6 != null) {
|
||||
extendedUserProfile.H = new ArrayList<>();
|
||||
for (int i10 = 0; i10 < optJSONArray6.length(); i10++) {
|
||||
extendedUserProfile.H.add(new UserProfile(optJSONArray6.getJSONObject(i10)));
|
||||
}
|
||||
}
|
||||
|
||||
if (onlineHook.has("career")) {
|
||||
extendedUserProfile.I = new ArrayList<>();
|
||||
JSONArray jSONArray3 = onlineHook.getJSONArray("career");
|
||||
for (int i11 = 0; i11 < jSONArray3.length(); i11++) {
|
||||
JSONObject jSONObject9 = jSONArray3.getJSONObject(i11);
|
||||
ExtendedUserProfile.e eVar = new ExtendedUserProfile.e();
|
||||
if (jSONObject9.has("group")) {
|
||||
eVar.a = new Group(jSONObject9.getJSONObject("group"));
|
||||
} else {
|
||||
eVar.c = jSONObject9.getString("company");
|
||||
}
|
||||
eVar.e = jSONObject9.optInt("from");
|
||||
eVar.f = jSONObject9.optInt("until");
|
||||
eVar.d = jSONObject9.optString("position");
|
||||
extendedUserProfile.I.add(eVar);
|
||||
}
|
||||
}
|
||||
|
||||
if (onlineHook.has("display_fields")) {
|
||||
JSONArray jSONArray4 = onlineHook.getJSONArray("display_fields");
|
||||
extendedUserProfile.j1 = new ArrayList<>();
|
||||
for (int i12 = 0; i12 < jSONArray4.length(); i12++) {
|
||||
extendedUserProfile.j1.add(jSONArray4.getString(i12));
|
||||
}
|
||||
}
|
||||
|
||||
extendedUserProfile.u1 = onlineHook.getBoolean("all_photos_are_hidden");
|
||||
JSONObject optJSONObject4 = onlineHook.optJSONObject("friends_recommendations");
|
||||
if (optJSONObject4 != null) {
|
||||
extendedUserProfile.J = getFriendsRecomms(optJSONObject4);
|
||||
}
|
||||
}
|
||||
|
||||
public ProfilesRecommendations getFriendsRecomms(JSONObject json) {
|
||||
try {
|
||||
Method method = ProfilesRecommendations.class.getDeclaredMethod("b", JSONObject.class);
|
||||
return (ProfilesRecommendations) method.invoke(null, json);
|
||||
} catch (Exception e) {
|
||||
Log.d(this.getClass().getSimpleName(), e.toString());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public GetFullProfile.a a(JSONObject jSONObject) {
|
||||
return super.a(jSONObject);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.vtosters.lite.R;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -115,14 +116,20 @@ public class OnlineFormatterHook {
|
||||
return AndroidUtils.getString(R.string.custom_online) + " " + appname;
|
||||
}
|
||||
|
||||
public static JSONObject onlineHook(JSONObject json) throws ParseException, IOException, JSONException {
|
||||
if (getBoolValue("onlinefix", false)) JsonInjectors.setOnlineInfo(json);
|
||||
public static JSONObject onlineHook(JSONObject json) {
|
||||
if (!getBoolValue("onlinefix", false) || Preferences.serverFeaturesDisable()) return json;
|
||||
|
||||
try {
|
||||
JsonInjectors.setOnlineInfo(json);
|
||||
} catch (JSONException e) {
|
||||
Log.e("onlineHook", e.getMessage());
|
||||
}
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
public static JSONArray onlineHookList(JSONArray jsonArr) throws ParseException, IOException, JSONException {
|
||||
if (!getBoolValue("onlinefix", false)) return jsonArr;
|
||||
public static JSONArray onlineHookList(JSONArray jsonArr) {
|
||||
if (!getBoolValue("onlinefix", false) || Preferences.serverFeaturesDisable()) return jsonArr;
|
||||
|
||||
try {
|
||||
JsonInjectors.setOnlineInfoUsers(jsonArr);
|
||||
@@ -134,7 +141,7 @@ public class OnlineFormatterHook {
|
||||
}
|
||||
|
||||
public static JSONObject onlineHookProfiles(JSONObject json) {
|
||||
if (!getBoolValue("onlinefix", false)) return json;
|
||||
if (!getBoolValue("onlinefix", false) || Preferences.serverFeaturesDisable()) return json;
|
||||
|
||||
try {
|
||||
JsonInjectors.setOnlineInfoUsers(json.optJSONArray("profiles"));
|
||||
@@ -146,7 +153,7 @@ public class OnlineFormatterHook {
|
||||
}
|
||||
|
||||
public static JSONObject onlineHookItems(JSONObject json) {
|
||||
if (!getBoolValue("onlinefix", false)) return json;
|
||||
if (!getBoolValue("onlinefix", false) || Preferences.serverFeaturesDisable()) return json;
|
||||
|
||||
try {
|
||||
JsonInjectors.setOnlineInfoUsers(json.optJSONArray("items"));
|
||||
@@ -157,8 +164,8 @@ public class OnlineFormatterHook {
|
||||
return json;
|
||||
}
|
||||
|
||||
public static JSONObject onlineHookRequestsAndRecommendations(JSONObject json) throws ParseException, IOException, JSONException {
|
||||
if (!getBoolValue("onlinefix", false)) return json;
|
||||
public static JSONObject onlineHookRequestsAndRecommendations(JSONObject json) {
|
||||
if (!getBoolValue("onlinefix", false) || Preferences.serverFeaturesDisable()) return json;
|
||||
|
||||
try {
|
||||
JsonInjectors.setOnlineInfoUsers(json.optJSONObject("read_requests").optJSONArray("items"));
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package ru.vtosters.hooks;
|
||||
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
public class TabletHook {
|
||||
public static boolean hook() {
|
||||
return AndroidUtils.isTablet() && !Preferences.getBoolValue("disableForceTabletMode", false);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package ru.vtosters.hooks;
|
||||
|
||||
import com.vk.dto.common.VerifyInfo;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
import ru.vtosters.lite.utils.VTVerifications;
|
||||
|
||||
import static ru.vtosters.hooks.other.Preferences.getBoolValue;
|
||||
@@ -20,7 +21,7 @@ public class VerificationsHook {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!getBoolValue("VT_Verification", true) || getBoolValue("serverFeaturesDisable", false)) {
|
||||
if (!getBoolValue("VT_Verification", true) || Preferences.serverFeaturesDisable()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -32,7 +33,7 @@ public class VerificationsHook {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!getBoolValue("VT_Fire", true) || getBoolValue("serverFeaturesDisable", false)) {
|
||||
if (!getBoolValue("VT_Fire", true) || Preferences.serverFeaturesDisable()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -242,6 +242,10 @@ public class Preferences {
|
||||
return getBoolValue("autoalltranslate", false);
|
||||
}
|
||||
|
||||
public static boolean serverFeaturesDisable() {
|
||||
return getBoolValue("serverFeaturesDisable", false);
|
||||
}
|
||||
|
||||
public static boolean shortinfo() {
|
||||
return getBoolValue("shortinfo", true);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package ru.vtosters.lite.music.cache;
|
||||
|
||||
import android.os.RemoteException;
|
||||
import android.text.TextUtils;
|
||||
import bruhcollective.itaysonlab.libvkx.ILibVkxService;
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClientImpl;
|
||||
@@ -17,7 +18,7 @@ public class MusicCacheImpl {
|
||||
track.y1(),
|
||||
track.I != null ? track.I.getId() + "" : "-1",
|
||||
track.f,
|
||||
track.g,
|
||||
!TextUtils.isEmpty(track.g) ? track.g : "",
|
||||
track.C,
|
||||
track.I != null ? track.I.getTitle() : "",
|
||||
track.K,
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
package ru.vtosters.lite.music.converter.ts;
|
||||
|
||||
import com.arthenica.ffmpegkit.FFmpegKit;
|
||||
import com.vk.dto.music.Artist;
|
||||
import com.vk.dto.music.MusicTrack;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
import ru.vtosters.lite.music.downloader.M3UDownloader;
|
||||
import ru.vtosters.lite.utils.IOUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.Normalizer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class FFMpeg {
|
||||
|
||||
@@ -13,47 +19,26 @@ public class FFMpeg {
|
||||
* @param track Track to be converted
|
||||
* @return True if success, else false
|
||||
*/
|
||||
public static void convert(File in, String out, MusicTrack track) throws Throwable {
|
||||
public static void convert(File in, String out, MusicTrack track) {
|
||||
// convert .ts file to .mp3 file via ffmpeg
|
||||
var cmd = " -y -i \"" + in.getAbsolutePath() + '"'
|
||||
+ " -map 0 -dn"
|
||||
+ " -loglevel error"
|
||||
+ " -hide_banner"
|
||||
+ " -write_id3v2 1"
|
||||
// +" -metadata title=\""+IOUtils.getValidFileName(M3UDownloader.getTitle(track))+'"'
|
||||
// +" -metadata artist=\""+normalizeMetadata(track.L.stream().map(Artist::w1).collect(Collectors.joining(", ")))+'"'
|
||||
// +" -metadata album=\""+normalizeMetadata(track.I.getTitle())+'"'
|
||||
+ setMetadata(track)
|
||||
+ " -c copy \"" + out + '"';
|
||||
var ses = FFmpegKit.execute(cmd);
|
||||
if (ses.getReturnCode().isValueCancel()) throw new RuntimeException(ses.getLogsAsString());
|
||||
}
|
||||
|
||||
private static String normalizeMetadata(String in) {
|
||||
return in.replace('"', '‟');
|
||||
private static String setMetadata(MusicTrack track) {
|
||||
return Preferences.getBoolValue("setMetaData", false) ? " -metadata title=\"" + IOUtils.getValidFileName(M3UDownloader.getTitle(track)) + '"'
|
||||
+ " -metadata artist=\"" + normalizeMetadata(track.L.stream().map(Artist::w1).collect(Collectors.joining(", "))) + '"'
|
||||
+ " -metadata album=\"" + normalizeMetadata(track.I.getTitle()) + '"' : "";
|
||||
}
|
||||
|
||||
// private static void copyAssets()
|
||||
// throws IOException
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// for (var filename:AndroidUtils.getGlobalContext().getAssets().list("ffmpeg"))
|
||||
// if(filename.endsWith(".so"))
|
||||
// IOUtils.writeToFile(
|
||||
// new File(AndroidUtils.getGlobalContext().getFilesDir(),filename),
|
||||
// IOUtils.readFully(AndroidUtils.getGlobalContext().getAssets().open("ffmpeg"+File.separator+filename)));
|
||||
// }
|
||||
// catch(IOException e)
|
||||
// { throw e; }
|
||||
// }
|
||||
//
|
||||
// private static void checkFFMpegLibs()
|
||||
// {
|
||||
// var lib=new File(AndroidUtils.getGlobalContext().getFilesDir(),"libffmpegkit_abidetect.so");
|
||||
// if(!lib.exists())
|
||||
// {
|
||||
// ToastUtils.a(R.string.ffmpegkit_copy);
|
||||
// copyAssets();
|
||||
// }
|
||||
// }
|
||||
private static String normalizeMetadata(String in) {
|
||||
return in.replaceAll("[\\\\/:*?\"<>|]", "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,25 +48,23 @@ public class M3UDownloader
|
||||
var resultMp3 = getResultMp3File(outDir, cache, track);
|
||||
try {
|
||||
CompletableFuture.allOf(createFutures(baseUri, segments, progress, callback, track))
|
||||
.thenRun(() ->
|
||||
{
|
||||
if (cache)
|
||||
.thenRun(() -> {
|
||||
if (cache) {
|
||||
try {
|
||||
ThumbnailDownloader.downloadThumbnails(track);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to download thumbs", e);
|
||||
}
|
||||
}
|
||||
})
|
||||
.thenRun(() ->
|
||||
{
|
||||
.thenRun(() -> {
|
||||
try {
|
||||
TSMerger.merge(getTsesDir(track), resultTs);
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException("Failed to merge ts files", e);
|
||||
}
|
||||
})
|
||||
.thenRun(() ->
|
||||
{
|
||||
.thenRun(() -> {
|
||||
try {
|
||||
FFMpeg.convert(resultTs, resultMp3.getAbsolutePath(), track);
|
||||
} catch (Throwable e) {
|
||||
@@ -74,12 +72,18 @@ public class M3UDownloader
|
||||
}
|
||||
})
|
||||
.thenRun(() -> callback.onProgress(10 + Math.round(80.0f * progress.addAndGet(1) / segments.size())))
|
||||
.thenRun(() -> MusicCacheImpl.addTrack(track))
|
||||
.thenRun(() -> {
|
||||
if (cache) {
|
||||
MusicCacheImpl.addTrack(track);
|
||||
}
|
||||
})
|
||||
.whenComplete((unused, tr) -> {
|
||||
if (tr != null) {
|
||||
IOUtils.deleteRecursive(MusicCacheStorageUtils.getTrackDirById(track.y1()));
|
||||
callback.onFailure();
|
||||
} else callback.onSuccess();
|
||||
} else {
|
||||
callback.onSuccess();
|
||||
}
|
||||
IOUtils.deleteRecursive(getTsesDir(track));
|
||||
})
|
||||
.join();
|
||||
@@ -132,7 +136,7 @@ public class M3UDownloader
|
||||
}
|
||||
|
||||
public static String getTitle(MusicTrack track) {
|
||||
return track.f + (!TextUtils.isEmpty(track.g) ? +'(' + track.g + ')' : null);
|
||||
return track.f + (!TextUtils.isEmpty(track.g) ? + '(' + track.g + ')' : "");
|
||||
}
|
||||
|
||||
static File getTsesDir(MusicTrack track) {
|
||||
|
||||
@@ -8,6 +8,7 @@ import okhttp3.Response;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
@@ -27,7 +28,7 @@ public class UsersList {
|
||||
public static void getUsersList() {
|
||||
var prefs = AndroidUtils.getGlobalContext().getSharedPreferences("vt_another_data", 0);
|
||||
|
||||
if ((!NetworkUtils.isNetworkConnected() || NetworkUtils.isInternetSlow()) && prefs.contains("ids") || getBoolValue("serverFeaturesDisable", false)) {
|
||||
if ((!NetworkUtils.isNetworkConnected() || NetworkUtils.isInternetSlow()) && prefs.contains("ids") || Preferences.serverFeaturesDisable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ public class OTADialog extends ModalBottomSheetWrapper<OTADialog> implements OTA
|
||||
public void onUpdateLatest(boolean isManualCheck) {
|
||||
if (isManualCheck) {
|
||||
mActivity.runOnUiThread(() -> {
|
||||
Toast.makeText(mActivity, "У вас установлена последняя версия приложения", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(mActivity, AndroidUtils.getString("update_latest"), Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -72,7 +72,7 @@ public class OTADialog extends ModalBottomSheetWrapper<OTADialog> implements OTA
|
||||
@Override
|
||||
public void onUpdateError() {
|
||||
mActivity.runOnUiThread(() -> {
|
||||
Toast.makeText(mActivity, "Ошибка проверки обновления", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(mActivity, AndroidUtils.getString("update_err"), Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ package ru.vtosters.lite.ui.fragments;
|
||||
import android.os.Bundle;
|
||||
import androidx.preference.Preference;
|
||||
import com.vtosters.lite.R;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
|
||||
import static ru.vtosters.hooks.other.Preferences.getBoolValue;
|
||||
import static ru.vtosters.hooks.other.Preferences.offline;
|
||||
|
||||
public class ActivityFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||
@@ -12,6 +14,7 @@ public class ActivityFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||
super.onCreate(bundle);
|
||||
addPreferencesFromResource(R.xml.preferences_activity);
|
||||
findPreference("setoffline").setEnabled(offline());
|
||||
findPreference("onlinefixcategory").setVisible(!Preferences.serverFeaturesDisable());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -304,8 +304,8 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme
|
||||
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||
getPreferenceScreen(),
|
||||
"serverFeaturesDisable",
|
||||
"Отключить всю работу с сервером",
|
||||
"Отключает галочки и все дополнительные функции связанные с получением данных с сервера ВТостерс",
|
||||
AndroidUtils.getString("serverFeaturesDisable"),
|
||||
AndroidUtils.getString("serverFeaturesDisable_summ"),
|
||||
null,
|
||||
false,
|
||||
(preference, o) -> {
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||
import com.vtosters.lite.R;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
public class InstallGMSFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
@@ -13,7 +14,7 @@ public class InstallGMSFragment extends TrackedMaterialPreferenceToolbarFragment
|
||||
addPreferencesFromResource(R.xml.preferences_gms);
|
||||
|
||||
findPreference("microg").setOnPreferenceClickListener((preference) -> {
|
||||
String[] items = {"Уменьшенный MicroG (ReVanced)", "Альтернативный MicroG (ReVanced)", "Полноценный MicroG (Замена GMS)"};
|
||||
String[] items = {AndroidUtils.getString("microg_dialog1"), AndroidUtils.getString("microg_dialog2"), AndroidUtils.getString("microg_dialog3")};
|
||||
|
||||
new VkAlertDialog.Builder(requireActivity()).setItems(items, (dialog, which) -> {
|
||||
switch (which) {
|
||||
|
||||
@@ -67,6 +67,13 @@ public class InterfaceFragment extends TrackedMaterialPreferenceToolbarFragment
|
||||
findPreference("showmenu").setVisible(false);
|
||||
}
|
||||
|
||||
var tablet = findPreference("disableForceTabletMode");
|
||||
tablet.setVisible(AndroidUtils.isTablet());
|
||||
tablet.setOnPreferenceClickListener(preference -> {
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
return true;
|
||||
});
|
||||
|
||||
findPreference("customrounding").setOnPreferenceClickListener(preference -> {
|
||||
RoundingSeekbarDialog.dialog(getContext());
|
||||
return true;
|
||||
|
||||
@@ -112,9 +112,9 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||
return true;
|
||||
});
|
||||
|
||||
findPreference("VT_Verification").setVisible(!getBoolValue("serverFeaturesDisable", false));
|
||||
findPreference("VT_Fire").setVisible(!getBoolValue("serverFeaturesDisable", false));
|
||||
findPreference("updateverifdata").setVisible(!getBoolValue("serverFeaturesDisable", false));
|
||||
findPreference("VT_Verification").setVisible(!Preferences.serverFeaturesDisable());
|
||||
findPreference("VT_Fire").setVisible(!Preferences.serverFeaturesDisable());
|
||||
findPreference("updateverifdata").setVisible(!Preferences.serverFeaturesDisable());
|
||||
|
||||
var vkAdminTokenPref = findPreference("vk_admin_token");
|
||||
vkAdminTokenPref.setVisible(Preferences.getPreferences().getBoolean("new_music_downloading_way", false));
|
||||
|
||||
@@ -196,14 +196,14 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
}
|
||||
|
||||
if ((isLinksUnverified || isDozingAvailable || areNotificationsDisabled || isGMSNotInstalled) && !Preferences.getBoolValue("dialogrecomm", false)) {
|
||||
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Рекомендации");
|
||||
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), AndroidUtils.getString("sett_recommendations"));
|
||||
|
||||
if (isGMSNotInstalled) {
|
||||
PreferenceFragmentUtils.addPreference(
|
||||
getPreferenceScreen(),
|
||||
"",
|
||||
requireContext().getString(R.string.installgms),
|
||||
"Отсутствие этих сервисов приводит к поломке фоновых уведомлений и проблемам работы компонентов приложения",
|
||||
AndroidUtils.getString("sett_nogms_summ"),
|
||||
RecolorUtils.recolorDrawable(R.drawable.ic_logo_google_28, ThemesUtils.getColor(R.color.red)),
|
||||
preference -> {
|
||||
NavigatorUtils.switchFragment(requireContext(), InstallGMSFragment.class);
|
||||
@@ -216,8 +216,8 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
PreferenceFragmentUtils.addPreference(
|
||||
getPreferenceScreen(),
|
||||
"",
|
||||
"Не выбраны ссылки для открытия приложением",
|
||||
"Это помешает открытию внешних ссылок для их открытия с помощью этого приложения\n\nВ некоторых случаях необходимо отключить открытие ссылок официальным приложениям ВКонтакте",
|
||||
AndroidUtils.getString("sett_missing_links"),
|
||||
AndroidUtils.getString("sett_missing_links_summ"),
|
||||
RecolorUtils.recolorDrawable(R.drawable.ic_linked_outline_28, ThemesUtils.getColor(R.color.red)),
|
||||
preference -> {
|
||||
try {
|
||||
@@ -240,8 +240,8 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
PreferenceFragmentUtils.addPreference(
|
||||
getPreferenceScreen(),
|
||||
"",
|
||||
"Отключите экономию батареи",
|
||||
"Экономия батареи мешает получению фоновых сообщений, уведомлений и работе музыки" + (OEMDetector.isMIUI() ? "\n\nДля устройств Xiaomi необходимо вручную включить в настройках системы пункт Автозапуск данному приложению" : ""),
|
||||
AndroidUtils.getString("sett_battery"),
|
||||
AndroidUtils.getString("sett_battery_summ1") + (OEMDetector.isMIUI() ? AndroidUtils.getString("sett_battery_summ2") : ""),
|
||||
RecolorUtils.recolorDrawable(R.drawable.ic_filter_outline_28, ThemesUtils.getColor(R.color.red)),
|
||||
preference -> {
|
||||
@SuppressLint("BatteryLife")
|
||||
@@ -258,8 +258,8 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
PreferenceFragmentUtils.addPreference(
|
||||
getPreferenceScreen(),
|
||||
"",
|
||||
"Включите уведомления",
|
||||
"Без включенных уведомлений не получится получать сообщения и многое другое",
|
||||
AndroidUtils.getString("sett_notifs"),
|
||||
AndroidUtils.getString("sett_notifs_summ"),
|
||||
RecolorUtils.recolorDrawable(R.drawable.ic_notifications_outline_28, ThemesUtils.getColor(R.color.red)),
|
||||
preference -> {
|
||||
@SuppressLint("BatteryLife")
|
||||
@@ -616,8 +616,8 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
PreferenceFragmentUtils.addPreference(
|
||||
getPreferenceScreen(),
|
||||
"",
|
||||
"Наши чаты",
|
||||
"Активные чаты по обсуждению модификации и многому другому",
|
||||
AndroidUtils.getString("sett_chats"),
|
||||
AndroidUtils.getString("sett_chats_summ"),
|
||||
R.drawable.ic_message_outline_28,
|
||||
preference -> {
|
||||
var args = new Bundle();
|
||||
@@ -635,8 +635,8 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
PreferenceFragmentUtils.addPreference(
|
||||
getPreferenceScreen(),
|
||||
"",
|
||||
"Наши сообщества",
|
||||
"Самая свежая информация об обновлениях и не только!",
|
||||
AndroidUtils.getString("sett_community"),
|
||||
AndroidUtils.getString("sett_community_summ"),
|
||||
R.drawable.users_3_outline_28,
|
||||
preference -> {
|
||||
var args = new Bundle();
|
||||
@@ -693,8 +693,8 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
||||
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||
getPreferenceScreen(),
|
||||
"autoupdates",
|
||||
"Автоматическое обновление",
|
||||
"Получать уведомление о выходе новой версии приложения",
|
||||
AndroidUtils.getString("sett_autoupdates"),
|
||||
AndroidUtils.getString("sett_autoupdates_summ"),
|
||||
R.drawable.ic_history_outline_28,
|
||||
true,
|
||||
(preference, o) -> {
|
||||
|
||||
@@ -55,15 +55,15 @@ public class StickersFragment extends BaseToolbarFragment {
|
||||
};
|
||||
|
||||
private static void resetToken(Context ctx) {
|
||||
if (TGPref.getTGBotKey() == null) AndroidUtils.sendToast("Токен отсутствует");
|
||||
if (TGPref.getTGBotKey() == null) AndroidUtils.sendToast(AndroidUtils.getString("tgs_token_missing"));
|
||||
new VkAlertDialog.Builder(ctx)
|
||||
.setTitle("Сбросить токен бота?")
|
||||
.setTitle(AndroidUtils.getString("tgs_token_reset_dialog"))
|
||||
.setNegativeButton(R.string.cancel, (dialog, which) -> {
|
||||
dialog.cancel();
|
||||
})
|
||||
.setPositiveButton(R.string.ok, (dialog, which) -> {
|
||||
TGPref.setTGBotKey(null);
|
||||
AndroidUtils.sendToast("Токен бота сброшен");
|
||||
AndroidUtils.sendToast(AndroidUtils.getString("tgs_token_reset"));
|
||||
})
|
||||
.show();
|
||||
}
|
||||
@@ -75,7 +75,7 @@ public class StickersFragment extends BaseToolbarFragment {
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
menu.add(0, 1, 0, "")
|
||||
.setIcon(ThemesUtils.recolorDrawable(requireContext().getDrawable(R.drawable.ic_refresh_outline_28)))
|
||||
.setTitle("Сбросить токен бота")
|
||||
.setTitle(AndroidUtils.getString("tgs_token_reset_menu"))
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
super.onCreateMenu(menu);
|
||||
}
|
||||
|
||||
@@ -12,13 +12,14 @@ import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
import com.vk.core.util.Screen;
|
||||
import com.vk.core.util.ToastUtils;
|
||||
import com.vtosters.lite.general.fragments.WebViewFragment;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -32,6 +33,12 @@ import java.util.Random;
|
||||
|
||||
public class AndroidUtils {
|
||||
private static final String ALLOWED_CHARACTERS = "0123456789qwertyuiopasdfghjklzxcvbnm";
|
||||
public enum ScreenSize {
|
||||
small,
|
||||
normal,
|
||||
large,
|
||||
xlarge
|
||||
}
|
||||
|
||||
public static boolean isDebuggable() {
|
||||
return 0 != (AndroidUtils.getGlobalContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE);
|
||||
@@ -44,7 +51,8 @@ public class AndroidUtils {
|
||||
}
|
||||
|
||||
public static boolean isTablet() {
|
||||
return Screen.l(getGlobalContext());
|
||||
String string = getGlobalContext().getResources().getString(b.h.g.d.screen_size);
|
||||
return TextUtils.equals(string, ScreenSize.large.name()) || TextUtils.equals(string, ScreenSize.xlarge.name());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -3,6 +3,7 @@ package ru.vtosters.lite.utils;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
|
||||
import static ru.vtosters.lite.foaf.FoafBase.getBypassedOnlineInfo;
|
||||
|
||||
@@ -13,7 +14,7 @@ public class OnlineBypass {
|
||||
return json;
|
||||
}
|
||||
var onlineinfo = json.optJSONObject("online_info");
|
||||
if (onlineinfo != null && !onlineinfo.optBoolean("visible")) {
|
||||
if (onlineinfo != null && !onlineinfo.optBoolean("visible") && !Preferences.serverFeaturesDisable()) {
|
||||
var bypassed = getBypassedOnlineInfo(id);
|
||||
if (bypassed.optInt("last_seen", 0) != 0) {
|
||||
json.remove("online_info");
|
||||
@@ -37,7 +38,7 @@ public class OnlineBypass {
|
||||
}
|
||||
|
||||
public static JSONArray setOnlineInfoUsers(JSONArray profiles) throws JSONException {
|
||||
if (profiles == null || profiles.length() == 0) return profiles;
|
||||
if (profiles == null || profiles.length() == 0 || Preferences.serverFeaturesDisable()) return profiles;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var curVkId = AccountManagerUtils.getUserId();
|
||||
for (int i = 0; i < profiles.length(); i++) {
|
||||
@@ -51,7 +52,7 @@ public class OnlineBypass {
|
||||
sb.append(",");
|
||||
}
|
||||
var ids = sb.toString();
|
||||
if (ids.length() > 0) {
|
||||
if (!ids.isEmpty()) {
|
||||
ids = ids.substring(0, ids.length() - 1);
|
||||
} else {
|
||||
return profiles;
|
||||
|
||||
@@ -7,6 +7,7 @@ import okhttp3.*;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.hooks.other.Preferences;
|
||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -31,7 +32,7 @@ public class VTVerifications {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((!NetworkUtils.isNetworkConnected() && NetworkUtils.isInternetSlow() || getBoolValue("isRoamingState", false)) && prefs.contains("ids") || getBoolValue("serverFeaturesDisable", false)) {
|
||||
if ((!NetworkUtils.isNetworkConnected() && NetworkUtils.isInternetSlow() || getBoolValue("isRoamingState", false)) && prefs.contains("ids") || Preferences.serverFeaturesDisable()) {
|
||||
parseJson(prefs.getString("ids", "[]"));
|
||||
Log.d("VTVerifications", "load from memory. Roaming or Network issues");
|
||||
isLoaded = true;
|
||||
|
||||
+1
-1
@@ -25,5 +25,5 @@ usesFramework:
|
||||
tag: null
|
||||
version: 2.6.0
|
||||
versionInfo:
|
||||
versionCode: '4838'
|
||||
versionCode: '4839'
|
||||
versionName: 5.56.1
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -6311,7 +6311,7 @@
|
||||
<string name="friendsblock_title">Схаваць сяброў</string>
|
||||
<string name="friendsblock_summ">Схаваць блок рэкамендацый сяброў у сябрах</string>
|
||||
<string name="onlineformatter_title">Пашыраны анлайн</string>
|
||||
<string name="onlineformatter_summ">Паказваць з якога прыкладання/кліента чалавек у анлайне</string>
|
||||
<string name="onlineformatter_summ">Паказваць з якога прыкладання/кліента чалавек у анлайне\n\nНапрыклад: Онлайн З дапамогай Kate Mobile</string>
|
||||
<string name="voices_vtl">Галасавыя паведамленні</string>
|
||||
<string name="disable_voice_listening_summ">Функцыя дазваляе не адпраўляць статут праслухоўвання галасавых
|
||||
паведамленняў чалавека вамі
|
||||
@@ -7034,4 +7034,34 @@
|
||||
|
||||
<string name="invertcached_title">Інвертаваць cпіс</string>
|
||||
<string name="invertcached_summ">Інвертаваць cпіс кэшаваных трэкаў</string>
|
||||
|
||||
<string name="sett_recommendations">Рэкамендацыі</string>
|
||||
<string name="sett_nogms_summ">Адсутнасць гэтых сэрвісаў прыводзіць да паломкі фонавых апавяшчэнняў і праблемах працы кампанентаў прыкладання</string>
|
||||
<string name="sett_missing_links">Не абраныя спасылкі для адкрыцця дадаткам</string>
|
||||
<string name="sett_missing_links_summ">Гэта перашкодзіць адкрыццю знешніх спасылак для іх адкрыцця з дапамогай гэтага прыкладання\n\nБ некаторых выпадках неабходна адключыць адкрыццё спасылак афіцыйным прыкладанням ВКонтакте</string>
|
||||
<string name="sett_battery">Адключыце эканомію батарэі</string>
|
||||
<string name="sett_battery_summ1">Эканомія батарэі перашкаджае атрыманню фонавых паведамленняў, апавяшчэнняў і працы музыкі</string>
|
||||
<string name="sett_battery_summ2">\n\nДля прылад Xiaomi неабходна ўручную ўключыць у наладах сістэмы пункт Аўтазапуск дадзеным дадаткам</string>
|
||||
<string name="sett_notifs">Уключыце апавяшчэння</string>
|
||||
<string name="sett_notifs_summ">Без уключаных апавяшчэнняў не атрымаецца атрымліваць паведамленні і многае іншае</string>
|
||||
<string name="sett_chats">Нашы чаты</string>
|
||||
<string name="sett_chats_summ">Актыўныя чаты па абмеркаванні мадыфікацыі і шмат чаму іншаму</string>
|
||||
<string name="sett_community">Наша група</string>
|
||||
<string name="sett_community_summ">Самая свежая інфармацыя аб абнаўленнях і не толькі</string>
|
||||
<string name="sett_autoupdates">Аўтаматычнае абнаўленне</string>
|
||||
<string name="sett_autoupdates_summ">Атрымліваць апавяшчэнне аб выхадзе новай версіі прыкладання</string>
|
||||
|
||||
<string name="update_latest">У вас ўстаноўлена АПОШНЯЯ версія прыкладання</string>
|
||||
<string name="update_err">Памылка праверкі абнаўлення</string>
|
||||
<string name="serverFeaturesDisable">Адключыць усю працу з серверам</string>
|
||||
<string name="serverFeaturesDisable_summ">Адключае верыфікацыі і ўсе дадатковыя функцыі звязаныя з атрыманнем дадзеных з сервера ВТостерс</string>
|
||||
|
||||
<string name="tgs_token_missing">Токен адсутнічае</string>
|
||||
<string name="tgs_token_reset_dialog">Скінуць токен бота?</string>
|
||||
<string name="tgs_token_reset">Токен бота скінуты</string>
|
||||
<string name="tgs_token_reset_menu">Скінуць токен бота</string>
|
||||
|
||||
<string name="microg_dialog1">Паменшаны MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog2">Альтэрнатыўны MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog3">Паўнавартасны MicroG (Замена GMS)</string>
|
||||
</resources>
|
||||
@@ -5640,7 +5640,7 @@
|
||||
<string name="friendsblock_title">Скрыть друзей</string>
|
||||
<string name="friendsblock_summ">Скрыть блок рекомендаций друзей в друзьях</string>
|
||||
<string name="onlineformatter_title">Расширенный онлайн</string>
|
||||
<string name="onlineformatter_summ">Показывать с какого приложения/клиента человек в онлайне</string>
|
||||
<string name="onlineformatter_summ">Показывать с какого приложения/клиента человек в онлайне\n\nНапример: Онлайн с помощью Kate Mobile</string>
|
||||
<string name="voices_vtl">Голосовые сообщения</string>
|
||||
<string name="disable_voice_listening_summ">Функция позволяет не отправлять статус прослушивания голосовых сообщений человека вами</string>
|
||||
<string name="listen_v_title">Отключить статус прослушивания</string>
|
||||
@@ -6417,4 +6417,34 @@
|
||||
|
||||
<string name="invertcached_title">Инвертировать список</string>
|
||||
<string name="invertcached_summ">Инвертировать список кешированных треков</string>
|
||||
|
||||
<string name="sett_recommendations">Рекомендации</string>
|
||||
<string name="sett_nogms_summ">Отсутствие этих сервисов приводит к поломке фоновых уведомлений и проблемам работы компонентов приложения</string>
|
||||
<string name="sett_missing_links">Не выбраны ссылки для открытия приложением</string>
|
||||
<string name="sett_missing_links_summ">Это помешает открытию внешних ссылок для их открытия с помощью этого приложения\n\nВ некоторых случаях необходимо отключить открытие ссылок официальным приложениям ВКонтакте</string>
|
||||
<string name="sett_battery">Отключите экономию батареи</string>
|
||||
<string name="sett_battery_summ1">Экономия батареи мешает получению фоновых сообщений, уведомлений и работе музыки</string>
|
||||
<string name="sett_battery_summ2">\n\nДля устройств Xiaomi необходимо вручную включить в настройках системы пункт Автозапуск данному приложению</string>
|
||||
<string name="sett_notifs">Включите уведомления</string>
|
||||
<string name="sett_notifs_summ">Без включенных уведомлений не получится получать сообщения и многое другое</string>
|
||||
<string name="sett_chats">Наши чаты</string>
|
||||
<string name="sett_chats_summ">Активные чаты по обсуждению модификации и многому другому</string>
|
||||
<string name="sett_community">Наши сообщества</string>
|
||||
<string name="sett_community_summ">Самая свежая информация об обновлениях и не только</string>
|
||||
<string name="sett_autoupdates">Автоматическое обновление</string>
|
||||
<string name="sett_autoupdates_summ">Получать уведомление о выходе новой версии приложения</string>
|
||||
|
||||
<string name="update_latest">У вас установлена последняя версия приложения</string>
|
||||
<string name="update_err">Ошибка проверки обновления</string>
|
||||
<string name="serverFeaturesDisable">Отключить всю работу с сервером</string>
|
||||
<string name="serverFeaturesDisable_summ">Отключает галочки и все дополнительные функции связанные с получением данных с сервера ВТостерс</string>
|
||||
|
||||
<string name="tgs_token_missing">Токен отсутствует</string>
|
||||
<string name="tgs_token_reset_dialog">Сбросить токен бота?</string>
|
||||
<string name="tgs_token_reset">Токен бота сброшен</string>
|
||||
<string name="tgs_token_reset_menu">Сбросить токен бота</string>
|
||||
|
||||
<string name="microg_dialog1">Уменьшенный MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog2">Альтернативный MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog3">Полноценный MicroG (Замена GMS)</string>
|
||||
</resources>
|
||||
@@ -5567,7 +5567,7 @@
|
||||
<string name="friendsblock_title">Приховати друзів</string>
|
||||
<string name="friendsblock_summ">Приховати блок рекомендацій друзів у друзях</string>
|
||||
<string name="onlineformatter_title">Розширений онлайн</string>
|
||||
<string name="onlineformatter_summ">Показувати з якого додатка/клієнта людина в онлайні</string>
|
||||
<string name="onlineformatter_summ">Показувати з якого додатка/клієнта людина в онлайні\n\nНаприклад: Онлайн за допомогою Kate Mobile</string>
|
||||
<string name="voices_vtl">Голосові повідомлення</string>
|
||||
<string name="disable_voice_listening_summ">Функція дозволяє не надсилати статус прослуховування голосових повідомлень вами</string>
|
||||
<string name="listen_v_title">Вимкнути статус прослуховування</string>
|
||||
@@ -6342,4 +6342,34 @@
|
||||
|
||||
<string name="invertcached_title">Інвертувати список</string>
|
||||
<string name="invertcached_summ">Інвертувати список кешованих треків</string>
|
||||
|
||||
<string name="sett_recommendations">Рекомендації</string>
|
||||
<string name="sett_nogms_summ">Відсутність цих сервісів призводить до поломки фонових сповіщень і проблем роботи компонентів застосунку</string>
|
||||
<string name="sett_missing_links">Не вибрані посилання для відкриття додатком</string>
|
||||
<string name="sett_missing_links_summ">Це завадить відкриттю зовнішніх посилань для їхнього відкриття за допомогою цього застосунку\n\пУ деяких випадках необхідно відключити відкриття посилань офіційним застосункам ВКонтакте</string>
|
||||
<string name="sett_battery">Відключіть економію батареї</string>
|
||||
<string name="sett_battery_summ1">Економія батареї заважає отриманню фонових повідомлень, сповіщень та роботі музики</string>
|
||||
<string name="sett_battery_summ2">\n\nДля пристроїв Xiaomi необхідно вручну увімкнути в налаштуваннях системи пункт Автозапуск цього додатка</string>
|
||||
<string name="sett_notifs">Увімкніть сповіщення</string>
|
||||
<string name="sett_notifs_summ">Без увімкнених сповіщень не вдасться отримувати повідомлення та багато іншого</string>
|
||||
<string name="sett_chats">Наші чати</string>
|
||||
<string name="sett_chats_summ">Активні чати з обговорення модифікації та багато чого іншого</string>
|
||||
<string name="sett_community">Наші спільноти</string>
|
||||
<string name="sett_community_summ">Найсвіжіша інформація про оновлення і не тільки</string>
|
||||
<string name="sett_autoupdates">Автоматичне оновлення</string>
|
||||
<string name="sett_autoupdates_summ">Отримувати повідомлення про вихід нової версії застосунку</string>
|
||||
|
||||
<string name="update_latest">Вас встановлена остання версія програми</string>
|
||||
<string name="update_err">Помилка перевірки оновлення</string>
|
||||
<string name="serverFeaturesDisable">Відключити всю роботу з сервером</string>
|
||||
<string name="serverFeaturesDisable_summ">Відключає галочки і всі додаткові функції, пов\'язані з отриманням даних з сервера ВТостерс</string>
|
||||
|
||||
<string name="tgs_token_missing">Токен відсутній</string>
|
||||
<string name="tgs_token_reset_dialog">Відкинути токен бота?</string>
|
||||
<string name="tgs_token_reset">Токен бота скинуто</string>
|
||||
<string name="tgs_token_reset_menu">Скинути токен бота</string>
|
||||
|
||||
<string name="microg_dialog1">Зменшений MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog2">Альтернативний MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog3">Повноцінний MicroG (Заміна GMS)</string>
|
||||
</resources>
|
||||
|
||||
@@ -5615,7 +5615,7 @@ Warning! It can cause long downloads of user lists if there are a lot of users i
|
||||
<string name="ctypesocks">Socks</string>
|
||||
<string name="dnr">Do not read</string>
|
||||
<string name="dns">Disable status of viewing</string>
|
||||
<string name="dnw">Do not write</string>
|
||||
<string name="dnw">Do not type</string>
|
||||
<string name="docknumbers">Counters in dockbar</string>
|
||||
<string name="docknumberssum">"Disabling doesn't work in the tablet interface"</string>
|
||||
<string name="dockbar_tab_titles">Show dockbar item titles</string>
|
||||
@@ -5774,7 +5774,7 @@ You need to restart the application to apply proxy settings"</string>
|
||||
<string name="friendsblock_title">Hide friends</string>
|
||||
<string name="friendsblock_summ">Hide the block of recommendations of friends in friends section</string>
|
||||
<string name="onlineformatter_title">Extended online indicator</string>
|
||||
<string name="onlineformatter_summ">Show what app/device a person is online from</string>
|
||||
<string name="onlineformatter_summ">Show what app/device a person is online from\n\nFor example: Online using Kate Mobile</string>
|
||||
<string name="voices_vtl">Voice messages</string>
|
||||
<string name="disable_voice_listening_summ">The function allows you not to send the status of listening to the person\'s voice messages by you</string>
|
||||
<string name="listen_v_title">Disable listening status</string>
|
||||
@@ -5879,7 +5879,7 @@ May look like a fake leaving the online"</string>
|
||||
|
||||
<string name="activity_what_is_it">What is it?</string>
|
||||
<string name="activity_dnr_summary">Function lets you don\'t send read message status</string>
|
||||
<string name="activity_dnw_summary">Function lets you don\'t send write message status</string>
|
||||
<string name="activity_dnw_summary">Function lets you don\'t send type message status</string>
|
||||
<string name="activity_dns_summary">Function lets you don\'t send read stories status</string>
|
||||
|
||||
<string name="activity_dnr_visual">Visually may not work correctly (locally read), but companion will see that it wasn\'t read.</string>
|
||||
@@ -6555,4 +6555,33 @@ May look like a fake leaving the online"</string>
|
||||
|
||||
<string name="invertcached_title">Invert list</string>
|
||||
<string name="invertcached_summ">Invert cached track list</string>
|
||||
|
||||
<string name="sett_recommendations">Recommendations</string>
|
||||
<string name="sett_nogms_summ">Missing these services causes background notifications to break and application components to have problems working</string>
|
||||
<string name="sett_missing_links">There is no links selected to be opened by the application</string>
|
||||
<string name="sett_missing_links_summ">This will prevent external links from being opened by this app to open them\n\nIn some cases it is necessary to disable the opening of links to official VKontakte applications</string>
|
||||
<string name="sett_battery">Turn off power management</string>
|
||||
<string name="sett_battery_summ1">Battery savings prevents background messages, notifications and music from functioning properly</string>
|
||||
<string name="sett_battery_summ2">\n\nFor Xiaomi devices, you need to manually enable Autorun to this application in the system settings</string>
|
||||
<string name="sett_notifs">Turn on notifications</string>
|
||||
<string name="sett_notifs_summ">Without notifications enabled, you won\'t be able to receive messages and many others things</string>
|
||||
<string name="sett_chats">Our chats</string>
|
||||
<string name="sett_chats_summ">Live chats to discuss modification and more</string>
|
||||
<string name="sett_community">Our communities</string>
|
||||
<string name="sett_community_summ">Latest information about updates and more</string>
|
||||
<string name="sett_autoupdates">Autoupdate</string>
|
||||
<string name="sett_autoupdates_summ">Receive notification when a new version of the application is released</string>
|
||||
<string name="update_latest">You have the latest version of the app installed</string>
|
||||
<string name="update_err">Error checking for updates</string>
|
||||
<string name="serverFeaturesDisable">Disable all server processing</string>
|
||||
<string name="serverFeaturesDisable_summ">Disables verifications and all additional functions related to receiving data from the VTosters server</string>
|
||||
|
||||
<string name="tgs_token_missing">Token is missing</string>
|
||||
<string name="tgs_token_reset_dialog">Reset the bot token?</string>
|
||||
<string name="tgs_token_reset">The bot token has been reset</string>
|
||||
<string name="tgs_token_reset_menu">Reset the bot token</string>
|
||||
|
||||
<string name="microg_dialog1">Reduced MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog2">Alternate MicroG (ReVanced)</string>
|
||||
<string name="microg_dialog3">Full MicroG (GMS Replacement)</string>
|
||||
</resources>
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
android:key="listen_v"
|
||||
android:title="@string/listen_v_title"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vkme_online_vtl">
|
||||
<PreferenceCategory android:title="@string/vkme_online_vtl" android:key="onlinefixcategory">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="onlinefix"
|
||||
|
||||
@@ -94,6 +94,11 @@
|
||||
android:key="pollresults"
|
||||
android:summary="@string/pollresults_summ"
|
||||
android:title="@string/pollresults_title"/>
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="disableForceTabletMode"
|
||||
android:summary="Отключает интерфейс для планшетов и возвращает докбар"
|
||||
android:title="Отключить режим планшета"/>
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="friendsblock"
|
||||
|
||||
@@ -45,6 +45,11 @@
|
||||
android:entryValues="@array/musicdefcatalog"
|
||||
android:key="musicdefcatalog"
|
||||
android:title="@string/musicdefcatalog_title"/>
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="setMetaData"
|
||||
android:summary="Сохранять id3v2 теги для песен для MP3 (Экспериментально)"
|
||||
android:title="Сохранять метадату песен"/>
|
||||
<Preference
|
||||
android:key="audio_download"
|
||||
android:title="@string/audio_download_title"/>
|
||||
|
||||
@@ -354,6 +354,16 @@
|
||||
.method static a(Landroid/content/Context;Ljava/lang/String;)V
|
||||
.locals 11
|
||||
|
||||
const-string v0, "hideDeviceInfo"
|
||||
|
||||
sget-object v1, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
|
||||
|
||||
invoke-static {v0, v1}, Lru/vtosters/hooks/other/Preferences;->getBoolValue(Ljava/lang/String;Ljava/lang/Boolean;)Z
|
||||
|
||||
move-result v0
|
||||
|
||||
if-nez v0, :cond_1
|
||||
|
||||
if-eqz p0, :cond_0
|
||||
|
||||
if-eqz p1, :cond_0
|
||||
|
||||
@@ -1088,31 +1088,10 @@
|
||||
.end annotation
|
||||
.end param
|
||||
|
||||
.line 1
|
||||
invoke-static {p0}, Lcom/vk/core/util/Screen;->f(Landroid/content/Context;)Lcom/vk/core/util/Screen$ScreenSize;
|
||||
|
||||
move-result-object p0
|
||||
|
||||
invoke-virtual {p0}, Ljava/lang/Enum;->ordinal()I
|
||||
invoke-static {}, Lru/vtosters/hooks/TabletHook;->hook()Z
|
||||
|
||||
move-result p0
|
||||
|
||||
sget-object v0, Lcom/vk/core/util/Screen$ScreenSize;->normal:Lcom/vk/core/util/Screen$ScreenSize;
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/Enum;->ordinal()I
|
||||
|
||||
move-result v0
|
||||
|
||||
if-le p0, v0, :cond_0
|
||||
|
||||
const/4 p0, 0x1
|
||||
|
||||
goto :goto_0
|
||||
|
||||
:cond_0
|
||||
const/4 p0, 0x0
|
||||
|
||||
:goto_0
|
||||
return p0
|
||||
.end method
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
const-string v0, "func_v"
|
||||
|
||||
const/16 v1, 0x1b
|
||||
const/16 v1, 0x25
|
||||
|
||||
.line 3
|
||||
invoke-virtual {p0, v0, v1}, Lcom/vk/api/base/ApiRequest;->b(Ljava/lang/String;I)Lcom/vk/api/base/ApiRequest;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user