Skip to content

Commit

Permalink
Override onMeasure for use default width/height for wrap_content
Browse files Browse the repository at this point in the history
  • Loading branch information
hluhovskyi committed Mar 19, 2018
1 parent ce866fe commit 52f0410
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ public interface OnProgressChangeListener {
private final Paint mProgressArcPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

//Sizes
private int mDefaultWidth;
private int mDefaultHeight;
private int mMainCircleRadius;
private int mMainCircleRadiusExpanded;
private int mStrokeWidth;
Expand Down Expand Up @@ -287,6 +289,9 @@ private void init(Context context,
TypedArray array = context.obtainStyledAttributes(
attrs, R.styleable.CameraButton, defStyleAttr, defStyleRes);

mDefaultWidth = getResources().getDimensionPixelSize(R.dimen.cb_layout_width_default);
mDefaultHeight = getResources().getDimensionPixelSize(R.dimen.cb_layout_height_default);

mMainCircleRadius = getDimension(
context, array,
R.styleable.CameraButton_cb_main_circle_radius,
Expand Down Expand Up @@ -649,6 +654,28 @@ void makePaintColorsHovered(boolean hovered) {
}
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);

int width;
if (widthMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED) {
width = mDefaultWidth;
} else {
width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
}

int height;
if (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED) {
height = mDefaultHeight;
} else {
height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
}

setMeasuredDimension(width, height);
}

@Override
protected void onDraw(Canvas canvas) {
int width = canvas.getWidth();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.hluhovskyi.camerabutton

import android.support.annotation.DimenRes
import android.view.View
import junit.framework.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config

@RunWith(RobolectricTestRunner::class)
@Config(constants = BuildConfig::class)
class OnMeasureTest {

private lateinit var button: CameraButton

@Before
fun setUp() {
button = CameraButton(RuntimeEnvironment.application)
}

@Test
fun atMost() {
val widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.AT_MOST)
val heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.AT_MOST)

button.onMeasure(widthSpec, heightSpec)

assertEquals(getDimen(R.dimen.cb_layout_width_default), button.measuredWidth)
assertEquals(getDimen(R.dimen.cb_layout_height_default), button.measuredHeight)
}

@Test
fun unspecified() {
val widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
val heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)

button.onMeasure(widthSpec, heightSpec)

assertEquals(getDimen(R.dimen.cb_layout_width_default), button.measuredWidth)
assertEquals(getDimen(R.dimen.cb_layout_height_default), button.measuredHeight)
}

@Test
fun exactly() {
val widthSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY)
val heightSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY)

button.onMeasure(widthSpec, heightSpec)

assertEquals(100, button.measuredWidth)
assertEquals(100, button.measuredHeight)
}

private fun getDimen(@DimenRes dimenRes: Int) =
RuntimeEnvironment.application.resources
.getDimensionPixelSize(R.dimen.cb_layout_width_default)
}

0 comments on commit 52f0410

Please sign in to comment.