/* * Copyright (C) 2010-2011 Dmitry Petuhov * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package org.pvoid.apteryxaustralis.ui; import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; import org.pvoid.apteryxaustralis.R; import org.pvoid.apteryxaustralis.storage.osmp.Terminal; import org.pvoid.apteryxaustralis.types.Group; import org.pvoid.apteryxaustralis.types.ITerminal; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.concurrent.locks.ReentrantLock; public class TerminalsArrayAdapter implements ListAdapter { ReentrantLock _mLock; private final LayoutInflater _mInflater; private ArrayList<ITerminal> _mTerminals; private Group _mGroup; private DataSetObserver _mObserver; private final Context _mContext; private long _mCash; public TerminalsArrayAdapter(Context context, Group group) { _mLock = new ReentrantLock(); _mTerminals = new ArrayList<ITerminal>(5); _mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); _mGroup = group; _mContext = context; } public Group getGroup() { return _mGroup; } @Override public synchronized void registerDataSetObserver(DataSetObserver dataSetObserver) { if(_mObserver==null) _mObserver = dataSetObserver; } @Override public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { if(_mObserver == dataSetObserver) _mObserver = null; } @Override public int getCount() { _mLock.lock(); try { return _mTerminals.size(); } finally { _mLock.unlock(); } } @Override public Object getItem(int index) { _mLock.lock(); try { if(index<0 || index>=_mTerminals.size()) return null; return _mTerminals.get(index); } finally { _mLock.unlock(); } } @Override public long getItemId(int i) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if(view==null) { view = _mInflater.inflate(R.layout.terminal, null); } ITerminal terminal = (ITerminal) getItem(position); if(terminal!=null) { TextView name = (TextView)view.findViewById(R.id.list_title); name.setText(terminal.getTitle()); TextView status = (TextView) view.findViewById(R.id.status); status.setText(terminal.getStatus(_mContext)); ImageView icon = (ImageView)view.findViewById(R.id.icon); switch(terminal.getState()) { case ITerminal.STATE_OK: icon.setImageResource(R.drawable.ic_terminal_active); break; case ITerminal.STATE_WARNING: icon.setImageResource(R.drawable.ic_terminal_pending); break; case ITerminal.STATE_ERROR: icon.setImageResource(R.drawable.ic_terminal_printer_error); break; case ITerminal.STATE_ERROR_CRITICAL: icon.setImageResource(R.drawable.ic_terminal_inactive); break; } } return view; } @Override public int getItemViewType(int i) { return 0; } @Override public int getViewTypeCount() { return 1; } @Override public boolean isEmpty() { _mLock.lock(); try { return _mTerminals.isEmpty(); } finally { _mLock.unlock(); } } public void setGroup(Group group) { _mGroup = group; } public void setState(Integer state) { _mGroup.state = state; } public int getState() { return _mGroup.state; } @Override public boolean areAllItemsEnabled() { return true; } @Override public boolean isEnabled(int i) { return true; } public void sort(Comparator<ITerminal> comparator) { _mLock.lock(); try { Collections.sort(_mTerminals,comparator); _mCash = 0; for(ITerminal terminal : _mTerminals) _mCash += terminal.getCash(); } finally { _mLock.unlock(); } } public void add(ITerminal terminal) { _mTerminals.add(terminal); } public void remove(ITerminal current) { _mTerminals.remove(current); } public void notifyList() { _mObserver.onChanged(); } public long getCash() { return _mCash; } }