Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85b8c1fc authored by Tomoharu Kasahara's avatar Tomoharu Kasahara
Browse files

Make pre-scale for absolute volume configurable

Audio gain for lower volume steps are restricted for
Bluetooth Absolute Volume scenario, but it's better
not to use the fixed value.
This CL makes it possible to configure the value of
pre-scale.

Bug: 114220617
Test: manual - gain is restricted as per the configuration

Change-Id: I1fd0c77476386ba9518e1819d5ea2c7b0c344a40
Merged-In: I1fd0c77476386ba9518e1819d5ea2c7b0c344a40
parent 473654c3
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -3460,4 +3460,12 @@
    <!-- Whether or not swipe up gesture's opt-in setting is available on this device -->
    <bool name="config_swipe_up_gesture_setting_available">false</bool>

    <!-- Pre-scale volume at volume step 1 for Absolute Volume -->
    <fraction name="config_prescaleAbsoluteVolume_index1">50%</fraction>

    <!-- Pre-scale volume at volume step 2 for Absolute Volume -->
    <fraction name="config_prescaleAbsoluteVolume_index2">70%</fraction>

    <!-- Pre-scale volume at volume step 3 for Absolute Volume -->
    <fraction name="config_prescaleAbsoluteVolume_index3">85%</fraction>
</resources>
+5 −0
Original line number Diff line number Diff line
@@ -3392,4 +3392,9 @@

  <java-symbol type="integer" name="config_defaultHapticFeedbackIntensity" />
  <java-symbol type="integer" name="config_defaultNotificationVibrationIntensity" />

  <!-- For Bluetooth AbsoluteVolume -->
  <java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index1" />
  <java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index2" />
  <java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index3" />
</resources>
+28 −10
Original line number Diff line number Diff line
@@ -627,6 +627,13 @@ public class AudioService extends IAudioService.Stub
    // If absolute volume is supported in AVRCP device
    private boolean mAvrcpAbsVolSupported = false;

    // Pre-scale for Bluetooth Absolute Volume
    private float[] mPrescaleAbsoluteVolume = new float[] {
        0.5f,    // Pre-scale for index 1
        0.7f,    // Pre-scale for index 2
        0.85f,   // Pre-scale for index 3
    };

    private static Long mLastDeviceConnectMsgTime = new Long(0);

    private NotificationManager mNm;
@@ -878,6 +885,23 @@ public class AudioService extends IAudioService.Stub
        mUserManagerInternal.addUserRestrictionsListener(mUserRestrictionsListener);

        mRecordMonitor.initMonitor();

        final float[] preScale = new float[3];
        preScale[0] = mContext.getResources().getFraction(
                com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index1,
                1, 1);
        preScale[1] = mContext.getResources().getFraction(
                com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index2,
                1, 1);
        preScale[2] = mContext.getResources().getFraction(
                com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index3,
                1, 1);
        for (int i = 0; i < preScale.length; i++) {
            if (0.0f <= preScale[i] && preScale[i] <= 1.0f) {
                mPrescaleAbsoluteVolume[i] = preScale[i];
            }
        }

    }

    public void systemReady() {
@@ -4879,15 +4903,9 @@ public class AudioService extends IAudioService.Stub
            if (index == 0) {
                // 0% for volume 0
                index = 0;
            } else if (index == 1) {
                // 50% for volume 1
                index = (int)(mIndexMax * 0.5) /10;
            } else if (index == 2) {
                // 70% for volume 2
                index = (int)(mIndexMax * 0.70) /10;
            } else if (index == 3) {
                // 85% for volume 3
                index = (int)(mIndexMax * 0.85) /10;
            } else if (index > 0 && index <= 3) {
                // Pre-scale for volume steps 1 2 and 3
                index = (int) (mIndexMax * mPrescaleAbsoluteVolume[index - 1]) / 10;
            } else {
                // otherwise, full gain
                index = (mIndexMax + 5) / 10;