Compare commits
193
Commits
alpha
..
v0.1.6-beta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c7531eb652 | ||
|
|
5c1452ff57 | ||
|
|
e467044e41 | ||
|
|
5c5780f720 | ||
|
|
7119bab9c9 | ||
|
|
2eccc92510 | ||
|
|
b9e0fcdb04 | ||
|
|
5c15912b1b | ||
|
|
ac6525e49a | ||
|
|
3e67973a27 | ||
|
|
ed4e295e71 | ||
|
|
73b57399d5 | ||
|
|
9e0b67478d | ||
|
|
341eb37ff4 | ||
|
|
6d68a77e42 | ||
|
|
b50f56a5d4 | ||
|
|
e226438b09 | ||
|
|
a5db0793d6 | ||
|
|
07e1f1a1d3 | ||
|
|
de77e3484b | ||
|
|
24571ea22f | ||
|
|
515f90105c | ||
|
|
0d305dbc7e | ||
|
|
05bf888ba6 | ||
|
|
a2a53e8215 | ||
|
|
e6290b8aba | ||
|
|
aa5f6e7cbe | ||
|
|
054b447236 | ||
|
|
52db475469 | ||
|
|
6282800fdb | ||
|
|
20517fdf51 | ||
|
|
40400817c1 | ||
|
|
834e454eb2 | ||
|
|
2747c9efc8 | ||
|
|
c2cc782ee3 | ||
|
|
d414e79b6b | ||
|
|
9e0f95ed94 | ||
|
|
167da56a0b | ||
|
|
af213869c8 | ||
|
|
39b9e42f62 | ||
|
|
1aa07afabc | ||
|
|
84d7d0bef6 | ||
|
|
fbb7f2320e | ||
|
|
506f5c7597 | ||
|
|
38d3a40d7a | ||
|
|
44cb073de8 | ||
|
|
8a680e5429 | ||
|
|
16dbdc5ec3 | ||
|
|
4cece4566c | ||
|
|
2340cbbbb2 | ||
|
|
e00feded18 | ||
|
|
d7c5e88c00 | ||
|
|
7462d739f4 | ||
|
|
f1bbdeac45 | ||
|
|
178bdbf988 | ||
|
|
82a5d40a10 | ||
|
|
c888bd3f3c | ||
|
|
53f45f49c3 | ||
|
|
3c108c7520 | ||
|
|
11bce261ae | ||
|
|
5f8204c48e | ||
|
|
f6043ed413 | ||
|
|
5ab22cd5c4 | ||
|
|
ee20e461d2 | ||
|
|
9fa6513d4b | ||
|
|
e86c7b190a | ||
|
|
0b2c5dc578 | ||
|
|
55b569c057 | ||
|
|
02d6fb3b14 | ||
|
|
8ed21f8fa9 | ||
|
|
6c1a12b345 | ||
|
|
05f4462195 | ||
|
|
e4bb903391 | ||
|
|
5028fe9d7f | ||
|
|
9bca7a3598 | ||
|
|
dddb414c7d | ||
|
|
ad67bed400 | ||
|
|
5ffa2fac40 | ||
|
|
cca1bc6607 | ||
|
|
55f49d7d3a | ||
|
|
a24f8bef3d | ||
|
|
c41a0de1af | ||
|
|
d4c8b795fa | ||
|
|
47c219ad8c | ||
|
|
59b34ddf3e | ||
|
|
01f1e3993c | ||
|
|
c21cadad1d | ||
|
|
307d15ff24 | ||
|
|
5edebee51e | ||
|
|
3d936f4abd | ||
|
|
e725c05e9c | ||
|
|
5a8a33cebc | ||
|
|
da28a5feca | ||
|
|
a058e84ddb | ||
|
|
49ccf080ad | ||
|
|
176a9a89b6 | ||
|
|
40f907300d | ||
|
|
0219b14844 | ||
|
|
08acebd2c6 | ||
|
|
9bf0109c0d | ||
|
|
1f31ddd8d0 | ||
|
|
9540fb68dc | ||
|
|
432975f409 | ||
|
|
8b2acc764a | ||
|
|
f79ca38ef4 | ||
|
|
446cc973d6 | ||
|
|
a847d6a3eb | ||
|
|
67f9d9bbd9 | ||
|
|
2d49885572 | ||
|
|
a940674c6f | ||
|
|
7bbb073552 | ||
|
|
105d784b4a | ||
|
|
23eb0fef69 | ||
|
|
b9afb74a01 | ||
|
|
edfb68c946 | ||
|
|
66897e8e93 | ||
|
|
3b754b79e7 | ||
|
|
11fa834af7 | ||
|
|
d319c97430 | ||
|
|
744f9866da | ||
|
|
251746a57e | ||
|
|
b1bbfe7e1b | ||
|
|
7a911de8ca | ||
|
|
e5398cc1be | ||
|
|
b87f28f8bf | ||
|
|
5f8e16eb5d | ||
|
|
f83e1cc0b7 | ||
|
|
447bc94100 | ||
|
|
17cdb9c87b | ||
|
|
2cb35c17b2 | ||
|
|
0e0ca2a504 | ||
|
|
dca61fcd16 | ||
|
|
d0a198c6ad | ||
|
|
c1211123dd | ||
|
|
3a9d4ffa12 | ||
|
|
5855dc2abf | ||
|
|
ed3e6314d1 | ||
|
|
b83a36d41a | ||
|
|
1beaf3f436 | ||
|
|
0bb9145288 | ||
|
|
ba76a1f0fd | ||
|
|
f0732ae3c3 | ||
|
|
8a761382f0 | ||
|
|
481e3ba041 | ||
|
|
4615a174f0 | ||
|
|
18de5e9289 | ||
|
|
122c6d8b80 | ||
|
|
d00f93ee94 | ||
|
|
bbc2a8132a | ||
|
|
f4e61583fa | ||
|
|
9ee72b2c6b | ||
|
|
dd2c17e4ac | ||
|
|
e87dde9c6a | ||
|
|
83a5723dee | ||
|
|
3e6b968400 | ||
|
|
c3f9dffd50 | ||
|
|
972504202e | ||
|
|
d26b0bed38 | ||
|
|
e5b886ed21 | ||
|
|
d9e6082f1a | ||
|
|
67001e272b | ||
|
|
5534aa3fda | ||
|
|
55e73d3469 | ||
|
|
8a7b03676d | ||
|
|
0adafcb433 | ||
|
|
356eb98b94 | ||
|
|
86b5af9210 | ||
|
|
c4a5406330 | ||
|
|
857e6ff86b | ||
|
|
5bec30d2c7 | ||
|
|
c7a226999f | ||
|
|
1bea6d3f3e | ||
|
|
ffa70d5684 | ||
|
|
8de9ea9c1b | ||
|
|
f8c4393074 | ||
|
|
79cada7128 | ||
|
|
4c40edd00c | ||
|
|
20ab276cef | ||
|
|
689f2d3876 | ||
|
|
c403deb38d | ||
|
|
d90ecbb8d1 | ||
|
|
ae16a513ed | ||
|
|
7339a28d92 | ||
|
|
d544a633cc | ||
|
|
a6b78dca57 | ||
|
|
7dd78345f1 | ||
|
|
0a67c2a910 | ||
|
|
4e9475a6eb | ||
|
|
b5a6a8d027 | ||
|
|
1e1869718f | ||
|
|
ee69e29153 | ||
|
|
137ba631af | ||
|
|
aa972fa5b3 |
+2
-8
@@ -21,13 +21,7 @@ local.properties
|
||||
/smali/VTLite.apk.idsig
|
||||
.idea/gradle.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
|
||||
app/src/main/assets/version.properties
|
||||
smali/build/resources.zip
|
||||
smali/build/resources.zip
|
||||
*.idsig
|
||||
|
||||
@@ -1,9 +1,42 @@
|
||||
# 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 версии
|
||||
Скрипты для сборки лежат в папке **scripts**
|
||||
|
||||
Linux/Unix: ```./build.sh```
|
||||
Требуется установленная **Android Studio**
|
||||
|
||||
Windows: ```./build.bat```
|
||||
### Linux/macOS
|
||||
```
|
||||
./build.sh
|
||||
```
|
||||
|
||||

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

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

