Make avatar size and text size of UserView configurable

Change-Id: Id835f12dfda6aee79cd967488d7301329cd30594
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/app/src/main/java/com/google/reviewit/util/WidgetUtil.java b/app/src/main/java/com/google/reviewit/util/WidgetUtil.java
index df03587..6c2b92e 100644
--- a/app/src/main/java/com/google/reviewit/util/WidgetUtil.java
+++ b/app/src/main/java/com/google/reviewit/util/WidgetUtil.java
@@ -118,6 +118,28 @@
     return (int) context.getResources().getDimension(id);
   }
 
+  public float toDimension(String value, float defaultValue) {
+    if (value == null) {
+      return defaultValue;
+    }
+    try {
+      if (value.endsWith("sp")) {
+        value = value.substring(0, value.length() - 2).trim();
+        return spToPx(Integer.valueOf(value));
+      } else if (value.endsWith("dp")) {
+        value = value.substring(0, value.length() - 2).trim();
+        return dpToPx(Integer.valueOf(value));
+      } else if (value.endsWith("px")) {
+        value = value.substring(0, value.length() - 2).trim();
+        return Integer.valueOf(value);
+      } else {
+        return Integer.valueOf(value);
+      }
+    } catch (NumberFormatException e) {
+      return defaultValue;
+    }
+  }
+
   public void setBackgroundColor(View view, @ColorRes int colorId) {
     view.setBackgroundColor(color(colorId));
   }
diff --git a/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java b/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java
index f9a0920..765621f 100644
--- a/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java
+++ b/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java
@@ -24,6 +24,7 @@
 import android.widget.TextView;
 
 import com.google.reviewit.R;
+import com.google.reviewit.util.WidgetUtil;
 
 /**
  * TextView that automatically sets the font size as large as possible
@@ -46,13 +47,14 @@
 
   public MaxFontSizeTextView(Context context, AttributeSet attrs) {
     super(context, attrs);
+    WidgetUtil widgetUtil = new WidgetUtil(context);
     TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
         R.styleable.MaxFontSizeTextView, 0, 0);
     maxLineLength = a.getInteger(R.styleable
         .MaxFontSizeTextView_maxLineLength, 0);
-    minTextSize = readAttr(a.getString(
+    minTextSize = widgetUtil.toDimension(a.getString(
         R.styleable.MaxFontSizeTextView_minTextSize), MIN_TEXT_SIZE_DEFAULT);
-    maxTextSize = readAttr(a.getString(
+    maxTextSize = widgetUtil.toDimension(a.getString(
         R.styleable.MaxFontSizeTextView_maxTextSize), MAX_TEXT_SIZE_DEFAULT);
 
     paint = new Paint();
@@ -90,25 +92,6 @@
     }
   }
 
-  private float readAttr(String attr, float defaultValue) {
-    if (attr == null) {
-      return defaultValue;
-    }
-    try {
-      if (attr.endsWith("sp")) {
-        attr = attr.substring(0, attr.length() - 2).trim();
-        return spToPx(Integer.valueOf(attr));
-      } else if (attr.endsWith("px")) {
-        attr = attr.substring(0, attr.length() - 2).trim();
-        return Integer.valueOf(attr);
-      } else {
-        return Integer.valueOf(attr);
-      }
-    } catch (NumberFormatException e) {
-      return defaultValue;
-    }
-  }
-
   public void setMinTextSize(float minTextSize) {
     this.minTextSize = minTextSize;
   }
@@ -184,9 +167,4 @@
       refitText(getText(), width);
     }
   }
-
-  private int spToPx(int sp) {
-    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp,
-        getResources().getDisplayMetrics());
-  }
 }
diff --git a/app/src/main/java/com/google/reviewit/widget/UserView.java b/app/src/main/java/com/google/reviewit/widget/UserView.java
index 58e61d5..23ab47d 100644
--- a/app/src/main/java/com/google/reviewit/widget/UserView.java
+++ b/app/src/main/java/com/google/reviewit/widget/UserView.java
@@ -15,9 +15,12 @@
 package com.google.reviewit.widget;
 
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.reviewit.R;
@@ -39,6 +42,23 @@
     super(context, attrs, defStyle);
 
     inflate(context, R.layout.user, this);
+
+    WidgetUtil widgetUtil = new WidgetUtil(context);
+    TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
+        R.styleable.UserView, 0, 0);
+    int avatarSize = (int) widgetUtil.toDimension(
+        a.getString(R.styleable.UserView_avatarSize), -1);
+    if (avatarSize > 0) {
+      findViewById(R.id.avatar).setLayoutParams(new LayoutParams(avatarSize,
+          avatarSize));
+    }
+
+    float textSize = widgetUtil.toDimension(
+        a.getString(R.styleable.UserView_textSize), -1);
+    if (textSize > 0) {
+      ((TextView)findViewById(R.id.userName)).setTextSize(
+          TypedValue.COMPLEX_UNIT_PX, textSize);
+    }
   }
 
   public void init(ReviewItApp app, AccountInfo account) {
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 662122a..3d6fa8e 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -21,4 +21,9 @@
     <attr name="maxLineLength" format="integer"/>
     <attr name="ellipsize" format="boolean"/>
   </declare-styleable>
+
+  <declare-styleable name="UserView">
+    <attr name="avatarSize" format="string"/>
+    <attr name="textSize" format="string"/>
+  </declare-styleable>
 </resources>