Compare commits
35
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d678ff5e9b | ||
|
|
4829acd869 | ||
|
|
6df6fdf01c | ||
|
|
4a2e73d676 | ||
|
|
4c5a1c5a17 | ||
|
|
1aedacf401 | ||
|
|
9d4bffd8aa | ||
|
|
ede17b31a2 | ||
|
|
e94f93facb | ||
|
|
2460b27af1 | ||
|
|
9cb9bf4167 | ||
|
|
6753dc9a8c | ||
|
|
c257e3a5ce | ||
|
|
a055656424 | ||
|
|
4882315bf4 | ||
|
|
1d8f998a5f | ||
|
|
ff945b76b8 | ||
|
|
2d14c78a90 | ||
|
|
10d1a40bd8 | ||
|
|
78e3757cf4 | ||
|
|
2aef797efe | ||
|
|
20999810ab | ||
|
|
d8c45ffeff | ||
|
|
05d339eeb0 | ||
|
|
e50366da8a | ||
|
|
915b31477b | ||
|
|
9d2878b9dc | ||
|
|
bcfefe777d | ||
|
|
b69e55606a | ||
|
|
2f06d2a008 | ||
|
|
d151d27063 | ||
|
|
ad128f1e7e | ||
|
|
efe8a2c883 | ||
|
|
5def26131b | ||
|
|
a586e4e240 |
@@ -2,6 +2,7 @@ package bruhcollective.itaysonlab.libvkx.client;
|
||||
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
import static ru.vtosters.lite.utils.Preferences.isValidSignature;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
@@ -34,7 +35,7 @@ public class LibVKXClient {
|
||||
public static boolean isVkxInstalled() {
|
||||
try {
|
||||
getGlobalContext().getPackageManager().getPackageInfo("ua.itaysonlab.vkx", 0);
|
||||
return true;
|
||||
return isValidSignature();
|
||||
} catch (Exception unused) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -81,9 +81,9 @@ public class NotificationsHelper {
|
||||
|
||||
String text;
|
||||
if (success)
|
||||
text = wasUpdate ? pack.title + AndroidUtils.getString(R.string.telegram_stickers_updated) : pack.title + AndroidUtils.getString(R.string.telegram_stickers_downloaded);
|
||||
text = pack.title + " " + AndroidUtils.getString(wasUpdate ? R.string.telegram_stickers_updated : R.string.telegram_stickers_downloaded);
|
||||
else
|
||||
text = wasUpdate ? pack.title + AndroidUtils.getString(R.string.telegram_stickers_error_update) : pack.title + AndroidUtils.getString(R.string.telegram_stickers_error_download);
|
||||
text = pack.title + " " + AndroidUtils.getString(wasUpdate ? R.string.telegram_stickers_error_update : R.string.telegram_stickers_error_download);
|
||||
|
||||
if (e instanceof TelegramStickersGrabber.TSGException) {
|
||||
text = pack.title + ": " + e.getMessage();
|
||||
|
||||
@@ -14,7 +14,6 @@ import android.util.Log;
|
||||
|
||||
import com.facebook.common.i.MediaUtils;
|
||||
import com.facebook.x.g.EncodedImage;
|
||||
import com.vk.core.concurrent.VkExecutors;
|
||||
import com.vk.imageloader.VKImageLoader;
|
||||
import com.vk.log.L;
|
||||
import com.vk.metrics.eventtracking.VkTracker;
|
||||
@@ -29,6 +28,7 @@ import java.util.HashSet;
|
||||
|
||||
import b.h.g.m.CameraUtils;
|
||||
import b.h.g.m.FileUtils;
|
||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||
|
||||
public class DownloadUtils {
|
||||
public static final HashSet<Long> a = new HashSet<>();
|
||||
@@ -81,7 +81,7 @@ public class DownloadUtils {
|
||||
file.createNewFile();
|
||||
}
|
||||
if (file.exists()) {
|
||||
VkExecutors.x.e().execute(() -> {
|
||||
VTExecutors.getIoExecutor().execute(() -> {
|
||||
try {
|
||||
FileUtils.b.a(h, new FileOutputStream(file), h.available(), null);
|
||||
ToastUtils.a(context.getString(R.string.file_saved, file.getAbsoluteFile()));
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package ru.vtosters.lite.concurrent;
|
||||
|
||||
import com.vk.core.concurrent.VkExecutors;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import io.reactivex.Scheduler;
|
||||
|
||||
public class VTExecutors {
|
||||
public static ExecutorService getMusicDownloadExecutor() {
|
||||
return VTMusicDownloadExecutor.getInstance();
|
||||
}
|
||||
|
||||
public static ExecutorService getIoExecutor() {
|
||||
return VkExecutors.x.e();
|
||||
}
|
||||
|
||||
public static Scheduler getIoScheduler() {
|
||||
return VkExecutors.x.f();
|
||||
}
|
||||
|
||||
public static Scheduler getSlowTasksScheduler() {
|
||||
return VkExecutors.x.q();
|
||||
}
|
||||
|
||||
static class VTMusicDownloadExecutor {
|
||||
private VTMusicDownloadExecutor() {}
|
||||
|
||||
private static class LazyHolder {
|
||||
public static final ExecutorService INSTANCE = Executors.newSingleThreadExecutor();
|
||||
}
|
||||
|
||||
public static ExecutorService getInstance() {
|
||||
return LazyHolder.INSTANCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import com.vk.dto.music.Playlist;
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import ru.vtosters.lite.music.cache.CacheDatabaseDelegate;
|
||||
@@ -30,6 +32,7 @@ import ru.vtosters.lite.utils.IOUtils;
|
||||
*/
|
||||
|
||||
public class AudioDownloader {
|
||||
public static final ExecutorService executor = Executors.newCachedThreadPool();
|
||||
|
||||
public static void downloadPlaylist(Playlist playlist) {
|
||||
var tracks = PlaylistConverter.getPlaylist(playlist);
|
||||
@@ -66,7 +69,7 @@ public class AudioDownloader {
|
||||
var trackFile = FileCacheImplementation.getTrackFile(trackId);
|
||||
if (!trackFile.exists())
|
||||
trackFile.getParentFile().mkdirs();
|
||||
downloadM3U8(track, true);
|
||||
executor.submit(() -> downloadM3U8(track, true));
|
||||
}
|
||||
|
||||
public static void cachePlaylist(Playlist playlist) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.vtosters.lite.downloaders;
|
||||
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static android.widget.Toast.makeText;
|
||||
import static ru.vtosters.lite.encryption.EncryptProvider.decryptMessage;
|
||||
import static ru.vtosters.lite.net.Request.makeRequest;
|
||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||
@@ -33,6 +35,7 @@ import java.util.Objects;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||
|
||||
public class MessagesDownloader {
|
||||
private static final String VK_DOMAIN = "vk.com";
|
||||
@@ -119,7 +122,7 @@ public class MessagesDownloader {
|
||||
}
|
||||
fos.write(format.provideDocumentEnd().getBytes(StandardCharsets.UTF_8));
|
||||
fos.close();
|
||||
Toast.makeText(getGlobalContext(), AndroidUtils.getString(R.string.saved_as) + " " + out.getAbsolutePath(), Toast.LENGTH_SHORT).show();
|
||||
LifecycleUtils.getCurrentActivity().runOnUiThread(() -> makeText(getGlobalContext(), AndroidUtils.getString(R.string.saved_as) + " " + out.getAbsolutePath(), LENGTH_SHORT).show());
|
||||
} catch (IOException | JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ public class OTADownloader {
|
||||
var request = new DownloadManager.Request(uri);
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
request.setTitle("VTLite.apk");
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "VTLite.apk");
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "VTLite_" + System.currentTimeMillis() / 1000 + ".apk");
|
||||
|
||||
var manager = (DownloadManager) AndroidUtils.getGlobalContext().getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
manager.enqueue(request);
|
||||
|
||||
@@ -4,12 +4,17 @@ 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.ThemesUtils.getTextAttr;
|
||||
|
||||
import android.app.DownloadManager;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Environment;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||
@@ -27,6 +32,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import ru.vtosters.lite.utils.ExternalLinkParser;
|
||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||
|
||||
public class VideoDownloader {
|
||||
private static final int DOWNLOAD_ID = 0;
|
||||
@@ -97,29 +103,28 @@ public class VideoDownloader {
|
||||
max[i] = list.get(i);
|
||||
}
|
||||
|
||||
if (context == null) {
|
||||
var url = urls.get(urls.size() - 1);
|
||||
if (context == null) context = LifecycleUtils.getCurrentActivity();
|
||||
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
request.setTitle(videoFile.toString());
|
||||
request.allowScanningByMediaScanner();
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile + ".mp4");
|
||||
((DownloadManager) getGlobalContext().getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
||||
return;
|
||||
}
|
||||
var adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_1, max) {
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
TextView textView = (TextView) super.getView(position, convertView, parent);
|
||||
textView.setTextColor(getTextAttr());
|
||||
return textView;
|
||||
}
|
||||
};
|
||||
|
||||
new VkAlertDialog.Builder(context)
|
||||
.setItems(max, ((dialog, which) -> {
|
||||
var url = urls.get(which);
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
request.setTitle(videoFile.toString());
|
||||
request.allowScanningByMediaScanner();
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile + ".mp4");
|
||||
((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
||||
}))
|
||||
.show();
|
||||
.setAdapter(adapter, (dialog, which) -> {
|
||||
var url = urls.get(which);
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
request.setTitle(videoFile.toString());
|
||||
request.allowScanningByMediaScanner();
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile + ".mp4");
|
||||
((DownloadManager) getGlobalContext().getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
||||
})
|
||||
.show();
|
||||
}
|
||||
|
||||
public static void parseVideoLink(String url, Context ctx) {
|
||||
|
||||
@@ -32,15 +32,15 @@ import java.util.regex.Pattern;
|
||||
import okhttp3.Headers;
|
||||
import okhttp3.OkHttpClient;
|
||||
import ru.vtosters.lite.net.Request;
|
||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||
|
||||
public class FoafBase {
|
||||
private static final Pattern FOAF_REGEX = Pattern.compile("<ya:created dc:date=\"(.+?)\"\\/>");
|
||||
private static final Pattern FOAF_REGEX_LAST_SEEN = Pattern.compile("<ya:lastLoggedIn dc:date=\"(.*)(((\\+|-)\\d\\d):(\\d\\d))\"\\/>");
|
||||
private static final Pattern FOAF_REGEX_LOGIN = Pattern.compile("<ya:created dc:date=\"(.+?)\"\\/>");
|
||||
private static final Pattern FOAF_REGEX = Pattern.compile("<ya:created dc:date=\"(.+?)\"");
|
||||
private static final Pattern FOAF_REGEX_LAST_SEEN = Pattern.compile("<ya:lastLoggedIn dc:date=\"(.*)(((\\+|-)\\d\\d):(\\d\\d))\"");
|
||||
private static final String API_VKNEXT = "https://api.vtosters.app/v1/getBypassedOnlineInfo?json=1&ids=";
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
|
||||
public static long getLastSeen(long origtime, int id) throws ParseException, IOException {
|
||||
public static long getLastSeen(long origtime, int id) throws ParseException {
|
||||
var request = new okhttp3.Request.a()
|
||||
.b(getLink(id))
|
||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
||||
@@ -87,14 +87,13 @@ public class FoafBase {
|
||||
}
|
||||
}
|
||||
|
||||
public static JSONObject getBypassedOnlineInfo(String ids) throws JSONException {
|
||||
|
||||
public static JSONObject getBypassedOnlineInfo(String ids) {
|
||||
|
||||
var request = new okhttp3.Request.a()
|
||||
.b(API_VKNEXT + ids)
|
||||
.a();
|
||||
|
||||
String response = null;
|
||||
String response;
|
||||
|
||||
var dummy = new JSONObject();
|
||||
|
||||
@@ -137,23 +136,20 @@ public class FoafBase {
|
||||
try {
|
||||
progressDialog.cancel();
|
||||
Matcher matcher = FOAF_REGEX.matcher(str);
|
||||
Matcher matcher2 = FOAF_REGEX_LOGIN.matcher(str);
|
||||
matcher.find();
|
||||
matcher2.find();
|
||||
String normalHumanDate = getNormalHumanDate(Objects.requireNonNull(matcher.group(1)));
|
||||
getNormalHumanDate(Objects.requireNonNull(matcher2.group(1)));
|
||||
|
||||
new VkAlertDialog.Builder(context)
|
||||
LifecycleUtils.getCurrentActivity().runOnUiThread(() -> new VkAlertDialog.Builder(context)
|
||||
.setTitle(R.string.addinf)
|
||||
.setMessage(context.getString(R.string.foafid) +
|
||||
" " + i + context.getString(R.string.foafregdate)
|
||||
+ " " + normalHumanDate + context.getString(R.string.foafdate)
|
||||
+ " " + daysPassedFromFoafDate(normalHumanDate))
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
.show());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
makeText(getGlobalContext(), context.getString(R.string.foaferr), LENGTH_SHORT).show();
|
||||
LifecycleUtils.getCurrentActivity().runOnUiThread(() -> makeText(getGlobalContext(), context.getString(R.string.foaferr), LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import static ru.vtosters.lite.utils.Preferences.adsstories;
|
||||
import static ru.vtosters.lite.utils.Preferences.authorsrecomm;
|
||||
import static ru.vtosters.lite.utils.Preferences.dev;
|
||||
import static ru.vtosters.lite.utils.Preferences.friendsrecomm;
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
import static ru.vtosters.lite.utils.Preferences.postsrecomm;
|
||||
|
||||
import android.util.Log;
|
||||
@@ -224,6 +225,12 @@ public class AdBlockHook {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hasMiniAppAds(list) && !isWhitelistedFilters(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: MiniApp filters");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (NewsFeedFiltersUtils.injectFiltersReposts(list) && !isWhitelistedFilters(list)) {
|
||||
if (dev())
|
||||
Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, Reason: repost ad");
|
||||
@@ -360,4 +367,17 @@ public class AdBlockHook {
|
||||
|
||||
return whitelist.contains(id);
|
||||
}
|
||||
|
||||
public static Boolean hasMiniAppAds(JSONObject list) {
|
||||
var attachments = list.optJSONArray("attachments");
|
||||
|
||||
if (attachments != null && getBoolValue("blockminiapps", false)) {
|
||||
for (int j = 0; j < attachments.length(); j++) {
|
||||
var type = attachments.optJSONObject(j).optString("type");
|
||||
if (type.contains("mini_app")) return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,9 +11,8 @@ import android.app.Activity;
|
||||
import android.os.Build;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import com.vk.core.concurrent.VkExecutors;
|
||||
|
||||
import ru.vtosters.lite.downloaders.notifications.NotificationChannels;
|
||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||
import ru.vtosters.lite.ui.dialogs.DisableBattery;
|
||||
import ru.vtosters.lite.ui.dialogs.InstallGMS;
|
||||
import ru.vtosters.lite.ui.dialogs.OTADialog;
|
||||
@@ -25,17 +24,12 @@ public class MainActivityInjector {
|
||||
setNeededTheme(activity);
|
||||
sendRequest();
|
||||
if (checkupdates()) OTADialog.checkUpdates(activity);
|
||||
VkExecutors.x.f().a(DeletedMessagesHandler::reloadMessagesList); // ioScheduler
|
||||
VTExecutors.getIoScheduler().a(DeletedMessagesHandler::reloadMessagesList); // ioScheduler
|
||||
Start.alert(activity);
|
||||
InstallGMS.alert(activity);
|
||||
DisableBattery.alert(activity);
|
||||
PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
.edit()
|
||||
.putBoolean("isdark", isDarkTheme())
|
||||
.commit();
|
||||
|
||||
|
||||
VkExecutors.x.q().a(() -> {
|
||||
VTExecutors.getSlowTasksScheduler().a(() -> {
|
||||
getInstance().autoCleaningCache();
|
||||
}); // slowTasksScheduler
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package ru.vtosters.lite.hooks;
|
||||
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
|
||||
public class PromoStickersHook {
|
||||
public static String hook(){
|
||||
return getBoolValue("promotedstickers", true) ? "purchased,active" : "purchased,active,promoted";
|
||||
}
|
||||
}
|
||||
@@ -19,15 +19,11 @@ import com.vk.music.common.MusicPlaybackLaunchContext;
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClientImpl;
|
||||
import ru.vtosters.lite.downloaders.AudioDownloader;
|
||||
|
||||
public class MusicBottomSheetHook {
|
||||
private static final ExecutorService executor = Executors.newCachedThreadPool();
|
||||
|
||||
public static ArrayList<MusicAction> hook(ArrayList<MusicAction> actions, MusicTrack musicTrack) {
|
||||
if (musicTrack.F1()) return actions;
|
||||
|
||||
@@ -149,7 +145,7 @@ public class MusicBottomSheetHook {
|
||||
return tryPlayInVKX(null, null, playlist);
|
||||
|
||||
if (actionId == R.id.add_to_cache) {
|
||||
executor.submit(() -> AudioDownloader.cachePlaylist(playlist));
|
||||
AudioDownloader.cachePlaylist(playlist);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -183,7 +179,7 @@ public class MusicBottomSheetHook {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
executor.submit(() -> AudioDownloader.downloadPlaylist(playlist));
|
||||
AudioDownloader.downloadPlaylist(playlist);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ public class LastFMScrobbler {
|
||||
}
|
||||
|
||||
public static boolean needScrobbling(String uid) {
|
||||
return isLoggedIn() && isScrobblingEnabled() && !SCROBBLED_UUIDS.contains(uid);
|
||||
return isLoggedIn() && isScrobblingEnabled() && (SCROBBLED_UUIDS.isEmpty() || !SCROBBLED_UUIDS.get(SCROBBLED_UUIDS.size() - 1).contains(uid));
|
||||
}
|
||||
|
||||
public static boolean isLoggedIn() {
|
||||
|
||||
@@ -10,8 +10,6 @@ import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
@@ -28,7 +26,6 @@ import ru.vtosters.lite.utils.IOUtils;
|
||||
|
||||
public class M3UDownloader implements ITrackDownloader {
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
private ExecutorService executorService = Executors.newSingleThreadExecutor();
|
||||
|
||||
public static M3UDownloader getInstance() {
|
||||
return Holder.INSTANCE;
|
||||
@@ -99,6 +96,7 @@ public class M3UDownloader implements ITrackDownloader {
|
||||
}));
|
||||
}
|
||||
var future = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
|
||||
future.join();
|
||||
future.exceptionally(throwable -> {
|
||||
callback.onFailure();
|
||||
return null;
|
||||
|
||||
+4
-1
@@ -13,6 +13,8 @@ import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import io.reactivex.Observable;
|
||||
@@ -23,11 +25,12 @@ import ru.vtosters.lite.music.cache.helpers.PlaylistHelper;
|
||||
import ru.vtosters.lite.music.cache.helpers.TracklistHelper;
|
||||
|
||||
public class PlaylistInjector {
|
||||
private static final ExecutorService executor = Executors.newCachedThreadPool();
|
||||
|
||||
public final static String CHANNEL_NAME = "VTCH";
|
||||
|
||||
public static void injectDownloadPlaylist(Playlist playlist) {
|
||||
AudioDownloader.cachePlaylist(playlist);
|
||||
executor.submit(() -> AudioDownloader.cachePlaylist(playlist));
|
||||
}
|
||||
|
||||
public static boolean eligibleForOfflineCaching() {
|
||||
|
||||
@@ -35,7 +35,7 @@ public class FFMpeg {
|
||||
var sb = new StringBuilder();
|
||||
sb.append("-y -i \"").append(in.getAbsolutePath()).append("\"");
|
||||
sb.append(" -map 0 -dn ");
|
||||
//sb.append(" -loglevel error");
|
||||
sb.append(" -loglevel error");
|
||||
sb.append(" -hide_banner");
|
||||
sb.append(" -write_id3v2 1");
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.vk.dto.music.MusicTrack;
|
||||
import java.io.File;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||
import ru.vtosters.lite.music.Callback;
|
||||
import ru.vtosters.lite.music.M3UDownloader;
|
||||
import ru.vtosters.lite.music.cache.CacheDatabaseDelegate;
|
||||
@@ -36,6 +37,9 @@ public class TrackDownloader {
|
||||
Log.v("TrackDownloader", "Directory created");
|
||||
else
|
||||
Log.e("TrackDownloader", "Directory creation failed");
|
||||
downloader.downloadTrack(track, outDir, callback, cache);
|
||||
|
||||
VTExecutors.getMusicDownloadExecutor().execute(
|
||||
() -> downloader.downloadTrack(track, outDir, callback, cache)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package ru.vtosters.lite.net;
|
||||
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
@@ -14,30 +15,24 @@ import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
public final class NetCall {
|
||||
private final NetRequest req;
|
||||
private final NetClient cl;
|
||||
private final Executor executor;
|
||||
|
||||
protected NetCall(NetClient cl, NetRequest req, Executor executor) {
|
||||
protected NetCall(NetClient cl, NetRequest req) {
|
||||
this.req = req;
|
||||
this.cl = cl;
|
||||
this.executor = executor;
|
||||
}
|
||||
|
||||
private static String constructArgs(Map<String, String> args) throws UnsupportedEncodingException {
|
||||
args = new TreeMap<>(args);
|
||||
StringBuilder str = new StringBuilder();
|
||||
String str = "";
|
||||
for (Map.Entry<String, String> en : args.entrySet()) {
|
||||
if (str.length() > 0)
|
||||
str.append("&");
|
||||
str.append(URLEncoder.encode(en.getKey(), "UTF-8"))
|
||||
.append("=")
|
||||
.append(URLEncoder.encode(en.getValue(), "UTF-8"));
|
||||
if (!str.isEmpty()) str += "&";
|
||||
str += URLEncoder.encode(en.getKey(), "UTF-8") + "=" + URLEncoder.encode(en.getValue(), "UTF-8");
|
||||
}
|
||||
return str.toString();
|
||||
return str;
|
||||
}
|
||||
|
||||
public NetRequest request() {
|
||||
@@ -82,13 +77,22 @@ public final class NetCall {
|
||||
}
|
||||
|
||||
public void enqueue(NetCallback cb) {
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
NetResponse resp = execute();
|
||||
cb.onResponse(NetCall.this, resp);
|
||||
} catch (IOException e) {
|
||||
cb.onFailure(NetCall.this, e);
|
||||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
NetResponse resp = execute();
|
||||
cb.onResponse(NetCall.this, resp);
|
||||
} catch (IOException e) {
|
||||
cb.onFailure(NetCall.this, e);
|
||||
}
|
||||
try {
|
||||
interrupt();
|
||||
join();
|
||||
} catch (Exception e) {
|
||||
Log.e("NetCall", "Failed to interrupt and join thread", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}.start();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,12 @@ package ru.vtosters.lite.net;
|
||||
|
||||
import java.net.PasswordAuthentication;
|
||||
import java.net.Proxy;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class NetClient {
|
||||
private final long timeout;
|
||||
private final Proxy proxy;
|
||||
private final PasswordAuthentication authenticator;
|
||||
private final Executor executor
|
||||
= Executors.newSingleThreadExecutor();
|
||||
|
||||
protected NetClient(Builder b) {
|
||||
timeout = b.timeout;
|
||||
@@ -28,7 +24,7 @@ public class NetClient {
|
||||
}
|
||||
|
||||
public NetCall newCall(NetRequest req) {
|
||||
return new NetCall(this, req, executor);
|
||||
return new NetCall(this, req);
|
||||
}
|
||||
|
||||
public PasswordAuthentication getAuthenticator() {
|
||||
|
||||
@@ -2,77 +2,75 @@ package ru.vtosters.lite.net;
|
||||
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.vk.core.network.Network;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class Request {
|
||||
|
||||
private static final Executor EXECUTOR =
|
||||
Executors.newSingleThreadExecutor();
|
||||
|
||||
public static void makeRequest(byte[] bArr, RequestCallback callback) {
|
||||
EXECUTOR.execute(new MakeRequestTask(bArr, callback));
|
||||
public static void makeRequest(byte[] bArr, RequestCallback RequestCallback) {
|
||||
new MakeRequestTask(bArr, RequestCallback).execute();
|
||||
}
|
||||
|
||||
public static void makeRequest(String str, RequestCallback callback) {
|
||||
makeRequest(str.getBytes(), callback);
|
||||
public static void makeRequest(String str, RequestCallback RequestCallback) {
|
||||
new MakeRequestTask(str.getBytes(), RequestCallback).execute();
|
||||
}
|
||||
|
||||
public interface RequestCallback {
|
||||
void onResponse(String str);
|
||||
}
|
||||
|
||||
private static class MakeRequestTask implements Runnable {
|
||||
private static class MakeRequestTask extends AsyncTask<Void, Void, String> {
|
||||
private final RequestCallback callback;
|
||||
private final byte[] url;
|
||||
private final boolean mIsPut;
|
||||
private final boolean mIsVTostersRequest;
|
||||
|
||||
public MakeRequestTask(byte[] bArr, RequestCallback callback) {
|
||||
this.mIsVTostersRequest = false;
|
||||
this.mIsPut = false;
|
||||
this.callback = callback;
|
||||
this.url = bArr;
|
||||
public MakeRequestTask(byte[] bArr, RequestCallback RequestCallback) {
|
||||
mIsVTostersRequest = false;
|
||||
mIsPut = false;
|
||||
callback = RequestCallback;
|
||||
url = bArr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
public String doInBackground(Void... voidArr) {
|
||||
try {
|
||||
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(new String(url)).openConnection();
|
||||
httpURLConnection.setRequestMethod(mIsPut ? "PUT" : "GET");
|
||||
|
||||
if (mIsVTostersRequest) {
|
||||
httpURLConnection.setRequestProperty("Token", getUserToken());
|
||||
} else {
|
||||
}
|
||||
if (!mIsVTostersRequest) {
|
||||
httpURLConnection.setRequestProperty("User-Agent", Network.l.c().a());
|
||||
}
|
||||
|
||||
httpURLConnection.setRequestProperty("Content-Type", mIsVTostersRequest
|
||||
? "Content-Type"
|
||||
: "application/x-www-form-urlencoded");
|
||||
httpURLConnection.setRequestProperty("Content-Type", mIsVTostersRequest ? "Content-Type" : "application/x-www-form-urlencoded");
|
||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
while (true) {
|
||||
String readLine = bufferedReader.readLine();
|
||||
if (readLine != null) {
|
||||
builder.append(readLine);
|
||||
stringBuffer.append(readLine);
|
||||
} else {
|
||||
bufferedReader.close();
|
||||
callback.onResponse(builder.toString());
|
||||
break;
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
callback.onResponse(e.getLocalizedMessage());
|
||||
return e.getLocalizedMessage();
|
||||
}
|
||||
}
|
||||
|
||||
public void onPostExecute(String str) {
|
||||
super.onPostExecute(str);
|
||||
callback.onResponse(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,8 +39,8 @@ public class StickerPackAdapter extends RecyclerView.Adapter<StickerPackAdapter.
|
||||
var holder = new StickerPackViewHolder(view);
|
||||
|
||||
holder.mStickerPreview.setImageResource(R.drawable.icon_vk_104);
|
||||
holder.mUpdateButton.setImageDrawable(recolorDrawable(getResources().getDrawable(R.drawable.ic_camera_switch_48)));
|
||||
holder.mDeleteButton.setImageDrawable(recolorDrawable(getResources().getDrawable(R.drawable.vkim_ic_msg_delete)));
|
||||
holder.mUpdateButton.setImageDrawable(recolorDrawable(getResources().getDrawable(R.drawable.ic_camera_switch_outline_24)));
|
||||
holder.mDeleteButton.setImageDrawable(recolorDrawable(getResources().getDrawable(R.drawable.ic_delete_outline_28)));
|
||||
|
||||
return holder;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
|
||||
findPreference("stories").setOnPreferenceClickListener(new restart());
|
||||
findPreference("swipe").setOnPreferenceClickListener(new restart());
|
||||
findPreference("is_likes_on_right").setOnPreferenceClickListener(new restart());
|
||||
findPreference("superapp").setOnPreferenceClickListener(new restart());
|
||||
|
||||
if (isTablet()) {
|
||||
findPreference("menusett").setVisible(false);
|
||||
|
||||
@@ -212,7 +212,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment {
|
||||
|
||||
private void dlaudio(Context ctx) {
|
||||
if (LibVKXClient.isIntegrationEnabled()) {
|
||||
sendToast("Включена интеграция VKX. Глобальное кеширование доступно внутри VKX");
|
||||
sendToast(AndroidUtils.getString("vkx_integration_enabled_info"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,12 +11,14 @@ import static ru.vtosters.lite.utils.ThemesUtils.recolorDrawable;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||
import com.vk.navigation.Navigator;
|
||||
import com.vk.stickers.Stickers;
|
||||
import com.vtosters.lite.R;
|
||||
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
@@ -39,6 +41,7 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment {
|
||||
findPreference("vkme_notifs").setOnPreferenceClickListener(new MessagesFragment.restart());
|
||||
findPreference("systememoji").setOnPreferenceClickListener(new MessagesFragment.restart());
|
||||
findPreference("wallpapers").setOnPreferenceClickListener(new MessagesFragment.openwp());
|
||||
findPreference("promotedstickers").setOnPreferenceChangeListener(new clearStickersCache());
|
||||
|
||||
findPreference("autotranslate").setEnabled(!autoalltranslate());
|
||||
|
||||
@@ -76,6 +79,7 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment {
|
||||
public boolean onPreferenceTreeClick(Preference preference) {
|
||||
findPreference("autotranslate").setEnabled(!autoalltranslate());
|
||||
findPreference("vkme_notifs").setEnabled(vkme());
|
||||
findPreference("promotedstickers").setOnPreferenceChangeListener(new clearStickersCache());
|
||||
return super.onPreferenceTreeClick(preference);
|
||||
}
|
||||
|
||||
@@ -98,6 +102,16 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
}
|
||||
|
||||
public class clearStickersCache implements Preference.OnPreferenceChangeListener {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE);
|
||||
prefs2.edit().clear().commit();
|
||||
Stickers.l.c();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class openwp implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
@@ -10,7 +10,9 @@ import static ru.vtosters.lite.ui.components.BackupManager.restoreBackup;
|
||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.dp2px;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication;
|
||||
import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer;
|
||||
import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
@@ -23,10 +25,13 @@ import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.WebView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.view.ContextThemeWrapper;
|
||||
@@ -155,52 +160,25 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
|
||||
@SuppressLint({"CommitPrefEdits", "SetTextI18n"})
|
||||
private void cacheAutoCleanDialog() {
|
||||
String[] cacheText = {null, "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"};
|
||||
|
||||
var val = getDefaultPrefs().getInt("autoclearcache_size", 0);
|
||||
RadioGroup rg = new RadioGroup(getContext());
|
||||
|
||||
rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0);
|
||||
|
||||
RadioButton zero = new RadioButton(new ContextThemeWrapper(getContext(), R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
RadioButton one = new RadioButton(new ContextThemeWrapper(getContext(), R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
RadioButton two = new RadioButton(new ContextThemeWrapper(getContext(), R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
RadioButton three = new RadioButton(new ContextThemeWrapper(getContext(), R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
RadioButton four = new RadioButton(new ContextThemeWrapper(getContext(), R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
RadioButton five = new RadioButton(new ContextThemeWrapper(getContext(), R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
for (int item = 0; item <= 5; item++) {
|
||||
RadioButton rb = new RadioButton(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||
rg.addView(rb);
|
||||
rb.setId(item);
|
||||
rb.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
|
||||
rg.addView(zero);
|
||||
rg.addView(one);
|
||||
rg.addView(two);
|
||||
rg.addView(three);
|
||||
rg.addView(four);
|
||||
rg.addView(five);
|
||||
var text = cacheText[item];
|
||||
rb.setText(text != null ? text : AndroidUtils.getString("autoclearcachedisabled"));
|
||||
|
||||
zero.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
one.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
two.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
three.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
four.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
five.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||
|
||||
zero.setText(requireContext().getString(R.string.autoclearcachedisabled));
|
||||
one.setText("100 MB");
|
||||
two.setText("500 MB");
|
||||
three.setText("1 GB");
|
||||
four.setText("2 GB");
|
||||
five.setText("5 GB");
|
||||
|
||||
zero.setTextColor(getTextAttr());
|
||||
one.setTextColor(getTextAttr());
|
||||
two.setTextColor(getTextAttr());
|
||||
three.setTextColor(getTextAttr());
|
||||
four.setTextColor(getTextAttr());
|
||||
five.setTextColor(getTextAttr());
|
||||
|
||||
zero.setChecked(val == 0);
|
||||
one.setChecked(val == 1);
|
||||
two.setChecked(val == 2);
|
||||
three.setChecked(val == 3);
|
||||
four.setChecked(val == 4);
|
||||
five.setChecked(val == 5);
|
||||
rb.setTextColor(getTextAttr());
|
||||
rb.setChecked(val == item);
|
||||
}
|
||||
|
||||
new VkAlertDialog.Builder(getContext())
|
||||
.setTitle(requireContext().getString(R.string.cache_clean_title))
|
||||
@@ -346,8 +324,17 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
AndroidUtils.getGlobalContext().getSharedPreferences("gcm", 0).edit().clear().apply();
|
||||
OtherFragment.this.getListView().postDelayed(() -> {
|
||||
PushSubscriber.e.a(true);
|
||||
ToastUtils.a(requireContext().getString(R.string.fcmtokenget));
|
||||
ToastUtils.a(requireContext().getString(R.string.fcmtokenfixed));
|
||||
|
||||
Context ctx;
|
||||
|
||||
try {
|
||||
ctx = requireContext();
|
||||
} catch (Exception unused) {
|
||||
ctx = getGlobalContext();
|
||||
}
|
||||
|
||||
ToastUtils.a(ctx.getString(R.string.fcmtokenget));
|
||||
ToastUtils.a(ctx.getString(R.string.fcmtokenfixed));
|
||||
}, 1000);
|
||||
return true;
|
||||
}
|
||||
@@ -357,12 +344,20 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override // android.support.v7.preference.Preference.c
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
var arr = BackupManager.getBackupsNames();
|
||||
var adapter = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, arr);
|
||||
var adapter = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, arr) {
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
TextView textView = (TextView) super.getView(position, convertView, parent);
|
||||
textView.setTextColor(getTextAttr());
|
||||
return textView;
|
||||
}
|
||||
};
|
||||
new VkAlertDialog.Builder(getContext())
|
||||
.setTitle(requireContext().getString(R.string.select_backup))
|
||||
.setAdapter(adapter, (dialog, which) -> {
|
||||
try {
|
||||
restoreBackup(arr[which]);
|
||||
restartApplicationWithTimer();
|
||||
Toast.makeText(getContext(), requireContext().getString(R.string.backup_success), LENGTH_LONG).show();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -18,6 +18,7 @@ import static ru.vtosters.lite.utils.GmsUtils.isGmsInstalled;
|
||||
import static ru.vtosters.lite.utils.ImageUtils.getDrawableFromUrl;
|
||||
import static ru.vtosters.lite.utils.Preferences.ads;
|
||||
import static ru.vtosters.lite.utils.Preferences.autotranslate;
|
||||
import static ru.vtosters.lite.utils.Preferences.dev;
|
||||
import static ru.vtosters.lite.utils.Preferences.devmenu;
|
||||
import static ru.vtosters.lite.utils.Preferences.disableSettingsSumms;
|
||||
import static ru.vtosters.lite.utils.Preferences.hasSpecialVerif;
|
||||
@@ -119,25 +120,22 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
|
||||
if (disableSettingsSumms()) return null;
|
||||
|
||||
String str;
|
||||
String[] themeTypeName = AndroidUtils.getArray("theme_type_name");
|
||||
|
||||
switch (getPrefsValue("currsystemtheme")) {
|
||||
default:
|
||||
case "system":
|
||||
str = "Системная";
|
||||
str = themeTypeName[0];
|
||||
break;
|
||||
case "dark":
|
||||
str = "Темная";
|
||||
str = themeTypeName[1];
|
||||
break;
|
||||
case "light":
|
||||
str = "Светлая";
|
||||
str = themeTypeName[2];
|
||||
break;
|
||||
}
|
||||
|
||||
return "Текущая тема" + ": " + str;
|
||||
}
|
||||
|
||||
public static SharedPreferences getCurrentAccount() {
|
||||
return AndroidUtils.getGlobalContext().getSharedPreferences("pref_account_manager", Context.MODE_PRIVATE);
|
||||
return AndroidUtils.getString("current_theme") + ": " + str;
|
||||
}
|
||||
|
||||
public static String getSuperappsumm() {
|
||||
@@ -146,15 +144,8 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
|
||||
return AndroidUtils.getString(R.string.elements_hidden_count) + ": " + SuperAppEditorManager.getInstance().getDisabledTabs().size();
|
||||
}
|
||||
|
||||
public static String getCachesumm() {
|
||||
if (disableSettingsSumms()) return null;
|
||||
|
||||
return AndroidUtils.getString(R.string.autoclearcachesumm) + " " + humanReadableByteCountBin(CacheUtils.getInstance().size);
|
||||
}
|
||||
|
||||
private void switchTheme(boolean isDarkTheme) {
|
||||
setTheme(isDarkTheme ? getDarkTheme() : getLightTheme(), requireActivity());
|
||||
edit().putBoolean("isdark", isDarkTheme).commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -210,7 +201,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
|
||||
"system",
|
||||
requireContext().getString(R.string.appearance_theme_use_system),
|
||||
R.drawable.ic_palette_outline_28, getThemesumm(),
|
||||
new String[] { "Системная тема", "Тёмная тема", "Светлая тема" },
|
||||
AndroidUtils.getArray("theme_type_name_checkbox"),
|
||||
new String[] { "system", "dark", "light" },
|
||||
(preference, o) -> {
|
||||
String value = (String) o;
|
||||
@@ -259,6 +250,14 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
|
||||
edit().putBoolean("ssl", value).commit();
|
||||
return true;
|
||||
});
|
||||
|
||||
if (dev()) {
|
||||
addMaterialSwitchPreference(this, "autoupdates", requireContext().getString(R.string.checkupdates), "", R.drawable.ic_camera_switch_outline_24, true, (preference, o) -> {
|
||||
boolean value = (boolean) o;
|
||||
edit().putBoolean("autoupdates", value).commit();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
addPreferenceCategory(this, requireContext().getString(R.string.vtsettaccount));
|
||||
|
||||
@@ -45,6 +45,7 @@ import ru.vtosters.lite.tgs.TGPref;
|
||||
import ru.vtosters.lite.ui.adapters.StickerPackAdapter;
|
||||
import ru.vtosters.lite.ui.components.StickerTouchHelperCallback;
|
||||
import ru.vtosters.lite.ui.fragments.BaseToolbarFragment;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
|
||||
public class StickersFragment extends BaseToolbarFragment {
|
||||
public final static String ACTION_RELOAD = "com.vtosters.lite.action.RELOAD_TGS_LIST";
|
||||
@@ -189,7 +190,7 @@ public class StickersFragment extends BaseToolbarFragment {
|
||||
if (!pack.startsWith("https://")) {
|
||||
pack = "https://" + pack;
|
||||
} else if (!pack.contains("addstickers")) {
|
||||
sendToast("Invalid pack name");
|
||||
sendToast(AndroidUtils.getString("invalid_pack_link"));
|
||||
}
|
||||
pack = parsePack(pack);
|
||||
mService.requestPackDownload(pack, new File(getContext().getFilesDir(), new File("VT-Stickers", pack).getAbsolutePath()));
|
||||
|
||||
@@ -52,8 +52,7 @@ public class About {
|
||||
return "0000000";
|
||||
}
|
||||
|
||||
public static String getAppVersion() throws IOException {
|
||||
var appver = isValidSignature() ? VERSIONNAME : "Dev";
|
||||
return getApplicationName() + " " + appver + " | " + getBuildNumber();
|
||||
public static String getAppVersion() {
|
||||
return getApplicationName() + " " + (isValidSignature() ? VERSIONNAME : "Dev") + " | " + getBuildNumber();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,13 @@ public class AccountManagerUtils {
|
||||
} // Current UserId
|
||||
|
||||
public static boolean isVKTester() {
|
||||
return VKAccountManager.d().i();
|
||||
return VKAccountManager.d().k0().equals("tester");
|
||||
} // is vk tester
|
||||
|
||||
public static boolean isVKWorker() {
|
||||
return VKAccountManager.d().k0().equals("worker");
|
||||
}
|
||||
|
||||
public static String getUserSecret() {
|
||||
return VKAccountManager.d().l0();
|
||||
}
|
||||
|
||||
@@ -72,6 +72,10 @@ public class AndroidUtils {
|
||||
return getResources().getStringArray(arrayId);
|
||||
} // Get array from arrays.xml
|
||||
|
||||
public static String[] getArray(String resourcename) {
|
||||
return getResources().getStringArray(getIdentifier(resourcename, "array"));
|
||||
}
|
||||
|
||||
public static String getString(int id) {
|
||||
return getGlobalContext().getString(id);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package ru.vtosters.lite.utils;
|
||||
|
||||
import static android.text.TextUtils.isEmpty;
|
||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
||||
import static ru.vtosters.lite.utils.Preferences.getBoolValue;
|
||||
import static ru.vtosters.lite.utils.Preferences.isEnableExternalOpening;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
@@ -59,7 +60,7 @@ public class ExternalLinkParser {
|
||||
if (!isEnabled || file.isEmpty()) return false;
|
||||
|
||||
if (checkVkVideo(file)) {
|
||||
if (qualities.size() == 1) {
|
||||
if (qualities.size() == 1 || getBoolValue("maxquality", false)) {
|
||||
startExternalVideo((String) qualities.values().toArray()[0], context);
|
||||
} else {
|
||||
String[] titles = qualities.keySet().toArray(new String[0]);
|
||||
|
||||
@@ -37,12 +37,11 @@ public class Preferences {
|
||||
|
||||
GmsUtils.fixGapps();
|
||||
setProxy();
|
||||
VTVerifications.load(application);
|
||||
LifecycleUtils.registerActivities(application);
|
||||
} // VK Init
|
||||
|
||||
public static void forceOffline() {
|
||||
edit().putBoolean("isdark", isDarkTheme()).commit();
|
||||
|
||||
setupFilters();
|
||||
|
||||
if (setoffline() && offline()) {
|
||||
@@ -329,7 +328,7 @@ public class Preferences {
|
||||
}
|
||||
|
||||
public static boolean checkupdates() {
|
||||
return !getBoolValue("isRoamingState", false) && isValidSignature();
|
||||
return !getBoolValue("isRoamingState", false) && isValidSignature() && (!dev() || getBoolValue("autoupdates", true));
|
||||
}
|
||||
|
||||
public static boolean isValidSignature() {
|
||||
|
||||
@@ -679,4 +679,14 @@
|
||||
<item>сообщения</item>
|
||||
<item>сообщений</item>
|
||||
</string-array>
|
||||
<string-array name="theme_type_name">
|
||||
<item>Системная</item>
|
||||
<item>Темная</item>
|
||||
<item>Светлая</item>
|
||||
</string-array>
|
||||
<string-array name="theme_type_name_checkbox">
|
||||
<item>Системная тема</item>
|
||||
<item>Темная тема</item>
|
||||
<item>Светлая тема</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -5428,7 +5428,7 @@
|
||||
<string name="vtlrecommend">Рекомендации</string>
|
||||
<string name="vtlrecommendfriend">Отключить рекомендации друзей</string>
|
||||
<string name="vtlrecommendauthor">Отключить рекомендации авторов</string>
|
||||
<string name="vtlrecommendfriendpost">Отключить рекомендации постов друзей</string>
|
||||
<string name="vtlrecommendfriendpost">Отключить рекомендации постов</string>
|
||||
<string name="BGStickers">Обводка стикеров</string>
|
||||
<string name="vtlrecommendmarksummary">Посты по типу Вам может быть интересно и тд</string>
|
||||
<string name="vtlfeedwork">Прочее</string>
|
||||
@@ -5456,7 +5456,7 @@
|
||||
<string name="act_bot">Для ботов/групп</string>
|
||||
<string name="act_cnv">Для бесед</string>
|
||||
<string name="act_pm">Для личных сообщений</string>
|
||||
<string name="alteremoji">Альтернативный дизайн меню с эмодзи</string>
|
||||
<string name="alteremoji">Альтернативное меню с эмодзи</string>
|
||||
<string name="alteremojisum">Альтернативный вид выбора эмодзи и стикеров в миниатюрном меню</string>
|
||||
<string name="altnewsfeed">Альтернативный дизайн ленты</string>
|
||||
<string name="altnewsfeedsum">Дизайн с динамическими вкладками в ленте</string>
|
||||
@@ -5479,7 +5479,7 @@
|
||||
<string name="dnw">Неписалка</string>
|
||||
<string name="docknumbers">Счётчики в докбаре</string>
|
||||
<string name="docknumberssum">Отключение не работает в интерфейсе для планшетов</string>
|
||||
<string name="dockbar_tab_titles">Показ заголовков вкладок в докбаре</string>
|
||||
<string name="dockbar_tab_titles">Показ заголовков в докбаре</string>
|
||||
<string name="superapp_editor_message">Для отключения/включения неподвижного элемента проведите по нему вправо или влево</string>
|
||||
<string name="fcmtokenfixed">Уведомления были восстановлены!</string>
|
||||
<string name="fcmtokenget">FCM токен получен</string>
|
||||
@@ -5569,7 +5569,7 @@
|
||||
<string name="interfacestartfrsum">Выберите стартовый фрагмент</string>
|
||||
<string name="interfacevideo">Видео</string>
|
||||
<string name="interfacevideoext_short">Внешний плеер</string>
|
||||
<string name="interfacevideoext">Использовать внешний видеоплеер</string>
|
||||
<string name="interfacevideoext">Внешний видеоплеер</string>
|
||||
<string name="interfacevideoextsum">Использовать внешний видеоплеер для воспроизведения видео</string>
|
||||
<string name="interfacevideorec">Отключение рекомендаций видео</string>
|
||||
<string name="interfacevideorecsum">Отключение рекомендаций видео внизу видеоплеера с рекомендациями видео</string>
|
||||
@@ -5655,7 +5655,7 @@
|
||||
<string name="musicFixNew_title">Фикс музыки v2</string>
|
||||
<string name="new_music_downloading_way_title">Новый способ скачивания музыки</string>
|
||||
<string name="dialogrecomm">Отключить рекомендации</string>
|
||||
<string name="showvtfire">Показывать специальные верификации</string>
|
||||
<string name="showvtfire">Показывать файрочки</string>
|
||||
<string name="showvtverify">Показывать верификации</string>
|
||||
<string name="sprefsctype">Тип подключения</string>
|
||||
<string name="sprefsdelkey">Удалить ключ бота Telegram</string>
|
||||
@@ -5710,7 +5710,7 @@
|
||||
<string name="feed_ads_regular_summary">Обычные рекламные вставки в ленте между постами</string>
|
||||
<string name="feed_ads_carousel_summary">Реклама со списком (товаров)</string>
|
||||
<string name="feed_ads_stories_summary">Реклама при переходе между историями</string>
|
||||
<string name="feed_ads_sources">Отключить все посты с источником</string>
|
||||
<string name="feed_ads_sources">Отключить посты с источником</string>
|
||||
<string name="feed_ads_sources_summary">В большинстве случаев - рекламные посты с пометкой источника рекламодателя</string>
|
||||
|
||||
<string name="feed_recommendations_friends_summary">Рекомендации возможных друзей</string>
|
||||
@@ -5755,7 +5755,7 @@
|
||||
<string name="messages_interface_calls_summary">Иконка звонков в сообщениях</string>
|
||||
<string name="messages_interface_tails_summary">Может некорректно работать с вложениями</string>
|
||||
<string name="messages_other_choose_count">Выберите количество</string>
|
||||
<string name="messages_other_download_first">Количество сообщений, загружаемых сразу</string>
|
||||
<string name="messages_other_download_first">Количество загружаемых сообщений</string>
|
||||
|
||||
<string name="vkx_why">Зачем?</string>
|
||||
<string name="vkx_why_summary">Интеграция позволит использовать возможности VK X прямиком в VTosters Lite\n\nКроме воспроизведения, в клиенте будет работать и кеш из плеера</string>
|
||||
@@ -5789,7 +5789,7 @@
|
||||
|
||||
<string name="warning">Внимание!</string>
|
||||
<string name="debug_warning_summary">Данное меню предназначено только для тестирования работоспособности приложения. Если вы являетесь рядовым юзером, то вам не следует ничего не трогать в данных настройках (пожалуйста)</string>
|
||||
<string name="debug_show_settings_item">Показывать пункт дебага в настройках</string>
|
||||
<string name="debug_show_settings_item">Показывать дебаг меню</string>
|
||||
|
||||
<string name="debug_experimental">Experimental</string>
|
||||
<string name="debug_experimental_usevkui">Редактирование страницы?</string>
|
||||
@@ -5975,8 +5975,8 @@
|
||||
<string name="telegram_stickers_downloading">: загрузка</string>
|
||||
<string name="telegram_stickers_updating">: обновление</string>
|
||||
<string name="telegram_stickers_gettinginfo">Получение информации</string>
|
||||
<string name="telegram_stickers_updated"> успешно обновлен</string>
|
||||
<string name="telegram_stickers_downloaded"> успешно загружен</string>
|
||||
<string name="telegram_stickers_updated">успешно обновлен</string>
|
||||
<string name="telegram_stickers_downloaded">успешно загружен</string>
|
||||
<string name="telegram_stickers_error_update">: ошибка при обновлении</string>
|
||||
<string name="telegram_stickers_error_download">: ошибка при загрузке</string>
|
||||
|
||||
@@ -6254,7 +6254,7 @@
|
||||
<string name="contact_sync_enabled">Включена</string>
|
||||
<string name="contact_sync_disabled">Отключена</string>
|
||||
|
||||
<string name="force_disable_psm_title">Не отправлять информацию о батарее</string>
|
||||
<string name="force_disable_psm_title">Скрыть информацию о батарее</string>
|
||||
<string name="force_disable_psm_summ">Включение этой функции скроет информацию о состоянии вашего устройства в режиме экономии батареи и ВКонтакте будет отправлять вам медиаконтент без сильного сжатия и блюра</string>
|
||||
|
||||
<string name="track_bd_insert_err">Ошибка при записи трека в базу данных!</string>
|
||||
@@ -6301,4 +6301,20 @@
|
||||
<string name="audio_download_title">Скачивание всех своих аудио</string>
|
||||
|
||||
<string name="app_activities_error">Ошибка в работе приложения. Перезапустите приложение</string>
|
||||
|
||||
<string name="vkx_integration_enabled_info">Включена интеграция VK X. Глобальное кеширование доступно внутри VK X</string>
|
||||
|
||||
<string name="current_theme">Текущая тема</string>
|
||||
|
||||
<string name="writebar_ios_title">Панель ввода с iOS</string>
|
||||
<string name="newsfeed_notif_title">Уведомления в новостях</string>
|
||||
<string name="newsfeed_notif_summ">Показывать счетчик уведомлений в докбаре на иконке новостей</string>
|
||||
|
||||
<string name="invalid_pack_link">Неверная ссылка на набор</string>
|
||||
|
||||
<string name="blockminiapps_title">Посты с MiniApp</string>
|
||||
<string name="blockminiapps_summ">Блокировать посты с мини-приложениями</string>
|
||||
<string name="maxquality_title">Максимальное качество</string>
|
||||
<string name="maxquality_summ">Открывать видео в максимальном качестве через внешний видеоплеер</string>
|
||||
<string name="promotedstickers_title">Не получать промостикеры</string>
|
||||
</resources>
|
||||
@@ -879,4 +879,14 @@
|
||||
<item>messages</item>
|
||||
<item>messages</item>
|
||||
</string-array>
|
||||
<string-array name="theme_type_name">
|
||||
<item>System</item>
|
||||
<item>Dark</item>
|
||||
<item>Light</item>
|
||||
</string-array>
|
||||
<string-array name="theme_type_name_checkbox">
|
||||
<item>System theme</item>
|
||||
<item>Dark theme</item>
|
||||
<item>Light theme</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -5562,7 +5562,7 @@ Does not affect vk.cc links"</string>
|
||||
<string name="vtlrecommend">Recommendations</string>
|
||||
<string name="vtlrecommendfriend">Disable friends recommendations</string>
|
||||
<string name="vtlrecommendauthor">Disable authors recommendations</string>
|
||||
<string name="vtlrecommendfriendpost">Disable recommended friends posts</string>
|
||||
<string name="vtlrecommendfriendpost">Disable recommended posts</string>
|
||||
<string name="BGStickers">Sticker outlines</string>
|
||||
<string name="vtlrecommendmarksummary">Posts like You may be interested</string>
|
||||
<string name="vtlfeedwork">Other</string>
|
||||
@@ -5590,7 +5590,7 @@ Does not affect vk.cc links"</string>
|
||||
<string name="act_bot">For Bots/Groups</string>
|
||||
<string name="act_cnv">For Conversations</string>
|
||||
<string name="act_pm">For Private messages</string>
|
||||
<string name="alteremoji">Alternative type of emoji menu</string>
|
||||
<string name="alteremoji">Alternative emoji menu</string>
|
||||
<string name="alteremojisum">Alternative selection of emojis and stickers in the miniature menu</string>
|
||||
<string name="altnewsfeed">Alternative design of newsfeed</string>
|
||||
<string name="altnewsfeedsum">Design with dynamic tabs in the feed</string>
|
||||
@@ -5703,7 +5703,7 @@ Expand text..."</string>
|
||||
<string name="interfacestartfrsum">Select start fragment</string>
|
||||
<string name="interfacevideo">Video</string>
|
||||
<string name="interfacevideoext_short">External player</string>
|
||||
<string name="interfacevideoext">Use external video player</string>
|
||||
<string name="interfacevideoext">External video player</string>
|
||||
<string name="interfacevideoextsum">Use an external video player to play videos</string>
|
||||
<string name="interfacevideorec">Disable recommended videos</string>
|
||||
<string name="interfacevideorecsum">Disable video recommendations at the bottom of the video player with video recommendations</string>
|
||||
@@ -5760,8 +5760,8 @@ You need to restart the application to apply proxy settings"</string>
|
||||
<string name="customrounding_title">Image rounding size</string>
|
||||
<string name="postsredesign_title">Video post redesign</string>
|
||||
<string name="postsredesign_summ">The text for the video will be displayed below the video</string>
|
||||
<string name="miniapps_title">Miniapps section</string>
|
||||
<string name="miniapps_summ">Show Miniapps/Games in menu</string>
|
||||
<string name="miniapps_title">MiniApps section</string>
|
||||
<string name="miniapps_summ">Show MiniApps/Games in menu</string>
|
||||
<string name="show_vkpay_title">VK Pay section</string>
|
||||
<string name="show_vkpay_summ">Show VK Pay in the menu</string>
|
||||
<string name="show_superapps_title">Superapps</string>
|
||||
@@ -5843,7 +5843,7 @@ May look like a fake leaving the online"</string>
|
||||
<string name="feed_ads_regular_summary">Regular ads in feed between posts</string>
|
||||
<string name="feed_ads_carousel_summary">Ads with list (of goods)</string>
|
||||
<string name="feed_ads_stories_summary">Ads in stories</string>
|
||||
<string name="feed_ads_sources">Disable all posts with source</string>
|
||||
<string name="feed_ads_sources">Disable posts with source</string>
|
||||
<string name="feed_ads_sources_summary">More often posts ad posts with advertiser source tag</string>
|
||||
|
||||
<string name="feed_recommendations_friends_summary">Recommend potential friends</string>
|
||||
@@ -5888,7 +5888,7 @@ May look like a fake leaving the online"</string>
|
||||
<string name="messages_interface_calls_summary">Call icon in messages</string>
|
||||
<string name="messages_interface_tails_summary">May not work correctly with attachments</string>
|
||||
<string name="messages_other_choose_count">Choose count</string>
|
||||
<string name="messages_other_download_first">Amount of messages downloaded at once</string>
|
||||
<string name="messages_other_download_first">Amount of downloaded messages</string>
|
||||
|
||||
<string name="vkx_title" translatable="false">VK X</string>
|
||||
<string name="vkx_why">Why?</string>
|
||||
@@ -5921,7 +5921,7 @@ May look like a fake leaving the online"</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>
|
||||
<string name="debug_show_settings_item">Show debug menu</string>
|
||||
|
||||
<string name="debug_experimental">Experimental</string>
|
||||
<string name="debug_experimental_usevkui">Profile editing?</string>
|
||||
@@ -6113,8 +6113,8 @@ May look like a fake leaving the online"</string>
|
||||
<string name="telegram_stickers_downloading">: downloading</string>
|
||||
<string name="telegram_stickers_updating">: update</string>
|
||||
<string name="telegram_stickers_gettinginfo">Getting info</string>
|
||||
<string name="telegram_stickers_updated"> updated successfully</string>
|
||||
<string name="telegram_stickers_downloaded"> downloaded successfully</string>
|
||||
<string name="telegram_stickers_updated">updated successfully</string>
|
||||
<string name="telegram_stickers_downloaded">downloaded successfully</string>
|
||||
<string name="telegram_stickers_error_update">: update failed</string>
|
||||
<string name="telegram_stickers_error_download">: download failed</string>
|
||||
|
||||
@@ -6392,7 +6392,7 @@ May look like a fake leaving the online"</string>
|
||||
<string name="contact_sync_enabled">Enabled</string>
|
||||
<string name="contact_sync_disabled">Disabled</string>
|
||||
|
||||
<string name="force_disable_psm_title">Don\'t send battery information</string>
|
||||
<string name="force_disable_psm_title">Hide battery information</string>
|
||||
<string name="force_disable_psm_summ">Enabling this feature will hide information about the state of your device in battery saving mode and VK will send you media content without strong compression and blur</string>
|
||||
|
||||
<string name="track_bd_insert_err">Error writing track to database!</string>
|
||||
@@ -6439,4 +6439,20 @@ May look like a fake leaving the online"</string>
|
||||
<string name="audio_download_title">Download all your audio</string>
|
||||
|
||||
<string name="app_activities_error">An application error has occurred. Restart the application</string>
|
||||
|
||||
<string name="vkx_integration_enabled_info">VK X integration is enabled. Global caching is available inside VK X</string>
|
||||
|
||||
<string name="current_theme">Current theme</string>
|
||||
|
||||
<string name="writebar_ios_title">iOS writebar</string>
|
||||
<string name="newsfeed_notif_title">Newsfeed notifications</string>
|
||||
<string name="newsfeed_notif_summ">Show notification counter in dockbar on news icon</string>
|
||||
|
||||
<string name="invalid_pack_link">Invalid pack link</string>
|
||||
|
||||
<string name="blockminiapps_title">MiniApp posts</string>
|
||||
<string name="blockminiapps_summ">Block posts with MiniApps</string>
|
||||
<string name="maxquality_title">Maximum quality</string>
|
||||
<string name="maxquality_summ">Open video in maximum quality through an external video player</string>
|
||||
<string name="promotedstickers_title">Don\'t receive promoted stickers</string>
|
||||
</resources>
|
||||
|
||||
@@ -77,6 +77,11 @@
|
||||
android:key="copyright_post"
|
||||
android:summary="@string/feed_ads_sources_summary"
|
||||
android:title="@string/feed_ads_sources" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="blockminiapps"
|
||||
android:summary="@string/blockminiapps_summ"
|
||||
android:title="@string/blockminiapps_title" />
|
||||
<Preference
|
||||
android:key="whitelisted_filters_groups"
|
||||
android:title="@string/whitelisted_filters_groups_title" />
|
||||
|
||||
@@ -76,6 +76,11 @@
|
||||
android:key="isEnableExternalOpening"
|
||||
android:summary="@string/interfacevideoextsum"
|
||||
android:title="@string/interfacevideoext" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="maxquality"
|
||||
android:summary="@string/maxquality_summ"
|
||||
android:title="@string/maxquality_title" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="__dbg_disable_video_feed"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="wbios"
|
||||
android:title="Панель ввода с iOS" />
|
||||
android:title="@string/writebar_ios_title"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vk_messenger" android:key="vkmesett">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
@@ -63,6 +63,10 @@
|
||||
android:key="systememoji"
|
||||
android:summary="@string/systememojisum"
|
||||
android:title="@string/systememoji" />
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="promotedstickers"
|
||||
android:title="@string/promotedstickers_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vtlother">
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="newsfeed_notif"
|
||||
android:summary="Показывать счетчик уведомлений в докбаре на иконке новостей"
|
||||
android:title="Уведомления в новостях" />
|
||||
android:summary="@string/newsfeed_notif_summ"
|
||||
android:title="@string/newsfeed_notif_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vtlother">
|
||||
<Preference
|
||||
|
||||
@@ -40,7 +40,9 @@
|
||||
|
||||
const-string v0, "filters"
|
||||
|
||||
const-string v1, "purchased,active,promoted"
|
||||
invoke-static {}, Lru/vtosters/lite/hooks/PromoStickersHook;->hook()Ljava/lang/String;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
.line 4
|
||||
invoke-virtual {p0, v0, v1}, Lcom/vk/api/base/ApiRequest;->c(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/base/ApiRequest;
|
||||
|
||||
@@ -4855,6 +4855,8 @@
|
||||
|
||||
move-result v1
|
||||
|
||||
const v1, 0x0
|
||||
|
||||
invoke-virtual {v0, v1}, Lcom/vk/auth/api/VKAccount;->h(I)V
|
||||
|
||||
return-void
|
||||
|
||||
@@ -356,6 +356,10 @@
|
||||
|
||||
iput-object p3, p0, Lcom/vk/core/view/search/ModernSearchView;->c:Landroid/widget/ImageView;
|
||||
|
||||
const/16 v4, 0x8
|
||||
|
||||
invoke-virtual {p3, v4}, Landroid/widget/ImageView;->setVisibility(I)V
|
||||
|
||||
.line 13
|
||||
sget v2, Lb/h/z/g;->iv_icon_params:I
|
||||
|
||||
|
||||
@@ -358,8 +358,6 @@
|
||||
|
||||
invoke-static {p0}, Lru/vtosters/lite/ui/components/CrashReporter;->init(Landroid/app/Activity;)V
|
||||
|
||||
invoke-static {p0}, Lru/vtosters/lite/utils/VTVerifications;->load(Landroid/content/Context;)V
|
||||
|
||||
.line 2
|
||||
invoke-virtual {p0}, Landroid/app/Activity;->isTaskRoot()Z
|
||||
|
||||
|
||||
Reference in New Issue
Block a user