diff -r b7e009722465 -r 88e25840f532 project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/TeamSelectionActivity.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/TeamSelectionActivity.java Thu Aug 04 17:34:21 2011 +0200 @@ -0,0 +1,157 @@ +package org.hedgewars.mobile; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; + +import org.hedgewars.mobile.EngineProtocol.FrontendDataUtils; +import org.hedgewars.mobile.EngineProtocol.Team; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Parcelable; +import android.view.ContextMenu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ImageButton; +import android.widget.ListView; +import android.widget.SimpleAdapter; + +public class TeamSelectionActivity extends Activity{ + + private ImageButton addTeam, back; + private ListView availableTeams, selectedTeams; + private ArrayList> availableTeamsList, selectedTeamsList; + private int minTeams = 2; + + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + + setContentView(R.layout.team_selector); + + addTeam = (ImageButton) findViewById(R.id.btnAdd); + back = (ImageButton) findViewById(R.id.btnBack); + + addTeam.setOnClickListener(addTeamClicker); + back.setOnClickListener(backClicker); + + availableTeams = (ListView) findViewById(R.id.availableTeams); + availableTeamsList = FrontendDataUtils.getTeams(this); + SimpleAdapter adapter = new SimpleAdapter(this, availableTeamsList, R.layout.team_selection_entry, new String[]{"txt", "img"}, new int[]{R.id.txtName, R.id.imgDifficulty}); + availableTeams.setAdapter(adapter); + registerForContextMenu(availableTeams); + availableTeams.setOnItemClickListener(availableClicker); + + selectedTeams = (ListView) findViewById(R.id.selectedTeams); + selectedTeamsList = new ArrayList>(); + ArrayList> toBeRemoved = new ArrayList>(); + ArrayList teamsStartGame = getIntent().getParcelableArrayListExtra("teams"); + for(HashMap hashmap : availableTeamsList){ + for(Team t : teamsStartGame){ + if(((Team)hashmap.get("team")).equals(t)){ + toBeRemoved.add(hashmap); + selectedTeamsList.add(hashmap); + } + } + } + for(HashMap hashmap : toBeRemoved) availableTeamsList.remove(hashmap); + + adapter = new SimpleAdapter(this, selectedTeamsList, R.layout.team_selection_entry, new String[]{"txt", "img"}, new int[]{R.id.txtName, R.id.imgDifficulty}); + selectedTeams.setAdapter(adapter); + selectedTeams.setOnItemClickListener(selectedClicker); + + + + + } + + public void onBackPressed(){ + returnTeams(); + super.onBackPressed(); + } + + private OnClickListener addTeamClicker = new OnClickListener(){ + public void onClick(View v) { + startActivity(new Intent(TeamSelectionActivity.this, TeamCreatorActivity.class)); + + } + }; + + private OnClickListener backClicker = new OnClickListener(){ + public void onClick(View v){ + returnTeams(); + finish(); + } + }; + + private OnItemClickListener availableClicker = new OnItemClickListener(){ + public void onItemClick(AdapterView arg0, View arg1, int position,long arg3) { + selectAvailableTeamsItem(position); + } + }; + private OnItemClickListener selectedClicker = new OnItemClickListener(){ + public void onItemClick(AdapterView arg0, View arg1, int position,long arg3) { + availableTeamsList.add((HashMap) selectedTeamsList.get(position)); + selectedTeamsList.remove(position); + ((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged(); + ((SimpleAdapter)selectedTeams.getAdapter()).notifyDataSetChanged(); + } + + }; + + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuinfo){ + menu.add(ContextMenu.NONE, 0, ContextMenu.NONE, R.string.select); + menu.add(ContextMenu.NONE, 2, ContextMenu.NONE, R.string.edit); + menu.add(ContextMenu.NONE, 1, ContextMenu.NONE, R.string.delete); + + } + public boolean onContextItemSelected(MenuItem item){ + AdapterView.AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); + int position = menuInfo.position; + switch(item.getItemId()){ + case 0://select + selectAvailableTeamsItem(position); + return true; + case 1://delete + availableTeamsList.remove(position); + ((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged(); + File f = new File(String.format("%s/%s/%s.xml", TeamSelectionActivity.this.getFilesDir(), Team.DIRECTORY_TEAMS, availableTeamsList.get(position).get("txt"))); + f.delete(); + return true; + case 2://edit + Intent i = new Intent(TeamSelectionActivity.this, TeamCreatorActivity.class); + Team t = (Team)availableTeamsList.get(position).get("team"); + i.putExtra("team", t); + startActivity(i); + return true; + } + return false; + } + + private void selectAvailableTeamsItem(int position){ + selectedTeamsList.add((HashMap) availableTeamsList.get(position)); + availableTeamsList.remove(position); + ((SimpleAdapter)availableTeams.getAdapter()).notifyDataSetChanged(); + ((SimpleAdapter)selectedTeams.getAdapter()).notifyDataSetChanged(); + } + + private void returnTeams(){ + int teamsCount = selectedTeamsList.size(); + if(teamsCount >= minTeams){ + Intent i = new Intent(); + Parcelable[] teams = new Parcelable[teamsCount]; + for(int x = 0 ; x < teamsCount; x++){ + teams[x] = (Team)selectedTeamsList.get(x).get("team"); + } + i.putExtra("teams", teams); + setResult(Activity.RESULT_OK, i); + }else{ + setResult(Activity.RESULT_CANCELED); + } + } +}