diff options
| author | LuK1337 <priv.luk@gmail.com> | 2021-09-14 16:10:13 +0200 |
|---|---|---|
| committer | Semavi Ulusoy <doc.divxm@gmail.com> | 2022-02-02 23:55:33 +0300 |
| commit | 723f2e4461c9d0d358c03896936f0690fd53348b (patch) | |
| tree | c0381d21365fe033343f1e6188623abd19b349e9 | |
| parent | e4a0435d3809bf06f3729d717efb23b883f7bea4 (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.bp | 13 | ||||
| -rw-r--r-- | dirac_gef/AndroidManifest.xml | 23 | ||||
| -rw-r--r-- | dirac_gef/assets/dirac_gef_init.txt | 41 | ||||
| -rw-r--r-- | dirac_gef/proguard.flags | 3 | ||||
| -rw-r--r-- | dirac_gef/src/org/lineageos/dirac/gef/BootCompletedReceiver.kt | 50 |
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") + } +} |
