sdm845-common: parts: Add DiracSound backend

Special thanks to vasishath for his base work on mi3

Change-Id: Id81e60a18dc34c991b82a5a2685c9041222a6ea7
This commit is contained in:
TheScarastic 2018-12-28 15:13:24 -05:00 committed by Bruno Martins
parent 84a39ce4a8
commit 8d3b68eacc
10 changed files with 269 additions and 39 deletions

View File

@ -1,3 +1,7 @@
-keep class org.lineageos.settings.dirac.* {
*;
}
-keep class org.lineageos.settings.doze.* {
*;
}

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018 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.
-->
<resources>
<!-- Values for Dirac headset pref -->
<string-array name="dirac_headset_pref_entries" translatable="false">
<item>@string/dirac_headset_default</item>
<item>@string/dirac_headset_earbuds</item>
<item>@string/dirac_headset_in_ear_2013</item>
<item>@string/dirac_headset_piston_1</item>
<item>@string/dirac_headset_general</item>
<item>@string/dirac_headset_general_inear</item>
<item>@string/dirac_headset_piston_basic</item>
<item>@string/dirac_headset_piston_2</item>
<item>@string/dirac_headset_piston_standard</item>
<item>@string/dirac_headset_headphone</item>
<item>@string/dirac_headset_piston_youth</item>
<item>@string/dirac_headset_piston_color</item>
<item>@string/dirac_headset_in_ear</item>
<item>@string/dirac_headset_capsule</item>
<item>@string/dirac_headset_in_ear_pro</item>
<item>@string/dirac_headset_comfort</item>
<item>@string/dirac_headset_reduction_noise</item>
<item>@string/dirac_headset_cancelling</item>
<item>@string/dirac_headset_half_in_ear</item>
<item>@string/dirac_headset_in_ear2</item>
<item>@string/dirac_headset_earphone_basic</item>
<item>@string/dirac_headset_earphone</item>
</string-array>
<string-array name="dirac_headset_pref_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
<item>14</item>
<item>15</item>
<item>16</item>
<item>17</item>
<item>18</item>
<item>19</item>
<item>20</item>
<item>21</item>
<item>22</item>
<item>23</item>
</string-array>
<!-- Values for Dirac preset pref -->
<string-array name="dirac_preset_pref_entries" translatable="false">
<item>@string/dirac_preset_default</item>
<item>@string/dirac_preset_rock</item>
<item>@string/dirac_preset_jazz</item>
<item>@string/dirac_preset_pop</item>
<item>@string/dirac_preset_classical</item>
<item>@string/dirac_preset_hiphop</item>
<item>@string/dirac_preset_blues</item>
<item>@string/dirac_preset_electronic</item>
<item>@string/dirac_preset_country</item>
<item>@string/dirac_preset_dance</item>
<item>@string/dirac_preset_metal</item>
</string-array>
<string-array name="dirac_preset_pref_values" translatable="false">
<item>"0,0,0,0,0,0,0"</item>
<item>"4,2,-2,0,-2,-2,4"</item>
<item>"0,0,0,-2,-3,0,0"</item>
<item>"0,-3,-5,0,0,-3,0"</item>
<item>"0,0,0,0,3,6,6"</item>
<item>"3,3,-3,0,-3,0,2"</item>
<item>"2,4,-6,4,0,1,2"</item>
<item>"3,3,-1,0,-3,0,0"</item>
<item>"0,0,-2,-2,2,2,0"</item>
<item>"0,4,2,0,-2,-2,4"</item>
<item>"2,0,0,-2,-4,0,0"</item>
</string-array>
</resources>

View File

