package com.jenzz.materialpreference; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import static android.content.Context.LAYOUT_INFLATER_SERVICE; import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.text.TextUtils.isEmpty; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static com.jenzz.materialpreference.Typefaces.getRobotoRegular; public class Preference extends android.preference.Preference { TextView titleView; TextView summaryView; ImageView imageView; View imageFrame; private int iconResId; private Drawable icon; public Preference(Context context) { super(context); init(context, null, 0, 0); } public Preference(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0, 0); } public Preference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr, 0); } @TargetApi(LOLLIPOP) public Preference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs, defStyleAttr, defStyleRes); } private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { TypedArray typedArray = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.icon }, defStyleAttr, defStyleRes); iconResId = typedArray.getResourceId(0, 0); typedArray.recycle(); } @Override protected View onCreateView(ViewGroup parent) { LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(LAYOUT_INFLATER_SERVICE); View layout = layoutInflater.inflate(R.layout.mp_preference, parent, false); ViewGroup widgetFrame = (ViewGroup) layout.findViewById(R.id.widget_frame); int widgetLayoutResId = getWidgetLayoutResource(); if (widgetLayoutResId != 0) { layoutInflater.inflate(widgetLayoutResId, widgetFrame); } widgetFrame.setVisibility(widgetLayoutResId != 0 ? VISIBLE : GONE); return layout; } @Override protected void onBindView(View view) { super.onBindView(view); CharSequence title = getTitle(); titleView = (TextView) view.findViewById(R.id.title); titleView.setText(title); titleView.setVisibility(!isEmpty(title) ? VISIBLE : GONE); titleView.setTypeface(getRobotoRegular(getContext())); CharSequence summary = getSummary(); summaryView = (TextView) view.findViewById(R.id.summary); summaryView.setText(summary); summaryView.setVisibility(!isEmpty(summary) ? VISIBLE : GONE); summaryView.setTypeface(getRobotoRegular(getContext())); if (icon == null && iconResId > 0) { icon = getContext().getResources().getDrawable(iconResId); } imageView = (ImageView) view.findViewById(R.id.icon); imageView.setImageDrawable(icon); imageView.setVisibility(icon != null ? VISIBLE : GONE); imageFrame = view.findViewById(R.id.icon_frame); imageFrame.setVisibility(icon != null ? VISIBLE : GONE); } @Override public void setIcon(int iconResId) { super.setIcon(iconResId); this.iconResId = iconResId; } @Override public void setIcon(Drawable icon) { super.setIcon(icon); this.icon = icon; } }