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); } }