Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e12f50a7f | ||
|
|
9ff220475d | ||
|
|
2c6619a512 | ||
|
|
5ea599b61e | ||
|
|
4eea4e2011 | ||
|
|
f1a7816e69 | ||
|
|
12c01133e1 | ||
|
|
3856932a3f | ||
|
|
a10c333cc6 | ||
|
|
4d950e5c68 | ||
|
|
c72e102076 | ||
|
|
43f3df487b | ||
|
|
ca48f97d83 | ||
|
|
b69beff4d2 | ||
|
|
67401c6868 | ||
|
|
9fa8df30eb | ||
|
|
ecf896e44e | ||
|
|
58a9b69dd9 | ||
|
|
26a64545ff | ||
|
|
05c557a8f7 | ||
|
|
c8c8678785 | ||
|
|
4e6eb74a8e | ||
|
|
52cb007a67 | ||
|
|
657d038d9c | ||
|
|
de4d283f75 | ||
|
|
3b37412a58 | ||
|
|
dd6b9b32b8 | ||
|
|
31a456582b | ||
|
|
6ab317cbf5 | ||
|
|
32c469d870 | ||
|
|
e0f09cea24 |
@@ -10,7 +10,7 @@
|
||||
<a href="https://t.me/s/vtosters">
|
||||
<img src="https://img.shields.io/badge/-Telegram-blue?style=for-the-badge&logo=telegram&color=2AABEE"/>
|
||||
</a>
|
||||
<a href="https://vk.com/vtosters_official">
|
||||
<a href="https://vk.ru/vtosters_official">
|
||||
<img src="https://img.shields.io/badge/-VK-blue?style=for-the-badge&logo=vk&color=0077FF"/>
|
||||
</a>
|
||||
<a href="https://discord.gg/j9CAt3uYXj">
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
`android:debuggable="false"` ➝ `android:debuggable="true"`
|
||||
|
||||
Настройки, необходимые для **отладки** вне Android Studio, находятся по этой ссылке: [vk.com/vt/debug](https://vk.com/vt/debug)
|
||||
Настройки, необходимые для **отладки** вне Android Studio, находятся по этой ссылке: [vk.ru/vt/debug](https://vk.ru/vt/debug)
|
||||
|
||||
* Для дополнительной отладки ответов и логов необходимо включить **[Режим разработчика]**
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
Сразу после нажатия на запись приложение начнет записывать **все ваши действия** по пути `/Download/VK/logs/com.vtosters.lite/`
|
||||
|
||||
При следующем открытии приложения оно автоматически сохранит логи и отправит вам в [**Документы** ВК](https://vk.com/docs), откуда вы можете скачать архив логов и работать с ними.
|
||||
При следующем открытии приложения оно автоматически сохранит логи и отправит вам в [**Документы** ВК](https://vk.ru/docs), откуда вы можете скачать архив логов и работать с ними.
|
||||
|
||||
## Разработка
|
||||
|
||||
|
||||
@@ -35,5 +35,6 @@ public enum DialogAction {
|
||||
pinmsg,
|
||||
unpinmsg,
|
||||
ENCRYPT_SETT,
|
||||
ENCRYPT
|
||||
ENCRYPT,
|
||||
DOWNLOAD
|
||||
}
|
||||
|
||||
@@ -6,18 +6,23 @@ import static com.vk.im.engine.h.im_ic_more_vertical;
|
||||
import static com.vk.im.engine.h.im_ic_pinned_msg_hide;
|
||||
import static com.vk.im.engine.h.im_ic_pinned_msg_show;
|
||||
import static com.vk.im.engine.h.im_ic_write_msg;
|
||||
import static com.vk.im.ui.c.im_ic_chat_settings;
|
||||
import static com.vk.im.ui.c.im_ic_keyboard;
|
||||
import static ru.vtosters.lite.dnr.DNRModule.hookDNR;
|
||||
import static ru.vtosters.lite.dnr.DNRModule.hookDNT;
|
||||
import static ru.vtosters.lite.dnr.DNRModule.isDnrEnabledFor;
|
||||
import static ru.vtosters.lite.dnr.DNRModule.isDntEnabledFor;
|
||||
import static ru.vtosters.lite.encryption.EncryptProvider.decryptMessage;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
|
||||
import static ru.vtosters.lite.utils.Preferences.getDownloadsDir;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
import com.vk.core.network.Network;
|
||||
@@ -33,6 +38,7 @@ import com.vk.im.ui.components.common.MsgAction;
|
||||
import com.vk.im.ui.components.viewcontrollers.popup.DelegateMsg;
|
||||
import com.vk.im.ui.views.dialog_actions.DialogActionsListView;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
@@ -41,6 +47,7 @@ import java.util.List;
|
||||
import okhttp3.Headers;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import ru.vtosters.lite.downloaders.MessagesDownloader;
|
||||
import ru.vtosters.lite.encryption.EncryptProvider;
|
||||
import ru.vtosters.lite.encryption.base.IMProcessor;
|
||||
import ru.vtosters.lite.hooks.CryptImHook;
|
||||
@@ -55,6 +62,8 @@ public class DNRInjector {
|
||||
peerId = dialog.getId();
|
||||
}
|
||||
|
||||
list.add(DialogAction.DOWNLOAD);
|
||||
|
||||
list.add(DialogAction.pinmsg);
|
||||
list.add(DialogAction.unpinmsg);
|
||||
|
||||
@@ -78,6 +87,8 @@ public class DNRInjector {
|
||||
}
|
||||
|
||||
public static LinkedHashMap<DialogAction, Integer> injectToHashMap(LinkedHashMap<DialogAction, Integer> hashMap) {
|
||||
hashMap.put(DialogAction.DOWNLOAD, getIdentifier("download_dl", "string"));
|
||||
|
||||
hashMap.put(DialogAction.DNR_ON, getIdentifier("DNR_ON", "string"));
|
||||
hashMap.put(DialogAction.DNR_OFF, getIdentifier("DNR_OFF", "string"));
|
||||
hashMap.put(DialogAction.DNT_ON, getIdentifier("DNT_ON", "string"));
|
||||
@@ -94,6 +105,7 @@ public class DNRInjector {
|
||||
@SuppressLint("ResourceType")
|
||||
public static List<Object> injectToList(List<Object> actions) {
|
||||
var list = new ArrayList<>(actions);
|
||||
list.add(new DialogActionsListView.b.a(DialogAction.DOWNLOAD, 1, getIdentifier("im_ic_msgdl", "attr"), getIdentifier("download_dl", "string"))); // DialogAction, Int, Icon, String
|
||||
|
||||
list.add(new DialogActionsListView.b.a(DialogAction.DNR_ON, 2, im_ic_pinned_msg_hide, getIdentifier("DNR_ON", "string"))); // DialogAction, Int, Icon, String
|
||||
list.add(new DialogActionsListView.b.a(DialogAction.DNR_OFF, 2, im_ic_pinned_msg_show, getIdentifier("DNR_OFF", "string"))); // DialogAction, Int, Icon, String
|
||||
@@ -122,6 +134,8 @@ public class DNRInjector {
|
||||
peerId = dialog.getId();
|
||||
}
|
||||
|
||||
actions.add(DialogAction.DOWNLOAD);
|
||||
|
||||
if (isDnrEnabledFor(peerId)) {
|
||||
actions.add(DialogAction.DNR_OFF);
|
||||
} else {
|
||||
@@ -156,6 +170,17 @@ public class DNRInjector {
|
||||
forceInvalidateDialogActions(dialog);
|
||||
}
|
||||
|
||||
if (action == DialogAction.DOWNLOAD) {
|
||||
File out = new File(Environment.getExternalStoragePublicDirectory(getDownloadsDir().getName()), "dialog-" + peerId + ".html");
|
||||
try {
|
||||
new MessagesDownloader().downloadDialog(peerId, new MessagesDownloader.HtmlDialogDownloaderFormatProvider(), out);
|
||||
} catch (Exception e) {
|
||||
sendToast(getString("download_dl_error"));
|
||||
e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (action == DialogAction.DNR_ON) {
|
||||
setDnr(dialog, true);
|
||||
forceInvalidateDialogActions(dialog);
|
||||
@@ -198,6 +223,16 @@ public class DNRInjector {
|
||||
DNRModule.hookRead(dialog);
|
||||
}
|
||||
|
||||
if (action == DialogAction.DOWNLOAD) {
|
||||
File out = new File(Environment.getExternalStoragePublicDirectory(getDownloadsDir().getPath()), peerId + "-dialog.html");
|
||||
try {
|
||||
new MessagesDownloader().downloadDialog(peerId, new MessagesDownloader.HtmlDialogDownloaderFormatProvider(), out);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (action == DialogAction.DNR_ON) {
|
||||
setDnr(dialog, true);
|
||||
return true;
|
||||
@@ -264,13 +299,13 @@ public class DNRInjector {
|
||||
|
||||
if (action == MsgAction.valueOf("TRANSLATE")) {
|
||||
if (isTextExist && isReplyExist) {
|
||||
Translate.showTranslatedText(context, text + "\n\n" + AndroidUtils.getString("translator_reply") + "\n" + reply);
|
||||
Translate.showTranslatedText(context, text + "\n\n" + getString("translator_reply") + "\n" + reply);
|
||||
} else if (isReplyExist) {
|
||||
Translate.showTranslatedText(context, AndroidUtils.getString("translator_reply") + "\n" + reply);
|
||||
Translate.showTranslatedText(context, getString("translator_reply") + "\n" + reply);
|
||||
} else if (isTextExist) {
|
||||
Translate.showTranslatedText(context, text);
|
||||
} else {
|
||||
sendToast(AndroidUtils.getString("translator_no_text"));
|
||||
sendToast(getString("translator_no_text"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -281,7 +316,7 @@ public class DNRInjector {
|
||||
Thread thread = new Thread(() -> {
|
||||
try {
|
||||
var request = new Request.a()
|
||||
.b("https://api.vk.com/method/" + (needToBePinned ? "messages.pinConversation" : "messages.unpinConversation") + "?peer_id=" + dialogid + "&access_token=" + getUserToken() + "&v=5.119")
|
||||
.b("https://" + getApi() + "/method/" + (needToBePinned ? "messages.pinConversation" : "messages.unpinConversation") + "?peer_id=" + dialogid + "&access_token=" + getUserToken() + "&v=5.119")
|
||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
|
||||
.a();
|
||||
|
||||
@@ -298,7 +333,7 @@ public class DNRInjector {
|
||||
|
||||
thread.start();
|
||||
|
||||
sendToast(AndroidUtils.getString("pin_dialog") + " " + (needToBePinned ? AndroidUtils.getString("dialog_pinned") : AndroidUtils.getString("dialog_unpinned")));
|
||||
sendToast(getString("pin_dialog") + " " + getString(needToBePinned ? "dialog_pinned" : "dialog_unpinned"));
|
||||
}
|
||||
|
||||
public static void setDnr(Dialog dialog, boolean value) {
|
||||
|
||||
@@ -0,0 +1,549 @@
|
||||
package ru.vtosters.lite.downloaders;
|
||||
import static ru.vtosters.lite.encryption.EncryptProvider.decryptMessage;
|
||||
import static ru.vtosters.lite.net.Request.makeRequest;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserId;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getResources;
|
||||
|
||||
import android.util.SparseArray;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class MessagesDownloader{
|
||||
private static SimpleDateFormat sdformat;
|
||||
|
||||
private static SparseArray<MiniUser> usersArray;
|
||||
|
||||
public static String formatTime(long now){
|
||||
return sdformat.format(new Date(now));
|
||||
}
|
||||
|
||||
public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements){
|
||||
Objects.requireNonNull(delimiter);
|
||||
Objects.requireNonNull(elements);
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
for (CharSequence cs : elements) {
|
||||
builder.append(cs).append(delimiter);
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public void downloadDialog(int peer_id, DialogDownloaderFormatProvider format, File out) throws Exception{
|
||||
sdformat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss", getResources().getConfiguration().locale);
|
||||
|
||||
FileOutputStream fos = new FileOutputStream(out);
|
||||
|
||||
// fix TODO with conversation name (API method messages.getConversationsById)
|
||||
fos.write(format.provideDocumentStart("TODO", formatTime(System.currentTimeMillis())).getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
fetchDialogInfo(peer_id, 0, ((users, messages) -> {
|
||||
try {
|
||||
fos.write(format.provideHeader("TODO", formatTime(System.currentTimeMillis())).getBytes(StandardCharsets.UTF_8));
|
||||
for (MiniMsg msg : messages) {
|
||||
fos.write(format.provideMessage(msg, users.get(msg.fromId)).getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
fos.write(format.provideDocumentEnd().getBytes(StandardCharsets.UTF_8));
|
||||
fos.close();
|
||||
Toast.makeText(getGlobalContext(), "Сохранено как " + out.getAbsolutePath(), Toast.LENGTH_SHORT).show();
|
||||
} catch (IOException | JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public void fetchDialogInfo(int peer_id, int offset, FetchListener fl){
|
||||
makeRequest("https://" + getApi() + "/method/messages.getHistory?extended=1&v=5.140&offset=" + offset + "&count=200&peer_id=" + peer_id + "&access_token=" + getUserToken(),
|
||||
response -> {
|
||||
try {
|
||||
JSONObject mainJson = new JSONObject(response);
|
||||
JSONObject obj = mainJson.getJSONObject("response");
|
||||
|
||||
SparseArray<MiniUser> users = new SparseArray<>();
|
||||
parseUsers(users, obj.optJSONArray("profiles"), false);
|
||||
parseUsers(users, obj.optJSONArray("groups"), true);
|
||||
|
||||
List<MiniMsg> msgs = parseMessages(obj.getJSONArray("items"));
|
||||
|
||||
usersArray = users;
|
||||
|
||||
fl.onReceive(users, msgs);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private List<MiniMsg> parseMessages(JSONArray jsonArray) throws JSONException{
|
||||
ArrayList<MiniMsg> thing = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
MiniMsg msg = new MiniMsg(jsonArray.getJSONObject(i));
|
||||
thing.add(msg);
|
||||
}
|
||||
|
||||
return thing;
|
||||
}
|
||||
|
||||
private void parseUsers(SparseArray<MiniUser> array, @Nullable JSONArray jsonArray, boolean groups) throws JSONException{
|
||||
if (jsonArray == null) return;
|
||||
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
MiniUser user = new MiniUser(jsonArray.getJSONObject(i), groups);
|
||||
array.put(groups ? -user.id : user.id, user);
|
||||
}
|
||||
}
|
||||
|
||||
interface FetchListener{
|
||||
void onReceive(SparseArray<MiniUser> users, List<MiniMsg> messages);
|
||||
}
|
||||
|
||||
static class MiniUser{
|
||||
public String firstName;
|
||||
public String lastName;
|
||||
public boolean isGroup;
|
||||
int id;
|
||||
String photo100;
|
||||
|
||||
public MiniUser(JSONObject obj, boolean is_group) throws JSONException {
|
||||
id = obj.getInt("id");
|
||||
firstName = obj.optString("first_name", obj.optString("name"));
|
||||
lastName = obj.optString("last_name", "");
|
||||
photo100 = obj.getString("photo_100");
|
||||
isGroup = is_group;
|
||||
}
|
||||
}
|
||||
|
||||
static class MiniMsg{
|
||||
long date;
|
||||
int fromId;
|
||||
int id; // message id
|
||||
String text;
|
||||
List<JSONObject> attachments;
|
||||
List<JSONObject> fwd_messages;
|
||||
JSONObject reply_message; // one reply
|
||||
JSONObject chat_action;
|
||||
JSONObject geo;
|
||||
|
||||
public MiniMsg(JSONObject obj) throws JSONException{
|
||||
date = obj.getLong("date") * 1000;
|
||||
fromId = obj.getInt("from_id");
|
||||
id = obj.getInt("id");
|
||||
text = decryptMessage(obj.getString("text"), obj.getInt("peer_id"));
|
||||
reply_message = obj.optJSONObject("reply_message");
|
||||
chat_action = obj.optJSONObject("action");
|
||||
geo = obj.optJSONObject("geo");
|
||||
|
||||
attachments = new ArrayList<>();
|
||||
fwd_messages = new ArrayList<>();
|
||||
|
||||
JSONArray arr = obj.optJSONArray("attachments");
|
||||
if (arr != null)
|
||||
for (int i = 0; i < arr.length(); i++) attachments.add(arr.getJSONObject(i));
|
||||
|
||||
JSONArray fwdArr = obj.optJSONArray("fwd_messages");
|
||||
if (fwdArr != null)
|
||||
for (int i = 0; i < fwdArr.length(); i++) fwd_messages.add(fwdArr.getJSONObject(i));
|
||||
}
|
||||
}
|
||||
|
||||
// This class defines everything which is needed to create an output file
|
||||
abstract static class DialogDownloaderFormatProvider{
|
||||
// Internal, for JSON/HTML
|
||||
abstract String provideDocumentStart(String dialogName, String date);
|
||||
|
||||
abstract String provideDocumentEnd();
|
||||
|
||||
abstract String provideHeader(String dialogName, String date);
|
||||
|
||||
abstract String provideMessage(MiniMsg message, MiniUser user) throws JSONException;
|
||||
}
|
||||
|
||||
public static class HtmlDialogDownloaderFormatProvider extends DialogDownloaderFormatProvider{
|
||||
@Override
|
||||
String provideDocumentStart(String dialogName, String date){
|
||||
String style = ".vtex-milk-msg {\n" +
|
||||
" border-radius: 8px;\n" +
|
||||
" padding: 24px;\n" +
|
||||
" background: white;\n" +
|
||||
" margin: 16px;\n" +
|
||||
" box-shadow: 0 4px 8px 0 rgba(0,0,0,0.07);\n" +
|
||||
" word-wrap: break-word;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".vtex-milk-msgcont br {\n" +
|
||||
" display: none;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".vtex-milk-msg p {\n" +
|
||||
" margin: 0;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".vtex-milk-msg.vtex-milk-msg-out {\n" +
|
||||
" background: #ADD3FF;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"p.msg-attaches {\n" +
|
||||
" margin-top: 8px;\n" +
|
||||
" font-style: italic;\n" +
|
||||
"}\n" +
|
||||
"p.chat-action {\n" +
|
||||
" font-style: italic;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".vtex-milk-header {\n" +
|
||||
" border-radius: 8px;\n" +
|
||||
" padding: 24px;\n" +
|
||||
" background: white;\n" +
|
||||
" margin: 16px;\n" +
|
||||
" box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"h4.vtex-milk-header-txt {\n" +
|
||||
" margin: 0;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"h5.vtex-milk-header-sub {\n" +
|
||||
" margin: 0;\n" +
|
||||
" padding-top: 8px;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"a.msg-attach-link {\n" +
|
||||
" color: #5181B8;\n" +
|
||||
" text-decoration: none;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".msg-from a {\n" +
|
||||
" color: #5181B8;\n" +
|
||||
" text-decoration: none;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".msg-from-date {\n" +
|
||||
" color: rgba(0, 0, 0, 0.75);\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"body {\n" +
|
||||
" font-family: Roboto, system-ui, sans-serif;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
".msg-body {\n" +
|
||||
" padding-top: 4px;\n" +
|
||||
"}\n" +
|
||||
".msg-reply {\n" +
|
||||
" border-left: 3px solid #7aa7f6;\n" +
|
||||
" margin-top: 5px;\n" +
|
||||
" padding-left: 3px;\n" +
|
||||
"}\n\n" +
|
||||
".msg-reply p {\n" +
|
||||
" padding-left: 5px;\n" +
|
||||
"}\n\n" +
|
||||
".msg-reply p.reply-header {\n" +
|
||||
" color: #5181B8;\n" +
|
||||
"}\n\n" +
|
||||
".msg-reply p.reply-content {\n" +
|
||||
" color: #000000;\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"";
|
||||
|
||||
return "<html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><meta charset=\"utf-8\"><title>Экспорт из VTLite</title><style>" + style + "</style></head><body>";
|
||||
}
|
||||
|
||||
@Override
|
||||
String provideDocumentEnd(){
|
||||
return "</div></body></html>";
|
||||
}
|
||||
|
||||
@Override
|
||||
String provideHeader(String dialogName, String date){
|
||||
return "<div class=\"vtex-milk-header\"><h4 class=\"vtex-milk-header-txt\">VTLite</h4><h5 class=\"vtex-milk-header-sub\">Экспорт истории чата (" + date + ")</h5></div><div class=\"vtex-milk-msgcont\">";
|
||||
}
|
||||
|
||||
@Override
|
||||
String provideMessage(MiniMsg message, MiniUser user) throws JSONException{
|
||||
String isOut = (user.id == getUserId()) ? " vtex-milk-msg-out" : "";
|
||||
String geoPosition = "";
|
||||
if (message.geo != null) {
|
||||
var coordinates = message.geo.optJSONObject("coordinates");
|
||||
if (coordinates != null) {
|
||||
var latitude = coordinates.optDouble("latitude");
|
||||
var longitude = coordinates.optDouble("longitude");
|
||||
var ll = longitude + "," + latitude;
|
||||
geoPosition = "<a href=\"https://yandex.ru/maps/?ll=" + ll + "&mode=search&sll=" + ll + "&text=" + latitude + "," + longitude + "&z=12\">" +
|
||||
"<img src=\"https://static-maps.yandex.ru/1.x/?ll=" + longitude + "," + latitude + "&z=12&l=map&size=300,200&pt=" + ll + ",vkgrm\"/>" +
|
||||
"</a>";
|
||||
}
|
||||
}
|
||||
String chatAction = (message.chat_action != null) ? getHtmlForChatAction(message.chat_action) : "";
|
||||
String attaches = (message.attachments.size() > 0) ? "<p class=\"msg-attaches\">Вложения: " + getHtmlForAttach(message.attachments) + "</p>" : "";
|
||||
String reply = (message.reply_message != null) ? provideReply(message.reply_message) : "";
|
||||
String fwdMessages = (message.fwd_messages.size() > 0) ? provideForwardMessages(message.fwd_messages) : "";
|
||||
String userLink = (user.isGroup ? "club" : "id") + user.id;
|
||||
|
||||
return "<div class=\"vtex-milk-msg" + isOut + "\" id=\"" + message.id + "\">" +
|
||||
"<p class=\"msg-from\">от <a href=\"https://vk.ru/" + userLink + "\">" + user.firstName + " " + user.lastName + "</a> <span class=\"msg-from-date\">" + formatTime(message.date) + "</span></p>" + // TODO photo100
|
||||
"<p class=\"msg-body\">" + mentionsReplace(message.text) + "</p>" +
|
||||
geoPosition +
|
||||
chatAction +
|
||||
attaches +
|
||||
reply +
|
||||
fwdMessages +
|
||||
"</div>";
|
||||
}
|
||||
|
||||
private String provideReply(JSONObject replyMessage) {
|
||||
var messageId = replyMessage.optInt("id");
|
||||
var userId = replyMessage.optInt("from_id");
|
||||
var peerId = replyMessage.optInt("peer_id");
|
||||
var text = mentionsReplace(decryptMessage(replyMessage.optString("text"), peerId));
|
||||
var fwdMessages = replyMessage.optJSONArray("fwd_messages");
|
||||
|
||||
var user = usersArray.get(userId);
|
||||
|
||||
if (text.isEmpty()) {
|
||||
if (fwdMessages != null) {
|
||||
var length = fwdMessages.length();
|
||||
if (length > 0) text = length + " " + pluralMsg(length);
|
||||
} else text = "Вложение";
|
||||
}
|
||||
|
||||
return "<a href=\"#" + messageId + "\" class=\"msg-attach-link\">" +
|
||||
"<div class=\"msg-reply\">" +
|
||||
"<p class=\"reply-header\">Пересланное сообщение</p>" +
|
||||
"<p class=\"reply-content\">" + user.firstName + " " + user.lastName + ": " + text + "</p>" +
|
||||
"</div>" +
|
||||
"</a>";
|
||||
}
|
||||
|
||||
private String provideForwardMessages(List<JSONObject> fwd_messages) throws JSONException {
|
||||
StringBuilder fwdmsgs = new StringBuilder("<div class=\"msg-reply\">");
|
||||
|
||||
for (JSONObject fwd_message : fwd_messages) {
|
||||
|
||||
if (fwd_message == null) continue;
|
||||
|
||||
List<JSONObject> attaches = new ArrayList<>();
|
||||
|
||||
JSONArray arr = fwd_message.optJSONArray("attachments");
|
||||
if (arr != null) {
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
try {
|
||||
attaches.add(arr.getJSONObject(i));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<JSONObject> fwdsMsg = new ArrayList<>();
|
||||
|
||||
JSONArray fwd_msgs = fwd_message.optJSONArray("fwd_messages");
|
||||
if (fwd_msgs != null) {
|
||||
for (int i = 0; i < fwd_msgs.length(); i++) {
|
||||
try {
|
||||
fwdsMsg.add(fwd_msgs.getJSONObject(i));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
JSONObject reply_message = fwd_message.optJSONObject("reply_message");
|
||||
|
||||
var attachesHtml = (attaches.size() > 0) ? "Вложения: " + getHtmlForAttach(attaches) : "";
|
||||
var replyHtml = (reply_message != null) ? provideReply(reply_message) : "";
|
||||
var fwdsHtml = (fwdsMsg.size() > 0) ? provideForwardMessages(fwdsMsg) : ""; // recursion XD :>
|
||||
|
||||
var userId = fwd_message.optInt("from_id");
|
||||
var peerId = fwd_message.optInt("peer_id");
|
||||
var text = mentionsReplace(decryptMessage(fwd_message.optString("text"), peerId));
|
||||
|
||||
var userLink = ((userId < 0) ? "club" : "id") + Math.abs(userId);
|
||||
|
||||
fwdmsgs.append("<p class=\"reply-content\"><a class=\"msg-attach-link\" href=\"https://vk.ru/").append(userLink).append("\">@").append(userLink).append("</a>: ").append(text).append(attachesHtml).append(replyHtml).append(fwdsHtml);
|
||||
}
|
||||
|
||||
return fwdmsgs.append("</div>").toString();
|
||||
}
|
||||
|
||||
private String mentionsReplace(String text) {
|
||||
var matcher = Pattern.compile("\\[((?:club|id|public)\\d+)\\|([^]]+)\\]").matcher(text);
|
||||
|
||||
return matcher.replaceAll("<a class=\"msg-attach-link\" href=\"https://vk.ru/$1\">$2</a>");
|
||||
}
|
||||
|
||||
private String pluralMsg(int count) {
|
||||
String[] plurals = {"сообщение", "сообщения", "сообщений"};
|
||||
|
||||
var hundredModulo = count % 100;
|
||||
var tenModulo = count % 10;
|
||||
|
||||
if (hundredModulo > 10 && hundredModulo < 20) return plurals[2];
|
||||
else if (tenModulo > 1 && tenModulo < 5) return plurals[1];
|
||||
else if (tenModulo == 1) return plurals[0];
|
||||
|
||||
return plurals[2];
|
||||
}
|
||||
|
||||
private String getHtmlForChatAction(JSONObject action) {
|
||||
var type = action.optString("type");
|
||||
|
||||
StringBuilder htmlAction = new StringBuilder("<p class=\"chat-action\">");
|
||||
|
||||
switch(type) {
|
||||
case "chat_photo_update":
|
||||
htmlAction.append("Обновил фотографию беседы");
|
||||
break;
|
||||
case "chat_photo_remove":
|
||||
htmlAction.append("Удалил фотографию беседы");
|
||||
break;
|
||||
case "chat_create":
|
||||
var name = action.optString("text");
|
||||
htmlAction.append("Создал беседу").append((!name.isEmpty()) ? " с названием \"" + name + "\"" : "");
|
||||
break;
|
||||
case "chat_title_update":
|
||||
var newName = action.optString("text");
|
||||
htmlAction.append("Сменил название беседы").append((!newName.isEmpty()) ? " на \"" + newName : "\"");
|
||||
break;
|
||||
case "chat_invite_user":
|
||||
var newUserId = action.optInt("member_id");
|
||||
htmlAction.append("Добавил ").append((newUserId > 0) ? "пользователя" : "группу");
|
||||
if (newUserId != 0) {
|
||||
var userLink = ((newUserId < 0) ? "club" : "id") + Math.abs(newUserId);
|
||||
htmlAction.append(" <a href=\"https://vk.ru/").append(userLink).append("\" class=\"msg-attach-link\">@").append(userLink).append("</a>");
|
||||
}
|
||||
break;
|
||||
case "chat_kick_user":
|
||||
var removedUserId = action.optInt("member_id");
|
||||
htmlAction.append("Исключил ").append((removedUserId > 0) ? "пользователя" : "группу");
|
||||
if (removedUserId != 0) {
|
||||
var userLink = ((removedUserId < 0) ? "club" : "id") + Math.abs(removedUserId);
|
||||
htmlAction.append(" <a href=\"https://vk.ru/").append(userLink).append("\" class=\"msg-attach-link\">@").append(userLink).append("</a>");
|
||||
}
|
||||
break;
|
||||
case "chat_pin_message":
|
||||
var message = action.optString("message");
|
||||
htmlAction.append("Закрепил сообщение").append((!message.isEmpty()) ? (" с текстом: \"" + message + "\"") : "");
|
||||
break;
|
||||
case "chat_unpin_message":
|
||||
htmlAction.append("Открепил сообщение");
|
||||
break;
|
||||
case "chat_invite_user_by_link":
|
||||
htmlAction.append("Вступил в беседу по ссылке");
|
||||
break;
|
||||
case "chat_screenshot":
|
||||
htmlAction.append("Сделал скриншот беседы");
|
||||
break;
|
||||
case "custom":
|
||||
htmlAction.append(action.optString("message"));
|
||||
break;
|
||||
default:
|
||||
htmlAction.append("Действие не поддерживается (").append(type).append(")");
|
||||
break;
|
||||
}
|
||||
|
||||
return htmlAction.append("</p>").toString();
|
||||
}
|
||||
|
||||
/*
|
||||
TODO:
|
||||
1) poll (опросы)
|
||||
2) mini_app (поделиться миниаппом)
|
||||
3) audio_playlist (плейлист песен)
|
||||
4) story (история)
|
||||
5) wall_reply (комментарий на стене)
|
||||
6) podcast (подкаст)
|
||||
7) gift (подарок)
|
||||
*/
|
||||
|
||||
private String getHtmlForAttach(List<JSONObject> attaches) throws JSONException{
|
||||
StringBuilder rs = new StringBuilder();
|
||||
|
||||
for (JSONObject attach : attaches) {
|
||||
String type = attach.getString("type");
|
||||
JSONObject item = attach.optJSONObject(type);
|
||||
|
||||
if (item == null) continue;
|
||||
|
||||
switch(type) {
|
||||
case "photo":
|
||||
var sizes = item.getJSONArray("sizes");
|
||||
rs.append("<a href=\"").append(sizes.getJSONObject(sizes.length() - 1).getString("url")).append("\" class=\"msg-attach-link\">фотография</a>");
|
||||
break;
|
||||
case "doc":
|
||||
rs.append("<a href=\"").append(item.getString("url")).append("\" class=\"msg-attach-link\">документ</a>");
|
||||
break;
|
||||
case "link":
|
||||
rs.append("<a href=\"").append(item.getString("url")).append("\" class=\"msg-attach-link\">ссылка</a>");
|
||||
break;
|
||||
case "wall":
|
||||
rs.append("<a href=\"https://vk.ru/wall").append(item.optString("to_id", item.optString("owner_id"))).append("_").append(item.getString("id")).append("\" class=\"msg-attach-link\">запись на стене</a>");
|
||||
break;
|
||||
case "sticker":
|
||||
rs.append("<img style=\"width:128px;height:128px;\" src=\"").append(item.getJSONArray("images").getJSONObject(1).getString("url")).append("\"/>");
|
||||
break;
|
||||
case "audio_message":
|
||||
rs.append("<a href=\"").append(item.optString("link_mp3")).append("\" class=\"msg-attach-link\">голосовое сообщение</a>");
|
||||
break;
|
||||
case "audio":
|
||||
rs.append("аудиозапись (").append(item.optString("artist")).append(" — ").append(item.optString("title")).append(")");
|
||||
break;
|
||||
case "video":
|
||||
rs.append("видеозапись ( ").append(getVideoHtml(item.optJSONObject("files"))).append(")");
|
||||
break;
|
||||
default:
|
||||
rs.append("не поддерживается (").append(type).append(")");
|
||||
break;
|
||||
}
|
||||
|
||||
rs.append(" ");
|
||||
}
|
||||
|
||||
return rs.toString();
|
||||
}
|
||||
}
|
||||
|
||||
private static String getVideoHtml(JSONObject files) throws JSONException {
|
||||
|
||||
if (files == null) return "ссылки отсутствуют";
|
||||
|
||||
Iterator< ? > keys = files.keys();
|
||||
StringBuilder videoHtml = new StringBuilder();
|
||||
|
||||
int qualityIndex = 0;
|
||||
String[] quality = {"144", "240", "360", "480", "720", "1080", "1440", "2160"};
|
||||
|
||||
while (keys.hasNext()) {
|
||||
String key = (String) keys.next();
|
||||
if (key.equals("mp4_" + quality[qualityIndex])) {
|
||||
videoHtml.append("<a class=\"msg-attach-link\" href=\"").append(files.get(key)).append("\">").append(quality[qualityIndex]).append("p</a>").append(" ");
|
||||
|
||||
if (qualityIndex == 7) break;
|
||||
++qualityIndex;
|
||||
}
|
||||
}
|
||||
|
||||
return videoHtml.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package ru.vtosters.lite.downloaders;
|
||||
|
||||
import static ru.vtosters.lite.net.Request.makeRequest;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
|
||||
@@ -127,12 +128,12 @@ public class VideoDownloader {
|
||||
}
|
||||
|
||||
public static void parseVideoLink(String url, Context ctx) {
|
||||
if (url.contains("vk.com/story")) {
|
||||
if (url.contains("vk.ru/story") || url.contains("vk.com/story")) {
|
||||
ToastUtils.a(AndroidUtils.getString("video_dl_stories_not_supported"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!url.contains("vk.com/video")) {
|
||||
if (!url.contains("vk.ru/video") || !url.contains("vk.com/video")) {
|
||||
ToastUtils.a(AndroidUtils.getString("video_dl_wrong_link"));
|
||||
return;
|
||||
}
|
||||
@@ -144,7 +145,7 @@ public class VideoDownloader {
|
||||
progressDialog.setMessage(AndroidUtils.getString("video_dl_progress"));
|
||||
progressDialog.show();
|
||||
|
||||
makeRequest("https://" + "api.vk.com" + "/method/video.get?owner_id=" + ownerId + "&videos=" + videoId + "&v=5.99&access_token=" + getUserToken(),
|
||||
makeRequest("https://" + getApi() + "/method/video.get?owner_id=" + ownerId + "&videos=" + videoId + "&v=5.99&access_token=" + getUserToken(),
|
||||
response -> {
|
||||
progressDialog.cancel();
|
||||
|
||||
|
||||
@@ -117,10 +117,10 @@ public class FoafBase {
|
||||
StringBuilder sb;
|
||||
if (isApiProxyEnabled()) {
|
||||
sb = new StringBuilder();
|
||||
str = "https://" + getApi() + "/_/vk.com/foaf.php?id=";
|
||||
str = "https://" + getApi() + "/_/vk.ru/foaf.php?id=";
|
||||
} else {
|
||||
sb = new StringBuilder();
|
||||
str = "https://vk.com/foaf.php?id=";
|
||||
str = "https://vk.ru/foaf.php?id=";
|
||||
}
|
||||
sb.append(str);
|
||||
sb.append(i);
|
||||
|
||||
@@ -209,6 +209,7 @@ public class DockBarInjector {
|
||||
val = MenuCountersState.n();
|
||||
break;
|
||||
case tab_feedback:
|
||||
case tab_news:
|
||||
if (milkshake())
|
||||
val = MenuCountersState.k();
|
||||
break;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package ru.vtosters.lite.hooks;
|
||||
|
||||
import static ru.vtosters.lite.foaf.FoafBase.getLastSeen;
|
||||
import static ru.vtosters.lite.foaf.FoafBase.getBypassedOnlineInfo;
|
||||
import static ru.vtosters.lite.hooks.OnlineFormatterHook.onlineHookProfiles;
|
||||
import static ru.vtosters.lite.hooks.DateHook.getLocale;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getStatic;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
|
||||
import static ru.vtosters.lite.utils.Base64Utils.decode;
|
||||
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCaption;
|
||||
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCopyright;
|
||||
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.isBadNews;
|
||||
@@ -76,7 +76,7 @@ public class JsonInjectors {
|
||||
|
||||
public static JSONObject donateRecomm() throws JSONException {
|
||||
var title = AndroidUtils.getString("donate_to_vtl");
|
||||
var link = "https://vk.com/vtosters_official";
|
||||
var link = "https://vk.ru/vtosters_official";
|
||||
var text_color = "2D81E0";
|
||||
|
||||
var json = new JSONObject();
|
||||
@@ -118,7 +118,7 @@ public class JsonInjectors {
|
||||
public static JSONObject vktesters(int id) throws JSONException {
|
||||
var title = AndroidUtils.getString("tester_profile");
|
||||
var text_color = "2D81E0";
|
||||
var link = "https://static.vk.com/bugs?lang=" + LangUtils.a() + "#/reporter" + id;
|
||||
var link = "https://" + getStatic() + "/bugs?lang=" + LangUtils.a() + "#/reporter" + id;
|
||||
|
||||
var json = new JSONObject();
|
||||
var icons = new JSONArray();
|
||||
@@ -157,8 +157,6 @@ public class JsonInjectors {
|
||||
}
|
||||
|
||||
public static JSONObject convBar(JSONObject orig) throws JSONException {
|
||||
if (!dev()) return orig.optJSONObject("conversation_bar"); // for devs only
|
||||
|
||||
var peerid = Objects.requireNonNull(orig.optJSONObject("peer")).optInt("id");
|
||||
|
||||
var pic = "https://image.pngaaa.com/641/326641-middle.png"; // can be null
|
||||
@@ -182,6 +180,9 @@ public class JsonInjectors {
|
||||
return orig.optJSONObject("conversation_bar");
|
||||
}
|
||||
}
|
||||
|
||||
if (!dev()) return orig.optJSONObject("conversation_bar"); // for devs only
|
||||
|
||||
var json = new JSONObject();
|
||||
|
||||
var buttonsJson = new JSONObject();
|
||||
@@ -434,6 +435,30 @@ public class JsonInjectors {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Boolean isWhitelistedFilters(JSONObject list) throws JSONException {
|
||||
var id = String.valueOf(list.optInt("owner_id"));
|
||||
|
||||
if (id.equals("0")) {
|
||||
id = String.valueOf(list.optInt("source_id"));
|
||||
}
|
||||
|
||||
var whitelist = AndroidUtils.getDefaultPrefs().getStringSet("whitelisted_filters_groups", Collections.synchronizedSet(new LinkedHashSet<>()));
|
||||
|
||||
return whitelist.contains(id);
|
||||
}
|
||||
|
||||
public static Boolean isWhitelistedAd(JSONObject list) throws JSONException {
|
||||
var id = String.valueOf(list.optInt("owner_id"));
|
||||
|
||||
if (id.equals("0")) {
|
||||
id = String.valueOf(list.optInt("source_id"));
|
||||
}
|
||||
|
||||
var whitelist = AndroidUtils.getDefaultPrefs().getStringSet("whitelisted_ad_groups", Collections.synchronizedSet(new LinkedHashSet<>()));
|
||||
|
||||
return whitelist.contains(id);
|
||||
}
|
||||
|
||||
public static JSONArray newsfeedlist(JSONArray items) throws JSONException {
|
||||
var selectedItems = getDefaultPrefs().getString("news_feed_selected_items", "");
|
||||
var filtersSet = getDefaultPrefs().getStringSet("news_feed_items_set", null);
|
||||
@@ -505,31 +530,31 @@ public class JsonInjectors {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (adsgroup() && list.optInt("marked_as_ads") == 1) {
|
||||
if (adsgroup() && list.optInt("marked_as_ads") == 1 && !isWhitelistedAd(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: marked_as_ads is true");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isBadNews(list.optString("text"))) {
|
||||
if (isBadNews(list.optString("text")) && !isWhitelistedFilters(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: text filters");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (checkCopyright(list)) {
|
||||
if (checkCopyright(list) && !isWhitelistedFilters(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: copyright filters");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (checkCaption(list)) {
|
||||
if (checkCaption(list) && !isWhitelistedFilters(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: caption filters");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (NewsFeedFiltersUtils.injectFiltersReposts(list)) {
|
||||
if (NewsFeedFiltersUtils.injectFiltersReposts(list) && !isWhitelistedFilters(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: repost ad");
|
||||
continue;
|
||||
@@ -566,7 +591,7 @@ public class JsonInjectors {
|
||||
}
|
||||
}
|
||||
|
||||
var playlists = fetchCatalogId("https://vk.com/audio?section=my_playlists");
|
||||
var playlists = fetchCatalogId("https://vk.ru/audio?section=my_playlists");
|
||||
if (playlists != null) {
|
||||
var catalogarr = playlists.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
|
||||
|
||||
@@ -579,7 +604,7 @@ public class JsonInjectors {
|
||||
oldItems.put(new JSONObject().put("id", id).put("title", title).put("url", url));
|
||||
}
|
||||
|
||||
var albums = fetchCatalogId("https://vk.com/audio?section=albums");
|
||||
var albums = fetchCatalogId("https://vk.ru/audio?section=albums");
|
||||
if (albums != null) {
|
||||
var catalogarr = albums.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
|
||||
|
||||
@@ -592,7 +617,7 @@ public class JsonInjectors {
|
||||
oldItems.put(new JSONObject().put("id", id).put("title", title).put("url", url));
|
||||
}
|
||||
|
||||
var recent = fetchCatalogId("https://vk.com/audio?section=recent");
|
||||
var recent = fetchCatalogId("https://vk.ru/audio?section=recent");
|
||||
if (recent != null) {
|
||||
var catalogarr = recent.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
|
||||
|
||||
@@ -628,7 +653,7 @@ public class JsonInjectors {
|
||||
if (section == null) return null;
|
||||
|
||||
var request = new Request.a()
|
||||
.b("https://api.vk.com/method/catalog.getAudio"
|
||||
.b("https://" + getApi() + "/method/catalog.getAudio"
|
||||
+ "?v=5.119"
|
||||
+ "&https=1"
|
||||
+ "&need_blocks=1"
|
||||
@@ -652,7 +677,7 @@ public class JsonInjectors {
|
||||
|
||||
public static JSONObject fetchCatalogPodcast() {
|
||||
var request = new Request.a()
|
||||
.b("https://api.vk.com/method/catalog.getPodcasts"
|
||||
.b("https://" + getApi() + "/method/catalog.getPodcasts"
|
||||
+ "?v=5.119"
|
||||
+ "&https=1"
|
||||
+ "&need_blocks=1"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package ru.vtosters.lite.hooks;
|
||||
|
||||
import static java.lang.Long.MAX_VALUE;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.*;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
|
||||
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCaption;
|
||||
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.checkCopyright;
|
||||
@@ -23,14 +24,20 @@ import static ru.vtosters.lite.utils.Preferences.milkshake;
|
||||
import static ru.vtosters.lite.utils.Preferences.vkme;
|
||||
|
||||
import com.vk.core.preference.Preference;
|
||||
import com.vtosters.lite.api.ExtendedCommunityProfile;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
|
||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
public class NewsfeedHook {
|
||||
public static boolean injectFilters(JSONObject obj) throws JSONException {
|
||||
if (getBoolValue("newadblock", true)) return true;
|
||||
@@ -102,18 +109,57 @@ public class NewsfeedHook {
|
||||
return params.toArray(new String[0]);
|
||||
}
|
||||
|
||||
public static boolean isWhitelistedFilter(ExtendedCommunityProfile eup) {
|
||||
return getDefaultPrefs().getStringSet("whitelisted_filters_groups", Collections.synchronizedSet(new LinkedHashSet<>())).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
|
||||
}
|
||||
|
||||
public static boolean isWhitelistedAd(ExtendedCommunityProfile eup) {
|
||||
return getDefaultPrefs().getStringSet("whitelisted_ad_groups", Collections.synchronizedSet(new LinkedHashSet<>())).contains(String.valueOf(AccountManagerUtils.getUserID(eup)));
|
||||
}
|
||||
|
||||
public static void setWhitelistedFilter(ExtendedCommunityProfile eup, boolean needWhitelist) {
|
||||
var mutableAdsSet = Collections.synchronizedSet(new LinkedHashSet<String>());
|
||||
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
|
||||
|
||||
mutableAdsSet.addAll(getDefaultPrefs().getStringSet("whitelisted_filters_groups", mutableAdsSet));
|
||||
|
||||
if (needWhitelist) {
|
||||
mutableAdsSet.add(id);
|
||||
} else {
|
||||
mutableAdsSet.remove(id);
|
||||
}
|
||||
|
||||
getDefaultPrefs().edit().putStringSet("whitelisted_filters_groups", mutableAdsSet).apply();
|
||||
}
|
||||
|
||||
public static void setWhitelistedAd(ExtendedCommunityProfile eup, boolean needWhitelist) {
|
||||
var mutableAdsSet = Collections.synchronizedSet(new LinkedHashSet<String>());
|
||||
var id = String.valueOf(AccountManagerUtils.getUserID(eup));
|
||||
|
||||
mutableAdsSet.addAll(getDefaultPrefs().getStringSet("whitelisted_ad_groups", mutableAdsSet));
|
||||
|
||||
if (needWhitelist) {
|
||||
mutableAdsSet.add(id);
|
||||
} else {
|
||||
mutableAdsSet.remove(id);
|
||||
}
|
||||
|
||||
getDefaultPrefs().edit().putStringSet("whitelisted_ad_groups", mutableAdsSet).apply();
|
||||
}
|
||||
|
||||
public static void adsParams(HashSet<String> hashSet) {
|
||||
if (ads() || adsslider()) {
|
||||
if (ads()) {
|
||||
hashSet.add("ads_disabled");
|
||||
if (milkshake()) {
|
||||
return;
|
||||
}
|
||||
hashSet.add("ads_app_slider");
|
||||
return;
|
||||
}
|
||||
|
||||
hashSet.add("ads_app");
|
||||
hashSet.add("ads_site");
|
||||
hashSet.add("ads_post");
|
||||
hashSet.add("ads_app_slider");
|
||||
if (adsslider()) {
|
||||
hashSet.add("ads_app_slider");
|
||||
}
|
||||
hashSet.add("ads_site_slider");
|
||||
hashSet.add("ads_app_video");
|
||||
hashSet.add("ads_post_pretty_cards");
|
||||
|
||||
@@ -123,7 +123,7 @@ public class OnlineFormatterHook {
|
||||
case 5632485:
|
||||
return "SpaceVK";
|
||||
case 6287487:
|
||||
return "vk.com";
|
||||
return "vk.ru";
|
||||
case 4542624:
|
||||
return "Black VK";
|
||||
case 3917910:
|
||||
|
||||
@@ -67,7 +67,19 @@ public class PhotoViewer {
|
||||
: new RecoloredDrawable(AndroidUtils.getGlobalContext().getDrawable(R.drawable.ic_menu_search_outline_28), ThemesUtils.getAccentColor()),
|
||||
false,
|
||||
() -> {
|
||||
searchPhoto(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
|
||||
if (attachment instanceof PhotoAttachment) {
|
||||
searchPhoto(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
|
||||
} else if (attachment instanceof DocumentAttachment) {
|
||||
var documentAttachment = (DocumentAttachment) attachment;
|
||||
if (documentAttachment.J != null)
|
||||
try {
|
||||
searchPhoto(getUrlFromDocumentAttachment(documentAttachment));
|
||||
} catch (Exception e) {
|
||||
ToastUtils.a(getString("photo_get_error"));
|
||||
}
|
||||
else
|
||||
ToastUtils.a(getString("photo_get_error"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
);
|
||||
@@ -77,7 +89,19 @@ public class PhotoViewer {
|
||||
: new RecoloredDrawable(AndroidUtils.getGlobalContext().getDrawable(R.drawable.ic_copy_outline_28), Color.WHITE),
|
||||
false,
|
||||
() -> {
|
||||
copyPhotoUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
|
||||
if (attachment instanceof PhotoAttachment) {
|
||||
copyPhotoUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
|
||||
} else if (attachment instanceof DocumentAttachment) {
|
||||
var documentAttachment = (DocumentAttachment) attachment;
|
||||
if (documentAttachment.J != null)
|
||||
try {
|
||||
copyPhotoUrl(getUrlFromDocumentAttachment(documentAttachment));
|
||||
} catch (Exception e) {
|
||||
ToastUtils.a(getString("photo_get_error"));
|
||||
}
|
||||
else
|
||||
ToastUtils.a(getString("photo_get_error"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
);
|
||||
@@ -93,7 +117,11 @@ public class PhotoViewer {
|
||||
} else if (attachment instanceof DocumentAttachment) {
|
||||
var documentAttachment = (DocumentAttachment) attachment;
|
||||
if (documentAttachment.J != null)
|
||||
openUrl(getUrlFromDocumentAttachment(documentAttachment));
|
||||
try {
|
||||
openUrl(getUrlFromDocumentAttachment(documentAttachment));
|
||||
} catch (Exception e) {
|
||||
ToastUtils.a(getString("photo_get_error"));
|
||||
}
|
||||
else
|
||||
ToastUtils.a(getString("photo_get_error"));
|
||||
}
|
||||
@@ -103,8 +131,11 @@ public class PhotoViewer {
|
||||
}
|
||||
|
||||
private static String getUrlFromDocumentAttachment(DocumentAttachment attachment) {
|
||||
var imageSizes = attachment.J.t1();
|
||||
return getUrlFromImageSizeList(imageSizes);
|
||||
List<ImageSize> imageSizes = null;
|
||||
if (attachment.J != null) {
|
||||
imageSizes = attachment.J.t1();
|
||||
}
|
||||
return getUrlFromImageSizeList(imageSizes != null ? imageSizes : null);
|
||||
}
|
||||
|
||||
private static String getUrlFromPhotoAttachment(PhotoAttachment attachment) {
|
||||
|
||||
@@ -5,18 +5,17 @@ import static ru.vtosters.lite.encryption.EncryptProvider.decryptMessage;
|
||||
import com.vk.im.engine.models.ProfilesSimpleInfo;
|
||||
import com.vk.im.engine.models.messages.MsgFromUser;
|
||||
import com.vk.im.engine.models.messages.NestedMsg;
|
||||
import com.vk.im.engine.models.messages.WithUserContent;
|
||||
import com.vk.im.ui.views.ReplyView;
|
||||
|
||||
public class ReplyMsgHook {
|
||||
public static void injectWithDecrypt(ReplyView replyView, MsgFromUser msgFromUser, ProfilesSimpleInfo profilesSimpleInfo, boolean someBool) {
|
||||
msgFromUser.d(decryptMessage(msgFromUser)); // set new value of text in MsgFromUser class
|
||||
replyView.a((WithUserContent) msgFromUser, profilesSimpleInfo, someBool);
|
||||
replyView.a(msgFromUser, profilesSimpleInfo, someBool);
|
||||
}
|
||||
|
||||
public static void injectWithDecrypt(ReplyView replyView, NestedMsg nestedMsg, ProfilesSimpleInfo profilesSimpleInfo, boolean someBool) {
|
||||
nestedMsg.d(decryptMessage(nestedMsg.f(), nestedMsg.t1())); // set new value of text in NestedMsg class
|
||||
replyView.a((WithUserContent) nestedMsg, profilesSimpleInfo, someBool);
|
||||
replyView.a(nestedMsg, profilesSimpleInfo, someBool);
|
||||
}
|
||||
|
||||
public static void injectWithDecrypt(ReplyView replyView, NestedMsg nestedMsg, ProfilesSimpleInfo profilesSimpleInfo, boolean someBool, int i) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.vtosters.lite.music;
|
||||
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.utils.Preferences.getMusicDir;
|
||||
|
||||
import android.app.DownloadManager;
|
||||
@@ -28,7 +29,7 @@ import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
public class MP3Downloader {
|
||||
|
||||
private static final String URL_FORMAT = "https://api.vk.com/method/audio.getById?v=5.131&access_token=%s&audios=%s©right=https://vtosters.app/";
|
||||
private static final String URL_FORMAT = "https://" + getApi() + "/method/audio.getById?v=5.131&access_token=%s&audios=%s©right=https://vtosters.app/";
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
|
||||
public static void execute(MusicTrack track) {
|
||||
|
||||
@@ -27,7 +27,27 @@ public class ProxyUtils{
|
||||
return proxyapi;
|
||||
}
|
||||
|
||||
return "api.vk.com";
|
||||
return "api.vk.ru";
|
||||
}
|
||||
|
||||
public static String getOauth(){
|
||||
var oauth = getPrefsValue("proxyoauth");
|
||||
|
||||
if (isApiProxyEnabled() & !oauth.isEmpty()) {
|
||||
return oauth;
|
||||
}
|
||||
|
||||
return "oauth.vk.ru";
|
||||
}
|
||||
|
||||
public static String getStatic(){
|
||||
var oauth = getPrefsValue("proxystatic");
|
||||
|
||||
if (isApiProxyEnabled() & !oauth.isEmpty()) {
|
||||
return oauth;
|
||||
}
|
||||
|
||||
return "static.vk.ru";
|
||||
}
|
||||
|
||||
public static Boolean isZaboronaEnabled(){
|
||||
@@ -39,7 +59,7 @@ public class ProxyUtils{
|
||||
}
|
||||
|
||||
public static Boolean isApiProxyEnabled(){
|
||||
return getPrefsValue("proxy").equals("apiproxy");
|
||||
return getPrefsValue("proxy").equals("apiproxy") || getPrefsValue("proxy").equals("vika");
|
||||
}
|
||||
|
||||
public static Boolean isVikaProxyEnabled(){
|
||||
|
||||
@@ -7,9 +7,12 @@ import android.util.Log;
|
||||
|
||||
public class ApiProxy{
|
||||
public static String linkReplacer(String link){
|
||||
var vkapi = "api.vk.com";
|
||||
var oauth = "oauth.vk.com";
|
||||
var vkstatic = "static.vk.com";
|
||||
var vkapi = "api.vk.ru";
|
||||
var oauth = "oauth.vk.ru";
|
||||
var vkstatic = "static.vk.ru";
|
||||
var vkapiold = "api.vk.com";
|
||||
var oauthold = "oauth.vk.com";
|
||||
var vkstaticold = "static.vk.com";
|
||||
|
||||
var proxyapi = getPrefsValue("proxyapi");
|
||||
var proxyoauth = getPrefsValue("proxyoauth");
|
||||
@@ -21,7 +24,7 @@ public class ApiProxy{
|
||||
proxystatic = VikaMobile.getStaticHost();
|
||||
}
|
||||
|
||||
if (!isApiProxyEnabled() || link.isEmpty()) {
|
||||
if ((!isApiProxyEnabled() || !isVikaProxyEnabled()) || link.isEmpty()) {
|
||||
return link;
|
||||
}
|
||||
|
||||
@@ -31,27 +34,51 @@ public class ApiProxy{
|
||||
}
|
||||
|
||||
if (link.contains(vkapi)) {
|
||||
return link.replace(proxyapi, vkapi);
|
||||
return link.replaceAll(vkapi, proxyapi);
|
||||
}
|
||||
|
||||
if (link.contains(oauth)) {
|
||||
return link.replace(proxyoauth, oauth);
|
||||
return link.replaceAll(oauth, proxyoauth);
|
||||
}
|
||||
|
||||
if (link.contains(vkstatic)) {
|
||||
return link.replace(proxystatic, vkstatic);
|
||||
return link.replaceAll(vkstatic, proxystatic);
|
||||
}
|
||||
|
||||
if (link.contains(vkapiold)) {
|
||||
return link.replaceAll(vkapiold, proxyapi);
|
||||
}
|
||||
|
||||
if (link.contains(oauthold)) {
|
||||
return link.replaceAll(vkapiold, proxyoauth);
|
||||
}
|
||||
|
||||
if (link.contains(vkstaticold)) {
|
||||
return link.replaceAll(vkapiold, proxystatic);
|
||||
}
|
||||
|
||||
return link;
|
||||
}
|
||||
|
||||
public static String staticFix(String str) {
|
||||
var string = getPrefsValue("proxystatic");
|
||||
|
||||
if (isVikaProxyEnabled()) {
|
||||
string = VikaMobile.getStaticHost();
|
||||
}
|
||||
|
||||
if ((isApiProxyEnabled() || isVikaProxyEnabled()) && string.isEmpty()) return str;
|
||||
|
||||
return str.replaceAll(string, "static.vk.ru");
|
||||
}
|
||||
|
||||
public static String getAwayPhpCom(){
|
||||
var proxyapi = getPrefsValue("proxyapi");
|
||||
|
||||
if (isApiProxyEnabled() & !proxyapi.isEmpty()) {
|
||||
if ((isApiProxyEnabled() || isVikaProxyEnabled()) & !proxyapi.isEmpty()) {
|
||||
return proxyapi;
|
||||
}
|
||||
|
||||
return "m.vk.com";
|
||||
return "m.vk.ru";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class Jetkai{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class TheSpeedX{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class Jetkai{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class Roosterkid{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class Hookzof{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class Jetkai{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class Roosterkid{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -33,7 +34,7 @@ public class TheSpeedX{
|
||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
||||
|
||||
if (RandomProxy.showProxyResult) {
|
||||
AndroidUtils.sendToast("Прокси установлен, хост: " + proxy);
|
||||
AndroidUtils.sendToast(getString("proxy_setup_success") + " " + proxy);
|
||||
RandomProxy.showProxyResult = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.vtosters.lite.ui.activities;
|
||||
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getOauth;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
@@ -20,7 +22,7 @@ import ru.vtosters.lite.utils.LayoutUtils;
|
||||
|
||||
public class VKAdminTokenActivity extends AppCompatActivity {
|
||||
|
||||
private static final String URL = "https://oauth.vk.com/authorize?client_id=6121396&scope=1073737727&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token&revoke=1";
|
||||
private static final String URL = "https://" + getOauth() +"/authorize?client_id=6121396&scope=1073737727&redirect_uri=https://oauth.vk.ru/blank.html&display=page&response_type=token&revoke=1";
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle bundle) {
|
||||
@@ -37,7 +39,7 @@ public class VKAdminTokenActivity extends AppCompatActivity {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
||||
var url = request.getUrl().toString();
|
||||
if (url.startsWith("https://oauth.vk.com/auth_redirect?")) {
|
||||
if (url.startsWith("https://" + getOauth() + "/auth_redirect?")) {
|
||||
var redirectUri = Uri.parse(URLDecoder.decode(url));
|
||||
var authorizeUrl = redirectUri.getQueryParameter("authorize_url");
|
||||
var accessToken = authorizeUrl.substring(authorizeUrl.indexOf("=") + 1, authorizeUrl.indexOf("&"));
|
||||
|
||||
@@ -97,7 +97,7 @@ public class DockBarEditorManager {
|
||||
private void parseSelectedTabs(String[] selectedTabsTags) {
|
||||
List<String> allTags = new ArrayList<>(Arrays.asList("tab_news", "tab_superapps", "tab_messages", "tab_feedback", "tab_profile",
|
||||
"tab_friends", "tab_groups", "tab_photos", "tab_audios", "tab_videos", "tab_lives", "tab_games", "tab_liked",
|
||||
"tab_fave", "tab_documents", "tab_payments", "tab_vk_apps", "tab_settings", "tab_menu"));
|
||||
"tab_fave", "tab_documents", "tab_payments", "tab_vk_apps", "tab_settings"));
|
||||
|
||||
for (String tag : selectedTabsTags) {
|
||||
mSelectedTabs.add(getTabByTag(tag));
|
||||
@@ -260,13 +260,6 @@ public class DockBarEditorManager {
|
||||
R.string.menu_apps,
|
||||
R.id.menu_vk_apps,
|
||||
AppsFragment.class);
|
||||
case "tab_menu":
|
||||
return DockBarTab.valuesOf(
|
||||
"tab_menu",
|
||||
milkshake() ? R.drawable.ic_user_circle_outline_28 : R.drawable.ic_menu_more_outline_28,
|
||||
milkshake() ? R.string.profile : R.string.menu,
|
||||
R.id.tab_menu,
|
||||
milkshake() ? ProfileFragment.class : MenuFragment.class);
|
||||
case "tab_settings":
|
||||
default:
|
||||
return DockBarTab.valuesOf(
|
||||
|
||||
@@ -19,7 +19,7 @@ public class InstallGMS {
|
||||
public static void alert(final Activity activity) {
|
||||
if (!isGmsInstalled()) {
|
||||
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(activity);
|
||||
builder.setTitle(getString("debug_warning"));
|
||||
builder.setTitle(getString("warning"));
|
||||
builder.setMessage(getString("gmsissuesumm"));
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton(getString("gmsissuebtn1"), (dialogInterface, i) -> edit().putBoolean("showAlertGms", false).apply());
|
||||
|
||||
@@ -19,7 +19,7 @@ public class Start {
|
||||
activity.requestPermissions(new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 228);
|
||||
}
|
||||
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(activity);
|
||||
builder.setTitle(getString("debug_warning"));
|
||||
builder.setTitle(getString("warning"));
|
||||
builder.setMessage(getWelcome());
|
||||
builder.setCancelable(false);
|
||||
// android.content.DialogInterface.OnClickListener
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.vtosters.lite.ui.dialogs;
|
||||
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.isApiProxyEnabled;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
@@ -15,7 +17,7 @@ import ru.vtosters.lite.ui.fragments.VKUIwrapper;
|
||||
public class VKIDProtection {
|
||||
public static void alert(final Activity activity) {
|
||||
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(activity);
|
||||
builder.setTitle(getString("debug_warning"));
|
||||
builder.setTitle(getString("warning"));
|
||||
builder.setMessage(getString("vkidsumm"));
|
||||
builder.setCancelable(false);
|
||||
// android.content.DialogInterface.OnClickListener
|
||||
@@ -23,7 +25,7 @@ public class VKIDProtection {
|
||||
// android.content.DialogInterface.OnClickListener
|
||||
builder.setNeutralButton(getString("vkiddisable"), (dialogInterface, i) -> {
|
||||
edit().putBoolean("showAlertVkId", false).apply();
|
||||
VKUIwrapper.setLink("https://id.vk.com/account");
|
||||
VKUIwrapper.setLink((isApiProxyEnabled() ? "https://id.vk.ru/account" : "https://" + getApi() + "/_/id.vk.ru/account"));
|
||||
Intent a2 = new Navigator(VKUIwrapper.class).b(activity);
|
||||
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
activity.startActivity(a2);
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
package ru.vtosters.lite.ui.fragments;
|
||||
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
|
||||
import static ru.vtosters.lite.utils.Preferences.copyright_post;
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -12,6 +17,7 @@ import android.text.TextUtils;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||
import com.vk.navigation.Navigator;
|
||||
import com.vk.newsfeed.NewsfeedSettingsFragment;
|
||||
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
|
||||
@@ -34,6 +40,20 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
|
||||
findPreference("spamfilters").setSummary(count(getPrefsValue("spamfilters")));
|
||||
findPreference("sourcenamefilter").setSummary(count(getPrefsValue("sourcenamefilter")));
|
||||
findPreference("linkfilter").setSummary(count(getPrefsValue("linkfilter")));
|
||||
|
||||
findPreference("whitelisted_ad_groups").setSummary(countSet("whitelisted_ad_groups"));
|
||||
findPreference("whitelisted_filters_groups").setSummary(countSet("whitelisted_filters_groups"));
|
||||
|
||||
findPreference("whitelisted_ad_groups").setOnPreferenceClickListener(preference -> {
|
||||
remdialog("whitelisted_ad_groups", getContext());
|
||||
return true;
|
||||
});
|
||||
|
||||
findPreference("whitelisted_filters_groups").setOnPreferenceClickListener(preference -> {
|
||||
remdialog("whitelisted_filters_groups", getContext());
|
||||
return true;
|
||||
});
|
||||
|
||||
findPreference("newsfeedlistmanager").setOnPreferenceClickListener(preference -> {
|
||||
NewsfeedListManager.callEditorPopup(getActivity());
|
||||
return true;
|
||||
@@ -59,6 +79,38 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
}
|
||||
|
||||
private void remdialog(String key, Context context) {
|
||||
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context);
|
||||
builder.setTitle(AndroidUtils.getString("warning"));
|
||||
builder.setMessage(AndroidUtils.getString("delete_elements_confirm"));
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton(AndroidUtils.getString("yes"), (dialogInterface, i) -> {
|
||||
edit().remove(key).apply();
|
||||
sendToast(AndroidUtils.getString("elements_deleted_success"));
|
||||
});
|
||||
builder.setNegativeButton(AndroidUtils.getString("cancel"), (dialogInterface, i) -> dialogInterface.dismiss());
|
||||
builder.show();
|
||||
}
|
||||
|
||||
private String countSet(String key) {
|
||||
var set = getDefaultPrefs().getStringSet(key, null);
|
||||
StringBuilder str = new StringBuilder();
|
||||
if (set != null) {
|
||||
for (var s : set) {
|
||||
str.append(s).append(", ");
|
||||
}
|
||||
}
|
||||
|
||||
var count = str.toString().split(", ").length;
|
||||
|
||||
if (count < 1 || (str.length() == 0)) {
|
||||
return AndroidUtils.getString("feed_no_elements");
|
||||
} else {
|
||||
return String.format(AndroidUtils.getString("feed_elements_count"), count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(Preference preference) {
|
||||
findPreference("cringecopyright").setEnabled(!copyright_post());
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package ru.vtosters.lite.ui.fragments;
|
||||
|
||||
import static ru.vtosters.lite.music.Scrobbler.isLoggedIn;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
@@ -244,7 +245,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment {
|
||||
Thread thread = new Thread(() -> {
|
||||
try {
|
||||
var request = new Request.a()
|
||||
.b("https://api.vk.com/method/" + "video.clearViewingHistoryRecords" + "?https=1" + "&access_token=" + getUserToken() + "&v=5.187")
|
||||
.b("https://" + getApi() + "/method/" + "video.clearViewingHistoryRecords" + "?https=1" + "&access_token=" + getUserToken() + "&v=5.187")
|
||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
|
||||
.a();
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
|
||||
import java.io.IOException;
|
||||
|
||||
import ru.vtosters.lite.proxy.RandomProxy;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
public class ProxySettingsFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
@@ -22,7 +23,7 @@ public class ProxySettingsFragment extends MaterialPreferenceToolbarFragment {
|
||||
try {
|
||||
setupNewProxy();
|
||||
} catch (IOException e) {
|
||||
sendToast("Ошибка при получении прокси");
|
||||
sendToast(AndroidUtils.getString("get_proxy_error"));
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@ public class VKPayFragment extends FragmentImpl {
|
||||
}
|
||||
|
||||
public void start() {
|
||||
VKUIwrapper.setLink("https://vk.com/vkpay");
|
||||
VKUIwrapper.setLink("https://vk.ru/vkpay");
|
||||
Intent a2 = new Navigator(VKUIwrapper.class).b(getActivity());
|
||||
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(a2);
|
||||
|
||||
@@ -183,7 +183,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
|
||||
if (!isGmsInstalled()) {
|
||||
addPreference(this, "", AndroidUtils.getString("installgms"), "", "ic_warning_24", preference -> {
|
||||
addPreference(this, "", AndroidUtils.getString("installgms"), "", "ic_about_outline_28", preference -> {
|
||||
Context context = getContext();
|
||||
Intent a2 = new Navigator(InstallGMSFragment.class).b(context);
|
||||
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
@@ -330,7 +330,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
|
||||
});
|
||||
}
|
||||
} else {
|
||||
addPreference(this, "", AndroidUtils.getString("debug_warning"), AndroidUtils.getString("vkme_mode_info"), "ic_about_outline_28", preference -> false);
|
||||
addPreference(this, "", AndroidUtils.getString("warning"), AndroidUtils.getString("vkme_mode_info"), "ic_about_outline_28", preference -> false);
|
||||
}
|
||||
|
||||
addPreference(this, "", AndroidUtils.getString("vtlmedia"), mediasumm, "ic_media_outline_28", preference -> {
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package ru.vtosters.lite.ui.vkui;
|
||||
|
||||
import static ru.vtosters.lite.foaf.FoafBase.loadAndShow;
|
||||
import static ru.vtosters.lite.hooks.NewsfeedHook.setWhitelistedAd;
|
||||
import static ru.vtosters.lite.hooks.NewsfeedHook.setWhitelistedFilter;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserID;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getString;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
|
||||
|
||||
import android.content.ClipData;
|
||||
@@ -24,7 +27,7 @@ import java.util.Objects;
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.b.Functions;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
import ru.vtosters.lite.hooks.NewsfeedHook;
|
||||
import ru.vtosters.lite.utils.RenameTool;
|
||||
|
||||
public class MenuBuilder {
|
||||
@@ -55,18 +58,17 @@ public class MenuBuilder {
|
||||
try {
|
||||
final ExtendedUserProfile eup = (ExtendedUserProfile) pfambObject.get(mb);
|
||||
final Context ctx = ((View) Objects.requireNonNull(apView.get(builder))).getContext();
|
||||
|
||||
addItem(builder, AndroidUtils.getString("menu_copy_id"), () -> {
|
||||
addItem(builder, getString("menu_copy_id"), () -> {
|
||||
copy(ctx, String.valueOf(getUserID(eup)));
|
||||
return Unit.a;
|
||||
});
|
||||
|
||||
addItem(builder, AndroidUtils.getString("menu_addon_info"), () -> {
|
||||
addItem(builder, getString("menu_addon_info"), () -> {
|
||||
loadAndShow(ctx, getUserID(eup));
|
||||
return Unit.a;
|
||||
});
|
||||
|
||||
addItem(builder, AndroidUtils.getString("menu_change_name"), () -> {
|
||||
addItem(builder, getString("menu_change_name"), () -> {
|
||||
RenameTool.createDialog(eup, ctx);
|
||||
return Unit.a;
|
||||
});
|
||||
@@ -80,17 +82,31 @@ public class MenuBuilder {
|
||||
try {
|
||||
final ExtendedCommunityProfile ecp = (ExtendedCommunityProfile) cfambObject.get(mb);
|
||||
final Context ctx = ((View) apView.get(builder)).getContext();
|
||||
final boolean isPageWhitelistedFilter = NewsfeedHook.isWhitelistedFilter(ecp);
|
||||
final boolean isPageWhitelistedAds = NewsfeedHook.isWhitelistedAd(ecp);
|
||||
|
||||
addItem(builder, AndroidUtils.getString("menu_copy_id"), () -> {
|
||||
addItem(builder, getString("menu_copy_id"), () -> {
|
||||
copy(ctx, String.valueOf(getUserID(ecp)));
|
||||
return Unit.a;
|
||||
});
|
||||
|
||||
addItem(builder, AndroidUtils.getString("menu_change_name"), () -> {
|
||||
addItem(builder, getString("menu_change_name"), () -> {
|
||||
RenameTool.createDialogGroup(ecp, ctx);
|
||||
return Unit.a;
|
||||
});
|
||||
|
||||
addItem(builder, getString(isPageWhitelistedFilter ? "remove_from_filter_whitelist" : "add_to_filter_whitelist"), () -> {
|
||||
setWhitelistedFilter(ecp, !isPageWhitelistedFilter);
|
||||
sendToast(getString(isPageWhitelistedFilter ? "removed_from_whitelist_success" : "added_to_whitelist_success"));
|
||||
return Unit.a;
|
||||
});
|
||||
|
||||
addItem(builder, getString(isPageWhitelistedAds ? "remove_from_ads_whitelist" : "add_to_ads_whitelist"), () -> {
|
||||
setWhitelistedAd(ecp, !isPageWhitelistedAds);
|
||||
sendToast(getString(isPageWhitelistedAds ? "removed_from_whitelist_success" : "added_to_whitelist_success"));
|
||||
return Unit.a;
|
||||
});
|
||||
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -101,7 +117,7 @@ public class MenuBuilder {
|
||||
ClipData clip = ClipData.newPlainText("MBH-ST", txt);
|
||||
clipboard.setPrimaryClip(clip);
|
||||
|
||||
sendToast(AndroidUtils.getString("menu_copied"));
|
||||
sendToast(getString("menu_copied"));
|
||||
}
|
||||
|
||||
public static void addItem(final ActionsPopup.b builder, final String title, final Functions onClick) throws InvocationTargetException, IllegalAccessException {
|
||||
|
||||
@@ -2,6 +2,7 @@ package ru.vtosters.lite.ui.wallpapers;
|
||||
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getResources;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
@@ -130,19 +131,27 @@ public class ImageFilters {
|
||||
}
|
||||
|
||||
private static void darken(Bitmap bm) {
|
||||
Canvas canvas = new Canvas(bm);
|
||||
Paint p = new Paint(Color.RED);
|
||||
ColorFilter filter = new LightingColorFilter(0xFF7F7F7F, 0x00000000); // darken
|
||||
p.setColorFilter(filter);
|
||||
canvas.drawBitmap(bm, new Matrix(), p);
|
||||
try {
|
||||
Canvas canvas = new Canvas(bm);
|
||||
Paint p = new Paint(Color.RED);
|
||||
ColorFilter filter = new LightingColorFilter(0xFF7F7F7F, 0x00000000); // darken
|
||||
p.setColorFilter(filter);
|
||||
canvas.drawBitmap(bm, new Matrix(), p);
|
||||
} catch (Exception e) {
|
||||
sendToast("Ошибка при работе затемнения обоев");
|
||||
}
|
||||
}
|
||||
|
||||
private static void lighten(Bitmap bm) {
|
||||
Canvas canvas = new Canvas(bm);
|
||||
Paint p = new Paint(Color.RED);
|
||||
ColorFilter filter = new LightingColorFilter(0xFFFFFFFF, 0x00222222); // lighten
|
||||
p.setColorFilter(filter);
|
||||
canvas.drawBitmap(bm, new Matrix(), p);
|
||||
try {
|
||||
Canvas canvas = new Canvas(bm);
|
||||
Paint p = new Paint(Color.RED);
|
||||
ColorFilter filter = new LightingColorFilter(0xFFFFFFFF, 0x00222222); // lighten
|
||||
p.setColorFilter(filter);
|
||||
canvas.drawBitmap(bm, new Matrix(), p);
|
||||
} catch (Exception e) {
|
||||
sendToast("Ошибка при работе осветления обоев");
|
||||
}
|
||||
}
|
||||
|
||||
public static Bitmap applyInvertEffect(Bitmap src) {
|
||||
|
||||
@@ -158,6 +158,14 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment {
|
||||
});
|
||||
}
|
||||
|
||||
PreferencesUtil.addMaterialSwitchPreference(this, "compresswp", "Сжимать обои", "Значительно ускоряет открытие чатов", null, true, (preference, o) -> {
|
||||
boolean value = (boolean) o;
|
||||
edit().putBoolean("compresswp", value).commit();
|
||||
requestUpdateWallpaper();
|
||||
mWPPreviewPref.redraw();
|
||||
return true;
|
||||
});
|
||||
|
||||
ListPreference blur = (ListPreference) findPreference("msg_blur_radius");
|
||||
ListPreference dim = (ListPreference) findPreference("msg_dim");
|
||||
ListPreference mosaic = (ListPreference) findPreference("msg_mosaic");
|
||||
|
||||
@@ -8,20 +8,25 @@ import static ru.vtosters.lite.ui.wallpapers.ImageFilters.getMonochrome;
|
||||
import static ru.vtosters.lite.ui.wallpapers.ImageFilters.getMosaic;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.sendToast;
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
import static ru.vtosters.lite.utils.Preferences.hasVerification;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
import ru.vtosters.lite.utils.ThemesUtils;
|
||||
|
||||
public class WallpapersHooks {
|
||||
private static File mWallpaperFile;
|
||||
@@ -30,28 +35,52 @@ public class WallpapersHooks {
|
||||
private static boolean mUpdateWallpaperRequested = true;
|
||||
|
||||
public static File getWallpaperFile() {
|
||||
return mWallpaperFile == null ? mWallpaperFile = compressFile(new File(getGlobalContext().getFilesDir(), "wallpaper.png")) : mWallpaperFile;
|
||||
return mWallpaperFile == null ? mWallpaperFile = new File(getGlobalContext().getFilesDir(), "wallpaper.png") : mWallpaperFile;
|
||||
}
|
||||
|
||||
public static File compressFile(File file) {
|
||||
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
|
||||
File compressedFile = new File(file.getParent(), file.getName());
|
||||
OutputStream out = null;
|
||||
private static Boolean eligibleWallpaperFile(File file) {
|
||||
if (file.length() >= 6291456) {
|
||||
sendToast("Размер файла превышает лимит 6 MB");
|
||||
removeWallpaper();
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static File compress(File file){
|
||||
try {
|
||||
out = new FileOutputStream(compressedFile);
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 95, out);
|
||||
BitmapFactory.Options o = new BitmapFactory.Options();
|
||||
o.inJustDecodeBounds = true;
|
||||
o.inSampleSize = 6;
|
||||
|
||||
FileInputStream inputStream = new FileInputStream(file);
|
||||
BitmapFactory.decodeStream(inputStream, null, o);
|
||||
inputStream.close();
|
||||
|
||||
final int REQUIRED_SIZE=200;
|
||||
|
||||
int scale = 1;
|
||||
while(o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE) {
|
||||
scale *= 2;
|
||||
}
|
||||
|
||||
BitmapFactory.Options o2 = new BitmapFactory.Options();
|
||||
o2.inSampleSize = scale;
|
||||
inputStream = new FileInputStream(file);
|
||||
|
||||
Bitmap selectedBitmap = BitmapFactory.decodeStream(inputStream, null, o2);
|
||||
inputStream.close();
|
||||
|
||||
File outPutFile = File.createTempFile("wallpaper_temp","image");
|
||||
FileOutputStream outputStream = new FileOutputStream(outPutFile);
|
||||
selectedBitmap.compress(Bitmap.CompressFormat.PNG, 85 , outputStream);
|
||||
|
||||
return outPutFile;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (out != null) {
|
||||
out.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Log.d("Wallpapers", e.getMessage());
|
||||
return null;
|
||||
}
|
||||
return compressedFile;
|
||||
}
|
||||
|
||||
public static void setBg(View view) {
|
||||
@@ -60,12 +89,18 @@ public class WallpapersHooks {
|
||||
return;
|
||||
}
|
||||
|
||||
((ImageView) view).setColorFilter(im_bg_chat); // set default bg color
|
||||
view.setBackgroundColor(ThemesUtils.getColorFromAttr(im_bg_chat)); // set default bg color
|
||||
}
|
||||
|
||||
public static String getWallpaperUrl() {
|
||||
if (getWallpaperFile().exists())
|
||||
return getWallpaperFile().getAbsolutePath();
|
||||
if (getWallpaperFile().exists() && eligibleWallpaperFile(getWallpaperFile()))
|
||||
if (compress(getWallpaperFile()) == null) {
|
||||
return "default";
|
||||
} else if (getBoolValue("compresswp", true)){
|
||||
return compress(getWallpaperFile()).getAbsolutePath();
|
||||
} else {
|
||||
return getWallpaperFile().getAbsolutePath();
|
||||
}
|
||||
else
|
||||
return "default";
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import b.h.g.m.FileUtils;
|
||||
public class CacheUtils {
|
||||
private static CacheUtils sInstance = new CacheUtils();
|
||||
public long size = 0;
|
||||
public static boolean needToDelete = false;
|
||||
|
||||
public static CacheUtils getInstance() {
|
||||
if (sInstance == null)
|
||||
@@ -55,7 +56,7 @@ public class CacheUtils {
|
||||
public void autoCleaningCache() {
|
||||
size = IOUtils.getDirSize(getGlobalContext().getCacheDir());
|
||||
|
||||
if (size >= getSizeForDelete()) {
|
||||
if (size >= getSizeForDelete() && needToDelete) {
|
||||
if (dev()) sendToast(AndroidUtils.getString("cache_cleaned"));
|
||||
VKImageLoader.e();
|
||||
ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a);
|
||||
|
||||
@@ -5,6 +5,7 @@ import static ru.vtosters.lite.utils.AndroidUtils.edit;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getPreferences;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue;
|
||||
import static ru.vtosters.lite.utils.CacheUtils.*;
|
||||
import static ru.vtosters.lite.utils.CacheUtils.getInstance;
|
||||
import static ru.vtosters.lite.utils.DeletedMessagesHandler.reloadMessagesList;
|
||||
import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.setupFilters;
|
||||
@@ -362,16 +363,22 @@ public class Preferences {
|
||||
public static long getSizeForDelete() {
|
||||
switch (getPrefsValue("clearcache")) {
|
||||
case "100mb":
|
||||
needToDelete = true;
|
||||
return 104857600L;
|
||||
case "500mb":
|
||||
needToDelete = true;
|
||||
return 524288000L;
|
||||
case "1gb":
|
||||
needToDelete = true;
|
||||
return 1073741824L;
|
||||
case "2gb":
|
||||
needToDelete = true;
|
||||
return 2147483648L;
|
||||
case "5gb":
|
||||
needToDelete = true;
|
||||
return 5368709120L;
|
||||
default:
|
||||
needToDelete = false;
|
||||
return MAX_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
+71
-25
@@ -960,6 +960,17 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="vk.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="vk.com"
|
||||
android:pathPattern="/.*"
|
||||
@@ -971,28 +982,6 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="vkontakte.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="new.vk.com"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="vk.com"
|
||||
android:pathPattern="/.*"
|
||||
@@ -1007,6 +996,28 @@
|
||||
<data
|
||||
android:host="vkontakte.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="new.vk.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="vk.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
@@ -1016,7 +1027,18 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="new.vk.com"
|
||||
android:host="vkontakte.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="new.vk.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
@@ -1107,6 +1129,30 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
||||
<data
|
||||
android:host="m.vk.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
||||
<data
|
||||
android:host="m.vk.ru"
|
||||
android:pathPattern="/.*"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
||||
<data
|
||||
android:host="m.vk.com"
|
||||
@@ -1132,7 +1178,7 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="m.vk.com"
|
||||
android:host="m.vk.ru"
|
||||
android:pathPattern="/restore"
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
@@ -1143,7 +1189,7 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="m.vk.com"
|
||||
android:host="m.vk.ru"
|
||||
android:pathPattern="/restore"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
appscent
|
||||
//t.me/
|
||||
vk.com
|
||||
vk.ru
|
||||
apps-cent
|
||||
app-cent
|
||||
appcent
|
||||
|
||||
@@ -394,12 +394,12 @@ function showPhotosBox(url, id, num, link){
|
||||
<div class="wk_text" style="max-width: 604px">
|
||||
<div class="header">
|
||||
<div style="float: left;">
|
||||
<a href="https://vk.com/club{GROUP_ID}">
|
||||
<a href="https://vk.ru/club{GROUP_ID}">
|
||||
<img src="{GROUP_PHOTO}" width="50" height="50" border="0"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="headGroupName">
|
||||
<a href="https://vk.com/club{GROUP_ID}">{GROUP_NAME}</a>
|
||||
<a href="https://vk.ru/club{GROUP_ID}">{GROUP_NAME}</a>
|
||||
</div>
|
||||
<div class="headOrigLink">
|
||||
{L_PREVIEW} <a href="http://{ORIG_URL}">{ORIG_URL}</a>
|
||||
@@ -412,7 +412,7 @@ function showPhotosBox(url, id, num, link){
|
||||
<div class="footer">
|
||||
{L_SOURCE} <a href="http://{ORIG_URL}">{ORIG_URL}</a><br/>
|
||||
{DATE} - {VIEWS}<br/>
|
||||
<a href="https://vk.com/id{PROFILE_ID}">{L_GO_TO_GROUP}</a>
|
||||
<a href="https://vk.ru/id{PROFILE_ID}">{L_GO_TO_GROUP}</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:padding="0.0dip"
|
||||
android:text="https://vk.com/"
|
||||
android:text="https://vk.ru/"
|
||||
android:textColor="#ffb8b8b8" />
|
||||
|
||||
<EditText
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
android:id="@id/domain_current_link"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="https://vk.com/durov"
|
||||
android:text="https://vk.ru/durov"
|
||||
android:textColor="?accent"
|
||||
android:textSize="14.0dip" />
|
||||
</LinearLayout>
|
||||
|
||||
@@ -454,7 +454,7 @@ resultados"</string>
|
||||
<string name="collection_add_selection">Añadir a la transmisión en vivo</string>
|
||||
<string name="collection_add_to_stream">Añadir a la transmisión en vivo</string>
|
||||
<string name="collection_add_wall_to_list_hint">Selecciona una publicación de tu muro que quieras compartir con tus espectadores </string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.com</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.ru</string>
|
||||
<string name="collection_link_limit">Límite de enlaces alcanzado</string>
|
||||
<string name="collection_link_not_valid">URL no compatible</string>
|
||||
<string name="collection_links_list">Lista de enlaces</string>
|
||||
@@ -1086,7 +1086,7 @@ y organízalo con la ayuda de etiquetas"</string>
|
||||
<string name="friends_recommendations_gmail">Gmail</string>
|
||||
<string name="friends_recommendations_invete_by_link">Invitar vía enlace</string>
|
||||
<string name="friends_recommendations_invite">Invitar</string>
|
||||
<string name="friends_recommendations_invite_message">¡Únete a mí en VK! http://vk.com/join</string>
|
||||
<string name="friends_recommendations_invite_message">¡Únete a mí en VK! http://vk.ru/join</string>
|
||||
<string name="friends_recommendations_locator_text">Para ver amigos cercanos, pídeles que abran esta pantalla en sus dispositivos</string>
|
||||
<string name="friends_recommendations_ok">OK</string>
|
||||
<string name="friends_recommendations_request_done">Sois amigos</string>
|
||||
@@ -1368,7 +1368,7 @@ menos frecuentemente"</string>
|
||||
<string name="identity_address">Dirección</string>
|
||||
<string name="identity_address_dat">dirección</string>
|
||||
<string name="identity_custom_label">Personalizado</string>
|
||||
<string name="identity_desc">Puede introducir tu información aquí para que las mini apps de [https://vk.com/services|catalog] puedan usarla para configurar la entrega o contactarte</string>
|
||||
<string name="identity_desc">Puede introducir tu información aquí para que las mini apps de [https://vk.ru/services|catalog] puedan usarla para configurar la entrega o contactarte</string>
|
||||
<string name="identity_email">Сorreo electrónico</string>
|
||||
<string name="identity_email_dat">dirección de correo electrónico</string>
|
||||
<string name="identity_label">Categoría</string>
|
||||
@@ -1398,7 +1398,7 @@ menos frecuentemente"</string>
|
||||
<string name="include_community">Activar notificaciones</string>
|
||||
<string name="installed_games_title">Mis juegos</string>
|
||||
<string name="invalid_date">Fecha de publicación no válida</string>
|
||||
<string name="invitation">¡Vamos a conectar en VK! Únete aquí: http://vk.com/join</string>
|
||||
<string name="invitation">¡Vamos a conectar en VK! Únete aquí: http://vk.ru/join</string>
|
||||
<string name="invitation_declined">Invitación rechazada.</string>
|
||||
<string name="invitation_sent">Tu invitación ha sido enviada.</string>
|
||||
<string name="invite">Invitar</string>
|
||||
@@ -3268,7 +3268,7 @@ cámara VK"</string>
|
||||
<string name="serv_user_returned_m">%1$s regresó a este chat</string>
|
||||
<string name="service_account_admin_100_info">"Este perfil sólo se usa para notificaciones personales.
|
||||
|
||||
Para ayuda o información, contacta con nuestro [https://vk.com/support|Equipo de Soporte.]"</string>
|
||||
Para ayuda o información, contacta con nuestro [https://vk.ru/support|Equipo de Soporte.]"</string>
|
||||
<string name="service_account_admin_101_info">Esta página se usa para proporcionar compatibilidad con versiones anteriores para comentarios de las comunidades.</string>
|
||||
<string name="service_account_mobile_info">Este es el perfil oficial del soporte móvil VK.</string>
|
||||
<string name="sett_accept_calls">Activar</string>
|
||||
@@ -5253,7 +5253,7 @@ con vídeo"</string>
|
||||
<string name="votes_your_balance">Tu saldo</string>
|
||||
<string name="wall">Muro</string>
|
||||
<string name="wall_all_posts">Todas las entradas</string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Comentario para </font><a href=\"vklink://view/?http://vk.com/wall%1$d_%2$d\">entrada</a></string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Comentario para </font><a href=\"vklink://view/?http://vk.ru/wall%1$d_%2$d\">entrada</a></string>
|
||||
<string name="wall_disabled">Muro desactivado</string>
|
||||
<string name="wall_empty">Aún no hay entradas aquí</string>
|
||||
<string name="wall_empty_my">Aún no has publicado nada</string>
|
||||
|
||||
@@ -448,7 +448,7 @@
|
||||
<string name="collection_add_selection">Трансляцияға бекіту</string>
|
||||
<string name="collection_add_to_stream">Эфирге қосу</string>
|
||||
<string name="collection_add_wall_to_list_hint">Парақшаңыздан көрермендермен бөлісетін жазба таңдаңыз</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.com</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.ru</string>
|
||||
<string name="collection_link_limit">Осыдан әрі сілтеме қосуға болмайды, сіз шекке жеттіңіз</string>
|
||||
<string name="collection_link_not_valid">Сілтеме қолдаулы емес</string>
|
||||
<string name="collection_links_list">Сілтемелер тізімі</string>
|
||||
@@ -1054,7 +1054,7 @@
|
||||
<string name="friends_recommendations_gmail">Gmail</string>
|
||||
<string name="friends_recommendations_invete_by_link">Сілтеме бойынша шақыру</string>
|
||||
<string name="friends_recommendations_invite">Шақыру</string>
|
||||
<string name="friends_recommendations_invite_message">VK-да дос болайық! http://vk.com/join</string>
|
||||
<string name="friends_recommendations_invite_message">VK-да дос болайық! http://vk.ru/join</string>
|
||||
<string name="friends_recommendations_locator_text">Қасыңыздағы адамдарды көру үшін олардан өз құрылғыларынан осы экранға кіруді сұраңыз</string>
|
||||
<string name="friends_recommendations_ok">ОК</string>
|
||||
<string name="friends_recommendations_request_done">Доссыздар</string>
|
||||
@@ -1335,7 +1335,7 @@
|
||||
<string name="identity_address">Мекенжай</string>
|
||||
<string name="identity_address_dat">мекенжай</string>
|
||||
<string name="identity_custom_label">Өз категория</string>
|
||||
<string name="identity_desc">Сіз деректерді бір-ақ рет толтырып келесіде [https://vk.com/services|топтамадағы] мини-қосымшаларға ол деректерді тез бере алатын боласыз</string>
|
||||
<string name="identity_desc">Сіз деректерді бір-ақ рет толтырып келесіде [https://vk.ru/services|топтамадағы] мини-қосымшаларға ол деректерді тез бере алатын боласыз</string>
|
||||
<string name="identity_email">Электрондық пошта</string>
|
||||
<string name="identity_email_dat">электрондық пошта мекенжайы</string>
|
||||
<string name="identity_label">Категория</string>
|
||||
@@ -1365,7 +1365,7 @@
|
||||
<string name="include_community">Бірлестік қосу</string>
|
||||
<string name="installed_games_title">Ойындарым</string>
|
||||
<string name="invalid_date">Жариялау күні дұрыс емес</string>
|
||||
<string name="invitation">VK-да дос болайық! http://vk.com/join</string>
|
||||
<string name="invitation">VK-да дос болайық! http://vk.ru/join</string>
|
||||
<string name="invitation_declined">Шақыру қабылданбады.</string>
|
||||
<string name="invitation_sent">Шақыру жіберілді.</string>
|
||||
<string name="invite">Шақыру</string>
|
||||
@@ -3221,7 +3221,7 @@
|
||||
<string name="serv_user_returned_m">%1$s әңгімеге қайтып оралды</string>
|
||||
<string name="service_account_admin_100_info">"Профиль тек жеке мәлімдемелерге пайдаланылады.
|
||||
|
||||
Кез келген сұрықтарыңыз болса [https://vk.com/support|Жәрдемге] жазыңыз."</string>
|
||||
Кез келген сұрықтарыңыз болса [https://vk.ru/support|Жәрдемге] жазыңыз."</string>
|
||||
<string name="service_account_admin_101_info">Парақша пікірлер қызметінің кері үйлесімділік үшін пайдаланылады.</string>
|
||||
<string name="service_account_mobile_info">VK мобильді жәрдемнің ресми парақшасы.</string>
|
||||
<string name="sett_accept_calls">Қосу</string>
|
||||
@@ -5201,7 +5201,7 @@ https://vk.me"</string>
|
||||
<string name="votes_your_balance">Теңгеріміңіз</string>
|
||||
<string name="wall">Қабырға</string>
|
||||
<string name="wall_all_posts">Барлық жазбалар</string>
|
||||
<string name="wall_comment_repost"><a href=\"vklink://view/?http://vk.com/wall%1$d_%2$d\">жазбаға</a><font color=\"#aaaaaa\"> пікір</font></string>
|
||||
<string name="wall_comment_repost"><a href=\"vklink://view/?http://vk.ru/wall%1$d_%2$d\">жазбаға</a><font color=\"#aaaaaa\"> пікір</font></string>
|
||||
<string name="wall_disabled">Қабырған өшірулі</string>
|
||||
<string name="wall_empty">Әзірше жазба жоқ</string>
|
||||
<string name="wall_empty_my">Әзірше жазба жоқ</string>
|
||||
|
||||
@@ -454,7 +454,7 @@ resultados"</string>
|
||||
<string name="collection_add_selection">Anexar a transmissão</string>
|
||||
<string name="collection_add_to_stream">Adicionar a transmissão</string>
|
||||
<string name="collection_add_wall_to_list_hint">Escolha o recado de sua página que deseja compartilhar com seus espectadores</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.com</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.ru</string>
|
||||
<string name="collection_link_limit">Você atingiu o número máximo de links</string>
|
||||
<string name="collection_link_not_valid">Link não suportado</string>
|
||||
<string name="collection_links_list">Lista de links</string>
|
||||
@@ -1058,7 +1058,7 @@ e utilize as etiquetas para o sortear"</string>
|
||||
<string name="friends_recommendations_gmail">Gmail</string>
|
||||
<string name="friends_recommendations_invete_by_link">Convidar por link</string>
|
||||
<string name="friends_recommendations_invite">Convidar</string>
|
||||
<string name="friends_recommendations_invite_message">Vamos ser amigos no VK! http://vk.com/join</string>
|
||||
<string name="friends_recommendations_invite_message">Vamos ser amigos no VK! http://vk.ru/join</string>
|
||||
<string name="friends_recommendations_locator_text">Para ver as pessoas que estão perto, peça-lhes para abrir a mesma tela no dispositivo deles</string>
|
||||
<string name="friends_recommendations_ok">OK</string>
|
||||
<string name="friends_recommendations_request_done">Vocês são amigos</string>
|
||||
@@ -1338,7 +1338,7 @@ menos frequência"</string>
|
||||
<string name="identity_address">Endereço</string>
|
||||
<string name="identity_address_dat">endereço</string>
|
||||
<string name="identity_custom_label">Minha categoria</string>
|
||||
<string name="identity_desc">Adicione suas informações para o preenchimento automático pelos mini apps do [https://vk.com/services|catálogo] em caso da entrega de produtos ou para contatar você</string>
|
||||
<string name="identity_desc">Adicione suas informações para o preenchimento automático pelos mini apps do [https://vk.ru/services|catálogo] em caso da entrega de produtos ou para contatar você</string>
|
||||
<string name="identity_email">Email</string>
|
||||
<string name="identity_email_dat">email</string>
|
||||
<string name="identity_label">Categoria</string>
|
||||
@@ -1368,7 +1368,7 @@ menos frequência"</string>
|
||||
<string name="include_community">Conectar comunidade</string>
|
||||
<string name="installed_games_title">Meus jogos</string>
|
||||
<string name="invalid_date">Data de publicação invalida</string>
|
||||
<string name="invitation">Vamos conectar ao VK! Participe aqui: http://vk.com/join</string>
|
||||
<string name="invitation">Vamos conectar ao VK! Participe aqui: http://vk.ru/join</string>
|
||||
<string name="invitation_declined">Convite recusado.</string>
|
||||
<string name="invitation_sent">Convite enviado.</string>
|
||||
<string name="invite">Convidar</string>
|
||||
@@ -3236,7 +3236,7 @@ com a câmera do VK"</string>
|
||||
<string name="serv_user_returned_m">%1$s voltou a este bate-papo</string>
|
||||
<string name="service_account_admin_100_info">"O perfil é usado somente para as notificações pessoais.
|
||||
|
||||
Para ajuda ou informações, contate nossa [https://vk.com/support|equipe de Supporte.]"</string>
|
||||
Para ajuda ou informações, contate nossa [https://vk.ru/support|equipe de Supporte.]"</string>
|
||||
<string name="service_account_admin_101_info">Esta página é utilizada para fornecer a compatibilidade para os comentários deixados em nome da comunidade.</string>
|
||||
<string name="service_account_mobile_info">Este é o perfil oficial do Suporte móvel do VK.</string>
|
||||
<string name="sett_accept_calls">Habilitar</string>
|
||||
@@ -5219,7 +5219,7 @@ com vídeo"</string>
|
||||
<string name="votes_your_balance">Seu saldo</string>
|
||||
<string name="wall">Mural</string>
|
||||
<string name="wall_all_posts">Todos os recados</string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Comentar para </font><a href=\"vklink://view/?http://vk.com/wall%1$d_%2$d\">post</a></string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Comentar para </font><a href=\"vklink://view/?http://vk.ru/wall%1$d_%2$d\">post</a></string>
|
||||
<string name="wall_disabled">Mural desabilitado</string>
|
||||
<string name="wall_empty">Ainda não há publicações aqui</string>
|
||||
<string name="wall_empty_my">Ainda não tem recados</string>
|
||||
|
||||
@@ -462,7 +462,7 @@
|
||||
<string name="collection_add_selection">Прикрепить к трансляции</string>
|
||||
<string name="collection_add_to_stream">Добавить в эфир</string>
|
||||
<string name="collection_add_wall_to_list_hint">Выберите запись со своей страницы, которой Вы хотите поделиться со зрителями</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.com</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.ru</string>
|
||||
<string name="collection_link_limit">Добавлено максимально возможное количество ссылок</string>
|
||||
<string name="collection_link_not_valid">Ссылка не поддерживается</string>
|
||||
<string name="collection_links_list">Список ссылок</string>
|
||||
@@ -1113,7 +1113,7 @@
|
||||
<string name="friends_recommendations_gmail">Gmail</string>
|
||||
<string name="friends_recommendations_invete_by_link">Пригласить по ссылке</string>
|
||||
<string name="friends_recommendations_invite">Пригласить</string>
|
||||
<string name="friends_recommendations_invite_message">Приглашаю дружить ВКонтакте! http://vk.com/join</string>
|
||||
<string name="friends_recommendations_invite_message">Приглашаю дружить ВКонтакте! http://vk.ru/join</string>
|
||||
<string name="friends_recommendations_locator_text">Чтобы увидеть людей рядом, попросите их зайти на этот экран со своих устройств</string>
|
||||
<string name="friends_recommendations_ok">OK</string>
|
||||
<string name="friends_recommendations_request_done">Вы друзья</string>
|
||||
@@ -1395,7 +1395,7 @@
|
||||
<string name="identity_address">Адрес</string>
|
||||
<string name="identity_address_dat">адрес</string>
|
||||
<string name="identity_custom_label">Своя категория</string>
|
||||
<string name="identity_desc">Вы можете указать данные один раз и быстро предоставлять мини-приложениям из [https://vk.com/services|каталога] — для доставки товаров или связи с Вами</string>
|
||||
<string name="identity_desc">Вы можете указать данные один раз и быстро предоставлять мини-приложениям из [https://vk.ru/services|каталога] — для доставки товаров или связи с Вами</string>
|
||||
<string name="identity_email">Электронная почта</string>
|
||||
<string name="identity_email_dat">адрес электронной почты</string>
|
||||
<string name="identity_label">Категория</string>
|
||||
@@ -1425,7 +1425,7 @@
|
||||
<string name="include_community">Подключить сообщество</string>
|
||||
<string name="installed_games_title">Мои игры</string>
|
||||
<string name="invalid_date">Неверная дата публикации</string>
|
||||
<string name="invitation">Приглашаю дружить ВКонтакте! http://vk.com/join</string>
|
||||
<string name="invitation">Приглашаю дружить ВКонтакте! http://vk.ru/join</string>
|
||||
<string name="invitation_declined">Приглашение отклонено.</string>
|
||||
<string name="invitation_sent">Приглашение отправлено.</string>
|
||||
<string name="invite">Пригласить</string>
|
||||
@@ -3310,7 +3310,7 @@
|
||||
<string name="serv_user_returned_m">%1$s вернулся в беседу</string>
|
||||
<string name="service_account_admin_100_info">"Профиль используется только для персональных оповещений.
|
||||
|
||||
По любым вопросам пишите в [https://vk.com/support|Поддержку.]"</string>
|
||||
По любым вопросам пишите в [https://vk.ru/support|Поддержку.]"</string>
|
||||
<string name="service_account_admin_101_info">Страница используется для обратной совместимости сервиса комментариев от имени сообщества.</string>
|
||||
<string name="service_account_mobile_info">Официальная страница мобильной поддержки ВКонтакте.</string>
|
||||
<string name="sett_accept_calls">Включить</string>
|
||||
@@ -5300,7 +5300,7 @@
|
||||
<string name="votes_your_balance">Ваш баланс</string>
|
||||
<string name="wall">Стена</string>
|
||||
<string name="wall_all_posts">Все записи</string>
|
||||
<string name="wall_comment_repost"><font color=#aaaaaa>Комментарий к </font><a href=vklink://view/?http://vk.com/wall%1$d_%2$d>записи</a></string>
|
||||
<string name="wall_comment_repost"><font color=#aaaaaa>Комментарий к </font><a href=vklink://view/?http://vk.ru/wall%1$d_%2$d>записи</a></string>
|
||||
<string name="wall_disabled">Стена выключена</string>
|
||||
<string name="wall_empty">Здесь пока нет записей</string>
|
||||
<string name="wall_empty_my">У Вас пока нет записей</string>
|
||||
@@ -5414,7 +5414,7 @@
|
||||
<string name="gms_download_microg">Скачать MicroG</string>
|
||||
<string name="gms_what_to_do_next">Что делать дальше?</string>
|
||||
<string name="gms_what_to_do_after_microg_title">Что делать после установки MicroG?</string>
|
||||
<string name="gms_what_to_do_after_microg_summ">Обновите регистрацию Firebase в настройках в разделе "Другое"</string>
|
||||
<string name="gms_what_to_do_after_microg_summ">1. Войдите в свой Google аккаунт \n2. Разрешите VTLite получать уведомления\n3. Обновите регистрацию Firebase в настройках в разделе "Другое"</string>
|
||||
<string name="donate">Помочь проекту</string>
|
||||
<string name="fulltime">dd MMMM yyyy в HH:mm:ss</string>
|
||||
<string name="fulltime2">dd MMMM в HH:mm:ss</string>
|
||||
@@ -5591,8 +5591,6 @@
|
||||
<string name="otaupd">Обновить</string>
|
||||
<string name="otaupdavalible">Доступно обновление!</string>
|
||||
<string name="otaupdchanges">Список изменений</string>
|
||||
<string name="otawarning">Внимание!</string>
|
||||
<string name="otawarnwait">Пожалуйста, не закрывайте приложение до окончания загрузки обновления</string>
|
||||
<string name="privacy_vtl">Приватность</string>
|
||||
<string name="proxyadvsettings">Расширенные настройки прокси</string>
|
||||
<string name="proxyapi">API Домен</string>
|
||||
@@ -5600,7 +5598,6 @@
|
||||
<string name="proxydonate">Донат</string>
|
||||
<string name="proxyhttp">HTTP Прокси</string>
|
||||
<string name="proxyhttps">HTTPS Прокси</string>
|
||||
<string name="proxyimpinfo">Внимание!</string>
|
||||
<string name="proxyimpinfosum">"Не используйте прокси если ВК не заблокирован в вашей стране
|
||||
|
||||
Для применения изменений необходимо перезапустить приложение"</string>
|
||||
@@ -5749,7 +5746,6 @@
|
||||
<string name="activity_dnw_summary">Функция позволяет вам не отправлять статус вашего набора/написания сообщения</string>
|
||||
<string name="activity_dns_summary">Функция позволяет вам не отправлять статус просмотра вами историй</string>
|
||||
|
||||
<string name="activity_dnr_warn">Внимание!</string>
|
||||
<string name="activity_dnr_visual">Визуально может работать некорректно (сообщение прочиталось локально), но у собеседника оно прочитано не будет</string>
|
||||
|
||||
<string name="activity_undel">Анти-удаление сообщений</string>
|
||||
@@ -5793,7 +5789,7 @@
|
||||
|
||||
<string name="debug_no_toggles">Значения toggles не были получены с сервера</string>
|
||||
|
||||
<string name="debug_warning">Внимание!</string>
|
||||
<string name="warning">Внимание!</string>
|
||||
<string name="debug_warning_summary">Данное меню предназначено только для тестирования работоспособности приложения. Если вы являетесь рядовым юзером, то вам не следует ничего не трогать в данных настройках (пожалуйста)</string>
|
||||
<string name="debug_show_settings_item">Показывать пункт дебага в настройках</string>
|
||||
|
||||
@@ -5891,7 +5887,7 @@
|
||||
<string name="DNR_ON">Включить нечиталку</string>
|
||||
<string name="DNR_OFF">Отключить нечиталку</string>
|
||||
|
||||
<string name="vtl_crashed">Произошла ошибка в работе Vtosters!</string>
|
||||
<string name="vtl_crashed">Произошла ошибка в работе VTLite!</string>
|
||||
<string name="vtl_crash_upload">Загрузить логи</string>
|
||||
<string name="vtl_crash_save">Сохранить в файл</string>
|
||||
|
||||
@@ -6169,4 +6165,25 @@
|
||||
<string name="denial_of_responsibility_proxy_summ">Разработчики клиента VTLite не несут никакой ответственности за работу и безопасность использования сторонних прокси-серверов \n\nИспользуйте на свой страх и риск</string>
|
||||
|
||||
<string name="altervika_title">Альтернативный домен VikaMobile</string>
|
||||
|
||||
<string name="proxy_setup_title">Установить прокси</string>
|
||||
<string name="proxy_setup_summ">Получение стороннего прокси из поддерживаемых списков прокси</string>
|
||||
<string name="proxy_setup_success">Прокси установлен, хост:</string>
|
||||
|
||||
<string name="delete_elements_confirm">Вы действительно хотите удалить все элементы из списка?</string>
|
||||
<string name="elements_deleted_success">Список элементов успешно очищен</string>
|
||||
<string name="get_proxy_error">Ошибка при получении прокси</string>
|
||||
|
||||
<string name="add_to_filter_whitelist">Добавить в вайтлист фильтров</string>
|
||||
<string name="remove_from_filter_whitelist">Удалить из вайтлиста фильтров</string>
|
||||
<string name="add_to_ads_whitelist">Добавить в вайтлист рекламы</string>
|
||||
<string name="remove_from_ads_whitelist">Удалить из вайтлиста рекламы</string>
|
||||
<string name="removed_from_whitelist_success">Группа удалена из вайтлиста</string>
|
||||
<string name="added_to_whitelist_success">Группа добавлена в вайтлист</string>
|
||||
|
||||
<string name="whitelisted_ad_groups_title">Вайтлист рекламы</string>
|
||||
<string name="whitelisted_filters_groups_title">Вайтлист фильтров</string>
|
||||
|
||||
<string name="download_dl">Скачать диалог</string>
|
||||
<string name="download_dl_error">Произошла ошибка при попытке скачать диалог</string>
|
||||
</resources>
|
||||
@@ -455,7 +455,7 @@
|
||||
<string name="collection_add_selection">Прикріпити до трансляції</string>
|
||||
<string name="collection_add_to_stream">Додати до ефіру</string>
|
||||
<string name="collection_add_wall_to_list_hint">Виберіть запис зі своєї сторінки, яким Ви хочете поділитися з глядачами</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.com</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.ru</string>
|
||||
<string name="collection_link_limit">Додано максимально можливу кількість посилань</string>
|
||||
<string name="collection_link_not_valid">Посилання не підтримується</string>
|
||||
<string name="collection_links_list">Список посилань</string>
|
||||
@@ -1058,7 +1058,7 @@
|
||||
<string name="friends_recommendations_gmail">Gmail</string>
|
||||
<string name="friends_recommendations_invete_by_link">Запросити за посиланням</string>
|
||||
<string name="friends_recommendations_invite">Запросити</string>
|
||||
<string name="friends_recommendations_invite_message">Запрошую дружити VK! http://vk.com/join</string>
|
||||
<string name="friends_recommendations_invite_message">Запрошую дружити VK! http://vk.ru/join</string>
|
||||
<string name="friends_recommendations_locator_text">Щоб побачити людей, що поруч, попросіть їх зайти на цей екран зі своїх пристроїв</string>
|
||||
<string name="friends_recommendations_ok">OK</string>
|
||||
<string name="friends_recommendations_request_done">Ви друзі</string>
|
||||
@@ -1340,7 +1340,7 @@
|
||||
<string name="identity_address">Адреса</string>
|
||||
<string name="identity_address_dat">адреса</string>
|
||||
<string name="identity_custom_label">Своя категорія</string>
|
||||
<string name="identity_desc">Ви можете вказати дані один раз і швидко надавати міні-додаткам з [https://vk.com/services|каталогу] — для доставки товарів або зв‘язку з Вами</string>
|
||||
<string name="identity_desc">Ви можете вказати дані один раз і швидко надавати міні-додаткам з [https://vk.ru/services|каталогу] — для доставки товарів або зв‘язку з Вами</string>
|
||||
<string name="identity_email">Електронна пошта</string>
|
||||
<string name="identity_email_dat">адреса електронної пошти</string>
|
||||
<string name="identity_label">Категорія</string>
|
||||
@@ -1370,7 +1370,7 @@
|
||||
<string name="include_community">Підключити спільноту</string>
|
||||
<string name="installed_games_title">Мої ігри</string>
|
||||
<string name="invalid_date">Невірна дата публікації</string>
|
||||
<string name="invitation">Запрошую дружити ВКонтакті! http://vk.com/join</string>
|
||||
<string name="invitation">Запрошую дружити ВКонтакті! http://vk.ru/join</string>
|
||||
<string name="invitation_declined">Запрошення відхилено.</string>
|
||||
<string name="invitation_sent">Запрошення надіслано.</string>
|
||||
<string name="invite">Запросити</string>
|
||||
@@ -3242,7 +3242,7 @@
|
||||
<string name="serv_user_returned_m">%1$s повернувся в бесіду</string>
|
||||
<string name="service_account_admin_100_info">"Профіль використовується лише для персональних сповіщень.
|
||||
|
||||
З будь-яких питань пишіть в [https://vk.com/support|Підтримку.]"</string>
|
||||
З будь-яких питань пишіть в [https://vk.ru/support|Підтримку.]"</string>
|
||||
<string name="service_account_admin_101_info">Сторінка використовується для забезпечення сумісності сервісу коментарів від імені спільноти.</string>
|
||||
<string name="service_account_mobile_info">Офіційна сторінка мобільної підтримки VK.</string>
|
||||
<string name="sett_accept_calls">Увімкнути</string>
|
||||
@@ -5228,7 +5228,7 @@
|
||||
<string name="votes_your_balance">Ваш баланс</string>
|
||||
<string name="wall">Стіна</string>
|
||||
<string name="wall_all_posts">Всі записи</string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Коментар до </font><a href=\"vklink://view/?http://vk.com/wall%1$d_%2$d\">записи</a></string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Коментар до </font><a href=\"vklink://view/?http://vk.ru/wall%1$d_%2$d\">записи</a></string>
|
||||
<string name="wall_disabled">Стіну вимкнено</string>
|
||||
<string name="wall_empty">Тут поки немає записів</string>
|
||||
<string name="wall_empty_my">У Вас поки немає записів</string>
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/vkui_ic_voip_call_video_24</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_add_24</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_48</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_24</item>
|
||||
<item name="im_msg_avatar_margin_top">1.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">6.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">6.0dip</item>
|
||||
@@ -234,6 +235,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/ic_videocam_28_outline</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_add_24</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_48</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_24</item>
|
||||
<item name="im_msg_avatar_margin_top">3.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">0.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">8.0dip</item>
|
||||
|
||||
@@ -741,7 +741,7 @@
|
||||
<item>liked</item>
|
||||
</string-array>
|
||||
<string-array name="proxy">
|
||||
<item>No Proxy</item>
|
||||
<item>No proxy</item>
|
||||
<item>zaborona.help</item>
|
||||
<item>VikaMobile</item>
|
||||
<item>Random proxy</item>
|
||||
|
||||
@@ -2509,4 +2509,5 @@
|
||||
<attr name="yesNoPreferenceStyle" format="reference" />
|
||||
<attr name="zOrderOnTop" format="boolean" />
|
||||
<attr name="im_ic_msgreload" format="reference" />
|
||||
<attr name="im_ic_msgdl" format="reference" />
|
||||
</resources>
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
<string name="article_subscribers_formatted">%s followers</string>
|
||||
<string name="article_view_count_formatted">%s views</string>
|
||||
<string name="articles">Articles</string>
|
||||
<string name="asset_statements">[ { \"include\": \"https://vk.com/.well-known/assetlinks.json\" }, { \"relation\":[ \"delegate_permission/common.handle_all_urls\" ], \"target\":{ \"namespace\":\"web\", \"site\":\"https://vk.com\" } }, { \"relation\":[ \"delegate_permission/common.handle_all_urls\" ], \"target\":{ \"namespace\":\"web\", \"site\":\"https://m.vk.com\" } } ]</string>
|
||||
<string name="asset_statements">[ { \"include\": \"https://vk.ru/.well-known/assetlinks.json\" }, { \"relation\":[ \"delegate_permission/common.handle_all_urls\" ], \"target\":{ \"namespace\":\"web\", \"site\":\"https://vk.ru\" } }, { \"relation\":[ \"delegate_permission/common.handle_all_urls\" ], \"target\":{ \"namespace\":\"web\", \"site\":\"https://m.vk.ru\" } } ]</string>
|
||||
<string name="attach">Add</string>
|
||||
<string name="attach_action_link_successed">Link added</string>
|
||||
<string name="attach_album">Album</string>
|
||||
@@ -485,7 +485,7 @@ no results"</string>
|
||||
<string name="collection_add_selection">Attach to live stream</string>
|
||||
<string name="collection_add_to_stream">Add to live stream</string>
|
||||
<string name="collection_add_wall_to_list_hint">Select a post from your wall that you want to share with your viewers</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.com</string>
|
||||
<string name="collection_link_add_link_input_hint">https://vk.ru</string>
|
||||
<string name="collection_link_limit">Link limit reached</string>
|
||||
<string name="collection_link_not_valid">URL not supported</string>
|
||||
<string name="collection_links_list">Link list</string>
|
||||
@@ -1171,7 +1171,7 @@ and organize it with the help of tags"</string>
|
||||
<string name="friends_recommendations_gmail">Gmail</string>
|
||||
<string name="friends_recommendations_invete_by_link">Invite by link</string>
|
||||
<string name="friends_recommendations_invite">Invite</string>
|
||||
<string name="friends_recommendations_invite_message">Join me on VK! http://vk.com/join</string>
|
||||
<string name="friends_recommendations_invite_message">Join me on VK! http://vk.ru/join</string>
|
||||
<string name="friends_recommendations_locator_text">To find friends nearby, ask them to open this screen on their devices</string>
|
||||
<string name="friends_recommendations_ok">OK</string>
|
||||
<string name="friends_recommendations_request_done">You are friends</string>
|
||||
@@ -1460,7 +1460,7 @@ less often."</string>
|
||||
<string name="identity_address">Address</string>
|
||||
<string name="identity_address_dat">address</string>
|
||||
<string name="identity_custom_label">Custom</string>
|
||||
<string name="identity_desc">You can enter your information here so that mini apps from the [https://vk.com/services|catalog] can use it to set up delivery or contact you</string>
|
||||
<string name="identity_desc">You can enter your information here so that mini apps from the [https://vk.ru/services|catalog] can use it to set up delivery or contact you</string>
|
||||
<string name="identity_email">Email</string>
|
||||
<string name="identity_email_dat">email address</string>
|
||||
<string name="identity_label">Category</string>
|
||||
@@ -1490,7 +1490,7 @@ less often."</string>
|
||||
<string name="include_community">Add community</string>
|
||||
<string name="installed_games_title">My games</string>
|
||||
<string name="invalid_date">Invalid posting date</string>
|
||||
<string name="invitation">Join me on VK! http://vk.com/join</string>
|
||||
<string name="invitation">Join me on VK! http://vk.ru/join</string>
|
||||
<string name="invitation_declined">Invitation declined.</string>
|
||||
<string name="invitation_sent">Your invitation has been sent.</string>
|
||||
<string name="invite">Invite</string>
|
||||
@@ -3405,7 +3405,7 @@ the VK camera"</string>
|
||||
<string name="serv_user_returned_m">%1$s returned to the chat</string>
|
||||
<string name="service_account_admin_100_info">"This profile is only used for personal notifications.
|
||||
|
||||
If you have any questions, please contact [https://vk.com/support|Support.]"</string>
|
||||
If you have any questions, please contact [https://vk.ru/support|Support.]"</string>
|
||||
<string name="service_account_admin_101_info">This page is used to provide backward compatibility for comments by communities.</string>
|
||||
<string name="service_account_mobile_info">This is the official profile of VK Mobile Support.</string>
|
||||
<string name="sett_accept_calls">Enable</string>
|
||||
@@ -5430,7 +5430,7 @@ with video"</string>
|
||||
<string name="votes_your_balance">Your balance</string>
|
||||
<string name="wall">Wall</string>
|
||||
<string name="wall_all_posts">All posts</string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Comment on </font><a href=\"vklink://view/?http://vk.com/wall%1$d_%2$d\">post</a></string>
|
||||
<string name="wall_comment_repost"><font color=\"#aaaaaa\">Comment on </font><a href=\"vklink://view/?http://vk.ru/wall%1$d_%2$d\">post</a></string>
|
||||
<string name="wall_disabled">Wall disabled</string>
|
||||
<string name="wall_empty">No posts here yet</string>
|
||||
<string name="wall_empty_my">"You haven't posted anything yet"</string>
|
||||
@@ -5548,7 +5548,7 @@ Filters are not case-sensitive!"</string>
|
||||
<string name="gms_download_microg">Download MicroG</string>
|
||||
<string name="gms_what_to_do_next">What to do next?</string>
|
||||
<string name="gms_what_to_do_after_microg_title">What to do after installing MicroG?</string>
|
||||
<string name="gms_what_to_do_after_microg_summ">Update Firebase registration in Other settings</string>
|
||||
<string name="gms_what_to_do_after_microg_summ">1. Log in to your Google account \n2. Allow VTLite to receive notifications\n3. Update Firebase registration in Other settings</string>
|
||||
<string name="donate">Donate</string>
|
||||
<string name="fulltime">dd MMMM yyyy HH:mm:ss</string>
|
||||
<string name="fulltime2">dd MMMM HH:mm:ss</string>
|
||||
@@ -5725,8 +5725,6 @@ Expand text..."</string>
|
||||
<string name="otaupd">Update</string>
|
||||
<string name="otaupdavalible">Update available!</string>
|
||||
<string name="otaupdchanges">Changelog</string>
|
||||
<string name="otawarning">Warning!</string>
|
||||
<string name="otawarnwait">"Please don't close the app until the end of the update download"</string>
|
||||
<string name="privacy_vtl">Privacy</string>
|
||||
<string name="proxyadvsettings">Advanced proxy settings</string>
|
||||
<string name="proxyapi">API Domain</string>
|
||||
@@ -5734,7 +5732,6 @@ Expand text..."</string>
|
||||
<string name="proxydonate">Donate</string>
|
||||
<string name="proxyhttp">HTTP Proxy</string>
|
||||
<string name="proxyhttps">HTTPS Proxy</string>
|
||||
<string name="proxyimpinfo">Warning!</string>
|
||||
<string name="proxyimpinfosum">"Don't use proxy if VK is available in your country
|
||||
|
||||
You need to restart the application to apply proxy settings"</string>
|
||||
@@ -5882,7 +5879,6 @@ May look like a fake leaving the online"</string>
|
||||
<string name="activity_dnw_summary">Function lets you don\'t send write message status</string>
|
||||
<string name="activity_dns_summary">Function lets you don\'t send read stories status</string>
|
||||
|
||||
<string name="activity_dnr_warn">Warning!</string>
|
||||
<string name="activity_dnr_visual">Visually may not work correctly (locally read), but companion will see that it wasn\'t read.</string>
|
||||
|
||||
<string name="activity_undel">Anti-delete messages</string>
|
||||
@@ -5925,7 +5921,7 @@ May look like a fake leaving the online"</string>
|
||||
|
||||
<string name="checkforupdates">Check for updates</string>
|
||||
|
||||
<string name="debug_warning">Warning!</string>
|
||||
<string name="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>
|
||||
<string name="debug_show_settings_item">Show debug category in settings</string>
|
||||
|
||||
@@ -6029,7 +6025,7 @@ May look like a fake leaving the online"</string>
|
||||
<string name="DNR_ON">Enable Do Not Read</string>
|
||||
<string name="DNR_OFF">Disable Do Not Read</string>
|
||||
|
||||
<string name="vtl_crashed">An error has occurred in VTL!</string>
|
||||
<string name="vtl_crashed">An error has occurred in VTLite!</string>
|
||||
<string name="vtl_crash_upload">Upload logs</string>
|
||||
<string name="vtl_crash_save">Save to local file</string>
|
||||
|
||||
@@ -6307,4 +6303,25 @@ May look like a fake leaving the online"</string>
|
||||
<string name="denial_of_responsibility_proxy_summ">The developers of the VTLite client assume no responsibility for the safety of using third-party proxies \n\nUse at your own risk</string>
|
||||
|
||||
<string name="altervika_title">Alternative VikaMobile domain</string>
|
||||
|
||||
<string name="proxy_setup_title">Set proxy</string>
|
||||
<string name="proxy_setup_summ">Getting a third party proxy from supported proxy lists</string>
|
||||
<string name="proxy_setup_success">Proxy set up, host:</string>
|
||||
|
||||
<string name="delete_elements_confirm">Are you sure you want to delete all elements from the list?</string>
|
||||
<string name="elements_deleted_success">Element list cleared successfully</string>
|
||||
<string name="get_proxy_error">An error occurred while getting the proxy</string>
|
||||
|
||||
<string name="add_to_filter_whitelist">Add to filters whitelist</string>
|
||||
<string name="remove_from_filter_whitelist">Remove from filters whitelist</string>
|
||||
<string name="add_to_ads_whitelist">Add to ads whitelist</string>
|
||||
<string name="remove_from_ads_whitelist">Remove from ads whitelist</string>
|
||||
<string name="removed_from_whitelist_success">Group removed from whitelist</string>
|
||||
<string name="added_to_whitelist_success">Group added to whitelist</string>
|
||||
|
||||
<string name="whitelisted_ad_groups_title">Ads whitelist</string>
|
||||
<string name="whitelisted_filters_groups_title">Filters whitelist</string>
|
||||
|
||||
<string name="download_dl">Download dialog</string>
|
||||
<string name="download_dl_error">An error occurred while trying to download the dialog</string>
|
||||
</resources>
|
||||
|
||||
@@ -5176,6 +5176,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/vkui_ic_voip_call_video_24</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_add_24</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_48</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_24</item>
|
||||
<item name="im_msg_avatar_margin_top">1.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">6.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">6.0dip</item>
|
||||
@@ -6809,6 +6810,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/ic_videocam_28_outline</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_add_24</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_48</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_24</item>
|
||||
<item name="im_msg_avatar_margin_top">3.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">0.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">8.0dip</item>
|
||||
@@ -9166,6 +9168,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/ic_videocam_28_outline</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_write_outline_28_new</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_outline_24</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_outline_28</item>
|
||||
<item name="im_msg_avatar_margin_top">3.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">0.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">8.0dip</item>
|
||||
@@ -9324,6 +9327,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/ic_videocam_28_outline</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_write_outline_28_new</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_outline_24</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_outline_28</item>
|
||||
<item name="im_msg_avatar_margin_top">3.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">0.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">8.0dip</item>
|
||||
@@ -9483,6 +9487,7 @@
|
||||
<item name="im_ic_voip_call_video">@drawable/ic_videocam_28_outline</item>
|
||||
<item name="im_ic_write_msg">@drawable/ic_write_outline_28_new</item>
|
||||
<item name="im_ic_msgreload">@drawable/ic_camera_switch_outline_24</item>
|
||||
<item name="im_ic_msgdl">@drawable/ic_download_outline_28</item>
|
||||
<item name="im_msg_avatar_margin_top">3.0dip</item>
|
||||
<item name="im_msg_box_margin_start_no_avatar">0.0dip</item>
|
||||
<item name="im_msg_box_margin_start_with_avatar">8.0dip</item>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</base-config>
|
||||
<domain-config>
|
||||
<!-- Make sure your URL Server here -->
|
||||
<domain includeSubdomains="true">vk.com</domain>
|
||||
<domain includeSubdomains="true">vk.ru</domain>
|
||||
<trust-anchors>
|
||||
<certificates src="user" />
|
||||
<certificates src="system" />
|
||||
@@ -22,7 +22,7 @@
|
||||
</domain-config>
|
||||
<domain-config>
|
||||
<!-- Make sure your URL Server here -->
|
||||
<domain includeSubdomains="true">api.vk.com</domain>
|
||||
<domain includeSubdomains="true">api.vk.ru</domain>
|
||||
<trust-anchors>
|
||||
<certificates src="user" />
|
||||
<certificates src="system" />
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="@string/activity_dnr_visual"
|
||||
android:title="@string/activity_dnr_warn" />
|
||||
android:title="@string/warning" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="read_pm"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="@string/debug_warning_summary"
|
||||
android:title="@string/debug_warning" />
|
||||
android:title="@string/warning" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="devmenu"
|
||||
@@ -99,23 +99,23 @@
|
||||
android:key="domains"
|
||||
android:title="@string/debug_domains">
|
||||
<Preference
|
||||
android:defaultValue="api.vk.com"
|
||||
android:defaultValue="api.vk.ru"
|
||||
android:key="apiHost"
|
||||
android:title="@string/debug_domains_api" />
|
||||
<Preference
|
||||
android:defaultValue="oauth.vk.com"
|
||||
android:defaultValue="oauth.vk.ru"
|
||||
android:key="oauthHost"
|
||||
android:title="@string/debug_domains_oauth" />
|
||||
<Preference
|
||||
android:defaultValue="static.vk.com"
|
||||
android:defaultValue="static.vk.ru"
|
||||
android:key="vkUiHostUri"
|
||||
android:title="VK UI host uri" />
|
||||
<Preference
|
||||
android:defaultValue="vk.com/spa"
|
||||
android:defaultValue="vk.ru/spa"
|
||||
android:key="spaUri"
|
||||
android:title="VK UI SPA uri" />
|
||||
<Preference
|
||||
android:defaultValue="m.vk.com"
|
||||
android:defaultValue="m.vk.ru"
|
||||
android:key="awayPhpDomain"
|
||||
android:title="@string/debug_domains_awayphp" />
|
||||
</PreferenceCategory>
|
||||
@@ -246,7 +246,7 @@
|
||||
android:key="__dbg_test_crash"
|
||||
android:title="@string/debug_tests_crash" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="https://static.vk.com/demo"
|
||||
android:defaultValue="https://static.vk.ru/demo"
|
||||
android:key="__dbg_spa_uri"
|
||||
android:title="@string/debug_tests_spa_uri" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
android:key="adsstories"
|
||||
android:summary="@string/feed_ads_stories_summary"
|
||||
android:title="@string/vtldas" />
|
||||
<Preference
|
||||
android:key="whitelisted_ad_groups"
|
||||
android:title="@string/whitelisted_ad_groups_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vtlfilters">
|
||||
<Preference
|
||||
@@ -74,6 +77,9 @@
|
||||
android:key="copyright_post"
|
||||
android:summary="@string/feed_ads_sources_summary"
|
||||
android:title="@string/feed_ads_sources" />
|
||||
<Preference
|
||||
android:key="whitelisted_filters_groups"
|
||||
android:title="@string/whitelisted_filters_groups_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vtlrecommend">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="@string/proxyimpinfosum"
|
||||
android:title="@string/proxyimpinfo" />
|
||||
android:title="@string/warning" />
|
||||
<Preference
|
||||
android:enabled="false"
|
||||
android:summary="@string/denial_of_responsibility_proxy_summ"
|
||||
@@ -18,8 +18,8 @@
|
||||
android:title="@string/useproxy" />
|
||||
<Preference
|
||||
android:key="random_proxy"
|
||||
android:summary="Получение стороннего прокси из поддерживаемых списков прокси"
|
||||
android:title="Установить прокси" />
|
||||
android:summary="@string/proxy_setup_summ"
|
||||
android:title="@string/proxy_setup_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/proxyadvsettings">
|
||||
<EditTextPreference
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
goto :goto_0
|
||||
|
||||
:cond_0
|
||||
const-string p1, "https://vk.com/android_app"
|
||||
const-string p1, "https://vk.ru/android_app"
|
||||
|
||||
:goto_0
|
||||
move-object v3, p1
|
||||
@@ -140,7 +140,7 @@
|
||||
.line 9
|
||||
new-instance p1, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;
|
||||
|
||||
const-string v0, "https://m.vk.com/privacy"
|
||||
const-string v0, "https://m.vk.ru/privacy"
|
||||
|
||||
invoke-direct {p1, v0}, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;-><init>(Ljava/lang/String;)V
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
.line 16
|
||||
new-instance p1, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;
|
||||
|
||||
const-string v0, "https://m.vk.com/terms"
|
||||
const-string v0, "https://m.vk.ru/terms"
|
||||
|
||||
invoke-direct {p1, v0}, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;-><init>(Ljava/lang/String;)V
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
.line 27
|
||||
new-instance p1, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;
|
||||
|
||||
const-string v0, "https://m.vk.com/privacy/cookies"
|
||||
const-string v0, "https://m.vk.ru/privacy/cookies"
|
||||
|
||||
invoke-direct {p1, v0}, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;-><init>(Ljava/lang/String;)V
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
.line 34
|
||||
new-instance p1, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;
|
||||
|
||||
const-string v0, "https://vk.com/data_protection"
|
||||
const-string v0, "https://vk.ru/data_protection"
|
||||
|
||||
invoke-direct {p1, v0}, Lcom/vtosters/lite/general/fragments/WebViewFragment$g;-><init>(Ljava/lang/String;)V
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string p4, "https://vk.com/app"
|
||||
const-string p4, "https://vk.ru/app"
|
||||
|
||||
invoke-virtual {p2, p4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v1, "https://vk.com/app"
|
||||
const-string v1, "https://vk.ru/app"
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
.method public R1()Ljava/lang/String;
|
||||
.locals 1
|
||||
|
||||
const-string v0, "api.vk.com"
|
||||
const-string v0, "api.vk.ru"
|
||||
|
||||
invoke-static {v0}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
.method public T1()Ljava/lang/String;
|
||||
.locals 1
|
||||
|
||||
const-string v0, "api.vk.com"
|
||||
const-string v0, "api.vk.ru"
|
||||
|
||||
invoke-static {v0}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
.method public static a(Lcom/vk/api/base/ApiConfig$a;)Ljava/lang/String;
|
||||
.locals 0
|
||||
|
||||
const-string p0, "http://vk.com"
|
||||
const-string p0, "http://vk.ru"
|
||||
|
||||
return-object p0
|
||||
.end method
|
||||
|
||||
@@ -1265,7 +1265,7 @@
|
||||
return-object v0
|
||||
|
||||
:cond_0
|
||||
const-string v0, "api.vk.com"
|
||||
const-string v0, "api.vk.ru"
|
||||
|
||||
invoke-static {v0}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -1739,7 +1739,7 @@
|
||||
|
||||
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v7, "vkontakte://vk.com/"
|
||||
const-string v7, "vkontakte://vk.ru/"
|
||||
|
||||
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
iput-wide p1, p0, Lcom/vk/api/internal/PingCall;->b:J
|
||||
|
||||
const-string p1, "https://vk.com/ping.txt"
|
||||
const-string p1, "https://vk.ru/ping.txt"
|
||||
|
||||
.line 2
|
||||
iput-object p1, p0, Lcom/vk/api/internal/PingCall;->a:Ljava/lang/String;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
const/4 v1, 0x1
|
||||
|
||||
const-string v2, "https://vk.com/source/masks/android_model.zip"
|
||||
const-string v2, "https://vk.ru/source/masks/android_model.zip"
|
||||
|
||||
invoke-direct {v0, v1, v2}, Lcom/vk/api/masks/MasksGetModel$MasksGetModelResponse;-><init>(ILjava/lang/String;)V
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
.method public final invoke()Ljava/lang/String;
|
||||
.locals 1
|
||||
|
||||
const-string v0, "api.vk.com"
|
||||
const-string v0, "api.vk.ru"
|
||||
|
||||
invoke-static {v0}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
:cond_2
|
||||
const-string v1, "vk_app_redirect_url"
|
||||
|
||||
const-string v3, "https://oauth.vk.com/blank.html"
|
||||
const-string v3, "https://oauth.vk.ru/blank.html"
|
||||
|
||||
invoke-static {v3}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
:cond_0
|
||||
new-instance p1, Ljava/lang/IllegalStateException;
|
||||
|
||||
const-string p2, "AppId is empty! Find out how to get your appId at https://vk.com/dev/access_token"
|
||||
const-string p2, "AppId is empty! Find out how to get your appId at https://vk.ru/dev/access_token"
|
||||
|
||||
invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
|
||||
|
||||
|
||||
@@ -1041,7 +1041,7 @@
|
||||
|
||||
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v2, "https://vk.com/?"
|
||||
const-string v2, "https://vk.ru/?"
|
||||
|
||||
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
goto :goto_1
|
||||
|
||||
:cond_0
|
||||
const-string v0, "https://oauth.vk.com/authorize"
|
||||
const-string v0, "https://oauth.vk.ru/authorize"
|
||||
|
||||
invoke-static {v0}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v4, "vk.com/"
|
||||
const-string v4, "vk.ru/"
|
||||
|
||||
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v1, "https://vk.com/@"
|
||||
const-string v1, "https://vk.ru/@"
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
const-string v2, "referer"
|
||||
|
||||
const-string v3, "https://vk.com"
|
||||
const-string v3, "https://vk.ru"
|
||||
|
||||
invoke-direct {v1, v2, v3}, Lkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -136,7 +136,7 @@
|
||||
|
||||
invoke-direct {v1, v2}, Lcom/vk/auth/api/VKAuthApiManager;-><init>(Lcom/vk/api/sdk/VKApiConfig;)V
|
||||
|
||||
const-string v1, "support@vk.com"
|
||||
const-string v1, "support@vk.ru"
|
||||
|
||||
.line 9
|
||||
iput-object v1, v0, Lcom/vk/auth/DefaultAuthModel;->b:Ljava/lang/String;
|
||||
@@ -276,7 +276,7 @@
|
||||
|
||||
move-result-object p1
|
||||
|
||||
const-string v0, "https://m.vk.com/terms?api_view=1&cc=%s&lang=%s"
|
||||
const-string v0, "https://m.vk.ru/terms?api_view=1&cc=%s&lang=%s"
|
||||
|
||||
invoke-static {v0, p1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
|
||||
move-result-object p1
|
||||
|
||||
const-string v0, "https://m.vk.com/privacy?api_view=1&cc=%s&lang=%s"
|
||||
const-string v0, "https://m.vk.ru/privacy?api_view=1&cc=%s&lang=%s"
|
||||
|
||||
invoke-static {v0, p1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const-string v1, "static.vk.com/restore"
|
||||
const-string v1, "static.vk.ru/restore"
|
||||
|
||||
invoke-static {v1}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -648,7 +648,7 @@
|
||||
|
||||
move-result-object v0
|
||||
|
||||
const-string v1, "oauth.vk.com"
|
||||
const-string v1, "oauth.vk.ru"
|
||||
|
||||
const-string v2, "oauthHost"
|
||||
|
||||
|
||||
@@ -3281,14 +3281,14 @@
|
||||
|
||||
const-string v7, "invite_link"
|
||||
|
||||
const-string v8, "https://vk.com/join"
|
||||
const-string v8, "https://vk.ru/join"
|
||||
|
||||
.line 51
|
||||
invoke-virtual {v2, v7, v8}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
move-result-object v7
|
||||
|
||||
const-string v8, "it.optString(\"invite_link\", \"https://vk.com/join\")"
|
||||
const-string v8, "it.optString(\"invite_link\", \"https://vk.ru/join\")"
|
||||
|
||||
invoke-static {v7, v8}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
move-result-object p2
|
||||
|
||||
const-string v0, "oauth.vk.com"
|
||||
const-string v0, "oauth.vk.ru"
|
||||
|
||||
invoke-static {v0}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
const-string v1, "validation_url"
|
||||
|
||||
const-string v3, "https://m.vk.com/payments?act=buy_votes"
|
||||
const-string v3, "https://m.vk.ru/payments?act=buy_votes"
|
||||
|
||||
invoke-virtual {v0, v1, v3}, Landroid/os/Bundle;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
const-string v2, "https://static.vk.com/promo_codes/"
|
||||
const-string v2, "https://static.vk.ru/promo_codes/"
|
||||
|
||||
invoke-static {v2}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -10336,13 +10336,13 @@
|
||||
|
||||
invoke-static {v1, v2}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
|
||||
const-string v2, "https://vk.com/vkapps_qr"
|
||||
const-string v2, "https://vk.ru/vkapps_qr"
|
||||
|
||||
invoke-static {v2}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
const-string v3, "Uri.parse(\"https://vk.com/vkapps_qr\")"
|
||||
const-string v3, "Uri.parse(\"https://vk.ru/vkapps_qr\")"
|
||||
|
||||
invoke-static {v2, v3}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V
|
||||
|
||||
|
||||
@@ -386,7 +386,7 @@
|
||||
|
||||
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v5, "https://vk.com/id"
|
||||
const-string v5, "https://vk.ru/id"
|
||||
|
||||
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
|
||||
if-eqz v6, :cond_6
|
||||
|
||||
const-string v8, ".vk.com"
|
||||
const-string v8, ".vk.ru"
|
||||
|
||||
invoke-static {v6, v8, v2, v7, v3}, Lkotlin/text/l;->a(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z
|
||||
|
||||
@@ -239,7 +239,7 @@
|
||||
|
||||
if-eqz v6, :cond_a
|
||||
|
||||
const-string v8, "vk.com"
|
||||
const-string v8, "vk.ru"
|
||||
|
||||
.line 61
|
||||
invoke-static {v6, v8, v4}, Lkotlin/text/l;->b(Ljava/lang/String;Ljava/lang/String;Z)Z
|
||||
@@ -890,12 +890,12 @@
|
||||
|
||||
if-eqz v0, :cond_0
|
||||
|
||||
const-string v0, "away.vk.com"
|
||||
const-string v0, "away.vk.ru"
|
||||
|
||||
goto :goto_0
|
||||
|
||||
:cond_0
|
||||
const-string v0, "m.vk.com"
|
||||
const-string v0, "m.vk.ru"
|
||||
|
||||
:goto_0
|
||||
return-object v0
|
||||
@@ -1548,7 +1548,7 @@
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const-string v2, "m.vk.com"
|
||||
const-string v2, "m.vk.ru"
|
||||
|
||||
invoke-static {v2, v1}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/Object;)Z
|
||||
|
||||
|
||||
@@ -359,7 +359,7 @@
|
||||
:cond_4
|
||||
and-int/lit8 v7, v2, 0x4
|
||||
|
||||
const-string v8, "vkontakte://vk.com/"
|
||||
const-string v8, "vkontakte://vk.ru/"
|
||||
|
||||
if-lez v7, :cond_8
|
||||
|
||||
|
||||
@@ -695,7 +695,7 @@
|
||||
|
||||
const/4 v2, 0x2
|
||||
|
||||
const-string v3, "vk.com/"
|
||||
const-string v3, "vk.ru/"
|
||||
|
||||
.line 2
|
||||
invoke-static {p1, v3, v0, v2, v1}, Lkotlin/text/l;->c(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z
|
||||
|
||||
@@ -478,7 +478,7 @@
|
||||
.line 52
|
||||
sget-object v1, Lcom/vk/common/links/LinkProcessor;->p:Lcom/vk/common/links/LinkProcessor$a;
|
||||
|
||||
const-string v3, "m.vk.com/up"
|
||||
const-string v3, "m.vk.ru/up"
|
||||
|
||||
move-object v2, p0
|
||||
|
||||
@@ -5262,7 +5262,7 @@
|
||||
|
||||
if-eqz v11, :cond_73
|
||||
|
||||
const-string v0, "https://vk.com/support"
|
||||
const-string v0, "https://vk.ru/support"
|
||||
|
||||
.line 176
|
||||
invoke-static {v0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v2, "https://m.vk.com/mail?community="
|
||||
const-string v2, "https://m.vk.ru/mail?community="
|
||||
|
||||
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
const-string v3, "https://api.vk.com/method/execute"
|
||||
const-string v3, "https://api.vk.ru/method/execute"
|
||||
|
||||
invoke-static {v3}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -564,7 +564,7 @@
|
||||
.line 4
|
||||
new-instance v2, Lcom/vk/core/network/proxy/ProxyHostChecker;
|
||||
|
||||
const-string v3, "https://vk.com/ping.txt"
|
||||
const-string v3, "https://vk.ru/ping.txt"
|
||||
|
||||
invoke-direct {v2, v3, p0}, Lcom/vk/core/network/proxy/ProxyHostChecker;-><init>(Ljava/lang/String;Lcom/vk/core/network/proxy/NetworkProxy;)V
|
||||
|
||||
@@ -573,7 +573,7 @@
|
||||
.line 5
|
||||
new-instance v2, Lcom/vk/core/network/proxy/ProxyHostChecker;
|
||||
|
||||
const-string v3, "https://m.vk.com/ping.txt"
|
||||
const-string v3, "https://m.vk.ru/ping.txt"
|
||||
|
||||
invoke-direct {v2, v3, p0}, Lcom/vk/core/network/proxy/ProxyHostChecker;-><init>(Ljava/lang/String;Lcom/vk/core/network/proxy/NetworkProxy;)V
|
||||
|
||||
@@ -730,7 +730,7 @@
|
||||
|
||||
invoke-virtual {v0, v1}, Lcom/vk/core/network/proxy/ProxyHost;->b(Z)V
|
||||
|
||||
const-string v0, "https://vk.com/ping.txt"
|
||||
const-string v0, "https://vk.ru/ping.txt"
|
||||
|
||||
.line 3
|
||||
invoke-direct {p0, v0}, Lcom/vk/core/network/proxy/NetworkProxy;->d(Ljava/lang/String;)Z
|
||||
@@ -739,7 +739,7 @@
|
||||
|
||||
if-nez v0, :cond_2
|
||||
|
||||
const-string v0, "https://m.vk.com/ping.txt"
|
||||
const-string v0, "https://m.vk.ru/ping.txt"
|
||||
|
||||
invoke-direct {p0, v0}, Lcom/vk/core/network/proxy/NetworkProxy;->d(Ljava/lang/String;)Z
|
||||
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
|
||||
move-result-object p1
|
||||
|
||||
const-string v0, "https://vk.com/ping.txt"
|
||||
const-string v0, "https://vk.ru/ping.txt"
|
||||
|
||||
.line 20
|
||||
invoke-virtual {p1, v0}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
|
||||
@@ -239,7 +239,7 @@
|
||||
|
||||
if-nez v0, :cond_3
|
||||
|
||||
const-string v0, "https://m.vk.com/ping.txt"
|
||||
const-string v0, "https://m.vk.ru/ping.txt"
|
||||
|
||||
.line 21
|
||||
invoke-virtual {p1, v0}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
|
||||
|
||||
@@ -974,7 +974,7 @@
|
||||
|
||||
if-nez v1, :cond_0
|
||||
|
||||
const-string v1, "https://vk.com/story"
|
||||
const-string v1, "https://vk.ru/story"
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
|
||||
|
||||
|
||||
@@ -591,7 +591,7 @@
|
||||
.method public static Q()Ljava/lang/String;
|
||||
.locals 1
|
||||
|
||||
const-string v0, "https://vk.com/support?act=faqs_pay&c=1"
|
||||
const-string v0, "https://vk.ru/support?act=faqs_pay&c=1"
|
||||
|
||||
return-object v0
|
||||
.end method
|
||||
@@ -635,7 +635,7 @@
|
||||
|
||||
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v1, "https://m.vk.com/landings/moneysend?lang="
|
||||
const-string v1, "https://m.vk.ru/landings/moneysend?lang="
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -1455,7 +1455,7 @@
|
||||
|
||||
invoke-direct {v11}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v12, "https://vk.com/wall"
|
||||
const-string v12, "https://vk.ru/wall"
|
||||
|
||||
invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -373,7 +373,7 @@
|
||||
|
||||
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v1, "https://vk.com/images/all_emoji/images_"
|
||||
const-string v1, "https://vk.ru/images/all_emoji/images_"
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
|
||||
new-array v0, v0, [Lkotlin/Pair;
|
||||
|
||||
const-string v3, "api.vk.com"
|
||||
const-string v3, "api.vk.ru"
|
||||
|
||||
invoke-static {v3}, Lru/vtosters/lite/proxy/api/ApiProxy;->linkReplacer(Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
|
||||
@@ -891,13 +891,13 @@
|
||||
|
||||
const-string v15, "vk.me/join"
|
||||
|
||||
const-string v8, "vk.com/settings?act=transfers"
|
||||
const-string v8, "vk.ru/settings?act=transfers"
|
||||
|
||||
const-string v12, "vk.com/story"
|
||||
const-string v12, "vk.ru/story"
|
||||
|
||||
const-string v9, "vk.com/settings?act=request_history"
|
||||
const-string v9, "vk.ru/settings?act=request_history"
|
||||
|
||||
const-string v7, "vk.com/narrative"
|
||||
const-string v7, "vk.ru/narrative"
|
||||
|
||||
.line 11
|
||||
filled-new-array {v15, v8, v12, v9, v7}, [Ljava/lang/String;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user