project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamlistFragment.java
changeset 7508 763d3961400b
parent 7485 0481bd74267c
child 7568 75ba91f14ed5
equal deleted inserted replaced
7504:ed1d52c5aa94 7508:763d3961400b
       
     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 }