diff -r 45b9f25ff611 -r 2fb781bbdd51 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java Mon Aug 06 22:33:07 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java Mon Aug 06 22:39:36 2012 +0200 @@ -1,85 +1,45 @@ package org.hedgewars.hedgeroid.netplay; -import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; -import java.util.List; import org.hedgewars.hedgeroid.R; +import org.hedgewars.hedgeroid.Datastructures.RoomlistRoom; import android.content.Context; import android.content.res.Resources; -import android.database.DataSetObserver; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.BaseAdapter; import android.widget.TextView; -public class RoomlistAdapter extends BaseAdapter { - private List> rooms = new ArrayList>(); +public class RoomlistAdapter extends ObservableTreeMapAdapter> { private Context context; - private Roomlist roomlist; - - private DataSetObserver observer = new DataSetObserver() { - @Override - public void onChanged() { - reloadFromList(roomlist); - } - - @Override - public void onInvalidated() { - invalidate(); - } - }; public RoomlistAdapter(Context context) { this.context = context; } - public int getCount() { - return rooms.size(); + @Override + protected Comparator> getEntryOrder() { + return RoomAgeComparator.INSTANCE; } - - public Room getItem(int position) { - return rooms.get(position).first; + + public RoomlistRoom getItem(int position) { + return getEntries().get(position).first; } public long getItemId(int position) { - return rooms.get(position).second; + return getEntries().get(position).second; } public boolean hasStableIds() { return true; } - - public void setList(Roomlist roomlist) { - if(this.roomlist != null) { - this.roomlist.unregisterObserver(observer); - } - this.roomlist = roomlist; - this.roomlist.registerObserver(observer); - reloadFromList(roomlist); - } - public void invalidate() { - if(roomlist != null) { - roomlist.unregisterObserver(observer); - } - roomlist = null; - notifyDataSetInvalidated(); - } - - private void reloadFromList(Roomlist list) { - rooms = new ArrayList>(roomlist.getMap().values()); - Collections.sort(rooms, RoomAgeComparator.INSTANCE); - notifyDataSetChanged(); - } - - private static CharSequence formatExtra(Resources res, Room room) { + private static CharSequence formatExtra(Resources res, RoomlistRoom room) { String ownermsg = res.getString(R.string.roomlist_owner, room.owner); - String mapmsg = res.getString(R.string.roomlist_map, Room.formatMapName(res, room.map)); + String mapmsg = res.getString(R.string.roomlist_map, RoomlistRoom.formatMapName(res, room.map)); String scheme = room.scheme.equals(room.weapons) ? room.scheme : room.scheme + " / " + room.weapons; String schememsg = res.getString(R.string.roomlist_scheme, scheme); return ownermsg + ". " + mapmsg + ", " + schememsg; @@ -92,7 +52,7 @@ v = vi.inflate(R.layout.listview_room, null); } - Room room = rooms.get(position).first; + RoomlistRoom room = getItem(position); int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing; if(v.findViewById(android.R.id.text1) == null) { @@ -114,7 +74,7 @@ teamCountView.setText(String.valueOf(room.teamCount)); } ownerView.setText(room.owner); - mapView.setText(Room.formatMapName(context.getResources(), room.map)); + mapView.setText(RoomlistRoom.formatMapName(context.getResources(), room.map)); schemeView.setText(room.scheme); weaponView.setText(room.weapons); } else { @@ -130,9 +90,9 @@ return v; } - private static final class RoomAgeComparator implements Comparator> { + private static final class RoomAgeComparator implements Comparator> { public static final RoomAgeComparator INSTANCE = new RoomAgeComparator(); - public int compare(Pair lhs, Pair rhs) { + public int compare(Pair lhs, Pair rhs) { return rhs.second.compareTo(lhs.second); } }