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>