1 package org.hedgewars.hedgeroid.netplay; |
1 package org.hedgewars.hedgeroid.netplay; |
2 |
2 |
3 import java.util.ArrayList; |
3 import java.util.ArrayList; |
4 import java.util.Collection; |
|
5 import java.util.Collections; |
4 import java.util.Collections; |
6 import java.util.List; |
5 import java.util.List; |
7 import java.util.Map; |
|
8 |
6 |
9 import org.hedgewars.hedgeroid.R; |
7 import org.hedgewars.hedgeroid.R; |
10 import org.hedgewars.hedgeroid.netplay.RoomList.Observer; |
|
11 |
8 |
12 import android.content.Context; |
9 import android.content.Context; |
13 import android.content.res.Resources; |
10 import android.content.res.Resources; |
|
11 import android.database.DataSetObserver; |
14 import android.view.LayoutInflater; |
12 import android.view.LayoutInflater; |
15 import android.view.View; |
13 import android.view.View; |
16 import android.view.ViewGroup; |
14 import android.view.ViewGroup; |
17 import android.widget.BaseAdapter; |
15 import android.widget.BaseAdapter; |
18 import android.widget.TextView; |
16 import android.widget.TextView; |
19 |
17 |
20 public class RoomListAdapter extends BaseAdapter implements Observer { |
18 public class RoomListAdapter extends BaseAdapter { |
21 private List<Room> rooms = new ArrayList<Room>(); |
19 private List<Room> rooms = new ArrayList<Room>(); |
22 private Context context; |
20 private Context context; |
|
21 private RoomList roomList; |
|
22 |
|
23 private DataSetObserver observer = new DataSetObserver() { |
|
24 @Override |
|
25 public void onChanged() { |
|
26 reloadFromList(roomList); |
|
27 } |
|
28 |
|
29 @Override |
|
30 public void onInvalidated() { |
|
31 invalidate(); |
|
32 } |
|
33 }; |
23 |
34 |
24 public RoomListAdapter(Context context) { |
35 public RoomListAdapter(Context context) { |
25 this.context = context; |
36 this.context = context; |
26 } |
37 } |
27 |
38 |
28 public int getCount() { |
39 public int getCount() { |
29 return rooms.size(); |
40 return rooms.size(); |
30 } |
41 } |
31 |
42 |
32 public Object getItem(int position) { |
43 public Room getItem(int position) { |
33 return rooms.get(position); |
44 return rooms.get(position); |
34 } |
45 } |
35 |
46 |
36 public long getItemId(int position) { |
47 public long getItemId(int position) { |
37 return rooms.get(position).id; |
48 return rooms.get(position).id; |
39 |
50 |
40 public boolean hasStableIds() { |
51 public boolean hasStableIds() { |
41 return true; |
52 return true; |
42 } |
53 } |
43 |
54 |
44 public void setList(Collection<Room> rooms) { |
55 public void setList(RoomList roomList) { |
45 this.rooms = new ArrayList<Room>(rooms); |
56 if(this.roomList != null) { |
46 Collections.reverse(this.rooms); // We want to show the newest rooms first |
57 this.roomList.unregisterObserver(observer); |
|
58 } |
|
59 this.roomList = roomList; |
|
60 this.roomList.registerObserver(observer); |
|
61 reloadFromList(roomList); |
|
62 } |
|
63 |
|
64 public void invalidate() { |
|
65 rooms = new ArrayList<Room>(); |
|
66 if(roomList != null) { |
|
67 roomList.unregisterObserver(observer); |
|
68 } |
|
69 roomList = null; |
|
70 notifyDataSetInvalidated(); |
|
71 } |
|
72 |
|
73 private void reloadFromList(RoomList list) { |
|
74 rooms = new ArrayList<Room>(roomList.getMap().values()); |
|
75 Collections.sort(rooms, Collections.reverseOrder(Room.ID_COMPARATOR)); |
47 notifyDataSetChanged(); |
76 notifyDataSetChanged(); |
48 } |
77 } |
49 |
78 |
50 private static CharSequence formatExtra(Resources res, Room room) { |
79 private static CharSequence formatExtra(Resources res, Room room) { |
51 String ownermsg = res.getString(R.string.roomlist_owner, room.owner); |
80 String ownermsg = res.getString(R.string.roomlist_owner, room.owner); |
97 v2.setText(formatExtra(context.getResources(), room)); |
126 v2.setText(formatExtra(context.getResources(), room)); |
98 } |
127 } |
99 |
128 |
100 return v; |
129 return v; |
101 } |
130 } |
102 |
|
103 public void itemAdded(Map<String, Room> map, String key, Room value) { |
|
104 setList(map.values()); |
|
105 } |
|
106 |
|
107 public void itemRemoved(Map<String, Room> map, String key, Room oldValue) { |
|
108 setList(map.values()); |
|
109 } |
|
110 |
|
111 public void itemReplaced(Map<String, Room> map, String key, Room oldValue, |
|
112 Room newValue) { |
|
113 setList(map.values()); |
|
114 } |
|
115 } |
131 } |