From 993a1a7f86e6e797eb3488d896fbb8c132fc81a7 Mon Sep 17 00:00:00 2001
From: gdlbo <41114720+gdlbo@users.noreply.github.com>
Date: Tue, 10 May 2022 20:18:59 +0300
Subject: [PATCH] Custom opus lib bridges
---
.../{badmanners => deviceinfo}/Device.java | 2 +-
.../DeviceInfoCollector.java | 2 +-
.../ru/vtosters/lite/f0x1d/Crashreporter.java | 2 +-
.../java/ru/vtosters/lite/utils/Globals.java | 4 +-
.../ru/vtosters/lite/utils/OpusLoader.java | 62 +++++++++++++++++++
.../ru/vtosters/lite/utils/Preferences.java | 6 ++
smali/res/xml/preferences_debug.xml | 4 ++
.../com/vk/audio/AudioMessageUtils$2.smali | 2 +-
.../com/vk/audio/AudioMessageUtils$b$1.smali | 2 +-
.../com/vk/audio/AudioMessageUtils$c.smali | 8 ++-
10 files changed, 84 insertions(+), 10 deletions(-)
rename app/src/main/java/ru/vtosters/lite/{badmanners => deviceinfo}/Device.java (98%)
rename app/src/main/java/ru/vtosters/lite/{badmanners => deviceinfo}/DeviceInfoCollector.java (99%)
create mode 100644 app/src/main/java/ru/vtosters/lite/utils/OpusLoader.java
diff --git a/app/src/main/java/ru/vtosters/lite/badmanners/Device.java b/app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java
similarity index 98%
rename from app/src/main/java/ru/vtosters/lite/badmanners/Device.java
rename to app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java
index 05e2d2157..b6014d3ea 100644
--- a/app/src/main/java/ru/vtosters/lite/badmanners/Device.java
+++ b/app/src/main/java/ru/vtosters/lite/deviceinfo/Device.java
@@ -1,4 +1,4 @@
-package ru.vtosters.lite.badmanners;
+package ru.vtosters.lite.deviceinfo;
public class Device {
private String androidId;
diff --git a/app/src/main/java/ru/vtosters/lite/badmanners/DeviceInfoCollector.java b/app/src/main/java/ru/vtosters/lite/deviceinfo/DeviceInfoCollector.java
similarity index 99%
rename from app/src/main/java/ru/vtosters/lite/badmanners/DeviceInfoCollector.java
rename to app/src/main/java/ru/vtosters/lite/deviceinfo/DeviceInfoCollector.java
index 72c40a519..eb1097b8a 100644
--- a/app/src/main/java/ru/vtosters/lite/badmanners/DeviceInfoCollector.java
+++ b/app/src/main/java/ru/vtosters/lite/deviceinfo/DeviceInfoCollector.java
@@ -1,4 +1,4 @@
-package ru.vtosters.lite.badmanners;
+package ru.vtosters.lite.deviceinfo;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
diff --git a/app/src/main/java/ru/vtosters/lite/f0x1d/Crashreporter.java b/app/src/main/java/ru/vtosters/lite/f0x1d/Crashreporter.java
index 09f968ce2..913d12e2d 100644
--- a/app/src/main/java/ru/vtosters/lite/f0x1d/Crashreporter.java
+++ b/app/src/main/java/ru/vtosters/lite/f0x1d/Crashreporter.java
@@ -19,7 +19,7 @@ import com.vtosters.lite.R;
import java.io.PrintWriter;
import java.io.StringWriter;
-import ru.vtosters.lite.badmanners.DeviceInfoCollector;
+import ru.vtosters.lite.deviceinfo.DeviceInfoCollector;
public class Crashreporter {
protected static String logString;
diff --git a/app/src/main/java/ru/vtosters/lite/utils/Globals.java b/app/src/main/java/ru/vtosters/lite/utils/Globals.java
index b5cada71b..56f33658e 100644
--- a/app/src/main/java/ru/vtosters/lite/utils/Globals.java
+++ b/app/src/main/java/ru/vtosters/lite/utils/Globals.java
@@ -16,10 +16,10 @@ import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.widget.Toast;
import androidx.annotation.NonNull;
-import com.vk.core.util.ToastUtils;
import com.vtosters.lite.UserProfile;
import com.vtosters.lite.VKActivity;
import com.vtosters.lite.api.ExtendedUserProfile;
@@ -144,7 +144,7 @@ public class Globals {
}
public static void sendToast(String text) {
- ToastUtils.a(text);
+ Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
}
public static boolean isEmpty(String str) {
diff --git a/app/src/main/java/ru/vtosters/lite/utils/OpusLoader.java b/app/src/main/java/ru/vtosters/lite/utils/OpusLoader.java
new file mode 100644
index 000000000..faecc0a0d
--- /dev/null
+++ b/app/src/main/java/ru/vtosters/lite/utils/OpusLoader.java
@@ -0,0 +1,62 @@
+package ru.vtosters.lite.utils;
+
+import static ru.vtosters.lite.utils.Preferences.dev;
+import static ru.vtosters.lite.utils.Preferences.opusmodule;
+
+import android.util.Log;
+
+import com.vk.medianative.MediaNative;
+
+import java.nio.ByteBuffer;
+
+public class OpusLoader {
+ private static long timetracker;
+ private static boolean inited;
+
+ public static void LoadLibrary(String libname){
+ try {
+ System.loadLibrary(libname);
+ inited = true;
+ } catch (UnsatisfiedLinkError unused2) {
+ if(dev()) Log.d("VTLite", "Failed to load " + libname);
+ inited = false;
+ }
+ }
+
+ public static long getLength() {
+ if (isReadyToUse()) {
+ long length = System.currentTimeMillis() - timetracker;
+ timetracker = System.currentTimeMillis();
+ return length;
+ }
+ return 0L;
+ }
+
+ public static int AudioStartRecordBridge(String str) {
+ if (isReadyToUse()) {
+ // Init custom AudioStartRecord
+ timetracker = System.currentTimeMillis();
+ return 1;
+ }
+ return MediaNative.nativeAudioStartRecord(str);
+ }
+
+ public static int AudioWriteFrameBridge(ByteBuffer buffer, int length) {
+ if (isReadyToUse()) {
+ // Init custom AudioWriteFrame
+ }
+ return MediaNative.nativeAudioWriteFrame(buffer, length);
+ }
+
+ public static void AudioStopRecordBridge() {
+ if (isReadyToUse()) {
+ // Init custom AudioStopRecord
+ } else {
+ MediaNative.nativeAudioStopRecord();
+ }
+ }
+
+ private static boolean isReadyToUse() {
+ return opusmodule() && inited;
+ }
+}
diff --git a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java
index 0adb31ec6..8a20893bb 100644
--- a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java
+++ b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java
@@ -7,6 +7,7 @@ import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getPreferences;
import static ru.vtosters.lite.utils.Globals.registerActivities;
import static ru.vtosters.lite.utils.Newsfeed.setupFilters;
+import static ru.vtosters.lite.utils.OpusLoader.LoadLibrary;
import static ru.vtosters.lite.utils.Proxy.setProxy;
import android.app.Application;
@@ -30,6 +31,7 @@ public class Preferences {
migrate();
reloadMessagesList();
registerActivities(application);
+ LoadLibrary("vkopustest");
}
public static boolean BooleanFalse(String key) {
@@ -42,6 +44,10 @@ public class Preferences {
return prefs.getBoolean(key, true);
}
+ public static boolean opusmodule() {
+ return BooleanTrue("opusmodule");
+ }
+
public static boolean authorsrecomm() {
return BooleanTrue("authorsrecomm");
}
diff --git a/smali/res/xml/preferences_debug.xml b/smali/res/xml/preferences_debug.xml
index 72dd06998..65f8ef069 100644
--- a/smali/res/xml/preferences_debug.xml
+++ b/smali/res/xml/preferences_debug.xml
@@ -46,6 +46,10 @@
android:defaultValue="false"
android:key="msgflat"
android:title="@string/vtlmsgflat" />
+
nativeAudioStopRecord()V
+ invoke-static {}, Lru/vtosters/lite/utils/OpusLoader;->AudioStopRecordBridge()V
return-void
.end method
diff --git a/smali/smali_classes5/com/vk/audio/AudioMessageUtils$b$1.smali b/smali/smali_classes5/com/vk/audio/AudioMessageUtils$b$1.smali
index d54098d7f..5c39ef90c 100644
--- a/smali/smali_classes5/com/vk/audio/AudioMessageUtils$b$1.smali
+++ b/smali/smali_classes5/com/vk/audio/AudioMessageUtils$b$1.smali
@@ -198,7 +198,7 @@
move-result v3
:goto_2
- invoke-static {v1, v3}, Lcom/vk/medianative/MediaNative;->nativeAudioWriteFrame(Ljava/nio/ByteBuffer;I)I
+ invoke-static {v1, v3}, Lru/vtosters/lite/utils/OpusLoader;->AudioWriteFrameBridge(Ljava/nio/ByteBuffer;I)I
move-result v1
diff --git a/smali/smali_classes5/com/vk/audio/AudioMessageUtils$c.smali b/smali/smali_classes5/com/vk/audio/AudioMessageUtils$c.smali
index 2abf35dbf..f964a34b1 100644
--- a/smali/smali_classes5/com/vk/audio/AudioMessageUtils$c.smali
+++ b/smali/smali_classes5/com/vk/audio/AudioMessageUtils$c.smali
@@ -116,7 +116,7 @@
move-result-object v3
- invoke-static {v3}, Lcom/vk/medianative/MediaNative;->nativeAudioStartRecord(Ljava/lang/String;)I
+ invoke-static {v3}, Lru/vtosters/lite/utils/OpusLoader;->AudioStartRecordBridge(Ljava/lang/String;)I
move-result v3
@@ -207,7 +207,9 @@
.line 360
iget-object v3, p0, Lcom/vk/audio/AudioMessageUtils$c;->a:Lcom/vk/audio/AudioMessageUtils;
- const-wide/16 v4, 0x0
+ invoke-static {}, Lru/vtosters/lite/utils/OpusLoader;->getLength()J
+
+ move-result-wide v4
invoke-static {v3, v4, v5}, Lcom/vk/audio/AudioMessageUtils;->a(Lcom/vk/audio/AudioMessageUtils;J)J
@@ -324,7 +326,7 @@
invoke-interface {v3, v4}, Lcom/vk/audio/AudioRecordObserver;->a(Ljava/lang/String;)V
.line 373
- invoke-static {}, Lcom/vk/medianative/MediaNative;->nativeAudioStopRecord()V
+ invoke-static {}, Lru/vtosters/lite/utils/OpusLoader;->AudioStopRecordBridge()V
.line 374
iget-object v3, p0, Lcom/vk/audio/AudioMessageUtils$c;->a:Lcom/vk/audio/AudioMessageUtils;