package com.quemb.qmbform.view;
import com.quemb.qmbform.R;
import com.quemb.qmbform.descriptor.CellDescriptor;
import com.quemb.qmbform.descriptor.RowDescriptor;
import com.quemb.qmbform.descriptor.Value;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.widget.TextView;
/**
* Created by pmaccamp on 9/4/2015.
*/
public class FormDetailTextInlineFieldCell extends FormTitleFieldCell {
private TextView mDetailTextView;
public FormDetailTextInlineFieldCell(Context context,
RowDescriptor rowDescriptor) {
super(context, rowDescriptor);
}
@Override
protected void init() {
super.init();
mDetailTextView = (TextView) findViewById(R.id.detailTextView);
if (setStyleId(mDetailTextView, CellDescriptor.APPEARANCE_TEXT_VALUE, CellDescriptor.COLOR_VALUE) == false)
{
// If no specific style is defined for APPEARANCE_TEXT_VALUE,
// set inline text size to the default EditText size.
// Get the android:textAppearance item from R.style.Widget_AppCompat_EditText (default EditText style)
int editTextAppearanceId = getStyleItemResourceId(mDetailTextView.getContext(),
R.style.Widget_AppCompat_EditText, android.R.attr.textAppearance, android.R.attr.textAppearanceMediumInverse);
// Get the android:textSize item from retrieved textAppearance style
DisplayMetrics displayMetrics = mDetailTextView.getContext().getResources().getDisplayMetrics();
float editSize = getStyleItemDimension(mDetailTextView.getContext(),
editTextAppearanceId, android.R.attr.textSize, 18f * (displayMetrics.densityDpi / 160f));
// Set inline text size
mDetailTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, editSize);
}
}
@Override
protected int getResource() {
return R.layout.detail_text_inline_field_cell;
}
@Override
protected void update() {
super.update();
if (getRowDescriptor().getHint(getContext()) != null) {
getDetailTextView().setHint(getRowDescriptor().getHint(getContext()));
}
Value<?> value = getRowDescriptor().getValue();
if (value != null && value.getValue() != null) {
if (value.getValue() instanceof String) {
getDetailTextView().setText((String) value.getValue());
} else {
getDetailTextView().setText(String.valueOf(value.getValue()));
}
}
}
public TextView getDetailTextView() {
return mDetailTextView;
}
/**
* Get a item defined as resource ID from an android style
*/
private int getStyleItemResourceId(final Context context, final int styleId, final int attributeId, final int defValue)
{
// attribute to retrieve
int[] attrs = {attributeId}; // {android.R.attr.textColor, android.R.attr.text};
// Parse the style, using Context.obtainStyledAttributes()
TypedArray ta = context.obtainStyledAttributes(styleId, attrs);
// Fetch the resource, color or text defined in your style
int styleItem = ta.getResourceId(0, defValue); // android.R.attr.textAppearanceMediumInverse);
//int textColor = ta.getColor(1, Color.BLACK);
//String text = ta.getString(2);
// Recycle the TypedArray
ta.recycle();
return styleItem;
}
/**
* Get a item defined as dimension from an android style
*/
private float getStyleItemDimension(final Context context, final int styleId, final int attributeId, final float defValue)
{
// attribute to retrieve
int[] attrs = {attributeId};
// Parse the style, using Context.obtainStyledAttributes()
TypedArray ta = context.obtainStyledAttributes(styleId, attrs);
// Fetch the text from your style like this.
float dimensionItem = ta.getDimension(0, defValue);
// Recycle the TypedArray
ta.recycle();
return dimensionItem;
}
}