From b3b4a2902e37fb072e800f5dff0392755f5d4501 Mon Sep 17 00:00:00 2001 From: lookshe Date: Wed, 15 Apr 2015 21:29:31 +0200 Subject: moved color picker to libs --- build.gradle | 1 + libs/colorpicker/.gitignore | 1 + libs/colorpicker/build.gradle | 18 ++ libs/colorpicker/proguard-rules.pro | 17 ++ libs/colorpicker/src/main/AndroidManifest.xml | 2 + .../java/yuku/ambilwarna/AmbilWarnaDialog.java | 298 ++++++++++++++++++++ .../java/yuku/ambilwarna/AmbilWarnaSquare.java | 46 ++++ .../widget/AmbilWarnaPrefWidgetView.java | 34 +++ .../ambilwarna/widget/AmbilWarnaPreference.java | 134 +++++++++ .../res/drawable-hdpi/ambilwarna_arrow_down.png | Bin 0 -> 1032 bytes .../res/drawable-hdpi/ambilwarna_arrow_right.png | Bin 0 -> 1041 bytes .../main/res/drawable-hdpi/ambilwarna_cursor.png | Bin 0 -> 666 bytes .../main/res/drawable-hdpi/ambilwarna_target.png | Bin 0 -> 983 bytes .../res/drawable-ldpi/ambilwarna_arrow_down.png | Bin 0 -> 748 bytes .../res/drawable-ldpi/ambilwarna_arrow_right.png | Bin 0 -> 751 bytes .../main/res/drawable-ldpi/ambilwarna_cursor.png | Bin 0 -> 480 bytes .../main/res/drawable-ldpi/ambilwarna_target.png | Bin 0 -> 607 bytes .../drawable-mdpi/ambilwarna_alphacheckered.png | Bin 0 -> 135 bytes .../res/drawable-mdpi/ambilwarna_arrow_down.png | Bin 0 -> 889 bytes .../res/drawable-mdpi/ambilwarna_arrow_right.png | Bin 0 -> 814 bytes .../main/res/drawable-mdpi/ambilwarna_cursor.png | Bin 0 -> 579 bytes .../src/main/res/drawable-mdpi/ambilwarna_hue.png | Bin 0 -> 455 bytes .../main/res/drawable-mdpi/ambilwarna_target.png | Bin 0 -> 816 bytes .../res/drawable-xhdpi/ambilwarna_arrow_down.png | Bin 0 -> 1097 bytes .../res/drawable-xhdpi/ambilwarna_arrow_right.png | Bin 0 -> 1151 bytes .../main/res/drawable-xhdpi/ambilwarna_cursor.png | Bin 0 -> 782 bytes .../main/res/drawable-xhdpi/ambilwarna_target.png | Bin 0 -> 1526 bytes .../drawable/ambilwarna_alphacheckered_tiled.xml | 6 + .../src/main/res/layout-land/ambilwarna_dialog.xml | 127 +++++++++ .../src/main/res/layout/ambilwarna_dialog.xml | 122 +++++++++ .../src/main/res/layout/ambilwarna_pref_widget.xml | 23 ++ .../colorpicker/src/main/res/values-land/dimen.xml | 5 + .../src/main/res/values-xlarge-land/dimen.xml | 5 + libs/colorpicker/src/main/res/values/attrs.xml | 7 + libs/colorpicker/src/main/res/values/dimen.xml | 7 + settings.gradle | 2 +- .../java/yuku/ambilwarna/AmbilWarnaDialog.java | 300 --------------------- .../java/yuku/ambilwarna/AmbilWarnaSquare.java | 46 ---- .../widget/AmbilWarnaPrefWidgetView.java | 34 --- .../ambilwarna/widget/AmbilWarnaPreference.java | 134 --------- .../res/drawable-hdpi/ambilwarna_arrow_down.png | Bin 1032 -> 0 bytes .../res/drawable-hdpi/ambilwarna_arrow_right.png | Bin 1041 -> 0 bytes src/main/res/drawable-hdpi/ambilwarna_cursor.png | Bin 666 -> 0 bytes src/main/res/drawable-hdpi/ambilwarna_target.png | Bin 983 -> 0 bytes .../drawable-mdpi/ambilwarna_alphacheckered.png | Bin 135 -> 0 bytes .../res/drawable-mdpi/ambilwarna_arrow_down.png | Bin 889 -> 0 bytes .../res/drawable-mdpi/ambilwarna_arrow_right.png | Bin 814 -> 0 bytes src/main/res/drawable-mdpi/ambilwarna_cursor.png | Bin 579 -> 0 bytes src/main/res/drawable-mdpi/ambilwarna_hue.png | Bin 455 -> 0 bytes src/main/res/drawable-mdpi/ambilwarna_target.png | Bin 816 -> 0 bytes .../res/drawable-xhdpi/ambilwarna_arrow_down.png | Bin 1097 -> 0 bytes .../res/drawable-xhdpi/ambilwarna_arrow_right.png | Bin 1151 -> 0 bytes src/main/res/drawable-xhdpi/ambilwarna_cursor.png | Bin 782 -> 0 bytes src/main/res/drawable-xhdpi/ambilwarna_target.png | Bin 1526 -> 0 bytes .../drawable/ambilwarna_alphacheckered_tiled.xml | 6 - src/main/res/layout/ambilwarna_dialog.xml | 122 --------- src/main/res/layout/ambilwarna_pref_widget.xml | 23 -- 57 files changed, 854 insertions(+), 666 deletions(-) create mode 100644 libs/colorpicker/.gitignore create mode 100644 libs/colorpicker/build.gradle create mode 100644 libs/colorpicker/proguard-rules.pro create mode 100644 libs/colorpicker/src/main/AndroidManifest.xml create mode 100644 libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java create mode 100644 libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java create mode 100644 libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java create mode 100644 libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java create mode 100644 libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png create mode 100644 libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png create mode 100644 libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_cursor.png create mode 100644 libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_target.png create mode 100644 libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_down.png create mode 100644 libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_right.png create mode 100644 libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_cursor.png create mode 100644 libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_target.png create mode 100644 libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png create mode 100644 libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png create mode 100644 libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png create mode 100644 libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_cursor.png create mode 100644 libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_hue.png create mode 100644 libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_target.png create mode 100644 libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png create mode 100644 libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png create mode 100644 libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_cursor.png create mode 100644 libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_target.png create mode 100644 libs/colorpicker/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml create mode 100644 libs/colorpicker/src/main/res/layout-land/ambilwarna_dialog.xml create mode 100644 libs/colorpicker/src/main/res/layout/ambilwarna_dialog.xml create mode 100644 libs/colorpicker/src/main/res/layout/ambilwarna_pref_widget.xml create mode 100644 libs/colorpicker/src/main/res/values-land/dimen.xml create mode 100644 libs/colorpicker/src/main/res/values-xlarge-land/dimen.xml create mode 100644 libs/colorpicker/src/main/res/values/attrs.xml create mode 100644 libs/colorpicker/src/main/res/values/dimen.xml delete mode 100644 src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java delete mode 100644 src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java delete mode 100644 src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java delete mode 100644 src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java delete mode 100644 src/main/res/drawable-hdpi/ambilwarna_arrow_down.png delete mode 100644 src/main/res/drawable-hdpi/ambilwarna_arrow_right.png delete mode 100644 src/main/res/drawable-hdpi/ambilwarna_cursor.png delete mode 100644 src/main/res/drawable-hdpi/ambilwarna_target.png delete mode 100644 src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png delete mode 100644 src/main/res/drawable-mdpi/ambilwarna_arrow_down.png delete mode 100644 src/main/res/drawable-mdpi/ambilwarna_arrow_right.png delete mode 100644 src/main/res/drawable-mdpi/ambilwarna_cursor.png delete mode 100644 src/main/res/drawable-mdpi/ambilwarna_hue.png delete mode 100644 src/main/res/drawable-mdpi/ambilwarna_target.png delete mode 100644 src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png delete mode 100644 src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png delete mode 100644 src/main/res/drawable-xhdpi/ambilwarna_cursor.png delete mode 100644 src/main/res/drawable-xhdpi/ambilwarna_target.png delete mode 100644 src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml delete mode 100644 src/main/res/layout/ambilwarna_dialog.xml delete mode 100644 src/main/res/layout/ambilwarna_pref_widget.xml diff --git a/build.gradle b/build.gradle index 6bd36115..3b765998 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,7 @@ dependencies { compile 'com.google.zxing:android-integration:3.1.0' compile 'de.measite.minidns:minidns:0.1.3' compile project(':libs:emojicon') + compile project(':libs:colorpicker') } android { diff --git a/libs/colorpicker/.gitignore b/libs/colorpicker/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/libs/colorpicker/.gitignore @@ -0,0 +1 @@ +/build diff --git a/libs/colorpicker/build.gradle b/libs/colorpicker/build.gradle new file mode 100644 index 00000000..1920d0f6 --- /dev/null +++ b/libs/colorpicker/build.gradle @@ -0,0 +1,18 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + defaultConfig { + minSdkVersion 7 + targetSdkVersion 21 + versionCode 2 + versionName "2.0" + } + buildTypes { + release { + minifyEnabled false + } + } +} diff --git a/libs/colorpicker/proguard-rules.pro b/libs/colorpicker/proguard-rules.pro new file mode 100644 index 00000000..f665b348 --- /dev/null +++ b/libs/colorpicker/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Developer/android-sdk-macosx/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/libs/colorpicker/src/main/AndroidManifest.xml b/libs/colorpicker/src/main/AndroidManifest.xml new file mode 100644 index 00000000..e59bd5b5 --- /dev/null +++ b/libs/colorpicker/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java b/libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java new file mode 100644 index 00000000..5c05e4ec --- /dev/null +++ b/libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java @@ -0,0 +1,298 @@ +package yuku.ambilwarna; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnCancelListener; +import android.graphics.Color; +import android.graphics.drawable.GradientDrawable; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +public class AmbilWarnaDialog { + public interface OnAmbilWarnaListener { + void onCancel(AmbilWarnaDialog dialog); + + void onOk(AmbilWarnaDialog dialog, int color); + } + + final AlertDialog dialog; + private final boolean supportsAlpha; + final OnAmbilWarnaListener listener; + final View viewHue; + final AmbilWarnaSquare viewSatVal; + final ImageView viewCursor; + final ImageView viewAlphaCursor; + final View viewOldColor; + final View viewNewColor; + final View viewAlphaOverlay; + final ImageView viewTarget; + final ImageView viewAlphaCheckered; + final ViewGroup viewContainer; + final float[] currentColorHsv = new float[3]; + int alpha; + + /** + * Create an AmbilWarnaDialog. + * + * @param context activity context + * @param color current color + * @param listener an OnAmbilWarnaListener, allowing you to get back error or OK + */ + public AmbilWarnaDialog(final Context context, int color, OnAmbilWarnaListener listener) { + this(context, color, false, listener); + } + + /** + * Create an AmbilWarnaDialog. + * + * @param context activity context + * @param color current color + * @param supportsAlpha whether alpha/transparency controls are enabled + * @param listener an OnAmbilWarnaListener, allowing you to get back error or OK + */ + public AmbilWarnaDialog(final Context context, int color, boolean supportsAlpha, OnAmbilWarnaListener listener) { + this.supportsAlpha = supportsAlpha; + this.listener = listener; + + if (!supportsAlpha) { // remove alpha if not supported + color = color | 0xff000000; + } + + Color.colorToHSV(color, currentColorHsv); + alpha = Color.alpha(color); + + final View view = LayoutInflater.from(context).inflate(R.layout.ambilwarna_dialog, null); + viewHue = view.findViewById(R.id.ambilwarna_viewHue); + viewSatVal = (AmbilWarnaSquare) view.findViewById(R.id.ambilwarna_viewSatBri); + viewCursor = (ImageView) view.findViewById(R.id.ambilwarna_cursor); + viewOldColor = view.findViewById(R.id.ambilwarna_oldColor); + viewNewColor = view.findViewById(R.id.ambilwarna_newColor); + viewTarget = (ImageView) view.findViewById(R.id.ambilwarna_target); + viewContainer = (ViewGroup) view.findViewById(R.id.ambilwarna_viewContainer); + viewAlphaOverlay = view.findViewById(R.id.ambilwarna_overlay); + viewAlphaCursor = (ImageView) view.findViewById(R.id.ambilwarna_alphaCursor); + viewAlphaCheckered = (ImageView) view.findViewById(R.id.ambilwarna_alphaCheckered); + + { // hide/show alpha + viewAlphaOverlay.setVisibility(supportsAlpha? View.VISIBLE: View.GONE); + viewAlphaCursor.setVisibility(supportsAlpha? View.VISIBLE: View.GONE); + viewAlphaCheckered.setVisibility(supportsAlpha? View.VISIBLE: View.GONE); + } + + viewSatVal.setHue(getHue()); + viewOldColor.setBackgroundColor(color); + viewNewColor.setBackgroundColor(color); + + viewHue.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_MOVE + || event.getAction() == MotionEvent.ACTION_DOWN + || event.getAction() == MotionEvent.ACTION_UP) { + + float y = event.getY(); + if (y < 0.f) y = 0.f; + if (y > viewHue.getMeasuredHeight()) { + y = viewHue.getMeasuredHeight() - 0.001f; // to avoid jumping the cursor from bottom to top. + } + float hue = 360.f - 360.f / viewHue.getMeasuredHeight() * y; + if (hue == 360.f) hue = 0.f; + setHue(hue); + + // update view + viewSatVal.setHue(getHue()); + moveCursor(); + viewNewColor.setBackgroundColor(getColor()); + updateAlphaView(); + return true; + } + return false; + } + }); + + if (supportsAlpha) viewAlphaCheckered.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if ((event.getAction() == MotionEvent.ACTION_MOVE) + || (event.getAction() == MotionEvent.ACTION_DOWN) + || (event.getAction() == MotionEvent.ACTION_UP)) { + + float y = event.getY(); + if (y < 0.f) { + y = 0.f; + } + if (y > viewAlphaCheckered.getMeasuredHeight()) { + y = viewAlphaCheckered.getMeasuredHeight() - 0.001f; // to avoid jumping the cursor from bottom to top. + } + final int a = Math.round(255.f - ((255.f / viewAlphaCheckered.getMeasuredHeight()) * y)); + AmbilWarnaDialog.this.setAlpha(a); + + // update view + moveAlphaCursor(); + int col = AmbilWarnaDialog.this.getColor(); + int c = a << 24 | col & 0x00ffffff; + viewNewColor.setBackgroundColor(c); + return true; + } + return false; + } + }); + viewSatVal.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_MOVE + || event.getAction() == MotionEvent.ACTION_DOWN + || event.getAction() == MotionEvent.ACTION_UP) { + + float x = event.getX(); // touch event are in dp units. + float y = event.getY(); + + if (x < 0.f) x = 0.f; + if (x > viewSatVal.getMeasuredWidth()) x = viewSatVal.getMeasuredWidth(); + if (y < 0.f) y = 0.f; + if (y > viewSatVal.getMeasuredHeight()) y = viewSatVal.getMeasuredHeight(); + + setSat(1.f / viewSatVal.getMeasuredWidth() * x); + setVal(1.f - (1.f / viewSatVal.getMeasuredHeight() * y)); + + // update view + moveTarget(); + viewNewColor.setBackgroundColor(getColor()); + + return true; + } + return false; + } + }); + + dialog = new AlertDialog.Builder(context) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (AmbilWarnaDialog.this.listener != null) { + AmbilWarnaDialog.this.listener.onOk(AmbilWarnaDialog.this, getColor()); + } + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (AmbilWarnaDialog.this.listener != null) { + AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this); + } + } + }) + .setOnCancelListener(new OnCancelListener() { + // if back button is used, call back our listener. + @Override + public void onCancel(DialogInterface paramDialogInterface) { + if (AmbilWarnaDialog.this.listener != null) { + AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this); + } + + } + }) + .create(); + // kill all padding from the dialog window + dialog.setView(view, 0, 0, 0, 0); + + // move cursor & target on first draw + ViewTreeObserver vto = view.getViewTreeObserver(); + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + moveCursor(); + if (AmbilWarnaDialog.this.supportsAlpha) moveAlphaCursor(); + moveTarget(); + if (AmbilWarnaDialog.this.supportsAlpha) updateAlphaView(); + view.getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + }); + } + + protected void moveCursor() { + float y = viewHue.getMeasuredHeight() - (getHue() * viewHue.getMeasuredHeight() / 360.f); + if (y == viewHue.getMeasuredHeight()) y = 0.f; + RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewCursor.getLayoutParams(); + layoutParams.leftMargin = (int) (viewHue.getLeft() - Math.floor(viewCursor.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft()); + layoutParams.topMargin = (int) (viewHue.getTop() + y - Math.floor(viewCursor.getMeasuredHeight() / 2) - viewContainer.getPaddingTop()); + viewCursor.setLayoutParams(layoutParams); + } + + protected void moveTarget() { + float x = getSat() * viewSatVal.getMeasuredWidth(); + float y = (1.f - getVal()) * viewSatVal.getMeasuredHeight(); + RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewTarget.getLayoutParams(); + layoutParams.leftMargin = (int) (viewSatVal.getLeft() + x - Math.floor(viewTarget.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft()); + layoutParams.topMargin = (int) (viewSatVal.getTop() + y - Math.floor(viewTarget.getMeasuredHeight() / 2) - viewContainer.getPaddingTop()); + viewTarget.setLayoutParams(layoutParams); + } + + protected void moveAlphaCursor() { + final int measuredHeight = this.viewAlphaCheckered.getMeasuredHeight(); + float y = measuredHeight - ((this.getAlpha() * measuredHeight) / 255.f); + final RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) this.viewAlphaCursor.getLayoutParams(); + layoutParams.leftMargin = (int) (this.viewAlphaCheckered.getLeft() - Math.floor(this.viewAlphaCursor.getMeasuredWidth() / 2) - this.viewContainer.getPaddingLeft()); + layoutParams.topMargin = (int) ((this.viewAlphaCheckered.getTop() + y) - Math.floor(this.viewAlphaCursor.getMeasuredHeight() / 2) - this.viewContainer.getPaddingTop()); + + this.viewAlphaCursor.setLayoutParams(layoutParams); + } + + private int getColor() { + final int argb = Color.HSVToColor(currentColorHsv); + return alpha << 24 | (argb & 0x00ffffff); + } + + private float getHue() { + return currentColorHsv[0]; + } + + private float getAlpha() { + return this.alpha; + } + + private float getSat() { + return currentColorHsv[1]; + } + + private float getVal() { + return currentColorHsv[2]; + } + + private void setHue(float hue) { + currentColorHsv[0] = hue; + } + + private void setSat(float sat) { + currentColorHsv[1] = sat; + } + + private void setAlpha(int alpha) { + this.alpha = alpha; + } + + private void setVal(float val) { + currentColorHsv[2] = val; + } + + public void show() { + dialog.show(); + } + + public AlertDialog getDialog() { + return dialog; + } + + private void updateAlphaView() { + final GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { + Color.HSVToColor(currentColorHsv), 0x0 + }); + viewAlphaOverlay.setBackgroundDrawable(gd); + } +} diff --git a/libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java b/libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java new file mode 100644 index 00000000..1f0c86e4 --- /dev/null +++ b/libs/colorpicker/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java @@ -0,0 +1,46 @@ +package yuku.ambilwarna; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ComposeShader; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.Shader; +import android.graphics.Shader.TileMode; +import android.util.AttributeSet; +import android.view.View; + +public class AmbilWarnaSquare extends View { + Paint paint; + Shader luar; + final float[] color = { 1.f, 1.f, 1.f }; + + public AmbilWarnaSquare(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AmbilWarnaSquare(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (paint == null) { + paint = new Paint(); + luar = new LinearGradient(0.f, 0.f, 0.f, this.getMeasuredHeight(), 0xffffffff, 0xff000000, TileMode.CLAMP); + } + int rgb = Color.HSVToColor(color); + Shader dalam = new LinearGradient(0.f, 0.f, this.getMeasuredWidth(), 0.f, 0xffffffff, rgb, TileMode.CLAMP); + ComposeShader shader = new ComposeShader(luar, dalam, PorterDuff.Mode.MULTIPLY); + paint.setShader(shader); + canvas.drawRect(0.f, 0.f, this.getMeasuredWidth(), this.getMeasuredHeight(), paint); + } + + void setHue(float hue) { + color[0] = hue; + invalidate(); + } +} diff --git a/libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java b/libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java new file mode 100644 index 00000000..7ed4c4e3 --- /dev/null +++ b/libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java @@ -0,0 +1,34 @@ +package yuku.ambilwarna.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.util.AttributeSet; +import android.util.FloatMath; +import android.view.View; + +public class AmbilWarnaPrefWidgetView extends View { + Paint paint; + float rectSize; + float strokeWidth; + + public AmbilWarnaPrefWidgetView(Context context, AttributeSet attrs) { + super(context, attrs); + + float density = context.getResources().getDisplayMetrics().density; + rectSize = FloatMath.floor(24.f * density + 0.5f); + strokeWidth = FloatMath.floor(1.f * density + 0.5f); + + paint = new Paint(); + paint.setColor(0xffffffff); + paint.setStyle(Style.STROKE); + paint.setStrokeWidth(strokeWidth); + } + + @Override protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + canvas.drawRect(strokeWidth, strokeWidth, rectSize - strokeWidth, rectSize - strokeWidth, paint); + } +} diff --git a/libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java b/libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java new file mode 100644 index 00000000..2c634eb9 --- /dev/null +++ b/libs/colorpicker/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java @@ -0,0 +1,134 @@ +package yuku.ambilwarna.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Parcel; +import android.os.Parcelable; +import android.preference.Preference; +import android.util.AttributeSet; +import android.view.View; + +import yuku.ambilwarna.AmbilWarnaDialog; +import yuku.ambilwarna.R; + +public class AmbilWarnaPreference extends Preference { + private final boolean supportsAlpha; + int value; + + public AmbilWarnaPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.AmbilWarnaPreference); + supportsAlpha = ta.getBoolean(R.styleable.AmbilWarnaPreference_supportsAlpha, false); + + setWidgetLayoutResource(R.layout.ambilwarna_pref_widget); + } + + @Override protected void onBindView(View view) { + super.onBindView(view); + + // Set our custom views inside the layout + final View box = view.findViewById(R.id.ambilwarna_pref_widget_box); + if (box != null) { + box.setBackgroundColor(value); + } + } + + @Override protected void onClick() { + new AmbilWarnaDialog(getContext(), value, supportsAlpha, new AmbilWarnaDialog.OnAmbilWarnaListener() { + @Override public void onOk(AmbilWarnaDialog dialog, int color) { + if (!callChangeListener(color)) return; // They don't want the value to be set + value = color; + persistInt(value); + notifyChanged(); + } + + @Override public void onCancel(AmbilWarnaDialog dialog) { + // nothing to do + } + }).show(); + } + + public void forceSetValue(int value) { + this.value = value; + persistInt(value); + notifyChanged(); + } + + @Override protected Object onGetDefaultValue(TypedArray a, int index) { + // This preference type's value type is Integer, so we read the default value from the attributes as an Integer. + return a.getInteger(index, 0); + } + + @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + if (restoreValue) { // Restore state + value = getPersistedInt(value); + } else { // Set state + int value = (Integer) defaultValue; + this.value = value; + persistInt(value); + } + } + + /* + * Suppose a client uses this preference type without persisting. We + * must save the instance state so it is able to, for example, survive + * orientation changes. + */ + @Override protected Parcelable onSaveInstanceState() { + final Parcelable superState = super.onSaveInstanceState(); + if (isPersistent()) return superState; // No need to save instance state since it's persistent + + final SavedState myState = new SavedState(superState); + myState.value = value; + return myState; + } + + @Override protected void onRestoreInstanceState(Parcelable state) { + if (!state.getClass().equals(SavedState.class)) { + // Didn't save state for us in onSaveInstanceState + super.onRestoreInstanceState(state); + return; + } + + // Restore the instance state + SavedState myState = (SavedState) state; + super.onRestoreInstanceState(myState.getSuperState()); + this.value = myState.value; + notifyChanged(); + } + + /** + * SavedState, a subclass of {@link android.preference.Preference.BaseSavedState}, will store the state + * of MyPreference, a subclass of Preference. + *

+ * It is important to always call through to super methods. + */ + private static class SavedState extends BaseSavedState { + int value; + + public SavedState(Parcel source) { + super(source); + value = source.readInt(); + } + + @Override public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(value); + } + + public SavedState(Parcelable superState) { + super(superState); + } + + @SuppressWarnings("unused") public static final Creator CREATOR = new Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } +} diff --git a/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png new file mode 100644 index 00000000..d2aa1b09 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png differ diff --git a/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png new file mode 100644 index 00000000..faf1bd75 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png differ diff --git a/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_cursor.png b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_cursor.png new file mode 100644 index 00000000..28cebc32 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_cursor.png differ diff --git a/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_target.png b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_target.png new file mode 100644 index 00000000..6f7bf906 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-hdpi/ambilwarna_target.png differ diff --git a/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_down.png b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_down.png new file mode 100644 index 00000000..19d6d4ef Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_down.png differ diff --git a/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_right.png b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_right.png new file mode 100644 index 00000000..ace7986b Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_arrow_right.png differ diff --git a/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_cursor.png b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_cursor.png new file mode 100644 index 00000000..539eeeb9 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_cursor.png differ diff --git a/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_target.png b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_target.png new file mode 100644 index 00000000..4fdf5977 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-ldpi/ambilwarna_target.png differ diff --git a/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png new file mode 100644 index 00000000..5ceec214 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png differ diff --git a/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png new file mode 100644 index 00000000..5f434552 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png differ diff --git a/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png new file mode 100644 index 00000000..23d54619 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png differ diff --git a/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_cursor.png b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_cursor.png new file mode 100644 index 00000000..c336e883 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_cursor.png differ diff --git a/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_hue.png b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_hue.png new file mode 100644 index 00000000..09d28397 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_hue.png differ diff --git a/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_target.png b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_target.png new file mode 100644 index 00000000..56fa0de9 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_target.png differ diff --git a/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png new file mode 100644 index 00000000..592dd7ca Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png differ diff --git a/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png new file mode 100644 index 00000000..04f655ad Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png differ diff --git a/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_cursor.png b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_cursor.png new file mode 100644 index 00000000..ddea3167 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_cursor.png differ diff --git a/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_target.png b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_target.png new file mode 100644 index 00000000..bb4b1eb7 Binary files /dev/null and b/libs/colorpicker/src/main/res/drawable-xhdpi/ambilwarna_target.png differ diff --git a/libs/colorpicker/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml b/libs/colorpicker/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml new file mode 100644 index 00000000..049f1332 --- /dev/null +++ b/libs/colorpicker/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/libs/colorpicker/src/main/res/layout-land/ambilwarna_dialog.xml b/libs/colorpicker/src/main/res/layout-land/ambilwarna_dialog.xml new file mode 100644 index 00000000..bd4b9089 --- /dev/null +++ b/libs/colorpicker/src/main/res/layout-land/ambilwarna_dialog.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/colorpicker/src/main/res/layout/ambilwarna_dialog.xml b/libs/colorpicker/src/main/res/layout/ambilwarna_dialog.xml new file mode 100644 index 00000000..8a1a403e --- /dev/null +++ b/libs/colorpicker/src/main/res/layout/ambilwarna_dialog.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libs/colorpicker/src/main/res/layout/ambilwarna_pref_widget.xml b/libs/colorpicker/src/main/res/layout/ambilwarna_pref_widget.xml new file mode 100644 index 00000000..bbab8d95 --- /dev/null +++ b/libs/colorpicker/src/main/res/layout/ambilwarna_pref_widget.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/libs/colorpicker/src/main/res/values-land/dimen.xml b/libs/colorpicker/src/main/res/values-land/dimen.xml new file mode 100644 index 00000000..f1c48326 --- /dev/null +++ b/libs/colorpicker/src/main/res/values-land/dimen.xml @@ -0,0 +1,5 @@ + + + 240dp + 120dp + \ No newline at end of file diff --git a/libs/colorpicker/src/main/res/values-xlarge-land/dimen.xml b/libs/colorpicker/src/main/res/values-xlarge-land/dimen.xml new file mode 100644 index 00000000..1e72cca5 --- /dev/null +++ b/libs/colorpicker/src/main/res/values-xlarge-land/dimen.xml @@ -0,0 +1,5 @@ + + + 240dp + 240dp + \ No newline at end of file diff --git a/libs/colorpicker/src/main/res/values/attrs.xml b/libs/colorpicker/src/main/res/values/attrs.xml new file mode 100644 index 00000000..ee65a5b9 --- /dev/null +++ b/libs/colorpicker/src/main/res/values/attrs.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/libs/colorpicker/src/main/res/values/dimen.xml b/libs/colorpicker/src/main/res/values/dimen.xml new file mode 100644 index 00000000..92f53a2e --- /dev/null +++ b/libs/colorpicker/src/main/res/values/dimen.xml @@ -0,0 +1,7 @@ + + + 240dp + 240dp + 30dp + 8dp + diff --git a/settings.gradle b/settings.gradle index ee653b54..7e97c5bd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -include ':libs:MemorizingTrustManager', ':libs:emojicon' +include ':libs:MemorizingTrustManager', ':libs:emojicon', ':libs:colorpicker' include ':libs:openpgp-api-lib' rootProject.name = 'Conversations' diff --git a/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java b/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java deleted file mode 100644 index e553ed10..00000000 --- a/src/main/java/yuku/ambilwarna/AmbilWarnaDialog.java +++ /dev/null @@ -1,300 +0,0 @@ -package yuku.ambilwarna; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; -import android.graphics.Color; -import android.graphics.drawable.GradientDrawable; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.widget.ImageView; -import android.widget.RelativeLayout; - -import eu.siacs.conversations.R; - -public class AmbilWarnaDialog { - public interface OnAmbilWarnaListener { - void onCancel(AmbilWarnaDialog dialog); - - void onOk(AmbilWarnaDialog dialog, int color); - } - - final AlertDialog dialog; - private final boolean supportsAlpha; - final OnAmbilWarnaListener listener; - final View viewHue; - final AmbilWarnaSquare viewSatVal; - final ImageView viewCursor; - final ImageView viewAlphaCursor; - final View viewOldColor; - final View viewNewColor; - final View viewAlphaOverlay; - final ImageView viewTarget; - final ImageView viewAlphaCheckered; - final ViewGroup viewContainer; - final float[] currentColorHsv = new float[3]; - int alpha; - - /** - * Create an AmbilWarnaDialog. - * - * @param context activity context - * @param color current color - * @param listener an OnAmbilWarnaListener, allowing you to get back error or OK - */ - public AmbilWarnaDialog(final Context context, int color, OnAmbilWarnaListener listener) { - this(context, color, false, listener); - } - - /** - * Create an AmbilWarnaDialog. - * - * @param context activity context - * @param color current color - * @param supportsAlpha whether alpha/transparency controls are enabled - * @param listener an OnAmbilWarnaListener, allowing you to get back error or OK - */ - public AmbilWarnaDialog(final Context context, int color, boolean supportsAlpha, OnAmbilWarnaListener listener) { - this.supportsAlpha = supportsAlpha; - this.listener = listener; - - if (!supportsAlpha) { // remove alpha if not supported - color = color | 0xff000000; - } - - Color.colorToHSV(color, currentColorHsv); - alpha = Color.alpha(color); - - final View view = LayoutInflater.from(context).inflate(R.layout.ambilwarna_dialog, null); - viewHue = view.findViewById(R.id.ambilwarna_viewHue); - viewSatVal = (AmbilWarnaSquare) view.findViewById(R.id.ambilwarna_viewSatBri); - viewCursor = (ImageView) view.findViewById(R.id.ambilwarna_cursor); - viewOldColor = view.findViewById(R.id.ambilwarna_oldColor); - viewNewColor = view.findViewById(R.id.ambilwarna_newColor); - viewTarget = (ImageView) view.findViewById(R.id.ambilwarna_target); - viewContainer = (ViewGroup) view.findViewById(R.id.ambilwarna_viewContainer); - viewAlphaOverlay = view.findViewById(R.id.ambilwarna_overlay); - viewAlphaCursor = (ImageView) view.findViewById(R.id.ambilwarna_alphaCursor); - viewAlphaCheckered = (ImageView) view.findViewById(R.id.ambilwarna_alphaCheckered); - - { // hide/show alpha - viewAlphaOverlay.setVisibility(supportsAlpha? View.VISIBLE: View.GONE); - viewAlphaCursor.setVisibility(supportsAlpha? View.VISIBLE: View.GONE); - viewAlphaCheckered.setVisibility(supportsAlpha? View.VISIBLE: View.GONE); - } - - viewSatVal.setHue(getHue()); - viewOldColor.setBackgroundColor(color); - viewNewColor.setBackgroundColor(color); - - viewHue.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_MOVE - || event.getAction() == MotionEvent.ACTION_DOWN - || event.getAction() == MotionEvent.ACTION_UP) { - - float y = event.getY(); - if (y < 0.f) y = 0.f; - if (y > viewHue.getMeasuredHeight()) { - y = viewHue.getMeasuredHeight() - 0.001f; // to avoid jumping the cursor from bottom to top. - } - float hue = 360.f - 360.f / viewHue.getMeasuredHeight() * y; - if (hue == 360.f) hue = 0.f; - setHue(hue); - - // update view - viewSatVal.setHue(getHue()); - moveCursor(); - viewNewColor.setBackgroundColor(getColor()); - updateAlphaView(); - return true; - } - return false; - } - }); - - if (supportsAlpha) viewAlphaCheckered.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if ((event.getAction() == MotionEvent.ACTION_MOVE) - || (event.getAction() == MotionEvent.ACTION_DOWN) - || (event.getAction() == MotionEvent.ACTION_UP)) { - - float y = event.getY(); - if (y < 0.f) { - y = 0.f; - } - if (y > viewAlphaCheckered.getMeasuredHeight()) { - y = viewAlphaCheckered.getMeasuredHeight() - 0.001f; // to avoid jumping the cursor from bottom to top. - } - final int a = Math.round(255.f - ((255.f / viewAlphaCheckered.getMeasuredHeight()) * y)); - AmbilWarnaDialog.this.setAlpha(a); - - // update view - moveAlphaCursor(); - int col = AmbilWarnaDialog.this.getColor(); - int c = a << 24 | col & 0x00ffffff; - viewNewColor.setBackgroundColor(c); - return true; - } - return false; - } - }); - viewSatVal.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_MOVE - || event.getAction() == MotionEvent.ACTION_DOWN - || event.getAction() == MotionEvent.ACTION_UP) { - - float x = event.getX(); // touch event are in dp units. - float y = event.getY(); - - if (x < 0.f) x = 0.f; - if (x > viewSatVal.getMeasuredWidth()) x = viewSatVal.getMeasuredWidth(); - if (y < 0.f) y = 0.f; - if (y > viewSatVal.getMeasuredHeight()) y = viewSatVal.getMeasuredHeight(); - - setSat(1.f / viewSatVal.getMeasuredWidth() * x); - setVal(1.f - (1.f / viewSatVal.getMeasuredHeight() * y)); - - // update view - moveTarget(); - viewNewColor.setBackgroundColor(getColor()); - - return true; - } - return false; - } - }); - - dialog = new AlertDialog.Builder(context) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (AmbilWarnaDialog.this.listener != null) { - AmbilWarnaDialog.this.listener.onOk(AmbilWarnaDialog.this, getColor()); - } - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (AmbilWarnaDialog.this.listener != null) { - AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this); - } - } - }) - .setOnCancelListener(new OnCancelListener() { - // if back button is used, call back our listener. - @Override - public void onCancel(DialogInterface paramDialogInterface) { - if (AmbilWarnaDialog.this.listener != null) { - AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this); - } - - } - }) - .create(); - // kill all padding from the dialog window - dialog.setView(view, 0, 0, 0, 0); - - // move cursor & target on first draw - ViewTreeObserver vto = view.getViewTreeObserver(); - vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - moveCursor(); - if (AmbilWarnaDialog.this.supportsAlpha) moveAlphaCursor(); - moveTarget(); - if (AmbilWarnaDialog.this.supportsAlpha) updateAlphaView(); - view.getViewTreeObserver().removeGlobalOnLayoutListener(this); - } - }); - } - - protected void moveCursor() { - float y = viewHue.getMeasuredHeight() - (getHue() * viewHue.getMeasuredHeight() / 360.f); - if (y == viewHue.getMeasuredHeight()) y = 0.f; - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewCursor.getLayoutParams(); - layoutParams.leftMargin = (int) (viewHue.getLeft() - Math.floor(viewCursor.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft()); - layoutParams.topMargin = (int) (viewHue.getTop() + y - Math.floor(viewCursor.getMeasuredHeight() / 2) - viewContainer.getPaddingTop()); - viewCursor.setLayoutParams(layoutParams); - } - - protected void moveTarget() { - float x = getSat() * viewSatVal.getMeasuredWidth(); - float y = (1.f - getVal()) * viewSatVal.getMeasuredHeight(); - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewTarget.getLayoutParams(); - layoutParams.leftMargin = (int) (viewSatVal.getLeft() + x - Math.floor(viewTarget.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft()); - layoutParams.topMargin = (int) (viewSatVal.getTop() + y - Math.floor(viewTarget.getMeasuredHeight() / 2) - viewContainer.getPaddingTop()); - viewTarget.setLayoutParams(layoutParams); - } - - protected void moveAlphaCursor() { - final int measuredHeight = this.viewAlphaCheckered.getMeasuredHeight(); - float y = measuredHeight - ((this.getAlpha() * measuredHeight) / 255.f); - final RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) this.viewAlphaCursor.getLayoutParams(); - layoutParams.leftMargin = (int) (this.viewAlphaCheckered.getLeft() - Math.floor(this.viewAlphaCursor.getMeasuredWidth() / 2) - this.viewContainer.getPaddingLeft()); - layoutParams.topMargin = (int) ((this.viewAlphaCheckered.getTop() + y) - Math.floor(this.viewAlphaCursor.getMeasuredHeight() / 2) - this.viewContainer.getPaddingTop()); - - this.viewAlphaCursor.setLayoutParams(layoutParams); - } - - private int getColor() { - final int argb = Color.HSVToColor(currentColorHsv); - return alpha << 24 | (argb & 0x00ffffff); - } - - private float getHue() { - return currentColorHsv[0]; - } - - private float getAlpha() { - return this.alpha; - } - - private float getSat() { - return currentColorHsv[1]; - } - - private float getVal() { - return currentColorHsv[2]; - } - - private void setHue(float hue) { - currentColorHsv[0] = hue; - } - - private void setSat(float sat) { - currentColorHsv[1] = sat; - } - - private void setAlpha(int alpha) { - this.alpha = alpha; - } - - private void setVal(float val) { - currentColorHsv[2] = val; - } - - public void show() { - dialog.show(); - } - - public AlertDialog getDialog() { - return dialog; - } - - private void updateAlphaView() { - final GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { - Color.HSVToColor(currentColorHsv), 0x0 - }); - viewAlphaOverlay.setBackgroundDrawable(gd); - } -} \ No newline at end of file diff --git a/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java b/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java deleted file mode 100644 index 9fb854df..00000000 --- a/src/main/java/yuku/ambilwarna/AmbilWarnaSquare.java +++ /dev/null @@ -1,46 +0,0 @@ -package yuku.ambilwarna; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.ComposeShader; -import android.graphics.LinearGradient; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.Shader; -import android.graphics.Shader.TileMode; -import android.util.AttributeSet; -import android.view.View; - -public class AmbilWarnaSquare extends View { - Paint paint; - Shader luar; - final float[] color = { 1.f, 1.f, 1.f }; - - public AmbilWarnaSquare(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public AmbilWarnaSquare(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - if (paint == null) { - paint = new Paint(); - luar = new LinearGradient(0.f, 0.f, 0.f, this.getMeasuredHeight(), 0xffffffff, 0xff000000, TileMode.CLAMP); - } - int rgb = Color.HSVToColor(color); - Shader dalam = new LinearGradient(0.f, 0.f, this.getMeasuredWidth(), 0.f, 0xffffffff, rgb, TileMode.CLAMP); - ComposeShader shader = new ComposeShader(luar, dalam, PorterDuff.Mode.MULTIPLY); - paint.setShader(shader); - canvas.drawRect(0.f, 0.f, this.getMeasuredWidth(), this.getMeasuredHeight(), paint); - } - - void setHue(float hue) { - color[0] = hue; - invalidate(); - } -} \ No newline at end of file diff --git a/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java b/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java deleted file mode 100644 index 6da10bb0..00000000 --- a/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPrefWidgetView.java +++ /dev/null @@ -1,34 +0,0 @@ -package yuku.ambilwarna.widget; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Paint.Style; -import android.util.AttributeSet; -import android.util.FloatMath; -import android.view.View; - -public class AmbilWarnaPrefWidgetView extends View { - Paint paint; - float rectSize; - float strokeWidth; - - public AmbilWarnaPrefWidgetView(Context context, AttributeSet attrs) { - super(context, attrs); - - float density = context.getResources().getDisplayMetrics().density; - rectSize = FloatMath.floor(24.f * density + 0.5f); - strokeWidth = FloatMath.floor(1.f * density + 0.5f); - - paint = new Paint(); - paint.setColor(0xffffffff); - paint.setStyle(Style.STROKE); - paint.setStrokeWidth(strokeWidth); - } - - @Override protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - canvas.drawRect(strokeWidth, strokeWidth, rectSize - strokeWidth, rectSize - strokeWidth, paint); - } -} \ No newline at end of file diff --git a/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java b/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java deleted file mode 100644 index f18ed00c..00000000 --- a/src/main/java/yuku/ambilwarna/widget/AmbilWarnaPreference.java +++ /dev/null @@ -1,134 +0,0 @@ -package yuku.ambilwarna.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.os.Parcel; -import android.os.Parcelable; -import android.preference.Preference; -import android.util.AttributeSet; -import android.view.View; - -import eu.siacs.conversations.R; -import yuku.ambilwarna.AmbilWarnaDialog; - -public class AmbilWarnaPreference extends Preference { - private final boolean supportsAlpha; - int value; - - public AmbilWarnaPreference(Context context, AttributeSet attrs) { - super(context, attrs); - - final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.AmbilWarnaPreference); - supportsAlpha = ta.getBoolean(R.styleable.AmbilWarnaPreference_supportsAlpha, false); - - setWidgetLayoutResource(R.layout.ambilwarna_pref_widget); - } - - @Override protected void onBindView(View view) { - super.onBindView(view); - - // Set our custom views inside the layout - final View box = view.findViewById(R.id.ambilwarna_pref_widget_box); - if (box != null) { - box.setBackgroundColor(value); - } - } - - @Override protected void onClick() { - new AmbilWarnaDialog(getContext(), value, supportsAlpha, new AmbilWarnaDialog.OnAmbilWarnaListener() { - @Override public void onOk(AmbilWarnaDialog dialog, int color) { - if (!callChangeListener(color)) return; // They don't want the value to be set - value = color; - persistInt(value); - notifyChanged(); - } - - @Override public void onCancel(AmbilWarnaDialog dialog) { - // nothing to do - } - }).show(); - } - - public void forceSetValue(int value) { - this.value = value; - persistInt(value); - notifyChanged(); - } - - @Override protected Object onGetDefaultValue(TypedArray a, int index) { - // This preference type's value type is Integer, so we read the default value from the attributes as an Integer. - return a.getInteger(index, 0); - } - - @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { - if (restoreValue) { // Restore state - value = getPersistedInt(value); - } else { // Set state - int value = (Integer) defaultValue; - this.value = value; - persistInt(value); - } - } - - /* - * Suppose a client uses this preference type without persisting. We - * must save the instance state so it is able to, for example, survive - * orientation changes. - */ - @Override protected Parcelable onSaveInstanceState() { - final Parcelable superState = super.onSaveInstanceState(); - if (isPersistent()) return superState; // No need to save instance state since it's persistent - - final SavedState myState = new SavedState(superState); - myState.value = value; - return myState; - } - - @Override protected void onRestoreInstanceState(Parcelable state) { - if (!state.getClass().equals(SavedState.class)) { - // Didn't save state for us in onSaveInstanceState - super.onRestoreInstanceState(state); - return; - } - - // Restore the instance state - SavedState myState = (SavedState) state; - super.onRestoreInstanceState(myState.getSuperState()); - this.value = myState.value; - notifyChanged(); - } - - /** - * SavedState, a subclass of {@link android.preference.Preference.BaseSavedState}, will store the state - * of MyPreference, a subclass of Preference. - *

- * It is important to always call through to super methods. - */ - private static class SavedState extends BaseSavedState { - int value; - - public SavedState(Parcel source) { - super(source); - value = source.readInt(); - } - - @Override public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeInt(value); - } - - public SavedState(Parcelable superState) { - super(superState); - } - - @SuppressWarnings("unused") public static final Creator CREATOR = new Creator() { - public SavedState createFromParcel(Parcel in) { - return new SavedState(in); - } - - public SavedState[] newArray(int size) { - return new SavedState[size]; - } - }; - } -} \ No newline at end of file diff --git a/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png b/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png deleted file mode 100644 index d2aa1b09..00000000 Binary files a/src/main/res/drawable-hdpi/ambilwarna_arrow_down.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png b/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png deleted file mode 100644 index faf1bd75..00000000 Binary files a/src/main/res/drawable-hdpi/ambilwarna_arrow_right.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/ambilwarna_cursor.png b/src/main/res/drawable-hdpi/ambilwarna_cursor.png deleted file mode 100644 index 28cebc32..00000000 Binary files a/src/main/res/drawable-hdpi/ambilwarna_cursor.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/ambilwarna_target.png b/src/main/res/drawable-hdpi/ambilwarna_target.png deleted file mode 100644 index 6f7bf906..00000000 Binary files a/src/main/res/drawable-hdpi/ambilwarna_target.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png b/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png deleted file mode 100644 index 5ceec214..00000000 Binary files a/src/main/res/drawable-mdpi/ambilwarna_alphacheckered.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png b/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png deleted file mode 100644 index 5f434552..00000000 Binary files a/src/main/res/drawable-mdpi/ambilwarna_arrow_down.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png b/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png deleted file mode 100644 index 23d54619..00000000 Binary files a/src/main/res/drawable-mdpi/ambilwarna_arrow_right.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ambilwarna_cursor.png b/src/main/res/drawable-mdpi/ambilwarna_cursor.png deleted file mode 100644 index c336e883..00000000 Binary files a/src/main/res/drawable-mdpi/ambilwarna_cursor.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ambilwarna_hue.png b/src/main/res/drawable-mdpi/ambilwarna_hue.png deleted file mode 100644 index 09d28397..00000000 Binary files a/src/main/res/drawable-mdpi/ambilwarna_hue.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ambilwarna_target.png b/src/main/res/drawable-mdpi/ambilwarna_target.png deleted file mode 100644 index 56fa0de9..00000000 Binary files a/src/main/res/drawable-mdpi/ambilwarna_target.png and /dev/null differ diff --git a/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png b/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png deleted file mode 100644 index 592dd7ca..00000000 Binary files a/src/main/res/drawable-xhdpi/ambilwarna_arrow_down.png and /dev/null differ diff --git a/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png b/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png deleted file mode 100644 index 04f655ad..00000000 Binary files a/src/main/res/drawable-xhdpi/ambilwarna_arrow_right.png and /dev/null differ diff --git a/src/main/res/drawable-xhdpi/ambilwarna_cursor.png b/src/main/res/drawable-xhdpi/ambilwarna_cursor.png deleted file mode 100644 index ddea3167..00000000 Binary files a/src/main/res/drawable-xhdpi/ambilwarna_cursor.png and /dev/null differ diff --git a/src/main/res/drawable-xhdpi/ambilwarna_target.png b/src/main/res/drawable-xhdpi/ambilwarna_target.png deleted file mode 100644 index bb4b1eb7..00000000 Binary files a/src/main/res/drawable-xhdpi/ambilwarna_target.png and /dev/null differ diff --git a/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml b/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml deleted file mode 100644 index 049f1332..00000000 --- a/src/main/res/drawable/ambilwarna_alphacheckered_tiled.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/res/layout/ambilwarna_dialog.xml b/src/main/res/layout/ambilwarna_dialog.xml deleted file mode 100644 index 8a1a403e..00000000 --- a/src/main/res/layout/ambilwarna_dialog.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/res/layout/ambilwarna_pref_widget.xml b/src/main/res/layout/ambilwarna_pref_widget.xml deleted file mode 100644 index 2fd69a36..00000000 --- a/src/main/res/layout/ambilwarna_pref_widget.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - \ No newline at end of file -- cgit v1.2.3