@ -20,15 +20,40 @@
<string name="dirac_headset_title">Headset type</string>
<string name="dirac_preset_title">Sound preset</string>
<!-- TODO: change the string values accordingly -->
<string name="dirac_headset_0">Headset 0</string>
<string name="dirac_headset_1">Headset 1</string>
<string name="dirac_headset_2">Headset 2</string>
<string name="dirac_headset_3">Headset 3</string>
<!-- Dirac settings: headset types -->
<string name="dirac_headset_default">Default</string>
<string name="dirac_headset_earbuds">Mi Earbuds</string>
<string name="dirac_headset_in_ear_2013">Mi In-Ear (2013)</string>
<string name="dirac_headset_piston_1">Mi Piston 1</string>
<string name="dirac_headset_general">General Earbuds</string>
<string name="dirac_headset_general_inear">General In-Ear</string>
<string name="dirac_headset_piston_basic">Basic Edition</string>
<string name="dirac_headset_piston_2">Mi Piston 2</string>
<string name="dirac_headset_piston_standard">Mi Piston 3</string>
<string name="dirac_headset_headphone">Mi Headphones</string>
<string name="dirac_headset_piston_youth">Youth Edition</string>
<string name="dirac_headset_piston_color">Color Edition</string>
<string name="dirac_headset_in_ear">Mi In-Ear</string>
<string name="dirac_headset_capsule">Mi Capsule</string>
<string name="dirac_headset_in_ear_pro">Mi In-Ear Pro</string>
<string name="dirac_headset_comfort">Mi Comfort</string>
<string name="dirac_headset_reduction_noise">Mi Noise Cancelling (Type-C)</string>
<string name="dirac_headset_cancelling">Mi Noise Cancelling (3.5mm)</string>
<string name="dirac_headset_half_in_ear">Mi Half In-Ear</string>
<string name="dirac_headset_in_ear2">Mi In-Ear 2</string>
<string name="dirac_headset_earphone_basic">Mi Earphones Basic</string>
<string name="dirac_headset_earphone">Mi Earphones</string>
<!-- TODO: change the string values accordingly -->
<string name="dirac_preset_0">Preset 0</string>
<string name="dirac_preset_1">Preset 1</string>
<string name="dirac_preset_2">Preset 2</string>
<string name="dirac_preset_3">Preset 3</string>
<!-- Dirac settings: equalizer presets -->
<string name="dirac_preset_default">Default</string>
<string name="dirac_preset_rock">Rock</string>
<string name="dirac_preset_jazz">Jazz</string>
<string name="dirac_preset_pop">Pop</string>
<string name="dirac_preset_classical">Classical</string>
<string name="dirac_preset_hiphop">Hip Hop</string>
<string name="dirac_preset_blues">Blues</string>
<string name="dirac_preset_electronic">Electronic</string>
<string name="dirac_preset_country">Country</string>
<string name="dirac_preset_dance">Dance</string>
<string name="dirac_preset_metal">Metal</string>
</resources>

View File

@ -18,13 +18,17 @@
<ListPreference
android:key="dirac_headset_pref"
android:entries="@array/dirac_headset_pref_entries"
android:entryValues="@array/dirac_headset_pref_values"
android:defaultValue="0"
android:title="@string/dirac_headset_title"
android:summary="%s" />
<ListPreference
android:key="dirac_preset_pref"
android:defaultValue="0"
android:entries="@array/dirac_preset_pref_entries"
android:entryValues="@array/dirac_preset_pref_values"
android:defaultValue="0,0,0,0,0,0,0"
android:title="@string/dirac_preset_title"
android:summary="%s" />

View File

@ -22,6 +22,7 @@ import android.content.Context;
import android.content.Intent;
import android.util.Log;
import org.lineageos.settings.dirac.DiracUtils;
import org.lineageos.settings.doze.DozeUtils;
public class BootCompletedReceiver extends BroadcastReceiver {
@ -32,6 +33,7 @@ public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if (DEBUG) Log.d(TAG, "Received boot completed intent");
DiracUtils.initialize();
DozeUtils.checkDozeService(context);
}
}

View File

