project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/TeamSelectionActivity.java
branchhedgeroid
changeset 5467 88e25840f532
child 5506 2b0c4fcde4c6
equal deleted inserted replaced
5465:b7e009722465 5467:88e25840f532
       
     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 }