project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamSelectionActivity.java
changeset 7476 2fb781bbdd51
parent 6700 e04da46ee43c
child 7485 0481bd74267c
equal deleted inserted replaced
7473:45b9f25ff611 7476:2fb781bbdd51
    24 import java.util.HashMap;
    24 import java.util.HashMap;
    25 import java.util.List;
    25 import java.util.List;
    26 
    26 
    27 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
    27 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
    28 import org.hedgewars.hedgeroid.Datastructures.Team;
    28 import org.hedgewars.hedgeroid.Datastructures.Team;
       
    29 import org.hedgewars.hedgeroid.Datastructures.TeamFile;
       
    30 import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
       
    31 import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes;
    29 
    32 
    30 import android.app.Activity;
    33 import android.app.Activity;
       
    34 import android.content.Context;
    31 import android.content.Intent;
    35 import android.content.Intent;
    32 import android.os.Bundle;
    36 import android.os.Bundle;
    33 import android.os.Parcelable;
    37 import android.os.Parcelable;
       
    38 import android.util.Pair;
    34 import android.view.ContextMenu;
    39 import android.view.ContextMenu;
    35 import android.view.MenuItem;
    40 import android.view.MenuItem;
    36 import android.view.View;
    41 import android.view.View;
    37 import android.view.View.OnClickListener;
    42 import android.view.View.OnClickListener;
    38 import android.widget.AdapterView;
    43 import android.widget.AdapterView;
    45 import android.widget.SimpleAdapter;
    50 import android.widget.SimpleAdapter;
    46 import android.widget.SimpleAdapter.ViewBinder;
    51 import android.widget.SimpleAdapter.ViewBinder;
    47 import android.widget.TextView;
    52 import android.widget.TextView;
    48 
    53 
    49 public class TeamSelectionActivity extends Activity implements Runnable{
    54 public class TeamSelectionActivity extends Activity implements Runnable{
    50 
       
    51 	private static final int ACTIVITY_TEAMCREATION = 0;
    55 	private static final int ACTIVITY_TEAMCREATION = 0;
       
    56 	
       
    57 	private static volatile List<Pair<TeamFile, TeamIngameAttributes>> activityParams;
       
    58 	private static volatile List<Pair<TeamFile, TeamIngameAttributes>> activityReturn;
    52 
    59 
    53 	private ImageButton addTeam, back;
    60 	private ImageButton addTeam, back;
    54 	private ListView availableTeams, selectedTeams;
    61 	private ListView availableTeams, selectedTeams;
    55 	private List<HashMap<String, Object>> availableTeamsList, selectedTeamsList;
    62 	private List<HashMap<String, Object>> availableTeamsList, selectedTeamsList;
    56 	private TextView txtInfo;
    63 	private TextView txtInfo;
    84 
    91 
    85 		new Thread(this).start();//load the teams from xml async
    92 		new Thread(this).start();//load the teams from xml async
    86 	}
    93 	}
    87 
    94 
    88 	public void run(){
    95 	public void run(){
    89 		List<HashMap<String, Object>> teamsList = FrontendDataUtils.getTeams(this);//teams from xml
    96 		List<HashMap<String, Object>> teamsList = getTeams(this);//teams from xml
    90 		ArrayList<Team> teamsStartGame = getIntent().getParcelableArrayListExtra("teams");//possible selected teams
    97 		ArrayList<String> teamsStartGame = getIntent().getStringArrayListExtra("selectedTeamNames");
    91 
    98 
    92 		for(HashMap<String, Object> hashmap : teamsList){
    99 		for(HashMap<String, Object> hashmap : teamsList){
    93 			boolean added = false;
   100 			boolean added = false;
    94 			for(Team t : teamsStartGame){
   101 			for(String teamName : teamsStartGame){
    95 				if(((Team)hashmap.get("team")).equals(t)){//add to available or add to selected
   102 				if(((Team)hashmap.get("team")).name.equals(teamName)){ // add to available or add to selected
    96 					selectedTeamsList.add(FrontendDataUtils.teamToMap(t));//create a new hashmap to ensure all variables are entered into the map
   103 					selectedTeamsList.add(hashmap);
    97 					added = true;
   104 					added = true;
    98 					break;
   105 					break;
    99 				}
   106 				}
   100 			}
   107 			}
   101 			if(!added) availableTeamsList.add(hashmap);
   108 			if(!added) availableTeamsList.add(hashmap);
   137 	/*
   144 	/*
   138 	 * Updates the list view when TeamCreationActivity is shutdown and the user returns to this point
   145 	 * Updates the list view when TeamCreationActivity is shutdown and the user returns to this point
   139 	 */
   146 	 */
   140 	private void updateListViews(){
   147 	private void updateListViews(){
   141 		unregisterForContextMenu(availableTeams);
   148 		unregisterForContextMenu(availableTeams);
   142 		availableTeamsList = FrontendDataUtils.getTeams(this);
   149 		availableTeamsList = getTeams(this);
   143 		ArrayList<HashMap<String, Object>> toBeRemoved = new ArrayList<HashMap<String, Object>>();
   150 		ArrayList<HashMap<String, Object>> toBeRemoved = new ArrayList<HashMap<String, Object>>();
   144 		for(HashMap<String, Object> hashmap : selectedTeamsList){
   151 		for(HashMap<String, Object> hashmap : selectedTeamsList){
   145 			String name = (String)hashmap.get("txt");
   152 			String name = (String)hashmap.get("txt");
   146 
   153 
   147 			for(HashMap<String, Object> hash : availableTeamsList){
   154 			for(HashMap<String, Object> hash : availableTeamsList){
   251 
   258 
   252 	}
   259 	}
   253 	public boolean onContextItemSelected(MenuItem item){
   260 	public boolean onContextItemSelected(MenuItem item){
   254 		AdapterView.AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
   261 		AdapterView.AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
   255 		int position = menuInfo.position;
   262 		int position = menuInfo.position;
       
   263 		TeamFile teamfile = (TeamFile)availableTeamsList.get(position).get("teamfile");
   256 		switch(item.getItemId()){
   264 		switch(item.getItemId()){
   257 		case 0://select
   265 		case 0://select
   258 			selectAvailableTeamsItem(position);
   266 			selectAvailableTeamsItem(position);
   259 			return true;
   267 			return true;
   260 		case 1://delete
   268 		case 1://delete
   261 			Team team = (Team)availableTeamsList.get(position).get("team");
   269 			teamfile.file.delete();
   262 			File f = new File(String.format("%s/%s/%s", TeamSelectionActivity.this.getFilesDir(), Team.DIRECTORY_TEAMS, team.file));
       
   263 			f.delete();
       
   264 			availableTeamsList.remove(position);
   270 			availableTeamsList.remove(position);
   265 			((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged();
   271 			((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged();
   266 			return true;
   272 			return true;
   267 		case 2://edit
   273 		case 2://edit
   268 			Intent i = new Intent(TeamSelectionActivity.this, TeamCreatorActivity.class);
   274 			Intent i = new Intent(TeamSelectionActivity.this, TeamCreatorActivity.class);
   269 			Team t = (Team)availableTeamsList.get(position).get("team");
   275 			i.putExtra("teamfile", teamfile.file);
   270 			i.putExtra("team", t);
       
   271 			startActivityForResult(i, ACTIVITY_TEAMCREATION);
   276 			startActivityForResult(i, ACTIVITY_TEAMCREATION);
   272 			return true;
   277 			return true;
   273 		}
   278 		}
   274 		return false;
   279 		return false;
   275 	}
   280 	}
   302 		}
   307 		}
   303 		i.putExtra("teams", teams);
   308 		i.putExtra("teams", teams);
   304 		setResult(Activity.RESULT_OK, i);
   309 		setResult(Activity.RESULT_OK, i);
   305 
   310 
   306 	}
   311 	}
       
   312 	
       
   313 	private static List<HashMap<String, Object>> getTeams(Context c){
       
   314 		List<HashMap<String, Object>> ret = new ArrayList<HashMap<String, Object>>();
       
   315 		List<TeamFile> teamfiles = FrontendDataUtils.getTeamFiles(c);
       
   316 		for(TeamFile tf : teamfiles) {
       
   317 			ret.add(teamfileToMap(tf));
       
   318 		}
       
   319 		return ret;
       
   320 	}
       
   321 	
       
   322 	private static final int[] botlevelDrawables = new int[] {
       
   323 		R.drawable.human, R.drawable.bot5, R.drawable.bot4, R.drawable.bot3, R.drawable.bot2, R.drawable.bot1
       
   324 	};
       
   325 	
       
   326 	private static HashMap<String, Object> teamfileToMap(TeamFile tf){
       
   327 		HashMap<String, Object> hashmap = new HashMap<String, Object>();
       
   328 		Team t = tf.team;
       
   329 		hashmap.put("team", t);
       
   330 		hashmap.put("teamfile", tf);
       
   331 		hashmap.put("txt", t.name);
       
   332 		hashmap.put("color", t.color);
       
   333 		hashmap.put("count", t.hogCount);
       
   334 		
       
   335 		int botlevel = t.hogs.get(0).level;
       
   336 		if(botlevel<0 || botlevel>=botlevelDrawables.length) {
       
   337 			hashmap.put("img", R.drawable.bot1);
       
   338 		} else {
       
   339 			hashmap.put("img", botlevelDrawables[botlevel]);
       
   340 		}
       
   341 		return hashmap;
       
   342 		return null;
       
   343 	}
   307 }
   344 }