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;