Compare commits
2
Commits
v0.1.7-beta
..
alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6930acd826 | ||
|
|
c21e04528b |
+8
-2
@@ -21,7 +21,13 @@ local.properties
|
|||||||
/smali/VTLite.apk.idsig
|
/smali/VTLite.apk.idsig
|
||||||
.idea/gradle.xml
|
.idea/gradle.xml
|
||||||
.idea/compiler.xml
|
.idea/compiler.xml
|
||||||
|
apksigner.jar
|
||||||
|
apktool_2.6.0.jar
|
||||||
|
debug.jks
|
||||||
|
smali/VTLite_signed.apk.idsig
|
||||||
|
local.properties
|
||||||
|
gradle.properties
|
||||||
|
smali/lib/armeabi-v7a/liblite.so
|
||||||
smali/assets/version.properties
|
smali/assets/version.properties
|
||||||
app/src/main/assets/version.properties
|
app/src/main/assets/version.properties
|
||||||
smali/build/resources.zip
|
smali/build/resources.zip
|
||||||
*.idsig
|
|
||||||
@@ -1,42 +1,9 @@
|
|||||||
# VTosters Lite
|
# VTosters Lite
|
||||||
|
О багах сообщать в issues, **просьба не создавать дубликаты и воспользоваться поиском**
|
||||||
VTosters Lite - это модифицированный клиент ВКонтакте, основанный на версии 5.29
|
### Компиляция
|
||||||
|
|
||||||
О найденных багах сообщать в [issues](https://github.com/vtosters/lite/issues), просьба не плодить дубликаты, воспользуйтесь поиском перед созданием нового issue
|
|
||||||
|
|
||||||
## Разработка
|
|
||||||
Мы всегда готовы к новым предложениям в [Pull Requests](https://github.com/vtosters/lite/pulls)
|
|
||||||
|
|
||||||
## Компиляция
|
|
||||||
Весь декомпилированный код клиента находится в `/smali`
|
|
||||||
|
|
||||||
Весь исходный код написанный на Java находится в `/app`
|
|
||||||
|
|
||||||
Все необходимые скрипты для компиляции APK, его подписывании и не только находятся в `/scripts`
|
|
||||||
|
|
||||||
### Необходимые зависимости
|
|
||||||
Требуется установленная **Java** >11 версии
|
Требуется установленная **Java** >11 версии
|
||||||
|
Скрипты для сборки лежат в папке **scripts**
|
||||||
|
|
||||||
Требуется установленная **Android Studio**
|
Linux/Unix: ```./build.sh```
|
||||||
|
|
||||||
### Linux/macOS
|
Windows: ```./build.bat```
|
||||||
```
|
|
||||||
./build.sh
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
### Windows
|
|
||||||
```
|
|
||||||
build.bat
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
## Проверка версии коммита
|
|
||||||
|
|
||||||
С версии 0.0.4 доступна прямая проверка версии коммита внутри приложения.
|
|
||||||
|
|
||||||

|
|
||||||
|
|||||||
@@ -3,28 +3,11 @@
|
|||||||
*/
|
*/
|
||||||
package bruhcollective.itaysonlab.libvkx;
|
package bruhcollective.itaysonlab.libvkx;
|
||||||
|
|
||||||
// Works only with original signature of VT
|
|
||||||
|
|
||||||
public interface ILibVkxService extends android.os.IInterface {
|
public interface ILibVkxService extends android.os.IInterface {
|
||||||
void play(java.util.List<String> audio_ids, int index, String playbackContext) throws android.os.RemoteException;
|
|
||||||
|
|
||||||
int getUserId() throws android.os.RemoteException;
|
|
||||||
// Starts playback. playbackContext can be "other" if you don't sure what it is
|
|
||||||
|
|
||||||
void addTrackToCache(int track_id, int owner_id, String access_key) throws android.os.RemoteException;
|
|
||||||
// A UserID. CHECK FOR THIS TO BE EQUAL BEFORE SENDING ANYTHING TO SERVICE!
|
|
||||||
|
|
||||||
void deleteTrackFromCache(int track_id, int owner_id) throws android.os.RemoteException;
|
|
||||||
// Cache add/remove
|
|
||||||
|
|
||||||
boolean isTrackCached(int track_id, int owner_id) throws android.os.RemoteException;
|
|
||||||
|
|
||||||
java.util.List<String> getCache() throws android.os.RemoteException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default implementation for ILibVkxService.
|
* Default implementation for ILibVkxService.
|
||||||
*/
|
*/
|
||||||
class Default implements ILibVkxService {
|
public static class Default implements ILibVkxService {
|
||||||
// Starts playback. playbackContext can be "other" if you don't sure what it is
|
// Starts playback. playbackContext can be "other" if you don't sure what it is
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -63,20 +46,13 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Get a list of cached tracks. The response is close to VK's original response (an audio list)
|
|
||||||
// Also, the items in the list are JSON ones.
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Local-side IPC implementation stub class.
|
* Local-side IPC implementation stub class.
|
||||||
*/
|
*/
|
||||||
abstract class Stub extends android.os.Binder implements ILibVkxService {
|
public static abstract class Stub extends android.os.Binder implements ILibVkxService {
|
||||||
static final int TRANSACTION_play = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
|
|
||||||
static final int TRANSACTION_getUserId = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
|
|
||||||
static final int TRANSACTION_addTrackToCache = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);
|
|
||||||
static final int TRANSACTION_deleteTrackFromCache = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);
|
|
||||||
static final int TRANSACTION_isTrackCached = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5);
|
|
||||||
static final int TRANSACTION_getCache = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6);
|
|
||||||
private static final String DESCRIPTOR = "bruhcollective.itaysonlab.libvkx.ILibVkxService";
|
private static final String DESCRIPTOR = "bruhcollective.itaysonlab.libvkx.ILibVkxService";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct the stub at attach it to the interface.
|
* Construct the stub at attach it to the interface.
|
||||||
*/
|
*/
|
||||||
@@ -99,18 +75,6 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
return new Proxy(obj);
|
return new Proxy(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean setDefaultImpl(ILibVkxService impl) {
|
|
||||||
if (Proxy.sDefaultImpl == null && impl != null) {
|
|
||||||
Proxy.sDefaultImpl = impl;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ILibVkxService getDefaultImpl() {
|
|
||||||
return Proxy.sDefaultImpl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public android.os.IBinder asBinder() {
|
public android.os.IBinder asBinder() {
|
||||||
return this;
|
return this;
|
||||||
@@ -190,8 +154,7 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static class Proxy implements ILibVkxService {
|
private static class Proxy implements ILibVkxService {
|
||||||
public static ILibVkxService sDefaultImpl;
|
private android.os.IBinder mRemote;
|
||||||
private final android.os.IBinder mRemote;
|
|
||||||
|
|
||||||
Proxy(android.os.IBinder remote) {
|
Proxy(android.os.IBinder remote) {
|
||||||
mRemote = remote;
|
mRemote = remote;
|
||||||
@@ -201,12 +164,11 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
public android.os.IBinder asBinder() {
|
public android.os.IBinder asBinder() {
|
||||||
return mRemote;
|
return mRemote;
|
||||||
}
|
}
|
||||||
// Starts playback. playbackContext can be "other" if you don't sure what it is
|
|
||||||
|
|
||||||
public String getInterfaceDescriptor() {
|
public String getInterfaceDescriptor() {
|
||||||
return DESCRIPTOR;
|
return DESCRIPTOR;
|
||||||
}
|
}
|
||||||
// A UserID. CHECK FOR THIS TO BE EQUAL BEFORE SENDING ANYTHING TO SERVICE!
|
// Starts playback. playbackContext can be "other" if you don't sure what it is
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void play(java.util.List<String> audio_ids, int index, String playbackContext) throws android.os.RemoteException {
|
public void play(java.util.List<String> audio_ids, int index, String playbackContext) throws android.os.RemoteException {
|
||||||
@@ -228,7 +190,7 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
_data.recycle();
|
_data.recycle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Cache add/remove
|
// A UserID. CHECK FOR THIS TO BE EQUAL BEFORE SENDING ANYTHING TO SERVICE!
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getUserId() throws android.os.RemoteException {
|
public int getUserId() throws android.os.RemoteException {
|
||||||
@@ -249,6 +211,7 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
}
|
}
|
||||||
return _result;
|
return _result;
|
||||||
}
|
}
|
||||||
|
// Cache add/remove
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTrackToCache(int track_id, int owner_id, String access_key) throws android.os.RemoteException {
|
public void addTrackToCache(int track_id, int owner_id, String access_key) throws android.os.RemoteException {
|
||||||
@@ -290,8 +253,6 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
_data.recycle();
|
_data.recycle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Get a list of cached tracks. The response is close to VK's original response (an audio list)
|
|
||||||
// Also, the items in the list are JSON ones.
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isTrackCached(int track_id, int owner_id) throws android.os.RemoteException {
|
public boolean isTrackCached(int track_id, int owner_id) throws android.os.RemoteException {
|
||||||
@@ -314,6 +275,8 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
}
|
}
|
||||||
return _result;
|
return _result;
|
||||||
}
|
}
|
||||||
|
// Get a list of cached tracks. The response is close to VK's original response (an audio list)
|
||||||
|
// Also, the items in the list are JSON ones.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public java.util.List<String> getCache() throws android.os.RemoteException {
|
public java.util.List<String> getCache() throws android.os.RemoteException {
|
||||||
@@ -334,6 +297,44 @@ public interface ILibVkxService extends android.os.IInterface {
|
|||||||
}
|
}
|
||||||
return _result;
|
return _result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ILibVkxService sDefaultImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
static final int TRANSACTION_play = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
|
||||||
|
static final int TRANSACTION_getUserId = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
|
||||||
|
static final int TRANSACTION_addTrackToCache = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);
|
||||||
|
static final int TRANSACTION_deleteTrackFromCache = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);
|
||||||
|
static final int TRANSACTION_isTrackCached = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5);
|
||||||
|
static final int TRANSACTION_getCache = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6);
|
||||||
|
|
||||||
|
public static boolean setDefaultImpl(ILibVkxService impl) {
|
||||||
|
if (Proxy.sDefaultImpl == null && impl != null) {
|
||||||
|
Proxy.sDefaultImpl = impl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ILibVkxService getDefaultImpl() {
|
||||||
|
return Proxy.sDefaultImpl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Starts playback. playbackContext can be "other" if you don't sure what it is
|
||||||
|
|
||||||
|
public void play(java.util.List<String> audio_ids, int index, String playbackContext) throws android.os.RemoteException;
|
||||||
|
// A UserID. CHECK FOR THIS TO BE EQUAL BEFORE SENDING ANYTHING TO SERVICE!
|
||||||
|
|
||||||
|
public int getUserId() throws android.os.RemoteException;
|
||||||
|
// Cache add/remove
|
||||||
|
|
||||||
|
public void addTrackToCache(int track_id, int owner_id, String access_key) throws android.os.RemoteException;
|
||||||
|
|
||||||
|
public void deleteTrackFromCache(int track_id, int owner_id) throws android.os.RemoteException;
|
||||||
|
|
||||||
|
public boolean isTrackCached(int track_id, int owner_id) throws android.os.RemoteException;
|
||||||
|
// Get a list of cached tracks. The response is close to VK's original response (an audio list)
|
||||||
|
// Also, the items in the list are JSON ones.
|
||||||
|
|
||||||
|
public java.util.List<String> getCache() throws android.os.RemoteException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package bruhcollective.itaysonlab.libvkx.client;
|
package bruhcollective.itaysonlab.libvkx.client;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
|
||||||
|
import bruhcollective.itaysonlab.libvkx.ILibVkxService;
|
||||||
|
|
||||||
import com.vk.core.b.PackageManagerHelper;
|
import com.vk.core.b.PackageManagerHelper;
|
||||||
import com.vk.dto.music.MusicTrack;
|
import com.vk.dto.music.MusicTrack;
|
||||||
import com.vk.music.PlayerRefer;
|
import com.vk.music.PlayerRefer;
|
||||||
@@ -13,10 +13,12 @@ import java.util.ArrayList;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import bruhcollective.itaysonlab.libvkx.ILibVkxService;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
|
|
||||||
|
/* loaded from: classes6.dex */
|
||||||
public class LibVKXClient {
|
public class LibVKXClient {
|
||||||
private static LibVKXClientImpl impl;
|
private static LibVKXClientImpl impl;
|
||||||
|
|
||||||
@@ -29,7 +31,7 @@ public class LibVKXClient {
|
|||||||
|
|
||||||
public static LibVKXClientImpl getInstance() {
|
public static LibVKXClientImpl getInstance() {
|
||||||
LibVKXClientImpl libVKXClientImpl = impl;
|
LibVKXClientImpl libVKXClientImpl = impl;
|
||||||
return libVKXClientImpl == null ? getInstance(GetContext()) : libVKXClientImpl;
|
return libVKXClientImpl == null ? getInstance(Helper.GetContext()) : libVKXClientImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isVkxInstalled() {
|
public static boolean isVkxInstalled() {
|
||||||
@@ -50,7 +52,8 @@ public class LibVKXClient {
|
|||||||
return getInstance().runOnService(action);
|
return getInstance().runOnService(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void lambdaplay(List list, MusicTrack musicTrack, PlayerRefer playerRefer, ILibVkxService iLibVkxService) {
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||||||
|
public static /* synthetic */ void lambdaplay(List list, MusicTrack musicTrack, PlayerRefer playerRefer, ILibVkxService iLibVkxService) {
|
||||||
int indexOf = list.indexOf(musicTrack);
|
int indexOf = list.indexOf(musicTrack);
|
||||||
ArrayList arrayList = new ArrayList();
|
ArrayList arrayList = new ArrayList();
|
||||||
Iterator it = list.iterator();
|
Iterator it = list.iterator();
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package bruhcollective.itaysonlab.libvkx.client;
|
package bruhcollective.itaysonlab.libvkx.client;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -53,7 +51,7 @@ public class LibVKXClientImpl {
|
|||||||
public boolean runOnService(LibVKXAction action) {
|
public boolean runOnService(LibVKXAction action) {
|
||||||
if (serviceInstance != null) {
|
if (serviceInstance != null) {
|
||||||
try {
|
try {
|
||||||
if (serviceInstance.getUserId() != GetUserId()) return false;
|
if (serviceInstance.getUserId() != Helper.GetUserId()) return false;
|
||||||
action.run(serviceInstance);
|
action.run(serviceInstance);
|
||||||
return true;
|
return true;
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
@@ -77,7 +75,7 @@ public class LibVKXClientImpl {
|
|||||||
isBindFailed = true;
|
isBindFailed = true;
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
if (serviceInstance.getUserId() != GetUserId()) return;
|
if (serviceInstance.getUserId() != Helper.GetUserId()) return;
|
||||||
runAfterBind.run(serviceInstance);
|
runAfterBind.run(serviceInstance);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -97,7 +95,8 @@ public class LibVKXClientImpl {
|
|||||||
|
|
||||||
private boolean verifyBindActuality() {
|
private boolean verifyBindActuality() {
|
||||||
if (!checkIfAppExists()) return false; // no need
|
if (!checkIfAppExists()) return false; // no need
|
||||||
return !isBindFailed;
|
if (isBindFailed) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Intent getIntent() {
|
private Intent getIntent() {
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package com.aefyr.tsg.g2;
|
package com.aefyr.tsg.g2;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
@@ -7,13 +10,11 @@ import android.content.Context;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
|
|
||||||
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Aefyr on 20.05.2018.
|
* Created by Aefyr on 20.05.2018.
|
||||||
@@ -21,13 +22,17 @@ import java.util.concurrent.atomic.AtomicLong;
|
|||||||
public class NotificationsHelper {
|
public class NotificationsHelper {
|
||||||
private static final int NOTIFICATION_ID_BASE = 3921337;
|
private static final int NOTIFICATION_ID_BASE = 3921337;
|
||||||
private static final String NOTIFICATION_CHANNEL_ID = "tgss_chan_v5";
|
private static final String NOTIFICATION_CHANNEL_ID = "tgss_chan_v5";
|
||||||
|
|
||||||
|
private HashMap<TelegramStickersPack, Integer> downloadingPacksNotificationsIds;
|
||||||
|
|
||||||
|
private Context c;
|
||||||
|
private NotificationManagerCompat manager;
|
||||||
|
private int currentNotificationN = 0;
|
||||||
|
|
||||||
private static final int MAX_UPDATE_NOTIFICATIONS_PER_SECOND = 3;
|
private static final int MAX_UPDATE_NOTIFICATIONS_PER_SECOND = 3;
|
||||||
private static final int MIN_TIME_BETWEEN_UPDATE_NOTIFICATIONS = 1000 / MAX_UPDATE_NOTIFICATIONS_PER_SECOND;
|
private static final int MIN_TIME_BETWEEN_UPDATE_NOTIFICATIONS = 1000 / MAX_UPDATE_NOTIFICATIONS_PER_SECOND;
|
||||||
private final HashMap<TelegramStickersPack, Integer> downloadingPacksNotificationsIds;
|
|
||||||
private final Context c;
|
private AtomicLong lastNotificationTime = new AtomicLong(0);
|
||||||
private final NotificationManagerCompat manager;
|
|
||||||
private int currentNotificationN = 0;
|
|
||||||
private final AtomicLong lastNotificationTime = new AtomicLong(0);
|
|
||||||
|
|
||||||
public NotificationsHelper(Context c) {
|
public NotificationsHelper(Context c) {
|
||||||
this.c = c;
|
this.c = c;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import java.io.File;
|
|||||||
class PackDeletionTask extends AsyncTask<Void, Void, Boolean> {
|
class PackDeletionTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
private static final String TAG = "TGSSAnnihilator";
|
private static final String TAG = "TGSSAnnihilator";
|
||||||
|
|
||||||
private final TelegramStickersPack pack;
|
private TelegramStickersPack pack;
|
||||||
|
|
||||||
PackDeletionTask(TelegramStickersPack pack) {
|
PackDeletionTask(TelegramStickersPack pack) {
|
||||||
this.pack = pack;
|
this.pack = pack;
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
package com.aefyr.tsg.g2;
|
package com.aefyr.tsg.g2;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Aefyr on 18.05.2018.
|
* Created by Aefyr on 18.05.2018.
|
||||||
*/
|
*/
|
||||||
@@ -101,7 +101,7 @@ public class TelegramStickersPack extends CustomStickersPack {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
return obj instanceof TelegramStickersPack && ((TelegramStickersPack) obj).id.equalsIgnoreCase(id);
|
return obj instanceof TelegramStickersPack && ((TelegramStickersPack) obj).id.toLowerCase().equals(id.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,17 +1,5 @@
|
|||||||
package com.aefyr.tsg.g2;
|
package com.aefyr.tsg.g2;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Looper;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.aefyr.tsg.g2.sql.TelegramStickersDbHelper;
|
|
||||||
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
|
||||||
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersPackInfo;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -19,8 +7,18 @@ import java.util.List;
|
|||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
|
||||||
import ru.vtosters.lite.ui.fragments.tgstickers.StickersFragment;
|
import com.aefyr.tsg.g2.sql.TelegramStickersDbHelper;
|
||||||
|
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
||||||
|
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersPackInfo;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
import ru.vtosters.lite.ui.fragments.tgstickers.StickersFragment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Aefyr on 19.05.2018.
|
* Created by Aefyr on 19.05.2018.
|
||||||
@@ -29,25 +27,29 @@ public class TelegramStickersService {
|
|||||||
private static final String TAG = "TGStickersService";
|
private static final String TAG = "TGStickersService";
|
||||||
private static TelegramStickersService instance;
|
private static TelegramStickersService instance;
|
||||||
|
|
||||||
private final Context c;
|
private Context c;
|
||||||
|
|
||||||
private final ArrayList<TelegramStickersPack> packs;
|
private ArrayList<TelegramStickersPack> packs;
|
||||||
private final ArrayList<TelegramStickersPack> activePacks;
|
private ArrayList<TelegramStickersPack> activePacks;
|
||||||
private final ArrayList<TelegramStickersPack> inactivePacks;
|
private ArrayList<TelegramStickersPack> inactivePacks;
|
||||||
private final ArrayList<StickersEventsListener> listeners;
|
private ArrayList<StickersEventsListener> listeners;
|
||||||
private final HashSet<String> currentlyDownloading;
|
private HashSet<String> currentlyDownloading;
|
||||||
|
|
||||||
private final Handler uiThreadHandler;
|
private Handler uiThreadHandler;
|
||||||
|
|
||||||
private final TelegramStickersGrabber grabber;
|
private TelegramStickersGrabber grabber;
|
||||||
|
|
||||||
private final TelegramStickersDbHelper dbHelper;
|
private TelegramStickersDbHelper dbHelper;
|
||||||
private boolean ready = false;
|
private boolean ready = false;
|
||||||
private final ArrayList<Runnable> queuedTasks;
|
private ArrayList<Runnable> queuedTasks;
|
||||||
|
|
||||||
private final ThreadPoolExecutor executor;
|
private ThreadPoolExecutor executor;
|
||||||
|
|
||||||
private final NotificationsHelper notificationsHelper;
|
private NotificationsHelper notificationsHelper;
|
||||||
|
|
||||||
|
public static TelegramStickersService getInstance(Context c) {
|
||||||
|
return instance == null ? new TelegramStickersService(c) : instance;
|
||||||
|
}
|
||||||
|
|
||||||
private TelegramStickersService(Context context) {
|
private TelegramStickersService(Context context) {
|
||||||
instance = this;
|
instance = this;
|
||||||
@@ -70,10 +72,6 @@ public class TelegramStickersService {
|
|||||||
updatePacks(true);
|
updatePacks(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TelegramStickersService getInstance(Context c) {
|
|
||||||
return instance == null ? new TelegramStickersService(c) : instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updatePacks(final boolean notify) {
|
private void updatePacks(final boolean notify) {
|
||||||
packs.clear();
|
packs.clear();
|
||||||
dbHelper.getAllPacks(new TelegramStickersDbHelper.PacksLoadingListener() {
|
dbHelper.getAllPacks(new TelegramStickersDbHelper.PacksLoadingListener() {
|
||||||
@@ -107,6 +105,20 @@ public class TelegramStickersService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface StickersEventsListener {
|
||||||
|
void onPackAdded(TelegramStickersPack pack, int atIndex);
|
||||||
|
|
||||||
|
void onPackRemoved(TelegramStickersPack pack, int atIndex);
|
||||||
|
|
||||||
|
void onPackChanged(TelegramStickersPack pack, int atIndex);
|
||||||
|
|
||||||
|
void onPackDownloadError(TelegramStickersPack pack, Exception error);
|
||||||
|
|
||||||
|
void onActivePacksListChanged();
|
||||||
|
|
||||||
|
void onInactivePacksListChanged();
|
||||||
|
}
|
||||||
|
|
||||||
public void addStickersEventsListener(StickersEventsListener listener) {
|
public void addStickersEventsListener(StickersEventsListener listener) {
|
||||||
listeners.add(listener);
|
listeners.add(listener);
|
||||||
}
|
}
|
||||||
@@ -116,7 +128,7 @@ public class TelegramStickersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyPackAdded(TelegramStickersPack pack, int atIndex) {
|
private void notifyPackAdded(TelegramStickersPack pack, int atIndex) {
|
||||||
GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
Helper.GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
||||||
if (listeners.isEmpty())
|
if (listeners.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -126,7 +138,7 @@ public class TelegramStickersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyPackChanged(TelegramStickersPack pack, int atIndex) {
|
private void notifyPackChanged(TelegramStickersPack pack, int atIndex) {
|
||||||
GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
Helper.GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
||||||
if (listeners.isEmpty())
|
if (listeners.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -136,7 +148,7 @@ public class TelegramStickersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyPackRemoved(TelegramStickersPack pack, int atIndex) {
|
private void notifyPackRemoved(TelegramStickersPack pack, int atIndex) {
|
||||||
GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
Helper.GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
||||||
if (listeners.isEmpty())
|
if (listeners.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -146,7 +158,7 @@ public class TelegramStickersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyPackDownloadError(TelegramStickersPack pack, Exception error) {
|
private void notifyPackDownloadError(TelegramStickersPack pack, Exception error) {
|
||||||
GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
Helper.GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
||||||
if (listeners.isEmpty())
|
if (listeners.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -156,7 +168,7 @@ public class TelegramStickersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyActivePacksListChanged() {
|
private void notifyActivePacksListChanged() {
|
||||||
GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
Helper.GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
||||||
if (listeners.isEmpty())
|
if (listeners.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -166,7 +178,7 @@ public class TelegramStickersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyInactivePacksListChanged() {
|
private void notifyInactivePacksListChanged() {
|
||||||
GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
Helper.GetContext().sendBroadcast(new Intent(StickersFragment.ACTION_RELOAD));
|
||||||
if (listeners.isEmpty())
|
if (listeners.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -386,19 +398,5 @@ public class TelegramStickersService {
|
|||||||
getPacksListReference().set(li1, p2);
|
getPacksListReference().set(li1, p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface StickersEventsListener {
|
|
||||||
void onPackAdded(TelegramStickersPack pack, int atIndex);
|
|
||||||
|
|
||||||
void onPackRemoved(TelegramStickersPack pack, int atIndex);
|
|
||||||
|
|
||||||
void onPackChanged(TelegramStickersPack pack, int atIndex);
|
|
||||||
|
|
||||||
void onPackDownloadError(TelegramStickersPack pack, Exception error);
|
|
||||||
|
|
||||||
void onActivePacksListChanged();
|
|
||||||
|
|
||||||
void onInactivePacksListChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,6 @@ import android.provider.BaseColumns;
|
|||||||
*/
|
*/
|
||||||
public final class TelegramStickersContract {
|
public final class TelegramStickersContract {
|
||||||
|
|
||||||
public static final String SQL_CREATE_ENTRIES = String.format("CREATE TABLE %s (%s INTEGER PRIMARY KEY, %s INTEGER AUTO_INCREMENT, %s TEXT, %s TEXT, %s TEXT, %s INTEGER, %s INTEGER, %s TEXT, %s TEXT)",
|
|
||||||
StickersTableEntry.TABLE_NAME, StickersTableEntry._ID, StickersTableEntry.COLUMN_NAME_INDEX, StickersTableEntry.COLUMN_NAME_ID, StickersTableEntry.COLUMN_NAME_NAME,
|
|
||||||
StickersTableEntry.COLUMN_NAME_FOLDER, StickersTableEntry.COLUMN_NAME_STICKERS_COUNT, StickersTableEntry.COLUMN_NAME_ENABLED, StickersTableEntry.COLUMN_NAME_VERSION, StickersTableEntry.COLUMN_NAME_EMOJIS);
|
|
||||||
|
|
||||||
private TelegramStickersContract() {
|
private TelegramStickersContract() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,5 +23,9 @@ public final class TelegramStickersContract {
|
|||||||
public static final String COLUMN_NAME_EMOJIS = "emojis";
|
public static final String COLUMN_NAME_EMOJIS = "emojis";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final String SQL_CREATE_ENTRIES = String.format("CREATE TABLE %s (%s INTEGER PRIMARY KEY, %s INTEGER AUTO_INCREMENT, %s TEXT, %s TEXT, %s TEXT, %s INTEGER, %s INTEGER, %s TEXT, %s TEXT)",
|
||||||
|
StickersTableEntry.TABLE_NAME, StickersTableEntry._ID, StickersTableEntry.COLUMN_NAME_INDEX, StickersTableEntry.COLUMN_NAME_ID, StickersTableEntry.COLUMN_NAME_NAME,
|
||||||
|
StickersTableEntry.COLUMN_NAME_FOLDER, StickersTableEntry.COLUMN_NAME_STICKERS_COUNT, StickersTableEntry.COLUMN_NAME_ENABLED, StickersTableEntry.COLUMN_NAME_VERSION, StickersTableEntry.COLUMN_NAME_EMOJIS);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.aefyr.tsg.g2.TelegramStickersPack;
|
import com.aefyr.tsg.g2.TelegramStickersPack;
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Aefyr on 19.05.2018.
|
* Created by Aefyr on 19.05.2018.
|
||||||
*/
|
*/
|
||||||
@@ -27,6 +27,12 @@ public class TelegramStickersDbHelper extends SQLiteOpenHelper {
|
|||||||
private SQLiteDatabase writableDb;
|
private SQLiteDatabase writableDb;
|
||||||
private SQLiteDatabase readableDb;
|
private SQLiteDatabase readableDb;
|
||||||
|
|
||||||
|
public interface PacksLoadingListener {
|
||||||
|
void onPackLoaded(TelegramStickersPack pack);
|
||||||
|
|
||||||
|
void onAllPacksLoaded(ArrayList<TelegramStickersPack> packs);
|
||||||
|
}
|
||||||
|
|
||||||
public TelegramStickersDbHelper(Context context) {
|
public TelegramStickersDbHelper(Context context) {
|
||||||
super(context, DB_NAME, null, DB_VERSION);
|
super(context, DB_NAME, null, DB_VERSION);
|
||||||
}
|
}
|
||||||
@@ -88,6 +94,7 @@ public class TelegramStickersDbHelper extends SQLiteOpenHelper {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
max = 0;
|
max = 0;
|
||||||
}
|
}
|
||||||
|
Log.d("sova", "Found last index: " + max);
|
||||||
return max + 1;
|
return max + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,12 +106,6 @@ public class TelegramStickersDbHelper extends SQLiteOpenHelper {
|
|||||||
new PacksLoadingTask(listener).execute();
|
new PacksLoadingTask(listener).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface PacksLoadingListener {
|
|
||||||
void onPackLoaded(TelegramStickersPack pack);
|
|
||||||
|
|
||||||
void onAllPacksLoaded(ArrayList<TelegramStickersPack> packs);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class PacksLoadingTask extends AsyncTask<Void, Void, ArrayList<TelegramStickersPack>> {
|
private class PacksLoadingTask extends AsyncTask<Void, Void, ArrayList<TelegramStickersPack>> {
|
||||||
|
|
||||||
PacksLoadingListener listener;
|
PacksLoadingListener listener;
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ import android.util.Log;
|
|||||||
import com.aefyr.tsg.g2.stickersgrabber.util.Flag;
|
import com.aefyr.tsg.g2.stickersgrabber.util.Flag;
|
||||||
import com.aefyr.tsg.g2.stickersgrabber.util.GoalCounter;
|
import com.aefyr.tsg.g2.stickersgrabber.util.GoalCounter;
|
||||||
|
|
||||||
|
import ru.f0x1d.net.NetCall;
|
||||||
|
import ru.f0x1d.net.NetCallback;
|
||||||
|
import ru.f0x1d.net.NetClient;
|
||||||
|
import ru.f0x1d.net.NetRequest;
|
||||||
|
import ru.f0x1d.net.NetResponse;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
@@ -27,17 +33,17 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import ru.f0x1d.net.NetCall;
|
|
||||||
import ru.f0x1d.net.NetCallback;
|
|
||||||
import ru.f0x1d.net.NetClient;
|
|
||||||
import ru.f0x1d.net.NetRequest;
|
|
||||||
import ru.f0x1d.net.NetResponse;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Aefyr on 11.05.2018.
|
* Created by Aefyr on 11.05.2018.
|
||||||
*/
|
*/
|
||||||
public class TelegramStickersGrabber {
|
public class TelegramStickersGrabber {
|
||||||
private static final String TAG = "TSG";
|
private static final String TAG = "TSG";
|
||||||
|
|
||||||
|
private static String BOT_API_BASE_URL;
|
||||||
|
private static String GET_STICKER_SET_URL;
|
||||||
|
private static String GET_FILE_URL;
|
||||||
|
private static String BOT_API_BASE_FILE_URL;
|
||||||
|
|
||||||
public static String REAL_TG_IP = null;
|
public static String REAL_TG_IP = null;
|
||||||
public static String PROXY_IP = null;
|
public static String PROXY_IP = null;
|
||||||
public static int PROXY_PORT = -1;
|
public static int PROXY_PORT = -1;
|
||||||
@@ -46,32 +52,11 @@ public class TelegramStickersGrabber {
|
|||||||
public static boolean PROXY_SOCKS = true;
|
public static boolean PROXY_SOCKS = true;
|
||||||
public static boolean HAS_PASS = false;
|
public static boolean HAS_PASS = false;
|
||||||
public static boolean USE_PROXY = false;
|
public static boolean USE_PROXY = false;
|
||||||
private static String BOT_API_BASE_URL;
|
|
||||||
private static String GET_STICKER_SET_URL;
|
|
||||||
private static String GET_FILE_URL;
|
|
||||||
private static String BOT_API_BASE_FILE_URL;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
updateURLs();
|
updateURLs();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final MessageDigest sha256;
|
|
||||||
private final Handler uiThreadHandler;
|
|
||||||
private String botApiKey = "";
|
|
||||||
private NetClient httpClient;
|
|
||||||
public TelegramStickersGrabber(String botApiKey) {
|
|
||||||
this.botApiKey = botApiKey;
|
|
||||||
httpClient = new NetClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();
|
|
||||||
uiThreadHandler = new Handler(Looper.getMainLooper());
|
|
||||||
try {
|
|
||||||
sha256 = MessageDigest.getInstance("SHA-256");
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
Log.wtf(TAG, "No support for SHA-256");
|
|
||||||
e.printStackTrace();
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void updateURLs() {
|
public static void updateURLs() {
|
||||||
BOT_API_BASE_FILE_URL = "https://api.telegram.org/file/bot%s/%s";
|
BOT_API_BASE_FILE_URL = "https://api.telegram.org/file/bot%s/%s";
|
||||||
|
|
||||||
@@ -81,6 +66,11 @@ public class TelegramStickersGrabber {
|
|||||||
GET_FILE_URL = BOT_API_BASE_URL + "getFile?file_id=%s";
|
GET_FILE_URL = BOT_API_BASE_URL + "getFile?file_id=%s";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String botApiKey = "";
|
||||||
|
private NetClient httpClient;
|
||||||
|
private final MessageDigest sha256;
|
||||||
|
private final Handler uiThreadHandler;
|
||||||
|
|
||||||
public static boolean isTelegramBlocked() {
|
public static boolean isTelegramBlocked() {
|
||||||
NetClient client = new NetClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();
|
NetClient client = new NetClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();
|
||||||
try {
|
try {
|
||||||
@@ -111,6 +101,43 @@ public class TelegramStickersGrabber {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface PackDownloadListener {
|
||||||
|
void onPackDownloaded(TelegramStickersPackInfo pack, boolean newVersionFound);
|
||||||
|
|
||||||
|
void onPackDownloadError(Exception e);
|
||||||
|
|
||||||
|
void onGotPackInfo(TelegramStickersPackInfo packInfo);
|
||||||
|
|
||||||
|
void onStickerDownloaded(String pack, File sticker, String boundEmoji, int stickerIndex, int downloadedStickersCount, int totalStickerCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface KeyCheckListener {
|
||||||
|
void onKeyChecked(boolean ok);
|
||||||
|
|
||||||
|
void onNetError();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TSGException extends Exception {
|
||||||
|
private static final long serialVersionUID = 7866915509988422944L;
|
||||||
|
|
||||||
|
private TSGException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public TelegramStickersGrabber(String botApiKey) {
|
||||||
|
this.botApiKey = botApiKey;
|
||||||
|
httpClient = new NetClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();
|
||||||
|
uiThreadHandler = new Handler(Looper.getMainLooper());
|
||||||
|
try {
|
||||||
|
sha256 = MessageDigest.getInstance("SHA-256");
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
Log.wtf(TAG, "No support for SHA-256");
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void resetProxy() {
|
public void resetProxy() {
|
||||||
httpClient = new NetClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();
|
httpClient = new NetClient.Builder().connectTimeout(5, TimeUnit.SECONDS).build();
|
||||||
}
|
}
|
||||||
@@ -174,6 +201,40 @@ public class TelegramStickersGrabber {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class StickerSet {
|
||||||
|
String id;
|
||||||
|
String name;
|
||||||
|
String version;
|
||||||
|
ArrayList<Sticker> stickers;
|
||||||
|
|
||||||
|
StickerSet(String id, String name, String version, ArrayList<Sticker> stickers) {
|
||||||
|
this.name = name;
|
||||||
|
this.stickers = stickers;
|
||||||
|
this.id = id;
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Sticker {
|
||||||
|
String emoji;
|
||||||
|
String fileId;
|
||||||
|
|
||||||
|
Sticker(String fileId, String emoji) {
|
||||||
|
this.fileId = fileId;
|
||||||
|
this.emoji = emoji;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return obj instanceof Sticker && ((Sticker) obj).fileId.equals(fileId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return (17 * emoji.hashCode()) << 32 + fileId.hashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void getPackInfo(final String packName, final File packFolder, final String installedVersion, final PackDownloadListener listener) {
|
private void getPackInfo(final String packName, final File packFolder, final String installedVersion, final PackDownloadListener listener) {
|
||||||
NetRequest packInfoRequest = new NetRequest.Builder().get().url(String.format(GET_STICKER_SET_URL, botApiKey, packName)).build();
|
NetRequest packInfoRequest = new NetRequest.Builder().get().url(String.format(GET_STICKER_SET_URL, botApiKey, packName)).build();
|
||||||
httpClient.newCall(packInfoRequest).enqueue(new NetCallback() {
|
httpClient.newCall(packInfoRequest).enqueue(new NetCallback() {
|
||||||
@@ -417,62 +478,4 @@ public class TelegramStickersGrabber {
|
|||||||
private void runOnUiThread(Runnable r) {
|
private void runOnUiThread(Runnable r) {
|
||||||
uiThreadHandler.post(r);
|
uiThreadHandler.post(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface PackDownloadListener {
|
|
||||||
void onPackDownloaded(TelegramStickersPackInfo pack, boolean newVersionFound);
|
|
||||||
|
|
||||||
void onPackDownloadError(Exception e);
|
|
||||||
|
|
||||||
void onGotPackInfo(TelegramStickersPackInfo packInfo);
|
|
||||||
|
|
||||||
void onStickerDownloaded(String pack, File sticker, String boundEmoji, int stickerIndex, int downloadedStickersCount, int totalStickerCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface KeyCheckListener {
|
|
||||||
void onKeyChecked(boolean ok);
|
|
||||||
|
|
||||||
void onNetError();
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TSGException extends Exception {
|
|
||||||
private static final long serialVersionUID = 7866915509988422944L;
|
|
||||||
|
|
||||||
private TSGException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class StickerSet {
|
|
||||||
String id;
|
|
||||||
String name;
|
|
||||||
String version;
|
|
||||||
ArrayList<Sticker> stickers;
|
|
||||||
|
|
||||||
StickerSet(String id, String name, String version, ArrayList<Sticker> stickers) {
|
|
||||||
this.name = name;
|
|
||||||
this.stickers = stickers;
|
|
||||||
this.id = id;
|
|
||||||
this.version = version;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class Sticker {
|
|
||||||
String emoji;
|
|
||||||
String fileId;
|
|
||||||
|
|
||||||
Sticker(String fileId, String emoji) {
|
|
||||||
this.fileId = fileId;
|
|
||||||
this.emoji = emoji;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
return obj instanceof Sticker && ((Sticker) obj).fileId.equals(fileId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return (17 * emoji.hashCode()) << 32 + fileId.hashCode();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,14 @@ import android.util.Log;
|
|||||||
*/
|
*/
|
||||||
public class GoalCounter {
|
public class GoalCounter {
|
||||||
|
|
||||||
private final int goal;
|
public interface OnGoalReachListener {
|
||||||
|
void onGoalReached();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int goal;
|
||||||
private int i = 0;
|
private int i = 0;
|
||||||
private final OnGoalReachListener listener;
|
|
||||||
|
private OnGoalReachListener listener;
|
||||||
|
|
||||||
public GoalCounter(int goal, OnGoalReachListener listener) {
|
public GoalCounter(int goal, OnGoalReachListener listener) {
|
||||||
this.goal = goal;
|
this.goal = goal;
|
||||||
@@ -31,8 +36,4 @@ public class GoalCounter {
|
|||||||
public synchronized int value() {
|
public synchronized int value() {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnGoalReachListener {
|
|
||||||
void onGoalReached();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,17 +7,20 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import okhttp3.Headers;
|
||||||
import okhttp3.internal.Util;
|
import okhttp3.internal.Util;
|
||||||
import okhttp3.internal.b.HttpMethod;
|
import okhttp3.internal.b.HttpMethod;
|
||||||
|
import okhttp3.Request;
|
||||||
|
|
||||||
public final class Request {
|
public final class Request {
|
||||||
|
/* renamed from: a reason: collision with root package name */
|
||||||
final HttpUrl a;
|
final HttpUrl a;
|
||||||
final String b;
|
final String b;
|
||||||
final Headers c;
|
final Headers c;
|
||||||
final Map<Class<?>, Object> e;
|
final Map<Class<?>, Object> e;
|
||||||
|
private volatile CacheControl f;
|
||||||
@Nullable
|
@Nullable
|
||||||
final RequestBody requestBody;
|
final RequestBody requestBody;
|
||||||
private volatile CacheControl f;
|
|
||||||
|
|
||||||
Request(Builder builder) {
|
Request(Builder builder) {
|
||||||
this.a = builder.a;
|
this.a = builder.a;
|
||||||
@@ -55,7 +58,7 @@ public final class Request {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public <T> T a(Class<? extends T> cls) {
|
public <T> T a(Class<? extends T> cls) {
|
||||||
return cls.cast(this.e.get(cls));
|
return (T) cls.cast(this.e.get(cls));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder e() {
|
public Builder e() {
|
||||||
@@ -82,6 +85,7 @@ public final class Request {
|
|||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|
||||||
|
/* renamed from: a reason: collision with root package name */
|
||||||
HttpUrl a;
|
HttpUrl a;
|
||||||
String b;
|
String b;
|
||||||
Headers.a c;
|
Headers.a c;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.f0x1d.net;
|
package ru.f0x1d.net;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
import com.vk.core.network.Network;
|
import com.vk.core.network.Network;
|
||||||
@@ -15,6 +13,10 @@ import ru.vtosters.lite.utils.Helper;
|
|||||||
|
|
||||||
public class F0x1dRequest {
|
public class F0x1dRequest {
|
||||||
|
|
||||||
|
public interface F0x1dRequestCallback {
|
||||||
|
void onResponse(String str);
|
||||||
|
}
|
||||||
|
|
||||||
public static void makeRequest(byte[] bArr, F0x1dRequestCallback f0x1dRequestCallback) {
|
public static void makeRequest(byte[] bArr, F0x1dRequestCallback f0x1dRequestCallback) {
|
||||||
new MakeRequestTask(bArr, f0x1dRequestCallback).execute();
|
new MakeRequestTask(bArr, f0x1dRequestCallback).execute();
|
||||||
}
|
}
|
||||||
@@ -27,15 +29,11 @@ public class F0x1dRequest {
|
|||||||
new MakeRequestTask(str.getBytes(), f0x1dRequestCallback, true, !z).execute();
|
new MakeRequestTask(str.getBytes(), f0x1dRequestCallback, true, !z).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface F0x1dRequestCallback {
|
|
||||||
void onResponse(String str);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class MakeRequestTask extends AsyncTask<Void, Void, String> {
|
private static class MakeRequestTask extends AsyncTask<Void, Void, String> {
|
||||||
private final F0x1dRequestCallback callback;
|
private F0x1dRequestCallback callback;
|
||||||
private boolean mIsPut;
|
private boolean mIsPut;
|
||||||
private boolean mIsVkToasterRequest;
|
private boolean mIsVkToasterRequest;
|
||||||
private final byte[] url;
|
private byte[] url;
|
||||||
|
|
||||||
public MakeRequestTask(byte[] bArr, F0x1dRequestCallback f0x1dRequestCallback) {
|
public MakeRequestTask(byte[] bArr, F0x1dRequestCallback f0x1dRequestCallback) {
|
||||||
this.mIsVkToasterRequest = false;
|
this.mIsVkToasterRequest = false;
|
||||||
@@ -53,12 +51,13 @@ public class F0x1dRequest {
|
|||||||
this.mIsPut = z2;
|
this.mIsPut = z2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* JADX INFO: Access modifiers changed from: protected */
|
||||||
public String doInBackground(Void... voidArr) {
|
public String doInBackground(Void... voidArr) {
|
||||||
try {
|
try {
|
||||||
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(new String(this.url)).openConnection();
|
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(new String(this.url)).openConnection();
|
||||||
httpURLConnection.setRequestMethod(this.mIsPut ? "PUT" : "GET");
|
httpURLConnection.setRequestMethod(this.mIsPut ? "PUT" : "GET");
|
||||||
if (this.mIsVkToasterRequest) {
|
if (this.mIsVkToasterRequest) {
|
||||||
httpURLConnection.setRequestProperty("Token", GetUserToken());
|
httpURLConnection.setRequestProperty("Token", Helper.GetUserToken());
|
||||||
}
|
}
|
||||||
if (!this.mIsVkToasterRequest) {
|
if (!this.mIsVkToasterRequest) {
|
||||||
httpURLConnection.setRequestProperty("User-Agent", Network.a.a().a());
|
httpURLConnection.setRequestProperty("User-Agent", Network.a.a().a());
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.f0x1d.net;
|
package ru.f0x1d.net;
|
||||||
|
|
||||||
import android.util.Base64;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -15,25 +13,17 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import android.util.Base64;
|
||||||
|
|
||||||
public final class NetCall {
|
public final class NetCall {
|
||||||
private final NetRequest req;
|
private NetRequest req;
|
||||||
private final NetClient cl;
|
private NetClient cl;
|
||||||
|
|
||||||
protected NetCall(NetClient cl, NetRequest req) {
|
protected NetCall(NetClient cl, NetRequest req) {
|
||||||
this.req = req;
|
this.req = req;
|
||||||
this.cl = cl;
|
this.cl = cl;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String constructArgs(Map<String, String> args) throws UnsupportedEncodingException {
|
|
||||||
args = new TreeMap<>(args);
|
|
||||||
String str = "";
|
|
||||||
for (Map.Entry<String, String> en : args.entrySet()) {
|
|
||||||
if (!str.isEmpty()) str += "&";
|
|
||||||
str += URLEncoder.encode(en.getKey(), "UTF-8") + "=" + URLEncoder.encode(en.getValue(), "UTF-8");
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NetRequest request() {
|
public NetRequest request() {
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
@@ -75,6 +65,16 @@ public final class NetCall {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String constructArgs(Map<String, String> args) throws UnsupportedEncodingException {
|
||||||
|
args = new TreeMap<>(args);
|
||||||
|
String str = "";
|
||||||
|
for (Map.Entry<String, String> en : args.entrySet()) {
|
||||||
|
if (!str.isEmpty()) str += "&";
|
||||||
|
str += URLEncoder.encode(en.getKey(), "UTF-8") + "=" + URLEncoder.encode(en.getValue(), "UTF-8");
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
public void enqueue(NetCallback cb) {
|
public void enqueue(NetCallback cb) {
|
||||||
new Thread() {
|
new Thread() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -5,39 +5,9 @@ import java.net.Proxy;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class NetClient {
|
public class NetClient {
|
||||||
private final long timeout;
|
private long timeout;
|
||||||
private final Proxy proxy;
|
private Proxy proxy;
|
||||||
private final PasswordAuthentication authenticator;
|
private PasswordAuthentication authenticator;
|
||||||
|
|
||||||
protected NetClient(Builder b) {
|
|
||||||
timeout = b.timeout;
|
|
||||||
proxy = b.proxy;
|
|
||||||
authenticator = b.auth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder newBuilder() {
|
|
||||||
Builder b = new Builder();
|
|
||||||
b.timeout = timeout;
|
|
||||||
b.proxy = proxy;
|
|
||||||
b.auth = authenticator;
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NetCall newCall(NetRequest req) {
|
|
||||||
return new NetCall(this, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PasswordAuthentication getAuthenticator() {
|
|
||||||
return authenticator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Proxy getProxy() {
|
|
||||||
return proxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getTimeout() {
|
|
||||||
return timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Builder {
|
public static final class Builder {
|
||||||
private long timeout;
|
private long timeout;
|
||||||
@@ -84,4 +54,34 @@ public class NetClient {
|
|||||||
return new NetClient(this);
|
return new NetClient(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder newBuilder() {
|
||||||
|
Builder b = new Builder();
|
||||||
|
b.timeout = timeout;
|
||||||
|
b.proxy = proxy;
|
||||||
|
b.auth = authenticator;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected NetClient(Builder b) {
|
||||||
|
timeout = b.timeout;
|
||||||
|
proxy = b.proxy;
|
||||||
|
authenticator = b.auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NetCall newCall(NetRequest req) {
|
||||||
|
return new NetCall(this, req);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PasswordAuthentication getAuthenticator() {
|
||||||
|
return authenticator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Proxy getProxy() {
|
||||||
|
return proxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimeout() {
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,9 @@ import java.util.Map;
|
|||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
public class NetRequest {
|
public class NetRequest {
|
||||||
private final String url;
|
private String url;
|
||||||
private final String requestMethod;
|
private String requestMethod;
|
||||||
private final Map<String, String> params;
|
private Map<String, String> params;
|
||||||
|
|
||||||
protected NetRequest(Builder b) {
|
|
||||||
url = b.url;
|
|
||||||
requestMethod = b.req;
|
|
||||||
params = b.params;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, String> getRequestParams() {
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String url() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRequestMethod() {
|
|
||||||
return requestMethod;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Builder {
|
public static final class Builder {
|
||||||
private String url;
|
private String url;
|
||||||
@@ -61,4 +43,22 @@ public class NetRequest {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected NetRequest(Builder b) {
|
||||||
|
url = b.url;
|
||||||
|
requestMethod = b.req;
|
||||||
|
params = b.params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getRequestParams() {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String url() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRequestMethod() {
|
||||||
|
return requestMethod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import java.io.InputStream;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public final class NetResponse {
|
public final class NetResponse {
|
||||||
private final byte[] data;
|
private byte[] data;
|
||||||
private int code;
|
private int code;
|
||||||
|
|
||||||
protected NetResponse(byte[] data) {
|
protected NetResponse(byte[] data) {
|
||||||
|
|||||||
@@ -26,11 +26,16 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
|
||||||
public class GCMFix {
|
public class GCMFix {
|
||||||
|
private static String agent = String.format("Android-GCM/1.5 (%s %s)", Build.MODEL, Build.MODEL);
|
||||||
public static ArrayList<String> langs = new ArrayList<>();
|
public static ArrayList<String> langs = new ArrayList<>();
|
||||||
private static final String agent = String.format("Android-GCM/1.5 (%s %s)", Build.MODEL, Build.MODEL);
|
|
||||||
private static KeyPair pair;
|
private static KeyPair pair;
|
||||||
private static int rid = 0;
|
private static int rid = 0;
|
||||||
|
|
||||||
|
/* access modifiers changed from: private */
|
||||||
|
public interface Callback {
|
||||||
|
void doCallback(String str);
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
genNewKey();
|
genNewKey();
|
||||||
}
|
}
|
||||||
@@ -90,12 +95,12 @@ public class GCMFix {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lambdaRequestToken(StringBuilder sb, AtomicBoolean wait, String s) {
|
static /* synthetic */ void lambdaRequestToken(StringBuilder sb, AtomicBoolean wait, String s) {
|
||||||
sb.append(s.substring(20));
|
sb.append(s.substring(20));
|
||||||
wait.set(true);
|
wait.set(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lambda$requestToken$1(String str) {
|
static /* synthetic */ void lambda$requestToken$1(String str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void fillParams(List<String> params, String sig, String pub2, String xappid, long androidId, boolean del) {
|
private static void fillParams(List<String> params, String sig, String pub2, String xappid, long androidId, boolean del) {
|
||||||
@@ -191,8 +196,4 @@ public class GCMFix {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Callback {
|
|
||||||
void doCallback(String str);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ public class DeviceInfoCollector {
|
|||||||
declaredField.setAccessible(true);
|
declaredField.setAccessible(true);
|
||||||
Object obj = declaredField.get(defaultAdapter);
|
Object obj = declaredField.get(defaultAdapter);
|
||||||
if (obj != null) {
|
if (obj != null) {
|
||||||
return (String) obj.getClass().getMethod("getAddress").invoke(obj, new Object[0]);
|
return (String) obj.getClass().getMethod("getAddress", new Class[0]).invoke(obj, new Object[0]);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package ru.vtosters.lite.dnr;
|
package ru.vtosters.lite.dnr;
|
||||||
|
|
||||||
import static ru.vtosters.lite.dnr.DNRModule.*;
|
import android.util.Log;
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import com.vk.im.engine.models.dialogs.Dialog;
|
import com.vk.im.engine.models.dialogs.Dialog;
|
||||||
import com.vk.im.ui.components.common.DialogAction;
|
import com.vk.im.ui.components.common.DialogAction;
|
||||||
@@ -15,13 +14,13 @@ public class DNRInjector {
|
|||||||
public static void inject(Dialog dialog, List<DialogAction> list) {
|
public static void inject(Dialog dialog, List<DialogAction> list) {
|
||||||
int peerId = dialog.a();
|
int peerId = dialog.a();
|
||||||
|
|
||||||
if (isDnrEnabledFor(peerId)) {
|
if (DNRModule.isDnrEnabledFor(peerId)) {
|
||||||
list.add(DialogAction.valueOf("DNR_OFF"));
|
list.add(DialogAction.valueOf("DNR_OFF"));
|
||||||
} else {
|
} else {
|
||||||
list.add(DialogAction.valueOf("DNR_ON"));
|
list.add(DialogAction.valueOf("DNR_ON"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isDntEnabledFor(peerId)) {
|
if (DNRModule.isDntEnabledFor(peerId)) {
|
||||||
list.add(DialogAction.valueOf("DNT_OFF"));
|
list.add(DialogAction.valueOf("DNT_OFF"));
|
||||||
} else {
|
} else {
|
||||||
list.add(DialogAction.valueOf("DNT_ON"));
|
list.add(DialogAction.valueOf("DNT_ON"));
|
||||||
@@ -29,10 +28,10 @@ public class DNRInjector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static LinkedHashMap<DialogAction, Integer> injectToHashMap(LinkedHashMap<DialogAction, Integer> hashMap) {
|
public static LinkedHashMap<DialogAction, Integer> injectToHashMap(LinkedHashMap<DialogAction, Integer> hashMap) {
|
||||||
hashMap.put(DialogAction.valueOf("DNR_ON"), getIdentifier("DNR_ON", "string"));
|
hashMap.put(DialogAction.valueOf("DNR_ON"), Helper.getIdentifier("DNR_ON", "string"));
|
||||||
hashMap.put(DialogAction.valueOf("DNR_OFF"), getIdentifier("DNR_OFF", "string"));
|
hashMap.put(DialogAction.valueOf("DNR_OFF"), Helper.getIdentifier("DNR_OFF", "string"));
|
||||||
hashMap.put(DialogAction.valueOf("DNT_ON"), getIdentifier("DNT_ON", "string"));
|
hashMap.put(DialogAction.valueOf("DNT_ON"), Helper.getIdentifier("DNT_ON", "string"));
|
||||||
hashMap.put(DialogAction.valueOf("DNT_OFF"), getIdentifier("DNT_OFF", "string"));
|
hashMap.put(DialogAction.valueOf("DNT_OFF"), Helper.getIdentifier("DNT_OFF", "string"));
|
||||||
return hashMap;
|
return hashMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,11 +58,11 @@ public class DNRInjector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void setDnr(Dialog dialog, boolean value) {
|
public static void setDnr(Dialog dialog, boolean value) {
|
||||||
hookDNR(dialog.a());
|
DNRModule.hookDNR(dialog.a());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDnt(Dialog dialog, boolean value) {
|
public static void setDnt(Dialog dialog, boolean value) {
|
||||||
hookDNT(dialog.a());
|
DNRModule.hookDNT(dialog.a());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package ru.vtosters.lite.dnr;
|
package ru.vtosters.lite.dnr;
|
||||||
|
|
||||||
import static ru.f0x1d.net.F0x1dRequest.*;
|
import android.util.Log;
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Proxy.*;
|
|
||||||
|
|
||||||
import com.vk.core.util.ToastUtils;
|
import com.vk.core.util.ToastUtils;
|
||||||
import com.vk.im.engine.commands.messages.SetUserActivityCmd;
|
import com.vk.im.engine.commands.messages.SetUserActivityCmd;
|
||||||
@@ -19,7 +17,6 @@ import ru.vtosters.lite.utils.Proxy;
|
|||||||
public class DNRModule {
|
public class DNRModule {
|
||||||
public static DoNotReadDBHelper mDoNotReadDBHelper = new DoNotReadDBHelper();
|
public static DoNotReadDBHelper mDoNotReadDBHelper = new DoNotReadDBHelper();
|
||||||
public static DoNotTypeDBHelper mDoNotTypeDBHelper = new DoNotTypeDBHelper();
|
public static DoNotTypeDBHelper mDoNotTypeDBHelper = new DoNotTypeDBHelper();
|
||||||
public static Dialog mDialog;
|
|
||||||
|
|
||||||
public static boolean isDnrEnabledFor(int id) {
|
public static boolean isDnrEnabledFor(int id) {
|
||||||
var isEnabled = mDoNotReadDBHelper.isEnabledForPeerId(id);
|
var isEnabled = mDoNotReadDBHelper.isEnabledForPeerId(id);
|
||||||
@@ -54,11 +51,13 @@ public class DNRModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void hookRead(Dialog dialog) {
|
public static void hookRead(Dialog dialog) {
|
||||||
makeRequest("https://" + getApiCom() + "/method/messages.markAsRead?start_message_id=" + dialog.lastMsgVkId + "&peer_id=" + dialog.a() + "&v=5.91&access_token=" + GetUserToken(), response -> {
|
F0x1dRequest.makeRequest("https://" + Proxy.getApiCom() + "/method/messages.markAsRead?start_message_id=" + dialog.lastMsgVkId + "&peer_id=" + dialog.a() + "&v=5.91&access_token=" + Helper.GetUserToken(), response -> {
|
||||||
ToastUtils.a("Чат помечен как прочитанный!");
|
ToastUtils.a("Чат помечен как прочитанный!");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Dialog mDialog;
|
||||||
|
|
||||||
public static void hookDNR(int peerId) {
|
public static void hookDNR(int peerId) {
|
||||||
mDoNotReadDBHelper.setEnabledForPeerId(peerId, !mDoNotReadDBHelper.isEnabledForPeerId(peerId));
|
mDoNotReadDBHelper.setEnabledForPeerId(peerId, !mDoNotReadDBHelper.isEnabledForPeerId(peerId));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package ru.vtosters.lite.dnr;
|
|||||||
|
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
|
|
||||||
|
// Настройки Донецкой Народной Республики
|
||||||
public class DNRPrefs {
|
public class DNRPrefs {
|
||||||
public static boolean getStoriesRead() {
|
public static boolean getStoriesRead() {
|
||||||
return Prefs.BooleanFalse("read_s");
|
return Prefs.BooleanFalse("read_s");
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.dnr.helpers;
|
package ru.vtosters.lite.dnr.helpers;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
@@ -15,7 +13,7 @@ import ru.vtosters.lite.utils.Helper;
|
|||||||
|
|
||||||
public class DoNotReadDBHelper extends SQLiteOpenHelper {
|
public class DoNotReadDBHelper extends SQLiteOpenHelper {
|
||||||
public DoNotReadDBHelper() {
|
public DoNotReadDBHelper() {
|
||||||
super(GetContext(), "dnr", null, 1);
|
super(Helper.GetContext(), "dnr", null, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import ru.vtosters.lite.R;
|
||||||
|
|
||||||
public class VideoDownloader {
|
public class VideoDownloader {
|
||||||
public static void downloadVideo(VideoFile videoFile, Context context) {
|
public static void downloadVideo(VideoFile videoFile, Context context) {
|
||||||
final List<String> list = new ArrayList<>();
|
final List<String> list = new ArrayList<>();
|
||||||
@@ -64,7 +66,7 @@ public class VideoDownloader {
|
|||||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
||||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||||
request.setTitle(videoFile.toString());
|
request.setTitle(videoFile.toString());
|
||||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile + ".mp4");
|
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile.s + ".mp4");
|
||||||
((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
||||||
}));
|
}));
|
||||||
builder.show();
|
builder.show();
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.f0x1d;
|
package ru.vtosters.lite.f0x1d;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
@@ -18,8 +16,8 @@ import com.vtosters.lite.R;
|
|||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
|
||||||
import ru.vtosters.lite.badmanners.DeviceInfoCollector;
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
import ru.vtosters.lite.badmanners.DeviceInfoCollector;
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
|
|
||||||
public class Crashreporter {
|
public class Crashreporter {
|
||||||
@@ -37,12 +35,12 @@ public class Crashreporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void start(Thread.UncaughtExceptionHandler uncaughtExceptionHandler, Thread thread, Throwable th, Activity activity) {
|
static void start(Thread.UncaughtExceptionHandler uncaughtExceptionHandler, Thread thread, Throwable th, Activity activity) {
|
||||||
logString = getStackTrace(th) + "\n\n" + new DeviceInfoCollector().collect(GetContext()).toDeviceName() + "\n VTL Version: " + Prefs.VERSIONNAME + ", build: " + Prefs.getBuildNumber();
|
logString = getStackTrace(th) + "\n\n" + new DeviceInfoCollector().collect(Helper.GetContext()).toDeviceName() + "\n VTL Version: " + Prefs.VERSIONNAME + ", build: " + Prefs.getBuildNumber();
|
||||||
if (Build.VERSION.SDK_INT >= 26) {
|
if (Build.VERSION.SDK_INT >= 26) {
|
||||||
var notificationChannel = new NotificationChannel("crashes", "crash", NotificationManager.IMPORTANCE_DEFAULT);
|
var notificationChannel = new NotificationChannel("crashes", "crash", NotificationManager.IMPORTANCE_DEFAULT);
|
||||||
notificationChannel.enableVibration(true);
|
notificationChannel.enableVibration(true);
|
||||||
notificationChannel.enableLights(true);
|
notificationChannel.enableLights(true);
|
||||||
((NotificationManager) GetContext().getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(notificationChannel);
|
((NotificationManager) Helper.GetContext().getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(notificationChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
var foxbinIntent = new Intent("com.f0x1d.dogbin.ACTION_UPLOAD_TO_FOXBIN");
|
var foxbinIntent = new Intent("com.f0x1d.dogbin.ACTION_UPLOAD_TO_FOXBIN");
|
||||||
@@ -54,19 +52,19 @@ public class Crashreporter {
|
|||||||
foxbinIntent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
|
foxbinIntent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
var saveLogIntent = new Intent(GetContext(), LogWriterService.class);
|
var saveLogIntent = new Intent(Helper.GetContext(), LogWriterService.class);
|
||||||
saveLogIntent.putExtra("log", logString);
|
saveLogIntent.putExtra("log", logString);
|
||||||
saveLogIntent.putExtra("notificationId", 1);
|
saveLogIntent.putExtra("notificationId", 1);
|
||||||
var psaveLogIntent = PendingIntent.getService(GetContext(), 0, saveLogIntent, PendingIntent.FLAG_CANCEL_CURRENT);
|
var psaveLogIntent = PendingIntent.getService(Helper.GetContext(), 0, saveLogIntent, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||||
|
|
||||||
var builder = new Notification.Builder(GetContext());
|
var builder = new Notification.Builder(Helper.GetContext());
|
||||||
builder.setSmallIcon(R.drawable.ic_bug_24);
|
builder.setSmallIcon(R.drawable.ic_bug_24);
|
||||||
builder.setContentTitle("VTL Крашнулся!");
|
builder.setContentTitle("VTL Крашнулся!");
|
||||||
builder.setContentText(logString);
|
builder.setContentText(logString);
|
||||||
builder.setStyle(new Notification.BigTextStyle().bigText(logString));
|
builder.setStyle(new Notification.BigTextStyle().bigText(logString));
|
||||||
builder.setAutoCancel(true);
|
builder.setAutoCancel(true);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
|
||||||
builder.addAction(new Notification.Action(0, "Загрузить логи", PendingIntent.getActivity(GetContext(), (int) (Math.random() * 100.0d), foxbinIntent, PendingIntent.FLAG_CANCEL_CURRENT)));
|
builder.addAction(new Notification.Action(0, "Загрузить логи", PendingIntent.getActivity(Helper.GetContext(), (int) (Math.random() * 100.0d), foxbinIntent, PendingIntent.FLAG_CANCEL_CURRENT)));
|
||||||
builder.addAction(new Notification.Action(0, "Сохранить в файл", psaveLogIntent));
|
builder.addAction(new Notification.Action(0, "Сохранить в файл", psaveLogIntent));
|
||||||
} else {
|
} else {
|
||||||
builder.setContentIntent(PendingIntent.getActivity(activity, 0, foxbinIntent, PendingIntent.FLAG_ONE_SHOT));
|
builder.setContentIntent(PendingIntent.getActivity(activity, 0, foxbinIntent, PendingIntent.FLAG_ONE_SHOT));
|
||||||
@@ -77,13 +75,13 @@ public class Crashreporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
((NotificationManager) GetContext().getSystemService(Context.NOTIFICATION_SERVICE)).notify(-2147483548, builder.build());
|
((NotificationManager) Helper.GetContext().getSystemService(Context.NOTIFICATION_SERVICE)).notify(-2147483548, builder.build());
|
||||||
Log.e("VTosters Lite", "crashed: " + th.getLocalizedMessage());
|
Log.e("VTosters Lite", "crashed: " + th.getLocalizedMessage());
|
||||||
uncaughtExceptionHandler.uncaughtException(thread, th);
|
uncaughtExceptionHandler.uncaughtException(thread, th);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isFoxbinInstalled() {
|
private static boolean isFoxbinInstalled() {
|
||||||
var pm = GetContext().getPackageManager();
|
var pm = Helper.GetContext().getPackageManager();
|
||||||
try {
|
try {
|
||||||
pm.getPackageInfo("com.f0x1d.dogbin", 0);
|
pm.getPackageInfo("com.f0x1d.dogbin", 0);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
package ru.vtosters.lite.f0x1d;
|
package ru.vtosters.lite.f0x1d;
|
||||||
|
|
||||||
import static android.widget.Toast.*;
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -41,12 +38,12 @@ public class LogWriterService extends Service {
|
|||||||
writeLog(intent, file);
|
writeLog(intent, file);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
makeText(GetContext(), "Не удалось сохранить лог-файл", LENGTH_SHORT).show();
|
Toast.makeText(Helper.GetContext(), "Не удалось сохранить лог-файл", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
var notificationId = intent.getIntExtra("notificationId", 1);
|
var notificationId = intent.getIntExtra("notificationId", 1);
|
||||||
var manager = (NotificationManager) GetContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
var manager = (NotificationManager) Helper.GetContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
manager.cancel(notificationId);
|
manager.cancel(notificationId);
|
||||||
makeText(GetContext(), "Лог-файл был сохранен", LENGTH_SHORT).show();
|
Toast.makeText(Helper.GetContext(), "Лог-файл был сохранен", Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
stopSelf();
|
stopSelf();
|
||||||
return START_NOT_STICKY;
|
return START_NOT_STICKY;
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import android.widget.Toast;
|
|||||||
import com.vk.dto.common.VerifyInfo;
|
import com.vk.dto.common.VerifyInfo;
|
||||||
import com.vk.navigation.NavigatorKeys;
|
import com.vk.navigation.NavigatorKeys;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import okhttp3.Call;
|
import okhttp3.Call;
|
||||||
import okhttp3.Callback;
|
import okhttp3.Callback;
|
||||||
import okhttp3.MediaType;
|
import okhttp3.MediaType;
|
||||||
@@ -27,17 +27,18 @@ import okhttp3.Response;
|
|||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
|
|
||||||
public class VTVerifications {
|
public class VTVerifications {
|
||||||
public static final HashMap<Integer, Boolean> sServiceAccountsMap = new HashMap<>();
|
|
||||||
private static final String TAG = "VTVerifications";
|
private static final String TAG = "VTVerifications";
|
||||||
private static final String DEVELOPERS_KEY = "VTNRS3";
|
private static final String DEVELOPERS_KEY = "VTNRS3";
|
||||||
private static final String PROMETHEUS_KEY = "VTNRS1";
|
private static final String PROMETHEUS_KEY = "VTNRS1";
|
||||||
private static final String SERVICE_ACCOUNTS_KEY = "VTNRS4";
|
private static final String SERVICE_ACCOUNTS_KEY = "VTNRS4";
|
||||||
private static final String VERIFICATIONS_KEY = "VTNRS0";
|
private static final String VERIFICATIONS_KEY = "VTNRS0";
|
||||||
|
private static SharedPreferences mVerificationsCache;
|
||||||
private static final HashMap<Integer, Boolean> sDevelopersMap = new HashMap<>();
|
private static final HashMap<Integer, Boolean> sDevelopersMap = new HashMap<>();
|
||||||
private static final HashMap<Integer, Boolean> sPrometheusMap = new HashMap<>();
|
private static final HashMap<Integer, Boolean> sPrometheusMap = new HashMap<>();
|
||||||
|
public static final HashMap<Integer, Boolean> sServiceAccountsMap = new HashMap<>();
|
||||||
private static final HashMap<Integer, Boolean> sVerificationsMap = new HashMap<>();
|
private static final HashMap<Integer, Boolean> sVerificationsMap = new HashMap<>();
|
||||||
private static SharedPreferences mVerificationsCache;
|
|
||||||
private static final OkHttpClient client = new OkHttpClient();
|
private static OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
public static void load(Context context) {
|
public static void load(Context context) {
|
||||||
mVerificationsCache = context.getSharedPreferences("vt_another_data", 0);
|
mVerificationsCache = context.getSharedPreferences("vt_another_data", 0);
|
||||||
@@ -138,7 +139,10 @@ public class VTVerifications {
|
|||||||
if (!Prefs.BooleanTrue("VT_Verification")) {
|
if (!Prefs.BooleanTrue("VT_Verification")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return isVerified((jSONObject.optString(NavigatorKeys.j) == null || (!jSONObject.optString(NavigatorKeys.j).equals("group") && !jSONObject.optString(NavigatorKeys.j).equals("page"))) ? jSONObject.optInt("id", 0) : -jSONObject.optInt("id", 0));
|
if (isVerified((jSONObject.optString(NavigatorKeys.j) == null || (!jSONObject.optString(NavigatorKeys.j).equals("group") && !jSONObject.optString(NavigatorKeys.j).equals("page"))) ? jSONObject.optInt("id", 0) : -jSONObject.optInt("id", 0))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasPrometheus(JSONObject jSONObject) {
|
public static boolean hasPrometheus(JSONObject jSONObject) {
|
||||||
@@ -148,7 +152,10 @@ public class VTVerifications {
|
|||||||
if (!Prefs.BooleanTrue("VT_Fire")) {
|
if (!Prefs.BooleanTrue("VT_Fire")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return hasPrometheus((jSONObject.optString(NavigatorKeys.j) == null || (!jSONObject.optString(NavigatorKeys.j).equals("group") && !jSONObject.optString(NavigatorKeys.j).equals("page"))) ? jSONObject.optInt("id", 0) : -jSONObject.optInt("id", 0));
|
if (hasPrometheus((jSONObject.optString(NavigatorKeys.j) == null || (!jSONObject.optString(NavigatorKeys.j).equals("group") && !jSONObject.optString(NavigatorKeys.j).equals("page"))) ? jSONObject.optInt("id", 0) : -jSONObject.optInt("id", 0))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasDeveloper(JSONObject jSONObject) {
|
public static boolean hasDeveloper(JSONObject jSONObject) {
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
package ru.vtosters.lite.foaf;
|
package ru.vtosters.lite.foaf;
|
||||||
|
|
||||||
import static android.widget.Toast.*;
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Proxy.getApiCom;
|
|
||||||
|
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -13,7 +9,6 @@ import android.widget.Toast;
|
|||||||
import androidx.exifinterface.media.ExifInterface;
|
import androidx.exifinterface.media.ExifInterface;
|
||||||
|
|
||||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
import com.vtosters.lite.R;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
@@ -27,6 +22,9 @@ import java.util.regex.Pattern;
|
|||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import ru.f0x1d.net.F0x1dRequest;
|
import ru.f0x1d.net.F0x1dRequest;
|
||||||
|
|
||||||
|
import com.vtosters.lite.R;
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
|
|
||||||
@@ -34,7 +32,7 @@ public class FoafBase {
|
|||||||
private static final Pattern FOAF_REGEX = 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 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_LOGIN = Pattern.compile("<ya:created dc:date=\"(.+?)\"\\/>");
|
||||||
private static final OkHttpClient client = new OkHttpClient();
|
private static OkHttpClient client = new OkHttpClient();
|
||||||
|
|
||||||
public static int GetLastSeenInt(int i) throws ParseException, IOException {
|
public static int GetLastSeenInt(int i) throws ParseException, IOException {
|
||||||
Matcher matcher = FOAF_REGEX_LAST_SEEN.matcher(client.newCall(new Request.Builder().url(getLink(i)).build()).b().body().string());
|
Matcher matcher = FOAF_REGEX_LAST_SEEN.matcher(client.newCall(new Request.Builder().url(getLink(i)).build()).b().body().string());
|
||||||
@@ -53,7 +51,7 @@ public class FoafBase {
|
|||||||
StringBuilder sb;
|
StringBuilder sb;
|
||||||
if (Prefs.proxy()) {
|
if (Prefs.proxy()) {
|
||||||
sb = new StringBuilder();
|
sb = new StringBuilder();
|
||||||
str = "https://" + getApiCom() + "/_/vk.com/foaf.php?id=";
|
str = "https://vk-api-proxy.xtrafrancyz.net/_/vk.com/foaf.php?id=";
|
||||||
} else {
|
} else {
|
||||||
sb = new StringBuilder();
|
sb = new StringBuilder();
|
||||||
str = "https://vk.com/foaf.php?id=";
|
str = "https://vk.com/foaf.php?id=";
|
||||||
@@ -73,7 +71,7 @@ public class FoafBase {
|
|||||||
F0x1dRequest.makeRequest(getLink(i), callback);
|
F0x1dRequest.makeRequest(getLink(i), callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lambdaLoadAndShow(ProgressDialog progressDialog, Context context, int i, String str) {
|
static /* synthetic */ void lambdaLoadAndShow(ProgressDialog progressDialog, Context context, int i, String str) {
|
||||||
try {
|
try {
|
||||||
progressDialog.cancel();
|
progressDialog.cancel();
|
||||||
Matcher matcher = FOAF_REGEX.matcher(str);
|
Matcher matcher = FOAF_REGEX.matcher(str);
|
||||||
@@ -83,10 +81,10 @@ public class FoafBase {
|
|||||||
String normalHumanDate = getNormalHumanDate(matcher.group(1));
|
String normalHumanDate = getNormalHumanDate(matcher.group(1));
|
||||||
getNormalHumanDate(matcher2.group(1));
|
getNormalHumanDate(matcher2.group(1));
|
||||||
AlertDialog.a a2 = new VkAlertDialog.a(context).a(R.string.addinf);
|
AlertDialog.a a2 = new VkAlertDialog.a(context).a(R.string.addinf);
|
||||||
a2.b(getString("foafid") + " " + i + getString("foafregdate") + " " + normalHumanDate + getString("foafdate") + " " + daysPassedFromFoafDate(normalHumanDate)).b(17039370, null).b().show();
|
a2.b(Helper.getString("foafid") + " " + i + Helper.getString("foafregdate") + " " + normalHumanDate + Helper.getString("foafdate") + " " + daysPassedFromFoafDate(normalHumanDate)).b(17039370, (DialogInterface.OnClickListener) null).b().show();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
makeText(context, getString("foaferr"), LENGTH_SHORT).show();
|
Toast.makeText(context, Helper.getString("foaferr"), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,5 +2,6 @@ package ru.vtosters.lite.provider;
|
|||||||
|
|
||||||
import android.support.v4.content.FileProvider;
|
import android.support.v4.content.FileProvider;
|
||||||
|
|
||||||
|
/* compiled from: VKFileProvider.kt */
|
||||||
public final class VKFileProvider extends FileProvider {
|
public final class VKFileProvider extends FileProvider {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,15 +6,16 @@ import android.preference.PreferenceManager;
|
|||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
|
||||||
public class TGPref {
|
public class TGPref {
|
||||||
private static final SharedPreferences Prefs = PreferenceManager.getDefaultSharedPreferences(Helper.GetContext());
|
private static SharedPreferences Prefs = PreferenceManager.getDefaultSharedPreferences(Helper.GetContext());
|
||||||
|
|
||||||
private static final String CNCT_METHOD = "VTGS:CM";
|
private static String
|
||||||
private static final String TG_BOTKEY = "VTGS:BKey";
|
CNCT_METHOD = "VTGS:CM",
|
||||||
private static final String TG_PROXYIP = "VTGS:PIP";
|
TG_BOTKEY = "VTGS:BKey",
|
||||||
private static final String TG_PROXYPORT = "VTGS:PPT";
|
TG_PROXYIP = "VTGS:PIP",
|
||||||
private static final String TG_PROXYPASS = "VTGS:PPS";
|
TG_PROXYPORT = "VTGS:PPT",
|
||||||
private static final String TG_PROXYUSER = "VTGS:PUS";
|
TG_PROXYPASS = "VTGS:PPS",
|
||||||
private static final String TG_PROXYUSEPASS = "VTGS:PUsePassword";
|
TG_PROXYUSER = "VTGS:PUS",
|
||||||
|
TG_PROXYUSEPASS = "VTGS:PUsePassword";
|
||||||
|
|
||||||
public static int getTGConnectMethod() {
|
public static int getTGConnectMethod() {
|
||||||
return Integer.parseInt(Prefs.getString(CNCT_METHOD, "0"));
|
return Integer.parseInt(Prefs.getString(CNCT_METHOD, "0"));
|
||||||
@@ -36,10 +37,6 @@ public class TGPref {
|
|||||||
return Prefs.getString(TG_PROXYIP, null);
|
return Prefs.getString(TG_PROXYIP, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setTGProxyIP(String ip) {
|
|
||||||
Prefs.edit().putString(TG_PROXYIP, ip).apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getTGProxyPort() {
|
public static int getTGProxyPort() {
|
||||||
return Prefs.getInt(TG_PROXYPORT, 0);
|
return Prefs.getInt(TG_PROXYPORT, 0);
|
||||||
}
|
}
|
||||||
@@ -56,6 +53,10 @@ public class TGPref {
|
|||||||
return Prefs.getString(TG_PROXYUSER, "");
|
return Prefs.getString(TG_PROXYUSER, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setTGProxyIP(String ip) {
|
||||||
|
Prefs.edit().putString(TG_PROXYIP, ip).apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static void setTGProxyUserPass(String user, String pass) {
|
public static void setTGProxyUserPass(String user, String pass) {
|
||||||
Prefs.edit().putString(TG_PROXYUSER, user).putString(TG_PROXYPASS, pass)
|
Prefs.edit().putString(TG_PROXYUSER, user).putString(TG_PROXYPASS, pass)
|
||||||
.apply();
|
.apply();
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
package ru.vtosters.lite.tgs;
|
package ru.vtosters.lite.tgs;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.aefyr.tsg.g2.TelegramStickersPack;
|
import com.aefyr.tsg.g2.TelegramStickersPack;
|
||||||
import com.aefyr.tsg.g2.TelegramStickersService;
|
import com.aefyr.tsg.g2.TelegramStickersService;
|
||||||
@@ -25,19 +24,21 @@ import java.util.Stack;
|
|||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
|
||||||
public class TGRoot {
|
public class TGRoot {
|
||||||
|
private final static Stack<Integer> pendingStickers = new Stack<>();
|
||||||
|
|
||||||
public static final int N = 76820000;
|
public static final int N = 76820000;
|
||||||
public static final int X = 976820000;
|
public static final int X = 976820000;
|
||||||
private final static Stack<Integer> pendingStickers = new Stack<>();
|
|
||||||
private static final String TAG = "TGRoot";
|
private static String TAG = "TGRoot";
|
||||||
|
|
||||||
public static String getSummary() {
|
public static String getSummary() {
|
||||||
switch (TGPref.getTGConnectMethod()) {
|
switch (TGPref.getTGConnectMethod()) {
|
||||||
case 0:
|
case 0:
|
||||||
return getString("ctypedirect");
|
return Helper.getString("ctypedirect");
|
||||||
case 2:
|
case 2:
|
||||||
return getString("ctypesocks");
|
return Helper.getString("ctypesocks");
|
||||||
default:
|
default:
|
||||||
return getString("ctypedisabled");
|
return Helper.getString("ctypedisabled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,7 +50,7 @@ public class TGRoot {
|
|||||||
int stickerId = (id - N) % 120;
|
int stickerId = (id - N) % 120;
|
||||||
|
|
||||||
TelegramStickersPack pack = null;
|
TelegramStickersPack pack = null;
|
||||||
for (TelegramStickersPack p : TelegramStickersService.getInstance(GetContext()).getActivePacksListReference()) {
|
for (TelegramStickersPack p : TelegramStickersService.getInstance(Helper.GetContext()).getActivePacksListReference()) {
|
||||||
if (p.index == index) {
|
if (p.index == index) {
|
||||||
pack = p;
|
pack = p;
|
||||||
break;
|
break;
|
||||||
@@ -70,7 +71,7 @@ public class TGRoot {
|
|||||||
|
|
||||||
public static void injectStickers(List<StickerStockItem> list) {
|
public static void injectStickers(List<StickerStockItem> list) {
|
||||||
try {
|
try {
|
||||||
List<TelegramStickersPack> packs = TelegramStickersService.getInstance(GetContext()).getActivePacksListReference();
|
List<TelegramStickersPack> packs = TelegramStickersService.getInstance(Helper.GetContext()).getActivePacksListReference();
|
||||||
for (int i = packs.size() - 1; i >= 0; i--)
|
for (int i = packs.size() - 1; i >= 0; i--)
|
||||||
list.add(0, toStickerPack(packs.get(i)));
|
list.add(0, toStickerPack(packs.get(i)));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -83,7 +84,7 @@ public class TGRoot {
|
|||||||
int index = (stickerId - N) / 120;
|
int index = (stickerId - N) / 120;
|
||||||
|
|
||||||
TelegramStickersPack p = null;
|
TelegramStickersPack p = null;
|
||||||
for (TelegramStickersPack p_ : TelegramStickersService.getInstance(GetContext())
|
for (TelegramStickersPack p_ : TelegramStickersService.getInstance(Helper.GetContext())
|
||||||
.getActivePacksListReference()) {
|
.getActivePacksListReference()) {
|
||||||
if (p_.index == index) {
|
if (p_.index == index) {
|
||||||
p = p_;
|
p = p_;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.ui;
|
package ru.vtosters.lite.ui;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
@@ -29,13 +27,17 @@ import ru.vtosters.lite.utils.Themes;
|
|||||||
|
|
||||||
public class PreferencesUtil {
|
public class PreferencesUtil {
|
||||||
|
|
||||||
|
public interface EditTextPrefChangeListener {
|
||||||
|
boolean onChanged(Preference preference, Object obj);
|
||||||
|
}
|
||||||
|
|
||||||
public static Drawable setTint(Context ctx, Drawable d) {
|
public static Drawable setTint(Context ctx, Drawable d) {
|
||||||
d.setColorFilter(Themes.getAccentColor(), PorterDuff.Mode.SRC_ATOP);
|
d.setColorFilter(Themes.getAccentColor(), PorterDuff.Mode.SRC_ATOP);
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addListPreference(MaterialPreferenceToolbarFragment fragment, String key, String def, CharSequence title, CharSequence[] entries, CharSequence[] entriesValue) {
|
public static void addListPreference(MaterialPreferenceToolbarFragment fragment, String key, String def, CharSequence title, CharSequence[] entries, CharSequence[] entriesValue) {
|
||||||
ListPreference preference = new ListPreference(GetContext());
|
ListPreference preference = new ListPreference(Helper.GetContext());
|
||||||
preference.a(entries);
|
preference.a(entries);
|
||||||
preference.b(entriesValue);
|
preference.b(entriesValue);
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
@@ -46,7 +48,7 @@ public class PreferencesUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment materialPreferenceToolbarFragment, String key, CharSequence title, CharSequence summary, boolean defValue) {
|
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment materialPreferenceToolbarFragment, String key, CharSequence title, CharSequence summary, boolean defValue) {
|
||||||
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(GetContext());
|
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(Helper.GetContext());
|
||||||
materialSwitchPreference.c(title); // setTitle
|
materialSwitchPreference.c(title); // setTitle
|
||||||
materialSwitchPreference.b(summary); // setSummary
|
materialSwitchPreference.b(summary); // setSummary
|
||||||
materialSwitchPreference.d(key); // setKey
|
materialSwitchPreference.d(key); // setKey
|
||||||
@@ -56,7 +58,7 @@ public class PreferencesUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, int icon, boolean defValue, Preference.b listener) {
|
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, int icon, boolean defValue, Preference.b listener) {
|
||||||
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(GetContext());
|
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(Helper.GetContext());
|
||||||
materialSwitchPreference.c(title); // setTitle
|
materialSwitchPreference.c(title); // setTitle
|
||||||
materialSwitchPreference.b(summary); // setSummary
|
materialSwitchPreference.b(summary); // setSummary
|
||||||
materialSwitchPreference.d(key); // setKey
|
materialSwitchPreference.d(key); // setKey
|
||||||
@@ -64,13 +66,13 @@ public class PreferencesUtil {
|
|||||||
materialSwitchPreference.a(listener); // setOnPreferenceClickListener
|
materialSwitchPreference.a(listener); // setOnPreferenceClickListener
|
||||||
|
|
||||||
if (icon != 1)
|
if (icon != 1)
|
||||||
materialSwitchPreference.a(setTint(GetContext(), ContextCompat.getDrawable(GetContext(), icon))); // preference.setIcon
|
materialSwitchPreference.a(setTint(Helper.GetContext(), ContextCompat.getDrawable(Helper.GetContext(), icon))); // preference.setIcon
|
||||||
|
|
||||||
fragment.ay().d(materialSwitchPreference); // fragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(materialSwitchPreference); // fragment.getPreferenceScreen().addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, String icon, boolean defValue, Preference.b listener) {
|
public static void addMaterialSwitchPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, String icon, boolean defValue, Preference.b listener) {
|
||||||
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(GetContext());
|
MaterialSwitchPreference materialSwitchPreference = new MaterialSwitchPreference(Helper.GetContext());
|
||||||
materialSwitchPreference.c(title); // setTitle
|
materialSwitchPreference.c(title); // setTitle
|
||||||
materialSwitchPreference.b(summary); // setSummary
|
materialSwitchPreference.b(summary); // setSummary
|
||||||
materialSwitchPreference.d(key); // setKey
|
materialSwitchPreference.d(key); // setKey
|
||||||
@@ -78,14 +80,14 @@ public class PreferencesUtil {
|
|||||||
fragment.ay().d(materialSwitchPreference); // materialPreferenceToolbarFragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(materialSwitchPreference); // materialPreferenceToolbarFragment.getPreferenceScreen().addPreference(preference)
|
||||||
|
|
||||||
if (icon != null)
|
if (icon != null)
|
||||||
materialSwitchPreference.a(setTint(GetContext(), getDrawable(GetContext(), icon))); // preference.setIcon
|
materialSwitchPreference.a(setTint(Helper.GetContext(), getDrawable(Helper.GetContext(), icon))); // preference.setIcon
|
||||||
materialSwitchPreference.a(listener); // setOnPreferenceClickListener(listener)
|
materialSwitchPreference.a(listener); // setOnPreferenceClickListener(listener)
|
||||||
|
|
||||||
fragment.ay().d(materialSwitchPreference); // fragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(materialSwitchPreference); // fragment.getPreferenceScreen().addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary) {
|
public static void addPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary) {
|
||||||
Preference preference = new Preference(GetContext());
|
Preference preference = new Preference(Helper.GetContext());
|
||||||
preference.b(summary); // setSummary
|
preference.b(summary); // setSummary
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
preference.d(key); // setKey
|
preference.d(key); // setKey
|
||||||
@@ -94,64 +96,64 @@ public class PreferencesUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void addPreference(MaterialPreferenceToolbarFragment fragment, CharSequence title, CharSequence summary, @Nullable String icon, Preference.c listener) {
|
public static void addPreference(MaterialPreferenceToolbarFragment fragment, CharSequence title, CharSequence summary, @Nullable String icon, Preference.c listener) {
|
||||||
Preference preference = new Preference(GetContext());
|
Preference preference = new Preference(Helper.GetContext());
|
||||||
preference.b(summary); // setSummary
|
preference.b(summary); // setSummary
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
|
|
||||||
if (icon != null)
|
if (icon != null)
|
||||||
preference.a(setTint(GetContext(), getDrawable(GetContext(), icon))); // preference.setIcon
|
preference.a(setTint(Helper.GetContext(), getDrawable(Helper.GetContext(), icon))); // preference.setIcon
|
||||||
preference.a(listener); // preference.setOnPreferenceClickListener(listener)
|
preference.a(listener); // preference.setOnPreferenceClickListener(listener)
|
||||||
|
|
||||||
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, @Nullable String icon, Preference.c listener) {
|
public static void addPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, @Nullable String icon, Preference.c listener) {
|
||||||
Preference preference = new Preference(GetContext());
|
Preference preference = new Preference(Helper.GetContext());
|
||||||
preference.b(summary); // setSummary
|
preference.b(summary); // setSummary
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
preference.d(key); // setKey
|
preference.d(key); // setKey
|
||||||
|
|
||||||
if (icon != null)
|
if (icon != null)
|
||||||
preference.a(setTint(GetContext(), getDrawable(GetContext(), icon))); // preference.setIcon
|
preference.a(setTint(Helper.GetContext(), getDrawable(Helper.GetContext(), icon))); // preference.setIcon
|
||||||
preference.a(listener); // preference.setOnPreferenceClickListener(listener)
|
preference.a(listener); // preference.setOnPreferenceClickListener(listener)
|
||||||
|
|
||||||
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPreferenceCategory(MaterialPreferenceToolbarFragment fragment, CharSequence title) {
|
public static void addPreferenceCategory(MaterialPreferenceToolbarFragment fragment, CharSequence title) {
|
||||||
PreferenceCategory preference = new PreferenceCategory(GetContext(), null);
|
PreferenceCategory preference = new PreferenceCategory(Helper.GetContext(), null);
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPreferenceCategory(MaterialPreferenceToolbarFragment fragment, CharSequence title, int collapsedSize) {
|
public static void addPreferenceCategory(MaterialPreferenceToolbarFragment fragment, CharSequence title, int collapsedSize) {
|
||||||
PreferenceCategory preference = new PreferenceCategory(GetContext(), null);
|
PreferenceCategory preference = new PreferenceCategory(Helper.GetContext(), null);
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addEditTextPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, EditTextPrefChangeListener editTextPrefChangeListener) {
|
public static void addEditTextPreference(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, EditTextPrefChangeListener editTextPrefChangeListener) {
|
||||||
Preference preference = new Preference(GetContext());
|
Preference preference = new Preference(Helper.GetContext());
|
||||||
|
|
||||||
preference.c(title); // setTitle
|
preference.c(title); // setTitle
|
||||||
preference.d(key); // setKey
|
preference.d(key); // setKey
|
||||||
preference.a(preference1 -> {
|
preference.a(preference1 -> {
|
||||||
LinearLayout linearLayout = new LinearLayout(GetContext());
|
LinearLayout linearLayout = new LinearLayout(Helper.GetContext());
|
||||||
|
|
||||||
final EditText editText = new EditText(GetContext());
|
final EditText editText = new EditText(Helper.GetContext());
|
||||||
editText.setText(PreferenceManager.getDefaultSharedPreferences(GetContext()).getString(key, ""));
|
editText.setText(PreferenceManager.getDefaultSharedPreferences(Helper.GetContext()).getString(key, ""));
|
||||||
editText.setHint(title);
|
editText.setHint(title);
|
||||||
editText.setHintTextColor(PreferencesUtil.getSTextColor(GetContext()));
|
editText.setHintTextColor(PreferencesUtil.getSTextColor(Helper.GetContext()));
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
editText.setBackgroundTintList(ColorStateList.valueOf(PreferencesUtil.getTextColor(GetContext())));
|
editText.setBackgroundTintList(ColorStateList.valueOf(PreferencesUtil.getTextColor(Helper.GetContext())));
|
||||||
} else {
|
} else {
|
||||||
ViewCompat.setBackgroundTintList(editText, ColorStateList.valueOf(PreferencesUtil.getTextColor(GetContext())));
|
ViewCompat.setBackgroundTintList(editText, ColorStateList.valueOf(PreferencesUtil.getTextColor(Helper.GetContext())));
|
||||||
}
|
}
|
||||||
linearLayout.addView(editText);
|
linearLayout.addView(editText);
|
||||||
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
|
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
|
||||||
margin.setMargins(convertDpToPixel(24f), 0, convertDpToPixel(24f), 0);
|
margin.setMargins(Helper.convertDpToPixel(24f), 0, Helper.convertDpToPixel(24f), 0);
|
||||||
editText.setLayoutParams(margin);
|
editText.setLayoutParams(margin);
|
||||||
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.p());
|
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.p());
|
||||||
@@ -162,7 +164,7 @@ public class PreferencesUtil {
|
|||||||
if (!change)
|
if (!change)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PreferenceManager.getDefaultSharedPreferences(GetContext())
|
PreferenceManager.getDefaultSharedPreferences(Helper.GetContext())
|
||||||
.edit()
|
.edit()
|
||||||
.putString(key, editText.getText().toString())
|
.putString(key, editText.getText().toString())
|
||||||
.apply();
|
.apply();
|
||||||
@@ -190,8 +192,4 @@ public class PreferencesUtil {
|
|||||||
var id = ctx.getResources().getIdentifier(name, "drawable", ctx.getPackageName());
|
var id = ctx.getResources().getIdentifier(name, "drawable", ctx.getPackageName());
|
||||||
return ContextCompat.getDrawable(ctx, id);
|
return ContextCompat.getDrawable(ctx, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface EditTextPrefChangeListener {
|
|
||||||
boolean onChanged(Preference preference, Object obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.ui.dialogs;
|
package ru.vtosters.lite.ui.dialogs;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -18,7 +16,7 @@ import ru.vtosters.lite.utils.Prefs;
|
|||||||
public class DisableBattery {
|
public class DisableBattery {
|
||||||
public static void alert(Activity activity) {
|
public static void alert(Activity activity) {
|
||||||
if (OEMDetector.isOEM() && Build.VERSION.SDK_INT >= 23 && Prefs.BooleanTrue("showDoze")) {
|
if (OEMDetector.isOEM() && Build.VERSION.SDK_INT >= 23 && Prefs.BooleanTrue("showDoze")) {
|
||||||
final Context context = GetContext();
|
final Context context = Helper.GetContext();
|
||||||
if (!((PowerManager) context.getSystemService(Context.POWER_SERVICE)).isIgnoringBatteryOptimizations(context.getPackageName())) {
|
if (!((PowerManager) context.getSystemService(Context.POWER_SERVICE)).isIgnoringBatteryOptimizations(context.getPackageName())) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||||
builder.setTitle("Выключите оптимизацию батареи!");
|
builder.setTitle("Выключите оптимизацию батареи!");
|
||||||
@@ -38,7 +36,7 @@ public class DisableBattery {
|
|||||||
builder.setNeutralButton("Игнорировать", new DialogInterface.OnClickListener() {
|
builder.setNeutralButton("Игнорировать", new DialogInterface.OnClickListener() {
|
||||||
@Override // android.content.DialogInterface.OnClickListener
|
@Override // android.content.DialogInterface.OnClickListener
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
edit().putBoolean("showDoze", false).apply();
|
Helper.edit().putBoolean("showDoze", false).apply();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.show();
|
builder.show();
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.ui.dialogs;
|
package ru.vtosters.lite.ui.dialogs;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -10,13 +8,13 @@ import android.content.Intent;
|
|||||||
|
|
||||||
import com.vk.navigation.Navigator;
|
import com.vk.navigation.Navigator;
|
||||||
|
|
||||||
import ru.vtosters.lite.ui.fragments.InstallGMSFragment;
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
|
import ru.vtosters.lite.ui.fragments.InstallGMSFragment;
|
||||||
|
|
||||||
public class InstallGMS {
|
public class InstallGMS {
|
||||||
public static void alert(final Activity activity) {
|
public static void alert(final Activity activity) {
|
||||||
if (!IsGmsInstalled()) {
|
if (!Helper.IsGmsInstalled()) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||||
builder.setTitle("Внимание!");
|
builder.setTitle("Внимание!");
|
||||||
builder.setMessage(Text());
|
builder.setMessage(Text());
|
||||||
@@ -25,15 +23,15 @@ public class InstallGMS {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
edit().putBoolean("showAlertGms", false).apply();
|
Helper.edit().putBoolean("showAlertGms", false).apply();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setNeutralButton("Установить GMS", new DialogInterface.OnClickListener() {
|
builder.setNeutralButton("Установить GMS", new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
edit().putBoolean("showAlertGms", false).apply();
|
Helper.edit().putBoolean("showAlertGms", false).apply();
|
||||||
Context context = GetContext();
|
Context context = Helper.GetContext();
|
||||||
Intent a2 = new Navigator(InstallGMSFragment.class).a(context);
|
Intent a2 = new Navigator(InstallGMSFragment.class).a(context);
|
||||||
context.startActivity(a2);
|
context.startActivity(a2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.ui.dialogs;
|
package ru.vtosters.lite.ui.dialogs;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -23,17 +21,19 @@ public class Start {
|
|||||||
builder.setMessage(getWelcome());
|
builder.setMessage(getWelcome());
|
||||||
builder.setCancelable(false);
|
builder.setCancelable(false);
|
||||||
builder.setPositiveButton("Продолжить", new DialogInterface.OnClickListener() {
|
builder.setPositiveButton("Продолжить", new DialogInterface.OnClickListener() {
|
||||||
|
/* class ru.vtosters.lite.utils.lite.dialog.Start.AnonymousClass1 */
|
||||||
|
|
||||||
@Override // android.content.DialogInterface.OnClickListener
|
@Override // android.content.DialogInterface.OnClickListener
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
edit().putBoolean("showAlert", false).apply();
|
Helper.edit().putBoolean("showAlert", false).apply();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setNeutralButton("Новости", new DialogInterface.OnClickListener() {
|
builder.setNeutralButton("Новости", new DialogInterface.OnClickListener() {
|
||||||
|
/* class ru.vtosters.lite.utils.lite.dialog.Start.AnonymousClass2 */
|
||||||
|
|
||||||
@Override // android.content.DialogInterface.OnClickListener
|
@Override // android.content.DialogInterface.OnClickListener
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
edit().putBoolean("showAlert", false).apply();
|
Helper.edit().putBoolean("showAlert", false).apply();
|
||||||
activity.startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://t.me/vtosters")));
|
activity.startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://t.me/vtosters")));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,11 +2,13 @@ package ru.vtosters.lite.ui.fragments;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||||
|
|
||||||
|
import com.vtosters.lite.R;
|
||||||
|
|
||||||
public class ActivityFragment extends MaterialPreferenceToolbarFragment {
|
public class ActivityFragment extends MaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_activity);
|
a(R.xml.preferences_activity);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
|||||||
|
|
||||||
public class FeedFragment extends MaterialPreferenceToolbarFragment {
|
public class FeedFragment extends MaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_feed);
|
a(R.xml.preferences_feed);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
|||||||
|
|
||||||
public class InstallGMSFragment extends MaterialPreferenceToolbarFragment {
|
public class InstallGMSFragment extends MaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_gms);
|
a(R.xml.preferences_gms);
|
||||||
|
|||||||
@@ -7,32 +7,34 @@ import com.vk.core.util.ToastUtils;
|
|||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
/* renamed from: ru.vtosters.lite.utils.lite.ui.activities.interface reason: invalid class name */
|
||||||
|
|
||||||
public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
|
public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_interface);
|
a(R.xml.preferences_interface);
|
||||||
prefs();
|
prefs();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prefs() {
|
/* access modifiers changed from: package-private */
|
||||||
a("newfeed").a(new a());
|
/* renamed from: ru.vtosters.lite.utils.lite.ui.activities.interface$a */
|
||||||
}
|
|
||||||
|
|
||||||
public boolean restart(Preference preference, Object obj) {
|
|
||||||
ToastUtils.a(Helper.getString("restartapp"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class a implements Preference.b {
|
public class a implements Preference.b {
|
||||||
a() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.b
|
@Override // android.support.v7.preference.Preference.b
|
||||||
public boolean a(Preference preference, Object obj) {
|
public boolean a(Preference preference, Object obj) {
|
||||||
return InterfaceFragment.this.restart(preference, obj);
|
return InterfaceFragment.this.restart(preference, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void prefs() {
|
||||||
|
a("newfeed").a((Preference.b) new a());
|
||||||
|
}
|
||||||
|
|
||||||
|
public /* synthetic */ boolean restart(Preference preference, Object obj) {
|
||||||
|
ToastUtils.a("Пожалуйста перезапустите приложение");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
|||||||
|
|
||||||
public class MessagesFragment extends MaterialPreferenceToolbarFragment {
|
public class MessagesFragment extends MaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_messages);
|
a(R.xml.preferences_messages);
|
||||||
|
|||||||
@@ -1,15 +1,8 @@
|
|||||||
package ru.vtosters.lite.ui.fragments;
|
package ru.vtosters.lite.ui.fragments;
|
||||||
|
|
||||||
import static android.widget.Toast.*;
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.SettBackup.backupSettings;
|
|
||||||
import static ru.vtosters.lite.utils.SettBackup.deletePrefs;
|
|
||||||
import static ru.vtosters.lite.utils.SettBackup.restoreBackup;
|
|
||||||
|
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -30,58 +23,49 @@ import ru.vtosters.lite.utils.Helper;
|
|||||||
|
|
||||||
public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||||
|
|
||||||
|
/* access modifiers changed from: package-private */
|
||||||
|
static class c implements Preference.c {
|
||||||
|
@Override // android.support.v7.preference.Preference.c
|
||||||
|
public boolean a(Preference preference) {
|
||||||
|
copy(Helper.GetContext(), Helper.GetUserToken());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void copy(Context context, String str) {
|
||||||
|
((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText("MBH-ST", str));
|
||||||
|
Toast.makeText(context, Helper.getString("copybtn"), Toast.LENGTH_SHORT).show();
|
||||||
|
ToastUtils.a(Helper.getString("tokenwarning"));
|
||||||
|
}
|
||||||
|
|
||||||
|
c() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_other);
|
a(R.xml.preferences_other);
|
||||||
prefs();
|
prefs();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prefs() {
|
/* access modifiers changed from: package-private */
|
||||||
a("firebasefix").a(new a());
|
|
||||||
a("applicationstop").a(new b());
|
|
||||||
a("tokencopy").a(new c());
|
|
||||||
a("applicationrestart").a(new d());
|
|
||||||
a("clearcache").a(new e());
|
|
||||||
a("stickfix").a(new f());
|
|
||||||
a("deleteprefs").a(new deleteprefs());
|
|
||||||
|
|
||||||
// a("saveprefs").a((Preference.c) new saveprefs());
|
|
||||||
// a("restoreprefs").a((Preference.c) new restoreprefs());
|
|
||||||
}
|
|
||||||
|
|
||||||
static class c implements Preference.c {
|
|
||||||
c() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void copy(Context context, String str) {
|
|
||||||
((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText("MBH-ST", str));
|
|
||||||
makeText(context, getString("copybtn"), LENGTH_SHORT).show();
|
|
||||||
ToastUtils.a(getString("tokenwarning"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.c
|
|
||||||
public boolean a(Preference preference) {
|
|
||||||
copy(GetContext(), GetUserToken());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class e implements Preference.c {
|
public class e implements Preference.c {
|
||||||
e() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.c
|
@Override // android.support.v7.preference.Preference.c
|
||||||
public boolean a(Preference preference) {
|
public boolean a(Preference preference) {
|
||||||
VKImageLoader.b();
|
VKImageLoader.b();
|
||||||
ImEngineProvider.a().h();
|
ImEngineProvider.a().h();
|
||||||
AudioMessageUtils.j();
|
AudioMessageUtils.j();
|
||||||
FileUtils.l();
|
FileUtils.l();
|
||||||
ToastUtils.a(getString("cachecleaned"));
|
ToastUtils.a(Helper.getString("cachecleaned"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* access modifiers changed from: package-private */
|
||||||
public class b implements Preference.c {
|
public class b implements Preference.c {
|
||||||
b() {
|
b() {
|
||||||
}
|
}
|
||||||
@@ -93,17 +77,19 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* access modifiers changed from: package-private */
|
||||||
public class d implements Preference.c {
|
public class d implements Preference.c {
|
||||||
d() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.c
|
@Override // android.support.v7.preference.Preference.c
|
||||||
public boolean a(Preference preference) {
|
public boolean a(Preference preference) {
|
||||||
restarting();
|
Helper.restarting();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* access modifiers changed from: package-private */
|
||||||
public class a implements Preference.c {
|
public class a implements Preference.c {
|
||||||
a() {
|
a() {
|
||||||
}
|
}
|
||||||
@@ -112,61 +98,22 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
|||||||
public boolean a(Preference preference) {
|
public boolean a(Preference preference) {
|
||||||
VKAccount b = VKAccountManager.b();
|
VKAccount b = VKAccountManager.b();
|
||||||
PushSubscriber.a.a(b.b(), b.c());
|
PushSubscriber.a.a(b.b(), b.c());
|
||||||
ToastUtils.a(getString("fcmtokenrem"));
|
ToastUtils.a(Helper.getString("fcmtokenrem"));
|
||||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
||||||
OtherFragment.this.aB().postDelayed(() -> {
|
OtherFragment.this.aB().postDelayed(() -> {
|
||||||
PushSubscriber.a.a(true);
|
PushSubscriber.a.a(true);
|
||||||
ToastUtils.a(getString("fcmtokenget"));
|
ToastUtils.a(Helper.getString("fcmtokenget"));
|
||||||
ToastUtils.a(getString("fcmtokenfixed"));
|
ToastUtils.a(Helper.getString("fcmtokenfixed"));
|
||||||
}, 1000);
|
}, 1000);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class f implements Preference.c {
|
private void prefs() {
|
||||||
f() {
|
a("firebasefix").a((Preference.c) new a());
|
||||||
}
|
a("applicationstop").a((Preference.c) new b());
|
||||||
|
a("tokencopy").a((Preference.c) new c());
|
||||||
@Override // android.support.v7.preference.Preference.c
|
a("applicationrestart").a((Preference.c) new d());
|
||||||
public boolean a(Preference preference) {
|
a("clearcache").a((Preference.c) new e());
|
||||||
SharedPreferences prefs = GetContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
|
|
||||||
prefs.edit().clear().commit();
|
|
||||||
restarting();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class deleteprefs implements Preference.c {
|
|
||||||
deleteprefs() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.c
|
|
||||||
public boolean a(Preference preference) {
|
|
||||||
deletePrefs();
|
|
||||||
restarting();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class saveprefs implements Preference.c {
|
|
||||||
saveprefs() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.c
|
|
||||||
public boolean a(Preference preference) {
|
|
||||||
backupSettings();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class restoreprefs implements Preference.c {
|
|
||||||
restoreprefs() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // android.support.v7.preference.Preference.c
|
|
||||||
public boolean a(Preference preference) {
|
|
||||||
restoreBackup();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
|||||||
|
|
||||||
public class ProxySettingsFragment extends MaterialPreferenceToolbarFragment {
|
public class ProxySettingsFragment extends MaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_proxy);
|
a(R.xml.preferences_proxy);
|
||||||
|
|||||||
@@ -12,14 +12,26 @@ import ru.vtosters.lite.utils.IconHelper;
|
|||||||
|
|
||||||
public class ThemesFragment extends MaterialPreferenceToolbarFragment {
|
public class ThemesFragment extends MaterialPreferenceToolbarFragment {
|
||||||
|
|
||||||
|
/* access modifiers changed from: package-private */
|
||||||
|
public class a implements Preference.b {
|
||||||
|
public /* synthetic */ a() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // android.support.v7.preference.Preference.b
|
||||||
|
public boolean a(Preference preference, Object obj) {
|
||||||
|
return ThemesFragment.this.apply(preference, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
a(R.xml.preferences_themes);
|
a(R.xml.preferences_themes);
|
||||||
prefs();
|
prefs();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean apply(Preference preference, Object obj) {
|
public /* synthetic */ boolean apply(Preference preference, Object obj) {
|
||||||
if (((Boolean) obj).booleanValue()) {
|
if (((Boolean) obj).booleanValue()) {
|
||||||
IconHelper.switchToVK();
|
IconHelper.switchToVK();
|
||||||
} else {
|
} else {
|
||||||
@@ -30,23 +42,6 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void prefs() {
|
private void prefs() {
|
||||||
a("iconvk").a(new a());
|
a("iconvk").a((Preference.b) new a());
|
||||||
a("darktheme").a(new b());
|
|
||||||
a("lighttheme").a(new b());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class b implements Preference.b {
|
|
||||||
@Override // android.support.v7.preference.Preference.b
|
|
||||||
public boolean a(Preference preference, Object obj) {
|
|
||||||
ToastUtils.a(Helper.getString("restartapp"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class a implements Preference.b {
|
|
||||||
@Override // android.support.v7.preference.Preference.b
|
|
||||||
public boolean a(Preference preference, Object obj) {
|
|
||||||
return ThemesFragment.this.apply(preference, obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.res.ColorStateList;
|
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.view.Gravity;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
import ru.vtosters.lite.utils.Themes;
|
|
||||||
|
|
||||||
public class DockBarAdapter extends RecyclerView.a
|
|
||||||
implements IItemTouchHelper {
|
|
||||||
|
|
||||||
public static final int SELECTED_TAB_TYPE = 1;
|
|
||||||
public static final int DISABLED_TAB_TYPE = 2;
|
|
||||||
public static final int GROUP_TITLE_TYPE = 3;
|
|
||||||
|
|
||||||
|
|
||||||
private final DockBarManager mDockBarManager = DockBarManager.getInstance();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RecyclerView.x b(ViewGroup parent, int viewType) {
|
|
||||||
if (viewType == GROUP_TITLE_TYPE) {
|
|
||||||
return new GroupViewHolder(createGroupTitle());
|
|
||||||
} else {
|
|
||||||
return new DockBarEditViewHolder(createTabItem());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int b(int i) {
|
|
||||||
return getItemType(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
private View createTabItem() {
|
|
||||||
LinearLayout container = new LinearLayout(GetContext());
|
|
||||||
container.setTag("tab_item_container");
|
|
||||||
container.setGravity(Gravity.CENTER_VERTICAL);
|
|
||||||
container.setOrientation(LinearLayout.HORIZONTAL);
|
|
||||||
container.setPadding(
|
|
||||||
convertDpToPixel(12),
|
|
||||||
convertDpToPixel(12),
|
|
||||||
convertDpToPixel(12),
|
|
||||||
convertDpToPixel(12)
|
|
||||||
);
|
|
||||||
container.setLayoutParams(new LinearLayout.LayoutParams(-1, convertDpToPixel(48)));
|
|
||||||
|
|
||||||
ImageView icon = new ImageView(GetContext());
|
|
||||||
icon.setTag("icon");
|
|
||||||
icon.setImageTintList(ColorStateList.valueOf(Themes.getAccentColor()));
|
|
||||||
icon.setLayoutParams(new LinearLayout.LayoutParams(
|
|
||||||
convertDpToPixel(24),
|
|
||||||
convertDpToPixel(24)));
|
|
||||||
container.addView(icon);
|
|
||||||
|
|
||||||
TextView title = new TextView(GetContext());
|
|
||||||
title.setTag("title");
|
|
||||||
title.setTextSize(16.0f);
|
|
||||||
title.setTypeface(Typeface.DEFAULT_BOLD);
|
|
||||||
title.setTextColor(Themes.getTextAttr());
|
|
||||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -2);
|
|
||||||
params.weight = 1;
|
|
||||||
params.leftMargin = convertDpToPixel(16);
|
|
||||||
container.addView(title, params);
|
|
||||||
|
|
||||||
return container;
|
|
||||||
}
|
|
||||||
|
|
||||||
private View createGroupTitle() {
|
|
||||||
LinearLayout layout = new LinearLayout(GetContext());
|
|
||||||
layout.setLayoutParams(new LinearLayout.LayoutParams(-1, -2));
|
|
||||||
|
|
||||||
TextView title = new TextView(GetContext());
|
|
||||||
title.setTag("group_title");
|
|
||||||
title.setTextSize(13.0f);
|
|
||||||
title.setPadding(
|
|
||||||
convertDpToPixel(16),
|
|
||||||
convertDpToPixel(13),
|
|
||||||
convertDpToPixel(16),
|
|
||||||
convertDpToPixel(13)
|
|
||||||
);
|
|
||||||
title.setAllCaps(true);
|
|
||||||
title.setTextColor(Themes.getTextAttr());
|
|
||||||
layout.addView(title, new LinearLayout.LayoutParams(-2, -2));
|
|
||||||
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void a(RecyclerView.x holder, int position) {
|
|
||||||
if (holder instanceof GroupViewHolder) {
|
|
||||||
((GroupViewHolder) holder).bind(mDockBarManager.getGroupTitle(position));
|
|
||||||
} else {
|
|
||||||
int viewType = getItemType(position);
|
|
||||||
if (viewType == SELECTED_TAB_TYPE) {
|
|
||||||
((DockBarEditViewHolder) holder).bind(mDockBarManager.getSelectedTab(position));
|
|
||||||
} else if (viewType == DISABLED_TAB_TYPE) {
|
|
||||||
((DockBarEditViewHolder) holder).bind(mDockBarManager.getDisabledTab(position));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int au_() {
|
|
||||||
return mDockBarManager.getItemCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onItemDismiss(int index) {
|
|
||||||
mDockBarManager.move(this, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onItemMove(int fromPosition, int toPosition) {
|
|
||||||
int fromViewType = getItemType(fromPosition);
|
|
||||||
int toViewType = getItemType(toPosition);
|
|
||||||
|
|
||||||
if (fromPosition < toPosition) {
|
|
||||||
|
|
||||||
if (fromViewType != toViewType) {
|
|
||||||
mDockBarManager.swapAndMigrate(this, fromPosition, toPosition);
|
|
||||||
} else {
|
|
||||||
List<DockBarTab> list = fromViewType == SELECTED_TAB_TYPE ? mDockBarManager.getSelectedTabs() : mDockBarManager.getDisabledTabs();
|
|
||||||
mDockBarManager.swap(this, list, fromViewType, fromPosition, toPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (toPosition != 0) {
|
|
||||||
|
|
||||||
if (fromViewType != toViewType) {
|
|
||||||
mDockBarManager.swapAndMigrate(this, fromPosition, toPosition);
|
|
||||||
} else {
|
|
||||||
List<DockBarTab> list = fromViewType == SELECTED_TAB_TYPE ? mDockBarManager.getSelectedTabs() : mDockBarManager.getDisabledTabs();
|
|
||||||
mDockBarManager.swap(this, list, fromViewType, fromPosition, toPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIndexByViewType(int position, int viewType) {
|
|
||||||
return mDockBarManager.getIndexByViewType(position, viewType);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getItemType(int position) {
|
|
||||||
return mDockBarManager.getItemType(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
static class DockBarEditViewHolder extends RecyclerView.x {
|
|
||||||
|
|
||||||
private final ImageView mIcon;
|
|
||||||
private final TextView mTitle;
|
|
||||||
|
|
||||||
public DockBarEditViewHolder(View itemView) {
|
|
||||||
super(itemView);
|
|
||||||
|
|
||||||
mIcon = itemView.findViewWithTag("icon");
|
|
||||||
mTitle = itemView.findViewWithTag("title");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void bind(DockBarTab tab) {
|
|
||||||
mIcon.setImageResource(tab.iconID);
|
|
||||||
mTitle.setText(tab.titleID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static class GroupViewHolder extends RecyclerView.x {
|
|
||||||
|
|
||||||
private final TextView mGroupTitle;
|
|
||||||
|
|
||||||
public GroupViewHolder(View view) {
|
|
||||||
super(view);
|
|
||||||
|
|
||||||
mGroupTitle = view.findViewWithTag("group_title");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void bind(String groupTitle) {
|
|
||||||
mGroupTitle.setText(groupTitle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
public class DockBarDragItem {
|
|
||||||
|
|
||||||
public boolean active;
|
|
||||||
public int index;
|
|
||||||
public DockBarTab dockBarTab;
|
|
||||||
|
|
||||||
public DockBarDragItem(boolean active, int index, DockBarTab dockBarTab) {
|
|
||||||
this.active = active;
|
|
||||||
this.index = index;
|
|
||||||
this.dockBarTab = dockBarTab;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.support.v7.widget.a.ItemTouchHelper;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
|
|
||||||
public class DockBarFragment extends ToolbarFragment {
|
|
||||||
|
|
||||||
private RecyclerView mRecyclerView;
|
|
||||||
private DockBarAdapter mAdapter;
|
|
||||||
private ItemTouchHelper mItemTouchHelper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View d(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
|
|
||||||
super.b(bundle);
|
|
||||||
|
|
||||||
LinearLayout container = new LinearLayout(n());
|
|
||||||
container.setLayoutParams(new FrameLayout.LayoutParams(-1, -1));
|
|
||||||
container.setOrientation(LinearLayout.VERTICAL);
|
|
||||||
|
|
||||||
LinearLayout buttonsContainer = new LinearLayout(n());
|
|
||||||
buttonsContainer.setPadding(
|
|
||||||
convertDpToPixel(13),
|
|
||||||
convertDpToPixel(10),
|
|
||||||
convertDpToPixel(13),
|
|
||||||
convertDpToPixel(10)
|
|
||||||
);
|
|
||||||
container.addView(buttonsContainer, new LinearLayout.LayoutParams(-1, -2));
|
|
||||||
|
|
||||||
Button save = new Button(n());
|
|
||||||
save.setText("Сохранить");
|
|
||||||
save.setOnClickListener(v -> {
|
|
||||||
DockBarManager.getInstance().save();
|
|
||||||
restarting();
|
|
||||||
});
|
|
||||||
|
|
||||||
LinearLayout.LayoutParams saveParams = new LinearLayout.LayoutParams(0, -2);
|
|
||||||
saveParams.weight = 1.0f;
|
|
||||||
buttonsContainer.addView(save, saveParams);
|
|
||||||
|
|
||||||
View divider = new View(n());
|
|
||||||
buttonsContainer.addView(divider, new LinearLayout.LayoutParams(convertDpToPixel(10), 0));
|
|
||||||
|
|
||||||
Button reset = new Button(n());
|
|
||||||
reset.setText("Сбросить");
|
|
||||||
reset.setOnClickListener(v -> {
|
|
||||||
DockBarManager.getInstance().delete();
|
|
||||||
restarting();
|
|
||||||
});
|
|
||||||
|
|
||||||
LinearLayout.LayoutParams resetParams = new LinearLayout.LayoutParams(0, -2);
|
|
||||||
resetParams.weight = 1.0f;
|
|
||||||
buttonsContainer.addView(reset, resetParams);
|
|
||||||
|
|
||||||
mRecyclerView = new RecyclerView(n());
|
|
||||||
mRecyclerView.setHasFixedSize(true);
|
|
||||||
mRecyclerView.setLayoutManager(new LinearLayoutManager(n()));
|
|
||||||
mAdapter = new DockBarAdapter();
|
|
||||||
mRecyclerView.setAdapter(mAdapter);
|
|
||||||
container.addView(mRecyclerView, new LinearLayout.LayoutParams(-1, -1));
|
|
||||||
|
|
||||||
mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback(mAdapter));
|
|
||||||
mItemTouchHelper.a(mRecyclerView);
|
|
||||||
|
|
||||||
return container;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void a(View arg0, Bundle arg1) {
|
|
||||||
o_(true);
|
|
||||||
|
|
||||||
super.a(arg0, arg1);
|
|
||||||
|
|
||||||
a("Редактор докбара");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.res.ColorStateList;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
|
|
||||||
import com.vk.apps.AppsFragment;
|
|
||||||
import com.vk.core.d.RecoloredDrawable;
|
|
||||||
import com.vk.core.fragments.FragmentImpl;
|
|
||||||
import com.vtosters.lite.ui.bottomnavigation.BottomNavigationMenuView;
|
|
||||||
import com.vtosters.lite.ui.bottomnavigation.BottomNavigationView;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
|
|
||||||
public class DockBarInjector {
|
|
||||||
private static final DockBarManager sManager = DockBarManager.getInstance();
|
|
||||||
|
|
||||||
public static Map<Class<? extends FragmentImpl>, Integer> injectMap() {
|
|
||||||
LinkedHashMap<Class<? extends FragmentImpl>, Integer> map = new LinkedHashMap<>();
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
map.put(tab.fragmentClass, tab.id);
|
|
||||||
}
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void inject(BottomNavigationView navigationView) {
|
|
||||||
Menu menu = navigationView.getMenu();
|
|
||||||
menu.clear();
|
|
||||||
try {
|
|
||||||
Field field = BottomNavigationMenuView.class.getDeclaredField("h");
|
|
||||||
field.setAccessible(true);
|
|
||||||
|
|
||||||
Object synchronizedPool = field.get(null);
|
|
||||||
|
|
||||||
Class<?> synchronisedPoolCls = Class.forName("android.support.v4.f.Pools$a");
|
|
||||||
|
|
||||||
Method acquire = synchronisedPoolCls.getDeclaredMethod("a");
|
|
||||||
|
|
||||||
if (synchronizedPool != null) {
|
|
||||||
do {
|
|
||||||
} while (acquire.invoke(synchronizedPool) != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (NoSuchFieldException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
MenuItem add = menu.add(0, tab.id, 0, tab.titleID);
|
|
||||||
Drawable drawable = GetContext().getResources().getDrawable(tab.iconID);
|
|
||||||
ColorStateList colorStateList = GetContext().getResources().getColorStateList(com.vtosters.lite.R.color.bottom_navigation_item);
|
|
||||||
// if (isAndroidMonet()) {
|
|
||||||
// colorStateList = ColorStateList.valueOf(Themes.getAccentColor());
|
|
||||||
// }
|
|
||||||
add.setIcon(new RecoloredDrawable(drawable, colorStateList));
|
|
||||||
add.setShowAsAction(1);
|
|
||||||
add.setCheckable(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int injectId(String tag) {
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
if (tag.equals(tab.tag))
|
|
||||||
return tab.id;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void injectMenuFragment(Menu menu) {
|
|
||||||
List<MenuItem> menuItems = new ArrayList<>();
|
|
||||||
for (int i = 0; i < menu.size(); i++) {
|
|
||||||
menuItems.add(menu.getItem(i));
|
|
||||||
}
|
|
||||||
menu.clear();
|
|
||||||
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
if (tab.id != com.vtosters.lite.R.id.tab_menu) {
|
|
||||||
int itemId = tab.id;
|
|
||||||
if (tab.id == com.vtosters.lite.R.id.tab_news) {
|
|
||||||
itemId = com.vtosters.lite.R.id.menu_newsfeed;
|
|
||||||
} else if (tab.id == com.vtosters.lite.R.id.tab_discover) {
|
|
||||||
itemId = com.vtosters.lite.R.id.menu_search;
|
|
||||||
} else if (tab.id == com.vtosters.lite.R.id.tab_feedback) {
|
|
||||||
itemId = com.vtosters.lite.R.id.menu_feedback;
|
|
||||||
} else if (tab.id == com.vtosters.lite.R.id.tab_messages) {
|
|
||||||
itemId = com.vtosters.lite.R.id.menu_messages;
|
|
||||||
}
|
|
||||||
|
|
||||||
MenuItem add = menu.add(0, itemId, 0, tab.titleID);
|
|
||||||
add.setIcon(tab.iconID);
|
|
||||||
add.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (MenuItem menuItem : menuItems) {
|
|
||||||
MenuItem item = menu.add(menuItem.getGroupId(), menuItem.getItemId(), menuItem.getOrder(), menuItem.getTitle());
|
|
||||||
item.setIcon(menuItem.getIcon());
|
|
||||||
}
|
|
||||||
menuItems.clear();
|
|
||||||
|
|
||||||
for (int i = 0; i < menu.size(); i++) {
|
|
||||||
MenuItem menuItem = menu.getItem(i);
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
int itemId = menuItem.getItemId();
|
|
||||||
if (itemId == com.vtosters.lite.R.id.menu_newsfeed) {
|
|
||||||
itemId = com.vtosters.lite.R.id.tab_news;
|
|
||||||
} else if (itemId == com.vtosters.lite.R.id.menu_search) {
|
|
||||||
itemId = com.vtosters.lite.R.id.tab_discover;
|
|
||||||
} else if (itemId == com.vtosters.lite.R.id.menu_feedback) {
|
|
||||||
itemId = com.vtosters.lite.R.id.tab_feedback;
|
|
||||||
} else if (itemId == com.vtosters.lite.R.id.menu_messages) {
|
|
||||||
itemId = com.vtosters.lite.R.id.tab_messages;
|
|
||||||
}
|
|
||||||
if (itemId == tab.id && tab.id != com.vtosters.lite.R.id.menu_vk_pay) {
|
|
||||||
menuItems.add(menuItem);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (MenuItem menuItem : menuItems) {
|
|
||||||
menu.removeItem(menuItem.getItemId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static JSONArray injectMenuJSON(JSONArray arr) {
|
|
||||||
List<String> arrayList = new ArrayList(Arrays.asList(
|
|
||||||
"news",
|
|
||||||
"messages",
|
|
||||||
"feedback",
|
|
||||||
"discover"
|
|
||||||
));
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
if (tab.id == com.vtosters.lite.R.id.tab_discover) {
|
|
||||||
arrayList.remove("discover");
|
|
||||||
} else if (tab.id == com.vtosters.lite.R.id.tab_feedback) {
|
|
||||||
arrayList.remove("feedback");
|
|
||||||
} else if (tab.id == com.vtosters.lite.R.id.tab_messages) {
|
|
||||||
arrayList.remove("messages");
|
|
||||||
} else if (tab.id == com.vtosters.lite.R.id.tab_news) {
|
|
||||||
arrayList.remove("news");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
JSONArray jSONArray = new JSONArray();
|
|
||||||
for (int i = 0; i < arrayList.size(); i++) {
|
|
||||||
jSONArray.put(new JSONObject().put("name", arrayList.get(i)));
|
|
||||||
}
|
|
||||||
for (int i2 = 0; i2 < arr.length(); i2++) {
|
|
||||||
jSONArray.put(arr.getJSONObject(i2));
|
|
||||||
}
|
|
||||||
return jSONArray;
|
|
||||||
} catch (JSONException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getItemCount() {
|
|
||||||
return sManager.getSelectedTabs().size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDockOpenAllowed(FragmentImpl fragment) {
|
|
||||||
return isDockOpenAllowed(fragment.getClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDockOpenAllowed(Class<?> cls) {
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs())
|
|
||||||
if (tab.fragmentClass == cls)
|
|
||||||
return true;
|
|
||||||
for (DockBarTab tab : sManager.getDisabledTabs())
|
|
||||||
if (tab.fragmentClass == cls)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> interceptClick(int id) {
|
|
||||||
for (DockBarTab tab : sManager.getSelectedTabs()) {
|
|
||||||
if (id == tab.id)
|
|
||||||
return tab.fragmentClass;
|
|
||||||
}
|
|
||||||
for (DockBarTab tab : sManager.getDisabledTabs()) {
|
|
||||||
if (id == tab.id)
|
|
||||||
return tab.fragmentClass;
|
|
||||||
}
|
|
||||||
return AppsFragment.class;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,313 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
import com.vk.apps.AppsFragment;
|
|
||||||
import com.vk.discover.DiscoverFeedFragment;
|
|
||||||
import com.vk.discover.DiscoverFragment;
|
|
||||||
import com.vk.fave.fragments.FaveTabFragment;
|
|
||||||
import com.vk.feedlikes.fragments.FeedLikesFragment;
|
|
||||||
import com.vk.menu.MenuFragment;
|
|
||||||
import com.vk.music.fragment.MusicFragment;
|
|
||||||
import com.vk.newsfeed.Feed2049;
|
|
||||||
import com.vk.newsfeed.NewsfeedFragment;
|
|
||||||
import com.vk.notifications.NotificationsContainerFragment;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import com.vtosters.lite.fragments.GamesFragment;
|
|
||||||
import com.vtosters.lite.fragments.PhotosFragment;
|
|
||||||
import com.vtosters.lite.fragments.ProfileFragment;
|
|
||||||
import com.vtosters.lite.fragments.SettingsListFragment;
|
|
||||||
import com.vtosters.lite.fragments.d.DocumentsViewFragment;
|
|
||||||
import com.vtosters.lite.fragments.f.FriendsFragment;
|
|
||||||
import com.vtosters.lite.fragments.g.BirthdaysFragment;
|
|
||||||
import com.vtosters.lite.fragments.h.GroupsFragment;
|
|
||||||
import com.vtosters.lite.fragments.lives.LivesPostListFragment;
|
|
||||||
import com.vtosters.lite.fragments.m.VideosFragment;
|
|
||||||
import com.vtosters.lite.fragments.messages.dialogs.DialogsFragment;
|
|
||||||
import com.vtosters.lite.fragments.money.MoneyTransfersFragment;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
|
||||||
|
|
||||||
public class DockBarManager {
|
|
||||||
public static final int MIN_SELECTED_TABS_LIMIT = 3;
|
|
||||||
public static final int MAX_SELECTED_TABS_LIMIT = 9;
|
|
||||||
|
|
||||||
private static DockBarManager sInstance = new DockBarManager();
|
|
||||||
private final List<DockBarTab> mSelectedTabs = new ArrayList<>();
|
|
||||||
private final List<DockBarTab> mDisabledTabs = new ArrayList<>();
|
|
||||||
private final List<String> mGroups = Arrays.asList(
|
|
||||||
"Выбранные элементы докбара",
|
|
||||||
"Невыбранные элементы"
|
|
||||||
);
|
|
||||||
public DockBarManager() {
|
|
||||||
load();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DockBarManager getInstance() {
|
|
||||||
if (sInstance == null)
|
|
||||||
sInstance = new DockBarManager();
|
|
||||||
return sInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String readFully(InputStream is) throws IOException {
|
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
||||||
byte[] buffer = new byte[2048];
|
|
||||||
int len;
|
|
||||||
while ((len = is.read(buffer)) > 0) {
|
|
||||||
bos.write(buffer, 0, len);
|
|
||||||
}
|
|
||||||
return bos.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void load() {
|
|
||||||
File dockbar = new File(Helper.GetContext().getFilesDir(), "dockbar.json");
|
|
||||||
|
|
||||||
if (!dockbar.exists()) {
|
|
||||||
mSelectedTabs.add(new DockBarTab("tab_news", Prefs.olddock() ? R.drawable.ic_newsfeed_28 : R.drawable.ic_menu_newsfeed_outline_28, R.string.newsfeed, R.id.tab_news, Prefs.isUseAlternativeFragments() ? Feed2049.b.c() : NewsfeedFragment.class));
|
|
||||||
mSelectedTabs.add(new DockBarTab("tab_discover", Prefs.olddock() ? R.drawable.ic_search_28 : R.drawable.ic_menu_search_outline_28, R.string.search, R.id.tab_discover, Prefs.isUseAlternativeFragments() ? DiscoverFragment.class : DiscoverFeedFragment.class));
|
|
||||||
mSelectedTabs.add(new DockBarTab("tab_messages", Prefs.olddock() ? R.drawable.ic_menu_messages_28 : R.drawable.ic_message_28_outline, R.string.messages, R.id.tab_messages, DialogsFragment.class));
|
|
||||||
mSelectedTabs.add(new DockBarTab("tab_feedback", Prefs.olddock() ? R.drawable.ic_menu_notifications_28 : R.drawable.ic_menu_notification_outline_28, R.string.feedback, R.id.tab_feedback, NotificationsContainerFragment.class));
|
|
||||||
mSelectedTabs.add(new DockBarTab("tab_menu", Prefs.olddock() ? R.drawable.ic_menu_more_28 : R.drawable.ic_menu_more_outline_28, R.string.menu, R.id.tab_menu, MenuFragment.class));
|
|
||||||
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_friends", R.drawable.ic_user_24, R.string.friends, R.id.menu_friends, FriendsFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_groups", R.drawable.ic_users_24, R.string.groups, R.id.menu_groups, GroupsFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_photos", R.drawable.ic_camera_24, R.string.photos, R.id.menu_photos, PhotosFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_audios", R.drawable.ic_music_24, R.string.music, R.id.menu_audios, MusicFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_videos", R.drawable.ic_video_24, R.string.videos, R.id.menu_videos, VideosFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_lives", R.drawable.ic_live_filter_24dp, R.string.sett_live, R.id.menu_lives, LivesPostListFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_games", R.drawable.ic_games_24, R.string.games, R.id.menu_games, GamesFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_liked", R.drawable.ic_menu_like_24, R.string.sett_likes, R.id.menu_feed_likes, FeedLikesFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_fave", R.drawable.ic_favorite_24, R.string.exo_track_selection_title_video_res_0x7f11031e, R.id.menu_fave, FaveTabFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_documents", R.drawable.ic_document_24, R.string.docs, R.id.menu_documents, DocumentsViewFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_payments", R.drawable.ic_money_transfer_24, R.string.money_transfer_money_transfers, R.id.menu_payments, MoneyTransfersFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_vk_apps", R.drawable.ic_services_24, R.string.menu_apps, R.id.menu_vk_apps, AppsFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_profile", R.drawable.libverify_ic_account_circle_white, R.string.profile, R.id.profile, ProfileFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_settings", R.drawable.ic_settings_24, R.string.menu_settings, R.id.menu_settings, SettingsListFragment.class));
|
|
||||||
mDisabledTabs.add(new DockBarTab("tab_brtd", R.drawable.ic_menu_birthdays, R.string.birthdays_title, R.id.menu_birthdays, BirthdaysFragment.class));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
JSONObject json = new JSONObject(readFully(new FileInputStream(dockbar)));
|
|
||||||
|
|
||||||
JSONArray selected = json.getJSONArray("selected");
|
|
||||||
for (int i = 0; i < selected.length(); i++) {
|
|
||||||
JSONObject item = selected.getJSONObject(i);
|
|
||||||
DockBarTab tab = new DockBarTab(
|
|
||||||
item.getString("tag"),
|
|
||||||
item.getInt("iconID"),
|
|
||||||
item.getInt("titleID"),
|
|
||||||
item.getInt("id"),
|
|
||||||
Class.forName(item.getString("fragmentClass"))
|
|
||||||
);
|
|
||||||
if (Prefs.isUseAlternativeFragments()) {
|
|
||||||
if (tab.fragmentClass == NewsfeedFragment.class) {
|
|
||||||
tab.fragmentClass = Feed2049.b.c();
|
|
||||||
} else if (tab.fragmentClass == DiscoverFeedFragment.class) {
|
|
||||||
tab.fragmentClass = DiscoverFragment.class;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (tab.fragmentClass == Feed2049.b.c()) {
|
|
||||||
tab.fragmentClass = NewsfeedFragment.class;
|
|
||||||
} else if (tab.fragmentClass == DiscoverFragment.class) {
|
|
||||||
tab.fragmentClass = DiscoverFeedFragment.class;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mSelectedTabs.add(tab);
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONArray disabled = json.getJSONArray("disabled");
|
|
||||||
for (int i = 0; i < disabled.length(); i++) {
|
|
||||||
JSONObject item = disabled.getJSONObject(i);
|
|
||||||
DockBarTab tab = new DockBarTab(
|
|
||||||
item.getString("tag"),
|
|
||||||
item.getInt("iconID"),
|
|
||||||
item.getInt("titleID"),
|
|
||||||
item.getInt("id"),
|
|
||||||
Class.forName(item.getString("fragmentClass"))
|
|
||||||
);
|
|
||||||
if (Prefs.isUseAlternativeFragments()) {
|
|
||||||
if (tab.fragmentClass == NewsfeedFragment.class) {
|
|
||||||
tab.fragmentClass = Feed2049.b.c();
|
|
||||||
} else if (tab.fragmentClass == DiscoverFeedFragment.class) {
|
|
||||||
tab.fragmentClass = DiscoverFragment.class;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (tab.fragmentClass == Feed2049.b.c()) {
|
|
||||||
tab.fragmentClass = NewsfeedFragment.class;
|
|
||||||
} else if (tab.fragmentClass == DiscoverFragment.class) {
|
|
||||||
tab.fragmentClass = DiscoverFeedFragment.class;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mDisabledTabs.add(tab);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (JSONException | IOException | ClassNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void delete() {
|
|
||||||
File dockbar = new File(Helper.GetContext().getFilesDir(), "dockbar.json");
|
|
||||||
if (dockbar.exists()) dockbar.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
|
||||||
try {
|
|
||||||
File dockbar = new File(Helper.GetContext().getFilesDir(), "dockbar.json");
|
|
||||||
|
|
||||||
JSONArray selected = new JSONArray();
|
|
||||||
for (DockBarTab tab : mSelectedTabs) {
|
|
||||||
|
|
||||||
JSONObject item = new JSONObject()
|
|
||||||
.put("tag", tab.tag)
|
|
||||||
.put("iconID", tab.iconID)
|
|
||||||
.put("titleID", tab.titleID)
|
|
||||||
.put("id", tab.id)
|
|
||||||
.put("fragmentClass", tab.fragmentClass.getName());
|
|
||||||
selected.put(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONArray disabled = new JSONArray();
|
|
||||||
for (DockBarTab tab : mDisabledTabs) {
|
|
||||||
JSONObject item = new JSONObject()
|
|
||||||
.put("tag", tab.tag)
|
|
||||||
.put("iconID", tab.iconID)
|
|
||||||
.put("titleID", tab.titleID)
|
|
||||||
.put("id", tab.id)
|
|
||||||
.put("fragmentClass", tab.fragmentClass.getName());
|
|
||||||
disabled.put(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONObject json = new JSONObject();
|
|
||||||
json.put("selected", selected).put("disabled", disabled);
|
|
||||||
|
|
||||||
FileOutputStream fos = new FileOutputStream(dockbar);
|
|
||||||
fos.write(json.toString().getBytes(StandardCharsets.UTF_8));
|
|
||||||
} catch (JSONException | IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void swap(DockBarAdapter adapter, List<DockBarTab> list, int itemType, int fromPosition, int toPosition) {
|
|
||||||
int curr = adapter.getIndexByViewType(fromPosition, itemType);
|
|
||||||
int target = adapter.getIndexByViewType(toPosition, itemType);
|
|
||||||
if (fromPosition < toPosition) {
|
|
||||||
for (int i = curr; i < target; i++) {
|
|
||||||
Collections.swap(list, i, i + 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = curr; i > target; i--) {
|
|
||||||
Collections.swap(list, i, i - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
adapter.b(fromPosition, toPosition);// notifyItemMoved
|
|
||||||
}
|
|
||||||
|
|
||||||
public void swapAndMigrate(DockBarAdapter adapter, int fromPosition, int toPosition) {
|
|
||||||
int curr = adapter.getIndexByViewType(fromPosition, adapter.getItemType(fromPosition));
|
|
||||||
int target = adapter.getIndexByViewType(toPosition, adapter.getItemType(toPosition));
|
|
||||||
if (fromPosition < toPosition) {
|
|
||||||
|
|
||||||
if (mSelectedTabs.size() <= MIN_SELECTED_TABS_LIMIT || mSelectedTabs.get(curr).tag.equals("tab_menu"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
DockBarTab tab = mSelectedTabs.get(curr);
|
|
||||||
mSelectedTabs.remove(tab);
|
|
||||||
mDisabledTabs.add(tab);
|
|
||||||
|
|
||||||
for (int i = mDisabledTabs.size() - 1; i > target; i--) {
|
|
||||||
Collections.swap(mDisabledTabs, i, i - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < target; i++) {
|
|
||||||
Collections.swap(mDisabledTabs, i, i + 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (mSelectedTabs.size() >= MAX_SELECTED_TABS_LIMIT) return;
|
|
||||||
|
|
||||||
DockBarTab tab = mDisabledTabs.get(curr);
|
|
||||||
mDisabledTabs.remove(tab);
|
|
||||||
mSelectedTabs.add(tab);
|
|
||||||
}
|
|
||||||
adapter.b(fromPosition, toPosition);// notifyItemMoved
|
|
||||||
}
|
|
||||||
|
|
||||||
public void move(DockBarAdapter adapter, int index) {
|
|
||||||
if (getItemType(index) == 1) {
|
|
||||||
DockBarTab item = mSelectedTabs.get(getIndexByViewType(index, 1));
|
|
||||||
|
|
||||||
mSelectedTabs.remove(item);
|
|
||||||
|
|
||||||
mDisabledTabs.add(item);
|
|
||||||
|
|
||||||
for (int i = mDisabledTabs.size() - 1; i > 0; i--) {
|
|
||||||
Collections.swap(mDisabledTabs, i, i - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
adapter.e_(index); // notifyItemRemoved
|
|
||||||
adapter.d_(getItemCount() - mDisabledTabs.size()); // notifyItemInserted
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getItemCount() {
|
|
||||||
return mSelectedTabs.size() + mDisabledTabs.size() + mGroups.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIndexByViewType(int position, int viewType) {
|
|
||||||
if (viewType == DockBarAdapter.SELECTED_TAB_TYPE) {
|
|
||||||
return position - 1;
|
|
||||||
} else if (viewType == DockBarAdapter.DISABLED_TAB_TYPE) {
|
|
||||||
return position - mSelectedTabs.size() - mGroups.size();
|
|
||||||
} else {
|
|
||||||
return position != 0 ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getItemType(int position) {
|
|
||||||
if (position == 0 || position == mSelectedTabs.size() + 1) {
|
|
||||||
return DockBarAdapter.GROUP_TITLE_TYPE;
|
|
||||||
} else if (position - 1 < mSelectedTabs.size()) {
|
|
||||||
return DockBarAdapter.SELECTED_TAB_TYPE;
|
|
||||||
} else if (position - 1 >= mSelectedTabs.size()) {
|
|
||||||
return DockBarAdapter.DISABLED_TAB_TYPE;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DockBarTab getSelectedTab(int pos) {
|
|
||||||
return mSelectedTabs.get(getIndexByViewType(pos, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
public DockBarTab getDisabledTab(int pos) {
|
|
||||||
return mDisabledTabs.get(getIndexByViewType(pos, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGroupTitle(int pos) {
|
|
||||||
return mGroups.get(getIndexByViewType(pos, -1));
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<DockBarTab> getSelectedTabs() {
|
|
||||||
return mSelectedTabs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<DockBarTab> getDisabledTabs() {
|
|
||||||
return mDisabledTabs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
import com.vk.core.fragments.FragmentImpl;
|
|
||||||
|
|
||||||
public class DockBarTab {
|
|
||||||
|
|
||||||
public String tag;
|
|
||||||
public int iconID;
|
|
||||||
public int titleID;
|
|
||||||
public int id;
|
|
||||||
public Class<? extends FragmentImpl> fragmentClass;
|
|
||||||
|
|
||||||
public DockBarTab(String tag, int iconID, int titleID, int resID, Class<?> fragmentClass) {
|
|
||||||
this.tag = tag;
|
|
||||||
this.iconID = iconID;
|
|
||||||
this.titleID = titleID;
|
|
||||||
this.id = resID;
|
|
||||||
this.fragmentClass = (Class<? extends FragmentImpl>) fragmentClass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
public interface IItemTouchHelper {
|
|
||||||
|
|
||||||
void onItemDismiss(int index);
|
|
||||||
|
|
||||||
boolean onItemMove(int fromPosition, int toPosition);
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
|
||||||
|
|
||||||
import static androidx.recyclerview.widget.ItemTouchHelper.Callback.makeMovementFlags;
|
|
||||||
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.support.v7.widget.a.ItemTouchHelper;
|
|
||||||
|
|
||||||
public class ItemTouchHelperCallback extends ItemTouchHelper.a {
|
|
||||||
|
|
||||||
private final DockBarAdapter mAdapter;
|
|
||||||
|
|
||||||
public ItemTouchHelperCallback(DockBarAdapter mAdapter) {
|
|
||||||
this.mAdapter = mAdapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // isLongPressDragEnabled
|
|
||||||
public boolean a() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override // isItemViewSwipeEnabled
|
|
||||||
public boolean b() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int a(RecyclerView recyclerView, RecyclerView.x viewHolder) {
|
|
||||||
int pos = mAdapter.getItemType(viewHolder.d());
|
|
||||||
int dragFlags = pos != DockBarAdapter.GROUP_TITLE_TYPE ? androidx.recyclerview.widget.ItemTouchHelper.UP | androidx.recyclerview.widget.ItemTouchHelper.DOWN : 0;
|
|
||||||
int swipeFlags = pos == 1 ? androidx.recyclerview.widget.ItemTouchHelper.START | androidx.recyclerview.widget.ItemTouchHelper.END : 0;
|
|
||||||
return makeMovementFlags(dragFlags, swipeFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void a(RecyclerView.x viewHolder, int direction) {
|
|
||||||
mAdapter.onItemDismiss(viewHolder.d());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean b(RecyclerView recyclerView, RecyclerView.x viewHolder, RecyclerView.x target) {
|
|
||||||
if (mAdapter.getItemType(viewHolder.d()) == DockBarAdapter.GROUP_TITLE_TYPE)
|
|
||||||
return false;
|
|
||||||
return mAdapter.onItemMove(viewHolder.d(), target.d());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
|
||||||
|
|
||||||
class MultiAccountItem {
|
|
||||||
public String nickname;
|
|
||||||
public String imageUrl;
|
|
||||||
public int index;
|
|
||||||
|
|
||||||
public MultiAccountItem(String name, String imageUrl, int index) {
|
|
||||||
this.nickname = name;
|
|
||||||
this.imageUrl = imageUrl;
|
|
||||||
this.index = index;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-171
@@ -1,171 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Themes.*;
|
|
||||||
|
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ImageButton;
|
|
||||||
import android.widget.RelativeLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import com.vk.audio.AudioMessageUtils;
|
|
||||||
import com.vk.auth.api.VKAccount;
|
|
||||||
import com.vk.core.f.FileUtils;
|
|
||||||
import com.vk.core.util.AppContextHolder;
|
|
||||||
import com.vk.imageloader.VKImageLoader;
|
|
||||||
import com.vk.imageloader.view.VKCircleImageView;
|
|
||||||
import com.vk.pushes.PushSubscriber;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import com.vtosters.lite.auth.VKAccountManager;
|
|
||||||
import com.vtosters.lite.im.ImEngineProvider;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
import ru.vtosters.lite.utils.Themes;
|
|
||||||
|
|
||||||
public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.MultiAccountViewHolder> {
|
|
||||||
|
|
||||||
private final List<MultiAccountItem> mAccounts = MultiAccountManager.buildList();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultiAccountViewHolder b(ViewGroup parent, int viewType) {
|
|
||||||
RelativeLayout layout = new RelativeLayout(parent.getContext());
|
|
||||||
layout.setPadding(
|
|
||||||
convertDpToPixel(12),
|
|
||||||
convertDpToPixel(6),
|
|
||||||
convertDpToPixel(6),
|
|
||||||
convertDpToPixel(6)
|
|
||||||
);
|
|
||||||
|
|
||||||
VKCircleImageView avatar = new VKCircleImageView(parent.getContext());
|
|
||||||
avatar.setId(1);
|
|
||||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
|
|
||||||
convertDpToPixel(48),
|
|
||||||
convertDpToPixel(48)
|
|
||||||
);
|
|
||||||
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
|
|
||||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
|
||||||
layout.addView(avatar, params);
|
|
||||||
|
|
||||||
TextView nickname = new TextView(parent.getContext());
|
|
||||||
nickname.setId(2);
|
|
||||||
nickname.setPaddingRelative(
|
|
||||||
convertDpToPixel(12),
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
nickname.setEllipsize(TextUtils.TruncateAt.END);
|
|
||||||
nickname.setSingleLine(true);
|
|
||||||
nickname.setTextSize(15.0f);
|
|
||||||
nickname.setTextColor(getTextAttr());
|
|
||||||
nickname.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
|
||||||
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(-2, -2);
|
|
||||||
params1.addRule(RelativeLayout.CENTER_VERTICAL);
|
|
||||||
params1.addRule(RelativeLayout.RIGHT_OF, 1);
|
|
||||||
layout.addView(nickname, params1);
|
|
||||||
|
|
||||||
ImageButton action = new ImageButton(parent.getContext());
|
|
||||||
action.setId(3);
|
|
||||||
action.setBackgroundResource(com.vtosters.lite.R.drawable.rounded_list_selector);
|
|
||||||
Drawable drawable = recolorDrawable(getResources().getDrawable(R.drawable.ic_list_remove));
|
|
||||||
action.setImageDrawable(drawable);
|
|
||||||
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
|
|
||||||
convertDpToPixel(48),
|
|
||||||
convertDpToPixel(48)
|
|
||||||
);
|
|
||||||
params2.addRule(RelativeLayout.CENTER_VERTICAL);
|
|
||||||
params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
|
||||||
layout.addView(action, params2);
|
|
||||||
|
|
||||||
return new MultiAccountViewHolder(layout);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void a(MultiAccountViewHolder holder, int pos) {
|
|
||||||
holder.bind(pos == 0 ? null : mAccounts.get(pos - 1), pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int au_() {
|
|
||||||
return mAccounts.size() + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static class MultiAccountViewHolder extends RecyclerView.x {
|
|
||||||
|
|
||||||
private final RelativeLayout mContainer;
|
|
||||||
private final VKCircleImageView mAvatar;
|
|
||||||
private final TextView mNickname;
|
|
||||||
private final ImageButton mAction;
|
|
||||||
|
|
||||||
public MultiAccountViewHolder(View view) {
|
|
||||||
super(view);
|
|
||||||
|
|
||||||
mContainer = (RelativeLayout) view;
|
|
||||||
mAvatar = view.findViewById(1);
|
|
||||||
mNickname = view.findViewById(2);
|
|
||||||
mAction = view.findViewById(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void bind(MultiAccountItem item, int pos) {
|
|
||||||
if (pos == 0) {
|
|
||||||
mNickname.setText("Добавить новый аккаунт");
|
|
||||||
mContainer.setOnClickListener(v -> {
|
|
||||||
MultiAccountManager.addAccount();
|
|
||||||
|
|
||||||
VKImageLoader.b();
|
|
||||||
ImEngineProvider.a().h();
|
|
||||||
AudioMessageUtils.j();
|
|
||||||
FileUtils.l();
|
|
||||||
VKAccount b = VKAccountManager.b();
|
|
||||||
PushSubscriber.a.a(b.b(), b.c());
|
|
||||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
|
||||||
restarting();
|
|
||||||
});
|
|
||||||
Drawable drawable = recolorDrawable(getResources().getDrawable(R.drawable.ic_list_add));
|
|
||||||
mAction.setImageDrawable(drawable);
|
|
||||||
mAction.setClickable(false);
|
|
||||||
} else {
|
|
||||||
mContainer.setOnClickListener(v -> {
|
|
||||||
MultiAccountManager.switchAccount(item.index);
|
|
||||||
|
|
||||||
VKImageLoader.b();
|
|
||||||
ImEngineProvider.a().h();
|
|
||||||
AudioMessageUtils.j();
|
|
||||||
FileUtils.l();
|
|
||||||
VKAccount b = VKAccountManager.b();
|
|
||||||
PushSubscriber.a.a(b.b(), b.c());
|
|
||||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
|
||||||
restarting();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isNetworkConnected())
|
|
||||||
mAvatar.a(item.imageUrl);
|
|
||||||
else
|
|
||||||
mAvatar.a(R.drawable.vkim_ic_placeholder_user_square_64dp);
|
|
||||||
|
|
||||||
mNickname.setText(item.nickname);
|
|
||||||
|
|
||||||
mAction.setOnClickListener(v -> {
|
|
||||||
MultiAccountManager.deleteAccount(item.index);
|
|
||||||
|
|
||||||
VKImageLoader.b();
|
|
||||||
ImEngineProvider.a().h();
|
|
||||||
AudioMessageUtils.j();
|
|
||||||
FileUtils.l();
|
|
||||||
VKAccount b = VKAccountManager.b();
|
|
||||||
PushSubscriber.a.a(b.b(), b.c());
|
|
||||||
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
|
|
||||||
restarting();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-41
@@ -1,41 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
|
|
||||||
public class MultiAccountFragment extends ToolbarFragment {
|
|
||||||
|
|
||||||
private RecyclerView mRecyclerView;
|
|
||||||
private MultiAccountAdapter mAdapter;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View d(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
|
|
||||||
|
|
||||||
LinearLayout layout = new LinearLayout(n());
|
|
||||||
|
|
||||||
mRecyclerView = new RecyclerView(n());
|
|
||||||
mRecyclerView.setLayoutManager(new LinearLayoutManager(n()));
|
|
||||||
mAdapter = new MultiAccountAdapter();
|
|
||||||
mRecyclerView.setAdapter(mAdapter);
|
|
||||||
layout.addView(mRecyclerView, new LinearLayout.LayoutParams(-1, -1));
|
|
||||||
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void a(View arg0, Bundle arg1) {
|
|
||||||
o_(true);
|
|
||||||
|
|
||||||
super.a(arg0, arg1);
|
|
||||||
|
|
||||||
a(Helper.getString("accounts"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Helper.GetContext;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
|
||||||
|
|
||||||
public class MultiAccountManager {
|
|
||||||
|
|
||||||
public static void migrate() {
|
|
||||||
SharedPreferences OldPrefs = GetContext().getSharedPreferences("pref_account_manager", Context.MODE_PRIVATE);
|
|
||||||
String OldPrefsValue = OldPrefs.getString("key_vk_account", "");
|
|
||||||
SharedPreferences NewPrefs = GetContext().getSharedPreferences("pref_account_manager0", Context.MODE_PRIVATE);
|
|
||||||
SharedPreferences.Editor editor = NewPrefs.edit();
|
|
||||||
editor.putString("key_vk_account", OldPrefsValue);
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SharedPreferences getCurrentAccount() {
|
|
||||||
int account = GetPreferences().getInt("account", 0);
|
|
||||||
return GetContext().getSharedPreferences("pref_account_manager" + (account != 0 ? account : ""), Context.MODE_PRIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int getAccountPrefsCount() {
|
|
||||||
File[] prefs = new File(GetContext().getFilesDir().getParent(), "shared_prefs")
|
|
||||||
.listFiles((dir, name) -> {
|
|
||||||
return name.matches("pref_account_manager\\d+\\.xml");
|
|
||||||
});
|
|
||||||
return prefs != null ? prefs.length : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String withRegex(String base, String regex, String def) {
|
|
||||||
Pattern pattern = Pattern.compile(regex);
|
|
||||||
Matcher matcher = pattern.matcher(base);
|
|
||||||
if (matcher.find()) {
|
|
||||||
return matcher.group(1);
|
|
||||||
}
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<MultiAccountItem> buildList() {
|
|
||||||
List<MultiAccountItem> list = new ArrayList<>();
|
|
||||||
for (int i = 0; i <= getAccountPrefsCount(); i++) {
|
|
||||||
SharedPreferences prefs = GetContext().getSharedPreferences("pref_account_manager" + i, Context.MODE_PRIVATE);
|
|
||||||
String keyVKAccount = prefs.getString("key_vk_account", "");
|
|
||||||
if (!keyVKAccount.isEmpty()) {
|
|
||||||
String name = withRegex(keyVKAccount, ".*\"name\":\\{.*?:\"(.*?)\"\\}.*", "");
|
|
||||||
String avatarUrl = withRegex(keyVKAccount, ".*\"photo\":\\{.*?:\"(.*?)\"\\}.*", "https://vk.com/images/camera_200.png")
|
|
||||||
.replace("\\/", "/");
|
|
||||||
list.add(new MultiAccountItem(
|
|
||||||
name, avatarUrl, i
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean switchAccount(int i) {
|
|
||||||
int account = GetPreferences().getInt("account", 0);
|
|
||||||
if (account == i) return false;
|
|
||||||
|
|
||||||
GetPreferences().edit().putInt("account", i).commit();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void addAccount() {
|
|
||||||
GetPreferences().edit().putInt("account", getAccountPrefsCount()).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void deleteAccount(int i) {
|
|
||||||
int account = GetPreferences().getInt("account", 0);
|
|
||||||
SharedPreferences prefs = GetContext().getSharedPreferences("pref_account_manager" + i, Context.MODE_PRIVATE);
|
|
||||||
prefs.edit().clear().commit();
|
|
||||||
File file = new File(new File(GetContext().getFilesDir().getParent(), "shared_prefs"), "pref_account_manager" + i);
|
|
||||||
if (file.exists()) file.delete();
|
|
||||||
if (account == i && getAccountPrefsCount() > 0)
|
|
||||||
switchAccount(buildList().get(0).index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.tgstickers;
|
package ru.vtosters.lite.ui.fragments.tgstickers;
|
||||||
|
|
||||||
import static android.widget.Toast.*;
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Themes.*;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@@ -46,8 +42,8 @@ import java.io.File;
|
|||||||
|
|
||||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
import me.grishka.appkit.fragments.ToolbarFragment;
|
||||||
import ru.vtosters.lite.tgs.TGPref;
|
import ru.vtosters.lite.tgs.TGPref;
|
||||||
import ru.vtosters.lite.ui.PreferencesUtil;
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
import ru.vtosters.lite.ui.PreferencesUtil;
|
||||||
import ru.vtosters.lite.utils.Prefs;
|
import ru.vtosters.lite.utils.Prefs;
|
||||||
import ru.vtosters.lite.utils.Themes;
|
import ru.vtosters.lite.utils.Themes;
|
||||||
|
|
||||||
@@ -56,15 +52,23 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
public final static String ACTION_RELOAD = "com.vtosters.lite.action.RELOAD_TGS_LIST";
|
public final static String ACTION_RELOAD = "com.vtosters.lite.action.RELOAD_TGS_LIST";
|
||||||
|
|
||||||
private final static int TYPE_DIRECT = 0, TYPE_SOCKS = 2, TYPE_TOASTER_SERVER = 3;
|
private final static int TYPE_DIRECT = 0, TYPE_SOCKS = 2, TYPE_TOASTER_SERVER = 3;
|
||||||
private static final String TAG = "StickersFragment";
|
|
||||||
public int from;
|
|
||||||
public int to;
|
|
||||||
private TelegramStickersGrabber grabber;
|
private TelegramStickersGrabber grabber;
|
||||||
private TelegramStickersService stickersService;
|
private TelegramStickersService stickersService;
|
||||||
private FloatingActionButton fab;
|
private FloatingActionButton fab;
|
||||||
|
|
||||||
|
private static final String TAG = "StickersFragment";
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private RecyclerView.Adapter adapter;
|
private RecyclerView.Adapter adapter;
|
||||||
|
|
||||||
private boolean movePending = false;
|
private boolean movePending = false;
|
||||||
|
public int from;
|
||||||
|
public int to;
|
||||||
|
|
||||||
|
private int editPadding;
|
||||||
|
private RecyclerView recycler;
|
||||||
|
|
||||||
private final BroadcastReceiver receiver = new BroadcastReceiver() {
|
private final BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
@@ -86,8 +90,6 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private int editPadding;
|
|
||||||
private RecyclerView recycler;
|
|
||||||
|
|
||||||
private void initGrabber() {
|
private void initGrabber() {
|
||||||
int method = TGPref.getTGConnectMethod();
|
int method = TGPref.getTGConnectMethod();
|
||||||
@@ -116,7 +118,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
|
|
||||||
private void openMenu(String toast) {
|
private void openMenu(String toast) {
|
||||||
if (toast != null) {
|
if (toast != null) {
|
||||||
makeText(super.n(), toast, LENGTH_SHORT).show();
|
Toast.makeText(super.n(), toast, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
var intent = new Navigator(StickersPreferencesFragment.class, new Bundle()).a(super.n());
|
var intent = new Navigator(StickersPreferencesFragment.class, new Bundle()).a(super.n());
|
||||||
super.n().startActivity(intent);
|
super.n().startActivity(intent);
|
||||||
@@ -128,7 +130,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
super.a(menu, menuInflater);
|
super.a(menu, menuInflater);
|
||||||
MenuItem add = menu.add(0, 0, 0, "");
|
MenuItem add = menu.add(0, 0, 0, "");
|
||||||
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||||
add.setIcon(getResources().getDrawable(com.vtosters.lite.R.drawable.ic_settings_24));
|
add.setIcon(Helper.getResources().getDrawable(com.vtosters.lite.R.drawable.ic_settings_24));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -153,21 +155,21 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
linearLayout.addView(editText);
|
linearLayout.addView(editText);
|
||||||
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
|
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
|
||||||
margin.setMargins(convertDpToPixel(24f), 0, convertDpToPixel(24f), 0);
|
margin.setMargins(Helper.convertDpToPixel(24f), 0, Helper.convertDpToPixel(24f), 0);
|
||||||
editText.setLayoutParams(margin);
|
editText.setLayoutParams(margin);
|
||||||
|
|
||||||
new AlertDialog.Builder(super.n())
|
new AlertDialog.Builder(super.n())
|
||||||
.setTitle(getString("stickersapi5"))
|
.setTitle(Helper.getString("stickersapi5"))
|
||||||
.setMessage(getString("stickersapi6"))
|
.setMessage(Helper.getString("stickersapi6"))
|
||||||
.setView(linearLayout)
|
.setView(linearLayout)
|
||||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||||
TGPref.setTGBotKey(editText.getText().toString());
|
TGPref.setTGBotKey(editText.getText().toString());
|
||||||
if (r != null) r.run();
|
if (r != null) r.run();
|
||||||
}).setNegativeButton(android.R.string.cancel, null).setNeutralButton(getString("stickersapi7"), (dialog, which) -> new AlertDialog.Builder(super.n())
|
}).setNegativeButton(android.R.string.cancel, null).setNeutralButton(Helper.getString("stickersapi7"), (dialog, which) -> new AlertDialog.Builder(super.n())
|
||||||
.setTitle(getString("stickersapi8"))
|
.setTitle(Helper.getString("stickersapi8"))
|
||||||
.setMessage(getString("stickersapi9") +
|
.setMessage(Helper.getString("stickersapi9") +
|
||||||
getString("stickersapi10")).setPositiveButton(android.R.string.ok, null)
|
Helper.getString("stickersapi10")).setPositiveButton(android.R.string.ok, null)
|
||||||
.create().show()).create().show();
|
.create().show()).create().show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkApiKey(final Runnable r) {
|
private void checkApiKey(final Runnable r) {
|
||||||
@@ -177,7 +179,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
|
|
||||||
final ProgressDialog progressDialog = new ProgressDialog(context);
|
final ProgressDialog progressDialog = new ProgressDialog(context);
|
||||||
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
||||||
progressDialog.setMessage(getString("stickersapi1"));
|
progressDialog.setMessage(Helper.getString("stickersapi1"));
|
||||||
progressDialog.show();
|
progressDialog.show();
|
||||||
|
|
||||||
grabber.checkKey(new TelegramStickersGrabber.KeyCheckListener() {
|
grabber.checkKey(new TelegramStickersGrabber.KeyCheckListener() {
|
||||||
@@ -185,7 +187,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
public void onKeyChecked(boolean ok) {
|
public void onKeyChecked(boolean ok) {
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
makeText(context, getString("stickersapi2"), LENGTH_SHORT).show();
|
Toast.makeText(context, Helper.getString("stickersapi2"), Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stickersService.setBotKey(TGPref.getTGBotKey());
|
stickersService.setBotKey(TGPref.getTGBotKey());
|
||||||
@@ -197,9 +199,9 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
public void onNetError() {
|
public void onNetError() {
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
new AlertDialog.Builder(context)
|
new AlertDialog.Builder(context)
|
||||||
.setMessage(getString("stickersapi3"))
|
.setMessage(Helper.getString("stickersapi3"))
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
.setPositiveButton(getString("stickersapi4"), (arg0, arg1) -> checkApiKey(r)).create().show();
|
.setPositiveButton(Helper.getString("stickersapi4"), (arg0, arg1) -> checkApiKey(r)).create().show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -209,9 +211,9 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
@Override
|
@Override
|
||||||
public View d(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View d(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
grabber = new TelegramStickersGrabber(TGPref.getTGBotKey());
|
grabber = new TelegramStickersGrabber(TGPref.getTGBotKey());
|
||||||
stickersService = TelegramStickersService.getInstance(GetContext());
|
stickersService = TelegramStickersService.getInstance(Helper.GetContext());
|
||||||
|
|
||||||
editPadding = convertDpToPixel(24f);
|
editPadding = Helper.convertDpToPixel(24f);
|
||||||
|
|
||||||
FrameLayout v = new FrameLayout(container.getContext());
|
FrameLayout v = new FrameLayout(container.getContext());
|
||||||
|
|
||||||
@@ -220,11 +222,11 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
|
|
||||||
fab = new FloatingActionButton(container.getContext());
|
fab = new FloatingActionButton(container.getContext());
|
||||||
fab.setImageResource(R.drawable.ic_add_24);
|
fab.setImageResource(R.drawable.ic_add_24);
|
||||||
fab.setBackgroundTintList(ColorStateList.valueOf(getAccentColor()));
|
fab.setBackgroundTintList(ColorStateList.valueOf(Themes.getAccentColor()));
|
||||||
fab.setOnClickListener(v2 -> fabClick());
|
fab.setOnClickListener(v2 -> fabClick());
|
||||||
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
|
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
|
||||||
params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
|
params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
|
||||||
params.setMargins(0, 0, 0, convertDpToPixel(12f));
|
params.setMargins(0, 0, 0, Helper.convertDpToPixel(12f));
|
||||||
fab.setLayoutParams(params);
|
fab.setLayoutParams(params);
|
||||||
|
|
||||||
v.addView(recycler);
|
v.addView(recycler);
|
||||||
@@ -243,7 +245,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
switch (method) {
|
switch (method) {
|
||||||
case TYPE_SOCKS:
|
case TYPE_SOCKS:
|
||||||
if (TGPref.getTGProxyIP() == null) {
|
if (TGPref.getTGProxyIP() == null) {
|
||||||
openMenu(getString("stickersproxy1"));
|
openMenu(Helper.getString("stickersproxy1"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case TYPE_TOASTER_SERVER:
|
case TYPE_TOASTER_SERVER:
|
||||||
@@ -252,27 +254,27 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
LinearLayout linearLayout = new LinearLayout(super.n());
|
LinearLayout linearLayout = new LinearLayout(super.n());
|
||||||
|
|
||||||
final EditText editText = new EditText(super.n());
|
final EditText editText = new EditText(super.n());
|
||||||
editText.setHintTextColor(PreferencesUtil.getSTextColor(GetContext()));
|
editText.setHintTextColor(PreferencesUtil.getSTextColor(Helper.GetContext()));
|
||||||
|
|
||||||
// Костыль для китката
|
// Костыль для китката
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
editText.setBackgroundTintList(ColorStateList.valueOf(PreferencesUtil.getTextColor(GetContext())));
|
editText.setBackgroundTintList(ColorStateList.valueOf(PreferencesUtil.getTextColor(Helper.GetContext())));
|
||||||
} else {
|
} else {
|
||||||
ViewCompat.setBackgroundTintList(editText, ColorStateList.valueOf(PreferencesUtil.getTextColor(GetContext())));
|
ViewCompat.setBackgroundTintList(editText, ColorStateList.valueOf(PreferencesUtil.getTextColor(Helper.GetContext())));
|
||||||
}
|
}
|
||||||
linearLayout.addView(editText);
|
linearLayout.addView(editText);
|
||||||
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
|
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
|
||||||
margin.setMargins(convertDpToPixel(24f), 0, convertDpToPixel(24f), 0);
|
margin.setMargins(Helper.convertDpToPixel(24f), 0, Helper.convertDpToPixel(24f), 0);
|
||||||
editText.setLayoutParams(margin);
|
editText.setLayoutParams(margin);
|
||||||
|
|
||||||
new AlertDialog.Builder(super.n()).setTitle(getString("stickershelp1"))
|
new AlertDialog.Builder(super.n()).setTitle(Helper.getString("stickershelp1"))
|
||||||
.setMessage(getString("stickershelp2"))
|
.setMessage(Helper.getString("stickershelp2"))
|
||||||
.setView(linearLayout)
|
.setView(linearLayout)
|
||||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||||
String pack = editText.getText().toString();
|
String pack = editText.getText().toString();
|
||||||
pack = parsePack(pack);
|
pack = parsePack(pack);
|
||||||
stickersService.requestPackDownload(pack, new File(GetContext().getFilesDir(), new File("VT-Stickers", pack).getAbsolutePath()));
|
stickersService.requestPackDownload(pack, new File(Helper.GetContext().getFilesDir(), new File("VT-Stickers", pack).getAbsolutePath()));
|
||||||
}).setNeutralButton(android.R.string.cancel, null).create().show();
|
}).setNeutralButton(android.R.string.cancel, null).create().show();
|
||||||
};
|
};
|
||||||
if (TGPref.getTGBotKey() == null) enterBotKey(() -> checkApiKey(work));
|
if (TGPref.getTGBotKey() == null) enterBotKey(() -> checkApiKey(work));
|
||||||
@@ -282,7 +284,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (method == -1) {
|
if (method == -1) {
|
||||||
openMenu(getString("stickersconnection"));
|
openMenu(Helper.getString("stickersconnection"));
|
||||||
} else {
|
} else {
|
||||||
r.run();
|
r.run();
|
||||||
}
|
}
|
||||||
@@ -291,7 +293,7 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void b(@Nullable Bundle savedInstanceState) {
|
public void b(@Nullable Bundle savedInstanceState) {
|
||||||
super.b(savedInstanceState);
|
super.b(savedInstanceState);
|
||||||
GetContext().registerReceiver(receiver, new IntentFilter(ACTION_RELOAD));
|
Helper.GetContext().registerReceiver(receiver, new IntentFilter(ACTION_RELOAD));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -300,13 +302,13 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
|
|
||||||
super.a(arg0, arg1);
|
super.a(arg0, arg1);
|
||||||
|
|
||||||
a(getString("vtltgs"));
|
a(Helper.getString("vtltgs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void A_() {
|
public void A_() {
|
||||||
super.A_();
|
super.A_();
|
||||||
GetContext().unregisterReceiver(receiver);
|
Helper.GetContext().unregisterReceiver(receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String parsePack(String pack) {
|
private String parsePack(String pack) {
|
||||||
@@ -319,12 +321,31 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class StickerPackAdapter extends RecyclerView.Adapter<StickerPackAdapter.StickerPackViewHolder> {
|
public class StickerPackAdapter extends RecyclerView.Adapter<StickerPackAdapter.StickerPackViewHolder> {
|
||||||
private final String TAG = "StickerPackAdapter";
|
private String TAG = "StickerPackAdapter";
|
||||||
|
|
||||||
|
public class StickerPackViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
private SwitchCompat switchCompat;
|
||||||
|
private ImageView stickerImage, updateButton, deleteButton;
|
||||||
|
private TextView name, count;
|
||||||
|
private LinearLayout layout;
|
||||||
|
|
||||||
|
StickerPackViewHolder(@NonNull View view) {
|
||||||
|
super(view);
|
||||||
|
|
||||||
|
switchCompat = (SwitchCompat) view.findViewById(R.id.choose_btn);
|
||||||
|
stickerImage = (ImageView) view.findViewById(R.id.photo);
|
||||||
|
updateButton = (ImageView) view.findViewById(R.id.button_update);
|
||||||
|
deleteButton = (ImageView) view.findViewById(R.id.action_delete);
|
||||||
|
name = (TextView) view.findViewById(R.id.vkim_cancel);
|
||||||
|
count = (TextView) view.findViewById(R.id.vkim_cancel_label_text);
|
||||||
|
layout = (LinearLayout) view.findViewById(R.id.linearLayout5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public StickerPackViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public StickerPackViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
var view = LayoutInflater.from(parent.getContext()).inflate(getIdentifier("tgs_entry", "layout"), parent, false);
|
var view = LayoutInflater.from(parent.getContext()).inflate(Helper.getIdentifier("tgs_entry", "layout"), parent, false);
|
||||||
return new StickerPackViewHolder(view);
|
return new StickerPackViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,19 +365,19 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
if (f.exists()) {
|
if (f.exists()) {
|
||||||
holder.stickerImage.setImageURI(Uri.parse("file://" + f.getAbsolutePath()));
|
holder.stickerImage.setImageURI(Uri.parse("file://" + f.getAbsolutePath()));
|
||||||
} else {
|
} else {
|
||||||
holder.stickerImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_vk_104));
|
holder.stickerImage.setImageDrawable(Helper.getResources().getDrawable(R.drawable.icon_vk_104));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.updateButton.setImageDrawable(recolorDrawable(getResources().getDrawable(R.drawable.ic_camera_switch_48)));
|
holder.updateButton.setImageDrawable(Themes.recolorDrawable(Helper.getResources().getDrawable(R.drawable.ic_camera_switch_48)));
|
||||||
holder.updateButton.setOnClickListener(listener -> {
|
holder.updateButton.setOnClickListener(listener -> {
|
||||||
stickersService.setBotKey(TGPref.getTGBotKey());
|
stickersService.setBotKey(TGPref.getTGBotKey());
|
||||||
stickersService.requestPackDownload(pack.id, new File(GetContext().getFilesDir(), new File("VT-Stickers", pack.id).getAbsolutePath()));
|
stickersService.requestPackDownload(pack.id, new File(Helper.GetContext().getFilesDir(), new File("VT-Stickers", pack.id).getAbsolutePath()));
|
||||||
});
|
});
|
||||||
|
|
||||||
holder.deleteButton.setImageDrawable(recolorDrawable(getResources().getDrawable(R.drawable.vkim_ic_msg_delete)));
|
holder.deleteButton.setImageDrawable(Themes.recolorDrawable(Helper.getResources().getDrawable(R.drawable.vkim_ic_msg_delete)));
|
||||||
holder.deleteButton.setOnClickListener(listener -> {
|
holder.deleteButton.setOnClickListener(listener -> {
|
||||||
stickersService.deletePack(pack);
|
stickersService.deletePack(pack);
|
||||||
notifyItemRemoved(position);
|
notifyItemRemoved(position);
|
||||||
@@ -365,13 +386,13 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
holder.name.setText(pack.title);
|
holder.name.setText(pack.title);
|
||||||
holder.switchCompat.setChecked(pack.enabled);
|
holder.switchCompat.setChecked(pack.enabled);
|
||||||
holder.switchCompat.setOnCheckedChangeListener((buttonView, isChecked) -> stickersService.setPackEnabled(pack, isChecked, false));
|
holder.switchCompat.setOnCheckedChangeListener((buttonView, isChecked) -> stickersService.setPackEnabled(pack, isChecked, false));
|
||||||
holder.count.setText(pack.stickersCount + " " + getString("stickerscount"));
|
holder.count.setText(pack.stickersCount + " " + Helper.getString("stickerscount"));
|
||||||
|
|
||||||
holder.layout.setBackgroundColor(Prefs.getNavbarColor());
|
holder.layout.setBackgroundColor(Prefs.getNavbarColor());
|
||||||
|
|
||||||
// Color костыль
|
// Color костыль
|
||||||
int color = getTextAttr();
|
int color = Themes.getTextAttr();
|
||||||
int secondary = getSTextAttr();
|
int secondary = Themes.getSTextAttr();
|
||||||
|
|
||||||
holder.name.setTextColor(color);
|
holder.name.setTextColor(color);
|
||||||
holder.count.setTextColor(secondary);
|
holder.count.setTextColor(secondary);
|
||||||
@@ -381,28 +402,6 @@ public class StickersFragment extends ToolbarFragment {
|
|||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return stickersService.getPacksListReference().size();
|
return stickersService.getPacksListReference().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class StickerPackViewHolder extends RecyclerView.ViewHolder {
|
|
||||||
private final SwitchCompat switchCompat;
|
|
||||||
private final ImageView stickerImage;
|
|
||||||
private final ImageView updateButton;
|
|
||||||
private final ImageView deleteButton;
|
|
||||||
private final TextView name;
|
|
||||||
private final TextView count;
|
|
||||||
private final LinearLayout layout;
|
|
||||||
|
|
||||||
StickerPackViewHolder(@NonNull View view) {
|
|
||||||
super(view);
|
|
||||||
|
|
||||||
switchCompat = view.findViewById(R.id.choose_btn);
|
|
||||||
stickerImage = view.findViewById(R.id.photo);
|
|
||||||
updateButton = view.findViewById(R.id.button_update);
|
|
||||||
deleteButton = view.findViewById(R.id.action_delete);
|
|
||||||
name = view.findViewById(R.id.vkim_cancel);
|
|
||||||
count = view.findViewById(R.id.vkim_cancel_label_text);
|
|
||||||
layout = view.findViewById(R.id.linearLayout5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-18
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.ui.fragments.tgstickers;
|
package ru.vtosters.lite.ui.fragments.tgstickers;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
||||||
@@ -10,8 +8,8 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
|||||||
|
|
||||||
import ru.vtosters.lite.tgs.TGPref;
|
import ru.vtosters.lite.tgs.TGPref;
|
||||||
import ru.vtosters.lite.tgs.TGRoot;
|
import ru.vtosters.lite.tgs.TGRoot;
|
||||||
import ru.vtosters.lite.ui.PreferencesUtil;
|
|
||||||
import ru.vtosters.lite.utils.Helper;
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
import ru.vtosters.lite.ui.PreferencesUtil;
|
||||||
|
|
||||||
public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragment {
|
public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragment {
|
||||||
|
|
||||||
@@ -19,19 +17,19 @@ public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragme
|
|||||||
public void b(Bundle bundle) {
|
public void b(Bundle bundle) {
|
||||||
super.b(bundle);
|
super.b(bundle);
|
||||||
|
|
||||||
int vtosterXml = GetContext().getResources().getIdentifier("empty", "xml", GetContext().getPackageName());
|
int vtosterXml = Helper.GetContext().getResources().getIdentifier("empty", "xml", Helper.GetContext().getPackageName());
|
||||||
this.a(vtosterXml);
|
this.a(vtosterXml);
|
||||||
|
|
||||||
PreferencesUtil.addPreferenceCategory(this, getString("sprefsstickers"));
|
PreferencesUtil.addPreferenceCategory(this, Helper.getString("sprefsstickers"));
|
||||||
PreferencesUtil.addPreference(this, "", getString("sprefsdelkey"), "", null, preference -> {
|
PreferencesUtil.addPreference(this, "", Helper.getString("sprefsdelkey"), "", null, preference -> {
|
||||||
TGPref.setTGBotKey(null);
|
TGPref.setTGBotKey(null);
|
||||||
ToastUtils.a(getString("sprefsdelkey2"));
|
ToastUtils.a(Helper.getString("sprefsdelkey2"));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
PreferencesUtil.addPreferenceCategory(this, getString("sprefsnetwork"));
|
PreferencesUtil.addPreferenceCategory(this, Helper.getString("sprefsnetwork"));
|
||||||
PreferencesUtil.addListPreference(this, "VTGS:CM", "0", getString("sprefsctype"), new CharSequence[]{
|
PreferencesUtil.addListPreference(this, "VTGS:CM", "0", Helper.getString("sprefsctype"), new CharSequence[]{
|
||||||
getString("ctypedirect"), getString("ctypesocks")
|
Helper.getString("ctypedirect"), Helper.getString("ctypesocks")
|
||||||
}, new String[]{
|
}, new String[]{
|
||||||
"0", "2"
|
"0", "2"
|
||||||
});
|
});
|
||||||
@@ -46,22 +44,22 @@ public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragme
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
PreferencesUtil.addPreferenceCategory(this, getString("ssocks"));
|
PreferencesUtil.addPreferenceCategory(this, Helper.getString("ssocks"));
|
||||||
|
|
||||||
PreferencesUtil.addEditTextPreference(this, "tg_proxy_host", getString("ssockshost"), (preference, o) -> {
|
PreferencesUtil.addEditTextPreference(this, "tg_proxy_host", Helper.getString("ssockshost"), (preference, o) -> {
|
||||||
TGPref.setTGProxyIP((String) o);
|
TGPref.setTGProxyIP((String) o);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
PreferencesUtil.addEditTextPreference(this, "tg_proxy_port", getString("ssocksport"), (preference, o) -> {
|
PreferencesUtil.addEditTextPreference(this, "tg_proxy_port", Helper.getString("ssocksport"), (preference, o) -> {
|
||||||
try {
|
try {
|
||||||
TGPref.setTGProxyPort(Integer.parseInt((String) o));
|
TGPref.setTGProxyPort(Integer.parseInt((String) o));
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ToastUtils.a(getString("ssockswport"));
|
ToastUtils.a(Helper.getString("ssockswport"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
PreferencesUtil.addMaterialSwitchPreference(this, "tg_proxy_auth", getString("ssocksauth"), "", null, false, (preference, o) -> {
|
PreferencesUtil.addMaterialSwitchPreference(this, "tg_proxy_auth", Helper.getString("ssocksauth"), "", null, false, (preference, o) -> {
|
||||||
boolean value = (boolean) o;
|
boolean value = (boolean) o;
|
||||||
|
|
||||||
a("tg_proxy_login").a(value); // findPreference("tg_proxy_login").setEnabled(value);
|
a("tg_proxy_login").a(value); // findPreference("tg_proxy_login").setEnabled(value);
|
||||||
@@ -70,11 +68,11 @@ public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragme
|
|||||||
TGPref.setTGProxyPassEnabled(value);
|
TGPref.setTGProxyPassEnabled(value);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
PreferencesUtil.addEditTextPreference(this, "tg_proxy_login", getString("ssockslogin"), (preference, o) -> {
|
PreferencesUtil.addEditTextPreference(this, "tg_proxy_login", Helper.getString("ssockslogin"), (preference, o) -> {
|
||||||
TGPref.setTGProxyUserPass((String) o, TGPref.getTGProxyPass());
|
TGPref.setTGProxyUserPass((String) o, TGPref.getTGProxyPass());
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
PreferencesUtil.addEditTextPreference(this, "tg_proxy_pass", getString("ssockspass"), (preference, o) -> {
|
PreferencesUtil.addEditTextPreference(this, "tg_proxy_pass", Helper.getString("ssockspass"), (preference, o) -> {
|
||||||
TGPref.setTGProxyUserPass(TGPref.getTGProxyUser(), (String) o);
|
TGPref.setTGProxyUserPass(TGPref.getTGProxyUser(), (String) o);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@@ -85,7 +83,7 @@ public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragme
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int aq() {
|
public int aq() {
|
||||||
return GetContext().getResources().getIdentifier("vtltgs", "string", GetContext().getPackageName());
|
return Helper.GetContext().getResources().getIdentifier("vtltgs", "string", Helper.GetContext().getPackageName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package ru.vtosters.lite.ui.vkui;
|
package ru.vtosters.lite.ui.vkui;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.vk.core.dialogs.bottomsheet.ModalBottomSheet;
|
import com.vk.core.dialogs.bottomsheet.ModalBottomSheet;
|
||||||
|
|
||||||
|
import com.vtosters.lite.R;
|
||||||
|
|
||||||
|
import ru.vtosters.lite.utils.Helper;
|
||||||
|
|
||||||
public class ModalBottomSheetProxy {
|
public class ModalBottomSheetProxy {
|
||||||
public final ModalBottomSheet.a builder;
|
public final ModalBottomSheet.a builder;
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.vk.dto.common.VideoFile;
|
import com.vk.dto.common.VideoFile;
|
||||||
|
|
||||||
@@ -28,41 +27,51 @@ public class ExternalLinkHandler {
|
|||||||
private static final Map<String, String> qualities = new HashMap<>();
|
private static final Map<String, String> qualities = new HashMap<>();
|
||||||
|
|
||||||
public static boolean parseVideoFile(VideoFile file, Context context) {
|
public static boolean parseVideoFile(VideoFile file, Context context) {
|
||||||
|
if (!Prefs.isEnableExternalOpening()) return false;
|
||||||
|
|
||||||
if (checkYoutubeLink(file)) {
|
if (checkYoutubeLink(file)) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
intent.setData(Uri.parse(file.n));
|
intent.setData(Uri.parse(file.n));
|
||||||
|
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!Prefs.isEnableExternalOpening()) return false;
|
} else if (checkVkVideo(file)) {
|
||||||
|
|
||||||
if (checkVkVideo(file)) {
|
|
||||||
if (qualities.size() == 1) {
|
if (qualities.size() == 1) {
|
||||||
|
|
||||||
startExternalVideo((String) qualities.values().toArray()[0]);
|
startExternalVideo((String) qualities.values().toArray()[0]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
String[] titles = qualities.keySet().toArray(new String[0]);
|
String[] titles = qualities.keySet().toArray(new String[0]);
|
||||||
|
|
||||||
new AlertDialog.Builder(context)
|
new AlertDialog.Builder(context)
|
||||||
.setItems(titles, ((dialog, which) -> {
|
.setItems(titles, ((dialog, which) -> {
|
||||||
|
|
||||||
startExternalVideo(qualities.get(titles[which]));
|
startExternalVideo(qualities.get(titles[which]));
|
||||||
|
|
||||||
}))
|
}))
|
||||||
.show();
|
.show();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean checkYoutubeLink(VideoFile file) {
|
private static boolean checkYoutubeLink(VideoFile file) {
|
||||||
if (!isEmpty(file.n)) {
|
if (!Helper.isEmpty(file.n)) {
|
||||||
for (String filter : filters) {
|
for (String filter : filters) {
|
||||||
if (file.n.contains(filter))
|
if (file.n.contains(filter))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,25 +85,25 @@ public class ExternalLinkHandler {
|
|||||||
* this.k = var3.optString("mp4_2160");
|
* this.k = var3.optString("mp4_2160");
|
||||||
*/
|
*/
|
||||||
public static boolean checkVkVideo(VideoFile videoFile) {
|
public static boolean checkVkVideo(VideoFile videoFile) {
|
||||||
if (!isEmpty(videoFile.e)) {
|
if (!Helper.isEmpty(videoFile.e)) {
|
||||||
qualities.put("240", videoFile.e);
|
qualities.put("240", videoFile.e);
|
||||||
}
|
}
|
||||||
if (!isEmpty(videoFile.f)) {
|
if (!Helper.isEmpty(videoFile.f)) {
|
||||||
qualities.put("360", videoFile.f);
|
qualities.put("360", videoFile.f);
|
||||||
}
|
}
|
||||||
if (!isEmpty(videoFile.g)) {
|
if (!Helper.isEmpty(videoFile.g)) {
|
||||||
qualities.put("480", videoFile.g);
|
qualities.put("480", videoFile.g);
|
||||||
}
|
}
|
||||||
if (!isEmpty(videoFile.h)) {
|
if (!Helper.isEmpty(videoFile.h)) {
|
||||||
qualities.put("720", videoFile.h);
|
qualities.put("720", videoFile.h);
|
||||||
}
|
}
|
||||||
if (!isEmpty(videoFile.i)) {
|
if (!Helper.isEmpty(videoFile.i)) {
|
||||||
qualities.put("1080", videoFile.i);
|
qualities.put("1080", videoFile.i);
|
||||||
}
|
}
|
||||||
if (!isEmpty(videoFile.j)) {
|
if (!Helper.isEmpty(videoFile.j)) {
|
||||||
qualities.put("1440", videoFile.j);
|
qualities.put("1440", videoFile.j);
|
||||||
}
|
}
|
||||||
if (!isEmpty(videoFile.k)) {
|
if (!Helper.isEmpty(videoFile.k)) {
|
||||||
qualities.put("2160", videoFile.k);
|
qualities.put("2160", videoFile.k);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,27 +118,34 @@ public class ExternalLinkHandler {
|
|||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
|
|
||||||
String packageName = getMXPlayerPackageName();
|
String packageName = getMXPlayerPackageName();
|
||||||
if (!isEmpty(packageName)) {
|
if (!Helper.isEmpty(packageName)) {
|
||||||
|
|
||||||
intent.setPackage(packageName);
|
intent.setPackage(packageName);
|
||||||
intent.setDataAndType(uri, "application/mp4");
|
intent.setDataAndType(uri, "application/mp4");
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
intent.setAction(Intent.ACTION_VIEW);
|
intent.setAction(Intent.ACTION_VIEW);
|
||||||
intent.setDataAndType(uri, "video/mp4");
|
intent.setDataAndType(uri, "video/mp4");
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
|
||||||
}
|
}
|
||||||
GetContext().startActivity(intent);
|
|
||||||
|
Helper.GetContext().startActivity(intent);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getMXPlayerPackageName() {
|
private static String getMXPlayerPackageName() {
|
||||||
for (ApplicationInfo info : GetContext().getPackageManager().getInstalledApplications(0)) {
|
for (ApplicationInfo info : Helper.GetContext().getPackageManager().getInstalledApplications(0)) {
|
||||||
String packName = info.packageName;
|
String packName = info.packageName;
|
||||||
if (packName.equals("com.mxtech.videoplayer.ad") || packName.equals("com.mxtech.videoplayer.pro"))
|
if (packName.equals("com.mxtech.videoplayer.ad") || packName.equals("com.mxtech.videoplayer.pro"))
|
||||||
return packName;
|
return packName;
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Proxy.*;
|
import static android.content.Context.ACTIVITY_SERVICE;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.ActivityManager;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.net.NetworkInfo;
|
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
@@ -21,6 +22,7 @@ import com.vtosters.lite.auth.VKAccountManager;
|
|||||||
import com.vtosters.lite.im.ImEngineProvider;
|
import com.vtosters.lite.im.ImEngineProvider;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Helper {
|
public class Helper {
|
||||||
public static int GetUserId() {
|
public static int GetUserId() {
|
||||||
@@ -40,7 +42,7 @@ public class Helper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getConnectorDomain(String str) {
|
public static String getConnectorDomain(String str) {
|
||||||
return GetConnector(str);
|
return Proxy.GetConnector(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reloadMSG() {
|
public static void reloadMSG() {
|
||||||
@@ -68,11 +70,7 @@ public class Helper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void restarting() {
|
public static void restarting() {
|
||||||
Context ctx = GetContext();
|
GetContext().startActivity(Intent.makeRestartActivityTask(GetContext().getPackageManager().getLaunchIntentForPackage(GetContext().getPackageName()).getComponent()));
|
||||||
PackageManager pm = ctx.getPackageManager();
|
|
||||||
Intent intent = pm.getLaunchIntentForPackage(ctx.getPackageName());
|
|
||||||
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
|
|
||||||
ctx.startActivity(mainIntent);
|
|
||||||
Runtime.getRuntime().exit(0);
|
Runtime.getRuntime().exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +107,7 @@ public class Helper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getString(String str) {
|
public static String getString(String str) {
|
||||||
return GetContext().getString(Integer.parseInt(String.valueOf(GetContext().getResources().getIdentifier(str, "string", GetContext().getPackageName()))));
|
return Helper.GetContext().getString(Integer.parseInt(String.valueOf(Helper.GetContext().getResources().getIdentifier(str, "string", Helper.GetContext().getPackageName()))));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPackageName() {
|
public static String getPackageName() {
|
||||||
@@ -139,10 +137,4 @@ public class Helper {
|
|||||||
public static boolean isEmpty(String str) {
|
public static boolean isEmpty(String str) {
|
||||||
return str == null || str.isEmpty();
|
return str == null || str.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNetworkConnected() {
|
|
||||||
ConnectivityManager cm = (ConnectivityManager) GetContext().getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
||||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
|
||||||
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
|
||||||
public class IconHelper {
|
public class IconHelper {
|
||||||
public static void switchToVK() {
|
public static void switchToVK() {
|
||||||
var packageManager = GetContext().getPackageManager();
|
var packageManager = Helper.GetContext().getPackageManager();
|
||||||
var packageName = getPackageName();
|
var packageName = Helper.getPackageName();
|
||||||
packageManager.setComponentEnabledSetting(new ComponentName(packageName, getPackageName() + ".VTIconDefault"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
packageManager.setComponentEnabledSetting(new ComponentName(packageName, Helper.getPackageName() + ".VTIconDefault"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
||||||
packageManager.setComponentEnabledSetting(new ComponentName(packageName, getPackageName() + ".VTIconVK"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
packageManager.setComponentEnabledSetting(new ComponentName(packageName, Helper.getPackageName() + ".VTIconVK"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void switchToDefault() {
|
public static void switchToDefault() {
|
||||||
var packageManager = GetContext().getPackageManager();
|
var packageManager = Helper.GetContext().getPackageManager();
|
||||||
var packageName = getPackageName();
|
var packageName = Helper.getPackageName();
|
||||||
packageManager.setComponentEnabledSetting(new ComponentName(packageName, getPackageName() + ".VTIconDefault"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
packageManager.setComponentEnabledSetting(new ComponentName(packageName, Helper.getPackageName() + ".VTIconDefault"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
||||||
packageManager.setComponentEnabledSetting(new ComponentName(packageName, getPackageName() + ".VTIconVK"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
packageManager.setComponentEnabledSetting(new ComponentName(packageName, Helper.getPackageName() + ".VTIconVK"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Proxy.setProxy;
|
import static ru.vtosters.lite.utils.Proxy.setProxy;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -12,6 +11,7 @@ import android.content.SharedPreferences;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.view.View;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
|
|
||||||
import com.vk.about.Items;
|
import com.vk.about.Items;
|
||||||
@@ -20,6 +20,7 @@ import com.vk.about.Items2;
|
|||||||
import com.vk.apps.AppsFragment;
|
import com.vk.apps.AppsFragment;
|
||||||
import com.vk.core.ui.themes.VKThemeHelper;
|
import com.vk.core.ui.themes.VKThemeHelper;
|
||||||
import com.vk.core.util.Screen;
|
import com.vk.core.util.Screen;
|
||||||
|
import com.vk.discover.DiscoverFragment;
|
||||||
import com.vk.fave.fragments.FaveTabFragment;
|
import com.vk.fave.fragments.FaveTabFragment;
|
||||||
import com.vk.menu.MenuFragment;
|
import com.vk.menu.MenuFragment;
|
||||||
import com.vk.music.fragment.MusicFragment;
|
import com.vk.music.fragment.MusicFragment;
|
||||||
@@ -54,21 +55,20 @@ import java.util.List;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
import ru.vtosters.lite.ui.fragments.dockbar.DockBarManager;
|
import kotlin.jvm.internal.Intrinsics;
|
||||||
import ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager;
|
|
||||||
|
|
||||||
public class Prefs {
|
public class Prefs {
|
||||||
private static final List<Activity> activities = new ArrayList<>();
|
public static String VERSIONNAME = "2.0 DEV";
|
||||||
public static String VERSIONNAME = "2.0 Beta";
|
|
||||||
private static List<String> mFilters;
|
private static List<String> mFilters;
|
||||||
|
private static List<Activity> activities = new ArrayList<>();
|
||||||
|
|
||||||
public static boolean BooleanFalse(String key) {
|
public static boolean BooleanFalse(String key) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GetContext());
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Helper.GetContext());
|
||||||
return prefs.getBoolean(key, false);
|
return prefs.getBoolean(key, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean BooleanTrue(String key) {
|
public static boolean BooleanTrue(String key) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GetContext());
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Helper.GetContext());
|
||||||
return prefs.getBoolean(key, true);
|
return prefs.getBoolean(key, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,10 +106,6 @@ public class Prefs {
|
|||||||
return BooleanFalse("adsgroup");
|
return BooleanFalse("adsgroup");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean olddock() {
|
|
||||||
return BooleanFalse("olddock");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean adsslider() {
|
public static boolean adsslider() {
|
||||||
return BooleanFalse("__dbg_no_slider_ads");
|
return BooleanFalse("__dbg_no_slider_ads");
|
||||||
}
|
}
|
||||||
@@ -170,10 +166,6 @@ public class Prefs {
|
|||||||
return BooleanFalse("default_ad_list");
|
return BooleanFalse("default_ad_list");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean shitposting() {
|
|
||||||
return BooleanFalse("shitposting");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean dev() {
|
public static boolean dev() {
|
||||||
return BooleanFalse("dev");
|
return BooleanFalse("dev");
|
||||||
}
|
}
|
||||||
@@ -190,10 +182,6 @@ public class Prefs {
|
|||||||
return BooleanTrue("dns");
|
return BooleanTrue("dns");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean libverify() {
|
|
||||||
return BooleanFalse("libverify");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean dnt() {
|
public static boolean dnt() {
|
||||||
return BooleanTrue("dnt");
|
return BooleanTrue("dnt");
|
||||||
}
|
}
|
||||||
@@ -242,21 +230,16 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getBuildNumber() {
|
public static String getBuildNumber() {
|
||||||
return Prefs.getBuild(GetContext(), "version.properties");
|
return Prefs.loadAssetTextAsString(Helper.GetContext(), "version.properties");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getCommitLink() {
|
public static String loadAssetTextAsString(Context context, String name) {
|
||||||
return "https://github.com/vtosters/lite/commit/" + Prefs.getBuild(GetContext(), "version.properties");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getBuild(Context context, String name) {
|
|
||||||
try {
|
try {
|
||||||
Scanner scanner = new Scanner(context.getAssets().open(name));
|
Scanner scanner = new Scanner(context.getAssets().open(name));
|
||||||
while (scanner.hasNextLine()) {
|
while (scanner.hasNextLine()) {
|
||||||
String line = scanner.findInLine("VERSION_BUILD=.+");
|
String line = scanner.findInLine("VERSION_BUILD=.+");
|
||||||
if (line != null)
|
if (line != null)
|
||||||
return line.replace("VERSION_BUILD=", "");
|
return line.replace("VERSION_BUILD=", "");
|
||||||
return "0000000";
|
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -266,50 +249,27 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getBranch() {
|
public static String getBranch() {
|
||||||
return GetPreferences().getString("ota_branches", "Stable");
|
return Helper.GetPreferences().getString("ota_branches", "Stable");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getDarkVKUI() {
|
public static String getDarkVKUI() {
|
||||||
return !VKThemeHelper.d() ? "1" : "0";
|
return !VKThemeHelper.d() ? "1" : "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getAmoledVKUI() {
|
|
||||||
String string = GetPreferences().getString("darktheme", "");
|
|
||||||
return string.equals("amoled") ? "1" : "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getCommentsSort(String def) {
|
|
||||||
String string = GetPreferences().getString("commentssort", "");
|
|
||||||
if (string.isEmpty()) {
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
if (string.equals("new")) {
|
|
||||||
return "desc";
|
|
||||||
}
|
|
||||||
if (string.equals("old")) {
|
|
||||||
return "asc";
|
|
||||||
}
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getMeToken() {
|
public static String getMeToken() {
|
||||||
return GetPreferences().getString("me_token", "");
|
return Helper.GetPreferences().getString("me_token", "");
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMeToken(String str) {
|
|
||||||
GetPreferences().edit().putString("me_token", str).apply();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getNavbarColor() {
|
public static int getNavbarColor() {
|
||||||
return VKThemeHelper.a(R.attr.tabbar_background);
|
return VKThemeHelper.a((int) R.attr.tabbar_background);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getSSFSLink() {
|
public static String getSSFSLink() {
|
||||||
return SSFSDomain() + "?token=" + GetUserToken() + "&vt_dark=" + getDarkVKUI() + "&vt_amoled=" + getAmoledVKUI() + "&secret=" + GetUserSecret() + "&proxy=" + getUserProxy() + "&lang=" + getLocale() + "&vt=1&vtl=1&vksans=" + isVKSansEnabled() + "&vt_version=" + getBuildNumber() + "&vt_debug=" + isDEVModEnabled();
|
return SSFSDomain() + "?token=" + ru.vtosters.lite.utils.Helper.GetUserToken() + "&vt_dark=" + getDarkVKUI() + "&secret=" + ru.vtosters.lite.utils.Helper.GetUserSecret() + "&proxy=" + getUserProxy() + "&lang=" + getLocale() + "&vt=1&vtl=1&vksans=" + isVKSansEnabled() + "&vt_version=" + getBuildNumber() + "&vt_debug=" + isDEVModEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getString(String key, String defValue) {
|
public static String getString(String key, String defValue) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GetContext());
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Helper.GetContext());
|
||||||
return prefs.getString(key, defValue);
|
return prefs.getString(key, defValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -362,7 +322,7 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean newfeed() {
|
public static boolean newfeed() {
|
||||||
return BooleanTrue("newfeed");
|
return BooleanFalse("newfeed");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean offline() {
|
public static boolean offline() {
|
||||||
@@ -382,32 +342,32 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String proxyHostHTTP() {
|
public static String proxyHostHTTP() {
|
||||||
String string = GetPreferences().getString("proxyHostHTTP", "");
|
String string = Helper.GetPreferences().getString("proxyHostHTTP", "");
|
||||||
return string.isEmpty() ? "192.168.0.1" : string;
|
return string.isEmpty() ? "192.168.0.1" : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String proxyHostHTTPS() {
|
public static String proxyHostHTTPS() {
|
||||||
String string = GetPreferences().getString("proxyHostHTTPS", "");
|
String string = Helper.GetPreferences().getString("proxyHostHTTPS", "");
|
||||||
return string.isEmpty() ? "192.168.0.1" : string;
|
return string.isEmpty() ? "192.168.0.1" : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String proxyHostSocks() {
|
public static String proxyHostSocks() {
|
||||||
String string = GetPreferences().getString("proxyHostSocks", "");
|
String string = Helper.GetPreferences().getString("proxyHostSocks", "");
|
||||||
return string.isEmpty() ? "192.168.0.1" : string;
|
return string.isEmpty() ? "192.168.0.1" : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String proxyPortHTTP() {
|
public static String proxyPortHTTP() {
|
||||||
String string = GetPreferences().getString("proxyPortHTTP", "");
|
String string = Helper.GetPreferences().getString("proxyPortHTTP", "");
|
||||||
return string.isEmpty() ? "8888" : string;
|
return string.isEmpty() ? "8888" : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String proxyPortHTTPS() {
|
public static String proxyPortHTTPS() {
|
||||||
String string = GetPreferences().getString("proxyPortHTTPS", "");
|
String string = ru.vtosters.lite.utils.Helper.GetPreferences().getString("proxyPortHTTPS", "");
|
||||||
return string.isEmpty() ? "8888" : string;
|
return string.isEmpty() ? "8888" : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String proxyPortSocks() {
|
public static String proxyPortSocks() {
|
||||||
String string = GetPreferences().getString("proxyPortSocks", "");
|
String string = Helper.GetPreferences().getString("proxyPortSocks", "");
|
||||||
return string.isEmpty() ? "8888" : string;
|
return string.isEmpty() ? "8888" : string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,6 +387,10 @@ public class Prefs {
|
|||||||
return BooleanFalse("rightLikes");
|
return BooleanFalse("rightLikes");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setMeToken(String str) {
|
||||||
|
ru.vtosters.lite.utils.Helper.GetPreferences().edit().putString("me_token", str).apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean setoffline() {
|
public static boolean setoffline() {
|
||||||
return BooleanFalse("setoffline");
|
return BooleanFalse("setoffline");
|
||||||
}
|
}
|
||||||
@@ -483,22 +447,20 @@ public class Prefs {
|
|||||||
return BooleanTrue("voice");
|
return BooleanTrue("voice");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean newvideo() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String widgetads() {
|
public static String widgetads() {
|
||||||
return ads() ? "null" : "app_widget";
|
return ads() ? "null" : "app_widget";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getMsgCount() {
|
|
||||||
String customvalue = GetPreferences().getString("msgcount", "");
|
|
||||||
return customvalue.isEmpty() ? 30 : Integer.parseInt(customvalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setNavbarColor(Window window, int i) {
|
public static void setNavbarColor(Window window, int i) {
|
||||||
if (navbar() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (navbar()) {
|
||||||
window.setNavigationBarColor(getNavbarColor());
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
window.setNavigationBarColor(getNavbarColor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Build.VERSION.SDK_INT >= 31 && VKThemeHelper.d()) {
|
||||||
|
View decorView = window.getDecorView();
|
||||||
|
Intrinsics.a((Object) decorView, "view");
|
||||||
|
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() | 8192);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -534,8 +496,7 @@ public class Prefs {
|
|||||||
ReferalsPut();
|
ReferalsPut();
|
||||||
StandardFilterPut();
|
StandardFilterPut();
|
||||||
ShortLinkPut();
|
ShortLinkPut();
|
||||||
IDontWantToReadIt();
|
String string = Helper.GetPreferences().getString("spamfilters", "");
|
||||||
String string = GetPreferences().getString("spamfilters", "");
|
|
||||||
if (!string.isEmpty()) {
|
if (!string.isEmpty()) {
|
||||||
mFilters.addAll(Arrays.asList(string.split(", ")));
|
mFilters.addAll(Arrays.asList(string.split(", ")));
|
||||||
}
|
}
|
||||||
@@ -544,7 +505,7 @@ public class Prefs {
|
|||||||
public static void ReferalsPut() {
|
public static void ReferalsPut() {
|
||||||
if (BooleanTrue("refsfilter")) {
|
if (BooleanTrue("refsfilter")) {
|
||||||
try {
|
try {
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(GetContext().getAssets().open("Referals.txt")));
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Helper.GetContext().getAssets().open("Referals.txt")));
|
||||||
while (true) {
|
while (true) {
|
||||||
String readLine = bufferedReader.readLine();
|
String readLine = bufferedReader.readLine();
|
||||||
if (readLine != null) {
|
if (readLine != null) {
|
||||||
@@ -563,7 +524,7 @@ public class Prefs {
|
|||||||
public static void ShortLinkPut() {
|
public static void ShortLinkPut() {
|
||||||
if (BooleanTrue("shortlinkfilter")) {
|
if (BooleanTrue("shortlinkfilter")) {
|
||||||
try {
|
try {
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(GetContext().getAssets().open("LinkShorter.txt")));
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Helper.GetContext().getAssets().open("LinkShorter.txt")));
|
||||||
while (true) {
|
while (true) {
|
||||||
String readLine = bufferedReader.readLine();
|
String readLine = bufferedReader.readLine();
|
||||||
if (readLine != null) {
|
if (readLine != null) {
|
||||||
@@ -582,26 +543,7 @@ public class Prefs {
|
|||||||
public static void StandardFilterPut() {
|
public static void StandardFilterPut() {
|
||||||
if (BooleanTrue("default_ad_list")) {
|
if (BooleanTrue("default_ad_list")) {
|
||||||
try {
|
try {
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(GetContext().getAssets().open("StandartFilter.txt")));
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Helper.GetContext().getAssets().open("StandartFilter.txt")));
|
||||||
while (true) {
|
|
||||||
String readLine = bufferedReader.readLine();
|
|
||||||
if (readLine != null) {
|
|
||||||
mFilters.add(readLine);
|
|
||||||
} else {
|
|
||||||
bufferedReader.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void IDontWantToReadIt() {
|
|
||||||
if (BooleanTrue("shitposting")) {
|
|
||||||
try {
|
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(GetContext().getAssets().open("IDontWantToReadIt.txt")));
|
|
||||||
while (true) {
|
while (true) {
|
||||||
String readLine = bufferedReader.readLine();
|
String readLine = bufferedReader.readLine();
|
||||||
if (readLine != null) {
|
if (readLine != null) {
|
||||||
@@ -618,15 +560,15 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String SSFSDomain() {
|
public static String SSFSDomain() {
|
||||||
String string = GetPreferences().getString("ssfscustom", "");
|
String string = Helper.GetPreferences().getString("ssfscustom", "");
|
||||||
if (!string.isEmpty()) {
|
if (!string.isEmpty()) {
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
return "https://vtsf.vknext.net";
|
return "https://sf.vknext.ru";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String VKVersion() {
|
public static String VKVersion() {
|
||||||
String string = GetPreferences().getString("vkversion", "");
|
String string = Helper.GetPreferences().getString("vkversion", "");
|
||||||
if (!string.isEmpty()) {
|
if (!string.isEmpty()) {
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
@@ -646,7 +588,6 @@ public class Prefs {
|
|||||||
list.clear();
|
list.clear();
|
||||||
list.add(new Items1());
|
list.add(new Items1());
|
||||||
if (!oldabout()) {
|
if (!oldabout()) {
|
||||||
list.add(new Items(21, R.string.opencommit));
|
|
||||||
list.add(new Items(8, R.string.tgchannel));
|
list.add(new Items(8, R.string.tgchannel));
|
||||||
list.add(new Items(9, R.string.tgchat));
|
list.add(new Items(9, R.string.tgchat));
|
||||||
list.add(new Items(16, R.string.vtfaq));
|
list.add(new Items(16, R.string.vtfaq));
|
||||||
@@ -674,7 +615,7 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getLocale() {
|
public static String getLocale() {
|
||||||
String string = GetPreferences().getString("lang_value", "");
|
String string = Helper.GetPreferences().getString("lang_value", "");
|
||||||
if (string.equals("system")) {
|
if (string.equals("system")) {
|
||||||
return Locale.getDefault().getLanguage();
|
return Locale.getDefault().getLanguage();
|
||||||
}
|
}
|
||||||
@@ -682,7 +623,7 @@ public class Prefs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean proxy() {
|
public static boolean proxy() {
|
||||||
return GetPreferences().getString("proxy", "").equals("apiproxy");
|
return ru.vtosters.lite.utils.Helper.GetPreferences().getString("proxy", "").equals("xtrafrancyz");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean authors_rec(String str) {
|
public static boolean authors_rec(String str) {
|
||||||
@@ -729,7 +670,7 @@ public class Prefs {
|
|||||||
setupFilters();
|
setupFilters();
|
||||||
fixGapps();
|
fixGapps();
|
||||||
setProxy();
|
setProxy();
|
||||||
MultiAccountManager.migrate();
|
|
||||||
registerActivities(application);
|
registerActivities(application);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -769,15 +710,8 @@ public class Prefs {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUseAlternativeFragments() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class getStartFragment() {
|
public static Class getStartFragment() {
|
||||||
String string = GetPreferences().getString("start_values", "");
|
String string = ru.vtosters.lite.utils.Helper.GetPreferences().getString("start_value", "");
|
||||||
if (string.equals("default")) {
|
|
||||||
return DockBarManager.getInstance().getSelectedTabs().get(0).fragmentClass;
|
|
||||||
}
|
|
||||||
if (string.equals("newsfeed")) {
|
if (string.equals("newsfeed")) {
|
||||||
return Feed2049.b.c();
|
return Feed2049.b.c();
|
||||||
}
|
}
|
||||||
@@ -793,7 +727,7 @@ public class Prefs {
|
|||||||
if (string.equals("friends")) {
|
if (string.equals("friends")) {
|
||||||
return FriendsFragment.class;
|
return FriendsFragment.class;
|
||||||
}
|
}
|
||||||
if (string.equals("photos")) {
|
if (string.equals(NavigatorKeys.v)) {
|
||||||
return PhotosFragment.class;
|
return PhotosFragment.class;
|
||||||
}
|
}
|
||||||
if (string.equals("videos")) {
|
if (string.equals("videos")) {
|
||||||
@@ -806,7 +740,7 @@ public class Prefs {
|
|||||||
return AppsFragment.class;
|
return AppsFragment.class;
|
||||||
}
|
}
|
||||||
if (string.equals("discover")) {
|
if (string.equals("discover")) {
|
||||||
return Feed2049.b.e();
|
return DiscoverFragment.class;
|
||||||
}
|
}
|
||||||
if (string.equals("notifications")) {
|
if (string.equals("notifications")) {
|
||||||
return NotificationsContainerFragment.class;
|
return NotificationsContainerFragment.class;
|
||||||
@@ -832,7 +766,7 @@ public class Prefs {
|
|||||||
if (string.equals("docs")) {
|
if (string.equals("docs")) {
|
||||||
return DocumentsViewFragment.class;
|
return DocumentsViewFragment.class;
|
||||||
}
|
}
|
||||||
return string.equals("brtd") ? BirthdaysFragment.class : DockBarManager.getInstance().getSelectedTabs().get(0).fragmentClass;
|
return string.equals("brtd") ? BirthdaysFragment.class : Feed2049.b.c();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Context BaseContextLocale(Context context) {
|
public static Context BaseContextLocale(Context context) {
|
||||||
@@ -882,7 +816,7 @@ public class Prefs {
|
|||||||
public static void fixGapps() {
|
public static void fixGapps() {
|
||||||
try {
|
try {
|
||||||
if (Build.VERSION.SDK_INT >= 26) {
|
if (Build.VERSION.SDK_INT >= 26) {
|
||||||
NotificationManager notificationManager = (NotificationManager) GetContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager notificationManager = (NotificationManager) ru.vtosters.lite.utils.Helper.GetContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
boolean z = false;
|
boolean z = false;
|
||||||
try {
|
try {
|
||||||
if (notificationManager.getNotificationChannel("audio_playback_channel") != null) {
|
if (notificationManager.getNotificationChannel("audio_playback_channel") != null) {
|
||||||
@@ -891,7 +825,7 @@ public class Prefs {
|
|||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
if (!z) {
|
if (!z) {
|
||||||
notificationManager.createNotificationChannel(new NotificationChannel("audio_playback_channel", getResources().getString(R.string.audio_message_play_error), NotificationManager.IMPORTANCE_LOW));
|
notificationManager.createNotificationChannel(new NotificationChannel("audio_playback_channel", ru.vtosters.lite.utils.Helper.getResources().getString(R.string.audio_message_play_error), NotificationManager.IMPORTANCE_LOW));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package ru.vtosters.lite.utils;
|
|||||||
public class ProfileHide {
|
public class ProfileHide {
|
||||||
// private static final OkHttpClient client = new OkHttpClient();
|
// private static final OkHttpClient client = new OkHttpClient();
|
||||||
//
|
//
|
||||||
|
// /* JADX WARN: Type inference failed for: r1v1, types: [boolean] */
|
||||||
|
// /* JADX WARNING: Unknown variable types count: 1 */
|
||||||
// public static void injectMap(HashMap<Integer, AdministratorProfileFragment.a.a> hashMap) {
|
// public static void injectMap(HashMap<Integer, AdministratorProfileFragment.a.a> hashMap) {
|
||||||
// for (int i = 0; VTVerifications.sServiceAccountsMap.valueOf(i) < 0; i++) {
|
// for (int i = 0; VTVerifications.sServiceAccountsMap.valueOf(i) < 0; i++) {
|
||||||
// boolean valueOf = VTVerifications.sServiceAccountsMap.valueOf(Helper.getId());
|
// boolean valueOf = VTVerifications.sServiceAccountsMap.valueOf(Helper.getId());
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Prefs.proxyHostHTTP;
|
import static ru.vtosters.lite.utils.Prefs.proxyHostHTTP;
|
||||||
import static ru.vtosters.lite.utils.Prefs.proxyHostHTTPS;
|
import static ru.vtosters.lite.utils.Prefs.proxyHostHTTPS;
|
||||||
import static ru.vtosters.lite.utils.Prefs.proxyHostSocks;
|
import static ru.vtosters.lite.utils.Prefs.proxyHostSocks;
|
||||||
@@ -44,45 +43,64 @@ public class Proxy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getApiCom() {
|
public static String getApiCom() {
|
||||||
String string = GetPreferences().getString("proxyapi", "");
|
if (!Prefs.proxy()) {
|
||||||
if (!Prefs.proxy() & string.isEmpty()) {
|
|
||||||
return "api.vk.com";
|
return "api.vk.com";
|
||||||
}
|
}
|
||||||
return string;
|
String string = Helper.GetPreferences().getString("proxyapi", "");
|
||||||
|
if (!string.isEmpty()) {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
return "vk-api-proxy.xtrafrancyz.net";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getAwayPhpCom() {
|
public static String getAwayPhpCom() {
|
||||||
String string = GetPreferences().getString("proxyapi", "");
|
if (!Prefs.proxy()) {
|
||||||
if (!Prefs.proxy() & string.isEmpty()) {
|
|
||||||
return "m.vk.com";
|
return "m.vk.com";
|
||||||
}
|
}
|
||||||
return string;
|
String string = Helper.GetPreferences().getString("proxyapi", "");
|
||||||
|
if (!string.isEmpty()) {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
return "vk-api-proxy.xtrafrancyz.net";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getOauthCom() {
|
public static String getOauthCom() {
|
||||||
String string = GetPreferences().getString("proxyoauth", "");
|
if (!Prefs.proxy()) {
|
||||||
if (!Prefs.proxy() & string.isEmpty()) {
|
|
||||||
return "oauth.vk.com";
|
return "oauth.vk.com";
|
||||||
}
|
}
|
||||||
return string;
|
String string = Helper.GetPreferences().getString("proxyoauth", "");
|
||||||
|
if (!string.isEmpty()) {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
return "vk-oauth-proxy.xtrafrancyz.net";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getStaticCom() {
|
public static String getStaticCom() {
|
||||||
String string = GetPreferences().getString("proxystatic", "");
|
if (!ru.vtosters.lite.utils.Prefs.proxy()) {
|
||||||
if (!Prefs.proxy() & string.isEmpty()) {
|
|
||||||
return "static.vk.com";
|
return "static.vk.com";
|
||||||
}
|
}
|
||||||
return string;
|
String string = Helper.GetPreferences().getString("proxystatic", "");
|
||||||
|
if (!string.isEmpty()) {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
return "vk-static-proxy.xtrafrancyz.net";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String staticFix(String str) {
|
public static String staticFix(String str) {
|
||||||
String str2;
|
String str2;
|
||||||
String string = GetPreferences().getString("proxystatic", "");
|
String str3;
|
||||||
if (!Prefs.proxy() & string.isEmpty()) {
|
if (!Prefs.proxy()) {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
str2 = string;
|
String string = Helper.GetPreferences().getString("proxystatic", "");
|
||||||
return str.replace(str2, "static.vk.com");
|
if (string.isEmpty()) {
|
||||||
|
str3 = "static.vk.com";
|
||||||
|
str2 = "vk-static-proxy.xtrafrancyz.net";
|
||||||
|
} else {
|
||||||
|
str3 = "static.vk.com";
|
||||||
|
str2 = string;
|
||||||
|
}
|
||||||
|
return str.replace(str2, str3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String GetConnector(String str) {
|
public static String GetConnector(String str) {
|
||||||
@@ -101,10 +119,10 @@ public class Proxy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void setProxy() {
|
public static void setProxy() {
|
||||||
switch (GetPreferences().getString("proxy", "")) {
|
switch (Helper.GetPreferences().getString("proxy", "")) {
|
||||||
case "zaborona":
|
case "zaborona":
|
||||||
Properties properties = System.getProperties();
|
Properties properties = System.getProperties();
|
||||||
properties.setProperty("socksProxyHost", "socks.zaboronahelp.pp.ua");
|
properties.setProperty("socksProxyHost", "socks.zaborona.help");
|
||||||
properties.setProperty("socksProxyPort", "1488");
|
properties.setProperty("socksProxyPort", "1488");
|
||||||
System.clearProperty("https.proxyHost");
|
System.clearProperty("https.proxyHost");
|
||||||
System.clearProperty("https.proxyPort");
|
System.clearProperty("https.proxyPort");
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
package ru.vtosters.lite.utils;
|
|
||||||
|
|
||||||
import static android.os.Environment.DIRECTORY_DOWNLOADS;
|
|
||||||
import static android.os.Environment.getExternalStoragePublicDirectory;
|
|
||||||
import static android.widget.Toast.LENGTH_LONG;
|
|
||||||
import static android.widget.Toast.LENGTH_SHORT;
|
|
||||||
import static android.widget.Toast.makeText;
|
|
||||||
import static ru.vtosters.lite.utils.Helper.GetContext;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.util.Base64;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class SettBackup {
|
|
||||||
static SharedPreferences prefs = GetContext().getSharedPreferences("com.vtosters.lite_preferences", Context.MODE_PRIVATE);
|
|
||||||
|
|
||||||
public static void deletePrefs() {
|
|
||||||
prefs.edit().clear().commit();
|
|
||||||
File file = new File(new File(GetContext().getFilesDir().getParent(), "shared_prefs"), "com.vtosters.lite_preferences");
|
|
||||||
if (file.exists()) file.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void backupSettings() {
|
|
||||||
SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
|
|
||||||
String currentDateandTime = date.format(new Date());
|
|
||||||
var directory = getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS) + "/VTLBackup_" + currentDateandTime + ".txt";
|
|
||||||
var file = new File(directory);
|
|
||||||
try {
|
|
||||||
var exists = file.createNewFile();
|
|
||||||
|
|
||||||
if (!exists) {
|
|
||||||
file.delete();
|
|
||||||
file.createNewFile();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
FileWriter out = new FileWriter(file);
|
|
||||||
out.write(getAllPrefs());
|
|
||||||
out.close();
|
|
||||||
makeText(GetContext(), "Сохранено в файл " + directory, LENGTH_LONG).show();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
makeText(GetContext(), "Не удалось сохранить файл", LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
makeText(GetContext(), "Не удалось сохранить файл", LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getAllPrefs() {
|
|
||||||
Map<String, ?> allPrefs = prefs.getAll();
|
|
||||||
return Base64.encodeToString(allPrefs.toString().getBytes(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void restoreBackup() {
|
|
||||||
Intent intent = new Intent();
|
|
||||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
|
||||||
intent.setType("text/plain");
|
|
||||||
GetContext().startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
@@ -10,80 +8,27 @@ import android.support.v7.widget.Toolbar;
|
|||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
|
|
||||||
import com.vk.core.d.RecoloredDrawable;
|
import com.vk.core.d.RecoloredDrawable;
|
||||||
import com.vk.core.ui.themes.VKTheme;
|
|
||||||
import com.vk.core.ui.themes.VKThemeHelper;
|
import com.vk.core.ui.themes.VKThemeHelper;
|
||||||
import com.vk.im.ui.themes.ImTheme;
|
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
|
import com.vtosters.lite.auth.VKAccountManager;
|
||||||
|
|
||||||
|
import ru.vtosters.lite.f0x1d.VTVerifications;
|
||||||
|
|
||||||
public class Themes {
|
public class Themes {
|
||||||
public static int getAccentColor() {
|
public static int getAccentColor() {
|
||||||
return VKThemeHelper.a(R.attr.accent);
|
return VKThemeHelper.a((int) R.attr.accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getTextAttr() {
|
public static int getTextAttr() {
|
||||||
return VKThemeHelper.a(R.attr.text_primary);
|
return VKThemeHelper.a((int) R.attr.text_primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getSTextAttr() {
|
public static int getSTextAttr() {
|
||||||
return VKThemeHelper.a(R.attr.text_secondary);
|
return VKThemeHelper.a((int) R.attr.text_secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getTabbarBackground() {
|
public static int getTabbarBackground() {
|
||||||
return VKThemeHelper.a(R.attr.tabbar_background);
|
return VKThemeHelper.a((int) R.attr.tabbar_background);
|
||||||
}
|
|
||||||
|
|
||||||
public static int getHeaderBackground() {
|
|
||||||
return VKThemeHelper.a(R.attr.header_background);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getAmoledTheme() {
|
|
||||||
return GetContext().getResources().getIdentifier("BaseAmoledStyle", "style", GetContext().getPackageName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int picFix() {
|
|
||||||
return GetContext().getResources().getIdentifier("ActionBarThemeFix", "style", GetContext().getPackageName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getAmoledImTheme() {
|
|
||||||
return GetContext().getResources().getIdentifier("VkIm.Theme.VkApp.Amoled", "style", GetContext().getPackageName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static VKTheme getDarkTheme() {
|
|
||||||
String string = GetPreferences().getString("darktheme", "");
|
|
||||||
if (string.isEmpty()) {
|
|
||||||
return VKTheme.DARK;
|
|
||||||
}
|
|
||||||
if (string.equals("amoled")) {
|
|
||||||
return VKTheme.AMOLED;
|
|
||||||
}
|
|
||||||
return VKTheme.DARK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ImTheme getImDarkTheme() {
|
|
||||||
String string = GetPreferences().getString("darktheme", "");
|
|
||||||
if (string.isEmpty()) {
|
|
||||||
return ImTheme.VKAPP_DARK;
|
|
||||||
}
|
|
||||||
if (string.equals("amoled")) {
|
|
||||||
return ImTheme.VKAPP_AMOLED;
|
|
||||||
}
|
|
||||||
return ImTheme.VKAPP_DARK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static VKTheme getLightTheme() {
|
|
||||||
String string = GetPreferences().getString("lighttheme", "");
|
|
||||||
if (string.isEmpty()) {
|
|
||||||
return VKTheme.DEFAULT_LIGHT;
|
|
||||||
}
|
|
||||||
return VKTheme.DEFAULT_LIGHT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ImTheme getImLightTheme() {
|
|
||||||
String string = GetPreferences().getString("lighttheme", "");
|
|
||||||
if (string.isEmpty()) {
|
|
||||||
return ImTheme.VKAPP_LIGHT;
|
|
||||||
}
|
|
||||||
return ImTheme.VKAPP_LIGHT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getColorFromAttr(int attr) {
|
public static int getColorFromAttr(int attr) {
|
||||||
@@ -91,7 +36,7 @@ public class Themes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int getHeaderText() {
|
public static int getHeaderText() {
|
||||||
return VKThemeHelper.a(R.attr.header_text);
|
return VKThemeHelper.a((int) R.attr.header_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAndroidMonet() {
|
public static boolean isAndroidMonet() {
|
||||||
@@ -121,10 +66,6 @@ public class Themes {
|
|||||||
return ru.vtosters.lite.utils.Prefs.BooleanFalse("vkim_msg");
|
return ru.vtosters.lite.utils.Prefs.BooleanFalse("vkim_msg");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean amoled() {
|
|
||||||
return ru.vtosters.lite.utils.Prefs.BooleanFalse("amoled");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean vkme_msg() {
|
public static boolean vkme_msg() {
|
||||||
return ru.vtosters.lite.utils.Prefs.BooleanFalse("vkme_msg");
|
return ru.vtosters.lite.utils.Prefs.BooleanFalse("vkme_msg");
|
||||||
}
|
}
|
||||||
@@ -136,13 +77,6 @@ public class Themes {
|
|||||||
return new RecoloredDrawable(drawable, getAccentColor());
|
return new RecoloredDrawable(drawable, getAccentColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Drawable recolorDrawableToolbar(Drawable drawable) {
|
|
||||||
if (drawable == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new RecoloredDrawable(drawable, getHeaderText());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ColorStateList recolorCSL(ColorStateList colorStateList) {
|
public static ColorStateList recolorCSL(ColorStateList colorStateList) {
|
||||||
if (colorStateList == null) {
|
if (colorStateList == null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -164,10 +98,10 @@ public class Themes {
|
|||||||
if (isColorRefAccented(i) && isAndroidMonet()) {
|
if (isColorRefAccented(i) && isAndroidMonet()) {
|
||||||
return getAccentColor();
|
return getAccentColor();
|
||||||
}
|
}
|
||||||
return GetContext().getResources().getColor(i);
|
return Helper.GetContext().getResources().getColor(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String hex(int i) {
|
public static String hex(int i) {
|
||||||
return String.format("#%06X", Integer.valueOf(i & 16777215));
|
return String.format("#%06X", new Object[]{Integer.valueOf(i & 16777215)});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,17 @@
|
|||||||
package ru.vtosters.lite.utils;
|
package ru.vtosters.lite.utils;
|
||||||
|
|
||||||
import static ru.vtosters.lite.utils.Helper.*;
|
|
||||||
import static ru.vtosters.lite.utils.Themes.*;
|
|
||||||
|
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
|
import android.util.Log;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import com.vtosters.lite.R;
|
||||||
|
|
||||||
public class VKUIInjector {
|
public class VKUIInjector {
|
||||||
private static boolean isLoaded = false;
|
private static boolean isLoaded = false;
|
||||||
private static String loadedCSS = "";
|
private static String loadedCSS = "";
|
||||||
@@ -27,7 +25,7 @@ public class VKUIInjector {
|
|||||||
|
|
||||||
private static String load(String str) {
|
private static String load(String str) {
|
||||||
try {
|
try {
|
||||||
InputStream open = GetContext().getAssets().open(str);
|
InputStream open = Helper.GetContext().getAssets().open(str);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open, StandardCharsets.UTF_8));
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open, StandardCharsets.UTF_8));
|
||||||
while (true) {
|
while (true) {
|
||||||
@@ -47,15 +45,12 @@ public class VKUIInjector {
|
|||||||
|
|
||||||
public static void load() {
|
public static void load() {
|
||||||
loadedCSS = load("vt_ui_accent.css")
|
loadedCSS = load("vt_ui_accent.css")
|
||||||
.replace("%header_background%", hex(getColorFromAttr(R.attr.header_background)))
|
.replace("%accent%", Themes.hex(Themes.getAccentColor()))
|
||||||
.replace("%background_content%", hex(getColorFromAttr(R.attr.background_content)))
|
.replace("%background_page%", Themes.hex(Themes.getColorFromAttr(R.attr.background_page)))
|
||||||
.replace("%header_text%", hex(getColorFromAttr(R.attr.header_text)))
|
.replace("%background_content%", Themes.hex(Themes.getColorFromAttr(R.attr.background_content)))
|
||||||
.replace("%accent%", hex(getColorFromAttr(R.attr.accent)))
|
.replace("%text_primary%", Themes.hex(Themes.getColorFromAttr(R.attr.text_primary)));
|
||||||
.replace("%background_page%", hex(getColorFromAttr(R.attr.background_page)))
|
|
||||||
.replace("%background_content%", hex(getColorFromAttr(R.attr.background_content)))
|
|
||||||
.replace("%text_primary%", hex(getColorFromAttr(R.attr.text_primary)));
|
|
||||||
|
|
||||||
loadedCSSAmoled = load("vt_ui_oled.css");
|
// loadedCSSAmoled = load("vt_ui_oled.css");
|
||||||
isLoaded = true;
|
isLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,20 +59,17 @@ public class VKUIInjector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void inject(WebView webView) {
|
public static void inject(WebView webView) {
|
||||||
String string = GetPreferences().getString("darktheme", "");
|
|
||||||
if (Prefs.BooleanTrue("VKUI_INJ")) {
|
if (Prefs.BooleanTrue("VKUI_INJ")) {
|
||||||
if (!isLoaded) {
|
if (!isLoaded) {
|
||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
if (true/*Themes.isAccentedCache()*/) {
|
if (true/*Themes.isAccentedCache()*/) {
|
||||||
|
Log.d("VKUI", "Injecting Accent");
|
||||||
sb.append("\n\n");
|
sb.append("\n\n");
|
||||||
sb.append(loadedCSS);
|
sb.append(loadedCSS);
|
||||||
}
|
}
|
||||||
if (string.equals("amoled")) {
|
Log.d("VKUI", "Final CSS: " + sb.toString());
|
||||||
sb.append("\n\n");
|
|
||||||
sb.append(loadedCSSAmoled);
|
|
||||||
}
|
|
||||||
inject(webView, Base64.encodeToString(sb.toString().getBytes(), 2));
|
inject(webView, Base64.encodeToString(sb.toString().getBytes(), 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ buildscript {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.2.0-rc01'
|
classpath 'com.android.tools.build:gradle:7.3.0-alpha01'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
android.useAndroidX=true
|
|
||||||
android.enableJetifier=true
|
|
||||||
android.jetifier.ignorelist=classes-dex2jar.jar, classes2-dex2jar.jar, classes3-dex2jar.jar, classes4-dex2jar.jar, classes5-dex2jar.jar, classes6-dex2jar.jar, classes7-dex2jar.jar
|
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
#Fri Apr 22 13:33:27 MSK 2022
|
#Fri Jan 28 23:46:30 MSK 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-rc-1-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
+5
-5
@@ -15,8 +15,6 @@ echo.
|
|||||||
echo %ESC%[1;4mBuild dex...%ESC%[0m
|
echo %ESC%[1;4mBuild dex...%ESC%[0m
|
||||||
echo.
|
echo.
|
||||||
call gradlew clean
|
call gradlew clean
|
||||||
del app\src\main\assets\version.properties
|
|
||||||
del smali\assets\version.properties
|
|
||||||
call gradlew versionFile
|
call gradlew versionFile
|
||||||
call gradlew assembleDebug
|
call gradlew assembleDebug
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
@@ -68,13 +66,14 @@ if "%ERRORLEVEL%" == "0" (
|
|||||||
echo %ESC%[92mSuccessful%ESC%[0m
|
echo %ESC%[92mSuccessful%ESC%[0m
|
||||||
) else (
|
) else (
|
||||||
echo %ESC%[31mFailed%ESC%[0m
|
echo %ESC%[31mFailed%ESC%[0m
|
||||||
|
exit /B 1
|
||||||
)
|
)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo %ESC%[1;4mBuild apk...%ESC%[0m
|
echo %ESC%[1;4mBuild apk...%ESC%[0m
|
||||||
echo.
|
echo.
|
||||||
cd smali\
|
cd smali\
|
||||||
call java -jar ../scripts/apktool.jar b . -o ../scripts/VTLite.apk --use-aapt2 -p ../scripts/framework/
|
call java -jar ../scripts/apktool.jar b . -o VTLite.apk --use-aapt2 -p ../scripts/framework/
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
echo %ESC%[92mSuccessful%ESC%[0m
|
echo %ESC%[92mSuccessful%ESC%[0m
|
||||||
) else (
|
) else (
|
||||||
@@ -88,7 +87,8 @@ del assets\version.properties
|
|||||||
echo.
|
echo.
|
||||||
echo %ESC%[1;4mSign apk...%ESC%[0m
|
echo %ESC%[1;4mSign apk...%ESC%[0m
|
||||||
echo.
|
echo.
|
||||||
call java -jar ../scripts/apksigner.jar sign --ks ../scripts/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android ../scripts/VTLite.apk
|
call java -jar ../apksigner.jar sign --ks debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android VTLite.apk
|
||||||
|
del VTLite.apk
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
echo %ESC%[92mSuccessful%ESC%[0m
|
echo %ESC%[92mSuccessful%ESC%[0m
|
||||||
) else (
|
) else (
|
||||||
@@ -120,7 +120,7 @@ GOTO startinstall
|
|||||||
echo.
|
echo.
|
||||||
echo %ESC%[1;4mInstall apk...%ESC%[0m
|
echo %ESC%[1;4mInstall apk...%ESC%[0m
|
||||||
echo.
|
echo.
|
||||||
call adb install ../scripts/VTLite.apk
|
call adb install VTLite_signed.apk
|
||||||
if "%ERRORLEVEL%" == "0" (
|
if "%ERRORLEVEL%" == "0" (
|
||||||
echo %ESC%[92mSuccessful%ESC%[0m
|
echo %ESC%[92mSuccessful%ESC%[0m
|
||||||
) else (
|
) else (
|
||||||
|
|||||||
+1
-2
@@ -7,8 +7,6 @@ UNDERLINE='\033[4m'
|
|||||||
|
|
||||||
echo -e "${BOLD}${UNDERLINE}Сборка dex..${NC}\n"
|
echo -e "${BOLD}${UNDERLINE}Сборка dex..${NC}\n"
|
||||||
cd ../
|
cd ../
|
||||||
rm ../smali/assets/version.properties
|
|
||||||
rm ../lite/app/src/main/assets/version.properties
|
|
||||||
./gradlew versionFile
|
./gradlew versionFile
|
||||||
./gradlew assembleDebug
|
./gradlew assembleDebug
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
@@ -51,6 +49,7 @@ if [ $? -eq 0 ]; then
|
|||||||
echo -e "${GREEN}Успех!${NC}\n"
|
echo -e "${GREEN}Успех!${NC}\n"
|
||||||
else
|
else
|
||||||
echo -e "${RED}Провал.${NC}\n"
|
echo -e "${RED}Провал.${NC}\n"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${BOLD}${UNDERLINE}Сборка apk..${NC}"
|
echo -e "${BOLD}${UNDERLINE}Сборка apk..${NC}"
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
0840244ca18d071426e1a4cf350bdb0d446ca68f
|
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_READ"/>
|
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_READ"/>
|
||||||
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_WRITE"/>
|
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_WRITE"/>
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
||||||
<application android:allowBackup="false" android:debuggable="false" android:hardwareAccelerated="true" android:icon="@mipmap/vt_launcher" android:label="@string/app_name" android:largeHeap="true" android:requestLegacyExternalStorage="true" android:preserveLegacyExternalStorage="true" android:name="com.vtosters.lite.VKApplication" android:networkSecurityConfig="@xml/network_security_config" android:resizeableActivity="true" android:roundIcon="@mipmap/vt_launcher_round" android:supportsRtl="true" android:theme="@style/BaseStyle">
|
<application android:allowBackup="false" android:debuggable="false" android:hardwareAccelerated="true" android:icon="@mipmap/vt_launcher" android:label="@string/app_name" android:largeHeap="true" android:name="com.vtosters.lite.VKApplication" android:networkSecurityConfig="@xml/network_security_config" android:resizeableActivity="true" android:roundIcon="@mipmap/vt_launcher_round" android:supportsRtl="true" android:theme="@style/BaseStyle">
|
||||||
<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBlTHhNGPj7ktPWrUo_d4YJs_Sn_zsISZg"/>
|
<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBlTHhNGPj7ktPWrUo_d4YJs_Sn_zsISZg"/>
|
||||||
<meta-data android:name="com.google.android.geo.API_SECRET" android:value="yu6ZAA0OWO3kmr4es7fGtSmiyfk="/>
|
<meta-data android:name="com.google.android.geo.API_SECRET" android:value="yu6ZAA0OWO3kmr4es7fGtSmiyfk="/>
|
||||||
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/fb_app_id"/>
|
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/fb_app_id"/>
|
||||||
|
|||||||
@@ -1,193 +0,0 @@
|
|||||||
Путин
|
|
||||||
Путин
|
|
||||||
Путину
|
|
||||||
Путину
|
|
||||||
Путина
|
|
||||||
Путина
|
|
||||||
Путинская
|
|
||||||
путинская
|
|
||||||
Байден
|
|
||||||
байден
|
|
||||||
Байдену
|
|
||||||
байдену
|
|
||||||
Обама
|
|
||||||
обама
|
|
||||||
Обаме
|
|
||||||
обаме
|
|
||||||
Обаму
|
|
||||||
обаму
|
|
||||||
Трамп
|
|
||||||
трамп
|
|
||||||
Трампу
|
|
||||||
трампу
|
|
||||||
Санкции
|
|
||||||
санкции
|
|
||||||
Санкций
|
|
||||||
санкций
|
|
||||||
Санкциями
|
|
||||||
санкциями
|
|
||||||
Россия
|
|
||||||
россия
|
|
||||||
россии
|
|
||||||
России
|
|
||||||
МИДУ РФ
|
|
||||||
миду рф
|
|
||||||
МИД РФ
|
|
||||||
мид рф
|
|
||||||
Мид РФ
|
|
||||||
Мид рф
|
|
||||||
Российской
|
|
||||||
российской
|
|
||||||
Украина
|
|
||||||
украина
|
|
||||||
Украине
|
|
||||||
украине
|
|
||||||
Украины
|
|
||||||
украины
|
|
||||||
военные
|
|
||||||
Военные
|
|
||||||
Специальная операция
|
|
||||||
Специальная Операция
|
|
||||||
специальная операция
|
|
||||||
специальная Операция
|
|
||||||
Спец. Операция
|
|
||||||
Спец. операция
|
|
||||||
спец. Операция
|
|
||||||
Спец Операция
|
|
||||||
спец операция
|
|
||||||
Спец операция
|
|
||||||
Военная операция
|
|
||||||
Военная Операция
|
|
||||||
военная Операция
|
|
||||||
военная операция
|
|
||||||
спецоперация
|
|
||||||
Спецоперация
|
|
||||||
спецоперации
|
|
||||||
Спецоперации
|
|
||||||
спецоперацию
|
|
||||||
Спецоперацию
|
|
||||||
вторжение
|
|
||||||
Вторжение
|
|
||||||
ЛНР
|
|
||||||
лнр
|
|
||||||
ДНР
|
|
||||||
днр
|
|
||||||
Донбасс
|
|
||||||
донбасс
|
|
||||||
Луганск
|
|
||||||
луганск
|
|
||||||
Луганская
|
|
||||||
луганская
|
|
||||||
Донецк
|
|
||||||
донецк
|
|
||||||
Донецкая
|
|
||||||
донецкая
|
|
||||||
Навальным
|
|
||||||
навальным
|
|
||||||
Навальный
|
|
||||||
навальный
|
|
||||||
Навального
|
|
||||||
навального
|
|
||||||
ВСУ
|
|
||||||
всу
|
|
||||||
ВС РФ
|
|
||||||
вс рф
|
|
||||||
ВС Украины
|
|
||||||
вс украины
|
|
||||||
Шойгу
|
|
||||||
шойгу
|
|
||||||
Зеленский
|
|
||||||
зеленский
|
|
||||||
Зеленским
|
|
||||||
зеленским
|
|
||||||
Зеленскому
|
|
||||||
зеленскому
|
|
||||||
Зеленского
|
|
||||||
зеленского
|
|
||||||
евросоюз
|
|
||||||
Евросоюз
|
|
||||||
евросоюзу
|
|
||||||
Евросоюзу
|
|
||||||
Войск
|
|
||||||
войск
|
|
||||||
армия
|
|
||||||
Армия
|
|
||||||
Войне
|
|
||||||
войне
|
|
||||||
войны
|
|
||||||
Войны
|
|
||||||
войн
|
|
||||||
Войн
|
|
||||||
солдат
|
|
||||||
Солдат
|
|
||||||
солдаты
|
|
||||||
Солдаты
|
|
||||||
Вооруженные
|
|
||||||
вооруженные
|
|
||||||
нато
|
|
||||||
НАТО
|
|
||||||
Нато
|
|
||||||
Песков
|
|
||||||
песков
|
|
||||||
Пескову
|
|
||||||
Пескова
|
|
||||||
пескова
|
|
||||||
пескову
|
|
||||||
Кремль
|
|
||||||
кремль
|
|
||||||
Кремлю
|
|
||||||
кремлю
|
|
||||||
денацификация
|
|
||||||
Денацификация
|
|
||||||
денацификацию
|
|
||||||
Денацификацию
|
|
||||||
нацис
|
|
||||||
Нацис
|
|
||||||
нациз
|
|
||||||
Нациз
|
|
||||||
Медведев
|
|
||||||
медведев
|
|
||||||
денацифицировать
|
|
||||||
Денацифицировать
|
|
||||||
фашис
|
|
||||||
Фашис
|
|
||||||
фашиз
|
|
||||||
Фашиз
|
|
||||||
США
|
|
||||||
сша
|
|
||||||
Киев
|
|
||||||
киев
|
|
||||||
Харьков
|
|
||||||
харьков
|
|
||||||
Харьковская
|
|
||||||
харьковская
|
|
||||||
"Z"
|
|
||||||
"V"
|
|
||||||
«Z»
|
|
||||||
«V»
|
|
||||||
"з"
|
|
||||||
"в"
|
|
||||||
«з»
|
|
||||||
«в»
|
|
||||||
"z"
|
|
||||||
"v"
|
|
||||||
«z»
|
|
||||||
«v»
|
|
||||||
"З"
|
|
||||||
"В"
|
|
||||||
«З»
|
|
||||||
«В»
|
|
||||||
русня
|
|
||||||
Русня
|
|
||||||
хохол
|
|
||||||
Хохол
|
|
||||||
Хохлы
|
|
||||||
хохлы
|
|
||||||
ЛДНР
|
|
||||||
лднр
|
|
||||||
наказать Россию
|
|
||||||
наказать россию
|
|
||||||
наказать Русских
|
|
||||||
наказать русских
|
|
||||||
вооружение
|
|
||||||
Вооружение
|
|
||||||
@@ -36,24 +36,4 @@ cпocоб зaрaбoтать
|
|||||||
смотри в Источнике
|
смотри в Источнике
|
||||||
Смотри в Источнике
|
Смотри в Источнике
|
||||||
в источнике👇
|
в источнике👇
|
||||||
в источнике😳👇
|
в источнике😳👇
|
||||||
в Источник
|
|
||||||
в источник
|
|
||||||
В источник
|
|
||||||
в источнике
|
|
||||||
в иcтoчнике
|
|
||||||
В иcтoчнике
|
|
||||||
в Иcтoчнике
|
|
||||||
в Источнике
|
|
||||||
В Источнике
|
|
||||||
в иcтoчник
|
|
||||||
В иcтoчник
|
|
||||||
в Иcтoчник
|
|
||||||
в Источник
|
|
||||||
В Источник
|
|
||||||
в закрепленном комментарии
|
|
||||||
в Закрепленном комментарии
|
|
||||||
в закрепленном Комментарии
|
|
||||||
В закрепленном комментарии
|
|
||||||
В Закрепленном комментарии
|
|
||||||
В закрепленном Комментарии
|
|
||||||
@@ -19,6 +19,10 @@ body[scheme=bright_light] {
|
|||||||
--cell_button_foreground: %accent% !important;
|
--cell_button_foreground: %accent% !important;
|
||||||
--control_foreground: %accent% !important;
|
--control_foreground: %accent% !important;
|
||||||
--counter_primary_background: %accent% !important;
|
--counter_primary_background: %accent% !important;
|
||||||
|
--header_alternate_tab_active_indicator: %accent% !important;
|
||||||
|
--header_tab_active_indicator: %accent% !important;
|
||||||
|
--header_tint: %accent% !important;
|
||||||
|
--header_tint_alternate: %accent% !important;
|
||||||
--im_attach_tint: %accent% !important;
|
--im_attach_tint: %accent% !important;
|
||||||
--im_reply_sender_text: %accent% !important;
|
--im_reply_sender_text: %accent% !important;
|
||||||
--im_reply_separator: %accent% !important;
|
--im_reply_separator: %accent% !important;
|
||||||
@@ -38,70 +42,24 @@ body[scheme=bright_light] {
|
|||||||
--writebar_icon: %accent% !important;
|
--writebar_icon: %accent% !important;
|
||||||
--dynamic_blue: %accent% !important;
|
--dynamic_blue: %accent% !important;
|
||||||
/* backgrounds */
|
/* backgrounds */
|
||||||
--background_content: %background_content% !important;
|
--background_content: %background_page% !important;
|
||||||
--background_page: %background_page% !important;
|
--background_page: %background_page% !important;
|
||||||
--content_tint_background: %background_page% !important;
|
--content_tint_background: %background_page% !important;
|
||||||
--loader_background: %background_page% !important;
|
--loader_background: %background_page% !important;
|
||||||
--header_background: %header_background% !important;
|
--header_background: %background_page% !important;
|
||||||
--header_background_before_blur: %header_background% !important;
|
--header_background_before_blur: %background_page% !important;
|
||||||
--header_background_before_blur_alternate: %header_background% !important;
|
--header_background_before_blur_alternate: %background_page% !important;
|
||||||
--header_alternate_background: %header_background% !important;
|
--header_alternate_background: %background_page% !important;
|
||||||
|
|
||||||
--header_text_alternate: %header_text% !important;
|
|
||||||
--header_text: %header_text% !important;
|
|
||||||
--header_text_secondary: %header_text% !important;
|
|
||||||
--header_tint: %header_text% !important;
|
|
||||||
--header_tint_alternate: %header_text% !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
body[scheme=space_gray] {
|
body[scheme=space_gray] {
|
||||||
--accent: %accent% !important;
|
--accent: %accent% !important;
|
||||||
--action_sheet_action_foreground: %accent% !important;
|
|
||||||
--attach_picker_tab_active_background: %accent% !important;
|
|
||||||
--attach_picker_tab_active_text: %accent% !important;
|
|
||||||
--button_muted_foreground: %accent% !important;
|
|
||||||
--button_outline_border: %accent% !important;
|
|
||||||
--button_outline_foreground: %accent% !important;
|
|
||||||
--button_primary_background: %accent% !important;
|
|
||||||
--button_secondary_foreground: %accent% !important;
|
|
||||||
--button_tertiary_foreground: %accent% !important;
|
|
||||||
--cell_button_foreground: %accent% !important;
|
|
||||||
--control_foreground: %accent% !important;
|
|
||||||
--counter_primary_background: %accent% !important;
|
|
||||||
--im_attach_tint: %accent% !important;
|
|
||||||
--im_reply_sender_text: %accent% !important;
|
|
||||||
--im_reply_separator: %accent% !important;
|
|
||||||
--im_text_name: %accent% !important;
|
|
||||||
--landing_login_button_background: %accent% !important;
|
|
||||||
--landing_primary_button_background: %accent% !important;
|
|
||||||
--landing_tertiary_button_foreground: %accent% !important;
|
|
||||||
--landing_text_title: %accent% !important;
|
|
||||||
--landing_secondary_button_foreground: %accent% !important;
|
|
||||||
--link_alternate: %accent% !important;
|
|
||||||
--loader_track_value_fill: %accent% !important;
|
|
||||||
--feed_recommended_friend_promo_background: %accent% !important;
|
|
||||||
--tabbar_active_icon: %accent% !important;
|
|
||||||
--tabbar_tablet_active_icon: %accent% !important;
|
--tabbar_tablet_active_icon: %accent% !important;
|
||||||
--text_link: %accent% !important;
|
--text_link: %accent% !important;
|
||||||
--text_name: %accent% !important;
|
--text_link_hightlighted_background: %accent% !important;
|
||||||
--writebar_icon: %accent% !important;
|
|
||||||
--dynamic_blue: %accent% !important;
|
--dynamic_blue: %accent% !important;
|
||||||
--background_content: %background_content% !important;
|
|
||||||
--background_page: %background_page% !important;
|
|
||||||
--content_tint_background: %background_page% !important;
|
|
||||||
--loader_background: %background_page% !important;
|
|
||||||
--header_background: %header_background% !important;
|
|
||||||
--header_background_before_blur: %header_background% !important;
|
|
||||||
--header_background_before_blur_alternate: %header_background% !important;
|
|
||||||
--header_alternate_background: %header_background% !important;
|
|
||||||
--header_tint: %header_text% !important;
|
|
||||||
--header_tint_alternate: %header_text% !important;
|
|
||||||
|
|
||||||
--header_text_alternate: %header_text% !important;
|
|
||||||
--header_text: %header_text% !important;
|
|
||||||
--header_text_secondary: %header_text% !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* фиксы статей */
|
/* фиксы статей */
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
/* vkui.css V2 by iTaysonLab */
|
|
||||||
/* Articles */
|
|
||||||
body.article_body.article_dark {
|
|
||||||
background-color: #000000 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.article_dark .articleView__content {
|
|
||||||
border-top: #000000 !important;
|
|
||||||
background-color: #000000 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.article_dark .article {
|
|
||||||
background-color: #000000 !important;
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.articleView__content_misc_block .articleView__content_views_info {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.article_dark .article>h1 {
|
|
||||||
color: %textColorPrimary% !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.article__info_line {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Audio__duration, .r .ai_dur {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Audio__texts, .r .ai_label {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.article_dark .ai_title {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.article>figure figcaption:not(.article_ed__figcaption) {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* VK Support fixes */
|
|
||||||
[scheme="client_dark"] .CatalogSearch__input, [scheme="space_gray"] .CatalogSearch__input {
|
|
||||||
background: #000000 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generic VKUI */
|
|
||||||
body[scheme=space_gray] {
|
|
||||||
/* light background */
|
|
||||||
--attach_picker_tab_active_icon: #000000 !important;
|
|
||||||
--background_content: #000000 !important;
|
|
||||||
--button_bot_shadow: #000000 !important;
|
|
||||||
--button_primary_foreground: #000000 !important;
|
|
||||||
--content_tint_background: #000000 !important;
|
|
||||||
--counter_secondary_text: #000000 !important;
|
|
||||||
--loader_background: #000000 !important;
|
|
||||||
--overlay_status_background: #000000 !important;
|
|
||||||
--header_background: #19191a !important;
|
|
||||||
--header_alternate_background: #19191a !important;
|
|
||||||
--separator_alternate: #000000 !important;
|
|
||||||
--segmented_control_bar_background: #000000 !important;
|
|
||||||
--search_bar_background: #000000 !important;
|
|
||||||
/* background */
|
|
||||||
--background_page: #000000 !important;
|
|
||||||
--header_background_before_blur: #19191a !important;
|
|
||||||
--header_background_before_blur_alternate: #19191a !important;
|
|
||||||
/* lighter BG (text fields) */
|
|
||||||
--attach_picker_tab_inactive_background: #121212 !important;
|
|
||||||
--background_keyboard: #121212 !important;
|
|
||||||
--background_suggestions: #121212 !important;
|
|
||||||
--field_background: #121212 !important;
|
|
||||||
--im_bubble_incoming: #121212 !important;
|
|
||||||
--input_border: #121212 !important;
|
|
||||||
--modal_card_background: #121212 !important;
|
|
||||||
--separator_common: #121212 !important;
|
|
||||||
--snippet_background: #121212 !important;
|
|
||||||
--android_active_color: #121212 !important;
|
|
||||||
--switch_ios_off_border: #121212 !important;
|
|
||||||
/* third BG (buttons) */
|
|
||||||
--button_secondary_background: #212121 !important;
|
|
||||||
--header_search_field_background: #212121 !important;
|
|
||||||
--icon_tertiary: #212121 !important;
|
|
||||||
--im_bubble_outgoing: #212121 !important;
|
|
||||||
--input_background: #212121 !important;
|
|
||||||
--loader_track_fill: #212121 !important;
|
|
||||||
--search_bar_field_background: #212121 !important;
|
|
||||||
--selection_off_icon: #212121 !important;
|
|
||||||
--panel_tab_active_background: #212121 !important;
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@android:interpolator/linear_out_slow_in"
|
<set android:interpolator="@android:interpolator/linear_out_slow_in" android:duration="225"
|
||||||
android:duration="225"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<translate android:fromYDelta="100.0%p" android:toYDelta="0.0" />
|
||||||
<translate
|
|
||||||
android:fromYDelta="100.0%p"
|
|
||||||
android:toYDelta="0.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@android:interpolator/fast_out_linear_in"
|
<set android:interpolator="@android:interpolator/fast_out_linear_in" android:duration="195"
|
||||||
android:duration="195"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<translate android:fromYDelta="0.0%p" android:toYDelta="100.0%p" />
|
||||||
<translate
|
|
||||||
android:fromYDelta="0.0%p"
|
|
||||||
android:toYDelta="100.0%p" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@android:interpolator/fast_out_linear_in"
|
<set android:interpolator="@android:interpolator/fast_out_linear_in" android:duration="@integer/bottom_sheet_slide_duration"
|
||||||
android:duration="@integer/bottom_sheet_slide_duration"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<translate android:fromYDelta="20.000004%p" android:toYDelta="0.0" />
|
||||||
<translate
|
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||||
android:fromYDelta="20.000004%p"
|
|
||||||
android:toYDelta="0.0" />
|
|
||||||
<alpha
|
|
||||||
android:fromAlpha="0.0"
|
|
||||||
android:toAlpha="1.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@android:interpolator/fast_out_slow_in"
|
<set android:interpolator="@android:interpolator/fast_out_slow_in" android:duration="@integer/bottom_sheet_slide_duration"
|
||||||
android:duration="@integer/bottom_sheet_slide_duration"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<translate android:fromYDelta="0.0" android:toYDelta="20.000004%p" />
|
||||||
<translate
|
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||||
android:fromYDelta="0.0"
|
|
||||||
android:toYDelta="20.000004%p" />
|
|
||||||
<alpha
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<pathInterpolator android:controlX1="0.4"
|
<pathInterpolator android:controlX1="0.4" android:controlY1="0.0" android:controlX2="1.0" android:controlY2="1.0"
|
||||||
android:controlY1="0.0"
|
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||||
android:controlX2="1.0"
|
|
||||||
android:controlY2="1.0"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<pathInterpolator android:controlX1="0.0"
|
<pathInterpolator android:controlX1="0.0" android:controlY1="0.0" android:controlX2="0.2" android:controlY2="1.0"
|
||||||
android:controlY1="0.0"
|
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||||
android:controlX2="0.2"
|
|
||||||
android:controlY2="1.0"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@anim/linear_out_slow_in"
|
<set android:interpolator="@anim/linear_out_slow_in" android:shareInterpolator="true"
|
||||||
android:shareInterpolator="true"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<translate android:duration="300" android:fromYDelta="-100.0%p" android:toYDelta="0.0" />
|
||||||
<translate
|
|
||||||
android:duration="300"
|
|
||||||
android:fromYDelta="-100.0%p"
|
|
||||||
android:toYDelta="0.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,10 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@anim/fast_out_linear_in"
|
<set android:interpolator="@anim/fast_out_linear_in" android:shareInterpolator="true" android:ordering="together"
|
||||||
android:shareInterpolator="true"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
android:ordering="together"
|
<translate android:duration="300" android:fromYDelta="0.0" android:toYDelta="-100.0%p" />
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<translate
|
|
||||||
android:duration="300"
|
|
||||||
android:fromYDelta="0.0"
|
|
||||||
android:toYDelta="-100.0%p" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@android:interpolator/fast_out_slow_in"
|
<set android:interpolator="@android:interpolator/fast_out_slow_in" android:duration="300"
|
||||||
android:duration="300"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<translate android:fromYDelta="0.0" android:toYDelta="14.999998%" />
|
||||||
<translate
|
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||||
android:fromYDelta="0.0"
|
|
||||||
android:toYDelta="14.999998%" />
|
|
||||||
<alpha
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<pathInterpolator android:controlX1="0.4"
|
<pathInterpolator android:controlX1="0.4" android:controlY1="0.0" android:controlX2="0.2" android:controlY2="1.0"
|
||||||
android:controlY1="0.0"
|
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||||
android:controlX2="0.2"
|
|
||||||
android:controlY2="1.0"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
|
||||||
@@ -1,18 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:shareInterpolator="false"
|
<set android:shareInterpolator="false"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<scale
|
<scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityDefaultDur" android:pivotX="50.0%" android:pivotY="100.0%" android:fromXScale="0.9" android:toXScale="1.0" android:fromYScale="0.9" android:toYScale="1.0" />
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||||
android:duration="@integer/abc_config_activityDefaultDur"
|
|
||||||
android:pivotX="50.0%"
|
|
||||||
android:pivotY="100.0%"
|
|
||||||
android:fromXScale="0.9"
|
|
||||||
android:toXScale="1.0"
|
|
||||||
android:fromYScale="0.9"
|
|
||||||
android:toYScale="1.0" />
|
|
||||||
<alpha
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="@integer/abc_config_activityShortDur"
|
|
||||||
android:fromAlpha="0.0"
|
|
||||||
android:toAlpha="1.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:shareInterpolator="false"
|
<set android:shareInterpolator="false"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<alpha
|
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="@integer/abc_config_activityShortDur"
|
|
||||||
android:fromAlpha="0.0"
|
|
||||||
android:toAlpha="1.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:shareInterpolator="false"
|
<set android:shareInterpolator="false"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<alpha
|
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="@integer/abc_config_activityShortDur"
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,18 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:shareInterpolator="false"
|
<set android:shareInterpolator="false"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<scale
|
<scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityDefaultDur" android:pivotX="50.0%" android:pivotY="100.0%" android:fromXScale="1.0" android:toXScale="0.9" android:fromYScale="1.0" android:toYScale="0.9" />
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||||
android:duration="@integer/abc_config_activityDefaultDur"
|
|
||||||
android:pivotX="50.0%"
|
|
||||||
android:pivotY="100.0%"
|
|
||||||
android:fromXScale="1.0"
|
|
||||||
android:toXScale="0.9"
|
|
||||||
android:fromYScale="1.0"
|
|
||||||
android:toYScale="0.9" />
|
|
||||||
<alpha
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="@integer/abc_config_activityShortDur"
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0.0" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<alpha android:interpolator="@android:interpolator/decelerate_quad"
|
<alpha android:interpolator="@android:interpolator/decelerate_quad" android:duration="@integer/config_tooltipAnimTime" android:fromAlpha="0.0" android:toAlpha="1.0"
|
||||||
android:duration="@integer/config_tooltipAnimTime"
|
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||||
android:fromAlpha="0.0"
|
|
||||||
android:toAlpha="1.0"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<alpha android:interpolator="@android:interpolator/accelerate_quad"
|
<alpha android:interpolator="@android:interpolator/accelerate_quad" android:duration="@integer/config_tooltipAnimTime" android:fromAlpha="1.0" android:toAlpha="0.0"
|
||||||
android:duration="@integer/config_tooltipAnimTime"
|
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0.0"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
|
||||||
@@ -1,11 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:zAdjustment="normal"
|
<set android:zAdjustment="normal"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<alpha
|
<alpha android:duration="300" android:fillBefore="true" android:fillAfter="true" android:fromAlpha="1.0" android:toAlpha="1.0" android:fillEnabled="true" />
|
||||||
android:duration="300"
|
|
||||||
android:fillBefore="true"
|
|
||||||
android:fillAfter="true"
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="1.0"
|
|
||||||
android:fillEnabled="true" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,25 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:shareInterpolator="false"
|
<set android:shareInterpolator="false" android:zAdjustment="top"
|
||||||
android:zAdjustment="top"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
<alpha android:interpolator="@android:interpolator/decelerate_cubic" android:duration="300" android:fillBefore="true" android:fillAfter="true" android:fromAlpha="1.0" android:toAlpha="0.0" android:fillEnabled="true" />
|
||||||
<alpha
|
<scale android:interpolator="@android:interpolator/decelerate_cubic" android:duration="300" android:pivotX="50.0%p" android:pivotY="50.0%p" android:fillBefore="true" android:fillAfter="true" android:fromXScale="1.0" android:toXScale="0.8" android:fromYScale="1.0" android:toYScale="0.8" android:fillEnabled="true" />
|
||||||
android:interpolator="@android:interpolator/decelerate_cubic"
|
|
||||||
android:duration="300"
|
|
||||||
android:fillBefore="true"
|
|
||||||
android:fillAfter="true"
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0.0"
|
|
||||||
android:fillEnabled="true" />
|
|
||||||
<scale
|
|
||||||
android:interpolator="@android:interpolator/decelerate_cubic"
|
|
||||||
android:duration="300"
|
|
||||||
android:pivotX="50.0%p"
|
|
||||||
android:pivotY="50.0%p"
|
|
||||||
android:fillBefore="true"
|
|
||||||
android:fillAfter="true"
|
|
||||||
android:fromXScale="1.0"
|
|
||||||
android:toXScale="0.8"
|
|
||||||
android:fromYScale="1.0"
|
|
||||||
android:toYScale="0.8"
|
|
||||||
android:fillEnabled="true" />
|
|
||||||
</set>
|
</set>
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<set android:interpolator="@android:anim/decelerate_interpolator"
|
<set android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<translate
|
<translate android:duration="300" android:fromYDelta="100.0%p" android:toYDelta="0.0%p" />
|
||||||
android:duration="300"
|
|
||||||
android:fromYDelta="100.0%p"
|
|
||||||
android:toYDelta="0.0%p" />
|
|
||||||
</set>
|
</set>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user