diff --git a/DSPVolumeSynchronizer/Android.bp b/DSPVolumeSynchronizer/Android.bp new file mode 100644 index 0000000..facae14 --- /dev/null +++ b/DSPVolumeSynchronizer/Android.bp @@ -0,0 +1,39 @@ +// +// Copyright (C) 2024-2025 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +android_app { + name: "DSPVolumeSynchronizer", + certificate: "platform", + srcs: ["src/**/*.java"], + platform_apis: true, + privileged: true, + system_ext_specific: true, + static_libs: [ + "androidx.core_core", + "SettingsLib", + ], + + required: [ + "privapp-permissions-dspvolume", + "config-dspvolume", + ], +} + +prebuilt_etc { + name: "privapp-permissions-dspvolume", + relative_install_path: "permissions", + src: "privapp-permissions-dspvolume.xml", + system_ext_specific: true, + filename_from_src: true, +} + +prebuilt_etc { + name: "config-dspvolume", + relative_install_path: "sysconfig", + src: "config-dspvolume.xml", + system_ext_specific: true, + filename_from_src: true, +} diff --git a/DSPVolumeSynchronizer/AndroidManifest.xml b/DSPVolumeSynchronizer/AndroidManifest.xml new file mode 100644 index 0000000..38e3f03 --- /dev/null +++ b/DSPVolumeSynchronizer/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + diff --git a/DSPVolumeSynchronizer/config-dspvolume.xml b/DSPVolumeSynchronizer/config-dspvolume.xml new file mode 100644 index 0000000..b67b705 --- /dev/null +++ b/DSPVolumeSynchronizer/config-dspvolume.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/DSPVolumeSynchronizer/privapp-permissions-dspvolume.xml b/DSPVolumeSynchronizer/privapp-permissions-dspvolume.xml new file mode 100644 index 0000000..4e837bf --- /dev/null +++ b/DSPVolumeSynchronizer/privapp-permissions-dspvolume.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/DSPVolumeSynchronizer/res/values/strings.xml b/DSPVolumeSynchronizer/res/values/strings.xml new file mode 100644 index 0000000..af528cd --- /dev/null +++ b/DSPVolumeSynchronizer/res/values/strings.xml @@ -0,0 +1,5 @@ + + + + DSP Volume Synchronizer + diff --git a/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/BootReceiver.java b/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/BootReceiver.java new file mode 100644 index 0000000..589d3ed --- /dev/null +++ b/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/BootReceiver.java @@ -0,0 +1,16 @@ +package org.lineageos.dspvolume.xiaomi; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + + +public class BootReceiver extends BroadcastReceiver { + @Override + public void onReceive(final Context context, Intent intent) { + if (context == null) { + return; + } + context.startService(new Intent(context, VolumeListenerService.class)); + } +} diff --git a/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/VolumeListenerReceiver.java b/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/VolumeListenerReceiver.java new file mode 100644 index 0000000..e21a3ab --- /dev/null +++ b/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/VolumeListenerReceiver.java @@ -0,0 +1,28 @@ +package org.lineageos.dspvolume.xiaomi; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.media.AudioManager; +import android.util.Log; + +import android.os.Bundle; + +public class VolumeListenerReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if (context == null) { + return; + } + + if(intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_TYPE", 0) == AudioManager.STREAM_MUSIC) { + AudioManager audioManager = context.getSystemService(AudioManager.class); + int current = intent.getIntExtra( + "android.media.EXTRA_VOLUME_STREAM_VALUE", + 0 + ); + audioManager.setParameters("volume_change=" + current + ";flags=8"); + } + } +} diff --git a/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/VolumeListenerService.java b/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/VolumeListenerService.java new file mode 100644 index 0000000..c7a237a --- /dev/null +++ b/DSPVolumeSynchronizer/src/org/lineageos/dspvolume/xiaomi/VolumeListenerService.java @@ -0,0 +1,30 @@ +package org.lineageos.dspvolume.xiaomi; + +import android.app.Service; +import android.content.Intent; +import android.content.IntentFilter; +import android.media.AudioManager; +import android.os.IBinder; + +import androidx.annotation.Nullable; + +public class VolumeListenerService extends Service { + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction("android.media.VOLUME_CHANGED_ACTION"); + registerReceiver(new VolumeListenerReceiver(), intentFilter); + + AudioManager audioManager = getSystemService(AudioManager.class); + int current = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + audioManager.setParameters("volume_change=" + current + ";flags=8"); + + return super.onStartCommand(intent, flags, startId); + } +} diff --git a/dolby.mk b/dolby.mk index 98db4d1..8d1c4bd 100644 --- a/dolby.mk +++ b/dolby.mk @@ -85,6 +85,10 @@ PRODUCT_VENDOR_PROPERTIES += \ PRODUCT_PACKAGES += \ RemovePackagesDolby +# DSP Volume Synchronizer +PRODUCT_PACKAGES += \ + DSPVolumeSynchronizer + # XiaomiDolby PRODUCT_PACKAGES += \ XiaomiDolby \