From: tobiasKaminsky Date: Wed, 27 May 2015 16:35:39 +0000 (+0200) Subject: Merge branch 'navigationDrawer_update' of github.com:owncloud/android into navigation... X-Git-Tag: oc-android-1.7.2~1^2~23^2~37 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/a75ffde65f732d695f557bdfe7d954c40cfae4d4?hp=7196b8837445b3ff9bcdabcb2dc86b82273d5e2e Merge branch 'navigationDrawer_update' of github.com:owncloud/android into navigationDrawer_update --- diff --git a/res/drawable/radiobutton_avatar.xml b/res/drawable/radiobutton_avatar.xml new file mode 100644 index 00000000..ab7934b9 --- /dev/null +++ b/res/drawable/radiobutton_avatar.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/src/com/owncloud/android/ui/TextDrawable.java b/src/com/owncloud/android/ui/TextDrawable.java new file mode 100644 index 00000000..ae5be54f --- /dev/null +++ b/src/com/owncloud/android/ui/TextDrawable.java @@ -0,0 +1,82 @@ +package com.owncloud.android.ui; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +/** + * Created by tobi on 24.05.15. + */ +public class TextDrawable extends Drawable { + + private final String text; + private final Integer color; + private final Float size; + + public TextDrawable(String text, int r, int g, int b, float size) { + + this.text = text; + this.color = Color.rgb(r, g, b); + this.size = size; + +// this.paint = new Paint(); +//// paint.setColor(Color.BLACK); +//// paint.setTextSize(18f); +//// paint.setAntiAlias(true); +//// paint.setFakeBoldText(true); +// +//// paint.setARGB(255, r, g, b); +//// paint.setStyle(Paint.Style.FILL); +//// paint.setTextAlign(Paint.Align.CENTER); +// +// +// paint.setColor(Color.BLACK); +// paint.setTextSize(22f); +// paint.setAntiAlias(true); +// paint.setFakeBoldText(true); +// paint.setTextAlign(Paint.Align.CENTER); + } + + @Override + public void draw(Canvas canvas) { + // TODO Paint in Constructor + Paint bg = new Paint(); + bg.setStyle(Paint.Style.FILL); + bg.setColor(color); + canvas.drawRect(0,-20,20,40,bg); + + Paint paint = new Paint(); + paint.setColor(Color.WHITE); + paint.setTextSize(20); + paint.setAntiAlias(true); + paint.setFakeBoldText(true); +// paint.setTextAlign(Paint.Align.CENTER); + + Rect bounds = new Rect(); + paint.getTextBounds(text, 0, text.length(), bounds); + int x = (canvas.getWidth() / 2) - (bounds.width() / 2); + int y = (canvas.getHeight() / 2) - (bounds.height() / 2); + +// canvas.drawText(text, x, y, paint); + canvas.drawText(text, 4, 6, paint); + } + + @Override + public void setAlpha(int alpha) { +// paint.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter cf) { +// paint.setColorFilter(cf); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } +} diff --git a/src/com/owncloud/android/ui/adapter/NavigationDrawerListAdapter.java b/src/com/owncloud/android/ui/adapter/NavigationDrawerListAdapter.java index b53f66f4..0a5b9562 100644 --- a/src/com/owncloud/android/ui/adapter/NavigationDrawerListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/NavigationDrawerListAdapter.java @@ -28,7 +28,15 @@ import java.util.ArrayList; import android.accounts.Account; import android.accounts.AccountManager; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.RectShape; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -44,9 +52,12 @@ import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.NavigationDrawerItem; +import com.owncloud.android.ui.TextDrawable; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.utils.BitmapUtils; +import org.apache.commons.codec.binary.Hex; + public class NavigationDrawerListAdapter extends BaseAdapter { private final static String TAG = NavigationDrawerListAdapter.class.getSimpleName(); @@ -127,26 +138,38 @@ public class NavigationDrawerListAdapter extends BaseAdapter { for (Account account : mAccounts) { RadioButton rb = new RadioButton(mContext); + rb.setText(account.name); rb.setContentDescription(account.name); + rb.setTextColor(Color.BLACK); + rb.setEllipsize(TextUtils.TruncateAt.MIDDLE); + rb.setSingleLine(); + rb.setCompoundDrawablePadding(30); + try { - byte[] bytesOfMessage = account.name.substring(0,5).getBytes("UTF-8"); + // using adapted algorithm from /core/js/placeholder.js:50 + int lastAtPos = account.name.lastIndexOf("@"); + String username = account.name.substring(0, lastAtPos); + byte[] seed = username.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] digest = md.digest(bytesOfMessage); - int result = Math.abs(ByteBuffer.wrap(digest).getInt()); + byte[] seedMd5 = md.digest(seed); + Integer seedMd5Int = Math.abs(new String(Hex.encodeHex(seedMd5)).hashCode()); + + double maxRange = java.lang.Integer.MAX_VALUE; + float hue = (float) (seedMd5Int / maxRange * 360); + + int[] rgb = BitmapUtils.HSLtoRGB(hue, 90.0f, 65.0f, 1.0f); + +// Drawable drawable = MainApp.getAppContext().getResources().getDrawable(R.drawable.radiobutton_avatar); +// drawable.setColorFilter(Color.rgb(rgb[0], rgb[1], rgb[2]), PorterDuff.Mode.SRC_ATOP); - Log_OC.d(TAG, "Integer: " + result % 100000); - Log_OC.d(TAG, "length: " + digest.length); - Double hue = (result % 100000) / 99999.0; + TextDrawable text = new TextDrawable(username.substring(0, 1).toUpperCase(), rgb[0], rgb[1], rgb[2], rb.getTextSize()); - Log_OC.d(TAG, "hue: " + hue); + rb.setCompoundDrawablesWithIntrinsicBounds(text, null, null, null); - int[] rgb = BitmapUtils.hslToRgb(hue, 0.9, 0.65); - rb.setTextColor(Color.rgb(rgb[0], rgb[1], rgb[2])); - Log_OC.d(TAG, "Color: " + rgb[0] + " " + rgb[1] + rgb[2]); } catch (Exception e){ Log_OC.d(TAG, e.toString()); diff --git a/src/com/owncloud/android/utils/BitmapUtils.java b/src/com/owncloud/android/utils/BitmapUtils.java index 7af6960f..4cc9fff4 100644 --- a/src/com/owncloud/android/utils/BitmapUtils.java +++ b/src/com/owncloud/android/utils/BitmapUtils.java @@ -178,44 +178,81 @@ public class BitmapUtils { } /** - * Converts an HSL color value to RGB. Conversion formula - * adapted from http://en.wikipedia.org/wiki/HSL_color_space. - * Assumes h, s, and l are contained in the set [0, 1] and - * returns r, g, and b in the set [0, 255]. - * from: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c + * Convert HSL values to a RGB Color. * - * @param integer h The hue - * @param Integer s The saturation - * @param Integer l The lightness - * @return Array The RGB representation + * @param h Hue is specified as degrees in the range 0 - 360. + * @param s Saturation is specified as a percentage in the range 1 - 100. + * @param l Lumanance is specified as a percentage in the range 1 - 100. + * @paran alpha the alpha value between 0 - 1 + * adapted from https://svn.codehaus.org/griffon/builders/gfxbuilder/tags/GFXBUILDER_0.2/ + * gfxbuilder-core/src/main/com/camick/awt/HSLColor.java */ - public static int[] hslToRgb(Double h, Double s, Double l){ - Double r, g, b; - - if(s == 0){ - r = g = b = l; // achromatic - } else { - Double q = l < 0.5 ? l * (1 + s) : l + s - l * s; - Double p = 2 * l - q; - r = hue2rgb(p, q, h + 1/3) * 255; - g = hue2rgb(p, q, h) * 255; - b = hue2rgb(p, q, h - 1/3) * 255; + public static int[] HSLtoRGB(float h, float s, float l, float alpha) + { + if (s <0.0f || s > 100.0f) + { + String message = "Color parameter outside of expected range - Saturation"; + throw new IllegalArgumentException( message ); + } + + if (l <0.0f || l > 100.0f) + { + String message = "Color parameter outside of expected range - Luminance"; + throw new IllegalArgumentException( message ); + } + + if (alpha <0.0f || alpha > 1.0f) + { + String message = "Color parameter outside of expected range - Alpha"; + throw new IllegalArgumentException( message ); } + // Formula needs all values between 0 - 1. + + h = h % 360.0f; + h /= 360f; + s /= 100f; + l /= 100f; + + float q = 0; + + if (l < 0.5) + q = l * (1 + s); + else + q = (l + s) - (s * l); - int[] array = {r.intValue(), g.intValue(), b.intValue()}; + float p = 2 * l - q; + + int r = Math.round(Math.max(0, HueToRGB(p, q, h + (1.0f / 3.0f)) * 256)); + int g = Math.round(Math.max(0, HueToRGB(p, q, h) * 256)); + int b = Math.round(Math.max(0, HueToRGB(p, q, h - (1.0f / 3.0f)) * 256)); + + int[] array = {r, g, b}; return array; } - private static Double hue2rgb(Double p, Double q, Double t){ - if(t < 0) t += 1; - if(t > 1) t -= 1; - if(t < 1/6) return p + (q - p) * 6 * t; - if(t < 1/2) return q; - if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; - return p; - } - + private static float HueToRGB(float p, float q, float h){ + if (h < 0) h += 1; + + if (h > 1 ) h -= 1; + + if (6 * h < 1) + { + return p + ((q - p) * 6 * h); + } + + if (2 * h < 1 ) + { + return q; + } + + if (3 * h < 2) + { + return p + ( (q - p) * 6 * ((2.0f / 3.0f) - h) ); + } + + return p; + } /** * Checks if file passed is an image