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 } |