package pro.dbro.ble.ui.adapter; import android.content.Context; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.ArrayList; import pro.dbro.ble.R; import timber.log.Timber; /** * Created by davidbrodsky on 4/20/15. */ public class StatusArrayAdapter extends ArrayAdapter<String> { public StatusArrayAdapter(Context context, ArrayList<String> statuses) { super(context, android.R.layout.simple_spinner_dropdown_item, statuses); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } @Override public View getView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } public View getCustomView(int position, View convertView, ViewGroup parent) { Context context = parent.getContext(); // Get the data item for this position String status = getItem(position); // Check if an existing view is being reused, otherwise inflate the view if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_spinner_dropdown_item, parent, false); ((TextView) convertView).setCompoundDrawablePadding((int) dipToPixels(context, 8)); } TextView statusLabel = (TextView) convertView; statusLabel.setText(status); String[] choices = context.getResources().getStringArray(R.array.status_options); if (status.equals(choices[0])) { // Always online statusLabel.setCompoundDrawablesWithIntrinsicBounds(context.getDrawable(R.drawable.status_always_online), null, null, null); } else if (status.equals(choices[1])) { // Online when using app statusLabel.setCompoundDrawablesWithIntrinsicBounds(context.getDrawable(R.drawable.status_online_in_foreground), null, null, null); } else if (status.equals(choices[2])) { // Offline statusLabel.setCompoundDrawablesWithIntrinsicBounds(context.getDrawable(R.drawable.status_offline), null, null, null); } else { Timber.e("Unknown status. Cannot set adapter view correctly"); statusLabel.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); } return convertView; } public static float dipToPixels(Context context, float dipValue) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); } }