sanders: dirac: Add DiracSound backend

Special thanks to vasishath for his base work on mi3

Signed-off-by: Ashwin R C <ashwin2001achu@gmail.com>
Signed-off-by: utsavbalar1231 <utsavbalar1231@gmail.com>
Signed-off-by: ronaxdevil <pratabidya.007@gmail.com>
This commit is contained in:
Abhishek Aggarwal
2019-02-17 14:40:03 +05:30
committed by ronaxdevil
parent fa2a05dda6
commit abc69bde44
7 changed files with 257 additions and 40 deletions

View File

@@ -0,0 +1,95 @@
<?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

@@ -96,15 +96,38 @@
<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>
<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 Headphone</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>
<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">Hiphop</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

@@ -15,13 +15,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

@@ -32,6 +32,7 @@ import lineageos.providers.LineageSettings;
import org.lineageos.settings.device.util.FileUtils;
import org.lineageos.settings.device.actions.Constants;
import org.lineageos.settings.device.ServiceWrapper.LocalBinder;
import org.lineageos.settings.device.dirac.DiracUtils;
public class BootCompletedReceiver extends BroadcastReceiver {
static final String TAG = "LineageActions";
@@ -56,7 +57,8 @@ public class BootCompletedReceiver extends BroadcastReceiver {
}
context.startService(new Intent(context, ServiceWrapper.class));
}
DiracUtils.initialize();
}
protected static void enableNavBar(boolean enable, Context context) {
// LineageSettings.Global.putInt(context.getContentResolver(),

View File

@@ -61,34 +61,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
@@ -125,10 +101,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;
}
@@ -136,7 +112,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 void setMusic(int enable) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
checkStatus(setParameter(DIRACSOUND_PARAM_MUSIC, enable));
}
public int getMusic() throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
int[] value = new int[1];
checkStatus(getParameter(DIRACSOUND_PARAM_MUSIC, value));
return value[0];
}
public void setHeadsetType(int type) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
checkStatus(setParameter(DIRACSOUND_PARAM_HEADSET_TYPE, type));
}
public int getHeadsetType() throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
int[] value = new int[1];
checkStatus(getParameter(DIRACSOUND_PARAM_HEADSET_TYPE, value));
return value[0];
}
public void setLevel(int band, float level) throws IllegalStateException,
IllegalArgumentException, UnsupportedOperationException {
checkStatus(setParameter(new int[]{DIRACSOUND_PARAM_EQ_LEVEL, band},
String.valueOf(level).getBytes()));
}
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();
}
}

View File

@@ -17,10 +17,51 @@
package org.lineageos.settings.dirac;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
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);
}
}