diff -r c92596feac0d -r 714310efad8f project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamlistFragment.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamlistFragment.java Mon Aug 20 20:16:37 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamlistFragment.java Mon Aug 20 20:19:35 2012 +0200 @@ -3,17 +3,12 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; -import org.hedgewars.hedgeroid.R; -import org.hedgewars.hedgeroid.Datastructures.MapRecipe; -import org.hedgewars.hedgeroid.Datastructures.Scheme; import org.hedgewars.hedgeroid.Datastructures.Team; import org.hedgewars.hedgeroid.Datastructures.TeamInGame; import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes; -import org.hedgewars.hedgeroid.Datastructures.Weaponset; -import org.hedgewars.hedgeroid.netplay.Netplay; -import android.database.DataSetObserver; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.LayoutInflater; @@ -22,15 +17,9 @@ import android.view.ViewGroup; import android.widget.Button; -/** - * TODO use an interface for querying and manipulating the team list, to allow re-using this fragment - * in local play - */ -public class TeamlistFragment extends ListFragment implements TeamlistAdapter.Listener, RoomStateManager.Observer { - private Netplay netplay; +public class TeamlistFragment extends ListFragment implements TeamlistAdapter.Listener { private TeamlistAdapter adapter; private Button addTeamButton; - private DataSetObserver teamlistObserver; private RoomStateManager stateManager; @Override @@ -41,13 +30,12 @@ } catch(ClassCastException e) { throw new RuntimeException("Hosting activity must implement RoomStateManager.Provider.", e); } - netplay = Netplay.getAppInstance(getActivity().getApplicationContext()); adapter = new TeamlistAdapter(); - adapter.setSource(netplay.roomTeamlist); + adapter.updateTeamlist(stateManager.getTeams().values()); adapter.setColorHogcountEnabled(stateManager.getChiefStatus()); adapter.setListener(this); setListAdapter(adapter); - stateManager.registerObserver(this); + stateManager.addListener(roomStateChangeListener); } @Override @@ -61,14 +49,7 @@ } }); - teamlistObserver = new DataSetObserver() { - @Override - public void onChanged() { - addTeamButton.setEnabled(netplay.roomTeamlist.getMap().size() < Team.maxNumberOfTeams); - } - }; - netplay.roomTeamlist.registerObserver(teamlistObserver); - teamlistObserver.onChanged(); + addTeamButton.setEnabled(stateManager.getTeams().size() < Team.maxNumberOfTeams); return v; } @@ -76,27 +57,20 @@ @Override public void onDestroy() { super.onDestroy(); - adapter.invalidate(); adapter.setListener(null); - netplay.roomTeamlist.unregisterObserver(teamlistObserver); - stateManager.unregisterObserver(this); + stateManager.removeListener(roomStateChangeListener); } - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - } - private Collection getCurrentTeamNames() { List names = new ArrayList(); - for(TeamInGame team : netplay.roomTeamlist.getMap().values()) { + for(TeamInGame team : stateManager.getTeams().values()) { names.add(team.team.name); } return names; } public void onColorClicked(TeamInGame team) { - netplay.changeTeamColorIndex(team.team.name, (team.ingameAttribs.colorIndex+1)%TeamIngameAttributes.TEAM_COLORS.length); + stateManager.changeTeamColorIndex(team.team.name, (team.ingameAttribs.colorIndex+1)%TeamIngameAttributes.TEAM_COLORS.length); } public void onHogcountClicked(TeamInGame team) { @@ -104,19 +78,23 @@ if(newHogCount>Team.HEDGEHOGS_PER_TEAM) { newHogCount = 1; } - netplay.changeTeamHogCount(team.team.name, newHogCount); + stateManager.changeTeamHogCount(team.team.name, newHogCount); } public void onTeamClicked(TeamInGame team) { - netplay.sendRemoveTeam(team.team.name); + stateManager.requestRemoveTeam(team.team.name); } - public void onChiefStatusChanged(boolean isChief) { - adapter.setColorHogcountEnabled(isChief); - } - - public void onGameStyleChanged(String gameStyle) { } - public void onMapChanged(MapRecipe recipe) { } - public void onSchemeChanged(Scheme scheme) { } - public void onWeaponsetChanged(Weaponset weaponset) { } + private final RoomStateManager.Listener roomStateChangeListener = new RoomStateManager.ListenerAdapter() { + @Override + public void onChiefStatusChanged(boolean isChief) { + adapter.setColorHogcountEnabled(isChief); + }; + + @Override + public void onTeamsChanged(Map teams) { + adapter.updateTeamlist(teams.values()); + addTeamButton.setEnabled(teams.size() < Team.maxNumberOfTeams); + }; + }; }