|
1 package org.hedgewars.hedgeroid; |
|
2 |
|
3 import java.util.ArrayList; |
|
4 import java.util.Collection; |
|
5 import java.util.List; |
|
6 |
|
7 import org.hedgewars.hedgeroid.R; |
|
8 import org.hedgewars.hedgeroid.Datastructures.MapRecipe; |
|
9 import org.hedgewars.hedgeroid.Datastructures.Scheme; |
|
10 import org.hedgewars.hedgeroid.Datastructures.Team; |
|
11 import org.hedgewars.hedgeroid.Datastructures.TeamInGame; |
|
12 import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes; |
|
13 import org.hedgewars.hedgeroid.Datastructures.Weaponset; |
|
14 import org.hedgewars.hedgeroid.netplay.Netplay; |
|
15 |
|
16 import android.database.DataSetObserver; |
|
17 import android.os.Bundle; |
|
18 import android.support.v4.app.ListFragment; |
|
19 import android.view.LayoutInflater; |
|
20 import android.view.View; |
|
21 import android.view.View.OnClickListener; |
|
22 import android.view.ViewGroup; |
|
23 import android.widget.Button; |
|
24 |
|
25 /** |
|
26 * TODO use an interface for querying and manipulating the team list, to allow re-using this fragment |
|
27 * in local play |
|
28 */ |
|
29 public class TeamlistFragment extends ListFragment implements TeamlistAdapter.Listener, RoomStateManager.Observer { |
|
30 private Netplay netplay; |
|
31 private TeamlistAdapter adapter; |
|
32 private Button addTeamButton; |
|
33 private DataSetObserver teamlistObserver; |
|
34 private RoomStateManager stateManager; |
|
35 |
|
36 @Override |
|
37 public void onCreate(Bundle savedInstanceState) { |
|
38 super.onCreate(savedInstanceState); |
|
39 try { |
|
40 stateManager = ((RoomStateManager.Provider)getActivity()).getRoomStateManager(); |
|
41 } catch(ClassCastException e) { |
|
42 throw new RuntimeException("Hosting activity must implement RoomStateManager.Provider.", e); |
|
43 } |
|
44 netplay = Netplay.getAppInstance(getActivity().getApplicationContext()); |
|
45 adapter = new TeamlistAdapter(); |
|
46 adapter.setSource(netplay.roomTeamlist); |
|
47 adapter.setColorHogcountEnabled(stateManager.getChiefStatus()); |
|
48 adapter.setListener(this); |
|
49 setListAdapter(adapter); |
|
50 stateManager.registerObserver(this); |
|
51 } |
|
52 |
|
53 @Override |
|
54 public View onCreateView(LayoutInflater inflater, ViewGroup container, |
|
55 Bundle savedInstanceState) { |
|
56 View v = inflater.inflate(R.layout.fragment_teamlist, container, false); |
|
57 addTeamButton = (Button)v.findViewById(R.id.addTeamButton); |
|
58 addTeamButton.setOnClickListener(new OnClickListener() { |
|
59 public void onClick(View v) { |
|
60 new TeamAddDialog(getCurrentTeamNames()).show(getFragmentManager(), "team_add_dialog"); |
|
61 } |
|
62 }); |
|
63 |
|
64 teamlistObserver = new DataSetObserver() { |
|
65 @Override |
|
66 public void onChanged() { |
|
67 addTeamButton.setEnabled(netplay.roomTeamlist.getMap().size() < Team.maxNumberOfTeams); |
|
68 } |
|
69 }; |
|
70 netplay.roomTeamlist.registerObserver(teamlistObserver); |
|
71 teamlistObserver.onChanged(); |
|
72 |
|
73 return v; |
|
74 } |
|
75 |
|
76 @Override |
|
77 public void onDestroy() { |
|
78 super.onDestroy(); |
|
79 adapter.invalidate(); |
|
80 adapter.setListener(null); |
|
81 netplay.roomTeamlist.unregisterObserver(teamlistObserver); |
|
82 stateManager.unregisterObserver(this); |
|
83 } |
|
84 |
|
85 @Override |
|
86 public void onActivityCreated(Bundle savedInstanceState) { |
|
87 super.onActivityCreated(savedInstanceState); |
|
88 } |
|
89 |
|
90 private Collection<String> getCurrentTeamNames() { |
|
91 List<String> names = new ArrayList<String>(); |
|
92 for(TeamInGame team : netplay.roomTeamlist.getMap().values()) { |
|
93 names.add(team.team.name); |
|
94 } |
|
95 return names; |
|
96 } |
|
97 |
|
98 public void onColorClicked(TeamInGame team) { |
|
99 netplay.sendTeamColorIndex(team.team.name, (team.ingameAttribs.colorIndex+1)%TeamIngameAttributes.TEAM_COLORS.length); |
|
100 } |
|
101 |
|
102 public void onHogcountClicked(TeamInGame team) { |
|
103 int newHogCount = team.ingameAttribs.hogCount+1; |
|
104 if(newHogCount>Team.HEDGEHOGS_PER_TEAM) { |
|
105 newHogCount = 1; |
|
106 } |
|
107 netplay.sendTeamHogCount(team.team.name, newHogCount); |
|
108 } |
|
109 |
|
110 public void onTeamClicked(TeamInGame team) { |
|
111 netplay.sendRemoveTeam(team.team.name); |
|
112 } |
|
113 |
|
114 public void onChiefStatusChanged(boolean isChief) { |
|
115 adapter.setColorHogcountEnabled(isChief); |
|
116 } |
|
117 |
|
118 public void onGameStyleChanged(String gameStyle) { } |
|
119 public void onMapChanged(MapRecipe recipe) { } |
|
120 public void onSchemeChanged(Scheme scheme) { } |
|
121 public void onWeaponsetChanged(Weaponset weaponset) { } |
|
122 } |