summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/drawable/logo_dts_fc.xml2
-rw-r--r--res/layout/action_bar.xml23
-rw-r--r--res/layout/action_bar_custom_components.xml23
-rw-r--r--res/layout/action_bar_dts_logo.xml26
-rw-r--r--res/layout/action_bar_spinner.xml27
-rw-r--r--res/layout/action_bar_spinner_row.xml26
-rw-r--r--res/values/cm_strings.xml9
-rw-r--r--res/values/dimens.xml1
-rw-r--r--src/com/cyngn/audiofx/activity/ActivityMusic.java255
-rw-r--r--src/com/cyngn/audiofx/activity/EqualizerManager.java15
-rw-r--r--src/com/cyngn/audiofx/activity/MasterConfigControl.java4
-rw-r--r--src/com/cyngn/audiofx/backends/AndroidEffects.java2
-rw-r--r--src/com/cyngn/audiofx/backends/EffectSet.java103
-rw-r--r--src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java91
-rw-r--r--src/com/cyngn/audiofx/backends/EffectsFactory.java25
-rw-r--r--src/com/cyngn/audiofx/eq/EqSwipeController.java41
-rw-r--r--src/com/cyngn/audiofx/eq/EqUtils.java72
-rw-r--r--src/com/cyngn/audiofx/fragment/AudioFxFragment.java18
-rw-r--r--src/com/cyngn/audiofx/fragment/DTSFragment.java135
-rw-r--r--src/com/cyngn/audiofx/knobs/KnobCommander.java2
-rw-r--r--src/com/cyngn/audiofx/knobs/KnobContainer.java13
-rw-r--r--src/com/cyngn/audiofx/service/AudioFxService.java45
-rw-r--r--src/com/cyngn/audiofx/service/AudioOutputChangeListener.java2
23 files changed, 351 insertions, 609 deletions
diff --git a/res/drawable/logo_dts_fc.xml b/res/drawable/logo_dts_fc.xml
index ea9bbed..a9abeb3 100644
--- a/res/drawable/logo_dts_fc.xml
+++ b/res/drawable/logo_dts_fc.xml
@@ -80,4 +80,4 @@ c-0.1-0.1-0.1-0.2-0.2-0.2c0,0-0.1,0-0.1,0h-0.1v0.4H54.7z
M54.9,3h0.2c0.1,0,0.2,0,0.2,0c0,0,0.1-0.1,0.1-0.1c0,0,0-0.1,0-0.1
c0,0,0,0-0.1-0.1c0,0-0.1,0-0.2,0h-0.2V3z" />
</group>
-</vector> \ No newline at end of file
+</vector>
diff --git a/res/layout/action_bar.xml b/res/layout/action_bar.xml
deleted file mode 100644
index 6477951..0000000
--- a/res/layout/action_bar.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <Spinner xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/spinner"
- android:layout_weight="0"
- android:dropDownWidth="wrap_content"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
-
- <Space android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
-
- <CheckBox
- android:layout_weight="0"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:id="@+id/device_toggle"/>
-
-</LinearLayout>
diff --git a/res/layout/action_bar_custom_components.xml b/res/layout/action_bar_custom_components.xml
new file mode 100644
index 0000000..3d65eb3
--- /dev/null
+++ b/res/layout/action_bar_custom_components.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent">
+
+ <ViewStub
+ android:id="@+id/logo_stub"
+ android:gravity="center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
+ <CheckBox
+ android:id="@+id/global_toggle"
+ android:layout_gravity="center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:button="@drawable/toggle_check"
+ android:paddingRight="@dimen/action_bar_switch_padding"
+ />
+
+</LinearLayout>
diff --git a/res/layout/action_bar_dts_logo.xml b/res/layout/action_bar_dts_logo.xml
new file mode 100644
index 0000000..89a439c
--- /dev/null
+++ b/res/layout/action_bar_dts_logo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingRight="@dimen/action_bar_dts_switch_padding">
+
+ <TextView
+ android:text="@string/powered_by"
+ android:layout_gravity="center_horizontal"
+ android:textSize="10sp"
+ android:typeface="sans"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
+ <ImageView
+ android:id="@+id/dts_logo"
+ android:src="@drawable/logo_dts_fc"
+ android:layout_weight="1"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ />
+
+
+</LinearLayout>
diff --git a/res/layout/action_bar_spinner.xml b/res/layout/action_bar_spinner.xml
deleted file mode 100644
index 67b81d1..0000000
--- a/res/layout/action_bar_spinner.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp">
-
- <TextView android:id="@android:id/summary"
- android:textSize="14sp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:gravity="center_vertical"/>
-
- <TextView android:id="@android:id/title"
- android:textSize="18sp"
- android:textStyle="bold"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_above="@android:id/summary"
- android:layout_alignWithParentIfMissing="true"
- android:gravity="center_vertical"/>
-
-</RelativeLayout>
-
diff --git a/res/layout/action_bar_spinner_row.xml b/res/layout/action_bar_spinner_row.xml
deleted file mode 100644
index d081618..0000000
--- a/res/layout/action_bar_spinner_row.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="64dp"
- android:padding="8dp">
-
- <TextView android:id="@android:id/summary"
- android:textSize="14sp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:gravity="center_vertical"/>
-
- <TextView android:id="@android:id/title"
- android:textSize="18sp"
- android:textStyle="bold"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_above="@android:id/summary"
- android:layout_alignWithParentIfMissing="true"
- android:gravity="center_vertical"/>
-
-</RelativeLayout>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 6b25b14..d22a7f0 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -66,11 +66,12 @@
<string name="rename">Rename</string>
<string name="remove_custom_preset_warning_message">Are you sure you want to remove %1$s?</string>
- <string name="mode_audiofx" translatable="false"></string>
- <string name="mode_dts" translatable="false">with DTS Sound&#8482;</string>
-
<string name="app_name" translatable="false">AudioFX</string>
<string name="app_title" translatable="false">@string/app_name</string>
- <string name="app_subtitle" translatable="false">Powered by MaxxAudio</string>
+
+ <string name="powered_by_maxx_audio" translatable="false">Powered by MaxxAudio</string>
+ <string name="mode_dts" translatable="false">with DTS Sound&#8482;</string>
+ <string name="powered_by">powered by</string>
+
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f7c8a71..93019de 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -52,7 +52,6 @@
<dimen name="radial_text_size">18sp</dimen>
<dimen name="radial_knob_stroke">22dp</dimen>
- <!-- 16 dp + 64 dp -->
<dimen name="action_bar_dts_switch_padding">48dp</dimen>
</resources>
diff --git a/src/com/cyngn/audiofx/activity/ActivityMusic.java b/src/com/cyngn/audiofx/activity/ActivityMusic.java
index 622ba5c..f75273d 100644
--- a/src/com/cyngn/audiofx/activity/ActivityMusic.java
+++ b/src/com/cyngn/audiofx/activity/ActivityMusic.java
@@ -2,7 +2,6 @@ package com.cyngn.audiofx.activity;
import android.app.ActionBar;
import android.app.Activity;
-import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
@@ -10,60 +9,35 @@ import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
+import android.view.ViewStub;
import android.widget.CheckBox;
import android.widget.CompoundButton;
-import android.widget.Spinner;
-import android.widget.TextView;
import com.cyanogen.ambient.analytics.Event;
import com.cyngn.audiofx.AudioFxApplication;
import com.cyngn.audiofx.Constants;
import com.cyngn.audiofx.R;
import com.cyngn.audiofx.fragment.AudioFxFragment;
-import com.cyngn.audiofx.fragment.DTSFragment;
import com.cyngn.audiofx.knobs.KnobCommander;
import com.cyngn.audiofx.service.AudioFxService;
-import com.cyngn.audiofx.service.DtsControl;
import com.cyngn.audiofx.stats.AppState;
import com.cyngn.audiofx.stats.UserSession;
-import java.util.ArrayList;
-import java.util.List;
-
public class ActivityMusic extends Activity {
private static final String TAG = ActivityMusic.class.getSimpleName();
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- public static final int CURRENT_MODE_AUDIOFX = 1;
- public static final int CURRENT_MODE_DTS = 2;
-
public static final String TAG_AUDIOFX = "audiofx";
- public static final String TAG_DTS = "dts";
public static final String EXTRA_CALLING_PACKAGE = "audiofx::extra_calling_package";
- private int mCurrentMode = CURRENT_MODE_AUDIOFX;
- private Spinner mSpinner;
- DtsControl mDts;
-
private CheckBox mCurrentDeviceToggle;
MasterConfigControl mConfig;
String mCallingPackage;
- private List<ActivityStateListener> mGlobalToggleListeners = new ArrayList<>();
-
private boolean mWaitingForService = true;
private SharedPreferences.OnSharedPreferenceChangeListener mServiceReadyObserver;
- public interface ActivityStateListener {
- public void onModeChanged(int mode);
- }
-
private CompoundButton.OnCheckedChangeListener mGlobalEnableToggleListener
= new CompoundButton.OnCheckedChangeListener() {
@Override
@@ -102,7 +76,6 @@ public class ActivityMusic extends Activity {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
mConfig.onResetDefaults();
init(savedInstanceState);
- setupDtsActionBar();
mWaitingForService = false;
invalidateOptionsMenu();
@@ -145,91 +118,39 @@ public class ActivityMusic extends Activity {
private void init(Bundle savedInstanceState) {
mConfig = MasterConfigControl.getInstance(this);
- mDts = new DtsControl(this);
ActionBar ab = getActionBar();
ab.setTitle(R.string.app_title);
- ab.setDisplayShowCustomEnabled(true);
-
- if (mDts.hasDts()) {
- ab.setCustomView(R.layout.action_bar);
+ ab.setDisplayShowTitleEnabled(true);
- mCurrentDeviceToggle = (CheckBox) findViewById(R.id.device_toggle);
- final int padding = getResources().getDimensionPixelSize(
- R.dimen.action_bar_switch_padding);
- mCurrentDeviceToggle.setPaddingRelative(mCurrentDeviceToggle.getPaddingLeft(),
- mCurrentDeviceToggle.getPaddingTop(),
- padding,
- mCurrentDeviceToggle.getPaddingBottom());
-
- mCurrentDeviceToggle.setButtonDrawable(R.drawable.toggle_check);
- mCurrentDeviceToggle.setOnCheckedChangeListener(mGlobalEnableToggleListener);
-
- ModeAdapter spinnerAdapter = new ModeAdapter(this);
-
- mSpinner = (Spinner) findViewById(R.id.spinner);
- mSpinner.setAdapter(spinnerAdapter);
-
- final boolean shouldUseDts = mDts.shouldUseDts();
- setCurrentMode(shouldUseDts ? CURRENT_MODE_DTS : CURRENT_MODE_AUDIOFX);
- mSpinner.setSelection(shouldUseDts ? 1 : 0, false);
- } else {
- // manually populate action bar
- if (mConfig.hasMaxxAudio()) {
- ab.setDisplayShowTitleEnabled(true);
- ab.setSubtitle(R.string.app_subtitle);
- }
- // setup actionbar on off switch
- mCurrentDeviceToggle = new CheckBox(this);
- final int padding = getResources().getDimensionPixelSize(
- R.dimen.action_bar_switch_padding);
- mCurrentDeviceToggle.setPaddingRelative(0, 0, padding, 0);
- mCurrentDeviceToggle.setButtonDrawable(R.drawable.toggle_check);
- mCurrentDeviceToggle.setOnCheckedChangeListener(mGlobalEnableToggleListener);
+ final View extraView = LayoutInflater.from(this)
+ .inflate(R.layout.action_bar_custom_components, null);
+ ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
+ ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL);
+ ab.setCustomView(extraView, lp);
+ ab.setDisplayShowCustomEnabled(true);
- final ActionBar.LayoutParams params = new ActionBar.LayoutParams(
- ActionBar.LayoutParams.WRAP_CONTENT,
- ActionBar.LayoutParams.WRAP_CONTENT,
- Gravity.CENTER_VERTICAL | Gravity.END);
- ab.setCustomView(mCurrentDeviceToggle, params);
- }
+ mCurrentDeviceToggle = (CheckBox) ab.getCustomView().findViewById(R.id.global_toggle);
+ mCurrentDeviceToggle.setOnCheckedChangeListener(mGlobalEnableToggleListener);
if (savedInstanceState == null && findViewById(R.id.main_fragment) != null) {
getFragmentManager()
.beginTransaction()
- .add(R.id.main_fragment,
- mCurrentMode == CURRENT_MODE_AUDIOFX
- ? new AudioFxFragment()
- : new DTSFragment(),
- TAG_AUDIOFX)
+ .add(R.id.main_fragment, new AudioFxFragment(), TAG_AUDIOFX)
.commit();
}
+ applyOemDecor();
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- if (!mWaitingForService && mDts.hasDts()) {
- final boolean audioFX = mCurrentMode == CURRENT_MODE_AUDIOFX;
- final int padding = getResources().getDimensionPixelSize(
- audioFX ? R.dimen.action_bar_switch_padding
- : R.dimen.action_bar_dts_switch_padding);
-
- mCurrentDeviceToggle.setPaddingRelative(mCurrentDeviceToggle.getPaddingLeft(),
- mCurrentDeviceToggle.getPaddingTop(),
- padding,
- mCurrentDeviceToggle.getPaddingBottom());
+ private void applyOemDecor() {
+ ActionBar ab = getActionBar();
+ if (mConfig.hasMaxxAudio()) {
+ ab.setSubtitle(R.string.powered_by_maxx_audio);
+ } else if (mConfig.hasDts()) {
+ final ViewStub stub = (ViewStub) ab.getCustomView().findViewById(R.id.logo_stub);
+ stub.setLayoutResource(R.layout.action_bar_dts_logo);
+ stub.inflate();
}
- return super.onPrepareOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- return super.onOptionsItemSelected(item);
}
@Override
@@ -239,13 +160,6 @@ public class ActivityMusic extends Activity {
// initiate a new session
new UserSession(mCallingPackage);
-
- if (mWaitingForService) {
- return;
- }
-
- // action bar controls need to live beyond all fragments
- setupDtsActionBar();
}
@Override
@@ -257,7 +171,7 @@ public class ActivityMusic extends Activity {
final Event.Builder builder = new Event.Builder("session", "ended");
UserSession.getInstance().append(builder);
AppState.appendState(mConfig, KnobCommander.getInstance(this), builder);
- ((AudioFxApplication)getApplicationContext()).sendEvent(builder.build());
+ ((AudioFxApplication) getApplicationContext()).sendEvent(builder.build());
}
@Override
@@ -270,55 +184,6 @@ public class ActivityMusic extends Activity {
}
}
- private void setupDtsActionBar() {
- if (!mDts.hasDts()) {
- return;
- }
- mCurrentDeviceToggle = (CheckBox) findViewById(R.id.device_toggle);
-
- mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- int selectedMode = (Integer) parent.getItemAtPosition(position);
- setCurrentMode(selectedMode);
-
- mDts.setShouldUseDts(mCurrentMode == CURRENT_MODE_DTS);
-
- if (mCurrentMode == CURRENT_MODE_AUDIOFX) {
- mCurrentDeviceToggle.setChecked(mConfig.isCurrentDeviceEnabled());
-
- // change to audio fx layout
- getFragmentManager()
- .beginTransaction()
- .replace(R.id.main_fragment, new AudioFxFragment(), TAG_AUDIOFX)
- .commit();
-
- } else if (mCurrentMode == CURRENT_MODE_DTS) {
- // change to dts layout
- getFragmentManager()
- .beginTransaction()
- .replace(R.id.main_fragment, new DTSFragment(), TAG_DTS)
- .commit();
- }
- mCurrentDeviceToggle = null;
- setupDtsActionBar();
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
-
- }
- });
- }
-
- public void addToggleListener(ActivityStateListener listener) {
- mGlobalToggleListeners.add(listener);
- }
-
- public void removeToggleListener(ActivityStateListener listener) {
- mGlobalToggleListeners.remove(listener);
- }
-
public void setGlobalToggleChecked(boolean checked) {
if (mCurrentDeviceToggle != null) {
mCurrentDeviceToggle.setOnCheckedChangeListener(null);
@@ -327,85 +192,7 @@ public class ActivityMusic extends Activity {
}
}
- public void setCurrentMode(int currentMode) {
- if (mCurrentMode != currentMode) {
- mCurrentMode = currentMode;
- for (ActivityStateListener listener : mGlobalToggleListeners) {
- listener.onModeChanged(mCurrentMode);
- }
- }
- }
-
public CompoundButton getGlobalSwitch() {
return mCurrentDeviceToggle;
}
-
- public int getCurrentMode() {
- return mCurrentMode;
- }
-
- private static class ModeAdapter extends ArrayAdapter<Integer> {
- private LayoutInflater mInflater;
- public ModeAdapter(Context context) {
- super(context, R.layout.action_bar_spinner_row, android.R.id.title,
- new Integer[]{CURRENT_MODE_AUDIOFX, CURRENT_MODE_DTS}
- );
- setDropDownViewResource(R.layout.action_bar_spinner_row);
- mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
-
- @Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
- View view;
- TextView text;
- TextView subText;
-
- if (convertView == null) {
- view = mInflater.inflate(R.layout.action_bar_spinner_row, parent, false);
- } else {
- view = convertView;
- }
- final Integer mode = getItem(position);
-
- text = (TextView) view.findViewById(android.R.id.title);
- text.setText(R.string.app_name);
-
- subText = (TextView) view.findViewById(android.R.id.summary);
- subText.setText(getModeSubTitle(mode));
- subText.setVisibility(subText.length() == 0 ? View.GONE : View.VISIBLE);
- return view;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View view;
- TextView text;
- TextView subText;
-
- if (convertView == null) {
- view = mInflater.inflate(R.layout.action_bar_spinner, parent, false);
- } else {
- view = convertView;
- }
-
- final Integer mode = getItem(position);
- text = (TextView) view.findViewById(android.R.id.title);
- text.setText(R.string.app_name);
-
- subText = (TextView) view.findViewById(android.R.id.summary);
- subText.setText(getModeSubTitle(mode));
- subText.setVisibility(subText.length() == 0 ? View.GONE : View.VISIBLE);
- return view;
- }
-
- public String getModeSubTitle(int mode) {
- switch (mode) {
- case CURRENT_MODE_DTS:
- return getContext().getResources().getString(R.string.mode_dts);
- case CURRENT_MODE_AUDIOFX:
- default:
- return null;
- }
- }
- }
}
diff --git a/src/com/cyngn/audiofx/activity/EqualizerManager.java b/src/com/cyngn/audiofx/activity/EqualizerManager.java
index b7f8e8d..7fa85cb 100644
--- a/src/com/cyngn/audiofx/activity/EqualizerManager.java
+++ b/src/com/cyngn/audiofx/activity/EqualizerManager.java
@@ -107,13 +107,16 @@ public class EqualizerManager {
// setup equalizer presets
final int numPresets = Integer.parseInt(getGlobalPref("equalizer.number_of_presets", "0"));
- // add library-provided presets
- String[] presetNames = getGlobalPref("equalizer.preset_names", "").split("\\|");
- mPredefinedPresets = presetNames.length + 1; // we consider first EQ to be part of predefined
- for (int i = 0; i < numPresets; i++) {
- mEqPresets.add(new Preset.StaticPreset(presetNames[i], getPersistedPresetLevels(i)));
+ if (numPresets > 0) {
+ // add library-provided presets
+ String[] presetNames = getGlobalPref("equalizer.preset_names", "").split("\\|");
+ mPredefinedPresets = presetNames.length + 1; // we consider first EQ to be part of predefined
+ for (int i = 0; i < numPresets; i++) {
+ mEqPresets.add(new Preset.StaticPreset(presetNames[i], getPersistedPresetLevels(i)));
+ }
+ } else {
+ mPredefinedPresets = 1; // custom is predefined
}
-
// add custom preset
mEqPresets.add(new Preset.PermCustomPreset(mContext.getString(R.string.user),
getPersistedCustomLevels()));
diff --git a/src/com/cyngn/audiofx/activity/MasterConfigControl.java b/src/com/cyngn/audiofx/activity/MasterConfigControl.java
index 4ba57f4..ec36613 100644
--- a/src/com/cyngn/audiofx/activity/MasterConfigControl.java
+++ b/src/com/cyngn/audiofx/activity/MasterConfigControl.java
@@ -279,6 +279,10 @@ public class MasterConfigControl {
return mContext.getSharedPreferences(getCurrentDeviceIdentifier(), 0);
}
+ public boolean hasDts() {
+ return getGlobalPrefs().getBoolean(Constants.AUDIOFX_GLOBAL_HAS_DTS, false);
+ }
+
public boolean hasMaxxAudio() {
return mHasMaxxAudio;
}
diff --git a/src/com/cyngn/audiofx/backends/AndroidEffects.java b/src/com/cyngn/audiofx/backends/AndroidEffects.java
index bf1c423..ece7742 100644
--- a/src/com/cyngn/audiofx/backends/AndroidEffects.java
+++ b/src/com/cyngn/audiofx/backends/AndroidEffects.java
@@ -7,7 +7,7 @@ import android.media.audiofx.Virtualizer;
/**
* EffectSet which comprises standard Android effects
*/
-class AndroidEffects extends EffectSet {
+class AndroidEffects extends EffectSetWithAndroidEq {
/**
* Session-specific bassboost
diff --git a/src/com/cyngn/audiofx/backends/EffectSet.java b/src/com/cyngn/audiofx/backends/EffectSet.java
index 32d185c..b31a2b8 100644
--- a/src/com/cyngn/audiofx/backends/EffectSet.java
+++ b/src/com/cyngn/audiofx/backends/EffectSet.java
@@ -1,27 +1,20 @@
package com.cyngn.audiofx.backends;
+import android.content.Context;
import android.media.audiofx.Equalizer;
+import java.util.List;
+
/**
* Helper class representing the full complement of effects attached to one
* audio session.
*/
public abstract class EffectSet {
- /**
- * Session-specific equalizer
- */
- private final Equalizer mEqualizer;
-
- private short mEqNumPresets = -1;
- private short mEqNumBands = -1;
-
private final int mSessionId;
public EffectSet(int sessionId) {
mSessionId = sessionId;
-
- mEqualizer = new Equalizer(1000, sessionId);
}
// required effects
@@ -42,73 +35,52 @@ public abstract class EffectSet {
return false;
}
- /*
- * Take lots of care to not poke values that don't need
- * to be poked- this can cause audible pops.
- */
- private boolean mEqualizerEnabled = false;
-
- public void enableEqualizer(boolean enable) {
- if (enable != mEqualizerEnabled) {
- mEqualizerEnabled = enable;
- mEqualizer.setEnabled(enable);
- }
- }
+ public abstract void enableEqualizer(boolean enable);
- public void setEqualizerLevels(short[] levels) {
- if (mEqualizerEnabled) {
- for (short i = 0; i < levels.length; i++) {
- mEqualizer.setBandLevel(i, levels[i]);
- }
- }
- }
+ /**
+ * @param levels in decibels
+ */
+ public void setEqualizerLevelsDecibels(float[] levels) { }
- public short getNumEqualizerBands() {
- if (mEqNumBands < 0) {
- mEqNumBands = mEqualizer.getNumberOfBands();
- }
- return mEqNumBands;
- }
+ public abstract short getNumEqualizerBands();
- public void setEqualizerBandLevel(short band, short level) {
- if (mEqualizerEnabled) {
- mEqualizer.setBandLevel(band, level);
- }
- }
+ /**
+ * @param band
+ * @param level in millibels
+ */
+ public abstract void setEqualizerBandLevel(short band, float level);
- public int getEqualizerBandLevel(short band) {
- return mEqualizer.getBandLevel(band);
- }
+ /**
+ * @return level in millibels
+ */
+ public abstract int getEqualizerBandLevel(short band);
- public String getEqualizerPresetName(short preset) {
- return mEqualizer.getPresetName(preset);
- }
+ public abstract String getEqualizerPresetName(short preset);
- public void useEqualizerPreset(short preset) {
- mEqualizer.usePreset(preset);
- }
+ public abstract void useEqualizerPreset(short preset);
- public short getNumEqualizerPresets() {
- if (mEqNumPresets < 0) {
- mEqNumPresets = mEqualizer.getNumberOfPresets();
- }
- return mEqNumPresets;
- }
+ public abstract short getNumEqualizerPresets();
- public short[] getEqualizerBandLevelRange() {
- return mEqualizer.getBandLevelRange();
- }
+ public abstract short[] getEqualizerBandLevelRange();
- public int getCenterFrequency(short band) {
- return mEqualizer.getCenterFreq(band);
- }
+ /**
+ * @param band
+ * @return center frequency of the band in millihertz
+ */
+ public abstract int getCenterFrequency(short band);
public abstract void enableBassBoost(boolean enable);
+ /**
+ * @param strength with range [0-1000]
+ */
public abstract void setBassBoostStrength(short strength);
public abstract void enableVirtualizer(boolean enable);
+ /**
+ * @param strength with range [0-1000]
+ */
public abstract void setVirtualizerStrength(short strength);
public void enableReverb(boolean enable) {
@@ -123,6 +95,9 @@ public abstract class EffectSet {
return;
}
+ /**
+ * @param strength with range [0-100]
+ */
public void setTrebleBoostStrength(short strength) {
return;
}
@@ -131,9 +106,7 @@ public abstract class EffectSet {
return;
}
- public void release() {
- mEqualizer.release();
- }
+ public abstract void release();
public void disableAll() {
enableBassBoost(false);
@@ -145,4 +118,6 @@ public abstract class EffectSet {
}
public abstract int getBrand();
+
+ public void setGlobalEnabled(boolean globalEnabled) { }
}
diff --git a/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java b/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java
new file mode 100644
index 0000000..fef8f54
--- /dev/null
+++ b/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java
@@ -0,0 +1,91 @@
+package com.cyngn.audiofx.backends;
+
+import android.media.audiofx.Equalizer;
+import com.cyngn.audiofx.eq.EqUtils;
+
+/**
+ * Created by roman on 3/1/16.
+ */
+public abstract class EffectSetWithAndroidEq extends EffectSet {
+ /**
+ * Session-specific equalizer
+ */
+ private final Equalizer mEqualizer;
+
+ private short mEqNumPresets = -1;
+ private short mEqNumBands = -1;
+
+ /*
+ * Take lots of care to not poke values that don't need
+ * to be poked- this can cause audible pops.
+ */
+ private boolean mEqualizerEnabled = false;
+
+ public EffectSetWithAndroidEq(int sessionId) {
+ super(sessionId);
+ mEqualizer = new Equalizer(1000, sessionId);
+ }
+
+
+ public void enableEqualizer(boolean enable) {
+ if (enable != mEqualizerEnabled) {
+ mEqualizerEnabled = enable;
+ mEqualizer.setEnabled(enable);
+ }
+ }
+
+ @Override
+ public void setEqualizerLevelsDecibels(float[] levels) {
+ if (mEqualizerEnabled) {
+ final short[] equalizerLevels = EqUtils.convertDecibelsToMillibelsInShorts(levels);
+ for (short i = 0; i < equalizerLevels.length; i++) {
+ mEqualizer.setBandLevel(i, equalizerLevels[i]);
+ }
+ }
+ }
+
+ public short getNumEqualizerBands() {
+ if (mEqNumBands < 0) {
+ mEqNumBands = mEqualizer.getNumberOfBands();
+ }
+ return mEqNumBands;
+ }
+
+ @Override
+ public void setEqualizerBandLevel(short band, float level) {
+ if (mEqualizerEnabled) {
+ mEqualizer.setBandLevel(band, (short) level);
+ }
+ }
+
+ public int getEqualizerBandLevel(short band) {
+ return mEqualizer.getBandLevel(band);
+ }
+
+ public String getEqualizerPresetName(short preset) {
+ return mEqualizer.getPresetName(preset);
+ }
+
+ public void useEqualizerPreset(short preset) {
+ mEqualizer.usePreset(preset);
+ }
+
+ public short getNumEqualizerPresets() {
+ if (mEqNumPresets < 0) {
+ mEqNumPresets = mEqualizer.getNumberOfPresets();
+ }
+ return mEqNumPresets;
+ }
+ public short[] getEqualizerBandLevelRange() {
+ return mEqualizer.getBandLevelRange();
+ }
+
+ public int getCenterFrequency(short band) {
+ return mEqualizer.getCenterFreq(band);
+ }
+
+ @Override
+ public void release() {
+ mEqualizer.release();
+ }
+}
diff --git a/src/com/cyngn/audiofx/backends/EffectsFactory.java b/src/com/cyngn/audiofx/backends/EffectsFactory.java
index e0aeaaf..0775ec0 100644
--- a/src/com/cyngn/audiofx/backends/EffectsFactory.java
+++ b/src/com/cyngn/audiofx/backends/EffectsFactory.java
@@ -1,5 +1,10 @@
package com.cyngn.audiofx.backends;
+import android.content.Context;
+import com.cyngn.audiofx.Constants;
+
+import java.io.File;
+
/**
* Creates an EffectSet appropriate for the current device
*
@@ -8,15 +13,19 @@ package com.cyngn.audiofx.backends;
*/
public class EffectsFactory {
- public static final int ANDROID = 0;
+ private static Boolean sHasDts;
+ public static final int ANDROID = 0;
public static final int MAXXAUDIO = 1;
-
public static final int DTS = 2;
- public static EffectSet createEffectSet(int sessionId) {
+ public static EffectSet createEffectSet(Context context, int sessionId) {
- // try MaxxAudio first, this will throw an exception if unavailable
+ if (hasDts()) {
+ return new DtsEffects(context, sessionId);
+ }
+
+ // try MaxxAudio next, this will throw an exception if unavailable
MaxxAudioEffects fx = null;
try {
fx = new MaxxAudioEffects(sessionId);
@@ -31,4 +40,12 @@ public class EffectsFactory {
return new AndroidEffects(sessionId);
}
+
+ public static boolean hasDts() {
+ if (sHasDts == null) {
+ sHasDts = new File("***REMOVED***").exists();
+ }
+ return sHasDts;
+ }
+
}
diff --git a/src/com/cyngn/audiofx/eq/EqSwipeController.java b/src/com/cyngn/audiofx/eq/EqSwipeController.java
index 89d6a90..637be6e 100644
--- a/src/com/cyngn/audiofx/eq/EqSwipeController.java
+++ b/src/com/cyngn/audiofx/eq/EqSwipeController.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
+import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.LinearLayout;
@@ -15,21 +16,9 @@ import com.cyngn.audiofx.preset.InfiniteViewPager;
public class EqSwipeController extends LinearLayout {
/*
- * minimum amount of time we wait before allowing user to "attach" to a bar, to allow
- * for swiping
- */
- private static final int SWIPE_THRESH = 100;
-
- /*
- * maximum amount of time in ms, from downtime, which will allow bars to be grabbed.
- * basically, when the user goes > this threshold swiping, we ignore bar "attach" events
- */
- private static final int BAR_MAX_THRESH = 1000;
-
- /*
* x velocity max for deciding whether to try to grab a bar
*/
- private static final int X_VELOCITY_THRESH = 20;
+ private static int X_VELOCITY_THRESH = 20;
EqContainerView mEq;
InfiniteViewPager mPager;
@@ -40,6 +29,8 @@ public class EqSwipeController extends LinearLayout {
private ViewGroup mControls;
private final EqualizerManager mEqManager;
+ private float mDownPositionX;
+ private float mDownPositionY;
public EqSwipeController(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -76,6 +67,8 @@ public class EqSwipeController extends LinearLayout {
switch (action) {
case MotionEvent.ACTION_DOWN:
+ mDownPositionX = event.getRawX();
+ mDownPositionY = event.getRawY();
mDownTime = System.currentTimeMillis();
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
@@ -91,14 +84,20 @@ public class EqSwipeController extends LinearLayout {
float xVelocity = mVelocityTracker.getXVelocity(pointerId);
float yVelocity = mVelocityTracker.getYVelocity(pointerId);
- if (!mBarActive
- && !mEqManager.isChangingPresets()
- && System.currentTimeMillis() - mDownTime > SWIPE_THRESH
- && System.currentTimeMillis() - mDownTime < BAR_MAX_THRESH
- && Math.abs(xVelocity) < X_VELOCITY_THRESH
- && !mEqManager.isEqualizerLocked()) {
- mBarActive = true;
- mBar = mEq.startTouchingBarUnder(event);
+ final float deltaX = mDownPositionX - event.getRawX();
+ final float deltaY = mDownPositionY - event.getRawY();
+ final float distanceSquared = deltaX * deltaX + deltaY * deltaY;
+
+ final ViewConfiguration viewConfiguration = ViewConfiguration.get(getContext());
+ final int touchSlop = viewConfiguration.getScaledTouchSlop();
+
+ if (!mBarActive && !mEqManager.isChangingPresets()
+ && !mEqManager.isEqualizerLocked()
+ && Math.abs(xVelocity) < X_VELOCITY_THRESH) {
+ if (distanceSquared < touchSlop * touchSlop) {
+ mBarActive = true;
+ mBar = mEq.startTouchingBarUnder(event);
+ }
}
}
diff --git a/src/com/cyngn/audiofx/eq/EqUtils.java b/src/com/cyngn/audiofx/eq/EqUtils.java
index 4659c3b..30d546c 100644
--- a/src/com/cyngn/audiofx/eq/EqUtils.java
+++ b/src/com/cyngn/audiofx/eq/EqUtils.java
@@ -14,29 +14,84 @@ public class EqUtils {
private static final String TAG = EqUtils.class.getSimpleName();
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ private static final String DEFAULT_DELIMITER = ";";
public static String getZeroedBandsString(int length) {
- StringBuffer buff = new StringBuffer();
+ return getZeroedBandsString(length, DEFAULT_DELIMITER);
+ }
+
+ public static float[] stringBandsToFloats(String input) {
+ return stringBandsToFloats(input, DEFAULT_DELIMITER);
+ }
+
+ public static String floatLevelsToString(float[] levels) {
+ return floatLevelsToString(levels, DEFAULT_DELIMITER);
+ }
+
+ public static short[] stringBandsToShorts(String input) {
+ return stringBandsToShorts(input, DEFAULT_DELIMITER);
+ }
+
+ public static String shortLevelsToString(short[] levels) {
+ return shortLevelsToString(levels, DEFAULT_DELIMITER);
+ }
+
+ public static String getZeroedBandsString(int length, final String delimiter) {
+ StringBuilder buff = new StringBuilder();
for (int i = 0; i < length; i++) {
- buff.append("0;");
+ buff.append("0").append(delimiter);
}
buff.deleteCharAt(buff.length() - 1);
return buff.toString();
}
- public static String floatLevelsToString(float[] levels) {
+ public static String floatLevelsToString(float[] levels, final String delimiter) {
// save
StringBuilder builder = new StringBuilder();
for (int i = 0; i < levels.length; i++) {
builder.append(levels[i]);
- builder.append(";");
+ builder.append(delimiter);
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
- public static short[] stringBandsToShorts(String input) {
- String[] levels = input.split(";");
+
+ public static String shortLevelsToString(short[] levels, final String delimiter) {
+ // save
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < levels.length; i++) {
+ builder.append(levels[i]);
+ builder.append(delimiter);
+ }
+ builder.deleteCharAt(builder.length() - 1);
+ return builder.toString();
+ }
+
+ public static String intLevelsToString(int[] levels, final String delimiter) {
+ // save
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < levels.length; i++) {
+ builder.append(levels[i]);
+ builder.append(delimiter);
+ }
+ builder.deleteCharAt(builder.length() - 1);
+ return builder.toString();
+ }
+
+ public static <T> String levelsToString(T[] levels, final String delimiter) {
+ // save
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < levels.length; i++) {
+ builder.append(levels[i]);
+ builder.append(delimiter);
+ }
+ builder.deleteCharAt(builder.length() - 1);
+ return builder.toString();
+ }
+
+ public static short[] stringBandsToShorts(String input, final String delimiter) {
+ String[] levels = input.split(delimiter);
short[] equalizerLevels = new short[levels.length];
for (int i = 0; i < levels.length; i++) {
@@ -45,8 +100,9 @@ public class EqUtils {
return equalizerLevels;
}
- public static float[] stringBandsToFloats(String input) {
- String[] levels = input.split(";");
+
+ public static float[] stringBandsToFloats(String input, final String delimiter) {
+ String[] levels = input.split(delimiter);
float[] equalizerLevels = new float[levels.length];
for (int i = 0; i < levels.length; i++) {
diff --git a/src/com/cyngn/audiofx/fragment/AudioFxFragment.java b/src/com/cyngn/audiofx/fragment/AudioFxFragment.java
index ce97fa9..377570a 100644
--- a/src/com/cyngn/audiofx/fragment/AudioFxFragment.java
+++ b/src/com/cyngn/audiofx/fragment/AudioFxFragment.java
@@ -36,8 +36,7 @@ import com.cyngn.audiofx.widget.InterceptableLinearLayout;
import java.util.List;
import java.util.Map;
-public class AudioFxFragment extends Fragment implements ActivityMusic.ActivityStateListener,
- StateCallbacks.DeviceChangedCallback {
+public class AudioFxFragment extends Fragment implements StateCallbacks.DeviceChangedCallback {
private static final String TAG = AudioFxFragment.class.getSimpleName();
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -67,8 +66,6 @@ public class AudioFxFragment extends Fragment implements ActivityMusic.ActivityS
private MasterConfigControl mConfig;
private EqualizerManager mEqManager;
- private int mCurrentMode;
-
private AudioDeviceInfo mSystemDevice;
private AudioDeviceInfo mUserSelection;
@@ -92,9 +89,6 @@ public class AudioFxFragment extends Fragment implements ActivityMusic.ActivityS
mDisabledColor = getResources().getColor(R.color.disabled_eq);
setHasOptionsMenu(true);
- ((ActivityMusic) getActivity()).addToggleListener(this);
-
- mCurrentMode = ((ActivityMusic) getActivity()).getCurrentMode();
}
@Override
@@ -107,13 +101,11 @@ public class AudioFxFragment extends Fragment implements ActivityMusic.ActivityS
@Override
public void onDestroy() {
super.onDestroy();
- ((ActivityMusic) getActivity()).removeToggleListener(this);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
- mCurrentMode = ((ActivityMusic) getActivity()).getCurrentMode();
}
private boolean showFragments() {
@@ -426,9 +418,6 @@ public class AudioFxFragment extends Fragment implements ActivityMusic.ActivityS
@Override
public void onGlobalDeviceToggle(final boolean checked) {
- if (mCurrentMode != ActivityMusic.CURRENT_MODE_AUDIOFX) {
- return;
- }
final CompoundButton buttonView = getGlobalSwitch();
final Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {
@Override
@@ -466,11 +455,6 @@ public class AudioFxFragment extends Fragment implements ActivityMusic.ActivityS
}
};
- @Override
- public void onModeChanged(int mode) {
- mCurrentMode = mode;
- }
-
public static class ColorUpdateListener implements ValueAnimator.AnimatorUpdateListener {
final AudioFxBaseFragment mFrag;
diff --git a/src/com/cyngn/audiofx/fragment/DTSFragment.java b/src/com/cyngn/audiofx/fragment/DTSFragment.java
deleted file mode 100644
index 9343333..0000000
--- a/src/com/cyngn/audiofx/fragment/DTSFragment.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.cyngn.audiofx.fragment;
-
-import android.annotation.Nullable;
-import android.app.Activity;
-import android.app.Fragment;
-import android.media.AudioDeviceInfo;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CompoundButton;
-import android.widget.ImageView;
-
-import com.cyngn.audiofx.R;
-import com.cyngn.audiofx.activity.ActivityMusic;
-import com.cyngn.audiofx.activity.MasterConfigControl;
-import com.cyngn.audiofx.activity.StateCallbacks;
-import com.cyngn.audiofx.service.AudioFxService;
-import com.cyngn.audiofx.service.DtsControl;
-
-public class DTSFragment extends Fragment implements ActivityMusic.ActivityStateListener, StateCallbacks.DeviceChangedCallback {
-
- private static final String TAG = DTSFragment.class.getSimpleName();
- private static final boolean DEBUG = false;
-
- private ImageView mLogo;
- private boolean mGlobalToggleEnabled;
- private DtsControl mDts;
- private MasterConfigControl mConfig;
- private int mMode;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- if (DEBUG) Log.i(TAG, "onCreate() called with "
- + "savedInstanceState = [" + savedInstanceState + "]");
- super.onCreate(savedInstanceState);
- mDts = new DtsControl(getActivity());
- ((ActivityMusic)getActivity()).addToggleListener(this);
- MasterConfigControl.getInstance(getActivity()).getCallbacks().addDeviceChangedCallback(this);
-
- mMode = ((ActivityMusic) getActivity()).getCurrentMode();
- mConfig = MasterConfigControl.getInstance(getActivity());
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mMode = ((ActivityMusic) getActivity()).getCurrentMode();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- MasterConfigControl.getInstance(getActivity()).getCallbacks().removeDeviceChangedCallback(this);
- ((ActivityMusic)getActivity()).removeToggleListener(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- mConfig.bindService();
- mConfig.setAutoBindToService(true);
-
- final boolean dtsEnabledByUser = mDts.isUserEnabled();
- ((ActivityMusic)getActivity())
- .setGlobalToggleChecked(mGlobalToggleEnabled = dtsEnabledByUser);
- updateLogo();
-
- final boolean dtsEnabled = mDts.isDtsEnabled();
- if (DEBUG) Log.i(TAG, "onResume() dtsEnabledByUser=" + dtsEnabledByUser
- + ", dtsEnabled=" + dtsEnabled);
- }
-
- @Override
- public void onPause() {
- if (DEBUG) Log.i(TAG, "onPause() called with " + "");
- super.onPause();
-
- mConfig.setAutoBindToService(false);
- mConfig.unbindService();
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
- Bundle savedInstanceState) {
- View root = inflater.inflate(R.layout.fragment_dts, container, false);
-
- return root;
- }
-
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- mLogo = (ImageView) view.findViewById(R.id.logo);
- updateLogo();
- }
-
- private void updateLogo() {
- if (mLogo != null) {
- mLogo.setImageResource(mGlobalToggleEnabled
- ? R.drawable.logo_dts_fc : R.drawable.logo_dts_1c);
- mLogo.animate().cancel();
- mLogo.animate().alpha(mGlobalToggleEnabled ? 1 : .6f);
- }
- }
-
- @Override
- public void onModeChanged(int mode) {
- mMode = mode;
- }
-
- @Override
- public void onDeviceChanged(AudioDeviceInfo device, boolean userChange) {
-
- }
-
- @Override
- public void onGlobalDeviceToggle(boolean checked) {
- if (DEBUG) Log.i(TAG, "onGlobalToggleChanged() called with "
- + "checked = [" + checked + "]");
- if (mMode != ActivityMusic.CURRENT_MODE_DTS) {
- Log.w(TAG, "not visible, ignoring toggle change");
- // not interested in this update
- return;
- }
-
- mGlobalToggleEnabled = checked;
- updateLogo();
-
- mDts.setUserEnabled(checked);
- mConfig.updateService(AudioFxService.ALL_CHANGED);
- }
-}
diff --git a/src/com/cyngn/audiofx/knobs/KnobCommander.java b/src/com/cyngn/audiofx/knobs/KnobCommander.java
index efce92d..657e78d 100644
--- a/src/com/cyngn/audiofx/knobs/KnobCommander.java
+++ b/src/com/cyngn/audiofx/knobs/KnobCommander.java
@@ -66,7 +66,7 @@ public class KnobCommander {
}
public boolean hasTreble() {
- return mConfig.hasMaxxAudio();
+ return mConfig.hasMaxxAudio() || mConfig.hasDts();
}
public boolean hasVirtualizer() {
diff --git a/src/com/cyngn/audiofx/knobs/KnobContainer.java b/src/com/cyngn/audiofx/knobs/KnobContainer.java
index 0387508..3cf7d70 100644
--- a/src/com/cyngn/audiofx/knobs/KnobContainer.java
+++ b/src/com/cyngn/audiofx/knobs/KnobContainer.java
@@ -334,12 +334,17 @@ public class KnobContainer extends LinearLayout
}
final boolean speaker = device.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER;
final boolean maxxAudio = MasterConfigControl.getInstance(mContext).hasMaxxAudio();
+ final boolean dts = MasterConfigControl.getInstance(mContext).hasDts();
+ final boolean effectsEnabled = (maxxAudio && !speaker) || dts;
- mKnobCommander.updateTrebleKnob(mTrebleKnob, true); // maxx audio only knob for now
- mKnobCommander.updateBassKnob(mBassKnob, maxxAudio || !speaker);
- mKnobCommander.updateVirtualizerKnob(mVirtualizerKnob, maxxAudio || !speaker);
+ mKnobCommander.updateTrebleKnob(mTrebleKnob, effectsEnabled);
+ mKnobCommander.updateBassKnob(mBassKnob, effectsEnabled);
+ mKnobCommander.updateVirtualizerKnob(mVirtualizerKnob, effectsEnabled);
if (maxxAudio) {
- // speaker? disable virtual
+ // speaker? hide virtualizer
+ setKnobVisible(KnobCommander.KNOB_VIRTUALIZER, !speaker);
+ } else if (dts) {
+ // same for DTS
setKnobVisible(KnobCommander.KNOB_VIRTUALIZER, !speaker);
} else {
setKnobVisible(KnobCommander.KNOB_VIRTUALIZER, true);
diff --git a/src/com/cyngn/audiofx/service/AudioFxService.java b/src/com/cyngn/audiofx/service/AudioFxService.java
index d36d3f9..88431b7 100644
--- a/src/com/cyngn/audiofx/service/AudioFxService.java
+++ b/src/com/cyngn/audiofx/service/AudioFxService.java
@@ -56,7 +56,6 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-import android.os.UserHandle;
import android.support.v4.content.LocalBroadcastManager;
import android.util.ArrayMap;
import android.util.Log;
@@ -130,7 +129,6 @@ public class AudioFxService extends Service {
Handler mBackgroundHandler;
AudioOutputChangeListener mDeviceListener;
private Locale mLastLocale;
- DtsControl mDts;
private AudioDeviceInfo mCurrentDevice;
private AudioDeviceInfo mPreviousDevice;
@@ -171,7 +169,7 @@ public class AudioFxService extends Service {
}
}
- public void setOverrideLevels(short band, short level) {
+ public void setOverrideLevels(short band, float level) {
if (checkService()) {
mService.get().setOverrideLevels(band, level);
}
@@ -206,8 +204,8 @@ public class AudioFxService extends Service {
}
}
- private void setOverrideLevels(short band, short level) {
- mBackgroundHandler.obtainMessage(MSG_BG_UPDATE_EQ_OVERRIDE, band, level).sendToTarget();
+ private void setOverrideLevels(short band, float level) {
+ mBackgroundHandler.obtainMessage(MSG_BG_UPDATE_EQ_OVERRIDE, band, 0, level).sendToTarget();
}
private String getCurrentDeviceIdentifier() {
@@ -222,7 +220,8 @@ public class AudioFxService extends Service {
case MSG_ADD_SESSION:
if (!mAudioSessions.containsKey(msg.arg1)) {
if (DEBUG) Log.d(TAG, "added new EffectSet for sessionId=" + msg.arg1);
- mAudioSessions.put(msg.arg1, EffectsFactory.createEffectSet(msg.arg1));
+ mAudioSessions.put(msg.arg1, EffectsFactory.createEffectSet(
+ getApplicationContext(), msg.arg1));
}
mMostRecentSessionId = msg.arg1;
if (DEBUG) Log.d(TAG, "new most recent sesssionId=" + msg.arg1);
@@ -253,19 +252,6 @@ public class AudioFxService extends Service {
break;
case MSG_UPDATE_DSP:
- if (mDts.hasDts()) {
- if (mDts.shouldUseDts()) {
- if (DEBUG) Log.d(TAG, "forcing DTS effects");
- disableAllEffects();
-
- mDts.setEnabled(mDts.isUserEnabled());
- break;
- } else {
- if (DEBUG) Log.d(TAG, "not using DTS");
- mDts.setEnabled(false);
- }
- }
-
final String mode = getCurrentDeviceIdentifier();
if (DEBUG) Log.i(TAG, "Updating to configuration: " + mode);
// immediately update most recent session
@@ -324,7 +310,7 @@ public class AudioFxService extends Service {
switch (msg.what) {
case MSG_BG_UPDATE_EQ_OVERRIDE:
if (mMostRecentSessionId != -1) {
- updateEqBand((short) msg.arg1, (short) msg.arg2,
+ updateEqBand((short) msg.arg1, (Float) msg.obj,
mAudioSessions.get(mMostRecentSessionId));
}
break;
@@ -352,8 +338,6 @@ public class AudioFxService extends Service {
mHandler = new Handler(audioLooper, new AudioServiceHandler());
mBackgroundHandler = new Handler(backgroundLooper, new AudioBackgroundHandler());
- mDts = new DtsControl(this);
-
mDeviceListener = new AudioOutputChangeListener(this, mHandler) {
@Override
public void onAudioOutputChanged(boolean firstChange, AudioDeviceInfo outputDevice) {
@@ -497,7 +481,7 @@ public class AudioFxService extends Service {
* Temporarily override a band level. {@link #updateDsp(SharedPreferences, EffectSet)} will take
* care of overriding the preset value when a preset is selected
*/
- private synchronized void updateEqBand(short band, short level, EffectSet effectSet) {
+ private synchronized void updateEqBand(short band, float level, EffectSet effectSet) {
if (effectSet != null) {
effectSet.setEqualizerBandLevel(band, level);
}
@@ -527,6 +511,7 @@ public class AudioFxService extends Service {
final boolean globalEnabled = prefs.getBoolean(DEVICE_AUDIOFX_GLOBAL_ENABLE,
DEVICE_DEFAULT_GLOBAL_ENABLE);
+ session.setGlobalEnabled(globalEnabled);
// bass
try {
@@ -559,12 +544,7 @@ public class AudioFxService extends Service {
String savedPreset = prefs.getString(DEVICE_AUDIOFX_EQ_PRESET_LEVELS, null);
if (savedPreset != null) {
- short[] equalizerLevels = EqUtils.convertDecibelsToMillibelsInShorts(
- EqUtils.stringBandsToFloats(savedPreset));
-
- if (equalizerLevels != null && globalEnabled) {
- session.setEqualizerLevels(equalizerLevels);
- }
+ session.setEqualizerLevelsDecibels(EqUtils.stringBandsToFloats(savedPreset));
}
}
} catch (Exception e) {
@@ -640,7 +620,7 @@ public class AudioFxService extends Service {
if (prefs.getBoolean(SAVED_DEFAULTS, false) && !needsPrefsUpdate) {
return;
}
- EffectSet temp = EffectsFactory.createEffectSet(0);
+ EffectSet temp = EffectsFactory.createEffectSet(getApplicationContext(), 0);
final int numBands = temp.getNumEqualizerBands();
final int numPresets = temp.getNumEqualizerPresets();
@@ -683,13 +663,16 @@ public class AudioFxService extends Service {
presetBands.deleteCharAt(presetBands.length() - 1);
editor.putString(EQUALIZER_PRESET + i, presetBands.toString());
}
- presetNames.deleteCharAt(presetNames.length() - 1);
+ if (presetNames.length() > 0) {
+ presetNames.deleteCharAt(presetNames.length() - 1);
+ }
editor.putString(EQUALIZER_PRESET_NAMES, presetNames.toString());
editor.putBoolean(AUDIOFX_GLOBAL_HAS_VIRTUALIZER, temp.hasVirtualizer());
editor.putBoolean(AUDIOFX_GLOBAL_HAS_BASSBOOST, temp.hasBassBoost());
editor.putBoolean(AUDIOFX_GLOBAL_HAS_MAXXAUDIO, temp.getBrand() == EffectsFactory.MAXXAUDIO);
+ editor.putBoolean(AUDIOFX_GLOBAL_HAS_DTS, temp.getBrand() == EffectsFactory.DTS);
temp.release();
editor.commit();
diff --git a/src/com/cyngn/audiofx/service/AudioOutputChangeListener.java b/src/com/cyngn/audiofx/service/AudioOutputChangeListener.java
index e1811d3..a96b67a 100644
--- a/src/com/cyngn/audiofx/service/AudioOutputChangeListener.java
+++ b/src/com/cyngn/audiofx/service/AudioOutputChangeListener.java
@@ -13,7 +13,7 @@ import java.util.List;
import static android.media.AudioDeviceInfo.*;
-abstract class AudioOutputChangeListener extends AudioDeviceCallback {
+public abstract class AudioOutputChangeListener extends AudioDeviceCallback {
private static final String TAG = "AudioFx-" + AudioOutputChangeListener.class.getSimpleName();