summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2014-04-22 16:45:15 -0700
committerRoman Birg <roman@cyngn.com>2014-04-23 11:23:30 -0700
commitdbc263f1fd12685751ab41870b96de96503a9b1e (patch)
tree2952ecf16df0b0304d1c2871d2a81308205cd5ed /src
parent22b85f14f7b565cabc2a9bcde0012d2a54e1b467 (diff)
downloadandroid_packages_apps_AudioFX-dbc263f1fd12685751ab41870b96de96503a9b1e.tar.gz
android_packages_apps_AudioFX-dbc263f1fd12685751ab41870b96de96503a9b1e.tar.bz2
android_packages_apps_AudioFX-dbc263f1fd12685751ab41870b96de96503a9b1e.zip
AudioFX: equilizer UI refresh
Change-Id: Iee14f8aedb5462020793d572ca829a915fe778fb Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'src')
-rw-r--r--src/org/cyanogenmod/audiofx/ActivityMusic.java13
-rw-r--r--src/org/cyanogenmod/audiofx/widget/EqualizerSurface.java96
-rw-r--r--src/org/cyanogenmod/audiofx/widget/Knob.java16
3 files changed, 72 insertions, 53 deletions
diff --git a/src/org/cyanogenmod/audiofx/ActivityMusic.java b/src/org/cyanogenmod/audiofx/ActivityMusic.java
index 97dae56..3533f13 100644
--- a/src/org/cyanogenmod/audiofx/ActivityMusic.java
+++ b/src/org/cyanogenmod/audiofx/ActivityMusic.java
@@ -391,8 +391,16 @@ public class ActivityMusic extends Activity {
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_VERTICAL | Gravity.END);
- ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM);
+
ab.setCustomView(mToggleSwitch, params);
+ ab.setHomeButtonEnabled(true);
+ ab.setDisplayHomeAsUpEnabled(true);
+ ab.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP
+ | ActionBar.DISPLAY_SHOW_CUSTOM
+ | ActionBar.DISPLAY_SHOW_TITLE
+ | ActionBar.DISPLAY_SHOW_HOME
+ | ActionBar.DISPLAY_USE_LOGO
+ );
}
private final String localizePresetName(final String name) {
@@ -631,6 +639,7 @@ public class ActivityMusic extends Activity {
public void onItemSelected(int position) {
mEQPreset = position;
if (!mEQAnimatingToUserPos) {
+ Log.e("ROMAN", "equilizerSetPreset()");
equalizerSetPreset(position);
} else if (mEQAnimatingToUserPos && mEQPreset == mEQPresetUserPos) {
mEQAnimatingToUserPos = false;
@@ -693,7 +702,7 @@ public class ActivityMusic extends Activity {
mCallingPackageName, mAudioSession, ControlPanelEffect.Key.eq_band_level);
for (short band = 0; band < mNumberEqualizerBands; band++) {
final int level = bandLevels[band];
- mEqualizerSurface.setBand(band, (float)level / 100.0f);
+ mEqualizerSurface.setBand(band, (float) level / 100.0f);
}
}
diff --git a/src/org/cyanogenmod/audiofx/widget/EqualizerSurface.java b/src/org/cyanogenmod/audiofx/widget/EqualizerSurface.java
index 5e724ff..b23bc30 100644
--- a/src/org/cyanogenmod/audiofx/widget/EqualizerSurface.java
+++ b/src/org/cyanogenmod/audiofx/widget/EqualizerSurface.java
@@ -30,12 +30,12 @@ import android.graphics.Path;
import android.graphics.Shader;
import android.graphics.Typeface;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceView;
import android.view.View;
import org.cyanogenmod.audiofx.R;
-import org.cyanogenmod.audiofx.widget.EqualizerSurface.BandUpdatedListener;
import java.util.Arrays;
@@ -56,11 +56,13 @@ public class EqualizerSurface extends SurfaceView {
private float[] mLevels = new float[mNumBands];
private float[] mCenterFreqs = new float[mNumBands];
- private final Paint mWhite, mGridLines, mControlBarText, mControlBar;
+ private final Paint mWhite, mControlBarText, mControlBar;
private final Paint mFrequencyResponseBg;
private final Paint mFrequencyResponseHighlight, mFrequencyResponseHighlight2;
private BandUpdatedListener mBandUpdatedListener;
+ int mBarWidth;
+ int mTextSize;
public EqualizerSurface(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
@@ -69,24 +71,22 @@ public class EqualizerSurface extends SurfaceView {
mWhite = new Paint();
mWhite.setColor(getResources().getColor(R.color.white));
mWhite.setStyle(Style.STROKE);
- mWhite.setTextSize(context.getResources().getDimensionPixelSize(R.dimen.eq_label_text_size));
+ mWhite.setTextSize(mTextSize = context.getResources().getDimensionPixelSize(R.dimen.eq_label_text_size));
mWhite.setTypeface(Typeface.DEFAULT_BOLD);
mWhite.setAntiAlias(true);
- mGridLines = new Paint();
- mGridLines.setColor(getResources().getColor(R.color.grid_lines));
- mGridLines.setStyle(Style.STROKE);
-
mControlBarText = new Paint(mWhite);
mControlBarText.setTextAlign(Paint.Align.CENTER);
mControlBarText.setShadowLayer(2, 0, 0, getResources().getColor(R.color.cb));
mControlBar = new Paint();
- mControlBar.setStyle(Style.STROKE);
+ mControlBar.setStyle(Style.FILL);
mControlBar.setColor(getResources().getColor(R.color.cb));
mControlBar.setAntiAlias(true);
- mControlBar.setStrokeCap(Cap.ROUND);
+ mControlBar.setStrokeCap(Cap.SQUARE);
mControlBar.setShadowLayer(2, 0, 0, getResources().getColor(R.color.black));
+ mBarWidth = context.getResources().getDimensionPixelSize(R.dimen.eq_bar_width);
+// mControlBar.setStrokeWidth(mBarWidth);
mFrequencyResponseBg = new Paint();
mFrequencyResponseBg.setStyle(Style.FILL);
@@ -179,11 +179,9 @@ public class EqualizerSurface extends SurfaceView {
final Resources res = getResources();
mWidth = right - left;
+// mHeight = bottom - top + (int) mWhite.getTextSize();
mHeight = bottom - top;
- float barWidth = res.getDimensionPixelSize(R.dimen.eq_bar_width);
- mControlBar.setStrokeWidth(barWidth);
-
/**
* red > +7
* yellow > +3
@@ -192,8 +190,8 @@ public class EqualizerSurface extends SurfaceView {
* holo_blue_dark < 3
*/
int[] responseColors = new int[] {
- res.getColor(R.color.eq_red),
res.getColor(R.color.eq_yellow),
+ res.getColor(R.color.eq_green),
res.getColor(R.color.eq_holo_bright),
res.getColor(R.color.eq_holo_blue),
res.getColor(R.color.eq_holo_dark)
@@ -202,19 +200,19 @@ public class EqualizerSurface extends SurfaceView {
0, 0.2f, 0.45f, 0.6f, 1f
};
- mFrequencyResponseBg.setShader(new LinearGradient(0, 0, 0, mHeight,
+ mFrequencyResponseBg.setShader(new LinearGradient(0, 0, 0, mHeight - mTextSize,
responseColors, responsePositions, Shader.TileMode.CLAMP));
int[] barColors = new int[] {
- res.getColor(R.color.cb_shader),
- res.getColor(R.color.cb_shader_alpha)
+ res.getColor(R.color.cb_shader),
+ res.getColor(R.color.cb_shader_alpha)
};
float[] barPositions = new float[] {
- 0, 1
+ 0.95f, 1f
};
- mControlBar.setShader(new LinearGradient(0, 0, 0, mHeight,
- barColors, barPositions, Shader.TileMode.CLAMP));
+// mControlBar.setShader(new LinearGradient(0, 0, 0, mHeight - mTextSize,
+// barColors, barPositions, Shader.TileMode.CLAMP));
}
public void setBand(int i, float value) {
@@ -249,8 +247,9 @@ public class EqualizerSurface extends SurfaceView {
Path freqResponse = new Path();
Complex[] zn = new Complex[biquads.length];
- for (int i = 0; i < 71; i ++) {
- double freq = reverseProjectX(i / 70f);
+ int passes = 140;
+ for (int i = 0; i < passes+1; i ++) {
+ double freq = reverseProjectX(i / (float)passes);
double omega = freq / SAMPLING_RATE * Math.PI * 2;
Complex z = new Complex(Math.cos(omega), Math.sin(omega));
@@ -261,11 +260,11 @@ public class EqualizerSurface extends SurfaceView {
zn[j] = biquads[j].evaluateTransfer(z);
lin *= zn[j].rho();
}
-
+
/* Magnitude response, dB */
double dB = lin2dB(lin);
float x = projectX(freq) * mWidth;
- float y = projectY(dB) * mHeight;
+ float y = projectY(dB) * (mHeight - mTextSize);
/* Set starting point at first point */
if (i == 0) {
@@ -278,46 +277,55 @@ public class EqualizerSurface extends SurfaceView {
Path freqResponseBg = new Path();
freqResponseBg.addPath(freqResponse);
freqResponseBg.offset(0, -4);
- freqResponseBg.lineTo(mWidth, mHeight);
- freqResponseBg.lineTo(0, mHeight);
+ freqResponseBg.lineTo(mWidth, mHeight - mTextSize);
+ freqResponseBg.lineTo(0, mHeight - mTextSize);
freqResponseBg.close();
canvas.drawPath(freqResponseBg, mFrequencyResponseBg);
- canvas.drawPath(freqResponse, mFrequencyResponseHighlight);
- canvas.drawPath(freqResponse, mFrequencyResponseHighlight2);
+// canvas.drawPath(freqResponse, mFrequencyResponseHighlight);
+// canvas.drawPath(freqResponse, mFrequencyResponseHighlight2);
/* draw vertical lines */
- for (float freq = mMinFreq; freq < mMaxFreq;) {
- float x = projectX(freq) * mWidth;
- canvas.drawLine(x, 0, x, mHeight - 1, mGridLines);
- if (freq < 100) {
- freq += 10;
- } else if (freq < 1000) {
- freq += 100;
- } else if (freq < 10000) {
- freq += 1000;
- } else {
- freq += 10000;
- }
- }
+// for (float freq = mMinFreq; freq < mMaxFreq;) {
+// float x = projectX(freq) * mWidth;
+// canvas.drawLine(x, 0, x, mHeight - 1, mGridLines);
+// if (freq < 100) {
+// freq += 10;
+// } else if (freq < 1000) {
+// freq += 100;
+// } else if (freq < 10000) {
+// freq += 1000;
+// } else {
+// freq += 10000;
+// }
+// }
/* draw horizontal lines */
for (float dB = mMinDB + 3; dB <= mMaxDB - 3; dB += 3) {
float y = projectY(dB) * mHeight;
- canvas.drawLine(0, y, mWidth - 1, y, mGridLines);
+// canvas.drawLine(0, y, mWidth - 1, y, mGridLines);
canvas.drawText(String.format("%+d", (int)dB), 1, (y - 1), mWhite);
}
for (int i = 0; i < mNumBands; i ++) {
float freq = mCenterFreqs[i];
float x = projectX(freq) * mWidth;
- float y = projectY(mLevels[i]) * mHeight;
+ float y = projectY(mLevels[i]) * (mHeight - mTextSize);
String frequencyText = String.format(freq < 1000 ? "%.0f" : "%.0fk",
freq < 1000 ? freq : freq / 1000);
- canvas.drawLine(x, mHeight, x, y, mControlBar);
- canvas.drawText(String.format("%+1.1f", mLevels[i]), x, mHeight - 2, mControlBarText);
+ int targetHeight = (mHeight - mTextSize);
+
+ int halfX = mBarWidth/2;
+ if (y > targetHeight) {
+ int diff = (int) Math.abs(targetHeight - y);
+ canvas.drawRect(x-halfX, y+diff, x+halfX, targetHeight, mControlBar);
+ } else {
+ canvas.drawRect(x-halfX, y, x+halfX, targetHeight, mControlBar);
+ }
+
canvas.drawText(frequencyText, x, mWhite.getTextSize(), mControlBarText);
+ canvas.drawText(String.format("%+1.1f", mLevels[i]), x, mHeight, mControlBarText);
}
}
diff --git a/src/org/cyanogenmod/audiofx/widget/Knob.java b/src/org/cyanogenmod/audiofx/widget/Knob.java
index 874d965..b813ff1 100644
--- a/src/org/cyanogenmod/audiofx/widget/Knob.java
+++ b/src/org/cyanogenmod/audiofx/widget/Knob.java
@@ -49,12 +49,12 @@ import java.lang.Math;
import org.cyanogenmod.audiofx.R;
public class Knob extends FrameLayout {
- private static final int STROKE_WIDTH = 6;
+ private static final int STROKE_WIDTH = 35;
private static final float TEXT_SIZE = 0.20f;
private static final float TEXT_PADDING = 0.31f;
- private static final float LABEL_PADDING = 0.05f;
- private static final float LABEL_SIZE = 0.09f;
- private static final float LABEL_WIDTH = 0.80f;
+ private static final float LABEL_PADDING = 0.02f;
+ private static final float LABEL_SIZE = 0.08f;
+ private static final float LABEL_WIDTH = 0.45f;
private static final float INDICATOR_RADIUS = 0.38f;
public interface OnKnobChangeListener {
@@ -113,7 +113,8 @@ public class Knob extends FrameLayout {
mLowlightColor = res.getColor(R.color.lowlight);
mDisabledColor = res.getColor(R.color.disabled_knob);
- ((ImageView) findViewById(R.id.knob_foreground)).setImageResource(foreground);
+ ImageView fg = (ImageView) findViewById(R.id.knob_foreground);
+ fg.setImageResource(R.drawable.knob);
mLabelTV = (TextView) findViewById(R.id.knob_label);
mLabelTV.setText(label);
@@ -124,9 +125,10 @@ public class Knob extends FrameLayout {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(mHighlightColor);
- mPaint.setStrokeWidth(STROKE_WIDTH);
- mPaint.setStrokeCap(Paint.Cap.ROUND);
+ mPaint.setStrokeWidth(65);
+ mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setShadowLayer(2, 1, -2, getResources().getColor(R.color.black));
setWillNotDraw(false);
}