|
||||
@@ -3,8 +3,6 @@ package bruhcollective.itaysonlab.libvkx.client;
|
||||
import android.content.Context;
|
||||
import android.os.RemoteException;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.ILibVkxService;
|
||||
|
||||
import com.vk.core.b.PackageManagerHelper;
|
||||
import com.vk.dto.music.MusicTrack;
|
||||
import com.vk.music.PlayerRefer;
|
||||
@@ -13,12 +11,10 @@ import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
import bruhcollective.itaysonlab.libvkx.ILibVkxService;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
|
||||
/* loaded from: classes6.dex */
|
||||
public class LibVKXClient {
|
||||
private static LibVKXClientImpl impl;
|
||||
|
||||
@@ -52,8 +48,7 @@ public class LibVKXClient {
|
||||
return getInstance().runOnService(action);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
public static /* synthetic */ void lambdaplay(List list, MusicTrack musicTrack, PlayerRefer playerRefer, ILibVkxService iLibVkxService) {
|
||||
public static void lambdaplay(List list, MusicTrack musicTrack, PlayerRefer playerRefer, ILibVkxService iLibVkxService) {
|
||||
int indexOf = list.indexOf(musicTrack);
|
||||
ArrayList arrayList = new ArrayList();
|
||||
Iterator it = list.iterator();
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package com.aefyr.tsg.g2;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -10,11 +7,13 @@ import android.content.Context;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
|
||||
import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Aefyr on 20.05.2018.
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
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.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
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.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
package com.aefyr.tsg.g2;
|
||||
|
||||
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.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
@@ -7,18 +17,8 @@ import java.util.List;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
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.ui.fragments.tgstickers.StickersFragment;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
|
||||
/**
|
||||
* Created by Aefyr on 19.05.2018.
|
||||
|
||||
@@ -11,12 +11,12 @@ import android.util.Log;
|
||||
|
||||
import com.aefyr.tsg.g2.TelegramStickersPack;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Aefyr on 19.05.2018.
|
||||
*/
|
||||
@@ -94,7 +94,6 @@ public class TelegramStickersDbHelper extends SQLiteOpenHelper {
|
||||
e.printStackTrace();
|
||||
max = 0;
|
||||
}
|
||||
Log.d("sova", "Found last index: " + max);
|
||||
return max + 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,12 +9,6 @@ import android.util.Log;
|
||||
import com.aefyr.tsg.g2.stickersgrabber.util.Flag;
|
||||
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.JSONObject;
|
||||
|
||||
@@ -33,6 +27,12 @@ import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
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.
|
||||
*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,13 +7,10 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import okhttp3.Headers;
|
||||
import okhttp3.internal.Util;
|
||||
import okhttp3.internal.b.HttpMethod;
|
||||
import okhttp3.Request;
|
||||
|
||||
public final class Request {
|
||||
/* renamed from: a reason: collision with root package name */
|
||||
final HttpUrl a;
|
||||
final String b;
|
||||
final Headers c;
|
||||
@@ -85,7 +82,6 @@ public final class Request {
|
||||
|
||||
public static class Builder {
|
||||
|
||||
/* renamed from: a reason: collision with root package name */
|
||||
HttpUrl a;
|
||||
String b;
|
||||
Headers.a c;
|
||||
|
||||
@@ -51,7 +51,6 @@ public class F0x1dRequest {
|
||||
this.mIsPut = z2;
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: protected */
|
||||
public String doInBackground(Void... voidArr) {
|
||||
try {
|
||||
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(new String(this.url)).openConnection();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.f0x1d.net;
|
||||
|
||||
import android.util.Base64;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -13,8 +15,6 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import android.util.Base64;
|
||||
|
||||
public final class NetCall {
|
||||
private NetRequest req;
|
||||
private NetClient cl;
|
||||
|
||||
@@ -31,7 +31,6 @@ public class GCMFix {
|
||||
private static KeyPair pair;
|
||||
private static int rid = 0;
|
||||
|
||||
/* access modifiers changed from: private */
|
||||
public interface Callback {
|
||||
void doCallback(String str);
|
||||
}
|
||||
@@ -95,12 +94,12 @@ public class GCMFix {
|
||||
}
|
||||
}
|
||||
|
||||
static /* synthetic */ void lambdaRequestToken(StringBuilder sb, AtomicBoolean wait, String s) {
|
||||
static void lambdaRequestToken(StringBuilder sb, AtomicBoolean wait, String s) {
|
||||
sb.append(s.substring(20));
|
||||
wait.set(true);
|
||||
}
|
||||
|
||||
static /* synthetic */ void lambda$requestToken$1(String str) {
|
||||
static void lambda$requestToken$1(String str) {
|
||||
}
|
||||
|
||||
private static void fillParams(List<String> params, String sig, String pub2, String xappid, long androidId, boolean del) {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package ru.vtosters.lite.dnr;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.vk.im.engine.models.dialogs.Dialog;
|
||||
import com.vk.im.ui.components.common.DialogAction;
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package ru.vtosters.lite.dnr;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.vk.core.util.ToastUtils;
|
||||
import com.vk.im.engine.commands.messages.SetUserActivityCmd;
|
||||
import com.vk.im.engine.models.dialogs.Dialog;
|
||||
|
||||
@@ -2,7 +2,6 @@ package ru.vtosters.lite.dnr;
|
||||
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
|
||||
// Настройки Донецкой Народной Республики
|
||||
public class DNRPrefs {
|
||||
public static boolean getStoriesRead() {
|
||||
return Prefs.BooleanFalse("read_s");
|
||||
|
||||
@@ -13,8 +13,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import ru.vtosters.lite.R;
|
||||
|
||||
public class VideoDownloader {
|
||||
public static void downloadVideo(VideoFile videoFile, Context context) {
|
||||
final List<String> list = new ArrayList<>();
|
||||
@@ -66,7 +64,7 @@ public class VideoDownloader {
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
request.setTitle(videoFile.toString());
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile.s + ".mp4");
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile.toString() + ".mp4");
|
||||
((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
||||
}));
|
||||
builder.show();
|
||||
|
||||
@@ -16,8 +16,8 @@ import com.vtosters.lite.R;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.badmanners.DeviceInfoCollector;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
|
||||
public class Crashreporter {
|
||||
|
||||
@@ -9,14 +9,14 @@ import android.widget.Toast;
|
||||
import com.vk.dto.common.VerifyInfo;
|
||||
import com.vk.navigation.NavigatorKeys;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Callback;
|
||||
import okhttp3.MediaType;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.vtosters.lite.foaf;
|
||||
|
||||
import static ru.vtosters.lite.utils.Proxy.getApiCom;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@@ -9,6 +11,7 @@ import android.widget.Toast;
|
||||
import androidx.exifinterface.media.ExifInterface;
|
||||
|
||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
@@ -22,9 +25,6 @@ import java.util.regex.Pattern;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import ru.f0x1d.net.F0x1dRequest;
|
||||
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
|
||||
@@ -51,7 +51,7 @@ public class FoafBase {
|
||||
StringBuilder sb;
|
||||
if (Prefs.proxy()) {
|
||||
sb = new StringBuilder();
|
||||
str = "https://vk-api-proxy.xtrafrancyz.net/_/vk.com/foaf.php?id=";
|
||||
str = "https://" + getApiCom() + "/_/vk.com/foaf.php?id=";
|
||||
} else {
|
||||
sb = new StringBuilder();
|
||||
str = "https://vk.com/foaf.php?id=";
|
||||
@@ -71,7 +71,7 @@ public class FoafBase {
|
||||
F0x1dRequest.makeRequest(getLink(i), callback);
|
||||
}
|
||||
|
||||
static /* synthetic */ void lambdaLoadAndShow(ProgressDialog progressDialog, Context context, int i, String str) {
|
||||
static void lambdaLoadAndShow(ProgressDialog progressDialog, Context context, int i, String str) {
|
||||
try {
|
||||
progressDialog.cancel();
|
||||
Matcher matcher = FOAF_REGEX.matcher(str);
|
||||
|
||||
@@ -2,6 +2,5 @@ package ru.vtosters.lite.provider;
|
||||
|
||||
import android.support.v4.content.FileProvider;
|
||||
|
||||
/* compiled from: VKFileProvider.kt */
|
||||
public final class VKFileProvider extends FileProvider {
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package ru.vtosters.lite.tgs;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.util.Log;
|
||||
|
||||
import com.aefyr.tsg.g2.TelegramStickersPack;
|
||||
import com.aefyr.tsg.g2.TelegramStickersService;
|
||||
|
||||
@@ -8,9 +8,9 @@ import android.content.Intent;
|
||||
|
||||
import com.vk.navigation.Navigator;
|
||||
|
||||
import ru.vtosters.lite.ui.fragments.InstallGMSFragment;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
import ru.vtosters.lite.ui.fragments.InstallGMSFragment;
|
||||
|
||||
public class InstallGMS {
|
||||
public static void alert(final Activity activity) {
|
||||
|
||||
@@ -21,7 +21,6 @@ public class Start {
|
||||
builder.setMessage(getWelcome());
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Продолжить", new DialogInterface.OnClickListener() {
|
||||
/* class ru.vtosters.lite.utils.lite.dialog.Start.AnonymousClass1 */
|
||||
|
||||
@Override // android.content.DialogInterface.OnClickListener
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
@@ -29,7 +28,6 @@ public class Start {
|
||||
}
|
||||
});
|
||||
builder.setNeutralButton("Новости", new DialogInterface.OnClickListener() {
|
||||
/* class ru.vtosters.lite.utils.lite.dialog.Start.AnonymousClass2 */
|
||||
|
||||
@Override // android.content.DialogInterface.OnClickListener
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
|
||||
@@ -2,13 +2,11 @@ package ru.vtosters.lite.ui.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
import com.vtosters.lite.R;
|
||||
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
public class ActivityFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_activity);
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
public class FeedFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_feed);
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
public class InstallGMSFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_gms);
|
||||
|
||||
@@ -7,18 +7,16 @@ import com.vk.core.util.ToastUtils;
|
||||
import com.vtosters.lite.R;
|
||||
import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
/* renamed from: ru.vtosters.lite.utils.lite.ui.activities.interface reason: invalid class name */
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
|
||||
public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_interface);
|
||||
prefs();
|
||||
}
|
||||
|
||||
/* access modifiers changed from: package-private */
|
||||
/* renamed from: ru.vtosters.lite.utils.lite.ui.activities.interface$a */
|
||||
public class a implements Preference.b {
|
||||
@Override // android.support.v7.preference.Preference.b
|
||||
public boolean a(Preference preference, Object obj) {
|
||||
@@ -33,8 +31,8 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment {
|
||||
a("newfeed").a((Preference.b) new a());
|
||||
}
|
||||
|
||||
public /* synthetic */ boolean restart(Preference preference, Object obj) {
|
||||
ToastUtils.a("Пожалуйста перезапустите приложение");
|
||||
public boolean restart(Preference preference, Object obj) {
|
||||
ToastUtils.a(Helper.getString("restartapp"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
public class MessagesFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_messages);
|
||||
|
||||
@@ -23,7 +23,6 @@ import ru.vtosters.lite.utils.Helper;
|
||||
|
||||
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) {
|
||||
@@ -42,14 +41,12 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_other);
|
||||
prefs();
|
||||
}
|
||||
|
||||
/* access modifiers changed from: package-private */
|
||||
public class e implements Preference.c {
|
||||
@Override // android.support.v7.preference.Preference.c
|
||||
public boolean a(Preference preference) {
|
||||
@@ -65,7 +62,6 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
}
|
||||
|
||||
/* access modifiers changed from: package-private */
|
||||
public class b implements Preference.c {
|
||||
b() {
|
||||
}
|
||||
@@ -77,7 +73,6 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
}
|
||||
|
||||
/* access modifiers changed from: package-private */
|
||||
public class d implements Preference.c {
|
||||
@Override // android.support.v7.preference.Preference.c
|
||||
public boolean a(Preference preference) {
|
||||
@@ -89,7 +84,6 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment {
|
||||
}
|
||||
}
|
||||
|
||||
/* access modifiers changed from: package-private */
|
||||
public class a implements Preference.c {
|
||||
a() {
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
public class ProxySettingsFragment extends MaterialPreferenceToolbarFragment {
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_proxy);
|
||||
|
||||
@@ -12,26 +12,29 @@ import ru.vtosters.lite.utils.IconHelper;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
// com.vtosters.lite.fragments.MaterialPreferenceFragment, android.support.v4.app.DialogFragment, android.support.v4.app.Fragment
|
||||
public void b(Bundle bundle) {
|
||||
super.b(bundle);
|
||||
a(R.xml.preferences_themes);
|
||||
prefs();
|
||||
}
|
||||
|
||||
public /* synthetic */ boolean apply(Preference preference, Object obj) {
|
||||
public boolean apply(Preference preference, Object obj) {
|
||||
if (((Boolean) obj).booleanValue()) {
|
||||
IconHelper.switchToVK();
|
||||
} else {
|
||||
@@ -43,5 +46,7 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment {
|
||||
|
||||
private void prefs() {
|
||||
a("iconvk").a((Preference.b) new a());
|
||||
a("darktheme").a((Preference.b) new b());
|
||||
a("lighttheme").a((Preference.b) new b());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
||||
|
||||
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(Helper.GetContext());
|
||||
container.setTag("tab_item_container");
|
||||
container.setGravity(Gravity.CENTER_VERTICAL);
|
||||
container.setOrientation(LinearLayout.HORIZONTAL);
|
||||
container.setPadding(
|
||||
Helper.convertDpToPixel(12),
|
||||
Helper.convertDpToPixel(12),
|
||||
Helper.convertDpToPixel(12),
|
||||
Helper.convertDpToPixel(12)
|
||||
);
|
||||
container.setLayoutParams(new LinearLayout.LayoutParams(-1, Helper.convertDpToPixel(48)));
|
||||
|
||||
ImageView icon = new ImageView(Helper.GetContext());
|
||||
icon.setTag("icon");
|
||||
icon.setImageTintList(ColorStateList.valueOf(Themes.getAccentColor()));
|
||||
icon.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
Helper.convertDpToPixel(24),
|
||||
Helper.convertDpToPixel(24)));
|
||||
container.addView(icon);
|
||||
|
||||
TextView title = new TextView(Helper.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 = Helper.convertDpToPixel(16);
|
||||
container.addView(title, params);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
private View createGroupTitle() {
|
||||
LinearLayout layout = new LinearLayout(Helper.GetContext());
|
||||
layout.setLayoutParams(new LinearLayout.LayoutParams(-1, -2));
|
||||
|
||||
TextView title = new TextView(Helper.GetContext());
|
||||
title.setTag("group_title");
|
||||
title.setTextSize(13.0f);
|
||||
title.setPadding(
|
||||
Helper.convertDpToPixel(16),
|
||||
Helper.convertDpToPixel(13),
|
||||
Helper.convertDpToPixel(16),
|
||||
Helper.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 ImageView mIcon;
|
||||
private 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 TextView mGroupTitle;
|
||||
|
||||
public GroupViewHolder(View view) {
|
||||
super(view);
|
||||
|
||||
mGroupTitle = view.findViewWithTag("group_title");
|
||||
}
|
||||
|
||||
public void bind(String groupTitle) {
|
||||
mGroupTitle.setText(groupTitle);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
||||
|
||||
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(
|
||||
Helper.convertDpToPixel(13),
|
||||
Helper.convertDpToPixel(10),
|
||||
Helper.convertDpToPixel(13),
|
||||
Helper.convertDpToPixel(10)
|
||||
);
|
||||
container.addView(buttonsContainer, new LinearLayout.LayoutParams(-1, -2));
|
||||
|
||||
Button save = new Button(n());
|
||||
save.setText("Сохранить");
|
||||
save.setOnClickListener(v -> {
|
||||
DockBarManager.getInstance().save();
|
||||
Helper.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(Helper.convertDpToPixel(10), 0));
|
||||
|
||||
Button reset = new Button(n());
|
||||
reset.setText("Сбросить");
|
||||
reset.setOnClickListener(v -> {
|
||||
DockBarManager.getInstance().delete();
|
||||
Helper.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("Редактор докбара");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
||||
|
||||
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 = Helper.GetContext().getResources().getDrawable(tab.iconID);
|
||||
ColorStateList colorStateList = Helper.GetContext().getResources().getColorStateList(com.vtosters.lite.R.color.bottom_navigation_item);
|
||||
// if (isAndroidMonet()) {
|
||||
// colorStateList = ColorStateList.valueOf(Themes.getAccentColor());
|
||||
// }
|
||||
add.setIcon((Drawable) 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,315 @@
|
||||
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 = 8;
|
||||
|
||||
private static DockBarManager sInstance = new DockBarManager();
|
||||
|
||||
public static DockBarManager getInstance() {
|
||||
if (sInstance == null)
|
||||
sInstance = new DockBarManager();
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
private List<DockBarTab> mSelectedTabs = new ArrayList<>();
|
||||
private List<DockBarTab> mDisabledTabs = new ArrayList<>();
|
||||
private List<String> mGroups = Arrays.asList(
|
||||
"Выбранные элементы докбара",
|
||||
"Невыбранные элементы"
|
||||
);
|
||||
|
||||
public DockBarManager() {
|
||||
load();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package ru.vtosters.lite.ui.fragments.dockbar;
|
||||
|
||||
public interface IItemTouchHelper {
|
||||
|
||||
void onItemDismiss(int index);
|
||||
|
||||
boolean onItemMove(int fromPosition, int toPosition);
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
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 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());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
||||
|
||||
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(
|
||||
Helper.convertDpToPixel(12),
|
||||
Helper.convertDpToPixel(6),
|
||||
Helper.convertDpToPixel(6),
|
||||
Helper.convertDpToPixel(6)
|
||||
);
|
||||
|
||||
VKCircleImageView avatar = new VKCircleImageView(parent.getContext());
|
||||
avatar.setId(1);
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
|
||||
Helper.convertDpToPixel(48),
|
||||
Helper.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(
|
||||
Helper.convertDpToPixel(12),
|
||||
0,
|
||||
0,
|
||||
0
|
||||
);
|
||||
nickname.setEllipsize(TextUtils.TruncateAt.END);
|
||||
nickname.setSingleLine(true);
|
||||
nickname.setTextSize(15.0f);
|
||||
nickname.setTextColor(Themes.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 = Themes.recolorDrawable(Helper.getResources().getDrawable(R.drawable.ic_list_remove));
|
||||
action.setImageDrawable(drawable);
|
||||
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
|
||||
Helper.convertDpToPixel(48),
|
||||
Helper.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 = (VKCircleImageView) view.findViewById(1);
|
||||
mNickname = (TextView) view.findViewById(2);
|
||||
mAction = (ImageButton) 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();
|
||||
Helper.restarting();
|
||||
});
|
||||
Drawable drawable = Themes.recolorDrawable(Helper.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();
|
||||
Helper.restarting();
|
||||
|
||||
});
|
||||
|
||||
if (Helper.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();
|
||||
Helper.restarting();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
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"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package ru.vtosters.lite.ui.fragments.multiaccount;
|
||||
|
||||
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 = Helper.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 = Helper.GetPreferences().getInt("account", 0);
|
||||
return Helper.GetContext().getSharedPreferences("pref_account_manager" + (account != 0 ? account : ""), Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
private static int getAccountPrefsCount() {
|
||||
File[] prefs = new File(Helper.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 = Helper.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 = Helper.GetPreferences().getInt("account", 0);
|
||||
if (account == i) return false;
|
||||
|
||||
Helper.GetPreferences().edit().putInt("account", i).commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void addAccount() {
|
||||
Helper.GetPreferences().edit().putInt("account", getAccountPrefsCount()).commit();
|
||||
}
|
||||
|
||||
public static void deleteAccount(int i) {
|
||||
int account = Helper.GetPreferences().getInt("account", 0);
|
||||
SharedPreferences prefs = Helper.GetContext().getSharedPreferences("pref_account_manager" + i, Context.MODE_PRIVATE);
|
||||
prefs.edit().clear().commit();
|
||||
File file = new File(new File(Helper.GetContext().getFilesDir().getParent(), "shared_prefs"), "pref_account_manager" + i);
|
||||
if (file.exists()) file.delete();
|
||||
if (account == i && getAccountPrefsCount() > 0)
|
||||
switchAccount(buildList().get(0).index);
|
||||
}
|
||||
}
|
||||
@@ -42,8 +42,8 @@ import java.io.File;
|
||||
|
||||
import me.grishka.appkit.fragments.ToolbarFragment;
|
||||
import ru.vtosters.lite.tgs.TGPref;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.ui.PreferencesUtil;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.utils.Prefs;
|
||||
import ru.vtosters.lite.utils.Themes;
|
||||
|
||||
@@ -166,10 +166,10 @@ public class StickersFragment extends ToolbarFragment {
|
||||
TGPref.setTGBotKey(editText.getText().toString());
|
||||
if (r != null) r.run();
|
||||
}).setNegativeButton(android.R.string.cancel, null).setNeutralButton(Helper.getString("stickersapi7"), (dialog, which) -> new AlertDialog.Builder(super.n())
|
||||
.setTitle(Helper.getString("stickersapi8"))
|
||||
.setMessage(Helper.getString("stickersapi9") +
|
||||
Helper.getString("stickersapi10")).setPositiveButton(android.R.string.ok, null)
|
||||
.create().show()).create().show();
|
||||
.setTitle(Helper.getString("stickersapi8"))
|
||||
.setMessage(Helper.getString("stickersapi9") +
|
||||
Helper.getString("stickersapi10")).setPositiveButton(android.R.string.ok, null)
|
||||
.create().show()).create().show();
|
||||
}
|
||||
|
||||
private void checkApiKey(final Runnable r) {
|
||||
|
||||
+1
-1
@@ -8,8 +8,8 @@ import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
import ru.vtosters.lite.tgs.TGPref;
|
||||
import ru.vtosters.lite.tgs.TGRoot;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
import ru.vtosters.lite.ui.PreferencesUtil;
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
|
||||
public class StickersPreferencesFragment extends MaterialPreferenceToolbarFragment {
|
||||
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
package ru.vtosters.lite.ui.vkui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.view.View;
|
||||
|
||||
import com.vk.core.dialogs.bottomsheet.ModalBottomSheet;
|
||||
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import ru.vtosters.lite.utils.Helper;
|
||||
|
||||
public class ModalBottomSheetProxy {
|
||||
public final ModalBottomSheet.a builder;
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
import com.vk.dto.common.VideoFile;
|
||||
|
||||
@@ -27,40 +26,31 @@ public class ExternalLinkHandler {
|
||||
private static final Map<String, String> qualities = new HashMap<>();
|
||||
|
||||
public static boolean parseVideoFile(VideoFile file, Context context) {
|
||||
if (!Prefs.isEnableExternalOpening()) return false;
|
||||
|
||||
if (checkYoutubeLink(file)) {
|
||||
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse(file.n));
|
||||
|
||||
context.startActivity(intent);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if (checkVkVideo(file)) {
|
||||
|
||||
if (qualities.size() == 1) {
|
||||
|
||||
startExternalVideo((String) qualities.values().toArray()[0]);
|
||||
|
||||
} else {
|
||||
|
||||
String[] titles = qualities.keySet().toArray(new String[0]);
|
||||
|
||||
new AlertDialog.Builder(context)
|
||||
.setItems(titles, ((dialog, which) -> {
|
||||
|
||||
startExternalVideo(qualities.get(titles[which]));
|
||||
|
||||
}))
|
||||
.show();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (!Prefs.isEnableExternalOpening()) return false;
|
||||
|
||||
if (checkVkVideo(file)) {
|
||||
if (qualities.size() == 1) {
|
||||
startExternalVideo((String) qualities.values().toArray()[0]);
|
||||
} else {
|
||||
String[] titles = qualities.keySet().toArray(new String[0]);
|
||||
new AlertDialog.Builder(context)
|
||||
.setItems(titles, ((dialog, which) -> {
|
||||
startExternalVideo(qualities.get(titles[which]));
|
||||
}))
|
||||
.show();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -71,7 +61,6 @@ public class ExternalLinkHandler {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -119,28 +108,21 @@ public class ExternalLinkHandler {
|
||||
|
||||
String packageName = getMXPlayerPackageName();
|
||||
if (!Helper.isEmpty(packageName)) {
|
||||
|
||||
intent.setPackage(packageName);
|
||||
intent.setDataAndType(uri, "application/mp4");
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
} else {
|
||||
|
||||
intent.setAction(Intent.ACTION_VIEW);
|
||||
intent.setDataAndType(uri, "video/mp4");
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
|
||||
}
|
||||
|
||||
Helper.GetContext().startActivity(intent);
|
||||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
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.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
@@ -22,7 +19,6 @@ import com.vtosters.lite.auth.VKAccountManager;
|
||||
import com.vtosters.lite.im.ImEngineProvider;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
|
||||
public class Helper {
|
||||
public static int GetUserId() {
|
||||
@@ -70,7 +66,11 @@ public class Helper {
|
||||
}
|
||||
|
||||
public static void restarting() {
|
||||
GetContext().startActivity(Intent.makeRestartActivityTask(GetContext().getPackageManager().getLaunchIntentForPackage(GetContext().getPackageName()).getComponent()));
|
||||
Context ctx = GetContext();
|
||||
PackageManager pm = ctx.getPackageManager();
|
||||
Intent intent = pm.getLaunchIntentForPackage(ctx.getPackageName());
|
||||
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
|
||||
ctx.startActivity(mainIntent);
|
||||
Runtime.getRuntime().exit(0);
|
||||
}
|
||||
|
||||
@@ -137,4 +137,10 @@ public class Helper {
|
||||
public static boolean isEmpty(String str) {
|
||||
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() : false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
|
||||
import com.vk.about.Items;
|
||||
@@ -20,7 +19,6 @@ import com.vk.about.Items2;
|
||||
import com.vk.apps.AppsFragment;
|
||||
import com.vk.core.ui.themes.VKThemeHelper;
|
||||
import com.vk.core.util.Screen;
|
||||
import com.vk.discover.DiscoverFragment;
|
||||
import com.vk.fave.fragments.FaveTabFragment;
|
||||
import com.vk.menu.MenuFragment;
|
||||
import com.vk.music.fragment.MusicFragment;
|
||||
@@ -55,12 +53,13 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Scanner;
|
||||
|
||||
import kotlin.jvm.internal.Intrinsics;
|
||||
import ru.vtosters.lite.ui.fragments.dockbar.DockBarManager;
|
||||
import ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager;
|
||||
|
||||
public class Prefs {
|
||||
public static String VERSIONNAME = "2.0 DEV";
|
||||
public static String VERSIONNAME = "2.0 Beta";
|
||||
private static List<String> mFilters;
|
||||
private static List<Activity> activities = new ArrayList<>();
|
||||
private static final List<Activity> activities = new ArrayList<>();
|
||||
|
||||
public static boolean BooleanFalse(String key) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Helper.GetContext());
|
||||
@@ -106,6 +105,10 @@ public class Prefs {
|
||||
return BooleanFalse("adsgroup");
|
||||
}
|
||||
|
||||
public static boolean olddock() {
|
||||
return BooleanFalse("olddock");
|
||||
}
|
||||
|
||||
public static boolean adsslider() {
|
||||
return BooleanFalse("__dbg_no_slider_ads");
|
||||
}
|
||||
@@ -166,6 +169,10 @@ public class Prefs {
|
||||
return BooleanFalse("default_ad_list");
|
||||
}
|
||||
|
||||
public static boolean shitposting() {
|
||||
return BooleanFalse("shitposting");
|
||||
}
|
||||
|
||||
public static boolean dev() {
|
||||
return BooleanFalse("dev");
|
||||
}
|
||||
@@ -182,6 +189,10 @@ public class Prefs {
|
||||
return BooleanTrue("dns");
|
||||
}
|
||||
|
||||
public static boolean libverify() {
|
||||
return BooleanFalse("libverify");
|
||||
}
|
||||
|
||||
public static boolean dnt() {
|
||||
return BooleanTrue("dnt");
|
||||
}
|
||||
@@ -230,16 +241,21 @@ public class Prefs {
|
||||
}
|
||||
|
||||
public static String getBuildNumber() {
|
||||
return Prefs.loadAssetTextAsString(Helper.GetContext(), "version.properties");
|
||||
return Prefs.getBuild(Helper.GetContext(), "version.properties");
|
||||
}
|
||||
|
||||
public static String loadAssetTextAsString(Context context, String name) {
|
||||
public static String getCommitLink() {
|
||||
return "https://github.com/vtosters/lite/commit/" + Prefs.getBuild(Helper.GetContext(), "version.properties");
|
||||
}
|
||||
|
||||
public static String getBuild(Context context, String name) {
|
||||
try {
|
||||
Scanner scanner = new Scanner(context.getAssets().open(name));
|
||||
while (scanner.hasNextLine()) {
|
||||
String line = scanner.findInLine("VERSION_BUILD=.+");
|
||||
if (line != null)
|
||||
return line.replace("VERSION_BUILD=", "");
|
||||
return "0000000";
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
@@ -256,16 +272,39 @@ public class Prefs {
|
||||
return !VKThemeHelper.d() ? "1" : "0";
|
||||
}
|
||||
|
||||
public static String getAmoledVKUI() {
|
||||
String string = Helper.GetPreferences().getString("darktheme", "");
|
||||
return string.equals("amoled") ? "1" : "0";
|
||||
}
|
||||
|
||||
public static String getCommentsSort(String def) {
|
||||
String string = Helper.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() {
|
||||
return Helper.GetPreferences().getString("me_token", "");
|
||||
}
|
||||
|
||||
public static void setMeToken(String str) {
|
||||
ru.vtosters.lite.utils.Helper.GetPreferences().edit().putString("me_token", str).apply();
|
||||
}
|
||||
|
||||
public static int getNavbarColor() {
|
||||
return VKThemeHelper.a((int) R.attr.tabbar_background);
|
||||
}
|
||||
|
||||
public static String getSSFSLink() {
|
||||
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();
|
||||
return SSFSDomain() + "?token=" + ru.vtosters.lite.utils.Helper.GetUserToken() + "&vt_dark=" + getDarkVKUI() + "&vt_amoled=" + getAmoledVKUI() + "&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) {
|
||||
@@ -322,7 +361,7 @@ public class Prefs {
|
||||
}
|
||||
|
||||
public static boolean newfeed() {
|
||||
return BooleanFalse("newfeed");
|
||||
return BooleanTrue("newfeed");
|
||||
}
|
||||
|
||||
public static boolean offline() {
|
||||
@@ -387,10 +426,6 @@ public class Prefs {
|
||||
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() {
|
||||
return BooleanFalse("setoffline");
|
||||
}
|
||||
@@ -447,20 +482,22 @@ public class Prefs {
|
||||
return BooleanTrue("voice");
|
||||
}
|
||||
|
||||
public static boolean newvideo() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String widgetads() {
|
||||
return ads() ? "null" : "app_widget";
|
||||
}
|
||||
|
||||
public static int getMsgCount() {
|
||||
String customvalue = Helper.GetPreferences().getString("msgcount", "");
|
||||
return customvalue.isEmpty() ? 30 : Integer.parseInt(customvalue);
|
||||
}
|
||||
|
||||
public static void setNavbarColor(Window window, int i) {
|
||||
if (navbar()) {
|
||||
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);
|
||||
if (navbar() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
window.setNavigationBarColor(getNavbarColor());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -496,6 +533,7 @@ public class Prefs {
|
||||
ReferalsPut();
|
||||
StandardFilterPut();
|
||||
ShortLinkPut();
|
||||
IDontWantToReadIt();
|
||||
String string = Helper.GetPreferences().getString("spamfilters", "");
|
||||
if (!string.isEmpty()) {
|
||||
mFilters.addAll(Arrays.asList(string.split(", ")));
|
||||
@@ -559,12 +597,31 @@ public class Prefs {
|
||||
}
|
||||
}
|
||||
|
||||
public static void IDontWantToReadIt() {
|
||||
if (BooleanTrue("shitposting")) {
|
||||
try {
|
||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Helper.GetContext().getAssets().open("IDontWantToReadIt.txt")));
|
||||
while (true) {
|
||||
String readLine = bufferedReader.readLine();
|
||||
if (readLine != null) {
|
||||
mFilters.add(readLine);
|
||||
} else {
|
||||
bufferedReader.close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String SSFSDomain() {
|
||||
String string = Helper.GetPreferences().getString("ssfscustom", "");
|
||||
if (!string.isEmpty()) {
|
||||
return string;
|
||||
}
|
||||
return "https://sf.vknext.ru";
|
||||
return "https://vtsf.vknext.net";
|
||||
}
|
||||
|
||||
public static String VKVersion() {
|
||||
@@ -588,6 +645,7 @@ public class Prefs {
|
||||
list.clear();
|
||||
list.add(new Items1());
|
||||
if (!oldabout()) {
|
||||
list.add(new Items(21, R.string.opencommit));
|
||||
list.add(new Items(8, R.string.tgchannel));
|
||||
list.add(new Items(9, R.string.tgchat));
|
||||
list.add(new Items(16, R.string.vtfaq));
|
||||
@@ -623,7 +681,7 @@ public class Prefs {
|
||||
}
|
||||
|
||||
public static boolean proxy() {
|
||||
return ru.vtosters.lite.utils.Helper.GetPreferences().getString("proxy", "").equals("xtrafrancyz");
|
||||
return ru.vtosters.lite.utils.Helper.GetPreferences().getString("proxy", "").equals("apiproxy");
|
||||
}
|
||||
|
||||
public static boolean authors_rec(String str) {
|
||||
@@ -670,7 +728,7 @@ public class Prefs {
|
||||
setupFilters();
|
||||
fixGapps();
|
||||
setProxy();
|
||||
|
||||
MultiAccountManager.migrate();
|
||||
registerActivities(application);
|
||||
}
|
||||
|
||||
@@ -710,8 +768,15 @@ public class Prefs {
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean isUseAlternativeFragments() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Class getStartFragment() {
|
||||
String string = ru.vtosters.lite.utils.Helper.GetPreferences().getString("start_value", "");
|
||||
String string = ru.vtosters.lite.utils.Helper.GetPreferences().getString("start_values", "");
|
||||
if (string.equals("default")) {
|
||||
return DockBarManager.getInstance().getSelectedTabs().get(0).fragmentClass;
|
||||
}
|
||||
if (string.equals("newsfeed")) {
|
||||
return Feed2049.b.c();
|
||||
}
|
||||
@@ -727,7 +792,7 @@ public class Prefs {
|
||||
if (string.equals("friends")) {
|
||||
return FriendsFragment.class;
|
||||
}
|
||||
if (string.equals(NavigatorKeys.v)) {
|
||||
if (string.equals("photos")) {
|
||||
return PhotosFragment.class;
|
||||
}
|
||||
if (string.equals("videos")) {
|
||||
@@ -740,7 +805,7 @@ public class Prefs {
|
||||
return AppsFragment.class;
|
||||
}
|
||||
if (string.equals("discover")) {
|
||||
return DiscoverFragment.class;
|
||||
return Feed2049.b.e();
|
||||
}
|
||||
if (string.equals("notifications")) {
|
||||
return NotificationsContainerFragment.class;
|
||||
@@ -766,7 +831,7 @@ public class Prefs {
|
||||
if (string.equals("docs")) {
|
||||
return DocumentsViewFragment.class;
|
||||
}
|
||||
return string.equals("brtd") ? BirthdaysFragment.class : Feed2049.b.c();
|
||||
return string.equals("brtd") ? BirthdaysFragment.class : DockBarManager.getInstance().getSelectedTabs().get(0).fragmentClass;
|
||||
}
|
||||
|
||||
public static Context BaseContextLocale(Context context) {
|
||||
|
||||
@@ -3,8 +3,6 @@ package ru.vtosters.lite.utils;
|
||||
public class ProfileHide {
|
||||
// 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) {
|
||||
// for (int i = 0; VTVerifications.sServiceAccountsMap.valueOf(i) < 0; i++) {
|
||||
// boolean valueOf = VTVerifications.sServiceAccountsMap.valueOf(Helper.getId());
|
||||
|
||||
@@ -43,64 +43,45 @@ public class Proxy {
|
||||
}
|
||||
|
||||
public static String getApiCom() {
|
||||
if (!Prefs.proxy()) {
|
||||
String string = Helper.GetPreferences().getString("proxyapi", "");
|
||||
if (!Prefs.proxy() & string.isEmpty()) {
|
||||
return "api.vk.com";
|
||||
}
|
||||
String string = Helper.GetPreferences().getString("proxyapi", "");
|
||||
if (!string.isEmpty()) {
|
||||
return string;
|
||||
}
|
||||
return "vk-api-proxy.xtrafrancyz.net";
|
||||
return string;
|
||||
}
|
||||
|
||||
public static String getAwayPhpCom() {
|
||||
if (!Prefs.proxy()) {
|
||||
String string = Helper.GetPreferences().getString("proxyapi", "");
|
||||
if (!Prefs.proxy() & string.isEmpty()) {
|
||||
return "m.vk.com";
|
||||
}
|
||||
String string = Helper.GetPreferences().getString("proxyapi", "");
|
||||
if (!string.isEmpty()) {
|
||||
return string;
|
||||
}
|
||||
return "vk-api-proxy.xtrafrancyz.net";
|
||||
return string;
|
||||
}
|
||||
|
||||
public static String getOauthCom() {
|
||||
if (!Prefs.proxy()) {
|
||||
String string = Helper.GetPreferences().getString("proxyoauth", "");
|
||||
if (!Prefs.proxy() & string.isEmpty()) {
|
||||
return "oauth.vk.com";
|
||||
}
|
||||
String string = Helper.GetPreferences().getString("proxyoauth", "");
|
||||
if (!string.isEmpty()) {
|
||||
return string;
|
||||
}
|
||||
return "vk-oauth-proxy.xtrafrancyz.net";
|
||||
return string;
|
||||
}
|
||||
|
||||
public static String getStaticCom() {
|
||||
if (!ru.vtosters.lite.utils.Prefs.proxy()) {
|
||||
String string = Helper.GetPreferences().getString("proxystatic", "");
|
||||
if (!Prefs.proxy() & string.isEmpty()) {
|
||||
return "static.vk.com";
|
||||
}
|
||||
String string = Helper.GetPreferences().getString("proxystatic", "");
|
||||
if (!string.isEmpty()) {
|
||||
return string;
|
||||
}
|
||||
return "vk-static-proxy.xtrafrancyz.net";
|
||||
return string;
|
||||
}
|
||||
|
||||
public static String staticFix(String str) {
|
||||
String str2;
|
||||
String str3;
|
||||
if (!Prefs.proxy()) {
|
||||
String string = Helper.GetPreferences().getString("proxystatic", "");
|
||||
if (!Prefs.proxy() & string.isEmpty()) {
|
||||
return str;
|
||||
}
|
||||
String string = Helper.GetPreferences().getString("proxystatic", "");
|
||||
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);
|
||||
str2 = string;
|
||||
return str.replace(str2, "static.vk.com");
|
||||
}
|
||||
|
||||
public static String GetConnector(String str) {
|
||||
@@ -122,7 +103,7 @@ public class Proxy {
|
||||
switch (Helper.GetPreferences().getString("proxy", "")) {
|
||||
case "zaborona":
|
||||
Properties properties = System.getProperties();
|
||||
properties.setProperty("socksProxyHost", "socks.zaborona.help");
|
||||
properties.setProperty("socksProxyHost", "socks.zaboronahelp.pp.ua");
|
||||
properties.setProperty("socksProxyPort", "1488");
|
||||
System.clearProperty("https.proxyHost");
|
||||
System.clearProperty("https.proxyPort");
|
||||
|
||||
@@ -8,11 +8,10 @@ import android.support.v7.widget.Toolbar;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import com.vk.core.d.RecoloredDrawable;
|
||||
import com.vk.core.ui.themes.VKTheme;
|
||||
import com.vk.core.ui.themes.VKThemeHelper;
|
||||
import com.vk.im.ui.themes.ImTheme;
|
||||
import com.vtosters.lite.R;
|
||||
import com.vtosters.lite.auth.VKAccountManager;
|
||||
|
||||
import ru.vtosters.lite.f0x1d.VTVerifications;
|
||||
|
||||
public class Themes {
|
||||
public static int getAccentColor() {
|
||||
@@ -31,6 +30,56 @@ public class Themes {
|
||||
return VKThemeHelper.a((int) R.attr.tabbar_background);
|
||||
}
|
||||
|
||||
public static int getHeaderBackground() {
|
||||
return VKThemeHelper.a((int) R.attr.header_background);
|
||||
}
|
||||
|
||||
public static int getAmoledTheme() {
|
||||
return Helper.GetContext().getResources().getIdentifier("BaseAmoledStyle", "style", Helper.GetContext().getPackageName());
|
||||
}
|
||||
|
||||
public static int getAmoledImTheme() {
|
||||
return Helper.GetContext().getResources().getIdentifier("VkIm.Theme.VkApp.Amoled", "style", Helper.GetContext().getPackageName());
|
||||
}
|
||||
|
||||
public static VKTheme getDarkTheme() {
|
||||
String string = Helper.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 = Helper.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 = Helper.GetPreferences().getString("lighttheme", "");
|
||||
if (string.isEmpty()) {
|
||||
return VKTheme.DEFAULT_LIGHT;
|
||||
}
|
||||
return VKTheme.DEFAULT_LIGHT;
|
||||
}
|
||||
|
||||
public static ImTheme getImLightTheme() {
|
||||
String string = Helper.GetPreferences().getString("lighttheme", "");
|
||||
if (string.isEmpty()) {
|
||||
return ImTheme.VKAPP_LIGHT;
|
||||
}
|
||||
return ImTheme.VKAPP_LIGHT;
|
||||
}
|
||||
|
||||
public static int getColorFromAttr(int attr) {
|
||||
return VKThemeHelper.a(attr);
|
||||
}
|
||||
@@ -66,6 +115,10 @@ public class Themes {
|
||||
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() {
|
||||
return ru.vtosters.lite.utils.Prefs.BooleanFalse("vkme_msg");
|
||||
}
|
||||
@@ -77,6 +130,13 @@ public class Themes {
|
||||
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) {
|
||||
if (colorStateList == null) {
|
||||
return null;
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
package ru.vtosters.lite.utils;
|
||||
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
import android.webkit.WebView;
|
||||
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
public class VKUIInjector {
|
||||
private static boolean isLoaded = false;
|
||||
private static String loadedCSS = "";
|
||||
@@ -45,12 +44,15 @@ public class VKUIInjector {
|
||||
|
||||
public static void load() {
|
||||
loadedCSS = load("vt_ui_accent.css")
|
||||
.replace("%accent%", Themes.hex(Themes.getAccentColor()))
|
||||
.replace("%header_background%", Themes.hex(Themes.getColorFromAttr(R.attr.header_background)))
|
||||
.replace("%background_content%", Themes.hex(Themes.getColorFromAttr(R.attr.background_content)))
|
||||
.replace("%header_text%", Themes.hex(Themes.getColorFromAttr(R.attr.header_text)))
|
||||
.replace("%accent%", Themes.hex(Themes.getColorFromAttr(R.attr.accent)))
|
||||
.replace("%background_page%", Themes.hex(Themes.getColorFromAttr(R.attr.background_page)))
|
||||
.replace("%background_content%", Themes.hex(Themes.getColorFromAttr(R.attr.background_content)))
|
||||
.replace("%text_primary%", Themes.hex(Themes.getColorFromAttr(R.attr.text_primary)));
|
||||
|
||||
// loadedCSSAmoled = load("vt_ui_oled.css");
|
||||
loadedCSSAmoled = load("vt_ui_oled.css");
|
||||
isLoaded = true;
|
||||
}
|
||||
|
||||
@@ -59,17 +61,20 @@ public class VKUIInjector {
|
||||
}
|
||||
|
||||
public static void inject(WebView webView) {
|
||||
String string = Helper.GetPreferences().getString("darktheme", "");
|
||||
if (Prefs.BooleanTrue("VKUI_INJ")) {
|
||||
if (!isLoaded) {
|
||||
load();
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (true/*Themes.isAccentedCache()*/) {
|
||||
Log.d("VKUI", "Injecting Accent");
|
||||
sb.append("\n\n");
|
||||
sb.append(loadedCSS);
|
||||
}
|
||||
Log.d("VKUI", "Final CSS: " + sb.toString());
|
||||
if (string.equals("amoled")) {
|
||||
sb.append("\n\n");
|
||||
sb.append(loadedCSSAmoled);
|
||||
}
|
||||
inject(webView, Base64.encodeToString(sb.toString().getBytes(), 2));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.3.0-alpha01'
|
||||
classpath 'com.android.tools.build:gradle:7.2.0-rc01'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
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 Jan 28 23:46:30 MSK 2022
|
||||
#Fri Apr 22 13:33:27 MSK 2022
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-rc-1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
+5
-5
@@ -15,6 +15,8 @@ echo.
|
||||
echo %ESC%[1;4mBuild dex...%ESC%[0m
|
||||
echo.
|
||||
call gradlew clean
|
||||
del app\src\main\assets\version.properties
|
||||
del smali\assets\version.properties
|
||||
call gradlew versionFile
|
||||
call gradlew assembleDebug
|
||||
if "%ERRORLEVEL%" == "0" (
|
||||
@@ -66,14 +68,13 @@ if "%ERRORLEVEL%" == "0" (
|
||||
echo %ESC%[92mSuccessful%ESC%[0m
|
||||
) else (
|
||||
echo %ESC%[31mFailed%ESC%[0m
|
||||
exit /B 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo %ESC%[1;4mBuild apk...%ESC%[0m
|
||||
echo.
|
||||
cd smali\
|
||||
call java -jar ../scripts/apktool.jar b . -o VTLite.apk --use-aapt2 -p ../scripts/framework/
|
||||
call java -jar ../scripts/apktool.jar b . -o ../scripts/VTLite.apk --use-aapt2 -p ../scripts/framework/
|
||||
if "%ERRORLEVEL%" == "0" (
|
||||
echo %ESC%[92mSuccessful%ESC%[0m
|
||||
) else (
|
||||
@@ -87,8 +88,7 @@ del assets\version.properties
|
||||
echo.
|
||||
echo %ESC%[1;4mSign apk...%ESC%[0m
|
||||
echo.
|
||||
call java -jar ../apksigner.jar sign --ks debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android VTLite.apk
|
||||
del VTLite.apk
|
||||
call java -jar ../scripts/apksigner.jar sign --ks ../scripts/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android ../scripts/VTLite.apk
|
||||
if "%ERRORLEVEL%" == "0" (
|
||||
echo %ESC%[92mSuccessful%ESC%[0m
|
||||
) else (
|
||||
@@ -120,7 +120,7 @@ GOTO startinstall
|
||||
echo.
|
||||
echo %ESC%[1;4mInstall apk...%ESC%[0m
|
||||
echo.
|
||||
call adb install VTLite_signed.apk
|
||||
call adb install ../scripts/VTLite.apk
|
||||
if "%ERRORLEVEL%" == "0" (
|
||||
echo %ESC%[92mSuccessful%ESC%[0m
|
||||
) else (
|
||||
|
||||
+2
-1
@@ -7,6 +7,8 @@ UNDERLINE='\033[4m'
|
||||
|
||||
echo -e "${BOLD}${UNDERLINE}Сборка dex..${NC}\n"
|
||||
cd ../
|
||||
rm ../smali/assets/version.properties
|
||||
rm ../lite/app/src/main/assets/version.properties
|
||||
./gradlew versionFile
|
||||
./gradlew assembleDebug
|
||||
if [ $? -eq 0 ]; then
|
||||
@@ -49,7 +51,6 @@ if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}Успех!${NC}\n"
|
||||
else
|
||||
echo -e "${RED}Провал.${NC}\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${BOLD}${UNDERLINE}Сборка apk..${NC}"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
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_WRITE"/>
|
||||
<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: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: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">
|
||||
<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.facebook.sdk.ApplicationId" android:value="@string/fb_app_id"/>
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
Путин
|
||||
Путин
|
||||
Путину
|
||||
Путину
|
||||
Путина
|
||||
Путина
|
||||
Путинская
|
||||
путинская
|
||||
Байден
|
||||
байден
|
||||
Байдену
|
||||
байдену
|
||||
Обама
|
||||
обама
|
||||
Обаме
|
||||
обаме
|
||||
Обаму
|
||||
обаму
|
||||
Трамп
|
||||
трамп
|
||||
Трампу
|
||||
трампу
|
||||
Санкции
|
||||
санкции
|
||||
Санкций
|
||||
санкций
|
||||
Санкциями
|
||||
санкциями
|
||||
Россия
|
||||
россия
|
||||
россии
|
||||
России
|
||||
МИДУ РФ
|
||||
миду рф
|
||||
МИД РФ
|
||||
мид рф
|
||||
Мид РФ
|
||||
Мид рф
|
||||
Российской
|
||||
российской
|
||||
Украина
|
||||
украина
|
||||
Украине
|
||||
украине
|
||||
Украины
|
||||
украины
|
||||
военные
|
||||
Военные
|
||||
Специальная операция
|
||||
Специальная Операция
|
||||
специальная операция
|
||||
специальная Операция
|
||||
Спец. Операция
|
||||
Спец. операция
|
||||
спец. Операция
|
||||
Спец Операция
|
||||
спец операция
|
||||
Спец операция
|
||||
Военная операция
|
||||
Военная Операция
|
||||
военная Операция
|
||||
военная операция
|
||||
спецоперация
|
||||
Спецоперация
|
||||
спецоперации
|
||||
Спецоперации
|
||||
спецоперацию
|
||||
Спецоперацию
|
||||
вторжение
|
||||
Вторжение
|
||||
ЛНР
|
||||
лнр
|
||||
ДНР
|
||||
днр
|
||||
Донбасс
|
||||
донбасс
|
||||
Луганск
|
||||
луганск
|
||||
Луганская
|
||||
луганская
|
||||
Донецк
|
||||
донецк
|
||||
Донецкая
|
||||
донецкая
|
||||
Навальным
|
||||
навальным
|
||||
Навальный
|
||||
навальный
|
||||
Навального
|
||||
навального
|
||||
ВСУ
|
||||
всу
|
||||
ВС РФ
|
||||
вс рф
|
||||
ВС Украины
|
||||
вс украины
|
||||
Шойгу
|
||||
шойгу
|
||||
Зеленский
|
||||
зеленский
|
||||
Зеленским
|
||||
зеленским
|
||||
Зеленскому
|
||||
зеленскому
|
||||
Зеленского
|
||||
зеленского
|
||||
евросоюз
|
||||
Евросоюз
|
||||
евросоюзу
|
||||
Евросоюзу
|
||||
Войск
|
||||
войск
|
||||
армия
|
||||
Армия
|
||||
Войне
|
||||
войне
|
||||
войны
|
||||
Войны
|
||||
войн
|
||||
Войн
|
||||
солдат
|
||||
Солдат
|
||||
солдаты
|
||||
Солдаты
|
||||
Вооруженные
|
||||
вооруженные
|
||||
нато
|
||||
НАТО
|
||||
Нато
|
||||
Песков
|
||||
песков
|
||||
Пескову
|
||||
Пескова
|
||||
пескова
|
||||
пескову
|
||||
Кремль
|
||||
кремль
|
||||
Кремлю
|
||||
кремлю
|
||||
денацификация
|
||||
Денацификация
|
||||
денацификацию
|
||||
Денацификацию
|
||||
нацис
|
||||
Нацис
|
||||
нациз
|
||||
Нациз
|
||||
Медведев
|
||||
медведев
|
||||
денацифицировать
|
||||
Денацифицировать
|
||||
фашис
|
||||
Фашис
|
||||
фашиз
|
||||
Фашиз
|
||||
США
|
||||
сша
|
||||
Киев
|
||||
киев
|
||||
Харьков
|
||||
харьков
|
||||
Харьковская
|
||||
харьковская
|
||||
"Z"
|
||||
"V"
|
||||
«Z»
|
||||
«V»
|
||||
"з"
|
||||
"в"
|
||||
«з»
|
||||
«в»
|
||||
"z"
|
||||
"v"
|
||||
«z»
|
||||
«v»
|
||||
"З"
|
||||
"В"
|
||||
«З»
|
||||
«В»
|
||||
русня
|
||||
Русня
|
||||
хохол
|
||||
Хохол
|
||||
Хохлы
|
||||
хохлы
|
||||
ЛДНР
|
||||
лднр
|
||||
наказать Россию
|
||||
наказать россию
|
||||
наказать Русских
|
||||
наказать русских
|
||||
вооружение
|
||||
Вооружение
|
||||
@@ -36,4 +36,24 @@ cпocоб зaрaбoтать
|
||||
смотри в Источнике
|
||||
Смотри в Источнике
|
||||
в источнике👇
|
||||
в источнике😳👇
|
||||
в источнике😳👇
|
||||
в Источник
|
||||
в источник
|
||||
В источник
|
||||
в источнике
|
||||
в иcтoчнике
|
||||
В иcтoчнике
|
||||
в Иcтoчнике
|
||||
в Источнике
|
||||
В Источнике
|
||||
в иcтoчник
|
||||
В иcтoчник
|
||||
в Иcтoчник
|
||||
в Источник
|
||||
В Источник
|
||||
в закрепленном комментарии
|
||||
в Закрепленном комментарии
|
||||
в закрепленном Комментарии
|
||||
В закрепленном комментарии
|
||||
В Закрепленном комментарии
|
||||
В закрепленном Комментарии
|
||||
@@ -19,10 +19,6 @@ body[scheme=bright_light] {
|
||||
--cell_button_foreground: %accent% !important;
|
||||
--control_foreground: %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_reply_sender_text: %accent% !important;
|
||||
--im_reply_separator: %accent% !important;
|
||||
@@ -42,24 +38,70 @@ body[scheme=bright_light] {
|
||||
--writebar_icon: %accent% !important;
|
||||
--dynamic_blue: %accent% !important;
|
||||
/* backgrounds */
|
||||
--background_content: %background_page% !important;
|
||||
--background_content: %background_content% !important;
|
||||
--background_page: %background_page% !important;
|
||||
--content_tint_background: %background_page% !important;
|
||||
--loader_background: %background_page% !important;
|
||||
--header_background: %background_page% !important;
|
||||
--header_background_before_blur: %background_page% !important;
|
||||
--header_background_before_blur_alternate: %background_page% !important;
|
||||
--header_alternate_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_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] {
|
||||
--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;
|
||||
--text_link: %accent% !important;
|
||||
--text_link_hightlighted_background: %accent% !important;
|
||||
--text_name: %accent% !important;
|
||||
--writebar_icon: %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;
|
||||
}
|
||||
|
||||
/* фиксы статей */
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/* 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,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:interpolator/linear_out_slow_in" android:duration="225"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="100.0%p" android:toYDelta="0.0" />
|
||||
<set android:interpolator="@android:interpolator/linear_out_slow_in"
|
||||
android:duration="225"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="100.0%p"
|
||||
android:toYDelta="0.0" />
|
||||
</set>
|
||||
@@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:interpolator/fast_out_linear_in" android:duration="195"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="0.0%p" android:toYDelta="100.0%p" />
|
||||
<set android:interpolator="@android:interpolator/fast_out_linear_in"
|
||||
android:duration="195"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="0.0%p"
|
||||
android:toYDelta="100.0%p" />
|
||||
</set>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:interpolator/fast_out_linear_in" android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="20.000004%p" android:toYDelta="0.0" />
|
||||
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||
<set android:interpolator="@android:interpolator/fast_out_linear_in"
|
||||
android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="20.000004%p"
|
||||
android:toYDelta="0.0" />
|
||||
<alpha
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
</set>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:interpolator/fast_out_slow_in" android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="0.0" android:toYDelta="20.000004%p" />
|
||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||
<set android:interpolator="@android:interpolator/fast_out_slow_in"
|
||||
android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="0.0"
|
||||
android:toYDelta="20.000004%p" />
|
||||
<alpha
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<pathInterpolator android:controlX1="0.4" android:controlY1="0.0" android:controlX2="1.0" android:controlY2="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<pathInterpolator android:controlX1="0.4"
|
||||
android:controlY1="0.0"
|
||||
android:controlX2="1.0"
|
||||
android:controlY2="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<pathInterpolator android:controlX1="0.0" android:controlY1="0.0" android:controlX2="0.2" android:controlY2="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<pathInterpolator android:controlX1="0.0"
|
||||
android:controlY1="0.0"
|
||||
android:controlX2="0.2"
|
||||
android:controlY2="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@anim/linear_out_slow_in" android:shareInterpolator="true"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:duration="300" android:fromYDelta="-100.0%p" android:toYDelta="0.0" />
|
||||
<set android:interpolator="@anim/linear_out_slow_in"
|
||||
android:shareInterpolator="true"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:duration="300"
|
||||
android:fromYDelta="-100.0%p"
|
||||
android:toYDelta="0.0" />
|
||||
</set>
|
||||
@@ -1,5 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@anim/fast_out_linear_in" android:shareInterpolator="true" android:ordering="together"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:duration="300" android:fromYDelta="0.0" android:toYDelta="-100.0%p" />
|
||||
<set android:interpolator="@anim/fast_out_linear_in"
|
||||
android:shareInterpolator="true"
|
||||
android:ordering="together"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:duration="300"
|
||||
android:fromYDelta="0.0"
|
||||
android:toYDelta="-100.0%p" />
|
||||
</set>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:interpolator/fast_out_slow_in" android:duration="300"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="0.0" android:toYDelta="14.999998%" />
|
||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||
<set android:interpolator="@android:interpolator/fast_out_slow_in"
|
||||
android:duration="300"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="0.0"
|
||||
android:toYDelta="14.999998%" />
|
||||
<alpha
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<pathInterpolator android:controlX1="0.4" android:controlY1="0.0" android:controlX2="0.2" android:controlY2="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<pathInterpolator android:controlX1="0.4"
|
||||
android:controlY1="0.0"
|
||||
android:controlX2="0.2"
|
||||
android:controlY2="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,6 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:shareInterpolator="false"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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" />
|
||||
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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" />
|
||||
<alpha
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="@integer/abc_config_activityShortDur"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
</set>
|
||||
@@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:shareInterpolator="false"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="@integer/abc_config_activityShortDur"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
</set>
|
||||
@@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:shareInterpolator="false"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="@integer/abc_config_activityShortDur"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
||||
@@ -1,6 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:shareInterpolator="false"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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" />
|
||||
<alpha android:interpolator="@android:anim/decelerate_interpolator" android:duration="@integer/abc_config_activityShortDur" android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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" />
|
||||
<alpha
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="@integer/abc_config_activityShortDur"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha android:interpolator="@android:interpolator/decelerate_quad" android:duration="@integer/config_tooltipAnimTime" android:fromAlpha="0.0" android:toAlpha="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<alpha android:interpolator="@android:interpolator/decelerate_quad"
|
||||
android:duration="@integer/config_tooltipAnimTime"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha android:interpolator="@android:interpolator/accelerate_quad" android:duration="@integer/config_tooltipAnimTime" android:fromAlpha="1.0" android:toAlpha="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<alpha android:interpolator="@android:interpolator/accelerate_quad"
|
||||
android:duration="@integer/config_tooltipAnimTime"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,5 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:zAdjustment="normal"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:duration="300" android:fillBefore="true" android:fillAfter="true" android:fromAlpha="1.0" android:toAlpha="1.0" android:fillEnabled="true" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha
|
||||
android:duration="300"
|
||||
android:fillBefore="true"
|
||||
android:fillAfter="true"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="1.0"
|
||||
android:fillEnabled="true" />
|
||||
</set>
|
||||
@@ -1,6 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:shareInterpolator="false" android:zAdjustment="top"
|
||||
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" />
|
||||
<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 android:shareInterpolator="false"
|
||||
android:zAdjustment="top"
|
||||
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" />
|
||||
<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>
|
||||
@@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/decelerate_interpolator"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:duration="300" android:fromYDelta="100.0%p" android:toYDelta="0.0%p" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:duration="300"
|
||||
android:fromYDelta="100.0%p"
|
||||
android:toYDelta="0.0%p" />
|
||||
</set>
|
||||
@@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/accelerate_interpolator"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:duration="300" android:fromYDelta="0.0%p" android:toYDelta="100.0%p" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:duration="300"
|
||||
android:fromYDelta="0.0%p"
|
||||
android:toYDelta="100.0%p" />
|
||||
</set>
|
||||
@@ -1,10 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_enabled="true" android:state_pressed="true">
|
||||
<objectAnimator android:duration="200" android:valueTo="2.0dip" android:valueType="floatType" android:propertyName="translationZ" />
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:state_enabled="true"
|
||||
android:state_pressed="true">
|
||||
<objectAnimator
|
||||
android:duration="200"
|
||||
android:valueTo="2.0dip"
|
||||
android:valueType="floatType"
|
||||
android:propertyName="translationZ" />
|
||||
</item>
|
||||
<item>
|
||||
<objectAnimator android:duration="200" android:valueTo="1.0dip" android:valueType="floatType" android:propertyName="translationZ" />
|
||||
<objectAnimator
|
||||
android:duration="200"
|
||||
android:valueTo="1.0dip"
|
||||
android:valueType="floatType"
|
||||
android:propertyName="translationZ" />
|
||||
</item>
|
||||
</selector>
|
||||
@@ -1,10 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_enabled="true" android:state_pressed="true">
|
||||
<objectAnimator android:duration="200" android:valueTo="4.0dip" android:valueType="floatType" android:propertyName="translationZ" />
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:state_enabled="true"
|
||||
android:state_pressed="true">
|
||||
<objectAnimator
|
||||
android:duration="200"
|
||||
android:valueTo="4.0dip"
|
||||
android:valueType="floatType"
|
||||
android:propertyName="translationZ" />
|
||||
</item>
|
||||
<item>
|
||||
<objectAnimator android:duration="200" android:valueTo="2.0dip" android:valueType="floatType" android:propertyName="translationZ" />
|
||||
<objectAnimator
|
||||
android:duration="200"
|
||||
android:valueTo="2.0dip"
|
||||
android:valueType="floatType"
|
||||
android:propertyName="translationZ" />
|
||||
</item>
|
||||
</selector>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="20.000004%p" android:toYDelta="0.0" />
|
||||
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||
<set android:interpolator="@android:anim/accelerate_decelerate_interpolator"
|
||||
android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="20.000004%p"
|
||||
android:toYDelta="0.0" />
|
||||
<alpha
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
</set>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/accelerate_interpolator" android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="0.0" android:toYDelta="20.000004%p" />
|
||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||
<set android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="@integer/bottom_sheet_slide_duration"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="0.0"
|
||||
android:toYDelta="20.000004%p" />
|
||||
<alpha
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<translate android:fromYDelta="100.0%" android:toYDelta="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<translate android:fromYDelta="100.0%"
|
||||
android:toYDelta="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<translate android:fromYDelta="0.0" android:toYDelta="100.0%"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<translate android:fromYDelta="0.0"
|
||||
android:toYDelta="100.0%"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha android:interpolator="@android:anim/accelerate_interpolator" android:duration="200" android:fromAlpha="1.0" android:toAlpha="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<alpha android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="200"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,5 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:duration="200" android:fromAlpha="0.0" android:toAlpha="0.0" />
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha
|
||||
android:duration="200"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="0.0" />
|
||||
</set>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:duration="118" android:fromAlpha="0.0" android:toAlpha="1.0" />
|
||||
<translate android:duration="118" android:fromYDelta="50.0%" android:toYDelta="0.0%" />
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha
|
||||
android:duration="118"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0" />
|
||||
<translate
|
||||
android:duration="118"
|
||||
android:fromYDelta="50.0%"
|
||||
android:toYDelta="0.0%" />
|
||||
</set>
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:duration="150" android:fromAlpha="1.0" android:toAlpha="0.0" />
|
||||
<translate android:duration="150" android:fromYDelta="0.0%" android:toYDelta="50.0%" />
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha
|
||||
android:duration="150"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0" />
|
||||
<translate
|
||||
android:duration="150"
|
||||
android:fromYDelta="0.0%"
|
||||
android:toYDelta="50.0%" />
|
||||
</set>
|
||||
@@ -1,5 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/decelerate_interpolator"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<scale android:interpolator="@android:anim/bounce_interpolator" android:duration="200" android:pivotX="50.0%" android:pivotY="50.0%" android:fillAfter="false" android:repeatCount="1" android:repeatMode="reverse" android:fromXScale="1.0" android:toXScale="1.2" android:fromYScale="1.0" android:toYScale="1.2" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<scale
|
||||
android:interpolator="@android:anim/bounce_interpolator"
|
||||
android:duration="200"
|
||||
android:pivotX="50.0%"
|
||||
android:pivotY="50.0%"
|
||||
android:fillAfter="false"
|
||||
android:repeatCount="1"
|
||||
android:repeatMode="reverse"
|
||||
android:fromXScale="1.0"
|
||||
android:toXScale="1.2"
|
||||
android:fromYScale="1.0"
|
||||
android:toYScale="1.2" />
|
||||
</set>
|
||||
@@ -1,5 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/decelerate_interpolator"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="100" android:pivotX="50.0%" android:pivotY="50.0%" android:fillAfter="false" android:repeatCount="1" android:repeatMode="reverse" android:fromXScale="1.0" android:toXScale="0.7" android:fromYScale="1.0" android:toYScale="0.7" />
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<scale
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="100"
|
||||
android:pivotX="50.0%"
|
||||
android:pivotY="50.0%"
|
||||
android:fillAfter="false"
|
||||
android:repeatCount="1"
|
||||
android:repeatMode="reverse"
|
||||
android:fromXScale="1.0"
|
||||
android:toXScale="0.7"
|
||||
android:fromYScale="1.0"
|
||||
android:toYScale="0.7" />
|
||||
</set>
|
||||
@@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set android:interpolator="@android:anim/decelerate_interpolator" android:duration="300"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:fromYDelta="0.0" android:toYDelta="0.0" />
|
||||
<set android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="300"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate
|
||||
android:fromYDelta="0.0"
|
||||
android:toYDelta="0.0" />
|
||||
</set>
|
||||
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha android:interpolator="@android:anim/accelerate_interpolator" android:duration="200" android:fromAlpha="0.0" android:toAlpha="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<alpha android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="200"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
@@ -1,3 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha android:interpolator="@android:anim/accelerate_interpolator" android:duration="200" android:fillAfter="true" android:fromAlpha="1.0" android:toAlpha="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
<alpha android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="200"
|
||||
android:fillAfter="true"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user