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.database.DataSetObserver; |
11 import android.database.DataSetObserver; |
|
12 import android.util.Pair; |
11 import android.view.LayoutInflater; |
13 import android.view.LayoutInflater; |
12 import android.view.View; |
14 import android.view.View; |
13 import android.view.ViewGroup; |
15 import android.view.ViewGroup; |
14 import android.widget.BaseAdapter; |
16 import android.widget.BaseAdapter; |
15 import android.widget.TextView; |
17 import android.widget.TextView; |
16 |
18 |
17 public class PlayerListAdapter extends BaseAdapter { |
19 public class PlayerListAdapter extends BaseAdapter { |
18 private List<Player> players = new ArrayList<Player>(); |
20 private List<Pair<Player, Long>> players = new ArrayList<Pair<Player, Long>>(); |
19 private Context context; |
21 private Context context; |
20 private PlayerList playerList; |
22 private PlayerList playerList; |
21 |
23 |
22 private DataSetObserver observer = new DataSetObserver() { |
24 private DataSetObserver observer = new DataSetObserver() { |
23 @Override |
25 @Override |
38 public int getCount() { |
40 public int getCount() { |
39 return players.size(); |
41 return players.size(); |
40 } |
42 } |
41 |
43 |
42 public Player getItem(int position) { |
44 public Player getItem(int position) { |
43 return players.get(position); |
45 return players.get(position).first; |
44 } |
46 } |
45 |
47 |
46 public long getItemId(int position) { |
48 public long getItemId(int position) { |
47 return players.get(position).id; |
49 return players.get(position).second; |
48 } |
50 } |
49 |
51 |
50 public boolean hasStableIds() { |
52 public boolean hasStableIds() { |
51 return true; |
53 return true; |
52 } |
54 } |
59 this.playerList.registerObserver(observer); |
61 this.playerList.registerObserver(observer); |
60 reloadFromList(playerList); |
62 reloadFromList(playerList); |
61 } |
63 } |
62 |
64 |
63 public void invalidate() { |
65 public void invalidate() { |
64 players = new ArrayList<Player>(); |
|
65 if(playerList != null) { |
66 if(playerList != null) { |
66 playerList.unregisterObserver(observer); |
67 playerList.unregisterObserver(observer); |
67 } |
68 } |
68 playerList = null; |
69 playerList = null; |
69 notifyDataSetInvalidated(); |
70 notifyDataSetInvalidated(); |
70 } |
71 } |
71 |
72 |
72 private void reloadFromList(PlayerList list) { |
73 private void reloadFromList(PlayerList list) { |
73 players = new ArrayList<Player>(list.getMap().values()); |
74 players = new ArrayList<Pair<Player, Long>>(list.getMap().values()); |
74 Collections.sort(players, Player.NAME_COMPARATOR); |
75 Collections.sort(players, AlphabeticalOrderComparator.INSTANCE); |
75 notifyDataSetChanged(); |
76 notifyDataSetChanged(); |
76 } |
77 } |
77 |
78 |
78 public View getView(int position, View convertView, ViewGroup parent) { |
79 public View getView(int position, View convertView, ViewGroup parent) { |
79 View v = convertView; |
80 View v = convertView; |
83 TextView tv = (TextView)v.findViewById(android.R.id.text1); |
84 TextView tv = (TextView)v.findViewById(android.R.id.text1); |
84 tv.setCompoundDrawablePadding(5); |
85 tv.setCompoundDrawablePadding(5); |
85 tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.human, 0, 0, 0); |
86 tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.human, 0, 0, 0); |
86 } |
87 } |
87 |
88 |
88 String player = players.get(position).name; |
89 String player = players.get(position).first.name; |
89 TextView username = (TextView) v.findViewById(android.R.id.text1); |
90 TextView username = (TextView) v.findViewById(android.R.id.text1); |
90 username.setText(player); |
91 username.setText(player); |
91 return v; |
92 return v; |
92 } |
93 } |
|
94 |
|
95 private static final class AlphabeticalOrderComparator implements Comparator<Pair<Player, Long>> { |
|
96 public static final AlphabeticalOrderComparator INSTANCE = new AlphabeticalOrderComparator(); |
|
97 public int compare(Pair<Player, Long> lhs, Pair<Player, Long> rhs) { |
|
98 return lhs.first.name.compareToIgnoreCase(rhs.first.name); |
|
99 }; |
|
100 } |
93 } |
101 } |