|
1 package org.hedgewars.hedgeroid; |
|
2 |
|
3 import org.hedgewars.hedgeroid.R; |
|
4 import org.hedgewars.hedgeroid.Datastructures.GameConfig; |
|
5 import org.hedgewars.hedgeroid.Datastructures.Player; |
|
6 import org.hedgewars.hedgeroid.Datastructures.PlayerInRoom; |
|
7 import org.hedgewars.hedgeroid.netplay.Netplay; |
|
8 import org.hedgewars.hedgeroid.netplay.RunGameListener; |
|
9 |
|
10 import android.content.Intent; |
|
11 import android.os.Bundle; |
|
12 import android.support.v4.app.ListFragment; |
|
13 import android.view.ContextMenu; |
|
14 import android.view.ContextMenu.ContextMenuInfo; |
|
15 import android.view.LayoutInflater; |
|
16 import android.view.MenuInflater; |
|
17 import android.view.MenuItem; |
|
18 import android.view.View; |
|
19 import android.view.ViewGroup; |
|
20 import android.widget.AdapterView; |
|
21 import android.widget.AdapterView.AdapterContextMenuInfo; |
|
22 import android.widget.AdapterView.OnItemClickListener; |
|
23 |
|
24 public class RoomPlayerlistFragment extends ListFragment implements OnItemClickListener, RunGameListener { |
|
25 private Netplay netplay; |
|
26 private RoomPlayerlistAdapter adapter; |
|
27 |
|
28 @Override |
|
29 public void onCreate(Bundle savedInstanceState) { |
|
30 super.onCreate(savedInstanceState); |
|
31 netplay = Netplay.getAppInstance(getActivity().getApplicationContext()); |
|
32 netplay.registerRunGameListener(this); |
|
33 adapter = new RoomPlayerlistAdapter(); |
|
34 adapter.setSource(netplay.roomPlayerlist); |
|
35 setListAdapter(adapter); |
|
36 } |
|
37 |
|
38 @Override |
|
39 public void onDestroy() { |
|
40 super.onDestroy(); |
|
41 adapter.invalidate(); |
|
42 netplay.unregisterRunGameListener(this); |
|
43 } |
|
44 |
|
45 @Override |
|
46 public void onActivityCreated(Bundle savedInstanceState) { |
|
47 super.onActivityCreated(savedInstanceState); |
|
48 registerForContextMenu(getListView()); |
|
49 getListView().setOnItemClickListener(this); |
|
50 } |
|
51 |
|
52 @Override |
|
53 public void onCreateContextMenu(ContextMenu menu, View v, |
|
54 ContextMenuInfo menuInfo) { |
|
55 super.onCreateContextMenu(menu, v, menuInfo); |
|
56 AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo; |
|
57 String playerName = adapter.getItem(info.position).player.name; |
|
58 |
|
59 MenuInflater inflater = getActivity().getMenuInflater(); |
|
60 inflater.inflate(R.menu.room_playerlist_context, menu); |
|
61 if(netplay.isChief() && !playerName.equals(netplay.getPlayerName())) { |
|
62 inflater.inflate(R.menu.room_playerlist_chief_context, menu); |
|
63 } |
|
64 menu.setHeaderIcon(R.drawable.human); |
|
65 menu.setHeaderTitle(playerName); |
|
66 } |
|
67 |
|
68 @Override |
|
69 public boolean onContextItemSelected(MenuItem item) { |
|
70 AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); |
|
71 PlayerInRoom player = adapter.getItem(info.position); |
|
72 switch(item.getItemId()) { |
|
73 case R.id.player_info: |
|
74 netplay.sendPlayerInfoQuery(player.player.name); |
|
75 return true; |
|
76 case R.id.player_kick: |
|
77 netplay.sendKick(player.player.name); |
|
78 return true; |
|
79 default: |
|
80 return super.onContextItemSelected(item); |
|
81 } |
|
82 } |
|
83 |
|
84 @Override |
|
85 public View onCreateView(LayoutInflater inflater, ViewGroup container, |
|
86 Bundle savedInstanceState) { |
|
87 return inflater.inflate(R.layout.fragment_playerlist, container, false); |
|
88 } |
|
89 |
|
90 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
|
91 Player player = adapter.getItem(position).player; |
|
92 if(player.name.equals(netplay.getPlayerName())) { |
|
93 netplay.sendToggleReady(); |
|
94 } |
|
95 } |
|
96 |
|
97 // TODO this is really the wrong place for this... |
|
98 public void runGame(GameConfig config) { |
|
99 SDLActivity.startConfig = config; |
|
100 SDLActivity.startNetgame = true; |
|
101 startActivity(new Intent(getActivity().getApplicationContext(), SDLActivity.class)); |
|
102 } |
|
103 } |