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>