diff --git a/LineageActions/res/values/arrays.xml b/LineageActions/res/values/arrays.xml
new file mode 100644
index 0000000..186bffc
--- /dev/null
+++ b/LineageActions/res/values/arrays.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+ - @string/dirac_headset_default
+ - @string/dirac_headset_earbuds
+ - @string/dirac_headset_in_ear_2013
+ - @string/dirac_headset_piston_1
+ - @string/dirac_headset_general
+ - @string/dirac_headset_general_inear
+ - @string/dirac_headset_piston_basic
+ - @string/dirac_headset_piston_2
+ - @string/dirac_headset_piston_standard
+ - @string/dirac_headset_headphone
+ - @string/dirac_headset_piston_youth
+ - @string/dirac_headset_piston_color
+ - @string/dirac_headset_in_ear
+ - @string/dirac_headset_capsule
+ - @string/dirac_headset_in_ear_pro
+ - @string/dirac_headset_comfort
+ - @string/dirac_headset_reduction_noise
+ - @string/dirac_headset_cancelling
+ - @string/dirac_headset_half_in_ear
+ - @string/dirac_headset_in_ear2
+ - @string/dirac_headset_earphone_basic
+ - @string/dirac_headset_earphone
+
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - 12
+ - 13
+ - 14
+ - 15
+ - 16
+ - 17
+ - 18
+ - 19
+ - 20
+ - 21
+ - 22
+ - 23
+
+
+
+
+ - @string/dirac_preset_default
+ - @string/dirac_preset_rock
+ - @string/dirac_preset_jazz
+ - @string/dirac_preset_pop
+ - @string/dirac_preset_classical
+ - @string/dirac_preset_hiphop
+ - @string/dirac_preset_blues
+ - @string/dirac_preset_electronic
+ - @string/dirac_preset_country
+ - @string/dirac_preset_dance
+ - @string/dirac_preset_metal
+
+
+
+ - "0,0,0,0,0,0,0"
+ - "4,2,-2,0,-2,-2,4"
+ - "0,0,0,-2,-3,0,0"
+ - "0,-3,-5,0,0,-3,0"
+ - "0,0,0,0,3,6,6"
+ - "3,3,-3,0,-3,0,2"
+ - "2,4,-6,4,0,1,2"
+ - "3,3,-1,0,-3,0,0"
+ - "0,0,-2,-2,2,2,0"
+ - "0,4,2,0,-2,-2,4"
+ - "2,0,0,-2,-4,0,0"
+
+
diff --git a/LineageActions/res/values/strings.xml b/LineageActions/res/values/strings.xml
index 71703c4..ba34314 100644
--- a/LineageActions/res/values/strings.xml
+++ b/LineageActions/res/values/strings.xml
@@ -96,15 +96,38 @@
Headset type
Sound preset
-
- Headset 0
- Headset 1
- Headset 2
- Headset 3
+ Default
+ Mi Earbuds
+ Mi In-Ear (2013)
+ Mi Piston 1
+ General Earbuds
+ General In-Ear
+ Basic Edition
+ Mi Piston 2
+ Mi Piston 3
+ Mi Headphone
+ Youth Edition
+ Color Edition
+ Mi In-Ear
+ Mi Capsule
+ Mi In-Ear Pro
+ Mi Comfort
+ Mi Noise Cancelling (Type-C)
+ Mi Noise Cancelling (3.5mm)
+ Mi Half In-Ear
+ Mi In-Ear 2
+ Mi Earphones Basic
+ Mi Earphones
-
- Preset 0
- Preset 1
- Preset 2
- Preset 3
+ Default
+ Rock
+ Jazz
+ Pop
+ Classical
+ Hiphop
+ Blues
+ Electronic
+ Country
+ Dance
+ Metal
diff --git a/LineageActions/res/xml/dirac_settings.xml b/LineageActions/res/xml/dirac_settings.xml
index 3251320..e0ac2b8 100644
--- a/LineageActions/res/xml/dirac_settings.xml
+++ b/LineageActions/res/xml/dirac_settings.xml
@@ -15,13 +15,17 @@
diff --git a/LineageActions/src/org/lineageos/settings/device/BootCompletedReceiver.java b/LineageActions/src/org/lineageos/settings/device/BootCompletedReceiver.java
index cdf51e0..dcf542a 100644
--- a/LineageActions/src/org/lineageos/settings/device/BootCompletedReceiver.java
+++ b/LineageActions/src/org/lineageos/settings/device/BootCompletedReceiver.java
@@ -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(),
diff --git a/LineageActions/src/org/lineageos/settings/device/dirac/DiracSettingsFragment.java b/LineageActions/src/org/lineageos/settings/device/dirac/DiracSettingsFragment.java
index e258584..8b055ff 100644
--- a/LineageActions/src/org/lineageos/settings/device/dirac/DiracSettingsFragment.java
+++ b/LineageActions/src/org/lineageos/settings/device/dirac/DiracSettingsFragment.java
@@ -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);
diff --git a/LineageActions/src/org/lineageos/settings/device/dirac/DiracSound.java b/LineageActions/src/org/lineageos/settings/device/dirac/DiracSound.java
new file mode 100644
index 0000000..d0773c3
--- /dev/null
+++ b/LineageActions/src/org/lineageos/settings/device/dirac/DiracSound.java
@@ -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();
+ }
+}
diff --git a/LineageActions/src/org/lineageos/settings/device/dirac/DiracUtils.java b/LineageActions/src/org/lineageos/settings/device/dirac/DiracUtils.java
index 84466e6..da95791 100644
--- a/LineageActions/src/org/lineageos/settings/device/dirac/DiracUtils.java
+++ b/LineageActions/src/org/lineageos/settings/device/dirac/DiracUtils.java
@@ -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);
}
}