diff --git a/app/InCallService/src/org/lineageos/mediatek/incallservice/GainUtils.java b/app/InCallService/src/org/lineageos/mediatek/incallservice/GainUtils.java new file mode 100644 index 0000000..2588c79 --- /dev/null +++ b/app/InCallService/src/org/lineageos/mediatek/incallservice/GainUtils.java @@ -0,0 +1,16 @@ +package org.lineageos.mediatek.incallservice; + +import android.media.AudioSystem; + +import android.util.Log; + +public class GainUtils { + public static final String LOG_TAG = "MediatekInCallService"; + + public static void setGainLevel(int audioDevice, int gainIndex, int streamType) { + String parameters = String.format("volumeDevice=%d;volumeIndex=%d;volumeStreamType=%d", + audioDevice, Math.min(7, gainIndex), streamType); + Log.d(LOG_TAG, "Setting audio parameters to: " + parameters); + AudioSystem.setParameters(parameters); + } +} diff --git a/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeReceiver.java b/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeReceiver.java index 16f2770..98d1d39 100644 --- a/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeReceiver.java +++ b/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeReceiver.java @@ -15,32 +15,27 @@ public class VolumeChangeReceiver extends BroadcastReceiver { private AudioManager mAudioManager; - public VolumeChangeReceiver(Context context) { - mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + public VolumeChangeReceiver(AudioManager audioManager) { + mAudioManager = audioManager; } - @Override - public void onReceive(Context context, Intent intent) { - int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1); - if (streamType == AudioSystem.STREAM_VOICE_CALL) { + private void handleVolumeStateChange(Intent intent) { + if (intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1) == AudioManager.STREAM_VOICE_CALL) { AudioDeviceInfo callDevice = mAudioManager.getCommunicationDevice(); - // Start building parameters - String parameters = "volumeDevice=" + (callDevice.getId() - 1) + ";"; + // Try to get volumeIndex int volumeIndex = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1); if (volumeIndex < 0) { Log.w(LOG_TAG, "Could not get volumeIndex!"); return; } - // Limit volumeIndex to a max of 7 since that's the size of - // MediaTek's gain table. - parameters += "volumeIndex=" + Math.min(7, volumeIndex) + ";"; - parameters += "volumeStreamType=" + streamType; - - // Set gain parameters - Log.d(LOG_TAG, "Setting audio parameters: " + parameters); - AudioSystem.setParameters(parameters); + GainUtils.setGainLevel(callDevice.getPort().type(), volumeIndex, AudioSystem.STREAM_VOICE_CALL); } } + + @Override + public void onReceive(Context context, Intent intent) { + handleVolumeStateChange(intent); + } } diff --git a/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeService.java b/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeService.java index e15f47f..daca4d6 100644 --- a/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeService.java +++ b/app/InCallService/src/org/lineageos/mediatek/incallservice/VolumeChangeService.java @@ -29,9 +29,12 @@ public class VolumeChangeService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startid) { mContext = this; - mVolumeChangeReceiver = new VolumeChangeReceiver(mContext); + + AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + mVolumeChangeReceiver = new VolumeChangeReceiver(audioManager); Log.i(LOG_TAG, "Service is starting..."); + this.registerReceiver(mVolumeChangeReceiver, new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION)); return START_STICKY;