package org.mozilla.gecko.sync.setup.activities; import java.util.ArrayList; import java.util.List; import org.mozilla.gecko.R; import org.mozilla.gecko.sync.repositories.domain.ClientRecord; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; public class ClientRecordArrayAdapter extends ArrayAdapter<Object> { public static final String LOG_TAG = "ClientRecArrayAdapter"; private ClientRecord[] clientRecordList; private boolean[] checkedItems; private int numCheckedGUIDs; private SendTabActivity sendTabActivity; public ClientRecordArrayAdapter(Context context, int textViewResourceId, ClientRecord[] clientRecordList) { super(context, textViewResourceId, clientRecordList); this.sendTabActivity = (SendTabActivity) context; this.clientRecordList = clientRecordList; this.checkedItems = new boolean[clientRecordList.length]; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final Context context = this.getContext(); // Reuse View objects if they exist. View row = convertView; if (row == null) { row = View.inflate(context, R.layout.sync_list_item, null); setSelectable(row, true); row.setBackgroundResource(android.R.drawable.menuitem_background); } final ClientRecord clientRecord = clientRecordList[position]; ImageView clientType = (ImageView) row.findViewById(R.id.img); TextView clientName = (TextView) row.findViewById(R.id.client_name); // Set up checkbox and restore stored state. CheckBox checkbox = (CheckBox) row.findViewById(R.id.check); checkbox.setChecked(checkedItems[position]); setSelectable(checkbox, false); clientName.setText(clientRecord.name); clientType.setImageResource(getImage(clientRecord)); row.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { CheckBox item = (CheckBox) view.findViewById(R.id.check); // Update the checked item, both in the UI and in the checkedItems array. boolean newCheckedValue = !item.isChecked(); item.setChecked(newCheckedValue); checkedItems[position] = newCheckedValue; numCheckedGUIDs += newCheckedValue ? 1 : -1; if (numCheckedGUIDs <= 0) { sendTabActivity.enableSend(false); return; } sendTabActivity.enableSend(true); } }); return row; } public List<String> getCheckedGUIDs() { final List<String> guids = new ArrayList<String>(); for (int i = 0; i < checkedItems.length; i++) { if (checkedItems[i]) { guids.add(clientRecordList[i].guid); } } return guids; } public int getNumCheckedGUIDs() { return numCheckedGUIDs; } private int getImage(ClientRecord record) { if ("mobile".equals(record.type)) { return R.drawable.mobile; } return R.drawable.desktop; } private void setSelectable(View view, boolean selectable) { view.setClickable(selectable); view.setFocusable(selectable); } }