Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d41d423f8 | ||
|
|
37a4ba4462 | ||
|
|
7fba308f99 | ||
|
|
5ef2f2f6cd | ||
|
|
522f6cd42b | ||
|
|
7dd9e5ff3a | ||
|
|
07f8542f56 | ||
|
|
6b1e6f07c5 | ||
|
|
5466dd72dd | ||
|
|
5ac3b9cf6e | ||
|
|
de6edc795a | ||
|
|
19d36272cb | ||
|
|
d2fe435ad2 |
@@ -21,14 +21,21 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up NDK
|
||||||
|
uses: nttld/setup-ndk@v1
|
||||||
|
with:
|
||||||
|
ndk-version: r25c
|
||||||
|
add-to-path: false
|
||||||
|
|
||||||
- name: Set up JDK
|
- name: Set up JDK
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: '17'
|
java-version: '17'
|
||||||
distribution: 'adopt'
|
distribution: 'adopt'
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Download tools
|
- name: Download tools
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
@@ -47,6 +54,8 @@ jobs:
|
|||||||
java -jar scripts/apktool.jar b smali -o smali/VTLite.apk --use-aapt2 -p scripts/framework/
|
java -jar scripts/apktool.jar b smali -o smali/VTLite.apk --use-aapt2 -p scripts/framework/
|
||||||
zipalign -p -f 4 smali/VTLite.apk smali/VTLite.apk_aligned
|
zipalign -p -f 4 smali/VTLite.apk smali/VTLite.apk_aligned
|
||||||
mv smali/VTLite.apk_aligned smali/VTLite.apk
|
mv smali/VTLite.apk_aligned smali/VTLite.apk
|
||||||
|
env:
|
||||||
|
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||||
|
|
||||||
- name: Sign and verify the apk
|
- name: Sign and verify the apk
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
+1
-1
@@ -78,7 +78,7 @@ android {
|
|||||||
targetCompatibility JavaVersion.VERSION_14
|
targetCompatibility JavaVersion.VERSION_14
|
||||||
}
|
}
|
||||||
namespace 'ru.vtosters.lite'
|
namespace 'ru.vtosters.lite'
|
||||||
ndkVersion '26.1.10909125'
|
ndkVersion '25.2.9519653'
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
aidl true
|
aidl true
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -35,7 +35,7 @@
|
|||||||
-optimizationpasses 5
|
-optimizationpasses 5
|
||||||
-keepattributes SourceFile, LineNumberTable
|
-keepattributes SourceFile, LineNumberTable
|
||||||
|
|
||||||
-keep,allowoptimization class ru.vtosters.hooks.**, ru.vtosters.lite.utils.AndroidUtils, ru.vtosters.lite.utils.NetworkUtils, ru.vtosters.lite.utils.CrashReporter, ru.vtosters.lite.ui.activities.**, ru.vtosters.lite.services.**, ru.vtosters.lite.ui.fragments.**, ru.vtosters.lite.themes.**, ru.vtosters.lite.music.hook.**, ru.vtosters.lite.music.cache.injectors.**, ru.vtosters.lite.ui.wallpapers.NativeEffects, com.aefyr.tsg.g2.TelegramStickersService {
|
-keep,allowoptimization class ru.vtosters.hooks.**, ru.vtosters.sponsorpost.internal.Native, ru.vtosters.lite.utils.AndroidUtils, ru.vtosters.lite.utils.NetworkUtils, ru.vtosters.lite.utils.CrashReporter, ru.vtosters.lite.ui.activities.**, ru.vtosters.lite.services.**, ru.vtosters.lite.ui.fragments.**, ru.vtosters.lite.themes.**, ru.vtosters.lite.music.hook.**, ru.vtosters.lite.music.cache.injectors.**, ru.vtosters.lite.ui.wallpapers.NativeEffects, com.aefyr.tsg.g2.TelegramStickersService {
|
||||||
public <fields>;
|
public <fields>;
|
||||||
public <methods>;
|
public <methods>;
|
||||||
public <init>(...);
|
public <init>(...);
|
||||||
|
|||||||
@@ -4,8 +4,10 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" android:maxSdkVersion="22"/>
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.GET_ACCOUNTS" android:maxSdkVersion="22"/>
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
|||||||
@@ -0,0 +1,200 @@
|
|||||||
|
package com.vk.contacts;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.ContextThemeWrapper;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.RadioButton;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
|
import com.vk.core.ui.themes.VKThemeHelper;
|
||||||
|
import com.vk.core.util.ContextExtKt;
|
||||||
|
import com.vk.navigation.NavigatorKeys;
|
||||||
|
import com.vk.permission.PermissionHelper;
|
||||||
|
import com.vtosters.lite.R;
|
||||||
|
import com.vtosters.lite.VKActivity;
|
||||||
|
import com.vtosters.lite.activities.LogoutReceiver;
|
||||||
|
import java.util.List;
|
||||||
|
import kotlin.Unit;
|
||||||
|
import kotlin.jvm.b.Functions;
|
||||||
|
import kotlin.jvm.b.Functions2;
|
||||||
|
|
||||||
|
public class ContactsSyncAcitvity extends VKActivity implements View.OnClickListener {
|
||||||
|
private boolean I;
|
||||||
|
private View J;
|
||||||
|
private RadioButton K;
|
||||||
|
private RadioButton L;
|
||||||
|
private RadioButton M;
|
||||||
|
@Nullable
|
||||||
|
private String G = null;
|
||||||
|
private int H = 2;
|
||||||
|
private LogoutReceiver N = null;
|
||||||
|
|
||||||
|
public static void a(Context context) {
|
||||||
|
b(context, ContactsSyncUtils.b());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void b(Context context, int i) {
|
||||||
|
a(context, i, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void f(int i) {
|
||||||
|
this.H = i;
|
||||||
|
this.K.setChecked(i == 0);
|
||||||
|
this.L.setChecked(i == 1);
|
||||||
|
this.M.setChecked(i == 2);
|
||||||
|
CheckBox checkBox = this.J.findViewById(R.id.sync_big_pictures);
|
||||||
|
checkBox.setEnabled(i != 2);
|
||||||
|
if (i == 2) {
|
||||||
|
checkBox.setChecked(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onDismiss() {
|
||||||
|
ContactsSyncReporter.a.a(ContactsSyncUtils.b(), this.G);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void x1() {
|
||||||
|
this.H = getIntent().getIntExtra("force_select_sync_contacts", ContactsSyncUtils.b());
|
||||||
|
this.I = ContactsSyncUtils.d();
|
||||||
|
|
||||||
|
this.K = this.J.findViewById(R.id.welcome_sync_opt1);
|
||||||
|
this.L = this.J.findViewById(R.id.welcome_sync_opt2);
|
||||||
|
this.M = this.J.findViewById(R.id.welcome_sync_opt3);
|
||||||
|
|
||||||
|
this.K.setChecked(this.H == 0);
|
||||||
|
this.L.setChecked(this.H == 1);
|
||||||
|
this.M.setChecked(this.H == 2);
|
||||||
|
|
||||||
|
this.J.findViewById(R.id.welcome_sync1).setOnClickListener(this);
|
||||||
|
this.J.findViewById(R.id.welcome_sync2).setOnClickListener(this);
|
||||||
|
this.J.findViewById(R.id.welcome_sync3).setOnClickListener(this);
|
||||||
|
|
||||||
|
CheckBox checkBox = this.J.findViewById(R.id.sync_big_pictures);
|
||||||
|
checkBox.setChecked(this.I);
|
||||||
|
checkBox.setEnabled(this.H != 2);
|
||||||
|
checkBox.setOnCheckedChangeListener(ContactsSyncAcitvity.this::a);
|
||||||
|
|
||||||
|
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(this);
|
||||||
|
builder.setTitle(R.string.sett_sync);
|
||||||
|
builder.setView(this.J);
|
||||||
|
builder.setCancelable(false);
|
||||||
|
builder.setPositiveButton(R.string.save, ContactsSyncAcitvity.this::a);
|
||||||
|
builder.setNegativeButton(R.string.cancel, ContactsSyncAcitvity.this::b);
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Unit c(List list) {
|
||||||
|
ContactsSyncReporter.a.a(this.G);
|
||||||
|
finish();
|
||||||
|
return Unit.a;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NonConstantResourceId")
|
||||||
|
@Override // android.view.View.OnClickListener
|
||||||
|
public void onClick(View view) {
|
||||||
|
switch (view.getId()) {
|
||||||
|
case R.id.welcome_sync1 /* 2131365835 */:
|
||||||
|
f(0);
|
||||||
|
return;
|
||||||
|
case R.id.welcome_sync2 /* 2131365836 */:
|
||||||
|
f(1);
|
||||||
|
return;
|
||||||
|
case R.id.welcome_sync3 /* 2131365837 */:
|
||||||
|
f(2);
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.vtosters.lite.VKActivity, com.vk.core.ui.themes.ThemableActivity, androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.core.app.ComponentActivity, android.app.Activity
|
||||||
|
public void onCreate(Bundle bundle) {
|
||||||
|
setTheme(VKThemeHelper.n());
|
||||||
|
super.onCreate(bundle);
|
||||||
|
this.G = getIntent().getStringExtra(NavigatorKeys.l0);
|
||||||
|
this.N = LogoutReceiver.a(this);
|
||||||
|
overridePendingTransition(0, 0);
|
||||||
|
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
|
||||||
|
setContentView(new View(this));
|
||||||
|
this.J = View.inflate(new ContextThemeWrapper(this, VKThemeHelper.n()), R.layout.welcome, null);
|
||||||
|
VKThemeHelper.d(this);
|
||||||
|
PermissionHelper permissionHelper = PermissionHelper.r;
|
||||||
|
permissionHelper.a(this, permissionHelper.e(), R.string.permissions_contacts_sync, R.string.permissions_contacts_sync_settings, new Functions() { // from class: com.vk.contacts.c
|
||||||
|
@Override // kotlin.jvm.b.Functions
|
||||||
|
public Object invoke() {
|
||||||
|
return ContactsSyncAcitvity.this.w1();
|
||||||
|
}
|
||||||
|
}, new Functions2() { // from class: com.vk.contacts.a
|
||||||
|
@Override // kotlin.jvm.b.Functions2
|
||||||
|
public Object invoke(Object obj) {
|
||||||
|
return ContactsSyncAcitvity.this.c((List) obj);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.vtosters.lite.VKActivity, androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, android.app.Activity
|
||||||
|
public void onDestroy() {
|
||||||
|
this.N.a();
|
||||||
|
super.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // android.app.Activity
|
||||||
|
protected void onRestoreInstanceState(Bundle bundle) {
|
||||||
|
super.onRestoreInstanceState(bundle);
|
||||||
|
this.H = bundle.getInt("state_option", 2);
|
||||||
|
this.I = bundle.getBoolean("state_sync_hq_photo", false);
|
||||||
|
f(this.H);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.core.app.ComponentActivity, android.app.Activity
|
||||||
|
public void onSaveInstanceState(Bundle bundle) {
|
||||||
|
super.onSaveInstanceState(bundle);
|
||||||
|
bundle.putInt("state_option", this.H);
|
||||||
|
bundle.putBoolean("state_sync_hq_photo", this.I);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Unit w1() {
|
||||||
|
x1();
|
||||||
|
return Unit.a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void a(Context context, int i, @Nullable String str) {
|
||||||
|
Intent intent = new Intent(context, ContactsSyncAcitvity.class);
|
||||||
|
intent.setAction("syncsettings");
|
||||||
|
intent.putExtra("force_select_sync_contacts", i);
|
||||||
|
intent.putExtra(NavigatorKeys.l0, str);
|
||||||
|
if (ContextExtKt.e(context) == null) {
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
}
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void b(DialogInterface dialogInterface, int i) {
|
||||||
|
onDismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(CompoundButton compoundButton, boolean z) {
|
||||||
|
this.I = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(DialogInterface dialogInterface, int i) {
|
||||||
|
ContactsSyncUtils.b(this.H);
|
||||||
|
ContactsSyncUtils.a(this.I);
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.putExtra("option", this.H);
|
||||||
|
setResult(-1, intent);
|
||||||
|
onDismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(DialogInterface dialogInterface) {
|
||||||
|
onDismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.vk.contacts;
|
||||||
|
|
||||||
|
import com.vk.metrics.eventtracking.Event;
|
||||||
|
import com.vk.metrics.eventtracking.VkTracker;
|
||||||
|
import com.vk.navigation.NavigatorKeys;
|
||||||
|
|
||||||
|
|
||||||
|
public final class ContactsSyncReporter {
|
||||||
|
public static final ContactsSyncReporter a = new ContactsSyncReporter();
|
||||||
|
private static final String EVENT_NAME = "LoggingTracker";
|
||||||
|
private static final String ENABLE_CONTACTS_SYNC = "enable_contacts_sync";
|
||||||
|
private static final String HAS_CONTACTS_PERMISSION = "has_contacts_permission";
|
||||||
|
private static final String SELECTED_SYNC_OPTION = "selected_sync_option";
|
||||||
|
private static final String NAVIGATOR_KEYS_L0 = NavigatorKeys.l0;
|
||||||
|
|
||||||
|
private ContactsSyncReporter() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Event createEvent(boolean z, int i, String str) {
|
||||||
|
Event.a a2 = Event.b.a();
|
||||||
|
a2.a(EVENT_NAME);
|
||||||
|
a2.a(ENABLE_CONTACTS_SYNC);
|
||||||
|
a2.a(HAS_CONTACTS_PERMISSION, z);
|
||||||
|
a2.a(SELECTED_SYNC_OPTION, i != 0 ? (i != 1 ? "disabled" : "contacts") : "all");
|
||||||
|
if (str == null) {
|
||||||
|
str = "";
|
||||||
|
}
|
||||||
|
a2.a(NAVIGATOR_KEYS_L0, str);
|
||||||
|
return a2.a();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(String str) {
|
||||||
|
a(false, 2, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(int i, String str) {
|
||||||
|
a(true, i, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void a(boolean z, int i, String str) {
|
||||||
|
VkTracker vkTracker = VkTracker.k;
|
||||||
|
Event event = createEvent(z, i, str);
|
||||||
|
vkTracker.a(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package com.vk.contacts;
|
||||||
|
|
||||||
|
import android.accounts.Account;
|
||||||
|
import android.accounts.AccountManager;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import com.vk.auth.VKAuthUtils;
|
||||||
|
import com.vk.core.concurrent.VkExecutors;
|
||||||
|
import com.vk.core.preference.Preference;
|
||||||
|
import com.vk.core.util.AppContextHolder;
|
||||||
|
import com.vk.metrics.eventtracking.VkTracker;
|
||||||
|
import com.vtosters.lite.auth.VKAccountManager;
|
||||||
|
|
||||||
|
public final class ContactsSyncUtils {
|
||||||
|
private static final SharedPreferences prefs;
|
||||||
|
|
||||||
|
static {
|
||||||
|
prefs = Preference.b();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void a(boolean z) { // setSyncHqPhotos
|
||||||
|
try {
|
||||||
|
prefs.edit().putBoolean("sync_hq_photos", z).apply();
|
||||||
|
Log.d("Contacts", "setSyncHqPhotos");
|
||||||
|
} catch (Exception e) {
|
||||||
|
VkTracker.k.b(e);
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void b(int i) { // setSyncOption
|
||||||
|
try {
|
||||||
|
prefs.edit().putInt("key_sync_option", i).apply();
|
||||||
|
syncAccount(i);
|
||||||
|
Log.d("Contacts", "setSyncOption");
|
||||||
|
} catch (Exception e) {
|
||||||
|
VkTracker.k.b(e);
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean d() { // getSyncHqPhotos
|
||||||
|
return prefs.getBoolean("sync_hq_photos", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void e() { // syncAccount
|
||||||
|
syncAccount(b());
|
||||||
|
Log.d("Contacts", "syncAccount");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int b() { // getSyncOption
|
||||||
|
Account[] accounts;
|
||||||
|
try {
|
||||||
|
AccountManager accountManager = AccountManager.get(AppContextHolder.a);
|
||||||
|
accounts = accountManager.getAccountsByType("com.vkontakte.account");
|
||||||
|
if (accounts.length == 0) {
|
||||||
|
Account account = new Account(VKAccountManager.d().Z(), "com.vkontakte.account");
|
||||||
|
try {
|
||||||
|
accountManager.addAccountExplicitly(account, null, null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
VkTracker.k.a(e);
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
accounts = new Account[]{account};
|
||||||
|
}
|
||||||
|
if (ContentResolver.getSyncAutomatically(accounts[0], "com.android.contacts")) {
|
||||||
|
if (prefs.contains("key_sync_option")) {
|
||||||
|
return prefs.getInt("key_sync_option", 2);
|
||||||
|
}
|
||||||
|
if (prefs.contains("sync_all")) {
|
||||||
|
return prefs.getBoolean("sync_all", false) ? 0 : 1;
|
||||||
|
}
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 2;
|
||||||
|
} catch (Exception e2) {
|
||||||
|
VkTracker.k.b(e2);
|
||||||
|
e2.fillInStackTrace();
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void syncAccount(int i) {
|
||||||
|
Log.d("Contacts", String.valueOf(i));
|
||||||
|
if (!VKAccountManager.d().b1()) {
|
||||||
|
syncAllAccounts();
|
||||||
|
Log.d("Contacts", "VKAccountManager.d().b1() is not false");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Account account = VKAuthUtils.a.a(VKAccountManager.d().Z());
|
||||||
|
if (i != 2 && account != null) {
|
||||||
|
syncSingleAccount(account);
|
||||||
|
Log.d("Contacts", "sync single account, account is " + account);
|
||||||
|
} else {
|
||||||
|
syncAllAccounts();
|
||||||
|
Log.d("Contacts", "sync all accounts, account is " + account);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void syncSingleAccount(Account account) {
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putBoolean("com.vtosters.lite.EXTRA_FORCE_KEY", true);
|
||||||
|
ContentResolver.requestSync(account, "com.android.contacts", bundle);
|
||||||
|
VkExecutors.x.l().submit(() -> ContactsSyncAdapterService.a(AppContextHolder.a, account, new Bundle()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void syncAllAccounts() {
|
||||||
|
VkExecutors.x.l().submit(() -> ContactsSyncAdapterService.a(AppContextHolder.a.getContentResolver()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ import android.util.Log;
|
|||||||
import androidx.annotation.Keep;
|
import androidx.annotation.Keep;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import com.facebook.soloader.SoLoader;
|
import com.facebook.soloader.SoLoader;
|
||||||
|
import ru.vtosters.sponsorpost.internal.Native;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
@@ -274,6 +275,7 @@ public final class MediaNative {
|
|||||||
SoLoader.init(context2, false);
|
SoLoader.init(context2, false);
|
||||||
NativeLibLoader.loadLibrary("gnustl_shared");
|
NativeLibLoader.loadLibrary("gnustl_shared");
|
||||||
NativeLibLoader.loadLibrary("vkchronicle");
|
NativeLibLoader.loadLibrary("vkchronicle");
|
||||||
|
Native.canVote = NativeLibLoader.loadLibrary("sponsorpost");
|
||||||
loadVKMediaLibs();
|
loadVKMediaLibs();
|
||||||
f17443d.notifyAll();
|
f17443d.notifyAll();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,106 @@
|
|||||||
|
package com.vk.newsfeed.holders;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
|
import com.vk.core.ui.themes.VKThemeHelper;
|
||||||
|
import com.vk.dto.newsfeed.entries.NewsEntry;
|
||||||
|
import com.vk.dto.newsfeed.entries.Post;
|
||||||
|
import com.vk.dto.newsfeed.entries.PromoPost;
|
||||||
|
import com.vk.extensions.ViewExtKt;
|
||||||
|
import com.vtosters.lite.R;
|
||||||
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.lite.utils.newsfeed.NewsFeedFiltersUtils;
|
||||||
|
import ru.vtosters.sponsorpost.internal.Native;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesPreferences;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesService;
|
||||||
|
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
||||||
|
|
||||||
|
public final class AdMarkHolder extends BaseNewsEntryHolder<NewsEntry> {
|
||||||
|
private final TextView F;
|
||||||
|
|
||||||
|
@SuppressLint("ResourceType")
|
||||||
|
public AdMarkHolder(ViewGroup viewGroup) {
|
||||||
|
super(R.layout.marked_as_ads, viewGroup);
|
||||||
|
View view = ((RecyclerView.ViewHolder) this).itemView;
|
||||||
|
this.F = ViewExtKt.a(view, R.id.text, (View.OnClickListener) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("ResourceType")
|
||||||
|
public void b(NewsEntry newsEntry) { // onBind
|
||||||
|
String disclamer = null;
|
||||||
|
Drawable drawable = null;
|
||||||
|
int height = 0;
|
||||||
|
|
||||||
|
if (newsEntry instanceof Post) {
|
||||||
|
Post post = ((Post) newsEntry);
|
||||||
|
if (post.L1()) {
|
||||||
|
drawable = VKThemeHelper.a(R.drawable.marked_as_ads, R.attr.icon_tertiary);
|
||||||
|
int ownerId = post.b();
|
||||||
|
int postId = post.P1();
|
||||||
|
int date = post.K();
|
||||||
|
String text = post.getText();
|
||||||
|
|
||||||
|
if (PostsPreferences.isPostAd(ownerId, postId)) {
|
||||||
|
disclamer = "SponsorPost: Реклама";
|
||||||
|
if (Preferences.isValidSignature() && Native.canVote()) {
|
||||||
|
this.F.setOnClickListener(listener -> voteDialog(ownerId, postId, date, this.F.getContext()));
|
||||||
|
}
|
||||||
|
} else if (VotesPreferences.isPostAd(ownerId, postId)) {
|
||||||
|
disclamer = "SponsorPost: Возможно реклама";
|
||||||
|
if (Preferences.isValidSignature() && Native.canVote()) {
|
||||||
|
this.F.setOnClickListener(listener -> voteDialog(ownerId, postId, date, this.F.getContext()));
|
||||||
|
}
|
||||||
|
} else if (NewsFeedFiltersUtils.sponsorFilters(text)) {
|
||||||
|
disclamer = "SponsorPost: Заблокировано фильтрами";
|
||||||
|
this.F.setOnClickListener(listener -> AndroidUtils.sendToast("Заблокировано по выражению: " + NewsFeedFiltersUtils.sponsorFiltersBanWord(text)));
|
||||||
|
} else {
|
||||||
|
disclamer = m(R.string.sponsored_post_in_group);
|
||||||
|
}
|
||||||
|
|
||||||
|
height = e0().getDimensionPixelSize(R.dimen.newsfeed_ad_mark_post_height);
|
||||||
|
}
|
||||||
|
} else if (newsEntry instanceof PromoPost) {
|
||||||
|
PromoPost promoPost = (PromoPost) newsEntry;
|
||||||
|
if (!promoPost.E1().isEmpty()) {
|
||||||
|
height = e0().getDimensionPixelSize(R.dimen.newsfeed_ad_mark_promo_post_height);
|
||||||
|
disclamer = promoPost.E1();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.F.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, null, null, null);
|
||||||
|
this.F.setMinHeight(height);
|
||||||
|
this.F.setText(disclamer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void voteDialog(int ownerId, int postId, int date, Context ctx) {
|
||||||
|
new VkAlertDialog.Builder(ctx)
|
||||||
|
.setTitle("SponsorPost")
|
||||||
|
.setMessage("Этот пост является рекламным?")
|
||||||
|
.setPositiveButton("Да", ((dialog, which) -> {
|
||||||
|
int resp = VotesService.ratePost(ownerId, postId, date, true).optInt("code");
|
||||||
|
|
||||||
|
if (resp == 201 || resp == 100) {
|
||||||
|
AndroidUtils.sendToast("Спасибо за голос!");
|
||||||
|
} else {
|
||||||
|
AndroidUtils.sendToast("Ваш голос уже учтен");
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.setNeutralButton("Нет", ((dialog, which) -> {
|
||||||
|
int resp = VotesService.ratePost(ownerId, postId, date, false).optInt("code");
|
||||||
|
|
||||||
|
if (resp == 201 || resp == 100) {
|
||||||
|
AndroidUtils.sendToast("Спасибо за голос!");
|
||||||
|
} else {
|
||||||
|
AndroidUtils.sendToast("Ваш голос уже учтен");
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19661,38 +19661,39 @@ public final class R {
|
|||||||
public static final int cache_size = 0x7f12188d; // 2131892365
|
public static final int cache_size = 0x7f12188d; // 2131892365
|
||||||
public static final int cache_size_summ = 0x7f12188e; // 2131892366
|
public static final int cache_size_summ = 0x7f12188e; // 2131892366
|
||||||
public static final int clear_all_cache = 0x7f12188f; // 2131892367
|
public static final int clear_all_cache = 0x7f12188f; // 2131892367
|
||||||
public static final int invalidate_theme_cache_each_update_title = 0x7f121890; // 2131892368
|
public static final int disable_roaming_state = 0x7f121890; // 2131892368
|
||||||
public static final int invertFilters = 0x7f121891; // 2131892369
|
public static final int disable_roaming_state_submit = 0x7f121891; // 2131892369
|
||||||
public static final int invertFilters_summ = 0x7f121892; // 2131892370
|
public static final int invalidate_theme_cache_each_update_title = 0x7f121892; // 2131892370
|
||||||
public static final int invertcached_summ = 0x7f121893; // 2131892371
|
public static final int invertFilters = 0x7f121893; // 2131892371
|
||||||
public static final int invertcached_title = 0x7f121894; // 2131892372
|
public static final int invertFilters_summ = 0x7f121894; // 2131892372
|
||||||
public static final int microg_dialog1 = 0x7f121895; // 2131892373
|
public static final int invertcached_summ = 0x7f121895; // 2131892373
|
||||||
public static final int microg_dialog2 = 0x7f121896; // 2131892374
|
public static final int invertcached_title = 0x7f121896; // 2131892374
|
||||||
public static final int microg_dialog3 = 0x7f121897; // 2131892375
|
public static final int microg_dialog1 = 0x7f121897; // 2131892375
|
||||||
public static final int serverFeaturesDisable = 0x7f121898; // 2131892376
|
public static final int microg_dialog2 = 0x7f121898; // 2131892376
|
||||||
public static final int serverFeaturesDisable_summ = 0x7f121899; // 2131892377
|
public static final int microg_dialog3 = 0x7f121899; // 2131892377
|
||||||
public static final int sett_autoupdates = 0x7f12189a; // 2131892378
|
public static final int serverFeaturesDisable = 0x7f12189a; // 2131892378
|
||||||
public static final int sett_autoupdates_summ = 0x7f12189b; // 2131892379
|
public static final int serverFeaturesDisable_summ = 0x7f12189b; // 2131892379
|
||||||
public static final int sett_battery = 0x7f12189c; // 2131892380
|
public static final int sett_autoupdates = 0x7f12189c; // 2131892380
|
||||||
public static final int sett_battery_summ1 = 0x7f12189d; // 2131892381
|
public static final int sett_autoupdates_summ = 0x7f12189d; // 2131892381
|
||||||
public static final int sett_battery_summ2 = 0x7f12189e; // 2131892382
|
public static final int sett_battery = 0x7f12189e; // 2131892382
|
||||||
public static final int sett_chats = 0x7f12189f; // 2131892383
|
public static final int sett_battery_summ1 = 0x7f12189f; // 2131892383
|
||||||
public static final int sett_chats_summ = 0x7f1218a0; // 2131892384
|
public static final int sett_battery_summ2 = 0x7f1218a0; // 2131892384
|
||||||
public static final int sett_community = 0x7f1218a1; // 2131892385
|
public static final int sett_chats = 0x7f1218a1; // 2131892385
|
||||||
public static final int sett_community_summ = 0x7f1218a2; // 2131892386
|
public static final int sett_chats_summ = 0x7f1218a2; // 2131892386
|
||||||
public static final int sett_missing_links = 0x7f1218a3; // 2131892387
|
public static final int sett_community = 0x7f1218a3; // 2131892387
|
||||||
public static final int sett_missing_links_summ = 0x7f1218a4; // 2131892388
|
public static final int sett_community_summ = 0x7f1218a4; // 2131892388
|
||||||
public static final int sett_nogms_summ = 0x7f1218a5; // 2131892389
|
public static final int sett_missing_links = 0x7f1218a5; // 2131892389
|
||||||
public static final int sett_notifs = 0x7f1218a6; // 2131892390
|
public static final int sett_missing_links_summ = 0x7f1218a6; // 2131892390
|
||||||
public static final int sett_notifs_summ = 0x7f1218a7; // 2131892391
|
public static final int sett_nogms_summ = 0x7f1218a7; // 2131892391
|
||||||
public static final int sett_recommendations = 0x7f1218a8; // 2131892392
|
public static final int sett_notifs = 0x7f1218a8; // 2131892392
|
||||||
public static final int tgs_token_missing = 0x7f1218aa; // 2131892394
|
public static final int sett_notifs_summ = 0x7f1218a9; // 2131892393
|
||||||
public static final int tgs_token_reset = 0x7f1218ab; // 2131892395
|
public static final int sett_recommendations = 0x7f1218aa; // 2131892394
|
||||||
public static final int tgs_token_reset_dialog = 0x7f1218ac; // 2131892396
|
public static final int tgs_token_missing = 0x7f1218ab; // 2131892395
|
||||||
public static final int tgs_token_reset_menu = 0x7f1218ad; // 2131892397
|
public static final int tgs_token_reset = 0x7f1218ac; // 2131892396
|
||||||
public static final int update_err = 0x7f1218ae; // 2131892398
|
public static final int tgs_token_reset_dialog = 0x7f1218ad; // 2131892397
|
||||||
public static final int update_latest = 0x7f1218af; // 2131892399
|
public static final int tgs_token_reset_menu = 0x7f1218ae; // 2131892398
|
||||||
public static final int APKTOOL_DUMMY_18a9 = 0x7f1218a9; // 2131892393
|
public static final int update_err = 0x7f1218af; // 2131892399
|
||||||
|
public static final int update_latest = 0x7f1218b0; // 2131892400
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class style {
|
public static final class style {
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package ru.vtosters.hooks;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.URLConnection;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
|
public class FirebaseGzipSupport {
|
||||||
|
public static JSONObject getJsonObjectFromConnection(URLConnection connection) throws IOException, JSONException {
|
||||||
|
InputStream inputStream = getDecompressedInputStream(connection);
|
||||||
|
String jsonString = readInputStream(inputStream);
|
||||||
|
return new JSONObject(jsonString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static InputStream getDecompressedInputStream(URLConnection connection) throws IOException {
|
||||||
|
String contentEncoding = connection.getHeaderField("Content-Encoding");
|
||||||
|
if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) {
|
||||||
|
return new GZIPInputStream(connection.getInputStream());
|
||||||
|
}
|
||||||
|
return connection.getInputStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String readInputStream(InputStream inputStream) throws IOException {
|
||||||
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int read;
|
||||||
|
while ((read = bufferedReader.read()) != -1) {
|
||||||
|
sb.append((char) read);
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,13 +11,12 @@ import com.vk.discover.DiscoverItemDecorator;
|
|||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||||
import ru.vtosters.lite.utils.NetworkUtils;
|
import ru.vtosters.lite.utils.NetworkUtils;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesPreferences;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesService;
|
||||||
import ru.vtosters.sponsorpost.services.PostService;
|
import ru.vtosters.sponsorpost.services.PostService;
|
||||||
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static java.lang.Long.MAX_VALUE;
|
import static java.lang.Long.MAX_VALUE;
|
||||||
import static ru.vtosters.hooks.other.Preferences.*;
|
import static ru.vtosters.hooks.other.Preferences.*;
|
||||||
@@ -102,8 +101,16 @@ public class NewsfeedHook {
|
|||||||
public static void takeOwnerIdSponsorPost(int ownerid) {
|
public static void takeOwnerIdSponsorPost(int ownerid) {
|
||||||
if (NetworkUtils.isNetworkConnected() && PostsPreferences.isEnabled() && !Preferences.serverFeaturesDisable()) {
|
if (NetworkUtils.isNetworkConnected() && PostsPreferences.isEnabled() && !Preferences.serverFeaturesDisable()) {
|
||||||
VTExecutors.getIoScheduler().a(() -> {
|
VTExecutors.getIoScheduler().a(() -> {
|
||||||
List<Long> postIds = PostService.getPostIdsByOwnerId((long) ownerid, 0L);
|
if (PostsPreferences.isGroupAd(ownerid) || VotesPreferences.isGroupAd(ownerid)) {
|
||||||
PostsPreferences.saveGroupSpecifiedPosts(postIds, (long) ownerid);
|
if (VotesPreferences.isEnabled()) {
|
||||||
|
Map<String, List<String>> postIds = VotesService.getPostIdsByOwnerId((long) ownerid, 0L);
|
||||||
|
VotesPreferences.saveGroupSpecifiedPosts(postIds.get("vote"), (long) ownerid);
|
||||||
|
PostsPreferences.saveGroupSpecifiedPosts(postIds.get("prod"), (long) ownerid);
|
||||||
|
} else {
|
||||||
|
List<Long> postIds = PostService.getPostIdsByOwnerId((long) ownerid, 0L);
|
||||||
|
PostsPreferences.saveGroupSpecifiedPosts(postIds, (long) ownerid);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,17 +119,28 @@ public class NewsfeedHook {
|
|||||||
long ownerid = Long.parseLong(strArr[0].split("_")[0]);
|
long ownerid = Long.parseLong(strArr[0].split("_")[0]);
|
||||||
long postId = Long.parseLong(strArr[0].split("_")[1]);
|
long postId = Long.parseLong(strArr[0].split("_")[1]);
|
||||||
|
|
||||||
if (PostsPreferences.isPostAd(ownerid, postId)) {
|
if (PostsPreferences.isPostAd(ownerid, postId) || VotesPreferences.isPostAd(ownerid, postId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NetworkUtils.isNetworkConnected() && PostsPreferences.isEnabled() && !Preferences.serverFeaturesDisable() && PostsPreferences.isGroupAd(ownerid)) {
|
if (NetworkUtils.isNetworkConnected() && PostsPreferences.isEnabled() && !Preferences.serverFeaturesDisable()) {
|
||||||
VTExecutors.getIoScheduler().a(() -> {
|
VTExecutors.getIoScheduler().a(() -> {
|
||||||
boolean postIds = PostService.isPostAd(ownerid, postId);
|
if (VotesPreferences.isEnabled()) {
|
||||||
|
boolean postIds = VotesService.isPostAd(ownerid, postId);
|
||||||
|
|
||||||
if (postIds) {
|
if (postIds) {
|
||||||
PostsPreferences.saveAdPostInfo(ownerid, postId);
|
VotesPreferences.saveAdPostInfo(ownerid, postId);
|
||||||
sendToast("Этот пост помечен как рекламный");
|
}
|
||||||
|
} else {
|
||||||
|
boolean postIds = PostService.isPostAd(ownerid, postId);
|
||||||
|
|
||||||
|
if (postIds) {
|
||||||
|
PostsPreferences.saveAdPostInfo(ownerid, postId);
|
||||||
|
|
||||||
|
if (!PostsPreferences.isEnabledMarking()) {
|
||||||
|
sendToast("Этот пост помечен как рекламный");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,22 @@
|
|||||||
package ru.vtosters.hooks;
|
package ru.vtosters.hooks;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.Callback;
|
||||||
|
import okhttp3.Response;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
|
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||||
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
import static ru.vtosters.hooks.other.Preferences.*;
|
import static ru.vtosters.hooks.other.Preferences.*;
|
||||||
import static ru.vtosters.lite.net.Request.makeRequest;
|
import static ru.vtosters.lite.net.Request.makeRequest;
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||||
@@ -85,22 +94,34 @@ public class OnlineFormatterHook {
|
|||||||
|
|
||||||
if (appname != null) return appname;
|
if (appname != null) return appname;
|
||||||
|
|
||||||
makeRequest("https://" + getApi() + "/method/apps.get?app_id=" + appid + "&v=5.99&access_token=" + getUserToken(),
|
okhttp3.Request req = new okhttp3.Request.a()
|
||||||
response -> {
|
.b("https://" + getApi() + "/method/apps.get?app_id=" + appid + "&v=5.99&access_token=" + getUserToken())
|
||||||
try {
|
.a();
|
||||||
JSONObject mainJson = new JSONObject(response);
|
|
||||||
JSONObject responseJson = mainJson.getJSONObject("response");
|
|
||||||
JSONArray itemsJson = responseJson.getJSONArray("items");
|
|
||||||
|
|
||||||
AppName = itemsJson.getJSONObject(0).optString("title", "");
|
Network.b(CLIENT_API).a(req).a(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void a(Call call, IOException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
prefs.edit().putString(String.valueOf(appid), AppName).apply();
|
@Override
|
||||||
|
public void a(Call call, Response response) throws IOException {
|
||||||
|
try {
|
||||||
|
JSONObject mainJson = new JSONObject(response.a().g());
|
||||||
|
JSONObject responseJson = mainJson.getJSONObject("response");
|
||||||
|
JSONArray itemsJson = responseJson.getJSONArray("items");
|
||||||
|
|
||||||
|
AppName = itemsJson.getJSONObject(0).optString("title", "");
|
||||||
|
|
||||||
|
prefs.edit().putString(String.valueOf(appid), AppName).apply();
|
||||||
|
|
||||||
|
if (dev()) sendToast("AppName: " + AppName + " for appid: " + appid);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (dev()) sendToast("AppName: " + AppName + " for appid: " + appid);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return AppName;
|
return AppName;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import android.widget.Toast;
|
|||||||
import androidx.core.content.FileProvider;
|
import androidx.core.content.FileProvider;
|
||||||
import com.vk.core.dialogs.actionspopup.ActionsPopup;
|
import com.vk.core.dialogs.actionspopup.ActionsPopup;
|
||||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vk.core.util.ToastUtils;
|
import com.vk.core.util.ToastUtils;
|
||||||
import com.vk.dto.common.AttachmentWithMedia;
|
import com.vk.dto.common.AttachmentWithMedia;
|
||||||
import com.vk.dto.common.ImageSize;
|
import com.vk.dto.common.ImageSize;
|
||||||
@@ -90,7 +91,7 @@ public class PhotoViewer {
|
|||||||
var req = new Request.a()
|
var req = new Request.a()
|
||||||
.b(getImageUrlFromAttachment(attachment))
|
.b(getImageUrlFromAttachment(attachment))
|
||||||
.a();
|
.a();
|
||||||
client.a(req).a(new Callback() {
|
Network.b(Network.ClientType.CLIENT_API).a(req).a(new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void a(Call call, IOException e) {
|
public void a(Call call, IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -100,7 +101,7 @@ public class PhotoViewer {
|
|||||||
public void a(Call call, Response response)
|
public void a(Call call, Response response)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
var tmpImage = new File(AndroidUtils.getGlobalContext().getExternalCacheDir(), attachment.getId() + ".jpg");
|
var tmpImage = new File(AndroidUtils.getGlobalContext().getExternalCacheDir(), attachment.getId() + ".jpg");
|
||||||
try (var resp = client.a(req).execute();
|
try (var resp = Network.b(Network.ClientType.CLIENT_IMAGE_LOADER).a(req).execute();
|
||||||
var sink = Okio.a(Okio.b(tmpImage))) {
|
var sink = Okio.a(Okio.b(tmpImage))) {
|
||||||
sink.a(resp.a().f());
|
sink.a(resp.a().f());
|
||||||
var manager = (ClipboardManager) AndroidUtils.getGlobalContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
var manager = (ClipboardManager) AndroidUtils.getGlobalContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
@@ -175,4 +176,4 @@ public class PhotoViewer {
|
|||||||
}
|
}
|
||||||
return max.url;
|
return max.url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package ru.vtosters.hooks;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import com.vk.dto.newsfeed.entries.NewsEntry;
|
||||||
|
import com.vk.dto.newsfeed.entries.Post;
|
||||||
|
import com.vk.newsfeed.NewsEntryActionsAdapter;
|
||||||
|
import com.vk.newsfeed.holders.AdMarkHolder;
|
||||||
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
|
import ru.vtosters.sponsorpost.internal.Native;
|
||||||
|
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
||||||
|
|
||||||
|
public class PostsMenuHook {
|
||||||
|
private static final int id = 200;
|
||||||
|
|
||||||
|
public static void injectList(NewsEntryActionsAdapter actionsAdapter, NewsEntry newsEntry) {
|
||||||
|
if (newsEntry instanceof Post && Preferences.isValidSignature() && Native.canVote()) {
|
||||||
|
int ownerId = ((Post) newsEntry).b();
|
||||||
|
|
||||||
|
if (ownerId != AccountManagerUtils.getUserId() && PostsPreferences.isEnabled()) {
|
||||||
|
actionsAdapter.a(id, "SponsorPost");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void injectButtons(int i, NewsEntry newsEntry, Context context) {
|
||||||
|
if (newsEntry instanceof Post) {
|
||||||
|
Post post = (Post) newsEntry;
|
||||||
|
int ownerId = post.b();
|
||||||
|
int postId = post.P1();
|
||||||
|
int date = post.K();
|
||||||
|
|
||||||
|
AdMarkHolder.voteDialog(ownerId, postId, date, context);
|
||||||
|
} else {
|
||||||
|
Log.d("PostsMenuHook", "unsupported instance");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCustomButton(int i) {
|
||||||
|
return i == id;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,26 +26,15 @@ import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication;
|
|||||||
|
|
||||||
public class ProxyHook {
|
public class ProxyHook {
|
||||||
public static String linkReplacer(String link) {
|
public static String linkReplacer(String link) {
|
||||||
var vkapi = "api.vk.com";
|
String vkapi = "api.vk.com";
|
||||||
var oauth = "oauth.vk.com";
|
String oauth = "oauth.vk.com";
|
||||||
var vkstatic = "static.vk.com";
|
String vkstatic = "static.vk.com";
|
||||||
|
|
||||||
var proxyapi = getString("proxyapi");
|
String proxyapi = getProxyHost("proxyapi");
|
||||||
var proxyoauth = getString("proxyoauth");
|
String proxyoauth = getProxyHost("proxyoauth");
|
||||||
var proxystatic = getString("proxystatic");
|
String proxystatic = getProxyHost("proxystatic");
|
||||||
|
|
||||||
if (isVikaProxyEnabled()) {
|
if (!isAnyProxyEnabled() || link.isEmpty() || areProxyHostsEmpty(proxyapi, proxyoauth, proxystatic)) {
|
||||||
proxyapi = VikaMobile.getApiHost();
|
|
||||||
proxyoauth = VikaMobile.getOauthHost();
|
|
||||||
proxystatic = VikaMobile.getStaticHost();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isAnyProxyEnabled() || link.isEmpty()) {
|
|
||||||
return link;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (proxyapi.isEmpty() || proxyoauth.isEmpty() || proxystatic.isEmpty()) {
|
|
||||||
Log.d("VTLite", "Proxy is not set" + " " + proxyapi + " " + proxyoauth + " " + proxystatic);
|
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +53,29 @@ public class ProxyHook {
|
|||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getProxyHost(String hostType) {
|
||||||
|
if (isVikaProxyEnabled()) {
|
||||||
|
return switch (hostType) {
|
||||||
|
case "proxyapi" -> VikaMobile.getApiHost();
|
||||||
|
case "proxyoauth" -> VikaMobile.getOauthHost();
|
||||||
|
case "proxystatic" -> VikaMobile.getStaticHost();
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean areProxyHostsEmpty(String... hosts) {
|
||||||
|
for (String host : hosts) {
|
||||||
|
if (host.isEmpty()) {
|
||||||
|
Log.d("VTLite", "Proxy is not set: " + host);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static String staticFix(String str) {
|
public static String staticFix(String str) {
|
||||||
var string = getString("proxystatic");
|
var string = getString("proxystatic");
|
||||||
|
|
||||||
@@ -108,22 +120,18 @@ public class ProxyHook {
|
|||||||
|
|
||||||
RadioButton rgDefault = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
RadioButton rgDefault = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||||
RadioButton rgZaborona = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
RadioButton rgZaborona = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||||
// RadioButton rgRandomProxy = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
|
||||||
RadioButton rgVika = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
RadioButton rgVika = new RadioButton(new ContextThemeWrapper(ctx, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton));
|
||||||
|
|
||||||
SwitchHook.setCompoundButton(rgDefault);
|
SwitchHook.setCompoundButton(rgDefault);
|
||||||
SwitchHook.setCompoundButton(rgZaborona);
|
SwitchHook.setCompoundButton(rgZaborona);
|
||||||
// SwitchHook.setCompoundButton(rgRandomProxy);
|
|
||||||
SwitchHook.setCompoundButton(rgVika);
|
SwitchHook.setCompoundButton(rgVika);
|
||||||
|
|
||||||
rg.addView(rgDefault);
|
rg.addView(rgDefault);
|
||||||
rg.addView(rgVika);
|
rg.addView(rgVika);
|
||||||
rg.addView(rgZaborona);
|
rg.addView(rgZaborona);
|
||||||
// rg.addView(rgRandomProxy);
|
|
||||||
|
|
||||||
rgDefault.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
rgDefault.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||||
rgZaborona.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
rgZaborona.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||||
// rgRandomProxy.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
|
||||||
rgVika.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
rgVika.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f));
|
||||||
|
|
||||||
rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0);
|
rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0);
|
||||||
@@ -134,28 +142,21 @@ public class ProxyHook {
|
|||||||
rgZaborona.setText(ctx.getString(R.string.proxy_enable) + " (Zaborona)");
|
rgZaborona.setText(ctx.getString(R.string.proxy_enable) + " (Zaborona)");
|
||||||
rgZaborona.setTextColor(getTextAttr());
|
rgZaborona.setTextColor(getTextAttr());
|
||||||
|
|
||||||
// rgRandomProxy.setText(ctx.getString(R.string.proxy_enable) + " (Random Socks Proxy)");
|
|
||||||
// rgRandomProxy.setTextColor(getTextAttr());
|
|
||||||
|
|
||||||
rgVika.setText(ctx.getString(R.string.proxy_enable) + " (Vika Mobile)");
|
rgVika.setText(ctx.getString(R.string.proxy_enable) + " (Vika Mobile)");
|
||||||
rgVika.setTextColor(getTextAttr());
|
rgVika.setTextColor(getTextAttr());
|
||||||
|
|
||||||
rgZaborona.setChecked(isZaboronaEnabled());
|
rgZaborona.setChecked(isZaboronaEnabled());
|
||||||
rgDefault.setChecked(!isZaboronaEnabled() && !isRandomProxyEnabled() && !isVikaProxyEnabled());
|
rgDefault.setChecked(!isZaboronaEnabled() && !isVikaProxyEnabled());
|
||||||
// rgRandomProxy.setChecked(isRandomProxyEnabled());
|
|
||||||
rgVika.setChecked(isVikaProxyEnabled());
|
rgVika.setChecked(isVikaProxyEnabled());
|
||||||
|
|
||||||
new VkAlertDialog.Builder(ctx)
|
new VkAlertDialog.Builder(ctx)
|
||||||
.setTitle(ctx.getString(R.string.vtlproxy))
|
.setTitle(ctx.getString(R.string.vtlproxy))
|
||||||
.setMessage(ctx.getString(R.string.proxy_warning))
|
.setMessage(ctx.getString(R.string.proxy_warning) + "\n\nТак же можно включить встроенный прокси от ВКонтакте перейдя в настройки прокси")
|
||||||
.setView(rg)
|
.setView(rg)
|
||||||
.setPositiveButton(ctx.getString(R.string.vtl_confirm), ((dialog, which) -> { // Применить
|
.setPositiveButton(ctx.getString(R.string.vtl_confirm), ((dialog, which) -> { // Применить
|
||||||
if (rgZaborona.isChecked()) {
|
if (rgZaborona.isChecked()) {
|
||||||
Preferences.getPreferences().edit().putString("proxy", "zaborona").commit();
|
Preferences.getPreferences().edit().putString("proxy", "zaborona").commit();
|
||||||
restartApplication();
|
restartApplication();
|
||||||
// } else if (rgRandomProxy.isChecked()) {
|
|
||||||
// Preferences.getPreferences().edit().putString("proxy", "randomproxy").commit();
|
|
||||||
// restartApplication();
|
|
||||||
} else if (rgVika.isChecked()) {
|
} else if (rgVika.isChecked()) {
|
||||||
Preferences.getPreferences().edit().putString("proxy", "vika").commit();
|
Preferences.getPreferences().edit().putString("proxy", "vika").commit();
|
||||||
restartApplication();
|
restartApplication();
|
||||||
@@ -169,4 +170,4 @@ public class ProxyHook {
|
|||||||
})
|
})
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,19 +5,20 @@ import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
|||||||
import com.vk.core.network.Network;
|
import com.vk.core.network.Network;
|
||||||
import com.vk.core.util.DeviceIdProvider;
|
import com.vk.core.util.DeviceIdProvider;
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
|
||||||
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
||||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
import static ru.vtosters.hooks.DateHook.getLocale;
|
import static ru.vtosters.hooks.DateHook.getLocale;
|
||||||
import static ru.vtosters.hooks.GroupsCatalogInjector.injectIntoCatalog;
|
import static ru.vtosters.hooks.GroupsCatalogInjector.injectIntoCatalog;
|
||||||
import static ru.vtosters.hooks.other.Preferences.getBoolValue;
|
import static ru.vtosters.hooks.other.Preferences.getBoolValue;
|
||||||
@@ -26,8 +27,6 @@ import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
|||||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserId;
|
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserId;
|
||||||
|
|
||||||
public class CatalogJsonInjector {
|
public class CatalogJsonInjector {
|
||||||
private static final OkHttpClient mClient = VtOkHttpClient.getInstance();
|
|
||||||
|
|
||||||
public static JSONObject music(JSONObject json) throws JSONException {
|
public static JSONObject music(JSONObject json) throws JSONException {
|
||||||
var catalog = json.optJSONObject("catalog");
|
var catalog = json.optJSONObject("catalog");
|
||||||
var oldItems = catalog != null ? catalog.optJSONArray("sections") : null;
|
var oldItems = catalog != null ? catalog.optJSONArray("sections") : null;
|
||||||
@@ -263,9 +262,10 @@ public class CatalogJsonInjector {
|
|||||||
+ sectionUrl
|
+ sectionUrl
|
||||||
+ "&access_token="
|
+ "&access_token="
|
||||||
+ AccountManagerUtils.getUserToken())
|
+ AccountManagerUtils.getUserToken())
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
||||||
try {
|
try (Response resp = Network.b(CLIENT_API).a(request).execute()) {
|
||||||
var json = new JSONObject(mClient.a(request).execute().a().g()).getJSONObject("response");
|
var json = new JSONObject(GzipDecompressor.decompressResponse(resp)).getJSONObject("response");
|
||||||
var catalogarr = json.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
|
var catalogarr = json.optJSONObject("catalog").optJSONArray("sections").optJSONObject(0);
|
||||||
|
|
||||||
var title = catalogarr.optString("title");
|
var title = catalogarr.optString("title");
|
||||||
@@ -279,4 +279,4 @@ public class CatalogJsonInjector {
|
|||||||
Log.d("VTLMusic", "Error: " + e.getMessage());
|
Log.d("VTLMusic", "Error: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -311,6 +311,10 @@ public class Preferences {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getId() {
|
||||||
|
return String.valueOf(AccountManagerUtils.getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
public static void updateBuildNumber() {
|
public static void updateBuildNumber() {
|
||||||
try {
|
try {
|
||||||
getPreferences().edit().putLong("setupTime", AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo(AndroidUtils.getPackageName(), 0).lastUpdateTime).apply();
|
getPreferences().edit().putLong("setupTime", AndroidUtils.getGlobalContext().getPackageManager().getPackageInfo(AndroidUtils.getPackageName(), 0).lastUpdateTime).apply();
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ public class VtOkHttpClient extends OkHttpClient {
|
|||||||
private static class LazyHolder {
|
private static class LazyHolder {
|
||||||
private static final VtOkHttpClient instance = new VtOkHttpClient();
|
private static final VtOkHttpClient instance = new VtOkHttpClient();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,6 @@ import com.vk.im.engine.models.dialogs.Dialog;
|
|||||||
import com.vk.im.engine.models.messages.Msg;
|
import com.vk.im.engine.models.messages.Msg;
|
||||||
import com.vk.im.engine.utils.ImDialogsUtils;
|
import com.vk.im.engine.utils.ImDialogsUtils;
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import ru.vtosters.hooks.other.ThemesUtils;
|
import ru.vtosters.hooks.other.ThemesUtils;
|
||||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||||
import ru.vtosters.lite.net.Request;
|
import ru.vtosters.lite.net.Request;
|
||||||
@@ -15,21 +14,49 @@ import ru.vtosters.lite.utils.AccountManagerUtils;
|
|||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
|
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||||
|
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||||
|
|
||||||
public class Requests {
|
public class Requests {
|
||||||
public static void hookRead(Dialog dialog) {
|
public static void hookRead(Dialog dialog) {
|
||||||
Request.makeRequest("https://" + ProxyUtils.getApi() + "/method/messages.markAsRead?start_message_id=" + dialog.F1() + "&peer_id=" + dialog.getId() + "&v=5.119&access_token=" + AccountManagerUtils.getUserToken(), response -> {
|
okhttp3.Request req = new okhttp3.Request.a()
|
||||||
});
|
.b("https://" + ProxyUtils.getApi() + "/method/messages.markAsRead?start_message_id=" + dialog.F1() + "&peer_id=" + dialog.getId() + "&v=5.119&access_token=" + AccountManagerUtils.getUserToken())
|
||||||
|
.a();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Network.b(CLIENT_API).a(req).execute().close();;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void hookReadStartMsgTo(Msg dialog) {
|
public static void hookReadStartMsgTo(Msg dialog) {
|
||||||
Request.makeRequest("https://" + ProxyUtils.getApi() + "/method/messages.markAsRead?start_message_id=" + dialog.C1() + "&peer_id=" + dialog.v1() + "&v=5.119&access_token=" + AccountManagerUtils.getUserToken(), response -> {
|
okhttp3.Request req = new okhttp3.Request.a()
|
||||||
});
|
.b("https://" + ProxyUtils.getApi() + "/method/messages.markAsRead?start_message_id=" + dialog.C1() + "&peer_id=" + dialog.v1() + "&v=5.119&access_token=" + AccountManagerUtils.getUserToken())
|
||||||
|
.a();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Network.b(CLIENT_API).a(req).execute().close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void hookKick(Msg dialog) {
|
public static void hookKick(Msg dialog) {
|
||||||
if (dialog.getFrom().t1() == AccountManagerUtils.getUserId()) return;
|
if (dialog.getFrom().t1() == AccountManagerUtils.getUserId()) return;
|
||||||
Request.makeRequest("https://" + ProxyUtils.getApi() + "/method/messages.removeChatUser?member_id=" + dialog.getFrom().t1() + "&chat_id=" + ImDialogsUtils.c(dialog.v1()) + "&v=5.119&access_token=" + AccountManagerUtils.getUserToken(), response -> {
|
|
||||||
});
|
okhttp3.Request req = new okhttp3.Request.a()
|
||||||
|
.b("https://" + ProxyUtils.getApi() + "/method/messages.removeChatUser?member_id=" + dialog.getFrom().t1() + "&chat_id=" + ImDialogsUtils.c(dialog.v1()) + "&v=5.119&access_token=" + AccountManagerUtils.getUserToken())
|
||||||
|
.a();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Network.b(CLIENT_API).a(req).execute().close();;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void hookDialogInfo(Dialog dialog) {
|
public static void hookDialogInfo(Dialog dialog) {
|
||||||
@@ -51,7 +78,7 @@ public class Requests {
|
|||||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
|
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"))
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
new OkHttpClient().a(request).execute().a().g();
|
Network.b(CLIENT_API).a(request).execute().a().g();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
package ru.vtosters.lite.downloaders;
|
package ru.vtosters.lite.downloaders;
|
||||||
|
|
||||||
import android.app.DownloadManager;
|
import android.media.MediaScannerConnection;
|
||||||
import android.content.Context;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vk.dto.common.ImageSize;
|
import com.vk.dto.common.ImageSize;
|
||||||
import com.vk.dto.stories.model.StoryEntry;
|
import com.vk.dto.stories.model.StoryEntry;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
import okhttp3.ResponseBody;
|
||||||
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static ru.vtosters.lite.downloaders.VideoDownloader.downloadVideo;
|
import static ru.vtosters.lite.downloaders.VideoDownloader.downloadVideo;
|
||||||
import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext;
|
|
||||||
|
|
||||||
public class StoryDownloader {
|
public class StoryDownloader {
|
||||||
|
|
||||||
public static void downloadStory(StoryEntry story) {
|
public static void downloadStory(StoryEntry story) {
|
||||||
if (story.T1()) {
|
if (story.T1()) {
|
||||||
List<ImageSize> imageSizes = story.E.Q.t1();
|
downloadImage(story);
|
||||||
String url = imageSizes.get(imageSizes.size() - 1).url;
|
|
||||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
|
||||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
|
||||||
request.setTitle("photo" + story.E.a + ".jpg");
|
|
||||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, "photo" + story.E.a + ".jpg");
|
|
||||||
request.allowScanningByMediaScanner();
|
|
||||||
((DownloadManager) getGlobalContext().getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// if story is a video
|
// if story is a video
|
||||||
@@ -31,4 +31,55 @@ public class StoryDownloader {
|
|||||||
downloadVideo(story.F, null);
|
downloadVideo(story.F, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public static void downloadImage(StoryEntry story) {
|
||||||
|
List<ImageSize> imageSizes = story.E.Q.t1();
|
||||||
|
String url = imageSizes.get(imageSizes.size() - 1).url;
|
||||||
|
|
||||||
|
OkHttpClient client = Network.b(Network.ClientType.CLIENT_IMAGE_LOADER);
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(url)
|
||||||
|
.a();
|
||||||
|
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
if (!response.h()) {
|
||||||
|
throw new IOException("Unexpected code " + response);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResponseBody responseBody = response.a();
|
||||||
|
|
||||||
|
if (responseBody == null) {
|
||||||
|
throw new IOException("No response body");
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = "photo" + story.E.a + ".jpg";
|
||||||
|
File outputDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "/Stories/");
|
||||||
|
|
||||||
|
if (!outputDir.exists()) {
|
||||||
|
outputDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
File outputFile = new File(outputDir, fileName);
|
||||||
|
|
||||||
|
try (InputStream inputStream = responseBody.a();
|
||||||
|
FileOutputStream outputStream = new FileOutputStream(outputFile)) {
|
||||||
|
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
int bytesRead;
|
||||||
|
|
||||||
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
|
outputStream.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
outputStream.flush();
|
||||||
|
|
||||||
|
MediaScannerConnection.scanFile(AndroidUtils.getGlobalContext(), new String[]{outputFile.toString()}, null, null);
|
||||||
|
|
||||||
|
AndroidUtils.sendToast("Файл скачан в Pictures/Stories");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
package ru.vtosters.lite.downloaders;
|
package ru.vtosters.lite.downloaders;
|
||||||
|
|
||||||
import android.app.DownloadManager;
|
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.media.MediaScannerConnection;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -13,35 +12,113 @@ import android.widget.TextView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
import com.vk.core.dialogs.bottomsheet.MenuBottomSheetAction;
|
import com.vk.core.dialogs.bottomsheet.MenuBottomSheetAction;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vk.core.util.ToastUtils;
|
import com.vk.core.util.ToastUtils;
|
||||||
import com.vk.dto.common.VideoFile;
|
import com.vk.dto.common.VideoFile;
|
||||||
import com.vk.dto.stories.model.StoryEntry;
|
import com.vk.dto.stories.model.StoryEntry;
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
|
import okhttp3.*;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
import static ru.vtosters.hooks.other.ThemesUtils.getTextAttr;
|
import static ru.vtosters.hooks.other.ThemesUtils.getTextAttr;
|
||||||
import static ru.vtosters.lite.net.Request.makeRequest;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken;
|
||||||
|
|
||||||
public class VideoDownloader {
|
public class VideoDownloader {
|
||||||
public static final int DOWNLOAD_ID = 0;
|
public static int DOWNLOAD_ID = 0;
|
||||||
public static final int OPEN_EXTERNAL_LINK_ID = 1;
|
public static int OPEN_EXTERNAL_LINK_ID = 1;
|
||||||
|
|
||||||
public static void addAction(List<MenuBottomSheetAction> actions, int... ints) {
|
public static void addAction(List<MenuBottomSheetAction> actions, int... ints) {
|
||||||
actions.add(new MenuBottomSheetAction(ints[0], ints[1], ints[2], ints[3]));
|
actions.add(new MenuBottomSheetAction(ints[0], ints[1], ints[2], ints[3]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void downloadVideo(VideoFile videoFile, Context context) {
|
public static void downloadVideo(VideoFile videoFile, Context context) {
|
||||||
final List<String> qualities = new ArrayList<>();
|
List<String> qualities = new ArrayList<>();
|
||||||
final List<String> urls = new ArrayList<>();
|
List<String> urls = new ArrayList<>();
|
||||||
|
|
||||||
|
addVideos(videoFile, qualities, urls);
|
||||||
|
|
||||||
|
Context finalContext = context != null ? context : LifecycleUtils.getCurrentActivity();
|
||||||
|
|
||||||
|
if (qualities.isEmpty()) {
|
||||||
|
ToastUtils.a(finalContext.getString(R.string.videodownloaderr));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var adapter = new ArrayAdapter(
|
||||||
|
finalContext,
|
||||||
|
android.R.layout.simple_list_item_1,
|
||||||
|
qualities.toArray(new String[0])) {
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
TextView textView = (TextView) super.getView(position, convertView, parent);
|
||||||
|
textView.setTextColor(getTextAttr());
|
||||||
|
return textView;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
new VkAlertDialog.Builder(finalContext)
|
||||||
|
.setAdapter(adapter, (dialog, which) -> {
|
||||||
|
String url = urls.get(which);
|
||||||
|
|
||||||
|
OkHttpClient client = Network.b(Network.ClientType.CLIENT_IMAGE_LOADER);;
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(url)
|
||||||
|
.a();
|
||||||
|
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
if (!response.h()) {
|
||||||
|
throw new IOException("Unexpected code " + response);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResponseBody responseBody = response.a();
|
||||||
|
|
||||||
|
File outputDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "/VKVideo/");
|
||||||
|
|
||||||
|
if (!outputDir.exists()) {
|
||||||
|
outputDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
File outputFile = new File(outputDir, videoFile + ".mp4");
|
||||||
|
|
||||||
|
try (InputStream inputStream = responseBody.a();
|
||||||
|
FileOutputStream outputStream = new FileOutputStream(outputFile)) {
|
||||||
|
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
int bytesRead;
|
||||||
|
|
||||||
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
|
outputStream.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
outputStream.flush();
|
||||||
|
|
||||||
|
MediaScannerConnection.scanFile(finalContext, new String[]{outputFile.toString()}, null, null);
|
||||||
|
|
||||||
|
AndroidUtils.sendToast("Файл скачан в Movies/VKVideo");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addVideos(VideoFile videoFile, List<String> qualities, List<String> urls) {
|
||||||
if (!TextUtils.isEmpty(videoFile.D)) {
|
if (!TextUtils.isEmpty(videoFile.D)) {
|
||||||
qualities.add("2160p");
|
qualities.add("2160p");
|
||||||
urls.add(videoFile.D);
|
urls.add(videoFile.D);
|
||||||
@@ -75,40 +152,6 @@ public class VideoDownloader {
|
|||||||
qualities.add("240p");
|
qualities.add("240p");
|
||||||
urls.add(videoFile.e);
|
urls.add(videoFile.e);
|
||||||
}
|
}
|
||||||
|
|
||||||
Context finalContext = context != null ? context : LifecycleUtils.getCurrentActivity();
|
|
||||||
|
|
||||||
if (qualities.isEmpty()) {
|
|
||||||
ToastUtils.a(finalContext.getString(R.string.videodownloaderr));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var adapter = new ArrayAdapter(
|
|
||||||
finalContext,
|
|
||||||
android.R.layout.simple_list_item_1,
|
|
||||||
qualities.toArray(new String[0])) {
|
|
||||||
@Override
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
|
||||||
TextView textView = (TextView) super.getView(position, convertView, parent);
|
|
||||||
textView.setTextColor(getTextAttr());
|
|
||||||
return textView;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
new VkAlertDialog.Builder(finalContext)
|
|
||||||
.setAdapter(adapter, (dialog, which) -> {
|
|
||||||
try {
|
|
||||||
var url = urls.get(which);
|
|
||||||
var request = new DownloadManager.Request(Uri.parse(url))
|
|
||||||
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
|
|
||||||
.setTitle(videoFile.toString())
|
|
||||||
.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, videoFile + ".mp4");
|
|
||||||
request.allowScanningByMediaScanner();
|
|
||||||
((DownloadManager) finalContext.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);
|
|
||||||
} catch (Throwable ignored) {
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void parseVideoLink(String url, Context ctx) {
|
public static void parseVideoLink(String url, Context ctx) {
|
||||||
@@ -124,20 +167,35 @@ public class VideoDownloader {
|
|||||||
progressDialog.setMessage(ctx.getString(R.string.video_dl_progress));
|
progressDialog.setMessage(ctx.getString(R.string.video_dl_progress));
|
||||||
progressDialog.show();
|
progressDialog.show();
|
||||||
|
|
||||||
makeRequest("https://" + getApi() + "/method/stories.getById?stories=" + storyId + "&v=5.99&access_token=" + getUserToken(),
|
var req = new Request.a()
|
||||||
response -> {
|
.b("https://" + getApi() + "/method/stories.getById?stories=" + storyId + "&v=5.99&access_token=" + getUserToken())
|
||||||
progressDialog.cancel();
|
.a("Accept-Encoding", "gzip")
|
||||||
|
.a();
|
||||||
|
|
||||||
|
Network.b(CLIENT_API).a(req).a(new Callback() {
|
||||||
|
|
||||||
try {
|
@Override
|
||||||
JSONObject mainJson = new JSONObject(response);
|
public void a(Call call, IOException e) {
|
||||||
JSONObject responseJson = mainJson.getJSONObject("response").optJSONArray("items").optJSONObject(0);
|
e.fillInStackTrace();
|
||||||
StoryEntry story = new StoryEntry(responseJson);
|
Toast.makeText(ctx, ctx.getString(R.string.video_dl_error), Toast.LENGTH_SHORT).show();
|
||||||
StoryDownloader.downloadStory(story);
|
}
|
||||||
} catch (JSONException e) {
|
|
||||||
e.printStackTrace();
|
@Override
|
||||||
Toast.makeText(ctx, ctx.getString(R.string.video_dl_error), Toast.LENGTH_SHORT).show();
|
public void a(Call call, Response response) throws IOException {
|
||||||
}
|
progressDialog.cancel();
|
||||||
});
|
|
||||||
|
try {
|
||||||
|
JSONObject mainJson = new JSONObject(GzipDecompressor.decompressResponse(response));
|
||||||
|
JSONObject responseJson = mainJson.getJSONObject("response").optJSONArray("items").optJSONObject(0);
|
||||||
|
StoryEntry story = new StoryEntry(responseJson);
|
||||||
|
StoryDownloader.downloadStory(story);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
Toast.makeText(ctx, ctx.getString(R.string.video_dl_error), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,25 +207,38 @@ public class VideoDownloader {
|
|||||||
String videoId = url.split("video")[1];
|
String videoId = url.split("video")[1];
|
||||||
String ownerId = videoId.split("_")[0];
|
String ownerId = videoId.split("_")[0];
|
||||||
|
|
||||||
final ProgressDialog progressDialog = new ProgressDialog(ctx);
|
ProgressDialog progressDialog = new ProgressDialog(ctx);
|
||||||
progressDialog.setMessage(ctx.getString(R.string.video_dl_progress));
|
progressDialog.setMessage(ctx.getString(R.string.video_dl_progress));
|
||||||
progressDialog.show();
|
progressDialog.show();
|
||||||
|
|
||||||
makeRequest("https://" + getApi() + "/method/video.get?owner_id=" + ownerId + "&videos=" + videoId + "&v=5.99&access_token=" + getUserToken(),
|
var req = new Request.a()
|
||||||
response -> {
|
.b("https://" + getApi() + "/method/video.get?owner_id=" + ownerId + "&videos=" + videoId + "&v=5.99&access_token=" + getUserToken())
|
||||||
progressDialog.cancel();
|
.a("Accept-Encoding", "gzip")
|
||||||
|
.a();
|
||||||
|
|
||||||
try {
|
Network.b(CLIENT_API).a(req).a(new Callback() {
|
||||||
JSONObject mainJson = new JSONObject(response);
|
@Override
|
||||||
JSONObject responseJson = mainJson.getJSONObject("response");
|
public void a(Call call, IOException e) {
|
||||||
JSONArray itemsJson = responseJson.getJSONArray("items");
|
e.fillInStackTrace();
|
||||||
|
Toast.makeText(ctx, ctx.getString(R.string.video_dl_error), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
VideoFile videoFile = new VideoFile(itemsJson.getJSONObject(0));
|
@Override
|
||||||
downloadVideo(videoFile, ctx);
|
public void a(Call call, Response response) throws IOException {
|
||||||
} catch (JSONException e) {
|
progressDialog.cancel();
|
||||||
e.printStackTrace();
|
|
||||||
Toast.makeText(ctx, ctx.getString(R.string.video_dl_error), Toast.LENGTH_SHORT).show();
|
try {
|
||||||
}
|
JSONObject mainJson = new JSONObject(GzipDecompressor.decompressResponse(response));
|
||||||
});
|
JSONObject responseJson = mainJson.getJSONObject("response");
|
||||||
|
JSONArray itemsJson = responseJson.getJSONArray("items");
|
||||||
|
|
||||||
|
VideoFile videoFile = new VideoFile(itemsJson.getJSONObject(0));
|
||||||
|
downloadVideo(videoFile, ctx);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.fillInStackTrace();
|
||||||
|
Toast.makeText(ctx, ctx.getString(R.string.video_dl_error), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package ru.vtosters.lite.downloaders.messages;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vk.core.util.ToastUtils;
|
import com.vk.core.util.ToastUtils;
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
import okhttp3.Call;
|
import okhttp3.Call;
|
||||||
@@ -12,12 +13,12 @@ import okhttp3.Response;
|
|||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
|
||||||
import ru.vtosters.lite.downloaders.messages.items.MiniMsg;
|
import ru.vtosters.lite.downloaders.messages.items.MiniMsg;
|
||||||
import ru.vtosters.lite.downloaders.messages.items.MiniUser;
|
import ru.vtosters.lite.downloaders.messages.items.MiniUser;
|
||||||
import ru.vtosters.lite.proxy.ProxyUtils;
|
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
@@ -28,6 +29,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
|
|
||||||
public class MessagesDownloader {
|
public class MessagesDownloader {
|
||||||
private static final int[] VIDEO_QUALITIES = {144, 240, 360, 480, 720, 1080, 1440, 2160};
|
private static final int[] VIDEO_QUALITIES = {144, 240, 360, 480, 720, 1080, 1440, 2160};
|
||||||
|
|
||||||
@@ -104,8 +107,9 @@ public class MessagesDownloader {
|
|||||||
AccountManagerUtils.getUserToken());
|
AccountManagerUtils.getUserToken());
|
||||||
var req = new Request.a()
|
var req = new Request.a()
|
||||||
.b(url)
|
.b(url)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
VtOkHttpClient.getInstance().a(req).a(new Callback() {
|
Network.b(CLIENT_API).a(req).a(new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void a(Call call, IOException e) {
|
public void a(Call call, IOException e) {
|
||||||
Log.d("MessagesDownloader", e.getMessage());
|
Log.d("MessagesDownloader", e.getMessage());
|
||||||
@@ -114,7 +118,7 @@ public class MessagesDownloader {
|
|||||||
@Override
|
@Override
|
||||||
public void a(Call call, Response response) {
|
public void a(Call call, Response response) {
|
||||||
try {
|
try {
|
||||||
JSONObject obj = new JSONObject(response.a().g()).getJSONObject("response");
|
JSONObject obj = new JSONObject(GzipDecompressor.decompressResponse(response)).getJSONObject("response");
|
||||||
|
|
||||||
SparseArray<MiniUser> users = new SparseArray<>();
|
SparseArray<MiniUser> users = new SparseArray<>();
|
||||||
parseUsers(users, obj.optJSONArray("profiles"), false);
|
parseUsers(users, obj.optJSONArray("profiles"), false);
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package ru.vtosters.lite.foaf;
|
package ru.vtosters.lite.foaf;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
@@ -11,8 +13,11 @@ import okhttp3.Response;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||||
|
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||||
|
import ru.vtosters.lite.proxy.api.VikaMobile;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@@ -24,8 +29,7 @@ import java.util.Optional;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.isAnyProxyEnabled;
|
|
||||||
|
|
||||||
public class FoafBase {
|
public class FoafBase {
|
||||||
private static final Pattern FOAF_REGEX = Pattern.compile("<ya:created dc:date=\"(.+?)\"");
|
private static final Pattern FOAF_REGEX = Pattern.compile("<ya:created dc:date=\"(.+?)\"");
|
||||||
@@ -36,13 +40,14 @@ public class FoafBase {
|
|||||||
public static JSONObject getBypassedOnlineInfo(int id) throws JSONException {
|
public static JSONObject getBypassedOnlineInfo(int id) throws JSONException {
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(API_VKNEXT + id)
|
.b(API_VKNEXT + id)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
JSONObject dummy = new JSONObject();
|
JSONObject dummy = new JSONObject();
|
||||||
dummy.put("last_seen", 0);
|
dummy.put("last_seen", 0);
|
||||||
|
|
||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
JSONObject online_info = new JSONObject(response.a().g()).getJSONObject("response").optJSONObject(Integer.toString(id));
|
JSONObject online_info = new JSONObject(GzipDecompressor.decompressResponse(response)).getJSONObject("response").optJSONObject(Integer.toString(id));
|
||||||
return online_info == null ? dummy : online_info;
|
return online_info == null ? dummy : online_info;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("GetBypassedOnlineInfo", e.getMessage());
|
Log.e("GetBypassedOnlineInfo", e.getMessage());
|
||||||
@@ -53,12 +58,13 @@ public class FoafBase {
|
|||||||
public static JSONObject getBypassedOnlineInfo(String ids) {
|
public static JSONObject getBypassedOnlineInfo(String ids) {
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(API_VKNEXT + ids)
|
.b(API_VKNEXT + ids)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
JSONObject dummy = new JSONObject();
|
JSONObject dummy = new JSONObject();
|
||||||
|
|
||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
JSONObject online_info = new JSONObject(response.a().g()).getJSONObject("response").optJSONObject("response");
|
JSONObject online_info = new JSONObject(GzipDecompressor.decompressResponse(response)).getJSONObject("response").optJSONObject("response");
|
||||||
return online_info == null ? dummy : online_info;
|
return online_info == null ? dummy : online_info;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("GetBypassedOnlineInfo1", e.getMessage());
|
Log.e("GetBypassedOnlineInfo1", e.getMessage());
|
||||||
@@ -66,9 +72,9 @@ public class FoafBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
private static String getLink(int i) {
|
private static String getLink(int i) {
|
||||||
String prefix = isAnyProxyEnabled() ? "https://" + getApi() + "/_/vk.com/foaf.php?id=" : "https://vk.com/foaf.php?id=";
|
return ProxyUtils.isAnyProxyEnabled() ? String.format("https://%s/_/vk.com/foaf.php?id=%d", ProxyUtils.getApi(), i) : String.format("https://vk.com/foaf.php?id=%d", i);
|
||||||
return prefix + i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void loadAndShow(Context context, int i) {
|
public static void loadAndShow(Context context, int i) {
|
||||||
@@ -79,12 +85,13 @@ public class FoafBase {
|
|||||||
|
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(getLink(i))
|
.b(getLink(i))
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = Network.b(CLIENT_API).a(request).execute()) {
|
||||||
LifecycleUtils.getCurrentActivity().runOnUiThread(() -> {
|
LifecycleUtils.getCurrentActivity().runOnUiThread(() -> {
|
||||||
try {
|
try {
|
||||||
showFoafInfo(progressDialog, context, i, response.a().g());
|
showFoafInfo(progressDialog, context, i, GzipDecompressor.decompressResponse(response));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@@ -120,6 +127,7 @@ public class FoafBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
private static void showFoafDialog(Context context, int i, String normalHumanDate, long daysPassed) {
|
private static void showFoafDialog(Context context, int i, String normalHumanDate, long daysPassed) {
|
||||||
String message = String.format("%s %d%s %s%s %d", context.getString(R.string.foafid), i, context.getString(R.string.foafregdate), normalHumanDate, context.getString(R.string.foafdate), daysPassed);
|
String message = String.format("%s %d%s %s%s %d", context.getString(R.string.foafid), i, context.getString(R.string.foafregdate), normalHumanDate, context.getString(R.string.foafdate), daysPassed);
|
||||||
new VkAlertDialog.Builder(context)
|
new VkAlertDialog.Builder(context)
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ import org.json.JSONArray;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||||
|
import ru.vtosters.lite.music.downloader.M3UDownloader;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
@@ -22,10 +24,10 @@ public class Genius {
|
|||||||
private static final OkHttpClient client = VtOkHttpClient.getInstance();
|
private static final OkHttpClient client = VtOkHttpClient.getInstance();
|
||||||
|
|
||||||
public static String getTextMusic(MusicTrack musictrack) {
|
public static String getTextMusic(MusicTrack musictrack) {
|
||||||
var uid = musictrack.y1();
|
String uid = musictrack.y1();
|
||||||
var artist = removeExtras(musictrack.C);
|
String artist = removeExtras(M3UDownloader.getArtists(musictrack));
|
||||||
var title = removeExtras(musictrack.f);
|
String title = removeExtras(musictrack.f);
|
||||||
var duration = musictrack.h;
|
int duration = musictrack.h;
|
||||||
|
|
||||||
if (TextUtils.isEmpty(uid) || TextUtils.isEmpty(artist) || TextUtils.isEmpty(title) || duration == 0) {
|
if (TextUtils.isEmpty(uid) || TextUtils.isEmpty(artist) || TextUtils.isEmpty(title) || duration == 0) {
|
||||||
Log.d("Genius", "grabTrackInfo: " + "Empty track, info: " + artist + " - " + title + " - " + duration + " - " + uid);
|
Log.d("Genius", "grabTrackInfo: " + "Empty track, info: " + artist + " - " + title + " - " + duration + " - " + uid);
|
||||||
@@ -42,17 +44,18 @@ public class Genius {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(URL + "/search/songs?q=" + URLEncoder.encode(artist + " " + track) + "&from_background=0" + "&page=1")
|
.b(String.format("%s/search/songs?q=%s&from_background=0&page=1", URL, URLEncoder.encode(artist + " " + track)))
|
||||||
.a("User-Agent", "Genius/5.14.0 (Android; Android 13; Google Pixel 4 XL)")
|
.a("User-Agent", "Genius/5.21.3 (Android; Android 13; Google Pixel 4 XL)")
|
||||||
.a("Authorization", KEY)
|
.a("Authorization", KEY)
|
||||||
.a("x-genius-app-background-request", "0")
|
.a("x-genius-app-background-request", "0")
|
||||||
.a("x-genius-logged-out", "true")
|
.a("x-genius-logged-out", "true")
|
||||||
.a("host", "api.genius.com")
|
.a("host", "api.genius.com")
|
||||||
.a("Content-Type", "application/x-www-form-urlencoded")
|
.a("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.b()
|
.b()
|
||||||
.a();
|
.a();
|
||||||
try (Response resp = client.a(request).execute()) {
|
try (Response resp = client.a(request).execute()) {
|
||||||
String payload = resp.a().g();
|
String payload = GzipDecompressor.decompressResponse(resp);
|
||||||
JSONArray sections = new JSONObject(payload).getJSONObject("response").getJSONArray("sections");
|
JSONArray sections = new JSONObject(payload).getJSONObject("response").getJSONArray("sections");
|
||||||
|
|
||||||
for (int i = 0; i < sections.length(); i++) {
|
for (int i = 0; i < sections.length(); i++) {
|
||||||
@@ -86,17 +89,18 @@ public class Genius {
|
|||||||
|
|
||||||
private static String getText(String track) {
|
private static String getText(String track) {
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(URL + track + "?text_format=plain")
|
.b(String.format("%s%s?text_format=plain", URL, track))
|
||||||
.a("User-Agent", "Genius/5.14.0 (Android; Android 13; Google Pixel 4 XL)")
|
.a("User-Agent", "Genius/5.21.3 (Android; Android 13; Google Pixel 4 XL)")
|
||||||
.a("Authorization", KEY)
|
.a("Authorization", KEY)
|
||||||
.a("x-genius-app-background-request", "0")
|
.a("x-genius-app-background-request", "0")
|
||||||
.a("x-genius-logged-out", "true")
|
.a("x-genius-logged-out", "true")
|
||||||
.a("host", "api.genius.com")
|
.a("host", "api.genius.com")
|
||||||
.a("Content-Type", "application/x-www-form-urlencoded")
|
.a("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.b()
|
.b()
|
||||||
.a();
|
.a();
|
||||||
try {
|
try (Response resp = client.a(request).execute()) {
|
||||||
JSONObject payload = new JSONObject(client.a(request).execute().a().g());
|
JSONObject payload = new JSONObject(GzipDecompressor.decompressResponse(resp));
|
||||||
|
|
||||||
if (!payload.has("response")) {
|
if (!payload.has("response")) {
|
||||||
return AndroidUtils.getString("error_no_text");
|
return AndroidUtils.getString("error_no_text");
|
||||||
@@ -107,4 +111,4 @@ public class Genius {
|
|||||||
return AndroidUtils.getString("error_no_text") + "\n\n" + AndroidUtils.getString(R.string.error) + ": \n" + e.getMessage();
|
return AndroidUtils.getString("error_no_text") + "\n\n" + AndroidUtils.getString(R.string.error) + ": \n" + e.getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,7 @@ import ru.vtosters.hooks.other.Preferences;
|
|||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||||
import ru.vtosters.lite.downloaders.AudioDownloader;
|
import ru.vtosters.lite.downloaders.AudioDownloader;
|
||||||
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
||||||
|
import ru.vtosters.lite.music.downloader.M3UDownloader;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -32,7 +33,7 @@ public class LastFMScrobbler {
|
|||||||
|
|
||||||
public static void grabMusicTrack(MusicTrack musictrack) {
|
public static void grabMusicTrack(MusicTrack musictrack) {
|
||||||
var uid = musictrack.y1();
|
var uid = musictrack.y1();
|
||||||
var artist = musictrack.C;
|
var artist = M3UDownloader.getArtists(musictrack);
|
||||||
var title = musictrack.f;
|
var title = musictrack.f;
|
||||||
var duration = musictrack.h;
|
var duration = musictrack.h;
|
||||||
var track_id = musictrack.d;
|
var track_id = musictrack.d;
|
||||||
@@ -83,12 +84,12 @@ public class LastFMScrobbler {
|
|||||||
params.put("sk", getSessionKey());
|
params.put("sk", getSessionKey());
|
||||||
params.put("artist[0]", artist);
|
params.put("artist[0]", artist);
|
||||||
params.put("track[0]", title);
|
params.put("track[0]", title);
|
||||||
if (!TextUtils.isEmpty(album))
|
if (!TextUtils.isEmpty(album)) {
|
||||||
params.put("album[0]", album);
|
params.put("album[0]", album);
|
||||||
|
}
|
||||||
params.put("duration[0]", String.valueOf(duration));
|
params.put("duration[0]", String.valueOf(duration));
|
||||||
params.put("timestamp[0]", String.valueOf(System.currentTimeMillis() / 1000));
|
params.put("timestamp[0]", String.valueOf(System.currentTimeMillis() / 1000));
|
||||||
|
|
||||||
|
|
||||||
fetch(params, new Callback() {
|
fetch(params, new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void a(Call call, IOException e) {
|
public void a(Call call, IOException e) {
|
||||||
@@ -150,8 +151,9 @@ public class LastFMScrobbler {
|
|||||||
params.put("format", "json");
|
params.put("format", "json");
|
||||||
|
|
||||||
var reqBodyBuilder = new FormBody.a(StandardCharsets.UTF_8);
|
var reqBodyBuilder = new FormBody.a(StandardCharsets.UTF_8);
|
||||||
for (var entry : params.entrySet())
|
for (var entry : params.entrySet()) {
|
||||||
reqBodyBuilder.a(entry.getKey(), entry.getValue());
|
reqBodyBuilder.a(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
var req = new Request.a()
|
var req = new Request.a()
|
||||||
.b(URL)
|
.b(URL)
|
||||||
@@ -164,6 +166,7 @@ public class LastFMScrobbler {
|
|||||||
public static void fetchSession(JSONObject json) throws JSONException {
|
public static void fetchSession(JSONObject json) throws JSONException {
|
||||||
if (!json.has("session")) {
|
if (!json.has("session")) {
|
||||||
Log.d("Scrobbler", "Auth failed - no session");
|
Log.d("Scrobbler", "Auth failed - no session");
|
||||||
|
AndroidUtils.sendToast("Ошибка входа");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +180,8 @@ public class LastFMScrobbler {
|
|||||||
.putBoolean("lastfm_enabled", true)
|
.putBoolean("lastfm_enabled", true)
|
||||||
.apply();
|
.apply();
|
||||||
|
|
||||||
|
AndroidUtils.sendToast("Успешный вход");
|
||||||
|
|
||||||
Log.d("Scrobbler", "Auth success as " + name + ", key " + key);
|
Log.d("Scrobbler", "Auth success as " + name + ", key " + key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import bruhcollective.itaysonlab.libvkx.ILibVkxService;
|
|||||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClientImpl;
|
import bruhcollective.itaysonlab.libvkx.client.LibVKXClientImpl;
|
||||||
import com.vk.dto.music.MusicTrack;
|
import com.vk.dto.music.MusicTrack;
|
||||||
|
import ru.vtosters.lite.music.downloader.M3UDownloader;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ public class MusicCacheImpl {
|
|||||||
track.I != null ? track.I.getId() + "" : "-1",
|
track.I != null ? track.I.getId() + "" : "-1",
|
||||||
track.f,
|
track.f,
|
||||||
!TextUtils.isEmpty(track.g) ? track.g : "",
|
!TextUtils.isEmpty(track.g) ? track.g : "",
|
||||||
track.C,
|
M3UDownloader.getArtists(track),
|
||||||
track.I != null ? track.I.getTitle() : "",
|
track.I != null ? track.I.getTitle() : "",
|
||||||
track.K,
|
track.K,
|
||||||
track.h,
|
track.h,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import com.vk.dto.music.AlbumLink;
|
|||||||
import com.vk.dto.music.MusicTrack;
|
import com.vk.dto.music.MusicTrack;
|
||||||
import com.vk.dto.music.Thumb;
|
import com.vk.dto.music.Thumb;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
import ru.vtosters.lite.music.downloader.M3UDownloader;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
||||||
|
|
||||||
@@ -116,7 +117,7 @@ public class MusicCacheDb extends SQLiteOpenHelper implements AutoCloseable { //
|
|||||||
vals.put(Constants.COLUMN_ALBUM_ID, track.I != null ? track.I.getId() + "" : "-1");
|
vals.put(Constants.COLUMN_ALBUM_ID, track.I != null ? track.I.getId() + "" : "-1");
|
||||||
vals.put(Constants.COLUMN_TITLE, track.f);
|
vals.put(Constants.COLUMN_TITLE, track.f);
|
||||||
vals.put(Constants.COLUMN_SUBTITLE, track.g);
|
vals.put(Constants.COLUMN_SUBTITLE, track.g);
|
||||||
vals.put(Constants.COLUMN_ARTIST, track.C);
|
vals.put(Constants.COLUMN_ARTIST, M3UDownloader.getArtists(track));
|
||||||
vals.put(Constants.COLUMN_ALBUM_TITLE, track.I != null ? track.I.getTitle() : "");
|
vals.put(Constants.COLUMN_ALBUM_TITLE, track.I != null ? track.I.getTitle() : "");
|
||||||
vals.put(Constants.COLUMN_EXPLICIT, Boolean.compare(track.K, true));
|
vals.put(Constants.COLUMN_EXPLICIT, Boolean.compare(track.K, true));
|
||||||
vals.put(Constants.COLUMN_DURATION, track.h);
|
vals.put(Constants.COLUMN_DURATION, track.h);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.json.JSONArray;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
||||||
|
import ru.vtosters.lite.music.downloader.M3UDownloader;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ public class PlaylistHelper {
|
|||||||
return createAlbum(
|
return createAlbum(
|
||||||
thumb != null ? thumb.h(600) : "",
|
thumb != null ? thumb.h(600) : "",
|
||||||
albumLink.getTitle(),
|
albumLink.getTitle(),
|
||||||
track.C,
|
M3UDownloader.getArtists(track),
|
||||||
track.y1(),
|
track.y1(),
|
||||||
albumLink.getId()
|
albumLink.getId()
|
||||||
);
|
);
|
||||||
@@ -75,7 +76,7 @@ public class PlaylistHelper {
|
|||||||
list.add(createAlbum(
|
list.add(createAlbum(
|
||||||
thumb != null ? thumb.h(600) : "",
|
thumb != null ? thumb.h(600) : "",
|
||||||
albumLink.getTitle(),
|
albumLink.getTitle(),
|
||||||
track.C,
|
M3UDownloader.getArtists(track),
|
||||||
track.y1(),
|
track.y1(),
|
||||||
albumLink.getId()
|
albumLink.getId()
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ import com.vk.dto.music.MusicTrack;
|
|||||||
import com.vk.dto.music.Playlist;
|
import com.vk.dto.music.Playlist;
|
||||||
import java8.util.concurrent.CompletableFuture;
|
import java8.util.concurrent.CompletableFuture;
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -19,6 +20,7 @@ import java.util.List;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
import static ru.vtosters.hooks.DateHook.getLocale;
|
import static ru.vtosters.hooks.DateHook.getLocale;
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||||
|
|
||||||
@@ -50,17 +52,17 @@ public class PlaylistConverter {
|
|||||||
|
|
||||||
var request = new Request.a()
|
var request = new Request.a()
|
||||||
.b(requestUrl)
|
.b(requestUrl)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var response = CompletableFuture.supplyAsync(() -> {
|
var response = CompletableFuture.supplyAsync(() -> {
|
||||||
try {
|
try (Response resp = Network.b(CLIENT_API).a(request).execute()) {
|
||||||
return new OkHttpClient().a(request).execute().a().g();
|
return GzipDecompressor.decompressResponse(resp);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}).get();
|
||||||
).get();
|
|
||||||
var jsonObj = new JSONObject(response);
|
var jsonObj = new JSONObject(response);
|
||||||
if (!jsonObj.has("response"))
|
if (!jsonObj.has("response"))
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ import com.vk.core.util.DeviceIdProvider;
|
|||||||
import com.vk.dto.music.MusicTrack;
|
import com.vk.dto.music.MusicTrack;
|
||||||
import java8.util.concurrent.CompletableFuture;
|
import java8.util.concurrent.CompletableFuture;
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -18,6 +19,7 @@ import java.util.List;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
import static ru.vtosters.hooks.DateHook.getLocale;
|
import static ru.vtosters.hooks.DateHook.getLocale;
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
import static ru.vtosters.lite.proxy.ProxyUtils.getApi;
|
||||||
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserId;
|
import static ru.vtosters.lite.utils.AccountManagerUtils.getUserId;
|
||||||
@@ -44,12 +46,13 @@ public class AudioGet {
|
|||||||
|
|
||||||
var request = new Request.a()
|
var request = new Request.a()
|
||||||
.b(requestUrl)
|
.b(requestUrl)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var response = CompletableFuture.supplyAsync(() -> {
|
var response = CompletableFuture.supplyAsync(() -> {
|
||||||
try {
|
try (Response resp = Network.b(CLIENT_API).a(request).execute()) {
|
||||||
return new OkHttpClient().a(request).execute().a().g();
|
return GzipDecompressor.decompressResponse(resp);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.util.Log;
|
|||||||
import com.google.android.exoplayer2.source.hls.playlist.e;
|
import com.google.android.exoplayer2.source.hls.playlist.e;
|
||||||
import com.google.android.exoplayer2.source.hls.playlist.f;
|
import com.google.android.exoplayer2.source.hls.playlist.f;
|
||||||
import com.google.android.exoplayer2.source.hls.playlist.f.a;
|
import com.google.android.exoplayer2.source.hls.playlist.f.a;
|
||||||
|
import com.vk.dto.music.Artist;
|
||||||
import com.vk.dto.music.MusicTrack;
|
import com.vk.dto.music.MusicTrack;
|
||||||
import java8.util.concurrent.CompletableFuture;
|
import java8.util.concurrent.CompletableFuture;
|
||||||
import java8.util.concurrent.CompletionException;
|
import java8.util.concurrent.CompletionException;
|
||||||
@@ -26,6 +27,7 @@ import java.io.IOException;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class M3UDownloader
|
public class M3UDownloader
|
||||||
implements ITrackDownloader {
|
implements ITrackDownloader {
|
||||||
@@ -151,7 +153,7 @@ public class M3UDownloader
|
|||||||
}
|
}
|
||||||
|
|
||||||
static File getResultMp3File(File outDir, boolean cache, MusicTrack track) {
|
static File getResultMp3File(File outDir, boolean cache, MusicTrack track) {
|
||||||
return new File(outDir, IOUtils.getValidFileName((cache ? "track" : track.C + " - " + getTitle(track)) + ".mp3"));
|
return new File(outDir, IOUtils.getValidFileName((cache ? "track" : getArtists(track) + " - " + getTitle(track)) + ".mp3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -178,4 +180,14 @@ public class M3UDownloader
|
|||||||
private static class Holder {
|
private static class Holder {
|
||||||
private static final M3UDownloader INSTANCE = new M3UDownloader();
|
private static final M3UDownloader INSTANCE = new M3UDownloader();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public static String getArtists(MusicTrack track) {
|
||||||
|
return (track.L == null || track.I == null
|
||||||
|
? normalizeMetadata(track.C)
|
||||||
|
: normalizeMetadata(track.L.stream().map(Artist::w1).collect(Collectors.joining(", "))));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String normalizeMetadata(String in) {
|
||||||
|
return in.replaceAll("[\\\\/:*?\"<>|]", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class GithubList {
|
|
||||||
private static final OkHttpClient mClient = VtOkHttpClient.getInstance();
|
|
||||||
|
|
||||||
public static ArrayList<String> getProxy(String url, String proxyname) throws IOException {
|
|
||||||
Request link = new Request.a()
|
|
||||||
.b(url)
|
|
||||||
.a();
|
|
||||||
|
|
||||||
try {
|
|
||||||
var response = mClient.a(link).execute().a().g();
|
|
||||||
|
|
||||||
if (!response.contains(":")) {
|
|
||||||
Log.d(proxyname, "No proxy found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(proxyname, response);
|
|
||||||
|
|
||||||
return new ArrayList<>(Arrays.asList(response.split("\n")));
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.d(proxyname, "Failed to fetch data, link: " + link);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,6 +5,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.lite.proxy.http.CustomHttp;
|
import ru.vtosters.lite.proxy.http.CustomHttp;
|
||||||
import ru.vtosters.lite.proxy.https.CustomHttps;
|
import ru.vtosters.lite.proxy.https.CustomHttps;
|
||||||
@@ -62,16 +63,15 @@ public class ProxyUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Boolean isAnyProxyEnabled() {
|
public static Boolean isAnyProxyEnabled() {
|
||||||
return isApiProxyEnabled() || isVikaProxyEnabled();
|
return (isApiProxyEnabled() || isVikaProxyEnabled()) && !isVKProxyEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Boolean isZaboronaEnabled() {
|
public static Boolean isZaboronaEnabled() {
|
||||||
return Preferences.getString("proxy").equals("zaborona");
|
return Preferences.getString("proxy").equals("zaborona");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Boolean isRandomProxyEnabled() {
|
public static Boolean isVKProxyEnabled() {
|
||||||
// return Preferences.getString("proxy").equals("randomproxy");
|
return Network.l.b().d();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Boolean isApiProxyEnabled() {
|
public static Boolean isApiProxyEnabled() {
|
||||||
@@ -125,15 +125,10 @@ public class ProxyUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasProxy(String list) {
|
|
||||||
return list.contains(":"); // proxy format: ip:port
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setProxy() {
|
public static void setProxy() {
|
||||||
if (!isAnyProxyEnabled()) return;
|
if (!isAnyProxyEnabled() || Preferences.getString("proxy").equals("vika") || Preferences.getString("proxy").equals("apiproxy")) return;
|
||||||
switch (Preferences.getString("proxy")) {
|
switch (Preferences.getString("proxy")) {
|
||||||
case "zaborona" -> Zaborona.loadProxy();
|
case "zaborona" -> Zaborona.loadProxy();
|
||||||
// case "randomproxy" -> RandomProxy.loadProxy();
|
|
||||||
case "socks" -> CustomSocks.loadProxy();
|
case "socks" -> CustomSocks.loadProxy();
|
||||||
case "http" -> CustomHttp.loadProxy();
|
case "http" -> CustomHttp.loadProxy();
|
||||||
case "https" -> CustomHttps.loadProxy();
|
case "https" -> CustomHttps.loadProxy();
|
||||||
@@ -154,4 +149,4 @@ public class ProxyUtils {
|
|||||||
clearProperty("socksPortHost");
|
clearProperty("socksPortHost");
|
||||||
forceProxyApplying();
|
forceProxyApplying();
|
||||||
} // Reset all proxies
|
} // Reset all proxies
|
||||||
}
|
}
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy;
|
|
||||||
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.socks.Hookzof;
|
|
||||||
import ru.vtosters.lite.proxy.socks.Jetkai;
|
|
||||||
import ru.vtosters.lite.proxy.socks.Roosterkid;
|
|
||||||
import ru.vtosters.lite.proxy.socks.TheSpeedX;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.resetProxy;
|
|
||||||
|
|
||||||
public class RandomProxy {
|
|
||||||
public static String type = Preferences.getPreferences().getString("random_type", "none");
|
|
||||||
public static String host = Preferences.getPreferences().getString("random_host", "");
|
|
||||||
public static boolean showProxyResult = false;
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
if (host.isEmpty()) {
|
|
||||||
if (getProxy()) loadProxy();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case "socks" -> {
|
|
||||||
System.setProperty("socksProxyHost", host.split(":")[0]);
|
|
||||||
System.setProperty("socksProxyPort", host.split(":")[1]);
|
|
||||||
}
|
|
||||||
case "http" -> {
|
|
||||||
System.setProperty("http.proxyHost", host.split(":")[0]);
|
|
||||||
System.setProperty("http.proxyPort", host.split(":")[1]);
|
|
||||||
}
|
|
||||||
case "https" -> {
|
|
||||||
System.setProperty("https.proxyHost", host.split(":")[0]);
|
|
||||||
System.setProperty("https.proxyPort", host.split(":")[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setupNewProxy() throws IOException {
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "none").putString("random_host", "").commit();
|
|
||||||
|
|
||||||
resetProxy();
|
|
||||||
|
|
||||||
showProxyResult = true;
|
|
||||||
getProxy();
|
|
||||||
Preferences.getPreferences().edit().putString("proxy", "randomproxy").commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean getProxy() throws IOException {
|
|
||||||
var random = new java.util.Random();
|
|
||||||
var randomInt = random.nextInt(8);
|
|
||||||
switch (randomInt) {
|
|
||||||
case 0 -> Hookzof.loadProxy();
|
|
||||||
case 1 -> TheSpeedX.loadProxy();
|
|
||||||
case 2 -> Jetkai.loadProxy();
|
|
||||||
case 3 -> Roosterkid.loadProxy();
|
|
||||||
case 4 -> ru.vtosters.lite.proxy.http.Jetkai.loadProxy();
|
|
||||||
case 5 -> ru.vtosters.lite.proxy.http.TheSpeedX.loadProxy();
|
|
||||||
case 6 -> ru.vtosters.lite.proxy.https.Jetkai.loadProxy();
|
|
||||||
case 7 -> ru.vtosters.lite.proxy.https.Roosterkid.loadProxy();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.http;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class Jetkai {
|
|
||||||
private static final String TAG = "Jetkai_Http";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "http").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("http.proxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("http.proxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.http;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class TheSpeedX {
|
|
||||||
private static final String TAG = "TheSpeedX_Http";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "http").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("http.proxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("http.proxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.https;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class Jetkai {
|
|
||||||
private static final String TAG = "Jetkai_Https";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-https.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "https").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("https.proxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("https.proxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.https;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class Roosterkid {
|
|
||||||
private static final String TAG = "Roosterkid_Https";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS_RAW.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "https").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("https.proxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("https.proxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.socks;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class Hookzof {
|
|
||||||
private static final String TAG = "Hookzof_Socks";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("socksProxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("socksProxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.socks;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class Jetkai {
|
|
||||||
private static final String TAG = "Jetkai_Socks";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks5.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("socksProxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("socksProxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.socks;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class Roosterkid {
|
|
||||||
private static final String TAG = "Roosterkid_Socks";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5_RAW.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("socksProxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("socksProxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package ru.vtosters.lite.proxy.socks;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import com.vtosters.lite.R;
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.proxy.RandomProxy;
|
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static ru.vtosters.lite.proxy.GithubList.getProxy;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying;
|
|
||||||
import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy;
|
|
||||||
|
|
||||||
public class TheSpeedX {
|
|
||||||
private static final String TAG = "TheSpeedX_Socks";
|
|
||||||
|
|
||||||
public static void loadProxy() throws IOException {
|
|
||||||
ArrayList<String> proxyList = getProxy("https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt", TAG);
|
|
||||||
|
|
||||||
if (proxyList == null) {
|
|
||||||
Log.d(TAG, "No proxy found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxy = proxyList.get(new java.util.Random().nextInt(proxyList.size()));
|
|
||||||
|
|
||||||
if (!hasProxy(proxy)) {
|
|
||||||
Log.d(TAG, "No proxy port found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "Setting proxy: " + proxy.split(":")[0] + ":" + proxy.split(":")[1]);
|
|
||||||
|
|
||||||
if (RandomProxy.showProxyResult) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString(R.string.proxy_setup_success) + " " + proxy);
|
|
||||||
RandomProxy.showProxyResult = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit();
|
|
||||||
|
|
||||||
System.setProperty("socksProxyHost", proxy.split(":")[0]);
|
|
||||||
System.setProperty("socksProxyPort", proxy.split(":")[1]);
|
|
||||||
forceProxyApplying();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,4 +8,4 @@ public class Zaborona {
|
|||||||
System.setProperty("socksProxyPort", "1488");
|
System.setProperty("socksProxyPort", "1488");
|
||||||
forceProxyApplying();
|
forceProxyApplying();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,7 @@ import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
|||||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.NetworkUtils;
|
import ru.vtosters.lite.utils.NetworkUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -32,6 +33,7 @@ public class UsersList {
|
|||||||
|
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(Utils.getDomain() + "/api/getUsersWithServiceDescriptionsAndBanners")
|
.b(Utils.getDomain() + "/api/getUsersWithServiceDescriptionsAndBanners")
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
VtOkHttpClient.getInstance().a(request).a(new Callback() {
|
VtOkHttpClient.getInstance().a(request).a(new Callback() {
|
||||||
@@ -43,7 +45,7 @@ public class UsersList {
|
|||||||
@Override
|
@Override
|
||||||
public void a(Call call, Response response) {
|
public void a(Call call, Response response) {
|
||||||
try {
|
try {
|
||||||
parseJson(new JSONObject(response.a().g()).getJSONObject("response"));
|
parseJson(new JSONObject(GzipDecompressor.decompressResponse(response)).getJSONObject("response"));
|
||||||
} catch (JSONException | IOException e) {
|
} catch (JSONException | IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public class Utils {
|
|||||||
"&vt_dark=" + (ThemesUtils.isDarkTheme() ? "1" : "0") +
|
"&vt_dark=" + (ThemesUtils.isDarkTheme() ? "1" : "0") +
|
||||||
"&vt_amoled=" + (ThemesUtils.isAmoledTheme() && ThemesUtils.isDarkTheme() ? "1" : "0") +
|
"&vt_amoled=" + (ThemesUtils.isAmoledTheme() && ThemesUtils.isDarkTheme() ? "1" : "0") +
|
||||||
"&secret=" + AccountManagerUtils.getUserSecret() +
|
"&secret=" + AccountManagerUtils.getUserSecret() +
|
||||||
"&proxy=" + (ProxyUtils.isAnyProxyEnabled() ? "1" : "0") +
|
"&proxy=" + ((ProxyUtils.isAnyProxyEnabled() || ProxyUtils.isVKProxyEnabled()) ? "1" : "0") +
|
||||||
"&lang=" + DateHook.getLocale() +
|
"&lang=" + DateHook.getLocale() +
|
||||||
"&vt=1" +
|
"&vt=1" +
|
||||||
"&useragent=" + Base64Utils.encodeValue(Base64Utils.encode(Network.l.c().a())) +
|
"&useragent=" + Base64Utils.encodeValue(Base64Utils.encode(Network.l.c().a())) +
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.vk.core.dialogs.alert.VkAlertDialog;
|
|||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.lite.proxy.ProxyUtils;
|
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||||
|
import ru.vtosters.lite.proxy.api.VikaMobile;
|
||||||
import ru.vtosters.lite.ui.fragments.VKUIwrapper;
|
import ru.vtosters.lite.ui.fragments.VKUIwrapper;
|
||||||
import ru.vtosters.lite.utils.NavigatorUtils;
|
import ru.vtosters.lite.utils.NavigatorUtils;
|
||||||
|
|
||||||
|
|||||||
@@ -375,4 +375,4 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
updateCacheSize();
|
updateCacheSize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,46 +1,35 @@
|
|||||||
package ru.vtosters.lite.ui.fragments;
|
package ru.vtosters.lite.ui.fragments;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
|
||||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
import com.vk.core.network.Network;
|
import com.vk.core.network.Network;
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.hooks.other.ThemesUtils;
|
import ru.vtosters.hooks.other.ThemesUtils;
|
||||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||||
import ru.vtosters.lite.downloaders.AudioDownloader;
|
|
||||||
import ru.vtosters.lite.downloaders.VideoDownloader;
|
import ru.vtosters.lite.downloaders.VideoDownloader;
|
||||||
import ru.vtosters.lite.music.LastFMScrobbler;
|
|
||||||
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
|
||||||
import ru.vtosters.lite.proxy.ProxyUtils;
|
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||||
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
|
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
|
||||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
import ru.vtosters.lite.utils.AndroidUtils;
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.LifecycleUtils;
|
|
||||||
import ru.vtosters.lite.utils.SearchEngine;
|
import ru.vtosters.lite.utils.SearchEngine;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
import static com.vk.core.network.Network.ClientType.CLIENT_API;
|
||||||
|
|
||||||
public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||||
private static final ExecutorService executor = Executors.newCachedThreadPool();
|
|
||||||
|
|
||||||
public static void download(Context ctx) {
|
public static void download(Context ctx) {
|
||||||
final EditText input = new EditText(ctx);
|
EditText input = new EditText(ctx);
|
||||||
input.setTextColor(ThemesUtils.getTextAttr());
|
input.setTextColor(ThemesUtils.getTextAttr());
|
||||||
input.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
|
input.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
|
||||||
|
|
||||||
@@ -64,26 +53,7 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
public void onCreate(Bundle bundle) {
|
public void onCreate(Bundle bundle) {
|
||||||
super.onCreate(bundle);
|
super.onCreate(bundle);
|
||||||
addPreferencesFromResource(R.xml.preferences_media);
|
addPreferencesFromResource(R.xml.preferences_media);
|
||||||
prefs();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
prefs();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceTreeClick(Preference preference) {
|
|
||||||
findPreference("maxquality").setEnabled(Preferences.isEnableExternalOpening());
|
|
||||||
return super.onPreferenceTreeClick(preference);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void prefs() {
|
|
||||||
findPreference("download_video").setOnPreferenceClickListener(preference -> {
|
findPreference("download_video").setOnPreferenceClickListener(preference -> {
|
||||||
download(requireContext());
|
download(requireContext());
|
||||||
|
|
||||||
@@ -93,47 +63,6 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
deleteVideoHistoryDialog(requireContext());
|
deleteVideoHistoryDialog(requireContext());
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
findPreference("lastfm_auth").setOnPreferenceClickListener(preference -> {
|
|
||||||
if (LastFMScrobbler.isLoggedIn()) {
|
|
||||||
logout(getContext());
|
|
||||||
} else {
|
|
||||||
lastfmAuth(getContext());
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (LastFMScrobbler.isLoggedIn()) {
|
|
||||||
findPreference("lastfm_auth").setSummary(requireContext().getString(R.string.lastfm_authorized_as) + " " + LastFMScrobbler.getUserName());
|
|
||||||
} else {
|
|
||||||
findPreference("lastfm_enabled").setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
findPreference("lastfm").setVisible(!Preferences.serverFeaturesDisable());
|
|
||||||
|
|
||||||
findPreference("cached_tracks").setSummary(String.format(requireContext().getString(R.string.cached_tracks_counter), MusicCacheImpl.getTracksCount()));
|
|
||||||
findPreference("cached_tracks").setOnPreferenceClickListener(preference -> {
|
|
||||||
if (MusicCacheImpl.isEmpty()) {
|
|
||||||
AndroidUtils.sendToast(requireContext().getString(R.string.no_cache_error));
|
|
||||||
} else {
|
|
||||||
delcache(requireContext());
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference("useGenius").setVisible(!Preferences.serverFeaturesDisable());
|
|
||||||
|
|
||||||
findPreference("audio_download").setOnPreferenceClickListener(preference -> {
|
|
||||||
dlaudio(requireContext());
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference("invertCachedTracks").setVisible(!MusicCacheImpl.isEmpty());
|
|
||||||
|
|
||||||
findPreference("musicdefcatalog").setVisible(!Preferences.getBoolValue("useOldAppVer", false));
|
|
||||||
findPreference("useOldAppVer").setOnPreferenceClickListener(preference -> {
|
|
||||||
LifecycleUtils.restartApplicationWithTimer();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference("select_photo_search_engine").setOnPreferenceClickListener(preference -> {
|
findPreference("select_photo_search_engine").setOnPreferenceClickListener(preference -> {
|
||||||
var items = new ImagineArrayAdapter.ImagineArrayAdapterItem[SearchEngine.values().length + 1];
|
var items = new ImagineArrayAdapter.ImagineArrayAdapterItem[SearchEngine.values().length + 1];
|
||||||
@@ -164,81 +93,10 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
findPreference("maxquality").setEnabled(Preferences.isEnableExternalOpening());
|
findPreference("maxquality").setEnabled(Preferences.isEnableExternalOpening());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void lastfmAuth(Context ctx) {
|
@Override
|
||||||
LinearLayout linearLayout = new LinearLayout(ctx);
|
public boolean onPreferenceTreeClick(Preference preference) {
|
||||||
linearLayout.setOrientation(LinearLayout.VERTICAL);
|
findPreference("maxquality").setEnabled(Preferences.isEnableExternalOpening());
|
||||||
|
return super.onPreferenceTreeClick(preference);
|
||||||
final EditText fn = new EditText(ctx);
|
|
||||||
fn.setHint(R.string.lastfm_login);
|
|
||||||
fn.setTextColor(ThemesUtils.getTextAttr());
|
|
||||||
fn.setHintTextColor(ThemesUtils.getSTextAttr());
|
|
||||||
fn.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
|
|
||||||
linearLayout.addView(fn);
|
|
||||||
fn.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
||||||
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) fn.getLayoutParams());
|
|
||||||
margin.setMargins(AndroidUtils.dp2px(20f), 0, AndroidUtils.dp2px(20f), 0);
|
|
||||||
fn.setLayoutParams(margin);
|
|
||||||
|
|
||||||
final EditText ln = new EditText(ctx);
|
|
||||||
ln.setHint(R.string.lastfm_password);
|
|
||||||
ln.setTextColor(ThemesUtils.getTextAttr());
|
|
||||||
ln.setHintTextColor(ThemesUtils.getSTextAttr());
|
|
||||||
ln.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
|
|
||||||
linearLayout.addView(ln);
|
|
||||||
ln.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
||||||
ln.setLayoutParams(margin);
|
|
||||||
|
|
||||||
new VkAlertDialog.Builder(ctx)
|
|
||||||
.setTitle(R.string.lastfm_enter_credentials)
|
|
||||||
.setPositiveButton(R.string.lastfm_enter,
|
|
||||||
(dialog, which) -> {
|
|
||||||
String login = fn.getText().toString();
|
|
||||||
String pass = ln.getText().toString();
|
|
||||||
LastFMScrobbler.authenticate(login, pass);
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.setView(linearLayout)
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void logout(Context ctx) {
|
|
||||||
new VkAlertDialog.Builder(ctx)
|
|
||||||
.setTitle(R.string.lastfm_logout_title)
|
|
||||||
.setMessage(R.string.lastfm_logout_confirm)
|
|
||||||
.setPositiveButton(R.string.vkim_yes,
|
|
||||||
(dialog, which) -> LastFMScrobbler.logout())
|
|
||||||
.setNeutralButton(R.string.vkim_no,
|
|
||||||
(dialog, which) -> dialog.cancel())
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void delcache(Context ctx) {
|
|
||||||
new VkAlertDialog.Builder(ctx)
|
|
||||||
.setTitle(R.string.warning)
|
|
||||||
.setMessage(R.string.cached_tracks_remove_confirm)
|
|
||||||
.setPositiveButton(R.string.yes,
|
|
||||||
(dialog, which) -> executor.submit(MusicCacheImpl::clear))
|
|
||||||
.setNeutralButton(R.string.no,
|
|
||||||
(dialog, which) -> dialog.cancel())
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dlaudio(Context ctx) {
|
|
||||||
if (LibVKXClient.isIntegrationEnabled()) {
|
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString("vkx_integration_enabled_info"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
new VkAlertDialog.Builder(ctx)
|
|
||||||
.setTitle(R.string.download_method)
|
|
||||||
.setMessage(R.string.download_method_desc)
|
|
||||||
.setPositiveButton(R.string.download_method_cache, (dialog, which) -> {
|
|
||||||
executor.submit(AudioDownloader::cacheAllAudios);
|
|
||||||
})
|
|
||||||
.setNegativeButton(R.string.download_method_mp3, (dialog, which) -> {
|
|
||||||
executor.submit(AudioDownloader::downloadAllAudios);
|
|
||||||
})
|
|
||||||
.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteVideoHistory() {
|
public void deleteVideoHistory() {
|
||||||
@@ -249,7 +107,7 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
.a();
|
.a();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var response = new JSONObject(new OkHttpClient().a(request).execute().a().g());
|
var response = new JSONObject(Network.b(CLIENT_API).a(request).execute().a().g());
|
||||||
|
|
||||||
if (response.optInt("response") == 1) {
|
if (response.optInt("response") == 1) {
|
||||||
requireActivity().runOnUiThread(() -> AndroidUtils.sendToast(requireContext().getString(R.string.video_history_cleaned)));
|
requireActivity().runOnUiThread(() -> AndroidUtils.sendToast(requireContext().getString(R.string.video_history_cleaned)));
|
||||||
@@ -280,4 +138,4 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
public int T4() {
|
public int T4() {
|
||||||
return R.string.vtlmedia;
|
return R.string.vtlmedia;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,319 @@
|
|||||||
|
package ru.vtosters.lite.ui.fragments;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||||
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
|
import com.vtosters.lite.ui.SummaryListPreference;
|
||||||
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
|
import ru.vtosters.hooks.other.ThemesUtils;
|
||||||
|
import ru.vtosters.lite.downloaders.AudioDownloader;
|
||||||
|
import ru.vtosters.lite.music.LastFMScrobbler;
|
||||||
|
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
||||||
|
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
|
||||||
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
import ru.vtosters.lite.utils.LifecycleUtils;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
|
public class MusicFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||||
|
private static final ExecutorService executor = Executors.newCachedThreadPool();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle bundle) {
|
||||||
|
super.onCreate(bundle);
|
||||||
|
addPreferencesFromResource(com.vtosters.lite.R.xml.empty);
|
||||||
|
|
||||||
|
requireActivity().getWindow().setStatusBarColor(ThemesUtils.getBackgroundContent());
|
||||||
|
requireActivity().getWindow().setNavigationBarColor(ThemesUtils.getBackgroundContent());
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Офлайн прослушивание");
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"cached_tracks",
|
||||||
|
getString(com.vtosters.lite.R.string.cached_tracks_title),
|
||||||
|
String.format(requireContext().getString(com.vtosters.lite.R.string.cached_tracks_counter), MusicCacheImpl.getTracksCount()),
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
if (MusicCacheImpl.isEmpty()) {
|
||||||
|
AndroidUtils.sendToast(requireContext().getString(com.vtosters.lite.R.string.no_cache_error));
|
||||||
|
} else {
|
||||||
|
delcache(requireContext());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"audio_download",
|
||||||
|
getString(com.vtosters.lite.R.string.audio_download_title),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
dlaudio(requireContext());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"invertCachedTracks",
|
||||||
|
getString(com.vtosters.lite.R.string.invertcached_title),
|
||||||
|
getString(com.vtosters.lite.R.string.invertcached_summ),
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("invertCachedTracks", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
).setEnabled(!MusicCacheImpl.isEmpty());
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"autocache",
|
||||||
|
getString(com.vtosters.lite.R.string.autocache_title),
|
||||||
|
getString(com.vtosters.lite.R.string.autocache_summ),
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("autocache", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Скачивание аудио в MP3");
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"dldir",
|
||||||
|
"Альтернативная папка для скачивания",
|
||||||
|
"Использовать папку Downloads вместо Music для скачивания музыки в MP3",
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("dldir", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"setMetaData",
|
||||||
|
"Сохранять метадату песен",
|
||||||
|
"Сохранять id3v2 теги для песен для MP3",
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("setMetaData", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!Preferences.serverFeaturesDisable()) {
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Интеграция Genius");
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"useGenius",
|
||||||
|
getString(com.vtosters.lite.R.string.useGenius_title),
|
||||||
|
getString(com.vtosters.lite.R.string.useGenius_summ),
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("useGenius", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Интеграция Last.fm");
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"lastfm_auth",
|
||||||
|
getString(com.vtosters.lite.R.string.lastfm_auth_title),
|
||||||
|
getString(com.vtosters.lite.R.string.lastfm_auth_summ),
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
if (LastFMScrobbler.isLoggedIn()) {
|
||||||
|
logout(getContext());
|
||||||
|
} else {
|
||||||
|
lastfmAuth(getContext());
|
||||||
|
}
|
||||||
|
updateLastFmPref();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"lastfm_enabled",
|
||||||
|
AndroidUtils.getString("lastfm_enabled_title"),
|
||||||
|
AndroidUtils.getString("lastfm_enabled_summ"),
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("lastfm_enabled", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
).setEnabled(LastFMScrobbler.isLoggedIn());
|
||||||
|
|
||||||
|
if (LastFMScrobbler.isLoggedIn()) {
|
||||||
|
findPreference("lastfm_auth").setSummary(getString(com.vtosters.lite.R.string.lastfm_authorized_as) + " " + LastFMScrobbler.getUserName());
|
||||||
|
}
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Интеграция VK X");
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
getString(com.vtosters.lite.R.string.vkx_why),
|
||||||
|
getString(com.vtosters.lite.R.string.vkx_why_summary),
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"libvkx_integration",
|
||||||
|
getString(com.vtosters.lite.R.string.vkx_integration),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("libvkx_integration", (boolean) o).apply();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!LibVKXClient.isVkxInstalled()) {
|
||||||
|
findPreference("libvkx_integration").setSummary("У вас не установлен VKX. Интеграция работать не будет");
|
||||||
|
findPreference("libvkx_integration").setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Прочее");
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"useOldAppVer",
|
||||||
|
getString(com.vtosters.lite.R.string.useOldAppVer_title),
|
||||||
|
"Включите если вас не устраивают новые рекомендации и вас интересует только свое аудио",
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
(preference, o) -> {
|
||||||
|
Preferences.getPreferences().edit().putBoolean("useOldAppVer", (boolean) o).apply();
|
||||||
|
LifecycleUtils.restartApplicationWithTimer();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
SummaryListPreference list = new SummaryListPreference(getPreferenceScreen().getContext());
|
||||||
|
list.setTitle(com.vtosters.lite.R.string.musicdefcatalog_title);
|
||||||
|
list.setKey("musicdefcatalog");
|
||||||
|
list.setEntryValues(com.vtosters.lite.R.array.musicdefcatalog);
|
||||||
|
list.setEntries(com.vtosters.lite.R.array.musicdefcatalog_value);
|
||||||
|
list.setDialogTitle(com.vtosters.lite.R.string.musicdefcatalog_dialogTitle);
|
||||||
|
list.setDefaultValue("default");
|
||||||
|
list.setVisible(!Preferences.getBoolValue("useOldAppVer", false));
|
||||||
|
|
||||||
|
getPreferenceScreen().addPreference(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lastfmAuth(Context ctx) {
|
||||||
|
LinearLayout linearLayout = new LinearLayout(ctx);
|
||||||
|
linearLayout.setOrientation(LinearLayout.VERTICAL);
|
||||||
|
|
||||||
|
EditText fn = new EditText(ctx);
|
||||||
|
fn.setHint(com.vtosters.lite.R.string.lastfm_login);
|
||||||
|
fn.setTextColor(ThemesUtils.getTextAttr());
|
||||||
|
fn.setHintTextColor(ThemesUtils.getSTextAttr());
|
||||||
|
fn.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
|
||||||
|
linearLayout.addView(fn);
|
||||||
|
fn.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
|
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) fn.getLayoutParams());
|
||||||
|
margin.setMargins(AndroidUtils.dp2px(20f), 0, AndroidUtils.dp2px(20f), 0);
|
||||||
|
fn.setLayoutParams(margin);
|
||||||
|
|
||||||
|
EditText ln = new EditText(ctx);
|
||||||
|
ln.setHint(com.vtosters.lite.R.string.lastfm_password);
|
||||||
|
ln.setTextColor(ThemesUtils.getTextAttr());
|
||||||
|
ln.setHintTextColor(ThemesUtils.getSTextAttr());
|
||||||
|
ln.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
|
||||||
|
linearLayout.addView(ln);
|
||||||
|
ln.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
|
ln.setLayoutParams(margin);
|
||||||
|
|
||||||
|
new VkAlertDialog.Builder(ctx)
|
||||||
|
.setTitle(com.vtosters.lite.R.string.lastfm_enter_credentials)
|
||||||
|
.setPositiveButton(com.vtosters.lite.R.string.lastfm_enter,
|
||||||
|
(dialog, which) -> {
|
||||||
|
String login = fn.getText().toString();
|
||||||
|
String pass = ln.getText().toString();
|
||||||
|
LastFMScrobbler.authenticate(login, pass);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setView(linearLayout)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateLastFmPref() {
|
||||||
|
if (LastFMScrobbler.isLoggedIn()) {
|
||||||
|
findPreference("lastfm_auth").setSummary(getString(com.vtosters.lite.R.string.lastfm_authorized_as) + " " + LastFMScrobbler.getUserName());
|
||||||
|
findPreference("lastfm_enabled").setEnabled(true);
|
||||||
|
} else {
|
||||||
|
findPreference("lastfm_auth").setSummary(getString(com.vtosters.lite.R.string.lastfm_auth_summ));
|
||||||
|
findPreference("lastfm_enabled").setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logout(Context ctx) {
|
||||||
|
new VkAlertDialog.Builder(ctx)
|
||||||
|
.setTitle(com.vtosters.lite.R.string.lastfm_logout_title)
|
||||||
|
.setMessage(com.vtosters.lite.R.string.lastfm_logout_confirm)
|
||||||
|
.setPositiveButton(com.vtosters.lite.R.string.vkim_yes,
|
||||||
|
(dialog, which) -> LastFMScrobbler.logout())
|
||||||
|
.setNeutralButton(com.vtosters.lite.R.string.vkim_no,
|
||||||
|
(dialog, which) -> dialog.cancel())
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void delcache(Context ctx) {
|
||||||
|
new VkAlertDialog.Builder(ctx)
|
||||||
|
.setTitle(com.vtosters.lite.R.string.warning)
|
||||||
|
.setMessage(com.vtosters.lite.R.string.cached_tracks_remove_confirm)
|
||||||
|
.setPositiveButton(com.vtosters.lite.R.string.yes,
|
||||||
|
(dialog, which) -> executor.submit(MusicCacheImpl::clear))
|
||||||
|
.setNeutralButton(com.vtosters.lite.R.string.no,
|
||||||
|
(dialog, which) -> dialog.cancel())
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dlaudio(Context ctx) {
|
||||||
|
if (LibVKXClient.isIntegrationEnabled()) {
|
||||||
|
AndroidUtils.sendToast(AndroidUtils.getString("vkx_integration_enabled_info"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
new VkAlertDialog.Builder(ctx)
|
||||||
|
.setTitle(com.vtosters.lite.R.string.download_method)
|
||||||
|
.setMessage(com.vtosters.lite.R.string.download_method_desc)
|
||||||
|
.setPositiveButton(com.vtosters.lite.R.string.download_method_cache, (dialog, which) -> {
|
||||||
|
executor.submit(AudioDownloader::cacheAllAudios);
|
||||||
|
})
|
||||||
|
.setNegativeButton(com.vtosters.lite.R.string.download_method_mp3, (dialog, which) -> {
|
||||||
|
executor.submit(AudioDownloader::downloadAllAudios);
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int T4() {
|
||||||
|
return com.vtosters.lite.R.string.vtl_music_settings;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -105,6 +105,7 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
|
|
||||||
findPreference("updateverifdata").setOnPreferenceClickListener(preference -> {
|
findPreference("updateverifdata").setOnPreferenceClickListener(preference -> {
|
||||||
UsersList.getUsersList();
|
UsersList.getUsersList();
|
||||||
|
VTVerifications.isLoaded = false;
|
||||||
VTVerifications.load(requireContext());
|
VTVerifications.load(requireContext());
|
||||||
AndroidUtils.sendToast(AndroidUtils.getString("data_updated"));
|
AndroidUtils.sendToast(AndroidUtils.getString("data_updated"));
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,21 +1,32 @@
|
|||||||
package ru.vtosters.lite.ui.fragments;
|
package ru.vtosters.lite.ui.fragments;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.SwitchPreference;
|
||||||
|
import b.h.g.k.VKProgressDialog;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
|
import com.vk.core.network.proxy.NetworkProxy;
|
||||||
|
import com.vk.core.util.ToastUtils;
|
||||||
|
import com.vtosters.lite.NetworkProxyPreferences;
|
||||||
import com.vtosters.lite.R;
|
import com.vtosters.lite.R;
|
||||||
|
import com.vtosters.lite.ViewUtils;
|
||||||
|
|
||||||
public class ProxySettingsFragment extends TrackedMaterialPreferenceToolbarFragment {
|
public class ProxySettingsFragment extends TrackedMaterialPreferenceToolbarFragment {
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle bundle) {
|
public void onCreate(Bundle bundle) {
|
||||||
super.onCreate(bundle);
|
super.onCreate(bundle);
|
||||||
addPreferencesFromResource(R.xml.preferences_proxy);
|
addPreferencesFromResource(R.xml.preferences_proxy);
|
||||||
// findPreference("random_proxy").setOnPreferenceClickListener(preference -> {
|
initComponents();
|
||||||
// try {
|
}
|
||||||
// setupNewProxy();
|
|
||||||
// } catch (IOException e) {
|
private void initComponents() {
|
||||||
// sendToast(requireContext().getString(R.string.get_proxy_error));
|
NetworkProxy networkProxy = Network.l.b();
|
||||||
// }
|
boolean isEnabled = networkProxy.d();
|
||||||
// return true;
|
SwitchPreference switchPreference = (SwitchPreference) findPreference("vkproxy");
|
||||||
// });
|
switchPreference.setChecked(isEnabled);
|
||||||
|
switchPreference.setOnPreferenceChangeListener(new ProxyChangeListener(networkProxy, switchPreference));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -23,3 +34,89 @@ public class ProxySettingsFragment extends TrackedMaterialPreferenceToolbarFragm
|
|||||||
return R.string.vtlproxy;
|
return R.string.vtlproxy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ProxyChangeListener implements Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
|
private final NetworkProxy networkProxy;
|
||||||
|
private final SwitchPreference switchPreference;
|
||||||
|
|
||||||
|
ProxyChangeListener(NetworkProxy networkProxy, SwitchPreference switchPreference) {
|
||||||
|
this.networkProxy = networkProxy;
|
||||||
|
this.switchPreference = switchPreference;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object obj) {
|
||||||
|
handleProxyChange(preference, (Boolean) obj);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleProxyChange(Preference preference, Boolean isEnabled) {
|
||||||
|
if (!networkProxy.d() && isEnabled) {
|
||||||
|
enableProxy(preference);
|
||||||
|
} else {
|
||||||
|
disableProxy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableProxy(Preference preference) {
|
||||||
|
networkProxy.a(true);
|
||||||
|
VKProgressDialog vKProgressDialog = createProgressDialog(preference.getContext());
|
||||||
|
networkProxy.a((NetworkProxy.c) new ProxyPreferences(vKProgressDialog));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableProxy() {
|
||||||
|
Network.l.b().a(false);
|
||||||
|
switchPreference.setChecked(networkProxy.d());
|
||||||
|
}
|
||||||
|
|
||||||
|
private VKProgressDialog createProgressDialog(Context context) {
|
||||||
|
VKProgressDialog vKProgressDialog = new VKProgressDialog(context);
|
||||||
|
vKProgressDialog.setMessage(context.getString(R.string.loading));
|
||||||
|
vKProgressDialog.setOnDismissListener(new OnDismissListener());
|
||||||
|
ViewUtils.b(vKProgressDialog);
|
||||||
|
return vKProgressDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class OnDismissListener implements DialogInterface.OnDismissListener {
|
||||||
|
@Override
|
||||||
|
public void onDismiss(DialogInterface dialogInterface) {
|
||||||
|
switchPreference.setChecked(networkProxy.d());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ProxyPreferences extends NetworkProxyPreferences {
|
||||||
|
private final VKProgressDialog progressDialog;
|
||||||
|
|
||||||
|
ProxyPreferences(VKProgressDialog vKProgressDialog) {
|
||||||
|
this.progressDialog = vKProgressDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void b(NetworkProxy.Reason reason) {
|
||||||
|
super.b(reason);
|
||||||
|
dismissProgressDialog();
|
||||||
|
switchPreference.setChecked(networkProxy.d());
|
||||||
|
showToast(reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void e() {
|
||||||
|
super.e();
|
||||||
|
dismissProgressDialog();
|
||||||
|
switchPreference.setChecked(networkProxy.d());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dismissProgressDialog() {
|
||||||
|
ViewUtils.a(progressDialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showToast(NetworkProxy.Reason reason) {
|
||||||
|
if (reason == NetworkProxy.Reason.PROXY_NOT_AVAILABLE) {
|
||||||
|
ToastUtils.a(R.string.sett_proxy_not_available);
|
||||||
|
} else {
|
||||||
|
ToastUtils.a(R.string.sett_no_proxy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,8 +6,10 @@ import android.os.Bundle;
|
|||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.hooks.other.ThemesUtils;
|
import ru.vtosters.hooks.other.ThemesUtils;
|
||||||
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
|
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
|
||||||
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
import ru.vtosters.lite.utils.NetworkUtils;
|
import ru.vtosters.lite.utils.NetworkUtils;
|
||||||
import ru.vtosters.sponsorpost.data.Filter;
|
import ru.vtosters.sponsorpost.data.Filter;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesPreferences;
|
||||||
import ru.vtosters.sponsorpost.services.FilterService;
|
import ru.vtosters.sponsorpost.services.FilterService;
|
||||||
import ru.vtosters.sponsorpost.utils.FiltersPreferences;
|
import ru.vtosters.sponsorpost.utils.FiltersPreferences;
|
||||||
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
||||||
@@ -35,6 +37,40 @@ public class SponsorPostFragment extends TrackedMaterialPreferenceToolbarFragmen
|
|||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Статистика блокировок");
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"SponsorPost",
|
||||||
|
"Заблокировано постов: " + PostsPreferences.getNumBlockedPosts(),
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"SponsorPost фильтры",
|
||||||
|
"Заблокировано постов: " + FiltersPreferences.getNumBlockedPosts(),
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Сброс статистики",
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
FiltersPreferences.dropNumBlockedPosts();
|
||||||
|
PostsPreferences.dropNumBlockedPosts();
|
||||||
|
AndroidUtils.sendToast("Статистика сброшена");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Sponsor Post");
|
PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Sponsor Post");
|
||||||
|
|
||||||
if (Preferences.serverFeaturesDisable()) {
|
if (Preferences.serverFeaturesDisable()) {
|
||||||
@@ -49,9 +85,9 @@ public class SponsorPostFragment extends TrackedMaterialPreferenceToolbarFragmen
|
|||||||
} else {
|
} else {
|
||||||
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
getPreferenceScreen(),
|
getPreferenceScreen(),
|
||||||
"sponsorpost",
|
"",
|
||||||
"Фильтр постов",
|
"Фильтр постов",
|
||||||
"Получать списки рекламных постов в группах и ленте, которые не блокируются рекламными фильтрами",
|
"Получать списки рекламных постов в группах и ленте, которые не блокируются рекламными фильтрами\n\nРекомендуется использовать совместно со Стандартным фильтром",
|
||||||
null,
|
null,
|
||||||
PostsPreferences.isEnabled(),
|
PostsPreferences.isEnabled(),
|
||||||
(preference, o) -> {
|
(preference, o) -> {
|
||||||
@@ -59,6 +95,61 @@ public class SponsorPostFragment extends TrackedMaterialPreferenceToolbarFragmen
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Не скрывать посты",
|
||||||
|
"Помечать посты рекламной пометкой, но не скрывать их полностью",
|
||||||
|
null,
|
||||||
|
PostsPreferences.isEnabledMarking(),
|
||||||
|
(preference, o) -> {
|
||||||
|
PostsPreferences.setEnabledMarking((boolean) o);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
).setEnabled(PostsPreferences.isEnabled());
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Предварительные списки",
|
||||||
|
"Получать дополнительно более свежие списки которые ещё не попали в основной список. Нужно для активного голосования для блокировки постов. Возможно много ошибок!",
|
||||||
|
null,
|
||||||
|
VotesPreferences.isEnabled(),
|
||||||
|
(preference, o) -> {
|
||||||
|
VotesPreferences.setEnabled((boolean) o);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
).setEnabled(PostsPreferences.isEnabled());
|
||||||
|
|
||||||
|
if (NetworkUtils.isNetworkConnected()) {
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Обновить списки постов",
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
this.requireActivity().runOnUiThread(() -> {
|
||||||
|
Updates.updatePosts();
|
||||||
|
AndroidUtils.sendToast("Обновлено");
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Телеграм чат",
|
||||||
|
"Помогите улучшить качество блокировки постов в нашем телеграм чате\n\nДля перехода в чат вам необходима последняя версия Telegram",
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
requireContext().startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://t.me/vtosterschat/3559729")));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
requireActivity().runOnUiThread(() -> {
|
requireActivity().runOnUiThread(() -> {
|
||||||
@@ -123,6 +214,31 @@ public class SponsorPostFragment extends TrackedMaterialPreferenceToolbarFragmen
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addMaterialSwitchPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Не блокировать посты",
|
||||||
|
"Помечать посты заблокированные фильтрами",
|
||||||
|
null,
|
||||||
|
FiltersPreferences.isEnabledMarking(),
|
||||||
|
(preference, o) -> {
|
||||||
|
FiltersPreferences.setEnabledMarking((boolean) o);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Телеграм чат",
|
||||||
|
"Помогите улучшить качество фильтров обсудив работу в нашем телеграм чате\n\nДля перехода в чат вам необходима последняя версия Telegram",
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
requireContext().startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://t.me/vtosterschat/3559732")));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
PreferenceFragmentUtils.addPreference(
|
PreferenceFragmentUtils.addPreference(
|
||||||
getPreferenceScreen(),
|
getPreferenceScreen(),
|
||||||
"",
|
"",
|
||||||
@@ -139,6 +255,20 @@ public class SponsorPostFragment extends TrackedMaterialPreferenceToolbarFragmen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (Preferences.dev()) {
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
"Сбросить токен пользователя",
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
preference -> {
|
||||||
|
VotesPreferences.remUserToken();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import ru.vtosters.hooks.ui.SystemThemeChangerHook;
|
|||||||
import ru.vtosters.lite.BuildConfig;
|
import ru.vtosters.lite.BuildConfig;
|
||||||
import ru.vtosters.lite.concurrent.VTExecutors;
|
import ru.vtosters.lite.concurrent.VTExecutors;
|
||||||
import ru.vtosters.lite.deviceinfo.OEMDetector;
|
import ru.vtosters.lite.deviceinfo.OEMDetector;
|
||||||
|
import ru.vtosters.lite.proxy.ProxyUtils;
|
||||||
import ru.vtosters.lite.ssfs.Utils;
|
import ru.vtosters.lite.ssfs.Utils;
|
||||||
import ru.vtosters.lite.themes.utils.RecolorUtils;
|
import ru.vtosters.lite.themes.utils.RecolorUtils;
|
||||||
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
|
import ru.vtosters.lite.ui.PreferenceFragmentUtils;
|
||||||
@@ -77,9 +78,13 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
|
|
||||||
public static String getProxysumm() {
|
public static String getProxysumm() {
|
||||||
String type = Preferences.getString("proxy");
|
String type = Preferences.getString("proxy");
|
||||||
|
boolean isVKProxy = ProxyUtils.isVKProxyEnabled();
|
||||||
|
|
||||||
if (type.equals("noproxy") || type.isEmpty())
|
if (isVKProxy) {
|
||||||
|
type = "Встроенный";
|
||||||
|
} else if (type.equals("noproxy") || type.isEmpty()) {
|
||||||
type = AndroidUtils.getString(R.string.vtlsettdisabled);
|
type = AndroidUtils.getString(R.string.vtlsettdisabled);
|
||||||
|
}
|
||||||
|
|
||||||
return AndroidUtils.getString(R.string.vtlproxysumm) + ": " + type;
|
return AndroidUtils.getString(R.string.vtlproxysumm) + ": " + type;
|
||||||
}
|
}
|
||||||
@@ -466,6 +471,18 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
PreferenceFragmentUtils.addPreference(
|
||||||
|
getPreferenceScreen(),
|
||||||
|
"",
|
||||||
|
requireContext().getString(R.string.music),
|
||||||
|
getValAsString(R.string.useGenius_title, Preferences.getBoolValue("useGenius", false)),
|
||||||
|
R.drawable.ic_music_outline_28,
|
||||||
|
preference -> {
|
||||||
|
NavigatorUtils.switchFragment(requireContext(), MusicFragment.class);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
PreferenceFragmentUtils.addPreference(
|
PreferenceFragmentUtils.addPreference(
|
||||||
getPreferenceScreen(),
|
getPreferenceScreen(),
|
||||||
"",
|
"",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import android.os.Build;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||||
import com.vk.dto.common.VideoFile;
|
import com.vk.dto.common.VideoFile;
|
||||||
|
import ru.vtosters.lite.downloaders.VideoDownloader;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -77,40 +78,7 @@ public class ExternalLinkParser {
|
|||||||
* this.D = var66.optString("mp4_2160");
|
* this.D = var66.optString("mp4_2160");
|
||||||
*/
|
*/
|
||||||
public static boolean parseVKVideo(VideoFile videoFile, List<String> qualities, List<String> urls) {
|
public static boolean parseVKVideo(VideoFile videoFile, List<String> qualities, List<String> urls) {
|
||||||
if (!TextUtils.isEmpty(videoFile.D)) {
|
VideoDownloader.addVideos(videoFile, qualities, urls);
|
||||||
qualities.add("2160p");
|
|
||||||
urls.add(videoFile.D);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(videoFile.C)) {
|
|
||||||
qualities.add("1440p");
|
|
||||||
urls.add(videoFile.C);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(videoFile.B)) {
|
|
||||||
qualities.add("1080p");
|
|
||||||
urls.add(videoFile.B);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(videoFile.h)) {
|
|
||||||
qualities.add("720p");
|
|
||||||
urls.add(videoFile.h);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(videoFile.g)) {
|
|
||||||
qualities.add("480p");
|
|
||||||
urls.add(videoFile.g);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(videoFile.f)) {
|
|
||||||
qualities.add("360p");
|
|
||||||
urls.add(videoFile.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(videoFile.e)) {
|
|
||||||
qualities.add("240p");
|
|
||||||
urls.add(videoFile.e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return qualities.size() > 0;
|
return qualities.size() > 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,33 +6,48 @@ import android.graphics.drawable.BitmapDrawable;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.hooks.other.ThemesUtils;
|
import ru.vtosters.hooks.other.ThemesUtils;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class ImageUtils {
|
public class ImageUtils {
|
||||||
|
|
||||||
// must be called asynchronously
|
// must be called asynchronously
|
||||||
public static Drawable getDrawableFromUrl(String url, int placeholderRes, boolean rounded, boolean scaled) {
|
public static Drawable getDrawableFromUrl(String url, int placeholderRes, boolean rounded, boolean scaled) {
|
||||||
if (NetworkUtils.isNetworkConnected() && !NetworkUtils.isInternetSlow()) {
|
if (NetworkUtils.isNetworkConnected() && !NetworkUtils.isInternetSlow()) {
|
||||||
try {
|
Bitmap bmp = downloadBitmap(url);
|
||||||
var bmp = BitmapFactory.decodeStream(new URL(url).openStream());
|
|
||||||
|
|
||||||
if (bmp != null) {
|
if (bmp != null) {
|
||||||
if (rounded) bmp = getBitmapClippedCircle(bmp);
|
if (rounded) {
|
||||||
if (scaled)
|
bmp = getBitmapClippedCircle(bmp);
|
||||||
bmp = Bitmap.createScaledBitmap(bmp, AndroidUtils.dp2px(256), AndroidUtils.dp2px(256), true);
|
|
||||||
|
|
||||||
return new BitmapDrawable(AndroidUtils.getResources(), bmp);
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
if (scaled) {
|
||||||
|
bmp = Bitmap.createScaledBitmap(bmp, AndroidUtils.dp2px(256), AndroidUtils.dp2px(256), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new BitmapDrawable(AndroidUtils.getResources(), bmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return placeholderRes > 0 ? ContextCompat.getDrawable(AndroidUtils.getGlobalContext(), placeholderRes) : null;
|
return placeholderRes > 0 ? ContextCompat.getDrawable(AndroidUtils.getGlobalContext(), placeholderRes) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Bitmap downloadBitmap(String url) {
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(url)
|
||||||
|
.a();
|
||||||
|
|
||||||
|
try (Response resp = Network.b(Network.ClientType.CLIENT_IMAGE_LOADER).a(request).execute()) {
|
||||||
|
return BitmapFactory.decodeStream(resp.a().a());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {
|
public static Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {
|
||||||
int sourceWidth = source.getWidth();
|
int sourceWidth = source.getWidth();
|
||||||
int sourceHeight = source.getHeight();
|
int sourceHeight = source.getHeight();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import okhttp3.*;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ public class OTAUtils {
|
|||||||
public void loadData(boolean isManualCheck) {
|
public void loadData(boolean isManualCheck) {
|
||||||
Request release = new Request.a()
|
Request release = new Request.a()
|
||||||
.b(LATEST_RELEASE_URL)
|
.b(LATEST_RELEASE_URL)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
mClient.a(release).a(new Callback() {
|
mClient.a(release).a(new Callback() {
|
||||||
@@ -46,12 +48,13 @@ public class OTAUtils {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void setData(Response response, boolean isManualCheck) throws IOException, JSONException {
|
void setData(Response response, boolean isManualCheck) throws JSONException, IOException {
|
||||||
mReleaseJson = new JSONObject(response.a().g());
|
mReleaseJson = new JSONObject(GzipDecompressor.decompressResponse(response));
|
||||||
|
|
||||||
String tag = mReleaseJson.getString("tag_name");
|
String tag = mReleaseJson.getString("tag_name");
|
||||||
Request commit = new Request.a()
|
Request commit = new Request.a()
|
||||||
.b(String.format(LATEST_RELEASE_COMMIT_URL, tag))
|
.b(String.format(LATEST_RELEASE_COMMIT_URL, tag))
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
mClient.a(commit).a(new Callback() {
|
mClient.a(commit).a(new Callback() {
|
||||||
@@ -62,15 +65,15 @@ public class OTAUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void a(Call call, Response response) throws IOException {
|
public void a(Call call, Response response) {
|
||||||
try {
|
try {
|
||||||
mCommitJson = new JSONObject(response.a().g());
|
mCommitJson = new JSONObject(GzipDecompressor.decompressResponse(response));
|
||||||
mCommitSHA = mCommitJson.getJSONObject("object").getString("sha");
|
mCommitSHA = mCommitJson.getJSONObject("object").getString("sha");
|
||||||
if (isNewVersion())
|
if (isNewVersion())
|
||||||
mListener.onUpdateApplied(isManualCheck);
|
mListener.onUpdateApplied(isManualCheck);
|
||||||
else
|
else
|
||||||
mListener.onUpdateLatest(isManualCheck);
|
mListener.onUpdateLatest(isManualCheck);
|
||||||
} catch (NullPointerException | JSONException e) {
|
} catch (NullPointerException | JSONException | IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
mListener.onUpdateError();
|
mListener.onUpdateError();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package ru.vtosters.lite.utils;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import com.vk.core.network.Network;
|
||||||
import com.vk.navigation.NavigatorKeys;
|
import com.vk.navigation.NavigatorKeys;
|
||||||
import okhttp3.*;
|
import okhttp3.*;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@@ -10,12 +11,11 @@ import org.json.JSONException;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
import ru.vtosters.hooks.other.Preferences;
|
||||||
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.IntStream;
|
|
||||||
|
|
||||||
import static ru.vtosters.hooks.other.Preferences.getBoolValue;
|
import static ru.vtosters.hooks.other.Preferences.getBoolValue;
|
||||||
|
|
||||||
@@ -44,13 +44,14 @@ public class VTVerifications {
|
|||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b("https://vtosters.app/vktoaster/getGalo4kiBatch")
|
.b("https://vtosters.app/vktoaster/getGalo4kiBatch")
|
||||||
.a(RequestBody.a(MediaType.b("application/json; charset=UTF-8"), "{\"types\":[0,228,404]}"))
|
.a(RequestBody.a(MediaType.b("application/json; charset=UTF-8"), "{\"types\":[0,228,404]}"))
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
sClient.a(request).a(new Callback() {
|
sClient.a(request).a(new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void a(Call call, Response response) {
|
public void a(Call call, Response response) {
|
||||||
try {
|
try {
|
||||||
String payload = response.a().g();
|
String payload = GzipDecompressor.decompressResponse(response);
|
||||||
parseJson(payload);
|
parseJson(payload);
|
||||||
prefs.edit()
|
prefs.edit()
|
||||||
.putString("ids", payload)
|
.putString("ids", payload)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.json.JSONArray;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import ru.vtosters.lite.utils.AccountManagerUtils;
|
import ru.vtosters.lite.utils.AccountManagerUtils;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesPreferences;
|
||||||
import ru.vtosters.sponsorpost.utils.FiltersPreferences;
|
import ru.vtosters.sponsorpost.utils.FiltersPreferences;
|
||||||
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
import ru.vtosters.sponsorpost.utils.PostsPreferences;
|
||||||
|
|
||||||
@@ -185,7 +186,7 @@ public class NewsFeedFiltersUtils {
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean needToSave(JSONObject post, String source, boolean needToShowToast) throws JSONException {
|
private static boolean needToSave(JSONObject post, String source, boolean needToNotifyBlock) throws JSONException {
|
||||||
String type = post.optString("type");
|
String type = post.optString("type");
|
||||||
|
|
||||||
if (isAds(post, type)) {
|
if (isAds(post, type)) {
|
||||||
@@ -198,58 +199,84 @@ public class NewsFeedFiltersUtils {
|
|||||||
|| type.endsWith("playlists")
|
|| type.endsWith("playlists")
|
||||||
|| type.endsWith("groups")))) {
|
|| type.endsWith("groups")))) {
|
||||||
|
|
||||||
logRemovedPost(post, source, "authors", needToShowToast);
|
logRemovedPost(post, source, "authors", needToNotifyBlock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (postsrecomm() && (type.equals("inline_user_rec") || type.equals("live_recommended"))) {
|
if (postsrecomm() && (type.equals("inline_user_rec") || type.equals("live_recommended"))) {
|
||||||
logRemovedPost(post, source, "postsrecomm", needToShowToast);
|
logRemovedPost(post, source, "postsrecomm", needToNotifyBlock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (friendsrecomm() && (type.equals("user_rec") || type.equals("friends_recomm"))) {
|
if (friendsrecomm() && (type.equals("user_rec") || type.equals("friends_recomm"))) {
|
||||||
logRemovedPost(post, source, "friendsrecomm", needToShowToast);
|
logRemovedPost(post, source, "friendsrecomm", needToNotifyBlock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adsgroup() && post.optInt("marked_as_ads") == 1 && !isWhitelistedAd(post)) {
|
if (adsgroup() && post.optInt("marked_as_ads") == 1 && !post.optBoolean("sponsorpost") && !isWhitelistedAd(post)) {
|
||||||
logRemovedPost(post, source, "marked_as_ads", needToShowToast);
|
logRemovedPost(post, source, "marked_as_ads", needToNotifyBlock);
|
||||||
return false;
|
return needToNotifyBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PostsPreferences.isPostAd(getOwnerId(post), getPostId(post)) && !isWhitelistedAd(post)) {
|
if (PostsPreferences.isPostAd(getOwnerId(post), getPostId(post)) && !post.optBoolean("sponsorpost") && !isWhitelistedAd(post)) {
|
||||||
logRemovedPost(post, source, "sponsorpost", needToShowToast);
|
logRemovedPost(post, source, "sponsorpost", needToNotifyBlock);
|
||||||
return false;
|
PostsPreferences.incrementNumBlockedPosts();
|
||||||
|
|
||||||
|
if (PostsPreferences.isEnabledMarking() || needToNotifyBlock) {
|
||||||
|
addSponsorPostMark(post);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sponsorFilters(post.optString("text")) && !isWhitelistedFilters(post)) {
|
if (VotesPreferences.isPostAd(getOwnerId(post), getPostId(post)) && !post.optBoolean("sponsorpost") && !isWhitelistedAd(post)) {
|
||||||
logRemovedPost(post, source, "sponsorpost filter", needToShowToast);
|
logRemovedPost(post, source, "sponsorpost vote base", needToNotifyBlock);
|
||||||
return false;
|
addSponsorPostMark(post);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sponsorFilters(post.optString("text")) && !post.optBoolean("sponsorpost") && !isWhitelistedFilters(post)) {
|
||||||
|
logRemovedPost(post, source, "sponsorpost filter", needToNotifyBlock);
|
||||||
|
FiltersPreferences.incrementNumBlockedPosts();
|
||||||
|
|
||||||
|
if (FiltersPreferences.isEnabledMarking() || needToNotifyBlock) {
|
||||||
|
addSponsorPostMark(post);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkCopyright(post)) {
|
if (checkCopyright(post)) {
|
||||||
logRemovedPost(post, source, "copyright filters", needToShowToast);
|
logRemovedPost(post, source, "copyright filters", needToNotifyBlock);
|
||||||
return false;
|
FiltersPreferences.incrementNumBlockedPosts();
|
||||||
|
return needToNotifyBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkCaption(post)) {
|
if (checkCaption(post)) {
|
||||||
logRemovedPost(post, source, "caption filters", needToShowToast);
|
logRemovedPost(post, source, "caption filters", needToNotifyBlock);
|
||||||
return false;
|
return needToNotifyBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasMiniAppAds(post) && !isWhitelistedFilters(post)) {
|
if (hasMiniAppAds(post) && !isWhitelistedFilters(post)) {
|
||||||
logRemovedPost(post, source, "miniapps ban", needToShowToast);
|
logRemovedPost(post, source, "miniapps ban", needToNotifyBlock);
|
||||||
return false;
|
return needToNotifyBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NewsFeedFiltersUtils.injectFiltersReposts(post) && !isWhitelistedFilters(post)) {
|
if (NewsFeedFiltersUtils.injectFiltersReposts(post) && !isWhitelistedFilters(post)) {
|
||||||
logRemovedPost(post, source, "repost ad", needToShowToast);
|
logRemovedPost(post, source, "repost ad", needToNotifyBlock);
|
||||||
return false;
|
return needToNotifyBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void addSponsorPostMark(JSONObject post) throws JSONException {
|
||||||
|
post.putOpt("marked_as_ads", 1);
|
||||||
|
post.putOpt("sponsorpost", true);
|
||||||
|
}
|
||||||
|
|
||||||
public static JSONArray feedInject(JSONArray items, boolean needToShowToast) {
|
public static JSONArray feedInject(JSONArray items, boolean needToShowToast) {
|
||||||
if (items.length() == 0) return items;
|
if (items.length() == 0) return items;
|
||||||
|
|
||||||
@@ -276,24 +303,26 @@ public class NewsFeedFiltersUtils {
|
|||||||
|
|
||||||
public static boolean sponsorFilters(String text) {
|
public static boolean sponsorFilters(String text) {
|
||||||
String textInLowerCase = text.toLowerCase();
|
String textInLowerCase = text.toLowerCase();
|
||||||
Set<String> list = filters.stream()
|
return filters.stream()
|
||||||
.filter(adword -> !adword.isEmpty())
|
.map(String::toLowerCase)
|
||||||
.collect(Collectors.toSet());
|
.filter(adword -> !adword.isEmpty() && textInLowerCase.contains(adword))
|
||||||
|
.peek(adword -> {
|
||||||
if (!list.isEmpty()) {
|
|
||||||
return list.stream().anyMatch(adword -> {
|
|
||||||
if (textInLowerCase.contains(adword.toLowerCase())) {
|
|
||||||
if (dev()) {
|
if (dev()) {
|
||||||
Log.d("NewsfeedAdBlockV2", text);
|
Log.d("NewsfeedAdBlockV2", text);
|
||||||
Log.d("NewsfeedAdBlockV2", "Block word: " + adword);
|
Log.d("NewsfeedAdBlockV2", "Block word: " + adword);
|
||||||
}
|
}
|
||||||
return true;
|
})
|
||||||
}
|
.findAny()
|
||||||
return false;
|
.isPresent();
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
public static String sponsorFiltersBanWord(String text) {
|
||||||
|
String textInLowerCase = text.toLowerCase();
|
||||||
|
return filters.stream()
|
||||||
|
.map(String::toLowerCase)
|
||||||
|
.filter(adword -> !adword.isEmpty() && textInLowerCase.contains(adword))
|
||||||
|
.findAny()
|
||||||
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package ru.vtosters.sponsorpost.internal;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
public class Native {
|
||||||
|
public static boolean canVote;
|
||||||
|
|
||||||
|
public static boolean canVote() {
|
||||||
|
return canVote;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static native String sig();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static native String time();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static native String pkey();
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package ru.vtosters.sponsorpost.internal;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.util.Log;
|
||||||
|
import ru.vtosters.lite.utils.AndroidUtils;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class VotesPreferences {
|
||||||
|
private static final SharedPreferences preferences;
|
||||||
|
|
||||||
|
static {
|
||||||
|
preferences = getPreferences();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static SharedPreferences getPreferences() {
|
||||||
|
return AndroidUtils.getGlobalContext().getSharedPreferences("ru.vtosters.sponsorpost.votes.prefs", Context.MODE_PRIVATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isEnabled() {
|
||||||
|
return preferences.getBoolean("sponsortesting", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setEnabled(boolean status) {
|
||||||
|
preferences.edit().putBoolean("sponsortesting", status).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setUserToken(String token) {
|
||||||
|
preferences.edit()
|
||||||
|
.putString("token", token)
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void remUserToken() {
|
||||||
|
preferences.edit()
|
||||||
|
.remove("token")
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getUserToken() {
|
||||||
|
return preferences.getString("token", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void savePosts(List<String> posts) {
|
||||||
|
preferences.edit()
|
||||||
|
.putStringSet("posts", new HashSet<>(posts))
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveGroupsIds(List<String> ids) {
|
||||||
|
preferences.edit()
|
||||||
|
.putStringSet("groupIds", new HashSet<>(ids))
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveGroupSpecifiedPosts(List<String> postsIds, Long ownerId) {
|
||||||
|
Set<String> stringSet = postsIds.stream()
|
||||||
|
.map(post -> ownerId + "_" + post)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
preferences.edit()
|
||||||
|
.putStringSet(ownerId + "_posts", stringSet)
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveAdPostInfo(long ownerId, long postId) {
|
||||||
|
Set<String> currentStringSet = preferences.getStringSet("posts", new HashSet<>());
|
||||||
|
Set<String> newStringSet = new HashSet<>(currentStringSet);
|
||||||
|
|
||||||
|
newStringSet.add(ownerId + "_" + postId);
|
||||||
|
|
||||||
|
Log.d("SponsorPost", ownerId + "_" + postId);
|
||||||
|
|
||||||
|
preferences.edit()
|
||||||
|
.putStringSet("posts", newStringSet)
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isGroupAd(long ownerId) {
|
||||||
|
Set<String> isGroupAd = preferences.getStringSet("groupIds", new HashSet<>());
|
||||||
|
|
||||||
|
if (!isGroupAd.isEmpty() && isEnabled()) {
|
||||||
|
return isGroupAd.contains(Long.toString(ownerId));
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPostAd(long ownerId, long postId) {
|
||||||
|
if (isEnabled() && isGroupAd(ownerId)) {
|
||||||
|
Set<String> hasSpecifiedGroupPosts = preferences.getStringSet(ownerId + "_posts", new HashSet<>());
|
||||||
|
Set<String> hasPost = preferences.getStringSet("posts", new HashSet<>());
|
||||||
|
|
||||||
|
return hasPost.contains(ownerId + "_" + postId) || hasSpecifiedGroupPosts.contains(ownerId + "_" + postId);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
package ru.vtosters.sponsorpost.internal;
|
||||||
|
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.util.Log;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import ru.vtosters.sponsorpost.utils.ApiUtils;
|
||||||
|
import ru.vtosters.sponsorpost.utils.GzipDecompressor;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
public class VotesService {
|
||||||
|
private static final OkHttpClient client = new OkHttpClient();
|
||||||
|
private static final String apiPath = ApiUtils.getURL() + "/votes";
|
||||||
|
private static final String userPath = ApiUtils.getURL() + "/users";
|
||||||
|
|
||||||
|
public static Map<String, List<String>> getPosts(Long date) {
|
||||||
|
String getFromDate = date > 0 ? ("&date=" + date) : "";
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(apiPath + "/getAllPostIds" + "?needProd=true" + getFromDate)
|
||||||
|
.a("Content-Type", "application/json")
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
|
.a();
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
if (response.h()) {
|
||||||
|
return parseJSON(new JSONObject(GzipDecompressor.decompressResponse(response)));
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Failed to get posts: " + response.l());
|
||||||
|
}
|
||||||
|
} catch (IOException | JSONException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<String, List<String>> parseJSON(JSONObject object) throws JSONException {
|
||||||
|
String PROD_KEY = "prod";
|
||||||
|
String VOTE_KEY = "vote";
|
||||||
|
|
||||||
|
JSONArray prodBase = object.getJSONArray(PROD_KEY);
|
||||||
|
JSONArray testBase = object.getJSONArray(VOTE_KEY);
|
||||||
|
|
||||||
|
if (prodBase.length() == 0 && testBase.length() == 0) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> prodList = IntStream.range(0, prodBase.length())
|
||||||
|
.mapToObj(prodBase::optString)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<String> voteList = IntStream.range(0, testBase.length())
|
||||||
|
.mapToObj(testBase::optString)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return Map.of(PROD_KEY, prodList, VOTE_KEY, voteList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, List<String>> getPostIdsByOwnerId(Long ownerId, Long date) {
|
||||||
|
String getFromDate = date > 0 ? ("&date=" + date) : "";
|
||||||
|
String requestUrl = apiPath + "/getPostIdsByOwnerId" + "?ownerId=" + ownerId + getFromDate + "&needProd=true";
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(requestUrl)
|
||||||
|
.a("Content-Type", "application/json")
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
|
.a();
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
if (response.h()) {
|
||||||
|
return parseJSON(new JSONObject(GzipDecompressor.decompressResponse(response)));
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Failed to get postIdsByOwnerId: " + response.l());
|
||||||
|
}
|
||||||
|
} catch (IOException | JSONException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, List<String>> getOwnerIds() {
|
||||||
|
String requestUrl = apiPath + "/getOwnerIds" + "?needProd=true";
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(requestUrl)
|
||||||
|
.a("Content-Type", "application/json")
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
|
.a();
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
if (response.h()) {
|
||||||
|
return parseJSON(new JSONObject(GzipDecompressor.decompressResponse(response)));
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Failed to get ownersIds: " + response.l());
|
||||||
|
}
|
||||||
|
} catch (IOException | JSONException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject ratePost(int ownerId, int postId, int date, boolean isAd) {
|
||||||
|
String token = VotesPreferences.getUserToken() == null || VotesPreferences.getUserToken().isEmpty() ? getVoteToken() : VotesPreferences.getUserToken();
|
||||||
|
String requestUrl = apiPath + (isAd ? "/dislike" : "/like") + "?ownerId=" + ownerId + "&postId=" + postId+ "&postDate=" + date + "&token=" + Uri.encode(token);
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(requestUrl)
|
||||||
|
.a("Content-Type", "application/json")
|
||||||
|
.a();
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
return new JSONObject(GzipDecompressor.decompressResponse(response));
|
||||||
|
} catch (IOException | JSONException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getVoteToken() {
|
||||||
|
String requestUrl = userPath + "/getUserToken" + "?private_key=" + Uri.encode(Native.pkey());
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(requestUrl)
|
||||||
|
.a("Content-Type", "application/json")
|
||||||
|
.a("Timestamp", Native.time())
|
||||||
|
.a("Signature", Native.sig())
|
||||||
|
.a();
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
String userToken = new JSONObject(GzipDecompressor.decompressResponse(response)).getString("token");
|
||||||
|
VotesPreferences.setUserToken(userToken);
|
||||||
|
return userToken;
|
||||||
|
} catch (IOException | JSONException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPostAd(long ownerId, long postId) {
|
||||||
|
String requestUrl = apiPath + "/isPostAdvert?post=" + ownerId + "_" + postId + "&needProd=true";
|
||||||
|
Request request = new Request.a()
|
||||||
|
.b(requestUrl)
|
||||||
|
.a("Content-Type", "application/json")
|
||||||
|
.a();
|
||||||
|
try (Response response = client.a(request).execute()) {
|
||||||
|
if (response.h()) {
|
||||||
|
return Boolean.parseBoolean(GzipDecompressor.decompressResponse(response));
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Failed to check post for ad status: " + response.l());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,20 +42,7 @@ public class FilterService {
|
|||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
// Check if the response is successful
|
// Check if the response is successful
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
// Determine the response encoding
|
return parseJSON(new JSONArray(GzipDecompressor.decompressResponse(response)));
|
||||||
String encoding = response.a("Content-Encoding");
|
|
||||||
String resp;
|
|
||||||
|
|
||||||
if (encoding != null && encoding.equals("gzip")) {
|
|
||||||
// Decompress the response body
|
|
||||||
resp = GzipDecompressor.decompress(response.a().b());
|
|
||||||
} else {
|
|
||||||
// Retrieve the response body directly
|
|
||||||
resp = response.a().g();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse the response body as a JSONArray and extract filter objects
|
|
||||||
return parseJSON(new JSONArray(resp));
|
|
||||||
} else {
|
} else {
|
||||||
if (!FiltersPreferences.getAllFilterIds().isEmpty()) {
|
if (!FiltersPreferences.getAllFilterIds().isEmpty()) {
|
||||||
return FiltersPreferences.getAllDownloadedFilters(); // check for offline server to get local filters
|
return FiltersPreferences.getAllDownloadedFilters(); // check for offline server to get local filters
|
||||||
@@ -75,11 +62,12 @@ public class FilterService {
|
|||||||
public static Set<String> downloadFilter(String link) {
|
public static Set<String> downloadFilter(String link) {
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(link)
|
.b(link)
|
||||||
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
|
|
||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
return stringToSet(response.a().g());
|
return stringToSet(GzipDecompressor.decompressResponse(response));
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException("Failed to download filter: " + response.l());
|
throw new RuntimeException("Failed to download filter: " + response.l());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,17 +39,7 @@ public class PostService {
|
|||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
// Check if the response is successful
|
// Check if the response is successful
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
// Determine the response encoding
|
return parseJSONPosts(new JSONArray(GzipDecompressor.decompressResponse(response)));
|
||||||
String encoding = response.a("Content-Encoding");
|
|
||||||
|
|
||||||
// Handle GZIP-compressed responses
|
|
||||||
if (encoding != null && encoding.equals("gzip")) {
|
|
||||||
// Decompress the response body and parse JSON data
|
|
||||||
return parseJSONPosts(new JSONArray(GzipDecompressor.decompress(response.a().b())));
|
|
||||||
} else {
|
|
||||||
// Parse JSON data from the response body
|
|
||||||
return parseJSONPosts(new JSONArray(response.a().g()));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
// Handle error response
|
||||||
throw new RuntimeException("Failed to get posts: " + response.l());
|
throw new RuntimeException("Failed to get posts: " + response.l());
|
||||||
@@ -78,20 +68,7 @@ public class PostService {
|
|||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
// Check if the response is successful
|
// Check if the response is successful
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
// Determine the response encoding
|
return Boolean.parseBoolean(GzipDecompressor.decompressResponse(response));
|
||||||
String encoding = response.a("Content-Encoding");
|
|
||||||
String resp;
|
|
||||||
|
|
||||||
if (encoding != null && encoding.equals("gzip")) {
|
|
||||||
// Decompress the response body
|
|
||||||
resp = GzipDecompressor.decompress(response.a().b());
|
|
||||||
} else {
|
|
||||||
// Retrieve the response body directly
|
|
||||||
resp = response.a().g();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract the boolean value indicating whether the post is an ad
|
|
||||||
return Boolean.parseBoolean(resp);
|
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
// Handle error response
|
||||||
throw new RuntimeException("Failed to check post for ad status: " + response.l());
|
throw new RuntimeException("Failed to check post for ad status: " + response.l());
|
||||||
@@ -101,10 +78,19 @@ public class PostService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> getAllPostsIds() {
|
public static List<String> getAllPostsIds(Long date) {
|
||||||
|
String getFromDate;
|
||||||
|
// Get posts older than the specified date (if positive) or all posts (if zero or negative or empty)
|
||||||
|
if (date > 0) {
|
||||||
|
getFromDate = ("?date=" + date);
|
||||||
|
} else {
|
||||||
|
// No date parameter for retrieving all posts
|
||||||
|
getFromDate = "";
|
||||||
|
}
|
||||||
|
|
||||||
// Create a GET request for retrieving all post IDs
|
// Create a GET request for retrieving all post IDs
|
||||||
Request request = new Request.a()
|
Request request = new Request.a()
|
||||||
.b(apiPath + "/getAllPostIds")
|
.b(apiPath + "/getAllPostIds" + getFromDate)
|
||||||
.a("Content-Type", "application/json")
|
.a("Content-Type", "application/json")
|
||||||
.a("Accept-Encoding", "gzip")
|
.a("Accept-Encoding", "gzip")
|
||||||
.a();
|
.a();
|
||||||
@@ -112,17 +98,7 @@ public class PostService {
|
|||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
// Check if the response is successful
|
// Check if the response is successful
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
// Determine the response encoding
|
return new ArrayList<>(Collections.singleton(GzipDecompressor.decompressResponse(response)));
|
||||||
String encoding = response.a("Content-Encoding");
|
|
||||||
|
|
||||||
// Handle GZIP-compressed responses
|
|
||||||
if (encoding != null && encoding.equals("gzip")) {
|
|
||||||
// Decompress the response body and extract the first element as a list of post IDs
|
|
||||||
return new ArrayList<>(Collections.singleton(GzipDecompressor.decompress(response.a().b())));
|
|
||||||
} else {
|
|
||||||
// Extract the first element as a list of post IDs
|
|
||||||
return new ArrayList<>(Collections.singleton(response.a().g()));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
// Handle error response
|
||||||
throw new RuntimeException("Failed to get posts IDs: " + response.l());
|
throw new RuntimeException("Failed to get posts IDs: " + response.l());
|
||||||
@@ -137,7 +113,7 @@ public class PostService {
|
|||||||
// Retrieve post IDs for a specific owner and date
|
// Retrieve post IDs for a specific owner and date
|
||||||
// If date is positive, get posts older than the specified date
|
// If date is positive, get posts older than the specified date
|
||||||
// Otherwise, get all posts for the owner
|
// Otherwise, get all posts for the owner
|
||||||
String getFromDate = date > 0 ? ("?date=" + date) : "";
|
String getFromDate = date > 0 ? ("&date=" + date) : "";
|
||||||
|
|
||||||
// Construct the API request URL
|
// Construct the API request URL
|
||||||
String requestUrl = apiPath + "/getPostIdsByOwnerId" + "?ownerId=" + ownerId + getFromDate;
|
String requestUrl = apiPath + "/getPostIdsByOwnerId" + "?ownerId=" + ownerId + getFromDate;
|
||||||
@@ -152,20 +128,7 @@ public class PostService {
|
|||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
// Check if the response is successful
|
// Check if the response is successful
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
// Determine the response encoding
|
return parseJSONIds(new JSONArray(GzipDecompressor.decompressResponse(response)));
|
||||||
String encoding = response.a("Content-Encoding");
|
|
||||||
String resp;
|
|
||||||
|
|
||||||
if (encoding != null && encoding.equals("gzip")) {
|
|
||||||
// Decompress the response body
|
|
||||||
resp = GzipDecompressor.decompress(response.a().b());
|
|
||||||
} else {
|
|
||||||
// Retrieve the response body directly
|
|
||||||
resp = response.a().g();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse the response body as a JSONArray and extract post IDs
|
|
||||||
return parseJSONIds(new JSONArray(resp));
|
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
// Handle error response
|
||||||
throw new RuntimeException("Failed to get postIdsByOwnerId: " + response.l());
|
throw new RuntimeException("Failed to get postIdsByOwnerId: " + response.l());
|
||||||
@@ -192,20 +155,7 @@ public class PostService {
|
|||||||
try (Response response = client.a(request).execute()) {
|
try (Response response = client.a(request).execute()) {
|
||||||
// Check if the response is successful
|
// Check if the response is successful
|
||||||
if (response.h()) {
|
if (response.h()) {
|
||||||
// Determine the response encoding
|
return parseJSONIds(new JSONArray(GzipDecompressor.decompressResponse(response)));
|
||||||
String encoding = response.a("Content-Encoding");
|
|
||||||
String resp;
|
|
||||||
|
|
||||||
if (encoding != null && encoding.equals("gzip")) {
|
|
||||||
// Decompress the response body
|
|
||||||
resp = GzipDecompressor.decompress(response.a().b());
|
|
||||||
} else {
|
|
||||||
// Retrieve the response body directly
|
|
||||||
resp = response.a().g();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse the response body as a JSONArray and extract owner IDs
|
|
||||||
return parseJSONIds(new JSONArray(resp));
|
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
// Handle error response
|
||||||
throw new RuntimeException("Failed to get ownersIds: " + response.l());
|
throw new RuntimeException("Failed to get ownersIds: " + response.l());
|
||||||
|
|||||||
@@ -31,6 +31,26 @@ public class FiltersPreferences {
|
|||||||
return AndroidUtils.getGlobalContext().getSharedPreferences("ru.vtosters.sponsorpost.filters.prefs", Context.MODE_PRIVATE);
|
return AndroidUtils.getGlobalContext().getSharedPreferences("ru.vtosters.sponsorpost.filters.prefs", Context.MODE_PRIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isEnabledMarking() {
|
||||||
|
return preferences.getBoolean("sponsorpost_filters_marking", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setEnabledMarking(boolean status) {
|
||||||
|
preferences.edit().putBoolean("sponsorpost_filters_marking", status).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getNumBlockedPosts() {
|
||||||
|
return preferences.getInt("numBlockedPosts", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void incrementNumBlockedPosts() {
|
||||||
|
preferences.edit().putInt("numBlockedPosts", getNumBlockedPosts() + 1).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dropNumBlockedPosts() {
|
||||||
|
preferences.edit().putInt("numBlockedPosts", 0).apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static void clearAllCachedLists() {
|
public static void clearAllCachedLists() {
|
||||||
SharedPreferences.Editor editor = preferences.edit();
|
SharedPreferences.Editor editor = preferences.edit();
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package ru.vtosters.sponsorpost.utils;
|
package ru.vtosters.sponsorpost.utils;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -26,4 +29,17 @@ public class GzipDecompressor {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String decompressResponse(Response response) throws IOException {
|
||||||
|
String encoding = response.a("Content-Encoding");
|
||||||
|
if (encoding != null && encoding.equals("gzip")) {
|
||||||
|
// Decompress the response body
|
||||||
|
Log.d("GZIP", "true, link " + response.o().g());
|
||||||
|
return GzipDecompressor.decompress(response.a().b());
|
||||||
|
} else {
|
||||||
|
// Retrieve the response body directly
|
||||||
|
Log.d("GZIP", "false, link " + response.o().g());
|
||||||
|
return response.a().g();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -30,6 +30,14 @@ public class PostsPreferences {
|
|||||||
preferences.edit().putBoolean("sponsorpost", status).apply();
|
preferences.edit().putBoolean("sponsorpost", status).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isEnabledMarking() {
|
||||||
|
return preferences.getBoolean("sponsorpost_marking", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setEnabledMarking(boolean status) {
|
||||||
|
preferences.edit().putBoolean("sponsorpost_marking", status).apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static void savePosts(List<Post> posts) {
|
public static void savePosts(List<Post> posts) {
|
||||||
Set<String> stringSet = posts.stream()
|
Set<String> stringSet = posts.stream()
|
||||||
.map(post -> post.getOwnerId() + "_" + post.getPostId())
|
.map(post -> post.getOwnerId() + "_" + post.getPostId())
|
||||||
@@ -40,7 +48,13 @@ public class PostsPreferences {
|
|||||||
.apply();
|
.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveGroupSpecifiedPosts(List<Long> postsIds, Long ownerId) {
|
public static void savePostsStr(List<String> posts) {
|
||||||
|
preferences.edit()
|
||||||
|
.putStringSet("posts", new HashSet<>(posts))
|
||||||
|
.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveGroupSpecifiedPosts(List<?> postsIds, Long ownerId) {
|
||||||
Set<String> stringSet = postsIds.stream()
|
Set<String> stringSet = postsIds.stream()
|
||||||
.map(post -> ownerId + "_" + post)
|
.map(post -> ownerId + "_" + post)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
@@ -50,7 +64,7 @@ public class PostsPreferences {
|
|||||||
.apply();
|
.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveGroupsIds(List<Long> ids) {
|
public static void saveGroupsIds(List<?> ids) {
|
||||||
Set<String> stringSet = ids.stream().map(String::valueOf).collect(Collectors.toSet());
|
Set<String> stringSet = ids.stream().map(String::valueOf).collect(Collectors.toSet());
|
||||||
|
|
||||||
preferences.edit()
|
preferences.edit()
|
||||||
@@ -81,6 +95,18 @@ public class PostsPreferences {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int getNumBlockedPosts() {
|
||||||
|
return preferences.getInt("numBlockedPosts", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void incrementNumBlockedPosts() {
|
||||||
|
preferences.edit().putInt("numBlockedPosts", getNumBlockedPosts() + 1).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dropNumBlockedPosts() {
|
||||||
|
preferences.edit().putInt("numBlockedPosts", 0).apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isPostAd(long ownerId, long postId) {
|
public static boolean isPostAd(long ownerId, long postId) {
|
||||||
if (isEnabled() && isGroupAd(ownerId)) {
|
if (isEnabled() && isGroupAd(ownerId)) {
|
||||||
Set<String> hasSpecifiedGroupPosts = preferences.getStringSet(ownerId + "_posts", new HashSet<>());
|
Set<String> hasSpecifiedGroupPosts = preferences.getStringSet(ownerId + "_posts", new HashSet<>());
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
package ru.vtosters.sponsorpost.utils;
|
package ru.vtosters.sponsorpost.utils;
|
||||||
|
|
||||||
import ru.vtosters.hooks.other.Preferences;
|
|
||||||
import ru.vtosters.lite.utils.NetworkUtils;
|
import ru.vtosters.lite.utils.NetworkUtils;
|
||||||
import ru.vtosters.lite.utils.newsfeed.NewsFeedFiltersUtils;
|
import ru.vtosters.lite.utils.newsfeed.NewsFeedFiltersUtils;
|
||||||
import ru.vtosters.sponsorpost.data.Filter;
|
import ru.vtosters.sponsorpost.data.Filter;
|
||||||
import ru.vtosters.sponsorpost.data.Post;
|
import ru.vtosters.sponsorpost.data.Post;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesPreferences;
|
||||||
|
import ru.vtosters.sponsorpost.internal.VotesService;
|
||||||
import ru.vtosters.sponsorpost.services.FilterService;
|
import ru.vtosters.sponsorpost.services.FilterService;
|
||||||
import ru.vtosters.sponsorpost.services.PostService;
|
import ru.vtosters.sponsorpost.services.PostService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@@ -59,16 +61,31 @@ public class Updates {
|
|||||||
long weekAgo = currentTime - TimeUnit.DAYS.toMillis(7);
|
long weekAgo = currentTime - TimeUnit.DAYS.toMillis(7);
|
||||||
|
|
||||||
if (PostsPreferences.isEnabled() && NetworkUtils.isNetworkConnected()) {
|
if (PostsPreferences.isEnabled() && NetworkUtils.isNetworkConnected()) {
|
||||||
List<Post> posts = PostService.getPosts(weekAgo);
|
if (VotesPreferences.isEnabled()) {
|
||||||
List<Long> groupIds = PostService.getOwnerIds();
|
Map<String, List<String>> posts = VotesService.getPosts(weekAgo / 1000);
|
||||||
|
Map<String, List<String>> groupIds = VotesService.getOwnerIds();
|
||||||
|
|
||||||
if (!posts.isEmpty()) {
|
if (!posts.isEmpty()) {
|
||||||
PostsPreferences.savePosts(posts);
|
PostsPreferences.savePostsStr(posts.get("prod"));
|
||||||
}
|
VotesPreferences.savePosts(posts.get("vote"));
|
||||||
|
}
|
||||||
|
|
||||||
if (!groupIds.isEmpty()) {
|
if (!groupIds.isEmpty()) {
|
||||||
PostsPreferences.saveGroupsIds(groupIds);
|
PostsPreferences.saveGroupsIds(groupIds.get("prod"));
|
||||||
|
VotesPreferences.saveGroupsIds(groupIds.get("vote"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
List<String> posts = PostService.getAllPostsIds(weekAgo / 1000);
|
||||||
|
List<Long> groupIds = PostService.getOwnerIds();
|
||||||
|
|
||||||
|
if (!posts.isEmpty()) {
|
||||||
|
PostsPreferences.savePostsStr(posts);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!groupIds.isEmpty()) {
|
||||||
|
PostsPreferences.saveGroupsIds(groupIds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2055,13 +2055,20 @@
|
|||||||
android:name="com.google.android.gms.auth.api.signin.RevocationBoundService"
|
android:name="com.google.android.gms.auth.api.signin.RevocationBoundService"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:permission="com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION" />
|
android:permission="com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name="com.google.firebase.components.ComponentDiscoveryService"
|
android:name="com.google.firebase.components.ComponentDiscoveryService"
|
||||||
android:directBootAware="true"
|
android:directBootAware="true"
|
||||||
android:exported="false">
|
android:exported="false">
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.remoteconfig.RemoteConfigRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar" />
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
|
android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
|
||||||
android:value="com.google.firebase.components.ComponentRegistrar" />
|
android:value="com.google.firebase.components.ComponentRegistrar" />
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.abt.component.AbtRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar" />
|
||||||
</service>
|
</service>
|
||||||
<service
|
<service
|
||||||
android:name="com.google.firebase.messaging.FirebaseMessagingService"
|
android:name="com.google.firebase.messaging.FirebaseMessagingService"
|
||||||
|
|||||||
@@ -1308,11 +1308,11 @@ and organize it with the help of tags"</string>
|
|||||||
<string name="goods_picker_text_no_goods">Add products to favorites, and attach them to photos, videos and stories!</string>
|
<string name="goods_picker_text_no_goods">Add products to favorites, and attach them to photos, videos and stories!</string>
|
||||||
<string name="goods_picker_title_no_goods">Product list empty</string>
|
<string name="goods_picker_title_no_goods">Product list empty</string>
|
||||||
<string name="goods_picker_title_photo">Tag product</string>
|
<string name="goods_picker_title_photo">Tag product</string>
|
||||||
<string name="google_api_key">AIzaSyBf1M4--c04jJtKSWI2w5DgUTst1_V20D4</string>
|
<string name="google_api_key">AIzaSyCL17U2Q5i1NVwIcXgMOZMidSRFHyGYgwM</string>
|
||||||
<string name="google_app_id">1:841415684880:android:632f429381141121</string>
|
<string name="google_app_id">1:841415684880:android:632f429381141121</string>
|
||||||
<string name="google_assistant_verification_channel_name">Assistant verifier</string>
|
<string name="google_assistant_verification_channel_name">Assistant verifier</string>
|
||||||
<string name="google_assistant_verification_notification_title">Google Assistant sending message</string>
|
<string name="google_assistant_verification_notification_title">Google Assistant sending message</string>
|
||||||
<string name="google_crash_reporting_api_key">AIzaSyBf1M4--c04jJtKSWI2w5DgUTst1_V20D4</string>
|
<string name="google_crash_reporting_api_key"></string>
|
||||||
<string name="google_storage_bucket">api-project-841415684880.appspot.com</string>
|
<string name="google_storage_bucket">api-project-841415684880.appspot.com</string>
|
||||||
<string name="group">Community</string>
|
<string name="group">Community</string>
|
||||||
<string name="group_accept_member">Accept</string>
|
<string name="group_accept_member">Accept</string>
|
||||||
|
|||||||
@@ -2,52 +2,56 @@
|
|||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<PreferenceCategory android:title="@string/group_info">
|
<PreferenceCategory android:title="@string/group_info">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="phone"
|
android:key="phone"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/phone_number"/>
|
android:title="@string/phone_number" />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="email"
|
android:key="email"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/email"/>
|
android:title="@string/email" />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="changePassword"
|
android:key="changePassword"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/change_password"/>
|
android:title="@string/change_password" />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="domain"
|
android:key="domain"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/page_address"/>
|
android:title="@string/page_address" />
|
||||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference/>
|
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/sett_posts">
|
<PreferenceCategory android:title="@string/sett_posts">
|
||||||
<com.vtosters.lite.ui.SummaryListPreference
|
<com.vtosters.lite.ui.SummaryListPreference
|
||||||
android:entries="@array/sett_posts_default_items"
|
android:entries="@array/sett_posts_default_items"
|
||||||
android:entryValues="@array/on_off"
|
android:entryValues="@array/on_off"
|
||||||
android:key="onlyMyPosts"
|
android:key="onlyMyPosts"
|
||||||
android:title="@string/sett_posts_default"/>
|
android:title="@string/sett_posts_default" />
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
android:key="enableComments"
|
android:key="enableComments"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/sett_enable_comments"/>
|
android:title="@string/sett_enable_comments" />
|
||||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference/>
|
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/community_comments_settings_block_title">
|
<PreferenceCategory android:title="@string/community_comments_settings_block_title">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="community_comments"
|
android:key="community_comments"
|
||||||
android:summary=""
|
android:summary=""
|
||||||
android:title="@string/community_comments_settings_title_new"/>
|
android:title="@string/community_comments_settings_title_new" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/account_settings_comments">
|
<PreferenceCategory android:title="@string/account_settings_comments">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="comment_order"
|
android:key="comment_order"
|
||||||
android:summary=""
|
android:summary=""
|
||||||
android:title="@string/account_settings_comment_order"/>
|
android:title="@string/account_settings_comment_order" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/sett_other">
|
<PreferenceCategory android:title="@string/sett_other">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="newsBanned"
|
android:key="sync"
|
||||||
android:summary="@string/sett_news_banned_summary"
|
android:summary=""
|
||||||
android:title="@string/sett_news_banned"/>
|
android:title="@string/sett_sync" />
|
||||||
<com.vtosters.lite.ui.MaterialSectionDividerPreference/>
|
<Preference
|
||||||
|
android:key="newsBanned"
|
||||||
|
android:summary="@string/sett_news_banned_summary"
|
||||||
|
android:title="@string/sett_news_banned" />
|
||||||
|
<com.vtosters.lite.ui.MaterialSectionDividerPreference />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
@@ -2,54 +2,58 @@
|
|||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<PreferenceCategory android:title="@string/group_info">
|
<PreferenceCategory android:title="@string/group_info">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="phone"
|
android:key="phone"
|
||||||
android:layout="@layout/preference_with_value"
|
android:layout="@layout/preference_with_value"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/phone_number"/>
|
android:title="@string/phone_number" />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="email"
|
android:key="email"
|
||||||
android:layout="@layout/preference_with_value"
|
android:layout="@layout/preference_with_value"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/email"/>
|
android:title="@string/email" />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="changePassword"
|
android:key="changePassword"
|
||||||
android:layout="@layout/preference_with_value"
|
android:layout="@layout/preference_with_value"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/change_password"/>
|
android:title="@string/change_password" />
|
||||||
<Preference
|
<Preference
|
||||||
android:key="domain"
|
android:key="domain"
|
||||||
android:layout="@layout/preference_with_value"
|
android:layout="@layout/preference_with_value"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/page_address"/>
|
android:title="@string/page_address" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/sett_posts">
|
<PreferenceCategory android:title="@string/sett_posts">
|
||||||
<com.vtosters.lite.ui.SummaryListPreference
|
<com.vtosters.lite.ui.SummaryListPreference
|
||||||
android:entries="@array/sett_posts_default_items"
|
android:entries="@array/sett_posts_default_items"
|
||||||
android:entryValues="@array/on_off"
|
android:entryValues="@array/on_off"
|
||||||
android:key="onlyMyPosts"
|
android:key="onlyMyPosts"
|
||||||
android:layout="@layout/preference_with_value"
|
android:layout="@layout/preference_with_value"
|
||||||
android:title="@string/sett_posts_default"/>
|
android:title="@string/sett_posts_default" />
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
android:key="enableComments"
|
android:key="enableComments"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/sett_enable_comments"/>
|
android:title="@string/sett_enable_comments" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/community_comments_settings_block_title">
|
<PreferenceCategory android:title="@string/community_comments_settings_block_title">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="community_comments"
|
android:key="community_comments"
|
||||||
android:summary=""
|
android:summary=""
|
||||||
android:title="@string/community_comments_settings_title_new"/>
|
android:title="@string/community_comments_settings_title_new" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/account_settings_comments">
|
<PreferenceCategory android:title="@string/account_settings_comments">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="comment_order"
|
android:key="comment_order"
|
||||||
android:summary=""
|
android:summary=""
|
||||||
android:title="@string/account_settings_comment_order"/>
|
android:title="@string/account_settings_comment_order" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/sett_other">
|
<PreferenceCategory android:title="@string/sett_other">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="newsBanned"
|
android:key="sync"
|
||||||
android:summary="@string/sett_news_banned_summary"
|
android:summary=""
|
||||||
android:title="@string/sett_news_banned"/>
|
android:title="@string/sett_sync" />
|
||||||
|
<Preference
|
||||||
|
android:key="newsBanned"
|
||||||
|
android:summary="@string/sett_news_banned_summary"
|
||||||
|
android:title="@string/sett_news_banned" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
@@ -34,6 +34,11 @@
|
|||||||
android:key="trackInstalledApps"
|
android:key="trackInstalledApps"
|
||||||
android:summary="@string/sett_mytracker_location_crap_summary"
|
android:summary="@string/sett_mytracker_location_crap_summary"
|
||||||
android:title="@string/sett_mytracker_apps"/>
|
android:title="@string/sett_mytracker_apps"/>
|
||||||
|
<!-- <com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="useProxyServer"
|
||||||
|
android:title="@string/sett_use_proxy"
|
||||||
|
android:visibility="gone" /> -->
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="isRoamingState"
|
android:key="isRoamingState"
|
||||||
@@ -94,6 +99,18 @@
|
|||||||
android:key="clearAudioCache"
|
android:key="clearAudioCache"
|
||||||
android:summary=""
|
android:summary=""
|
||||||
android:title="@string/sett_clear_audio_cache"/>
|
android:title="@string/sett_clear_audio_cache"/>
|
||||||
|
<!-- <Preference-->
|
||||||
|
<!-- android:key="clearImageCache"-->
|
||||||
|
<!-- android:summary=""-->
|
||||||
|
<!-- android:title="@string/sett_clear_img_cache"/>-->
|
||||||
|
<!-- <Preference-->
|
||||||
|
<!-- android:key="clearVideoCache"-->
|
||||||
|
<!-- android:summary=""-->
|
||||||
|
<!-- android:title="@string/sett_clear_video_cache"/>-->
|
||||||
|
<!-- <Preference-->
|
||||||
|
<!-- android:key="clearMessagesCache"-->
|
||||||
|
<!-- android:summary=""-->
|
||||||
|
<!-- android:title="@string/sett_clear_messages_cache"/>-->
|
||||||
<Preference
|
<Preference
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:summary="@string/where_is_cache_settings_summ"
|
android:summary="@string/where_is_cache_settings_summ"
|
||||||
|
|||||||
@@ -36,6 +36,11 @@
|
|||||||
android:key="trackInstalledApps"
|
android:key="trackInstalledApps"
|
||||||
android:summary="@string/sett_mytracker_location_crap_summary"
|
android:summary="@string/sett_mytracker_location_crap_summary"
|
||||||
android:title="@string/sett_mytracker_apps"/>
|
android:title="@string/sett_mytracker_apps"/>
|
||||||
|
<!-- <com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="useProxyServer"
|
||||||
|
android:title="@string/sett_use_proxy"
|
||||||
|
android:visibility="gone" /> -->
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="isRoamingState"
|
android:key="isRoamingState"
|
||||||
@@ -94,6 +99,18 @@
|
|||||||
android:key="clearAudioCache"
|
android:key="clearAudioCache"
|
||||||
android:summary=""
|
android:summary=""
|
||||||
android:title="@string/sett_clear_audio_cache"/>
|
android:title="@string/sett_clear_audio_cache"/>
|
||||||
|
<!-- <Preference-->
|
||||||
|
<!-- android:key="clearImageCache"-->
|
||||||
|
<!-- android:summary=""-->
|
||||||
|
<!-- android:title="@string/sett_clear_img_cache"/>-->
|
||||||
|
<!-- <Preference-->
|
||||||
|
<!-- android:key="clearVideoCache"-->
|
||||||
|
<!-- android:summary=""-->
|
||||||
|
<!-- android:title="@string/sett_clear_video_cache"/>-->
|
||||||
|
<!-- <Preference-->
|
||||||
|
<!-- android:key="clearMessagesCache"-->
|
||||||
|
<!-- android:summary=""-->
|
||||||
|
<!-- android:title="@string/sett_clear_messages_cache"/>-->
|
||||||
<Preference
|
<Preference
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:summary="@string/where_is_cache_settings_summ"
|
android:summary="@string/where_is_cache_settings_summ"
|
||||||
|
|||||||
@@ -14,62 +14,6 @@
|
|||||||
android:key="compression"
|
android:key="compression"
|
||||||
android:title="@string/compression_types"/>
|
android:title="@string/compression_types"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/vtl_music_settings">
|
|
||||||
<Preference
|
|
||||||
android:key="cached_tracks"
|
|
||||||
android:title="@string/cached_tracks_title"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="invertCachedTracks"
|
|
||||||
android:summary="@string/invertcached_summ"
|
|
||||||
android:title="@string/invertcached_title"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="autocache"
|
|
||||||
android:summary="@string/autocache_summ"
|
|
||||||
android:title="@string/autocache_title"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="dldir"
|
|
||||||
android:summary="Использовать папку Downloads вместо Music для скачивания музыки в MP3"
|
|
||||||
android:title="Альтернативная папка для скачивания"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="useGenius"
|
|
||||||
android:summary="@string/useGenius_summ"
|
|
||||||
android:title="@string/useGenius_title"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="useOldAppVer"
|
|
||||||
android:summary="@string/useOldAppVer_summ"
|
|
||||||
android:title="@string/useOldAppVer_title"/>
|
|
||||||
<com.vtosters.lite.ui.SummaryListPreference
|
|
||||||
android:defaultValue="default"
|
|
||||||
android:dialogTitle="@string/musicdefcatalog_dialogTitle"
|
|
||||||
android:entries="@array/musicdefcatalog_value"
|
|
||||||
android:entryValues="@array/musicdefcatalog"
|
|
||||||
android:key="musicdefcatalog"
|
|
||||||
android:title="@string/musicdefcatalog_title"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="setMetaData"
|
|
||||||
android:summary="Сохранять id3v2 теги для песен для MP3"
|
|
||||||
android:title="Сохранять метадату песен"/>
|
|
||||||
<Preference
|
|
||||||
android:key="audio_download"
|
|
||||||
android:title="@string/audio_download_title"/>
|
|
||||||
</PreferenceCategory>
|
|
||||||
<PreferenceCategory android:title="Last.fm" android:key="lastfm">
|
|
||||||
<Preference
|
|
||||||
android:key="lastfm_auth"
|
|
||||||
android:summary="@string/lastfm_auth_summ"
|
|
||||||
android:title="@string/lastfm_auth_title"/>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="lastfm_enabled"
|
|
||||||
android:summary="@string/lastfm_enabled_summ"
|
|
||||||
android:title="@string/lastfm_enabled_title"/>
|
|
||||||
</PreferenceCategory>
|
|
||||||
<PreferenceCategory android:title="@string/vtl_video_settings">
|
<PreferenceCategory android:title="@string/vtl_video_settings">
|
||||||
<Preference
|
<Preference
|
||||||
android:key="download_video"
|
android:key="download_video"
|
||||||
@@ -99,21 +43,4 @@
|
|||||||
android:key="select_photo_search_engine"
|
android:key="select_photo_search_engine"
|
||||||
android:title="@string/photo_search_engine_title"/>
|
android:title="@string/photo_search_engine_title"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/vkx_title" android:key="vkx_sett">
|
|
||||||
<Preference
|
|
||||||
android:enabled="false"
|
|
||||||
android:summary="@string/vkx_why_summary"
|
|
||||||
android:title="@string/vkx_why"/>
|
|
||||||
<Preference
|
|
||||||
android:persistent="false"
|
|
||||||
android:title="@string/vkx_download">
|
|
||||||
<intent
|
|
||||||
android:action="android.intent.action.VIEW"
|
|
||||||
android:data="https://vkx.app"/>
|
|
||||||
</Preference>
|
|
||||||
<com.vtosters.lite.ui.MaterialSwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="libvkx_integration"
|
|
||||||
android:title="@string/vkx_integration"/>
|
|
||||||
</PreferenceCategory>
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
@@ -16,10 +16,11 @@
|
|||||||
android:entryValues="@array/proxy_value"
|
android:entryValues="@array/proxy_value"
|
||||||
android:key="proxy"
|
android:key="proxy"
|
||||||
android:title="@string/useproxy"/>
|
android:title="@string/useproxy"/>
|
||||||
<!-- <Preference-->
|
<com.vtosters.lite.ui.MaterialSwitchPreference
|
||||||
<!-- android:key="random_proxy"-->
|
android:defaultValue="false"
|
||||||
<!-- android:summary="@string/proxy_setup_summ"-->
|
android:key="vkproxy"
|
||||||
<!-- android:title="@string/proxy_setup_title"/>-->
|
android:summary="Нестабилен, может не работать у вашего оператора/провайдера.\n\nМожет не работать музыка и другие компоненты приложения"
|
||||||
|
android:title="Использовать встроенный прокси"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory android:title="@string/proxyadvsettings">
|
<PreferenceCategory android:title="@string/proxyadvsettings">
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
|
|||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
.source "com.google.android.gms:play-services-measurement-sdk@@17.2.1"
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation build Lcom/google/android/gms/common/util/DynamiteApi;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# static fields
|
|
||||||
.field public static final MODULE_ID:Ljava/lang/String; = "com.google.android.gms.measurement.dynamite"
|
|
||||||
|
|
||||||
.field public static final MODULE_VERSION:I = 0xb
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
.line 1
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/dynamite/descriptors/com/google/firebase/perf/ModuleDescriptor;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
.source "com.google.firebase:firebase-perf@@19.0.2"
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation build Lcom/google/android/gms/common/util/DynamiteApi;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# static fields
|
|
||||||
.field public static final MODULE_ID:Ljava/lang/String; = "com.google.firebase.perf"
|
|
||||||
|
|
||||||
.field public static final MODULE_VERSION:I = 0x1
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
.line 1
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/internal/safetynet/zza;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Landroid/os/IInterface;
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private final zza:Landroid/os/IBinder;
|
|
||||||
|
|
||||||
.field private final zzb:Ljava/lang/String;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method protected constructor <init>(Landroid/os/IBinder;Ljava/lang/String;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zza;->zza:Landroid/os/IBinder;
|
|
||||||
|
|
||||||
iput-object p2, p0, Lcom/google/android/gms/internal/safetynet/zza;->zzb:Ljava/lang/String;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public asBinder()Landroid/os/IBinder;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zza;->zza:Landroid/os/IBinder;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method protected final obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
invoke-static {}, Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
iget-object v1, p0, Lcom/google/android/gms/internal/safetynet/zza;->zzb:Ljava/lang/String;
|
|
||||||
|
|
||||||
invoke-virtual {v0, v1}, Landroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method protected final transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
.locals 3
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-static {}, Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
:try_start_0
|
|
||||||
iget-object v1, p0, Lcom/google/android/gms/internal/safetynet/zza;->zza:Landroid/os/IBinder;
|
|
||||||
|
|
||||||
const/4 v2, 0x0
|
|
||||||
|
|
||||||
invoke-interface {v1, p1, p2, v0, v2}, Landroid/os/IBinder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Landroid/os/Parcel;->readException()V
|
|
||||||
:try_end_0
|
|
||||||
.catchall {:try_start_0 .. :try_end_0} :catchall_0
|
|
||||||
|
|
||||||
invoke-virtual {p2}, Landroid/os/Parcel;->recycle()V
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Landroid/os/Parcel;->recycle()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
|
|
||||||
:catchall_0
|
|
||||||
move-exception p1
|
|
||||||
|
|
||||||
invoke-virtual {p2}, Landroid/os/Parcel;->recycle()V
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Landroid/os/Parcel;->recycle()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/internal/safetynet/zzb;
|
|
||||||
.super Landroid/os/Binder;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Landroid/os/IInterface;
|
|
||||||
|
|
||||||
|
|
||||||
# static fields
|
|
||||||
.field private static zzc:Lcom/google/android/gms/internal/safetynet/zzd;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method static constructor <clinit>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method protected constructor <init>(Ljava/lang/String;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Landroid/os/Binder;-><init>()V
|
|
||||||
|
|
||||||
invoke-virtual {p0, p0, p1}, Landroid/os/Binder;->attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public asBinder()Landroid/os/IBinder;
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
return-object p0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method protected dispatchTransaction(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
|
||||||
.locals 0
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
const/4 p1, 0x0
|
|
||||||
|
|
||||||
return p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
const v0, 0xffffff
|
|
||||||
|
|
||||||
if-le p1, v0, :cond_0
|
|
||||||
|
|
||||||
invoke-super {p0, p1, p2, p3, p4}, Landroid/os/Binder;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
invoke-virtual {p0}, Landroid/os/Binder;->getInterfaceDescriptor()Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-virtual {p2, v0}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
const/4 v0, 0x0
|
|
||||||
|
|
||||||
:goto_0
|
|
||||||
if-eqz v0, :cond_1
|
|
||||||
|
|
||||||
const/4 p1, 0x1
|
|
||||||
|
|
||||||
return p1
|
|
||||||
|
|
||||||
:cond_1
|
|
||||||
invoke-virtual {p0, p1, p2, p3, p4}, Lcom/google/android/gms/internal/safetynet/zzb;->dispatchTransaction(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
|
||||||
|
|
||||||
move-result p1
|
|
||||||
|
|
||||||
return p1
|
|
||||||
.end method
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/internal/safetynet/zzc;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
|
|
||||||
# static fields
|
|
||||||
.field private static final zzd:Ljava/lang/ClassLoader;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method static constructor <clinit>()V
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
const-class v0, Lcom/google/android/gms/internal/safetynet/zzc;
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Ljava/lang/Class;->getClassLoader()Ljava/lang/ClassLoader;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
sput-object v0, Lcom/google/android/gms/internal/safetynet/zzc;->zzd:Ljava/lang/ClassLoader;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method private constructor <init>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public static zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"<T::",
|
|
||||||
"Landroid/os/Parcelable;",
|
|
||||||
">(",
|
|
||||||
"Landroid/os/Parcel;",
|
|
||||||
"Landroid/os/Parcelable$Creator<",
|
|
||||||
"TT;>;)TT;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Landroid/os/Parcel;->readInt()I
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
const/4 p0, 0x0
|
|
||||||
|
|
||||||
return-object p0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
invoke-interface {p1, p0}, Landroid/os/Parcelable$Creator;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
|
|
||||||
|
|
||||||
move-result-object p0
|
|
||||||
|
|
||||||
check-cast p0, Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
return-object p0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public static zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
if-nez p1, :cond_0
|
|
||||||
|
|
||||||
const/4 p1, 0x0
|
|
||||||
|
|
||||||
:goto_0
|
|
||||||
invoke-virtual {p0, p1}, Landroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
invoke-interface {p1}, Landroid/os/IInterface;->asBinder()Landroid/os/IBinder;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public static zza(Landroid/os/Parcel;)Z
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Landroid/os/Parcel;->readInt()I
|
|
||||||
|
|
||||||
move-result p0
|
|
||||||
|
|
||||||
if-eqz p0, :cond_0
|
|
||||||
|
|
||||||
const/4 p0, 0x1
|
|
||||||
|
|
||||||
return p0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
const/4 p0, 0x0
|
|
||||||
|
|
||||||
return p0
|
|
||||||
.end method
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
.class interface abstract Lcom/google/android/gms/internal/safetynet/zzd;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/internal/safetynet/zze;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzh;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Lcom/google/android/gms/internal/safetynet/zzh;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public zza(Lcom/google/android/gms/common/api/Status;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/SafeBrowsingData;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zza;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzd;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzf;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzh;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public zza(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zza(Ljava/lang/String;)V
|
|
||||||
.locals 0
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zzb(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
new-instance p1, Ljava/lang/UnsupportedOperationException;
|
|
||||||
|
|
||||||
invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;-><init>()V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
.class abstract Lcom/google/android/gms/internal/safetynet/zzf;
|
|
||||||
.super Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"<R::",
|
|
||||||
"Lcom/google/android/gms/common/api/i;",
|
|
||||||
">",
|
|
||||||
"Lcom/google/android/gms/common/api/internal/c<",
|
|
||||||
"TR;",
|
|
||||||
"Lcom/google/android/gms/internal/safetynet/zzx;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
sget-object v0, Lcom/google/android/gms/safetynet/b;->c:Lcom/google/android/gms/common/api/a;
|
|
||||||
|
|
||||||
invoke-direct {p0, v0, p1}, Lcom/google/android/gms/common/api/internal/c;-><init>(Lcom/google/android/gms/common/api/a;Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
.class public interface abstract Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Landroid/os/IInterface;
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/SafeBrowsingData;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zza;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzd;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzf;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzh;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Ljava/lang/String;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zzb(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
@@ -1,230 +0,0 @@
|
|||||||
.class public abstract Lcom/google/android/gms/internal/safetynet/zzh;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzb;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
const-string v0, "com.google.android.gms.safetynet.internal.ISafetyNetCallbacks"
|
|
||||||
|
|
||||||
invoke-direct {p0, v0}, Lcom/google/android/gms/internal/safetynet/zzb;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected final dispatchTransaction(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
|
||||||
.locals 0
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
const/4 p3, 0x1
|
|
||||||
|
|
||||||
if-eq p1, p3, :cond_8
|
|
||||||
|
|
||||||
const/4 p4, 0x2
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_7
|
|
||||||
|
|
||||||
const/4 p4, 0x3
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_6
|
|
||||||
|
|
||||||
const/4 p4, 0x4
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_5
|
|
||||||
|
|
||||||
const/4 p4, 0x6
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_4
|
|
||||||
|
|
||||||
const/16 p4, 0x8
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_3
|
|
||||||
|
|
||||||
const/16 p4, 0xf
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_2
|
|
||||||
|
|
||||||
const/16 p4, 0xa
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_1
|
|
||||||
|
|
||||||
const/16 p4, 0xb
|
|
||||||
|
|
||||||
if-eq p1, p4, :cond_0
|
|
||||||
|
|
||||||
const/4 p1, 0x0
|
|
||||||
|
|
||||||
return p1
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
invoke-interface {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;)V
|
|
||||||
|
|
||||||
goto/16 :goto_0
|
|
||||||
|
|
||||||
:cond_1
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
invoke-static {p2}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;)Z
|
|
||||||
|
|
||||||
move-result p2
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zzb(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
|
|
||||||
goto/16 :goto_0
|
|
||||||
|
|
||||||
:cond_2
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
sget-object p4, Lcom/google/android/gms/safetynet/zzh;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p4}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p2
|
|
||||||
|
|
||||||
check-cast p2, Lcom/google/android/gms/safetynet/zzh;
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzh;)V
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_3
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
sget-object p4, Lcom/google/android/gms/safetynet/zzd;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p4}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p2
|
|
||||||
|
|
||||||
check-cast p2, Lcom/google/android/gms/safetynet/zzd;
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzd;)V
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_4
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
sget-object p4, Lcom/google/android/gms/safetynet/zzf;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p4}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p2
|
|
||||||
|
|
||||||
check-cast p2, Lcom/google/android/gms/safetynet/zzf;
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzf;)V
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_5
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
invoke-static {p2}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;)Z
|
|
||||||
|
|
||||||
move-result p2
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_6
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
sget-object p4, Lcom/google/android/gms/safetynet/SafeBrowsingData;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p4}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p2
|
|
||||||
|
|
||||||
check-cast p2, Lcom/google/android/gms/safetynet/SafeBrowsingData;
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/SafeBrowsingData;)V
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_7
|
|
||||||
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
invoke-interface {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:cond_8
|
|
||||||
sget-object p1, Lcom/google/android/gms/common/api/Status;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
sget-object p4, Lcom/google/android/gms/safetynet/zza;->CREATOR:Landroid/os/Parcelable$Creator;
|
|
||||||
|
|
||||||
invoke-static {p2, p4}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable;
|
|
||||||
|
|
||||||
move-result-object p2
|
|
||||||
|
|
||||||
check-cast p2, Lcom/google/android/gms/safetynet/zza;
|
|
||||||
|
|
||||||
invoke-interface {p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzg;->zza(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zza;)V
|
|
||||||
|
|
||||||
:goto_0
|
|
||||||
return p3
|
|
||||||
.end method
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
.class public interface abstract Lcom/google/android/gms/internal/safetynet/zzi;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Landroid/os/IInterface;
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/internal/safetynet/zzg;Ljava/lang/String;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/internal/safetynet/zzg;Ljava/lang/String;[IILjava/lang/String;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zza(Lcom/google/android/gms/internal/safetynet/zzg;[BLjava/lang/String;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zzb()V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zzb(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zzc(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public abstract zzd(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
.end method
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
.class public final Lcom/google/android/gms/internal/safetynet/zzj;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zza;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/internal/safetynet/zzi;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method constructor <init>(Landroid/os/IBinder;)V
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
const-string v0, "com.google.android.gms.safetynet.internal.ISafetyNetService"
|
|
||||||
|
|
||||||
invoke-direct {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;-><init>(Landroid/os/IBinder;Ljava/lang/String;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public final zza(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
const/16 p1, 0xc
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zza(Lcom/google/android/gms/internal/safetynet/zzg;Ljava/lang/String;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p2}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
const/4 p1, 0x6
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zza(Lcom/google/android/gms/internal/safetynet/zzg;Ljava/lang/String;[IILjava/lang/String;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p2}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p3}, Landroid/os/Parcel;->writeIntArray([I)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p4}, Landroid/os/Parcel;->writeInt(I)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p5}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
const/4 p1, 0x3
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zza(Lcom/google/android/gms/internal/safetynet/zzg;[BLjava/lang/String;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p2}, Landroid/os/Parcel;->writeByteArray([B)V
|
|
||||||
|
|
||||||
invoke-virtual {v0, p3}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
const/4 p1, 0x7
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zzb()V
|
|
||||||
.locals 2
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
const/16 v1, 0xd
|
|
||||||
|
|
||||||
invoke-virtual {p0, v1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zzb(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
const/16 p1, 0xe
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zzc(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
const/4 p1, 0x4
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final zzd(Lcom/google/android/gms/internal/safetynet/zzg;)V
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-virtual {p0}, Lcom/google/android/gms/internal/safetynet/zza;->obtainAndWriteInterfaceToken()Landroid/os/Parcel;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-static {v0, p1}, Lcom/google/android/gms/internal/safetynet/zzc;->zza(Landroid/os/Parcel;Landroid/os/IInterface;)V
|
|
||||||
|
|
||||||
const/4 p1, 0x5
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1, v0}, Lcom/google/android/gms/internal/safetynet/zza;->transactAndReadExceptionReturnVoid(ILandroid/os/Parcel;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
.class final Lcom/google/android/gms/internal/safetynet/zzk$zza;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/safetynet/c$d;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x8
|
|
||||||
name = "zza"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private final zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
.field private final zzae:Lcom/google/android/gms/safetynet/zza;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zza;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zza;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
iput-object p2, p0, Lcom/google/android/gms/internal/safetynet/zzk$zza;->zzae:Lcom/google/android/gms/safetynet/zza;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public final getJwsResult()Ljava/lang/String;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zza;->zzae:Lcom/google/android/gms/safetynet/zza;
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
const/4 v0, 0x0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
invoke-virtual {v0}, Lcom/google/android/gms/safetynet/zza;->getJwsResult()Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getStatus()Lcom/google/android/gms/common/api/Status;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zza;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
.class abstract Lcom/google/android/gms/internal/safetynet/zzk$zzb;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzf;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x408
|
|
||||||
name = "zzb"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"Lcom/google/android/gms/internal/safetynet/zzf<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$d;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field protected zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzf;-><init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
new-instance p1, Lcom/google/android/gms/internal/safetynet/zzs;
|
|
||||||
|
|
||||||
invoke-direct {p1, p0}, Lcom/google/android/gms/internal/safetynet/zzs;-><init>(Lcom/google/android/gms/internal/safetynet/zzk$zzb;)V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzb;->zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected synthetic createFailedResult(Lcom/google/android/gms/common/api/Status;)Lcom/google/android/gms/common/api/i;
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzk$zza;
|
|
||||||
|
|
||||||
const/4 v1, 0x0
|
|
||||||
|
|
||||||
invoke-direct {v0, p1, v1}, Lcom/google/android/gms/internal/safetynet/zzk$zza;-><init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zza;)V
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
.class abstract Lcom/google/android/gms/internal/safetynet/zzk$zzc;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzf;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x408
|
|
||||||
name = "zzc"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"Lcom/google/android/gms/internal/safetynet/zzf<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$f;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field protected zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzf;-><init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
new-instance p1, Lcom/google/android/gms/internal/safetynet/zzt;
|
|
||||||
|
|
||||||
invoke-direct {p1, p0}, Lcom/google/android/gms/internal/safetynet/zzt;-><init>(Lcom/google/android/gms/internal/safetynet/zzk$zzc;)V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzc;->zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected synthetic createFailedResult(Lcom/google/android/gms/common/api/Status;)Lcom/google/android/gms/common/api/i;
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzk$zzj;
|
|
||||||
|
|
||||||
const/4 v1, 0x0
|
|
||||||
|
|
||||||
invoke-direct {v0, p1, v1}, Lcom/google/android/gms/internal/safetynet/zzk$zzj;-><init>(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
.class abstract Lcom/google/android/gms/internal/safetynet/zzk$zzd;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzf;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x408
|
|
||||||
name = "zzd"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"Lcom/google/android/gms/internal/safetynet/zzf<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$e;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field protected final zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzf;-><init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
new-instance p1, Lcom/google/android/gms/internal/safetynet/zzu;
|
|
||||||
|
|
||||||
invoke-direct {p1, p0}, Lcom/google/android/gms/internal/safetynet/zzu;-><init>(Lcom/google/android/gms/internal/safetynet/zzk$zzd;)V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzd;->zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected synthetic createFailedResult(Lcom/google/android/gms/common/api/Status;)Lcom/google/android/gms/common/api/i;
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;
|
|
||||||
|
|
||||||
const/4 v1, 0x0
|
|
||||||
|
|
||||||
invoke-direct {v0, p1, v1}, Lcom/google/android/gms/internal/safetynet/zzk$zzg;-><init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzd;)V
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
.class abstract Lcom/google/android/gms/internal/safetynet/zzk$zze;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzf;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x408
|
|
||||||
name = "zze"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"Lcom/google/android/gms/internal/safetynet/zzf<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$b;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field protected zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzf;-><init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
new-instance p1, Lcom/google/android/gms/internal/safetynet/zzv;
|
|
||||||
|
|
||||||
invoke-direct {p1, p0}, Lcom/google/android/gms/internal/safetynet/zzv;-><init>(Lcom/google/android/gms/internal/safetynet/zzk$zze;)V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zze;->zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected synthetic createFailedResult(Lcom/google/android/gms/common/api/Status;)Lcom/google/android/gms/common/api/i;
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzk$zzh;
|
|
||||||
|
|
||||||
const/4 v1, 0x0
|
|
||||||
|
|
||||||
invoke-direct {v0, p1, v1}, Lcom/google/android/gms/internal/safetynet/zzk$zzh;-><init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzf;)V
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
.class abstract Lcom/google/android/gms/internal/safetynet/zzk$zzf;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzf;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x408
|
|
||||||
name = "zzf"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"Lcom/google/android/gms/internal/safetynet/zzf<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$c;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field protected zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzf;-><init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
new-instance p1, Lcom/google/android/gms/internal/safetynet/zzw;
|
|
||||||
|
|
||||||
invoke-direct {p1, p0}, Lcom/google/android/gms/internal/safetynet/zzw;-><init>(Lcom/google/android/gms/internal/safetynet/zzk$zzf;)V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzf;->zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected synthetic createFailedResult(Lcom/google/android/gms/common/api/Status;)Lcom/google/android/gms/common/api/i;
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;
|
|
||||||
|
|
||||||
const/4 v1, 0x0
|
|
||||||
|
|
||||||
invoke-direct {v0, p1, v1}, Lcom/google/android/gms/internal/safetynet/zzk$zzi;-><init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/SafeBrowsingData;)V
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
.class final Lcom/google/android/gms/internal/safetynet/zzk$zzg;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/safetynet/c$e;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x8
|
|
||||||
name = "zzg"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private final zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
.field private final zzal:Lcom/google/android/gms/safetynet/zzd;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzd;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
iput-object p2, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;->zzal:Lcom/google/android/gms/safetynet/zzd;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public final getHarmfulAppsList()Ljava/util/List;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"()",
|
|
||||||
"Ljava/util/List<",
|
|
||||||
"Lcom/google/android/gms/safetynet/HarmfulAppsData;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;->zzal:Lcom/google/android/gms/safetynet/zzd;
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
invoke-static {}, Ljava/util/Collections;->emptyList()Ljava/util/List;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
iget-object v0, v0, Lcom/google/android/gms/safetynet/zzd;->b:[Lcom/google/android/gms/safetynet/HarmfulAppsData;
|
|
||||||
|
|
||||||
invoke-static {v0}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getHoursSinceLastScanWithHarmfulApp()I
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;->zzal:Lcom/google/android/gms/safetynet/zzd;
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
const/4 v0, -0x1
|
|
||||||
|
|
||||||
return v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
iget v0, v0, Lcom/google/android/gms/safetynet/zzd;->c:I
|
|
||||||
|
|
||||||
return v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getLastScanTimeMs()J
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;->zzal:Lcom/google/android/gms/safetynet/zzd;
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
const-wide/16 v0, 0x0
|
|
||||||
|
|
||||||
return-wide v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
iget-wide v0, v0, Lcom/google/android/gms/safetynet/zzd;->a:J
|
|
||||||
|
|
||||||
return-wide v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getStatus()Lcom/google/android/gms/common/api/Status;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzg;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
.class final Lcom/google/android/gms/internal/safetynet/zzk$zzh;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/safetynet/c$b;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x8
|
|
||||||
name = "zzh"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private final zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
.field private final zzam:Lcom/google/android/gms/safetynet/zzf;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/zzf;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzh;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
iput-object p2, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzh;->zzam:Lcom/google/android/gms/safetynet/zzf;
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public final getStatus()Lcom/google/android/gms/common/api/Status;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzh;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getTokenResult()Ljava/lang/String;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzh;->zzam:Lcom/google/android/gms/safetynet/zzf;
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
const/4 v0, 0x0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
invoke-virtual {v0}, Lcom/google/android/gms/safetynet/zzf;->a()Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
.class public final Lcom/google/android/gms/internal/safetynet/zzk$zzi;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/safetynet/c$c;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x9
|
|
||||||
name = "zzi"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
.field private final zzan:Lcom/google/android/gms/safetynet/SafeBrowsingData;
|
|
||||||
|
|
||||||
.field private zzm:Ljava/lang/String;
|
|
||||||
|
|
||||||
.field private zzp:J
|
|
||||||
|
|
||||||
.field private zzq:[B
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/Status;Lcom/google/android/gms/safetynet/SafeBrowsingData;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
iput-object p2, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzan:Lcom/google/android/gms/safetynet/SafeBrowsingData;
|
|
||||||
|
|
||||||
const/4 p1, 0x0
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzm:Ljava/lang/String;
|
|
||||||
|
|
||||||
iget-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzan:Lcom/google/android/gms/safetynet/SafeBrowsingData;
|
|
||||||
|
|
||||||
if-eqz p1, :cond_0
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/safetynet/SafeBrowsingData;->d()Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzm:Ljava/lang/String;
|
|
||||||
|
|
||||||
iget-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzan:Lcom/google/android/gms/safetynet/SafeBrowsingData;
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/safetynet/SafeBrowsingData;->c()J
|
|
||||||
|
|
||||||
move-result-wide p1
|
|
||||||
|
|
||||||
iput-wide p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzp:J
|
|
||||||
|
|
||||||
iget-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzan:Lcom/google/android/gms/safetynet/SafeBrowsingData;
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/safetynet/SafeBrowsingData;->e()[B
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzq:[B
|
|
||||||
|
|
||||||
return-void
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
iget-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/common/api/Status;->f()Z
|
|
||||||
|
|
||||||
move-result p1
|
|
||||||
|
|
||||||
if-eqz p1, :cond_1
|
|
||||||
|
|
||||||
new-instance p1, Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
const/16 p2, 0x8
|
|
||||||
|
|
||||||
invoke-direct {p1, p2}, Lcom/google/android/gms/common/api/Status;-><init>(I)V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
:cond_1
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public final getDetectedThreats()Ljava/util/List;
|
|
||||||
.locals 5
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"()",
|
|
||||||
"Ljava/util/List<",
|
|
||||||
"Lcom/google/android/gms/safetynet/a;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
new-instance v0, Ljava/util/ArrayList;
|
|
||||||
|
|
||||||
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
|
|
||||||
|
|
||||||
iget-object v1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzm:Ljava/lang/String;
|
|
||||||
|
|
||||||
if-nez v1, :cond_0
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
:try_start_0
|
|
||||||
new-instance v2, Lorg/json/JSONObject;
|
|
||||||
|
|
||||||
invoke-direct {v2, v1}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
const-string v1, "matches"
|
|
||||||
|
|
||||||
invoke-virtual {v2, v1}, Lorg/json/JSONObject;->getJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
|
|
||||||
|
|
||||||
move-result-object v1
|
|
||||||
:try_end_0
|
|
||||||
.catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_1
|
|
||||||
|
|
||||||
const/4 v2, 0x0
|
|
||||||
|
|
||||||
:goto_0
|
|
||||||
invoke-virtual {v1}, Lorg/json/JSONArray;->length()I
|
|
||||||
|
|
||||||
move-result v3
|
|
||||||
|
|
||||||
if-ge v2, v3, :cond_1
|
|
||||||
|
|
||||||
:try_start_1
|
|
||||||
invoke-virtual {v1, v2}, Lorg/json/JSONArray;->getJSONObject(I)Lorg/json/JSONObject;
|
|
||||||
|
|
||||||
move-result-object v3
|
|
||||||
|
|
||||||
const-string v4, "threat_type"
|
|
||||||
|
|
||||||
invoke-virtual {v3, v4}, Lorg/json/JSONObject;->getString(Ljava/lang/String;)Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object v3
|
|
||||||
|
|
||||||
invoke-static {v3}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
|
|
||||||
|
|
||||||
move-result v3
|
|
||||||
|
|
||||||
new-instance v4, Lcom/google/android/gms/safetynet/a;
|
|
||||||
|
|
||||||
invoke-direct {v4, v3}, Lcom/google/android/gms/safetynet/a;-><init>(I)V
|
|
||||||
|
|
||||||
invoke-interface {v0, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
|
|
||||||
:try_end_1
|
|
||||||
.catch Lorg/json/JSONException; {:try_start_1 .. :try_end_1} :catch_0
|
|
||||||
.catch Ljava/lang/NumberFormatException; {:try_start_1 .. :try_end_1} :catch_0
|
|
||||||
|
|
||||||
:catch_0
|
|
||||||
add-int/lit8 v2, v2, 0x1
|
|
||||||
|
|
||||||
goto :goto_0
|
|
||||||
|
|
||||||
:catch_1
|
|
||||||
:cond_1
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getLastUpdateTimeMs()J
|
|
||||||
.locals 2
|
|
||||||
|
|
||||||
iget-wide v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzp:J
|
|
||||||
|
|
||||||
return-wide v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getMetadata()Ljava/lang/String;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzm:Ljava/lang/String;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getState()[B
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzq:[B
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final getStatus()Lcom/google/android/gms/common/api/Status;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzi;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
.class final Lcom/google/android/gms/internal/safetynet/zzk$zzj;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/safetynet/c$f;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
|
||||||
value = Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
.annotation system Ldalvik/annotation/InnerClass;
|
|
||||||
accessFlags = 0x8
|
|
||||||
name = "zzj"
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
.field private zzao:Z
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public constructor <init>(Lcom/google/android/gms/common/api/Status;Z)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
iput-object p1, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzj;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
iput-boolean p2, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzj;->zzao:Z
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public final getStatus()Lcom/google/android/gms/common/api/Status;
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzj;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
return-object v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public final isVerifyAppsEnabled()Z
|
|
||||||
.locals 1
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzj;->zzad:Lcom/google/android/gms/common/api/Status;
|
|
||||||
|
|
||||||
if-eqz v0, :cond_0
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Lcom/google/android/gms/common/api/Status;->f()Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
if-eqz v0, :cond_0
|
|
||||||
|
|
||||||
iget-boolean v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzj;->zzao:Z
|
|
||||||
|
|
||||||
return v0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
const/4 v0, 0x0
|
|
||||||
|
|
||||||
return v0
|
|
||||||
.end method
|
|
||||||
@@ -1,444 +0,0 @@
|
|||||||
.class public Lcom/google/android/gms/internal/safetynet/zzk;
|
|
||||||
.super Ljava/lang/Object;
|
|
||||||
|
|
||||||
# interfaces
|
|
||||||
.implements Lcom/google/android/gms/safetynet/c;
|
|
||||||
|
|
||||||
|
|
||||||
# annotations
|
|
||||||
.annotation system Ldalvik/annotation/MemberClasses;
|
|
||||||
value = {
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzh;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zze;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzd;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzg;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzc;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzj;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzi;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzf;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zza;,
|
|
||||||
Lcom/google/android/gms/internal/safetynet/zzk$zzb;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
|
|
||||||
# static fields
|
|
||||||
.field private static final TAG:Ljava/lang/String; = "zzk"
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method static constructor <clinit>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public constructor <init>()V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public static varargs zza(Lcom/google/android/gms/common/api/d;Ljava/lang/String;ILjava/lang/String;[I)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 7
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
"I",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
"[I)",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$c;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
array-length v0, p4
|
|
||||||
|
|
||||||
if-eqz v0, :cond_1
|
|
||||||
|
|
||||||
invoke-static {p1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzn;
|
|
||||||
|
|
||||||
move-object v1, v0
|
|
||||||
|
|
||||||
move-object v2, p0
|
|
||||||
|
|
||||||
move-object v3, p4
|
|
||||||
|
|
||||||
move v4, p2
|
|
||||||
|
|
||||||
move-object v5, p1
|
|
||||||
|
|
||||||
move-object v6, p3
|
|
||||||
|
|
||||||
invoke-direct/range {v1 .. v6}, Lcom/google/android/gms/internal/safetynet/zzn;-><init>(Lcom/google/android/gms/common/api/d;[IILjava/lang/String;Ljava/lang/String;)V
|
|
||||||
|
|
||||||
invoke-virtual {p0, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p0
|
|
||||||
|
|
||||||
return-object p0
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
new-instance p0, Ljava/lang/IllegalArgumentException;
|
|
||||||
|
|
||||||
const-string p1, "Null or empty uri in lookupUri"
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
throw p0
|
|
||||||
|
|
||||||
:cond_1
|
|
||||||
new-instance p0, Ljava/lang/IllegalArgumentException;
|
|
||||||
|
|
||||||
const-string p1, "Null threatTypes in lookupUri"
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
throw p0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public static zza(Lcom/google/android/gms/common/api/d;[BLjava/lang/String;)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
"[B",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
")",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$d;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzl;
|
|
||||||
|
|
||||||
invoke-direct {v0, p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzl;-><init>(Lcom/google/android/gms/common/api/d;[BLjava/lang/String;)V
|
|
||||||
|
|
||||||
invoke-virtual {p0, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p0
|
|
||||||
|
|
||||||
return-object p0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method public attest(Lcom/google/android/gms/common/api/d;[B)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
"[B)",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$d;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
const/4 v0, 0x0
|
|
||||||
|
|
||||||
invoke-static {p1, p2, v0}, Lcom/google/android/gms/internal/safetynet/zzk;->zza(Lcom/google/android/gms/common/api/d;[BLjava/lang/String;)Lcom/google/android/gms/common/api/e;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public enableVerifyApps(Lcom/google/android/gms/common/api/d;)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
")",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$f;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzp;
|
|
||||||
|
|
||||||
invoke-direct {v0, p0, p1}, Lcom/google/android/gms/internal/safetynet/zzp;-><init>(Lcom/google/android/gms/internal/safetynet/zzk;Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public isVerifyAppsEnabled(Lcom/google/android/gms/common/api/d;)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
")",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$f;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzo;
|
|
||||||
|
|
||||||
invoke-direct {v0, p0, p1}, Lcom/google/android/gms/internal/safetynet/zzo;-><init>(Lcom/google/android/gms/internal/safetynet/zzk;Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public isVerifyAppsEnabled(Landroid/content/Context;)Z
|
|
||||||
.locals 5
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/common/api/d$a;
|
|
||||||
|
|
||||||
invoke-direct {v0, p1}, Lcom/google/android/gms/common/api/d$a;-><init>(Landroid/content/Context;)V
|
|
||||||
|
|
||||||
sget-object p1, Lcom/google/android/gms/safetynet/b;->c:Lcom/google/android/gms/common/api/a;
|
|
||||||
|
|
||||||
invoke-virtual {v0, p1}, Lcom/google/android/gms/common/api/d$a;->a(Lcom/google/android/gms/common/api/a;)Lcom/google/android/gms/common/api/d$a;
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Lcom/google/android/gms/common/api/d$a;->a()Lcom/google/android/gms/common/api/d;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
:try_start_0
|
|
||||||
sget-object v0, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
|
|
||||||
|
|
||||||
const-wide/16 v1, 0x3
|
|
||||||
|
|
||||||
invoke-virtual {p1, v1, v2, v0}, Lcom/google/android/gms/common/api/d;->a(JLjava/util/concurrent/TimeUnit;)Lcom/google/android/gms/common/ConnectionResult;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
invoke-virtual {v0}, Lcom/google/android/gms/common/ConnectionResult;->e()Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
const/4 v3, 0x0
|
|
||||||
|
|
||||||
if-eqz v0, :cond_2
|
|
||||||
|
|
||||||
invoke-virtual {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzk;->isVerifyAppsEnabled(Lcom/google/android/gms/common/api/d;)Lcom/google/android/gms/common/api/e;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
sget-object v4, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
|
|
||||||
|
|
||||||
invoke-virtual {v0, v1, v2, v4}, Lcom/google/android/gms/common/api/e;->await(JLjava/util/concurrent/TimeUnit;)Lcom/google/android/gms/common/api/i;
|
|
||||||
|
|
||||||
move-result-object v0
|
|
||||||
|
|
||||||
check-cast v0, Lcom/google/android/gms/safetynet/c$f;
|
|
||||||
|
|
||||||
if-eqz v0, :cond_0
|
|
||||||
|
|
||||||
invoke-interface {v0}, Lcom/google/android/gms/safetynet/c$f;->isVerifyAppsEnabled()Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
:try_end_0
|
|
||||||
.catchall {:try_start_0 .. :try_end_0} :catchall_0
|
|
||||||
|
|
||||||
if-eqz v0, :cond_0
|
|
||||||
|
|
||||||
const/4 v3, 0x1
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
if-eqz p1, :cond_1
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/common/api/d;->d()V
|
|
||||||
|
|
||||||
:cond_1
|
|
||||||
return v3
|
|
||||||
|
|
||||||
:cond_2
|
|
||||||
if-eqz p1, :cond_3
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/common/api/d;->d()V
|
|
||||||
|
|
||||||
:cond_3
|
|
||||||
return v3
|
|
||||||
|
|
||||||
:catchall_0
|
|
||||||
move-exception v0
|
|
||||||
|
|
||||||
if-eqz p1, :cond_4
|
|
||||||
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/common/api/d;->d()V
|
|
||||||
|
|
||||||
:cond_4
|
|
||||||
throw v0
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public listHarmfulApps(Lcom/google/android/gms/common/api/d;)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
")",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$e;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzq;
|
|
||||||
|
|
||||||
invoke-direct {v0, p0, p1}, Lcom/google/android/gms/internal/safetynet/zzq;-><init>(Lcom/google/android/gms/internal/safetynet/zzk;Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public varargs lookupUri(Lcom/google/android/gms/common/api/d;Ljava/lang/String;Ljava/lang/String;[I)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
"[I)",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$c;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
const/4 v0, 0x1
|
|
||||||
|
|
||||||
invoke-static {p1, p2, v0, p3, p4}, Lcom/google/android/gms/internal/safetynet/zzk;->zza(Lcom/google/android/gms/common/api/d;Ljava/lang/String;ILjava/lang/String;[I)Lcom/google/android/gms/common/api/e;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public lookupUri(Lcom/google/android/gms/common/api/d;Ljava/util/List;Ljava/lang/String;)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 7
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
"Ljava/util/List<",
|
|
||||||
"Ljava/lang/Integer;",
|
|
||||||
">;",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
")",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$c;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
if-eqz p2, :cond_1
|
|
||||||
|
|
||||||
invoke-static {p3}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzm;
|
|
||||||
|
|
||||||
const/4 v6, 0x0
|
|
||||||
|
|
||||||
move-object v1, v0
|
|
||||||
|
|
||||||
move-object v2, p0
|
|
||||||
|
|
||||||
move-object v3, p1
|
|
||||||
|
|
||||||
move-object v4, p2
|
|
||||||
|
|
||||||
move-object v5, p3
|
|
||||||
|
|
||||||
invoke-direct/range {v1 .. v6}, Lcom/google/android/gms/internal/safetynet/zzm;-><init>(Lcom/google/android/gms/internal/safetynet/zzk;Lcom/google/android/gms/common/api/d;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V
|
|
||||||
|
|
||||||
invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
new-instance p1, Ljava/lang/IllegalArgumentException;
|
|
||||||
|
|
||||||
const-string p2, "Null or empty uri in lookupUri"
|
|
||||||
|
|
||||||
invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
|
|
||||||
:cond_1
|
|
||||||
new-instance p1, Ljava/lang/IllegalArgumentException;
|
|
||||||
|
|
||||||
const-string p2, "Null threatTypes in lookupUri"
|
|
||||||
|
|
||||||
invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
|
|
||||||
.method public verifyWithRecaptcha(Lcom/google/android/gms/common/api/d;Ljava/lang/String;)Lcom/google/android/gms/common/api/e;
|
|
||||||
.locals 1
|
|
||||||
.annotation system Ldalvik/annotation/Signature;
|
|
||||||
value = {
|
|
||||||
"(",
|
|
||||||
"Lcom/google/android/gms/common/api/d;",
|
|
||||||
"Ljava/lang/String;",
|
|
||||||
")",
|
|
||||||
"Lcom/google/android/gms/common/api/e<",
|
|
||||||
"Lcom/google/android/gms/safetynet/c$b;",
|
|
||||||
">;"
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
invoke-static {p2}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
|
|
||||||
|
|
||||||
move-result v0
|
|
||||||
|
|
||||||
if-nez v0, :cond_0
|
|
||||||
|
|
||||||
new-instance v0, Lcom/google/android/gms/internal/safetynet/zzr;
|
|
||||||
|
|
||||||
invoke-direct {v0, p0, p1, p2}, Lcom/google/android/gms/internal/safetynet/zzr;-><init>(Lcom/google/android/gms/internal/safetynet/zzk;Lcom/google/android/gms/common/api/d;Ljava/lang/String;)V
|
|
||||||
|
|
||||||
invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/d;->a(Lcom/google/android/gms/common/api/internal/c;)Lcom/google/android/gms/common/api/internal/c;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
return-object p1
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
new-instance p1, Ljava/lang/IllegalArgumentException;
|
|
||||||
|
|
||||||
const-string p2, "Null or empty site key in verifyWithRecaptcha"
|
|
||||||
|
|
||||||
invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
|
|
||||||
|
|
||||||
throw p1
|
|
||||||
.end method
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
.class final Lcom/google/android/gms/internal/safetynet/zzl;
|
|
||||||
.super Lcom/google/android/gms/internal/safetynet/zzk$zzb;
|
|
||||||
|
|
||||||
|
|
||||||
# instance fields
|
|
||||||
.field private final synthetic zzw:[B
|
|
||||||
|
|
||||||
.field private final synthetic zzx:Ljava/lang/String;
|
|
||||||
|
|
||||||
|
|
||||||
# direct methods
|
|
||||||
.method constructor <init>(Lcom/google/android/gms/common/api/d;[BLjava/lang/String;)V
|
|
||||||
.locals 0
|
|
||||||
|
|
||||||
iput-object p2, p0, Lcom/google/android/gms/internal/safetynet/zzl;->zzw:[B
|
|
||||||
|
|
||||||
iput-object p3, p0, Lcom/google/android/gms/internal/safetynet/zzl;->zzx:Ljava/lang/String;
|
|
||||||
|
|
||||||
invoke-direct {p0, p1}, Lcom/google/android/gms/internal/safetynet/zzk$zzb;-><init>(Lcom/google/android/gms/common/api/d;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
|
|
||||||
|
|
||||||
# virtual methods
|
|
||||||
.method protected final synthetic doExecute(Lcom/google/android/gms/common/api/a$b;)V
|
|
||||||
.locals 4
|
|
||||||
.annotation system Ldalvik/annotation/Throws;
|
|
||||||
value = {
|
|
||||||
Landroid/os/RemoteException;
|
|
||||||
}
|
|
||||||
.end annotation
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/internal/safetynet/zzx;
|
|
||||||
|
|
||||||
iget-object v0, p0, Lcom/google/android/gms/internal/safetynet/zzk$zzb;->zzaf:Lcom/google/android/gms/internal/safetynet/zzg;
|
|
||||||
|
|
||||||
iget-object v1, p0, Lcom/google/android/gms/internal/safetynet/zzl;->zzw:[B
|
|
||||||
|
|
||||||
iget-object v2, p0, Lcom/google/android/gms/internal/safetynet/zzl;->zzx:Ljava/lang/String;
|
|
||||||
|
|
||||||
invoke-static {v2}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
|
|
||||||
|
|
||||||
move-result v3
|
|
||||||
|
|
||||||
if-eqz v3, :cond_0
|
|
||||||
|
|
||||||
const-string v2, "com.google.android.safetynet.ATTEST_API_KEY"
|
|
||||||
|
|
||||||
invoke-virtual {p1, v2}, Lcom/google/android/gms/internal/safetynet/zzx;->zzb(Ljava/lang/String;)Ljava/lang/String;
|
|
||||||
|
|
||||||
move-result-object v2
|
|
||||||
|
|
||||||
:cond_0
|
|
||||||
invoke-virtual {p1}, Lcom/google/android/gms/common/internal/d;->getService()Landroid/os/IInterface;
|
|
||||||
|
|
||||||
move-result-object p1
|
|
||||||
|
|
||||||
check-cast p1, Lcom/google/android/gms/internal/safetynet/zzi;
|
|
||||||
|
|
||||||
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/gms/internal/safetynet/zzi;->zza(Lcom/google/android/gms/internal/safetynet/zzg;[BLjava/lang/String;)V
|
|
||||||
|
|
||||||
return-void
|
|
||||||
.end method
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user