/** * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr) * This file is part of CSipSimple. * * CSipSimple is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * If you own a pjsip commercial license you can also redistribute it * and/or modify it under the terms of the GNU Lesser General Public License * as an android library. * * CSipSimple is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CSipSimple. If not, see <http://www.gnu.org/licenses/>. */ package com.csipsimple.ui.account; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.SimpleCursorAdapter; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.csipsimple.R; import com.csipsimple.api.SipProfile; import com.csipsimple.utils.AccountListUtils; import com.csipsimple.utils.AccountListUtils.AccountStatusDisplay; import com.csipsimple.utils.Log; import com.csipsimple.wizards.WizardUtils; import com.csipsimple.wizards.WizardUtils.WizardInfo; public class AccountsEditListAdapter extends SimpleCursorAdapter implements OnClickListener { public static final class AccountListItemViews { public TextView labelView; public TextView statusView; public View indicator; public View grabber; public CheckBox activeCheckbox; public ImageView barOnOff; } private boolean draggable = false; public static final class AccountRowTag { public long accountId; public boolean activated; } private OnCheckedRowListener checkListener; public interface OnCheckedRowListener { void onToggleRow(AccountRowTag tag); } private static final String THIS_FILE = "AccEditListAd"; public AccountsEditListAdapter(Context context, Cursor c) { super(context, R.layout.accounts_edit_list_item, c, new String[] { SipProfile.FIELD_DISPLAY_NAME }, new int[] { R.id.AccTextView }, 0); } public void setOnCheckedRowListener(OnCheckedRowListener l) { checkListener = l; } private AccountListItemViews tagRowView(View view) { AccountListItemViews tagView = new AccountListItemViews(); tagView.labelView = (TextView) view.findViewById(R.id.AccTextView); tagView.indicator = view.findViewById(R.id.indicator); tagView.grabber = view.findViewById(R.id.grabber); tagView.activeCheckbox = (CheckBox) view.findViewById(R.id.AccCheckBoxActive); tagView.statusView = (TextView) view.findViewById(R.id.AccTextStatusView); tagView.barOnOff = (ImageView) tagView.indicator.findViewById(R.id.bar_onoff); view.setTag(tagView); tagView.indicator.setOnClickListener(this); return tagView; } @Override public void bindView(View view, Context context, Cursor cursor) { super.bindView(view, context, cursor); AccountListItemViews tagView = (AccountListItemViews) view.getTag(); if (tagView == null) { tagView = tagRowView(view); } // Get the view object and account object for the row final SipProfile account = new SipProfile(cursor); AccountRowTag tagIndicator = new AccountRowTag(); tagIndicator.accountId = account.id; tagIndicator.activated = account.active; tagView.indicator.setTag(tagIndicator); tagView.indicator.setVisibility(draggable ? View.GONE : View.VISIBLE); tagView.grabber.setVisibility(draggable ? View.VISIBLE : View.GONE); // Get the status of this profile tagView.labelView.setText(account.display_name); // Update status label and color if (account.active) { AccountStatusDisplay accountStatusDisplay = AccountListUtils.getAccountDisplay(context, account.id); tagView.statusView.setText(accountStatusDisplay.statusLabel); tagView.labelView.setTextColor(accountStatusDisplay.statusColor); // Update checkbox selection tagView.activeCheckbox.setChecked(true); tagView.barOnOff.setImageResource(accountStatusDisplay.checkBoxIndicator); } else { tagView.statusView.setText(R.string.acct_inactive); tagView.labelView.setTextColor(mContext.getResources().getColor( R.color.account_inactive)); // Update checkbox selection tagView.activeCheckbox.setChecked(false); tagView.barOnOff.setImageResource(R.drawable.ic_indicator_off); } // Update account image final WizardInfo wizardInfos = WizardUtils.getWizardClass(account.wizard); if (wizardInfos != null) { tagView.activeCheckbox.setBackgroundResource(wizardInfos.icon); } } @Override public void onClick(View v) { Object tag = v.getTag(); Log.d(THIS_FILE, "Clicked on ..."); if (checkListener != null && tag != null) { checkListener.onToggleRow((AccountRowTag) tag); } } /** * Set draggable mode of the adapter Ie show or hide the grabber icon * * @param aDraggable if true we enter dragging mode */ public void setDraggable(boolean aDraggable) { draggable = aDraggable; notifyDataSetChanged(); } /** * Toggle dragable mode * * @see AccountsEditList#setDraggable(boolean aDraggable) */ public void toggleDraggable() { setDraggable(!draggable); } /** * Get draggable mode of the adapter * * @return true if in dragging mode * @see AccountsEditList#setDraggable(boolean aDraggable) */ public boolean isDraggable() { return draggable; } }