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.Collections; |
4 import java.util.Collections; |
|
5 import java.util.Comparator; |
5 import java.util.List; |
6 import java.util.List; |
6 |
7 |
7 import org.hedgewars.hedgeroid.R; |
8 import org.hedgewars.hedgeroid.R; |
8 |
9 |
9 import android.content.Context; |
10 import android.content.Context; |
10 import android.content.res.Resources; |
11 import android.content.res.Resources; |
11 import android.database.DataSetObserver; |
12 import android.database.DataSetObserver; |
|
13 import android.util.Pair; |
12 import android.view.LayoutInflater; |
14 import android.view.LayoutInflater; |
13 import android.view.View; |
15 import android.view.View; |
14 import android.view.ViewGroup; |
16 import android.view.ViewGroup; |
15 import android.widget.BaseAdapter; |
17 import android.widget.BaseAdapter; |
16 import android.widget.TextView; |
18 import android.widget.TextView; |
17 |
19 |
18 public class RoomListAdapter extends BaseAdapter { |
20 public class RoomListAdapter extends BaseAdapter { |
19 private List<Room> rooms = new ArrayList<Room>(); |
21 private List<Pair<Room, Long>> rooms = new ArrayList<Pair<Room, Long>>(); |
20 private Context context; |
22 private Context context; |
21 private RoomList roomList; |
23 private RoomList roomList; |
22 |
24 |
23 private DataSetObserver observer = new DataSetObserver() { |
25 private DataSetObserver observer = new DataSetObserver() { |
24 @Override |
26 @Override |
39 public int getCount() { |
41 public int getCount() { |
40 return rooms.size(); |
42 return rooms.size(); |
41 } |
43 } |
42 |
44 |
43 public Room getItem(int position) { |
45 public Room getItem(int position) { |
44 return rooms.get(position); |
46 return rooms.get(position).first; |
45 } |
47 } |
46 |
48 |
47 public long getItemId(int position) { |
49 public long getItemId(int position) { |
48 return rooms.get(position).id; |
50 return rooms.get(position).second; |
49 } |
51 } |
50 |
52 |
51 public boolean hasStableIds() { |
53 public boolean hasStableIds() { |
52 return true; |
54 return true; |
53 } |
55 } |
60 this.roomList.registerObserver(observer); |
62 this.roomList.registerObserver(observer); |
61 reloadFromList(roomList); |
63 reloadFromList(roomList); |
62 } |
64 } |
63 |
65 |
64 public void invalidate() { |
66 public void invalidate() { |
65 rooms = new ArrayList<Room>(); |
|
66 if(roomList != null) { |
67 if(roomList != null) { |
67 roomList.unregisterObserver(observer); |
68 roomList.unregisterObserver(observer); |
68 } |
69 } |
69 roomList = null; |
70 roomList = null; |
70 notifyDataSetInvalidated(); |
71 notifyDataSetInvalidated(); |
71 } |
72 } |
72 |
73 |
73 private void reloadFromList(RoomList list) { |
74 private void reloadFromList(RoomList list) { |
74 rooms = new ArrayList<Room>(roomList.getMap().values()); |
75 rooms = new ArrayList<Pair<Room, Long>>(roomList.getMap().values()); |
75 Collections.sort(rooms, Collections.reverseOrder(Room.ID_COMPARATOR)); |
76 Collections.sort(rooms, RoomAgeComparator.INSTANCE); |
76 notifyDataSetChanged(); |
77 notifyDataSetChanged(); |
77 } |
78 } |
78 |
79 |
79 private static CharSequence formatExtra(Resources res, Room room) { |
80 private static CharSequence formatExtra(Resources res, Room room) { |
80 String ownermsg = res.getString(R.string.roomlist_owner, room.owner); |
81 String ownermsg = res.getString(R.string.roomlist_owner, room.owner); |
89 if (v == null) { |
90 if (v == null) { |
90 LayoutInflater vi = LayoutInflater.from(context); |
91 LayoutInflater vi = LayoutInflater.from(context); |
91 v = vi.inflate(R.layout.listview_room, null); |
92 v = vi.inflate(R.layout.listview_room, null); |
92 } |
93 } |
93 |
94 |
94 Room room = rooms.get(position); |
95 Room room = rooms.get(position).first; |
95 int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing; |
96 int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing; |
96 |
97 |
97 if(v.findViewById(android.R.id.text1) == null) { |
98 if(v.findViewById(android.R.id.text1) == null) { |
98 // Tabular room list |
99 // Tabular room list |
99 TextView roomnameView = (TextView)v.findViewById(R.id.roomname); |
100 TextView roomnameView = (TextView)v.findViewById(R.id.roomname); |