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 |