|
1 package org.hedgewars.mobile; |
|
2 |
|
3 import java.io.File; |
|
4 import java.util.ArrayList; |
|
5 import java.util.HashMap; |
|
6 |
|
7 import org.hedgewars.mobile.EngineProtocol.FrontendDataUtils; |
|
8 import org.hedgewars.mobile.EngineProtocol.Team; |
|
9 |
|
10 import android.app.Activity; |
|
11 import android.content.Intent; |
|
12 import android.os.Bundle; |
|
13 import android.os.Parcelable; |
|
14 import android.view.ContextMenu; |
|
15 import android.view.MenuItem; |
|
16 import android.view.View; |
|
17 import android.view.View.OnClickListener; |
|
18 import android.widget.AdapterView; |
|
19 import android.widget.AdapterView.AdapterContextMenuInfo; |
|
20 import android.widget.AdapterView.OnItemClickListener; |
|
21 import android.widget.ImageButton; |
|
22 import android.widget.ListView; |
|
23 import android.widget.SimpleAdapter; |
|
24 |
|
25 public class TeamSelectionActivity extends Activity{ |
|
26 |
|
27 private ImageButton addTeam, back; |
|
28 private ListView availableTeams, selectedTeams; |
|
29 private ArrayList<HashMap<String, ?>> availableTeamsList, selectedTeamsList; |
|
30 private int minTeams = 2; |
|
31 |
|
32 public void onCreate(Bundle savedInstanceState){ |
|
33 super.onCreate(savedInstanceState); |
|
34 |
|
35 setContentView(R.layout.team_selector); |
|
36 |
|
37 addTeam = (ImageButton) findViewById(R.id.btnAdd); |
|
38 back = (ImageButton) findViewById(R.id.btnBack); |
|
39 |
|
40 addTeam.setOnClickListener(addTeamClicker); |
|
41 back.setOnClickListener(backClicker); |
|
42 |
|
43 availableTeams = (ListView) findViewById(R.id.availableTeams); |
|
44 availableTeamsList = FrontendDataUtils.getTeams(this); |
|
45 SimpleAdapter adapter = new SimpleAdapter(this, availableTeamsList, R.layout.team_selection_entry, new String[]{"txt", "img"}, new int[]{R.id.txtName, R.id.imgDifficulty}); |
|
46 availableTeams.setAdapter(adapter); |
|
47 registerForContextMenu(availableTeams); |
|
48 availableTeams.setOnItemClickListener(availableClicker); |
|
49 |
|
50 selectedTeams = (ListView) findViewById(R.id.selectedTeams); |
|
51 selectedTeamsList = new ArrayList<HashMap<String, ?>>(); |
|
52 ArrayList<HashMap<String, ?>> toBeRemoved = new ArrayList<HashMap<String, ?>>(); |
|
53 ArrayList<Team> teamsStartGame = getIntent().getParcelableArrayListExtra("teams"); |
|
54 for(HashMap<String, ?> hashmap : availableTeamsList){ |
|
55 for(Team t : teamsStartGame){ |
|
56 if(((Team)hashmap.get("team")).equals(t)){ |
|
57 toBeRemoved.add(hashmap); |
|
58 selectedTeamsList.add(hashmap); |
|
59 } |
|
60 } |
|
61 } |
|
62 for(HashMap<String, ?> hashmap : toBeRemoved) availableTeamsList.remove(hashmap); |
|
63 |
|
64 adapter = new SimpleAdapter(this, selectedTeamsList, R.layout.team_selection_entry, new String[]{"txt", "img"}, new int[]{R.id.txtName, R.id.imgDifficulty}); |
|
65 selectedTeams.setAdapter(adapter); |
|
66 selectedTeams.setOnItemClickListener(selectedClicker); |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 } |
|
72 |
|
73 public void onBackPressed(){ |
|
74 returnTeams(); |
|
75 super.onBackPressed(); |
|
76 } |
|
77 |
|
78 private OnClickListener addTeamClicker = new OnClickListener(){ |
|
79 public void onClick(View v) { |
|
80 startActivity(new Intent(TeamSelectionActivity.this, TeamCreatorActivity.class)); |
|
81 |
|
82 } |
|
83 }; |
|
84 |
|
85 private OnClickListener backClicker = new OnClickListener(){ |
|
86 public void onClick(View v){ |
|
87 returnTeams(); |
|
88 finish(); |
|
89 } |
|
90 }; |
|
91 |
|
92 private OnItemClickListener availableClicker = new OnItemClickListener(){ |
|
93 public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) { |
|
94 selectAvailableTeamsItem(position); |
|
95 } |
|
96 }; |
|
97 private OnItemClickListener selectedClicker = new OnItemClickListener(){ |
|
98 public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) { |
|
99 availableTeamsList.add((HashMap<String, ?>) selectedTeamsList.get(position)); |
|
100 selectedTeamsList.remove(position); |
|
101 ((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged(); |
|
102 ((SimpleAdapter)selectedTeams.getAdapter()).notifyDataSetChanged(); |
|
103 } |
|
104 |
|
105 }; |
|
106 |
|
107 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuinfo){ |
|
108 menu.add(ContextMenu.NONE, 0, ContextMenu.NONE, R.string.select); |
|
109 menu.add(ContextMenu.NONE, 2, ContextMenu.NONE, R.string.edit); |
|
110 menu.add(ContextMenu.NONE, 1, ContextMenu.NONE, R.string.delete); |
|
111 |
|
112 } |
|
113 public boolean onContextItemSelected(MenuItem item){ |
|
114 AdapterView.AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); |
|
115 int position = menuInfo.position; |
|
116 switch(item.getItemId()){ |
|
117 case 0://select |
|
118 selectAvailableTeamsItem(position); |
|
119 return true; |
|
120 case 1://delete |
|
121 availableTeamsList.remove(position); |
|
122 ((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged(); |
|
123 File f = new File(String.format("%s/%s/%s.xml", TeamSelectionActivity.this.getFilesDir(), Team.DIRECTORY_TEAMS, availableTeamsList.get(position).get("txt"))); |
|
124 f.delete(); |
|
125 return true; |
|
126 case 2://edit |
|
127 Intent i = new Intent(TeamSelectionActivity.this, TeamCreatorActivity.class); |
|
128 Team t = (Team)availableTeamsList.get(position).get("team"); |
|
129 i.putExtra("team", t); |
|
130 startActivity(i); |
|
131 return true; |
|
132 } |
|
133 return false; |
|
134 } |
|
135 |
|
136 private void selectAvailableTeamsItem(int position){ |
|
137 selectedTeamsList.add((HashMap<String, ?>) availableTeamsList.get(position)); |
|
138 availableTeamsList.remove(position); |
|
139 ((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged(); |
|
140 ((SimpleAdapter)selectedTeams.getAdapter()).notifyDataSetChanged(); |
|
141 } |
|
142 |
|
143 private void returnTeams(){ |
|
144 int teamsCount = selectedTeamsList.size(); |
|
145 if(teamsCount >= minTeams){ |
|
146 Intent i = new Intent(); |
|
147 Parcelable[] teams = new Parcelable[teamsCount]; |
|
148 for(int x = 0 ; x < teamsCount; x++){ |
|
149 teams[x] = (Team)selectedTeamsList.get(x).get("team"); |
|
150 } |
|
151 i.putExtra("teams", teams); |
|
152 setResult(Activity.RESULT_OK, i); |
|
153 }else{ |
|
154 setResult(Activity.RESULT_CANCELED); |
|
155 } |
|
156 } |
|
157 } |