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.PlayerList.Observer; |
|
11 |
8 |
12 import android.content.Context; |
9 import android.content.Context; |
|
10 import android.database.DataSetObserver; |
13 import android.view.LayoutInflater; |
11 import android.view.LayoutInflater; |
14 import android.view.View; |
12 import android.view.View; |
15 import android.view.ViewGroup; |
13 import android.view.ViewGroup; |
16 import android.widget.BaseAdapter; |
14 import android.widget.BaseAdapter; |
17 import android.widget.TextView; |
15 import android.widget.TextView; |
18 |
16 |
19 public class PlayerListAdapter extends BaseAdapter implements Observer { |
17 public class PlayerListAdapter extends BaseAdapter { |
20 private List<Player> players = new ArrayList<Player>(); |
18 private List<Player> players = new ArrayList<Player>(); |
21 private Context context; |
19 private Context context; |
|
20 private PlayerList playerList; |
|
21 |
|
22 private DataSetObserver observer = new DataSetObserver() { |
|
23 @Override |
|
24 public void onChanged() { |
|
25 reloadFromList(playerList); |
|
26 } |
|
27 |
|
28 @Override |
|
29 public void onInvalidated() { |
|
30 invalidate(); |
|
31 } |
|
32 }; |
22 |
33 |
23 public PlayerListAdapter(Context context) { |
34 public PlayerListAdapter(Context context) { |
24 this.context = context; |
35 this.context = context; |
25 } |
36 } |
26 |
37 |
27 public int getCount() { |
38 public int getCount() { |
28 return players.size(); |
39 return players.size(); |
29 } |
40 } |
30 |
41 |
31 public Object getItem(int position) { |
42 public Player getItem(int position) { |
32 return players.get(position); |
43 return players.get(position); |
33 } |
44 } |
34 |
45 |
35 public long getItemId(int position) { |
46 public long getItemId(int position) { |
36 return players.get(position).id; |
47 return players.get(position).id; |
37 } |
48 } |
38 |
49 |
39 public boolean hasStableIds() { |
50 public boolean hasStableIds() { |
40 return true; |
51 return true; |
41 } |
52 } |
42 |
53 |
43 public void itemAdded(Map<String, Player> map, String key, Player value) { |
54 public void setList(PlayerList playerList) { |
44 setPlayerList(map.values()); |
55 if(this.playerList != null) { |
45 } |
56 this.playerList.unregisterObserver(observer); |
46 |
57 } |
47 public void itemRemoved(Map<String, Player> map, String key, Player oldValue) { |
58 this.playerList = playerList; |
48 setPlayerList(map.values()); |
59 this.playerList.registerObserver(observer); |
49 } |
60 reloadFromList(playerList); |
50 |
|
51 public void itemReplaced(Map<String, Player> map, String key, |
|
52 Player oldValue, Player newValue) { |
|
53 setPlayerList(map.values()); |
|
54 } |
61 } |
55 |
62 |
56 public void setPlayerList(Collection<Player> players) { |
63 public void invalidate() { |
57 this.players = new ArrayList<Player>(players); |
64 players = new ArrayList<Player>(); |
58 Collections.sort(this.players, Player.nameComparator); |
65 if(playerList != null) { |
|
66 playerList.unregisterObserver(observer); |
|
67 } |
|
68 playerList = null; |
|
69 notifyDataSetInvalidated(); |
|
70 } |
|
71 |
|
72 private void reloadFromList(PlayerList list) { |
|
73 players = new ArrayList<Player>(list.getMap().values()); |
|
74 Collections.sort(players, Player.NAME_COMPARATOR); |
59 notifyDataSetChanged(); |
75 notifyDataSetChanged(); |
60 } |
76 } |
61 |
77 |
62 public View getView(int position, View convertView, ViewGroup parent) { |
78 public View getView(int position, View convertView, ViewGroup parent) { |
63 View v = convertView; |
79 View v = convertView; |