summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuK1337 <priv.luk@gmail.com>2021-09-14 16:10:13 +0200
committerSemavi Ulusoy <doc.divxm@gmail.com>2022-02-02 23:55:33 +0300
commit723f2e4461c9d0d358c03896936f0690fd53348b (patch)
treec0381d21365fe033343f1e6188623abd19b349e9
parente4a0435d3809bf06f3729d717efb23b883f7bea4 (diff)
Add dirac_gef implementation and enable it for audioSession=0 on boot
This basically mimics what OnePlus does on Android 11, it also serves as a base for possible full "Audio Tuner" reimplementation. Init parameters hex streams dumped with the following Xposed module: https://github.com/luk1337/AudioEffectsHook. Fixes: https://gitlab.com/LineageOS/issues/android/-/issues/3948 Change-Id: I7476345145b43fafcbd7f14bd33db1c199c6025f
-rw-r--r--dirac_gef/Android.bp13
-rw-r--r--dirac_gef/AndroidManifest.xml23
-rw-r--r--dirac_gef/assets/dirac_gef_init.txt41
-rw-r--r--dirac_gef/proguard.flags3
-rw-r--r--dirac_gef/src/org/lineageos/dirac/gef/BootCompletedReceiver.kt50
5 files changed, 130 insertions, 0 deletions
diff --git a/dirac_gef/Android.bp b/dirac_gef/Android.bp
new file mode 100644
index 0000000..6c92b76
--- /dev/null
+++ b/dirac_gef/Android.bp
@@ -0,0 +1,13 @@
+android_app {
+ name: "OnePlusDiracGef",
+
+ asset_dirs: ["assets"],
+ srcs: ["src/**/*.kt"],
+
+ certificate: "platform",
+ platform_apis: true,
+
+ optimize: {
+ proguard_flags_files: ["proguard.flags"],
+ },
+}
diff --git a/dirac_gef/AndroidManifest.xml b/dirac_gef/AndroidManifest.xml
new file mode 100644
index 0000000..bad9639
--- /dev/null
+++ b/dirac_gef/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.lineageos.dirac.gef"
+ android:versionCode="1"
+ android:versionName="1.0"
+ android:sharedUserId="android.uid.system">
+
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+
+ <application
+ android:label="OnePlusDiracGef"
+ android:persistent="true"
+ android:defaultToDeviceProtectedStorage="true"
+ android:directBootAware="true">
+
+ <receiver android:name="org.lineageos.dirac.gef.BootCompletedReceiver">
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </receiver>
+ </application>
+</manifest>
diff --git a/dirac_gef/assets/dirac_gef_init.txt b/dirac_gef/assets/dirac_gef_init.txt
new file mode 100644
index 0000000..200e2be
--- /dev/null
+++ b/dirac_gef/assets/dirac_gef_init.txt
@@ -0,0 +1,41 @@
+47000100|0800
+49000100|0800
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438e7da044001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438b5da044001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438e7da044001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438b5da044001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a2043880da044000
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a2043880da044001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388080054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388180054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388280054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388380054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388480054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388580054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388680054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388780054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388880054001
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388980054001
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204380042c801002d011000400100080000000000000000000000002d011001400100080000000000000000000000002d011002400100080000000000000000000000002d011003400100080000000000000000000000002d011004400100080000000000000000000000002d011005400100080000000000000000000000002d011006400100080000000000000000000000002d011007400100080000000000000000000000002d011008400100080000000000000000000000002d01100940010008000000000000000000000048c801
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388080054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388180054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388280054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388380054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388480054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388580054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388680054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388780054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388880054001
+46000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204388980054001
+45000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a204380042c801012d011000400100080000000000000000000000012d011001400100080000000000000000000000012d011002400100080000000000000000000000012d011003400100080000000000000000000000012d011004400100080000000000000000000000012d011005400100080000000000000000000000012d011006400100080000000000000000000000012d011007400100080000000000000000000000012d011008400100080000000000000000000000012d01100940010008000000000000000000000048c801
+44000100|0800
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a2043880da044000
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a2043881da044204010000004804
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438e7da044204000000004804
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438b5da044204000000004804
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438b6da04421c00000000000000000000000000000000000000000000000000000000481c
+46000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a2043880da044000
+45000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a2043881da044204000000004804
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438004214002d0110004001000800000003000000000000004814
+45000100|0881da8480011081da848001180a28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438004214012d0110014001000800000004000000000000004814
+45000100|0880da8480011080da848001180f28c4d8022880f7022880ee052880dc0b30b0a20430b4a20430b5a20438004214002d0110004001000800000003000000000000004814
diff --git a/dirac_gef/proguard.flags b/dirac_gef/proguard.flags
new file mode 100644
index 0000000..7a611a3
--- /dev/null
+++ b/dirac_gef/proguard.flags
@@ -0,0 +1,3 @@
+-keep class org.lineageos.dirac.gef.* {
+ *;
+}
diff --git a/dirac_gef/src/org/lineageos/dirac/gef/BootCompletedReceiver.kt b/dirac_gef/src/org/lineageos/dirac/gef/BootCompletedReceiver.kt
new file mode 100644
index 0000000..5fb6fce
--- /dev/null
+++ b/dirac_gef/src/org/lineageos/dirac/gef/BootCompletedReceiver.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.lineageos.dirac.gef
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.media.audiofx.AudioEffect
+import android.util.Log
+import com.android.internal.util.HexDump
+
+import java.util.UUID
+
+class BootCompletedReceiver : BroadcastReceiver() {
+ private val audioEffect = AudioEffect(
+ AudioEffect.EFFECT_TYPE_NULL, EFFECT_TYPE_DIRAC_GEF, 0, 0
+ )
+
+ override fun onReceive(context: Context, intent: Intent) {
+ Log.d(TAG, "Starting")
+ context.assets.open("dirac_gef_init.txt").reader().forEachLine {
+ val (param, value) = it.split("|")
+ audioEffect.setParameter(
+ HexDump.hexStringToByteArray(param),
+ HexDump.hexStringToByteArray(value)
+ )
+ }
+ audioEffect.enabled = true
+ }
+
+ companion object {
+ private const val TAG = "OnePlusDiracGef"
+
+ private val EFFECT_TYPE_DIRAC_GEF = UUID.fromString("3799d6d1-22c5-43c3-b3ec-d664cf8d2f0d")
+ }
+}