--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <size android:width="20dp"
+ android:height="20dp" />
+ <solid android:color="@android:color/black"/>
+</shape>
\ No newline at end of file
--- /dev/null
+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;
+ }
+}
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;
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();
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());
}
/**
- * 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