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<Pair<Room, Long>> rooms = new ArrayList<Pair<Room, Long>>();
+public class RoomlistAdapter extends ObservableTreeMapAdapter<String, Pair<RoomlistRoom, Long>> {
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<Pair<RoomlistRoom, Long>> 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<Pair<Room, Long>>(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<Pair<Room, Long>> {
+ private static final class RoomAgeComparator implements Comparator<Pair<RoomlistRoom, Long>> {
public static final RoomAgeComparator INSTANCE = new RoomAgeComparator();
- public int compare(Pair<Room, Long> lhs, Pair<Room, Long> rhs) {
+ public int compare(Pair<RoomlistRoom, Long> lhs, Pair<RoomlistRoom, Long> rhs) {
return rhs.second.compareTo(lhs.second);
}
}