diff options
author | Roman Birg <roman@cyngn.com> | 2014-04-22 16:45:15 -0700 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2014-04-23 11:23:30 -0700 |
commit | dbc263f1fd12685751ab41870b96de96503a9b1e (patch) | |
tree | 2952ecf16df0b0304d1c2871d2a81308205cd5ed /src | |
parent | 22b85f14f7b565cabc2a9bcde0012d2a54e1b467 (diff) | |
download | android_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.java | 13 | ||||
-rw-r--r-- | src/org/cyanogenmod/audiofx/widget/EqualizerSurface.java | 96 | ||||
-rw-r--r-- | src/org/cyanogenmod/audiofx/widget/Knob.java | 16 |
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); } |