project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamSelectionActivity.java
branchhedgeroid
changeset 7855 ddcdedd3330b
parent 6700 e04da46ee43c
child 7476 2fb781bbdd51
equal deleted inserted replaced
6350:41b0a9955c47 7855:ddcdedd3330b
     1 /*
     1 /*
     2  * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
     2  * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
     3  * Copyright (c) 2011 Richard Deurwaarder <xeli@xelification.com>
     3  * Copyright (c) 2011-2012 Richard Deurwaarder <xeli@xelification.com>
     4  *
     4  *
     5  * This program is free software; you can redistribute it and/or modify
     5  * This program is free software; you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation; version 2 of the License
     7  * the Free Software Foundation; version 2 of the License
     8  *
     8  *
    20 package org.hedgewars.hedgeroid;
    20 package org.hedgewars.hedgeroid;
    21 
    21 
    22 import java.io.File;
    22 import java.io.File;
    23 import java.util.ArrayList;
    23 import java.util.ArrayList;
    24 import java.util.HashMap;
    24 import java.util.HashMap;
    25 
    25 import java.util.List;
    26 import org.hedgewars.hedgeroid.EngineProtocol.FrontendDataUtils;
    26 
    27 import org.hedgewars.hedgeroid.EngineProtocol.Team;
    27 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
       
    28 import org.hedgewars.hedgeroid.Datastructures.Team;
    28 
    29 
    29 import android.app.Activity;
    30 import android.app.Activity;
    30 import android.content.Intent;
    31 import android.content.Intent;
    31 import android.os.Bundle;
    32 import android.os.Bundle;
    32 import android.os.Parcelable;
    33 import android.os.Parcelable;
    43 import android.widget.RelativeLayout;
    44 import android.widget.RelativeLayout;
    44 import android.widget.SimpleAdapter;
    45 import android.widget.SimpleAdapter;
    45 import android.widget.SimpleAdapter.ViewBinder;
    46 import android.widget.SimpleAdapter.ViewBinder;
    46 import android.widget.TextView;
    47 import android.widget.TextView;
    47 
    48 
    48 public class TeamSelectionActivity extends Activity{
    49 public class TeamSelectionActivity extends Activity implements Runnable{
    49 
    50 
    50 	private static final int ACTIVITY_TEAMCREATION = 0;
    51 	private static final int ACTIVITY_TEAMCREATION = 0;
    51 
    52 
    52 	private ImageButton addTeam, back;
    53 	private ImageButton addTeam, back;
    53 	private ListView availableTeams, selectedTeams;
    54 	private ListView availableTeams, selectedTeams;
    54 	private ArrayList<HashMap<String, Object>> availableTeamsList, selectedTeamsList;
    55 	private List<HashMap<String, Object>> availableTeamsList, selectedTeamsList;
    55 	private TextView txtInfo;
    56 	private TextView txtInfo;
    56 
    57 
    57 	public void onCreate(Bundle savedInstanceState){
    58 	public void onCreate(Bundle savedInstanceState){
    58 		super.onCreate(savedInstanceState);
    59 		super.onCreate(savedInstanceState);
    59 
    60 
    60 		setContentView(R.layout.team_selector);
    61 		setContentView(R.layout.team_selector);
    61 
    62 
    62 		addTeam = (ImageButton) findViewById(R.id.btnAdd);
    63 		addTeam = (ImageButton) findViewById(R.id.btnAdd);
    63 		back = (ImageButton) findViewById(R.id.btnBack);
    64 		back = (ImageButton) findViewById(R.id.btnBack);
    64 		txtInfo = (TextView) findViewById(R.id.txtInfo);
    65 		txtInfo = (TextView) findViewById(R.id.txtInfo);
    65 
    66 		selectedTeams = (ListView) findViewById(R.id.selectedTeams);
       
    67 		availableTeams = (ListView) findViewById(R.id.availableTeams);
    66 		addTeam.setOnClickListener(addTeamClicker);
    68 		addTeam.setOnClickListener(addTeamClicker);
    67 		back.setOnClickListener(backClicker);
    69 		back.setOnClickListener(backClicker);
    68 
    70 
    69 		availableTeams = (ListView) findViewById(R.id.availableTeams);
    71 		availableTeamsList = new ArrayList<HashMap<String, Object>>();
    70 		availableTeamsList = FrontendDataUtils.getTeams(this);
       
    71 		SimpleAdapter adapter = new SimpleAdapter(this, availableTeamsList, R.layout.team_selection_entry_simple, new String[]{"txt", "img"}, new int[]{R.id.txtName, R.id.imgDifficulty});
    72 		SimpleAdapter adapter = new SimpleAdapter(this, availableTeamsList, R.layout.team_selection_entry_simple, new String[]{"txt", "img"}, new int[]{R.id.txtName, R.id.imgDifficulty});
    72 		availableTeams.setAdapter(adapter);
    73 		availableTeams.setAdapter(adapter);
       
    74 		availableTeams.setOnItemClickListener(availableClicker);
    73 		registerForContextMenu(availableTeams);
    75 		registerForContextMenu(availableTeams);
    74 		availableTeams.setOnItemClickListener(availableClicker);
    76 
    75 
       
    76 		selectedTeams = (ListView) findViewById(R.id.selectedTeams);
       
    77 		selectedTeamsList = new ArrayList<HashMap<String, Object>>();
    77 		selectedTeamsList = new ArrayList<HashMap<String, Object>>();
    78 		ArrayList<HashMap<String, ?>> toBeRemoved = new ArrayList<HashMap<String, ?>>();
       
    79 		ArrayList<Team> teamsStartGame = getIntent().getParcelableArrayListExtra("teams");
       
    80 		for(HashMap<String, Object> hashmap : availableTeamsList){
       
    81 			for(Team t : teamsStartGame){
       
    82 				if(((Team)hashmap.get("team")).equals(t)){
       
    83 					toBeRemoved.add(hashmap);
       
    84 					selectedTeamsList.add(FrontendDataUtils.teamToHashMap(t));//create a new hashmap to ensure all variables are entered into the map
       
    85 				}
       
    86 			}
       
    87 		}
       
    88 		for(HashMap<String, ?> hashmap : toBeRemoved) availableTeamsList.remove(hashmap);
       
    89 
       
    90 		adapter = new SimpleAdapter(this, selectedTeamsList, R.layout.team_selection_entry, new String[]{"txt", "img", "color", "count"}, new int[]{R.id.txtName, R.id.imgDifficulty, R.id.teamColor, R.id.teamCount});
    78 		adapter = new SimpleAdapter(this, selectedTeamsList, R.layout.team_selection_entry, new String[]{"txt", "img", "color", "count"}, new int[]{R.id.txtName, R.id.imgDifficulty, R.id.teamColor, R.id.teamCount});
    91 		adapter.setViewBinder(viewBinder);
    79 		adapter.setViewBinder(viewBinder);
    92 		selectedTeams.setAdapter(adapter);
    80 		selectedTeams.setAdapter(adapter);
    93 		selectedTeams.setOnItemClickListener(selectedClicker);
    81 		selectedTeams.setOnItemClickListener(selectedClicker);
    94 
    82 
    95 		txtInfo.setText(String.format(getResources().getString(R.string.teams_info_template), selectedTeams.getChildCount()));
    83 		txtInfo.setText(String.format(getResources().getString(R.string.teams_info_template), selectedTeams.getChildCount()));
       
    84 
       
    85 		new Thread(this).start();//load the teams from xml async
       
    86 	}
       
    87 
       
    88 	public void run(){
       
    89 		List<HashMap<String, Object>> teamsList = FrontendDataUtils.getTeams(this);//teams from xml
       
    90 		ArrayList<Team> teamsStartGame = getIntent().getParcelableArrayListExtra("teams");//possible selected teams
       
    91 
       
    92 		for(HashMap<String, Object> hashmap : teamsList){
       
    93 			boolean added = false;
       
    94 			for(Team t : teamsStartGame){
       
    95 				if(((Team)hashmap.get("team")).equals(t)){//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
       
    97 					added = true;
       
    98 					break;
       
    99 				}
       
   100 			}
       
   101 			if(!added) availableTeamsList.add(hashmap);
       
   102 		}
       
   103 
       
   104 		this.runOnUiThread(new Runnable(){
       
   105 			public void run() {
       
   106 				((SimpleAdapter)selectedTeams.getAdapter()).notifyDataSetChanged();
       
   107 				((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged();		
       
   108 			}
       
   109 		});
    96 	}
   110 	}
    97 
   111 
    98 	private ViewBinder viewBinder = new ViewBinder(){
   112 	private ViewBinder viewBinder = new ViewBinder(){
    99 		public boolean setViewValue(View view, Object data,	String textRepresentation) {
   113 		public boolean setViewValue(View view, Object data,	String textRepresentation) {
   100 			switch(view.getId()){
   114 			switch(view.getId()){
   118 		}else{
   132 		}else{
   119 			super.onActivityResult(requestCode, resultCode, data);
   133 			super.onActivityResult(requestCode, resultCode, data);
   120 		}
   134 		}
   121 	}
   135 	}
   122 
   136 
       
   137 	/*
       
   138 	 * Updates the list view when TeamCreationActivity is shutdown and the user returns to this point
       
   139 	 */
   123 	private void updateListViews(){
   140 	private void updateListViews(){
   124 		unregisterForContextMenu(availableTeams);
   141 		unregisterForContextMenu(availableTeams);
   125 		availableTeamsList = FrontendDataUtils.getTeams(this);
   142 		availableTeamsList = FrontendDataUtils.getTeams(this);
   126 		ArrayList<HashMap<String, Object>> toBeRemoved = new ArrayList<HashMap<String, Object>>();
   143 		ArrayList<HashMap<String, Object>> toBeRemoved = new ArrayList<HashMap<String, Object>>();
   127 		for(HashMap<String, Object> hashmap : selectedTeamsList){
   144 		for(HashMap<String, Object> hashmap : selectedTeamsList){
   239 		switch(item.getItemId()){
   256 		switch(item.getItemId()){
   240 		case 0://select
   257 		case 0://select
   241 			selectAvailableTeamsItem(position);
   258 			selectAvailableTeamsItem(position);
   242 			return true;
   259 			return true;
   243 		case 1://delete
   260 		case 1://delete
   244 			File f = new File(String.format("%s/%s/%s.xml", TeamSelectionActivity.this.getFilesDir(), Team.DIRECTORY_TEAMS, availableTeamsList.get(position).get("txt")));
   261 			Team team = (Team)availableTeamsList.get(position).get("team");
       
   262 			File f = new File(String.format("%s/%s/%s", TeamSelectionActivity.this.getFilesDir(), Team.DIRECTORY_TEAMS, team.file));
   245 			f.delete();
   263 			f.delete();
   246 			availableTeamsList.remove(position);
   264 			availableTeamsList.remove(position);
   247 			((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged();
   265 			((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged();
   248 			return true;
   266 			return true;
   249 		case 2://edit
   267 		case 2://edit