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
This commit is contained in:
Tomoharu Kasahara
2018-09-06 20:04:38 +09:00
committed by Jean-Michel Trivi
parent 99ae103961
commit f0fecb1967
3 changed files with 42 additions and 10 deletions

View File

@@ -3541,4 +3541,13 @@
<!-- Brand value for attestation of misprovisioned device. -->
<string name="config_misprovisionedBrandValue" translatable="false"></string>
<!-- 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>

View File

@@ -3470,4 +3470,9 @@
<java-symbol type="integer" name="db_wal_truncate_size" />
<java-symbol type="integer" name="config_wakeUpDelayDoze" />
<java-symbol type="string" name="config_dozeWakeScreenSensorType" />
<!-- 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>

View File

@@ -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() {
@@ -4926,18 +4950,12 @@ 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;
index = (mIndexMax + 5) / 10;
}
return index;
}