project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java
changeset 7476 2fb781bbdd51
parent 7461 38acbfdb484f
child 7485 0481bd74267c
--- 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);
 		}
 	}