project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java
changeset 7476 2fb781bbdd51
parent 7461 38acbfdb484f
child 7485 0481bd74267c
equal deleted inserted replaced
7473:45b9f25ff611 7476:2fb781bbdd51
     1 package org.hedgewars.hedgeroid.netplay;
     1 package org.hedgewars.hedgeroid.netplay;
     2 
     2 
     3 import java.util.ArrayList;
       
     4 import java.util.Collections;
       
     5 import java.util.Comparator;
     3 import java.util.Comparator;
     6 import java.util.List;
       
     7 
     4 
     8 import org.hedgewars.hedgeroid.R;
     5 import org.hedgewars.hedgeroid.R;
       
     6 import org.hedgewars.hedgeroid.Datastructures.RoomlistRoom;
     9 
     7 
    10 import android.content.Context;
     8 import android.content.Context;
    11 import android.content.res.Resources;
     9 import android.content.res.Resources;
    12 import android.database.DataSetObserver;
       
    13 import android.util.Pair;
    10 import android.util.Pair;
    14 import android.view.LayoutInflater;
    11 import android.view.LayoutInflater;
    15 import android.view.View;
    12 import android.view.View;
    16 import android.view.ViewGroup;
    13 import android.view.ViewGroup;
    17 import android.widget.BaseAdapter;
       
    18 import android.widget.TextView;
    14 import android.widget.TextView;
    19 
    15 
    20 public class RoomlistAdapter extends BaseAdapter {
    16 public class RoomlistAdapter extends ObservableTreeMapAdapter<String, Pair<RoomlistRoom, Long>> {
    21 	private List<Pair<Room, Long>> rooms = new ArrayList<Pair<Room, Long>>();
       
    22 	private Context context;
    17 	private Context context;
    23 	private Roomlist roomlist;
       
    24 	
       
    25 	private DataSetObserver observer = new DataSetObserver() {
       
    26 		@Override
       
    27 		public void onChanged() {
       
    28 			reloadFromList(roomlist);
       
    29 		}
       
    30 		
       
    31 		@Override
       
    32 		public void onInvalidated() {
       
    33 			invalidate();
       
    34 		}
       
    35 	};
       
    36 	
    18 	
    37 	public RoomlistAdapter(Context context) {
    19 	public RoomlistAdapter(Context context) {
    38 		this.context = context;
    20 		this.context = context;
    39 	}
    21 	}
    40 	
    22 	
    41 	public int getCount() {
    23 	@Override
    42 		return rooms.size();
    24 	protected Comparator<Pair<RoomlistRoom, Long>> getEntryOrder() {
       
    25 		return RoomAgeComparator.INSTANCE;
    43 	}
    26 	}
    44 
    27 	
    45 	public Room getItem(int position) {
    28 	public RoomlistRoom getItem(int position) {
    46 		return rooms.get(position).first;
    29 		return getEntries().get(position).first;
    47 	}
    30 	}
    48 
    31 
    49 	public long getItemId(int position) {
    32 	public long getItemId(int position) {
    50 		return rooms.get(position).second;
    33 		return getEntries().get(position).second;
    51 	}
    34 	}
    52 
    35 
    53 	public boolean hasStableIds() {
    36 	public boolean hasStableIds() {
    54 		return true;
    37 		return true;
    55 	}
    38 	}
    56 
       
    57 	public void setList(Roomlist roomlist) {
       
    58 		if(this.roomlist != null) {
       
    59 			this.roomlist.unregisterObserver(observer);
       
    60 		}
       
    61 		this.roomlist = roomlist;
       
    62 		this.roomlist.registerObserver(observer);
       
    63 		reloadFromList(roomlist);
       
    64 	}
       
    65 	
    39 	
    66 	public void invalidate() {
    40 	private static CharSequence formatExtra(Resources res, RoomlistRoom room) {
    67 		if(roomlist != null) {
       
    68 			roomlist.unregisterObserver(observer);
       
    69 		}
       
    70 		roomlist = null;
       
    71 		notifyDataSetInvalidated();
       
    72 	}
       
    73 	
       
    74 	private void reloadFromList(Roomlist list) {
       
    75 		rooms = new ArrayList<Pair<Room, Long>>(roomlist.getMap().values());
       
    76 		Collections.sort(rooms, RoomAgeComparator.INSTANCE);
       
    77 		notifyDataSetChanged();
       
    78 	}
       
    79 	
       
    80 	private static CharSequence formatExtra(Resources res, Room room) {
       
    81 		String ownermsg = res.getString(R.string.roomlist_owner, room.owner);
    41 		String ownermsg = res.getString(R.string.roomlist_owner, room.owner);
    82 		String mapmsg = res.getString(R.string.roomlist_map, Room.formatMapName(res, room.map));
    42 		String mapmsg = res.getString(R.string.roomlist_map, RoomlistRoom.formatMapName(res, room.map));
    83 		String scheme = room.scheme.equals(room.weapons) ? room.scheme : room.scheme + " / " + room.weapons;
    43 		String scheme = room.scheme.equals(room.weapons) ? room.scheme : room.scheme + " / " + room.weapons;
    84 		String schememsg = res.getString(R.string.roomlist_scheme, scheme);
    44 		String schememsg = res.getString(R.string.roomlist_scheme, scheme);
    85 		return ownermsg + ". " + mapmsg + ", " + schememsg;
    45 		return ownermsg + ". " + mapmsg + ", " + schememsg;
    86 	}
    46 	}
    87 	
    47 	
    90 		if (v == null) {
    50 		if (v == null) {
    91 			LayoutInflater vi = LayoutInflater.from(context);
    51 			LayoutInflater vi = LayoutInflater.from(context);
    92 			v = vi.inflate(R.layout.listview_room, null);
    52 			v = vi.inflate(R.layout.listview_room, null);
    93 		}
    53 		}
    94 		
    54 		
    95 		Room room = rooms.get(position).first;
    55 		RoomlistRoom room = getItem(position);
    96 		int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing;
    56 		int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing;
    97 		
    57 		
    98 		if(v.findViewById(android.R.id.text1) == null) {
    58 		if(v.findViewById(android.R.id.text1) == null) {
    99 			// Tabular room list
    59 			// Tabular room list
   100 			TextView roomnameView = (TextView)v.findViewById(R.id.roomname);
    60 			TextView roomnameView = (TextView)v.findViewById(R.id.roomname);
   112 			}
    72 			}
   113 			if(teamCountView != null) {
    73 			if(teamCountView != null) {
   114 				teamCountView.setText(String.valueOf(room.teamCount));
    74 				teamCountView.setText(String.valueOf(room.teamCount));
   115 			}
    75 			}
   116 			ownerView.setText(room.owner);
    76 			ownerView.setText(room.owner);
   117 			mapView.setText(Room.formatMapName(context.getResources(), room.map));
    77 			mapView.setText(RoomlistRoom.formatMapName(context.getResources(), room.map));
   118 			schemeView.setText(room.scheme);
    78 			schemeView.setText(room.scheme);
   119 			weaponView.setText(room.weapons);
    79 			weaponView.setText(room.weapons);
   120 		} else {
    80 		} else {
   121 			// Small room list
    81 			// Small room list
   122 			TextView v1 = (TextView)v.findViewById(android.R.id.text1);
    82 			TextView v1 = (TextView)v.findViewById(android.R.id.text1);
   128 		}
    88 		}
   129 		
    89 		
   130 		return v;
    90 		return v;
   131 	}
    91 	}
   132 	
    92 	
   133 	private static final class RoomAgeComparator implements Comparator<Pair<Room, Long>> {
    93 	private static final class RoomAgeComparator implements Comparator<Pair<RoomlistRoom, Long>> {
   134 		public static final RoomAgeComparator INSTANCE = new RoomAgeComparator();
    94 		public static final RoomAgeComparator INSTANCE = new RoomAgeComparator();
   135 		public int compare(Pair<Room, Long> lhs, Pair<Room, Long> rhs) {
    95 		public int compare(Pair<RoomlistRoom, Long> lhs, Pair<RoomlistRoom, Long> rhs) {
   136 			return rhs.second.compareTo(lhs.second);
    96 			return rhs.second.compareTo(lhs.second);
   137 		}
    97 		}
   138 	}
    98 	}
   139 }
    99 }