summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/settings/notificationlight/ApplicationLightPreference.java2
-rw-r--r--src/com/android/settings/notificationlight/ColorPickerView.java193
2 files changed, 37 insertions, 158 deletions
diff --git a/src/com/android/settings/notificationlight/ApplicationLightPreference.java b/src/com/android/settings/notificationlight/ApplicationLightPreference.java
index d88eaf9..f76b0fd 100644
--- a/src/com/android/settings/notificationlight/ApplicationLightPreference.java
+++ b/src/com/android/settings/notificationlight/ApplicationLightPreference.java
@@ -34,11 +34,9 @@ import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.android.settings.R;
-import com.android.settings.Utils;
public class ApplicationLightPreference extends Preference implements
View.OnClickListener {
diff --git a/src/com/android/settings/notificationlight/ColorPickerView.java b/src/com/android/settings/notificationlight/ColorPickerView.java
index 9a4d287..817e397 100644
--- a/src/com/android/settings/notificationlight/ColorPickerView.java
+++ b/src/com/android/settings/notificationlight/ColorPickerView.java
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2010 Daniel Nilsson
- * Copyright (C) 2012 THe CyanogenMod Project
+ * Copyright (C) 2012 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,12 +24,13 @@ import android.graphics.ComposeShader;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Point;
-import android.graphics.PorterDuff;
+import android.graphics.PorterDuff.Mode;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.Paint.Align;
import android.graphics.Paint.Style;
import android.graphics.Shader.TileMode;
+import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
@@ -155,7 +156,6 @@ public class ColorPickerView extends View {
PANEL_SPACING = PANEL_SPACING * mDensity;
mDrawingOffset = calculateRequiredOffset();
-
initPaintTools();
// Needed for receiving track ball motion events.
@@ -164,7 +164,6 @@ public class ColorPickerView extends View {
}
private void initPaintTools() {
-
mSatValPaint = new Paint();
mSatValTrackerPaint = new Paint();
mHuePaint = new Paint();
@@ -187,7 +186,6 @@ public class ColorPickerView extends View {
mAlphaTextPaint.setAntiAlias(true);
mAlphaTextPaint.setTextAlign(Align.CENTER);
mAlphaTextPaint.setFakeBoldText(true);
-
}
private float calculateRequiredOffset() {
@@ -198,7 +196,6 @@ public class ColorPickerView extends View {
}
private int[] buildHueColorArray() {
-
int[] hue = new int[361];
int count = 0;
@@ -207,25 +204,24 @@ public class ColorPickerView extends View {
i, 1f, 1f
});
}
-
return hue;
}
@Override
protected void onDraw(Canvas canvas) {
-
- if (mDrawingRect.width() <= 0 || mDrawingRect.height() <= 0)
+ if (mDrawingRect.width() <= 0 || mDrawingRect.height() <= 0) {
return;
-
+ }
drawSatValPanel(canvas);
drawHuePanel(canvas);
drawAlphaPanel(canvas);
-
}
private void drawSatValPanel(Canvas canvas) {
-
final RectF rect = mSatValRect;
+ int rgb = Color.HSVToColor(new float[] {
+ mHue, 1f, 1f
+ });
if (BORDER_WIDTH_PX > 0) {
mBorderPaint.setColor(mBorderColor);
@@ -233,35 +229,32 @@ public class ColorPickerView extends View {
rect.bottom + BORDER_WIDTH_PX, mBorderPaint);
}
+ // On Honeycomb+ we need to use software rendering to create the shader properly
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+ }
+
+ // Get the overlaying gradients ready and create the ComposeShader
if (mValShader == null) {
mValShader = new LinearGradient(rect.left, rect.top, rect.left, rect.bottom,
0xffffffff, 0xff000000, TileMode.CLAMP);
}
-
- int rgb = Color.HSVToColor(new float[] {
- mHue, 1f, 1f
- });
-
mSatShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top,
0xffffffff, rgb, TileMode.CLAMP);
- ComposeShader mShader = new ComposeShader(mValShader, mSatShader, PorterDuff.Mode.MULTIPLY);
+ ComposeShader mShader = new ComposeShader(mValShader, mSatShader, Mode.MULTIPLY);
mSatValPaint.setShader(mShader);
-
canvas.drawRect(rect, mSatValPaint);
Point p = satValToPoint(mSat, mVal);
-
mSatValTrackerPaint.setColor(0xff000000);
canvas.drawCircle(p.x, p.y, PALETTE_CIRCLE_TRACKER_RADIUS - 1f * mDensity,
mSatValTrackerPaint);
mSatValTrackerPaint.setColor(0xffdddddd);
canvas.drawCircle(p.x, p.y, PALETTE_CIRCLE_TRACKER_RADIUS, mSatValTrackerPaint);
-
}
private void drawHuePanel(Canvas canvas) {
-
final RectF rect = mHueRect;
if (BORDER_WIDTH_PX > 0) {
@@ -296,9 +289,9 @@ public class ColorPickerView extends View {
}
private void drawAlphaPanel(Canvas canvas) {
-
- if (!mShowAlphaPanel || mAlphaRect == null || mAlphaPattern == null)
+ if (!mShowAlphaPanel || mAlphaRect == null || mAlphaPattern == null) {
return;
+ }
final RectF rect = mAlphaRect;
@@ -332,7 +325,6 @@ public class ColorPickerView extends View {
}
float rectWidth = 4 * mDensity / 2;
-
Point p = alphaToPoint(mAlpha);
RectF r = new RectF();
@@ -342,19 +334,15 @@ public class ColorPickerView extends View {
r.bottom = rect.bottom + RECTANGLE_TRACKER_OFFSET;
canvas.drawRoundRect(r, 2, 2, mHueTrackerPaint);
-
}
private Point hueToPoint(float hue) {
-
final RectF rect = mHueRect;
final float height = rect.height();
Point p = new Point();
-
p.y = (int) (height - (hue * height / 360f) + rect.top);
p.x = (int) rect.left;
-
return p;
}
@@ -373,229 +361,161 @@ public class ColorPickerView extends View {
}
private Point alphaToPoint(int alpha) {
-
final RectF rect = mAlphaRect;
final float width = rect.width();
Point p = new Point();
-
p.x = (int) (width - (alpha * width / 0xff) + rect.left);
p.y = (int) rect.top;
-
return p;
-
}
private float[] pointToSatVal(float x, float y) {
-
final RectF rect = mSatValRect;
float[] result = new float[2];
-
float width = rect.width();
float height = rect.height();
if (x < rect.left) {
x = 0f;
- }
- else if (x > rect.right) {
+ } else if (x > rect.right) {
x = width;
- }
- else {
+ } else {
x = x - rect.left;
}
if (y < rect.top) {
y = 0f;
- }
- else if (y > rect.bottom) {
+ } else if (y > rect.bottom) {
y = height;
- }
- else {
+ } else {
y = y - rect.top;
}
result[0] = 1.f / width * x;
result[1] = 1.f - (1.f / height * y);
-
return result;
}
private float pointToHue(float y) {
-
final RectF rect = mHueRect;
-
float height = rect.height();
if (y < rect.top) {
y = 0f;
- }
- else if (y > rect.bottom) {
+ } else if (y > rect.bottom) {
y = height;
- }
- else {
+ } else {
y = y - rect.top;
}
-
return 360f - (y * 360f / height);
}
private int pointToAlpha(int x) {
-
final RectF rect = mAlphaRect;
final int width = (int) rect.width();
if (x < rect.left) {
x = 0;
- }
- else if (x > rect.right) {
+ } else if (x > rect.right) {
x = width;
- }
- else {
+ } else {
x = x - (int) rect.left;
}
-
return 0xff - (x * 0xff / width);
-
}
@Override
public boolean onTrackballEvent(MotionEvent event) {
-
float x = event.getX();
float y = event.getY();
-
boolean update = false;
if (event.getAction() == MotionEvent.ACTION_MOVE) {
-
switch (mLastTouchedPanel) {
-
case PANEL_SAT_VAL:
-
float sat,
val;
-
sat = mSat + x / 50f;
val = mVal - y / 50f;
-
if (sat < 0f) {
sat = 0f;
- }
- else if (sat > 1f) {
+ } else if (sat > 1f) {
sat = 1f;
}
if (val < 0f) {
val = 0f;
- }
- else if (val > 1f) {
+ } else if (val > 1f) {
val = 1f;
}
-
mSat = sat;
mVal = val;
-
update = true;
-
break;
-
case PANEL_HUE:
-
float hue = mHue - y * 10f;
-
if (hue < 0f) {
hue = 0f;
- }
- else if (hue > 360f) {
+ } else if (hue > 360f) {
hue = 360f;
}
-
mHue = hue;
-
update = true;
-
break;
-
case PANEL_ALPHA:
-
if (!mShowAlphaPanel || mAlphaRect == null) {
update = false;
- }
- else {
-
+ } else {
int alpha = (int) (mAlpha - x * 10);
-
if (alpha < 0) {
alpha = 0;
- }
- else if (alpha > 0xff) {
+ } else if (alpha > 0xff) {
alpha = 0xff;
}
-
mAlpha = alpha;
-
update = true;
}
-
break;
}
-
}
if (update) {
-
if (mListener != null) {
mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[] {
mHue, mSat, mVal
}));
}
-
invalidate();
return true;
}
-
return super.onTrackballEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
-
boolean update = false;
switch (event.getAction()) {
-
case MotionEvent.ACTION_DOWN:
-
mStartTouchPoint = new Point((int) event.getX(), (int) event.getY());
-
update = moveTrackersIfNeeded(event);
-
break;
-
case MotionEvent.ACTION_MOVE:
-
update = moveTrackersIfNeeded(event);
-
break;
-
case MotionEvent.ACTION_UP:
-
mStartTouchPoint = null;
-
update = moveTrackersIfNeeded(event);
-
break;
-
}
if (update) {
-
if (mListener != null) {
mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[] {
mHue, mSat, mVal
}));
}
-
invalidate();
return true;
}
@@ -609,34 +529,22 @@ public class ColorPickerView extends View {
return false;
boolean update = false;
-
int startX = mStartTouchPoint.x;
int startY = mStartTouchPoint.y;
if (mHueRect.contains(startX, startY)) {
mLastTouchedPanel = PANEL_HUE;
-
mHue = pointToHue(event.getY());
-
update = true;
- }
- else if (mSatValRect.contains(startX, startY)) {
-
+ } else if (mSatValRect.contains(startX, startY)) {
mLastTouchedPanel = PANEL_SAT_VAL;
-
float[] result = pointToSatVal(event.getX(), event.getY());
-
mSat = result[0];
mVal = result[1];
-
update = true;
- }
- else if (mAlphaRect != null && mAlphaRect.contains(startX, startY)) {
-
+ } else if (mAlphaRect != null && mAlphaRect.contains(startX, startY)) {
mLastTouchedPanel = PANEL_ALPHA;
-
mAlpha = pointToAlpha((int) event.getX());
-
update = true;
}
@@ -645,7 +553,6 @@ public class ColorPickerView extends View {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-
int width = 0;
int height = 0;
@@ -666,25 +573,20 @@ public class ColorPickerView extends View {
if (height > heightAllowed) {
height = heightAllowed;
width = (int) (height + PANEL_SPACING + HUE_PANEL_WIDTH);
- }
- else {
+ } else {
width = widthAllowed;
}
- }
- else {
+ } else {
width = (int) (heightAllowed - ALPHA_PANEL_HEIGHT + HUE_PANEL_WIDTH);
if (width > widthAllowed) {
width = widthAllowed;
height = (int) (widthAllowed - HUE_PANEL_WIDTH + ALPHA_PANEL_HEIGHT);
- }
- else {
+ } else {
height = heightAllowed;
}
-
}
-
setMeasuredDimension(width, height);
}
@@ -705,25 +607,18 @@ public class ColorPickerView extends View {
}
private int getPrefferedWidth() {
-
int width = getPrefferedHeight();
-
if (mShowAlphaPanel) {
width -= (PANEL_SPACING + ALPHA_PANEL_HEIGHT);
}
-
return (int) (width + HUE_PANEL_WIDTH + PANEL_SPACING);
-
}
private int getPrefferedHeight() {
-
int height = (int) (200 * mDensity);
-
if (mShowAlphaPanel) {
height += PANEL_SPACING + ALPHA_PANEL_HEIGHT;
}
-
return height;
}
@@ -743,7 +638,6 @@ public class ColorPickerView extends View {
}
private void setUpSatValRect() {
-
final RectF dRect = mDrawingRect;
float panelSide = dRect.height() - BORDER_WIDTH_PX * 2;
@@ -755,7 +649,6 @@ public class ColorPickerView extends View {
float top = dRect.top + BORDER_WIDTH_PX;
float bottom = top + panelSide;
float right = left + panelSide;
-
mSatValRect = new RectF(left, top, right, bottom);
}
@@ -772,24 +665,21 @@ public class ColorPickerView extends View {
}
private void setUpAlphaRect() {
-
- if (!mShowAlphaPanel)
+ if (!mShowAlphaPanel) {
return;
+ }
final RectF dRect = mDrawingRect;
-
float left = dRect.left + BORDER_WIDTH_PX;
float top = dRect.bottom - ALPHA_PANEL_HEIGHT + BORDER_WIDTH_PX;
float bottom = dRect.bottom - BORDER_WIDTH_PX;
float right = dRect.right - BORDER_WIDTH_PX;
mAlphaRect = new RectF(left, top, right, bottom);
-
mAlphaPattern = new AlphaPatternDrawable((int) (5 * mDensity));
mAlphaPattern.setBounds(Math.round(mAlphaRect.left), Math
.round(mAlphaRect.top), Math.round(mAlphaRect.right), Math
.round(mAlphaRect.bottom));
-
}
/**
@@ -847,16 +737,13 @@ public class ColorPickerView extends View {
* OnColorChangedListener.
*/
public void setColor(int color, boolean callback) {
-
int alpha = Color.alpha(color);
int red = Color.red(color);
int blue = Color.blue(color);
int green = Color.green(color);
-
float[] hsv = new float[3];
Color.RGBToHSV(red, green, blue, hsv);
-
mAlpha = alpha;
mHue = hsv[0];
mSat = hsv[1];
@@ -867,7 +754,6 @@ public class ColorPickerView extends View {
mHue, mSat, mVal
}));
}
-
invalidate();
}
@@ -890,7 +776,6 @@ public class ColorPickerView extends View {
* @param visible
*/
public void setAlphaSliderVisible(boolean visible) {
-
if (mShowAlphaPanel != visible) {
mShowAlphaPanel = visible;
@@ -902,8 +787,6 @@ public class ColorPickerView extends View {
mSatShader = null;
mHueShader = null;
mAlphaShader = null;
- ;
-
requestLayout();
}
@@ -911,9 +794,7 @@ public class ColorPickerView extends View {
public void setSliderTrackerColor(int color) {
mSliderTrackerColor = color;
-
mHueTrackerPaint.setColor(mSliderTrackerColor);
-
invalidate();
}