@ -57,34 +57,10 @@ public class DiracSettingsFragment extends PreferenceFragment implements
mHeadsetType = (ListPreference) findPreference(PREF_HEADSET);
mHeadsetType.setOnPreferenceChangeListener(this);
mHeadsetType.setEnabled(enhancerEnabled);
// TODO: adapt to real values
String[] headsetEntries = new String[] {
getString(R.string.dirac_headset_0),
getString(R.string.dirac_headset_1),
getString(R.string.dirac_headset_2),
getString(R.string.dirac_headset_3)
};
String[] headsetValues = new String[] {
"0", "1", "2", "3"
};
mHeadsetType.setEntries(headsetEntries);
mHeadsetType.setEntryValues(headsetValues);
mPreset = (ListPreference) findPreference(PREF_PRESET);
mPreset.setOnPreferenceChangeListener(this);
mPreset.setEnabled(enhancerEnabled);
// TODO: adapt to real values
String[] presetEntries = new String[] {
getString(R.string.dirac_preset_0),
getString(R.string.dirac_preset_1),
getString(R.string.dirac_preset_2),
getString(R.string.dirac_preset_3)
};
String[] presetValues = new String[] {
"0", "1", "2", "3"
};
mPreset.setEntries(presetEntries);
mPreset.setEntryValues(presetValues);
}
@Override
@ -121,10 +97,10 @@ public class DiracSettingsFragment extends PreferenceFragment implements
public boolean onPreferenceChange(Preference preference, Object newValue) {
switch (preference.getKey()) {
case PREF_HEADSET:
// TODO: on Headset changed
DiracUtils.setHeadsetType(Integer.parseInt(newValue.toString()));
return true;
case PREF_PRESET:
// TODO: on Preset changed
DiracUtils.setLevel(String.valueOf(newValue));
return true;
default:
return false;
@ -133,7 +109,7 @@ public class DiracSettingsFragment extends PreferenceFragment implements
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
// TODO: Toggle enhancer
DiracUtils.setMusic(isChecked);
mTextView.setText(getString(isChecked ? R.string.switch_bar_on : R.string.switch_bar_off));
mSwitchBar.setActivated(isChecked);

View File

@ -0,0 +1,76 @@
/*
* Copyright (C) 2018 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.settings.dirac;
import android.media.audiofx.AudioEffect;
import java.util.UUID;
public class DiracSound extends AudioEffect {
private static final int DIRACSOUND_PARAM_HEADSET_TYPE = 1;
private static final int DIRACSOUND_PARAM_EQ_LEVEL = 2;
private static final int DIRACSOUND_PARAM_MUSIC = 4;
private static final UUID EFFECT_TYPE_DIRACSOUND =
UUID.fromString("e069d9e0-8329-11df-9168-0002a5d5c51b");
private static final String TAG = "DiracSound";
public DiracSound(int priority, int audioSession) {
super(EFFECT_TYPE_NULL, EFFECT_TYPE_DIRACSOUND, priority, audioSession);
}
public int getMusic() throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
int[] value = new int[1];
checkStatus(getParameter(DIRACSOUND_PARAM_MUSIC, value));
return value[0];
}
public void setMusic(int enable) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
checkStatus(setParameter(DIRACSOUND_PARAM_MUSIC, enable));
}
public int getHeadsetType() throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
int[] value = new int[1];
checkStatus(getParameter(DIRACSOUND_PARAM_HEADSET_TYPE, value));
return value[0];
}
public void setHeadsetType(int type) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
checkStatus(setParameter(DIRACSOUND_PARAM_HEADSET_TYPE, type));
}
public float getLevel(int band) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
int[] param = new int[2];
byte[] value = new byte[10];
param[0] = DIRACSOUND_PARAM_EQ_LEVEL;
param[1] = band;
checkStatus(getParameter(param, value));
return new Float(new String(value)).floatValue();
}
public void setLevel(int band, float level) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
checkStatus(setParameter(new int[]{DIRACSOUND_PARAM_EQ_LEVEL, band},
String.valueOf(level).getBytes()));
}
}

View File

@ -20,7 +20,46 @@ import android.content.Context;
public final class DiracUtils {
protected static DiracSound mDiracSound;
private static boolean mInitialized;
public static void initialize() {
if (!mInitialized) {
mInitialized = true;
mDiracSound = new DiracSound(0, 0);
mDiracSound.setMusic(mDiracSound.getMusic());
mDiracSound.setHeadsetType(mDiracSound.getHeadsetType());
setLevel(getLevel());
}
}
protected static void setMusic(boolean enable) {
mDiracSound.setMusic(enable ? 1 : 0);
}
protected static boolean isDiracEnabled(Context context) {
return false;
return mDiracSound.getMusic() == 1;
}
protected static void setLevel(String preset) {
String[] level = preset.split("\\s*,\\s*");
for (int band = 0; band <= level.length - 1; band++) {
mDiracSound.setLevel(band, Float.valueOf(level[band]));
}
}
protected static String getLevel() {
String selected = "";
for (int band = 0; band <= 6; band++) {
int temp = (int) mDiracSound.getLevel(band);
selected += String.valueOf(temp);
if (band != 6) selected += ",";
}
return selected;
}
protected static void setHeadsetType(int paramInt) {
mDiracSound.setHeadsetType(paramInt);
}
}

View File

@ -1 +1,2 @@
user=system seinfo=platform name=org.lineageos.pocketmode domain=pocketmode_app type=system_app_data_file
user=system seinfo=platform name=org.lineageos.settings domain=xiaomiparts_app type=system_app_data_file

View File

@ -0,0 +1,5 @@
type xiaomiparts_app, domain;
app_domain(xiaomiparts_app)
allow xiaomiparts_app audioserver_service:service_manager find;