package com.mehtank.androminion.fragments;
import java.util.ArrayList;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragment;
import com.mehtank.androminion.R;
import com.vdom.api.GameType;
public class StartGameFragment extends SherlockFragment implements OnClickListener, OnItemSelectedListener {
@SuppressWarnings("unused")
private static final String TAG = "StartGameFragment";
//Views
View mView;
Spinner mCardsetSpinner;
Spinner mRandomSpinner;
Spinner mPresetSpinner;
Spinner mPlayer2;
Spinner mPlayer3;
Spinner mPlayer4;
Spinner mPlayer5;
Spinner mPlayer6;
Button mStartGame;
// Options & Co
SharedPreferences mPrefs;
boolean mMultiplayer = false;
String[] mLastCards;
String[] mCardsPassOnStartup;
//TODO: find a better solution for these
static final String HUMANPLAYER = "Human Player";
static final String[] PLAYERTYPES = {
"Human Player",
"Drew (AI)",
"Earl (AI)",
"Mary (AI)",
"Chuck (AI)",
"Sarah (AI)",
"Patrick (AI)",
"Random AI",
};
enum TypeOptions {
RANDOM, PRESET, LAST, SPECIFIED
};
TypeOptions mGameType;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
com.mehtank.androminion.server.Strings.context = getActivity().getApplicationContext();
mView = inflater.inflate(R.layout.fragment_startgame, null);
mCardsetSpinner = (Spinner) mView.findViewById(R.id.spinnerCardset);
mCardsetSpinner.setOnItemSelectedListener(this);
mRandomSpinner = (Spinner) mView.findViewById(R.id.spinnerRandom);
mPresetSpinner = (Spinner) mView.findViewById(R.id.spinnerPreset);
mPlayer2 = (Spinner) mView.findViewById(R.id.spPlayer2);
mPlayer3 = (Spinner) mView.findViewById(R.id.spPlayer3);
mPlayer4 = (Spinner) mView.findViewById(R.id.spPlayer4);
mPlayer5 = (Spinner) mView.findViewById(R.id.spPlayer5);
mPlayer6 = (Spinner) mView.findViewById(R.id.spPlayer6);
// TODO: Set listeners for top spinner
mStartGame = (Button) mView.findViewById(R.id.butStart);
mStartGame.setOnClickListener(this);
//Init prefs
mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
getLastCards();
// Fill cardset spinner with values
ArrayList<String> cardspinnerlist = new ArrayList<String>();
cardspinnerlist.add(getResources().getString(R.string.game_type_random));
cardspinnerlist.add(getResources().getString(R.string.game_type_preset));
if (mLastCards != null) {
cardspinnerlist.add(getResources().getString(R.string.game_type_last));
}
if (getArguments() != null && getArguments().containsKey("cards")){
cardspinnerlist.add(getResources().getString(R.string.game_type_specified));
mCardsPassOnStartup = getArguments().getStringArray("cards");
mGameType = TypeOptions.SPECIFIED;
} else {
mGameType = TypeOptions.valueOf(mPrefs.getString("gameType", TypeOptions.PRESET.name()));
}
ArrayAdapter<String> cardsetAdapter = createArrayAdapter(cardspinnerlist);
mCardsetSpinner.setAdapter(cardsetAdapter);
// Change preselected Radio button / spinner value
switch (mGameType) {
case RANDOM:
mCardsetSpinner.setSelection(cardspinnerlist.indexOf(getResources().getString(R.string.game_type_random)));
break;
case PRESET:
mCardsetSpinner.setSelection(cardspinnerlist.indexOf(getResources().getString(R.string.game_type_preset)));
break;
case LAST:
mCardsetSpinner.setSelection(cardspinnerlist.indexOf(getResources().getString(R.string.game_type_last)));
break;
case SPECIFIED:
mCardsetSpinner.setSelection(cardspinnerlist.indexOf(getResources().getString(R.string.game_type_specified)));
break;
}
//Fill card set spinners
ArrayList<String> presets = new ArrayList<String>();
ArrayList<String> randoms = new ArrayList<String>();
GameType[] types = GameType.values();
String type;
for (int i = 0; i < types.length; i++) {
if (types[i] == GameType.Specified) {
continue;
}
type = com.mehtank.androminion.server.Strings.getGameTypeName(types[i]);
if (types[i].name().startsWith("Random")) {
randoms.add(type);
} else {
presets.add(type);
}
}
ArrayAdapter<String> adapter = createArrayAdapter(randoms);
mRandomSpinner.setAdapter(adapter);
mRandomSpinner.setSelection(adapter.getPosition(mPrefs.getString("randomPref", "Random")));
adapter = createArrayAdapter(presets);
mPresetSpinner.setAdapter(adapter);
mPresetSpinner.setSelection(adapter.getPosition(mPrefs.getString("presetPref", "First Game (Base)")));
// Fill player spinners
ArrayList<String> players = new ArrayList<String>(PLAYERTYPES.length + 1);
for (String s : PLAYERTYPES) {
players.add(s);
}
if (!mMultiplayer) {
players.remove("Human Player");
}
String player = getString(R.string.player);
adapter = createArrayAdapter(players);
((TextView) mView.findViewById(R.id.txtPlayer1))
.setText(" - " + player + "1: ");
players = new ArrayList<String>(players);
players.add(getString(R.string.none_game_start));
adapter = createArrayAdapter(players);
((TextView) mView.findViewById(R.id.txtPlayer2))
.setText(" - " + player + "2: ");
mPlayer2.setPrompt(player+"2");
mPlayer2.setAdapter(adapter);
mPlayer2.setSelection(adapter.getPosition(mPrefs.getString("gamePref2", getString(R.string.none_game_start))));
((TextView) mView.findViewById(R.id.txtPlayer3))
.setText(" - " + player + "3: ");
mPlayer3.setPrompt(player+"3");
mPlayer3.setAdapter(adapter);
mPlayer3.setSelection(adapter.getPosition(mPrefs.getString("gamePref3", getString(R.string.none_game_start))));
((TextView) mView.findViewById(R.id.txtPlayer4))
.setText(" - " + player + "4: ");
mPlayer4.setPrompt(player+"4");
mPlayer4.setAdapter(adapter);
mPlayer4.setSelection(adapter.getPosition(mPrefs.getString("gamePref4", getString(R.string.none_game_start))));
((TextView) mView.findViewById(R.id.txtPlayer5))
.setText(" - " + player + "5: ");
mPlayer5.setPrompt(player+"5");
mPlayer5.setAdapter(adapter);
mPlayer5.setSelection(adapter.getPosition(mPrefs.getString("gamePref5", getString(R.string.none_game_start))));
((TextView) mView.findViewById(R.id.txtPlayer6))
.setText(" - " + player + "6: ");
mPlayer6.setPrompt(player+"6");
mPlayer6.setAdapter(adapter);
mPlayer6.setSelection(adapter.getPosition(mPrefs.getString("gamePref6", getString(R.string.none_game_start))));
return mView;
}
private void getLastCards() {
int count = mPrefs.getInt("LastCardCount", 0);
if (count > 0) {
mLastCards = new String[count];
for (int i = 0; i < count; i++) {
mLastCards[i] = mPrefs.getString("LastCard" + i, null);
}
}
}
private ArrayAdapter<String> createArrayAdapter(ArrayList<String> list) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(getActivity(), android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
return adapter;
}
@Override
public void onClick(View arg0) {
SharedPreferences.Editor edit = mPrefs.edit();
String[] cardsSpecified = null;
ArrayList<String> strs = new ArrayList<String>();
String spinnerStr;
GameType g;
switch (mGameType) {
case RANDOM:
edit.putString("gameType", TypeOptions.RANDOM.name());
spinnerStr = (String) mRandomSpinner.getSelectedItem();
g = com.mehtank.androminion.server.Strings.getGameTypefromName(spinnerStr);
if (g != null)
strs.add(g.getName());
edit.putString("randomPref", spinnerStr);
break;
case PRESET:
edit.putString("gameType", TypeOptions.PRESET.name());
spinnerStr = (String) mPresetSpinner.getSelectedItem();
g = com.mehtank.androminion.server.Strings.getGameTypefromName(spinnerStr);
if (g != null)
strs.add(g.getName());
edit.putString("presetPref", spinnerStr);
break;
case LAST:
edit.putString("gameType", TypeOptions.LAST.name());
cardsSpecified = mLastCards;
strs.add("Random");
break;
case SPECIFIED:
cardsSpecified = mCardsPassOnStartup;
strs.add("Random");
break;
}
String str = HUMANPLAYER;
strs.add(str);
str = (String) mPlayer2.getSelectedItem();
strs.add(str);
edit.putString("gamePref2", str);
str = (String) mPlayer3.getSelectedItem();
strs.add(str);
edit.putString("gamePref3", str);
str = (String) mPlayer4.getSelectedItem();
strs.add(str);
edit.putString("gamePref4", str);
str = (String) mPlayer5.getSelectedItem();
strs.add(str);
edit.putString("gamePref5", str);
str = (String) mPlayer6.getSelectedItem();
strs.add(str);
edit.putString("gamePref6", str);
if(mPrefs.getBoolean("plat_colony", false)) {
strs.add("-platcolony");
}
if (mPrefs.getBoolean("use_shelters", false))
{
strs.add("-useshelters");
}
if(mPrefs.getBoolean("quick_play", false)) {
strs.add("-quickplay");
}
if(mPrefs.getBoolean("mask_names", false)) {
strs.add("-masknames");
}
if(mPrefs.getBoolean("sort_cards", false)) {
strs.add("-sortcards");
}
if (mPrefs.getBoolean("action_chains", false)) {
strs.add("-actionchains");
}
if (mPrefs.getBoolean("suppress_redundant_reactions", true)) {
strs.add("-suppressredundantreactions");
}
if (mPrefs.getBoolean("equal_start_hands", false)) {
strs.add("-equalstarthands");
}
if(cardsSpecified != null) {
StringBuilder sb = new StringBuilder();
sb.append("-cards=");
boolean first = true;
for(String card : cardsSpecified) {
if(first)
first = false;
else
sb.append("-");
sb.append(card);
}
strs.add(sb.toString());
}
edit.commit();
try {
((OnStartGameListener) getActivity()).onStartGameClick(strs);
} catch (ClassCastException e) {
throw new ClassCastException(getActivity().toString() + " must implement OnStartGameListener");
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (parent.getItemAtPosition(pos) == getResources().getString(R.string.game_type_random)){
mGameType = TypeOptions.RANDOM;
mRandomSpinner.setVisibility(View.VISIBLE);
mPresetSpinner.setVisibility(View.GONE);
} else if (parent.getItemAtPosition(pos) == getResources().getString(R.string.game_type_preset)){
mGameType = TypeOptions.PRESET;
mRandomSpinner.setVisibility(View.GONE);
mPresetSpinner.setVisibility(View.VISIBLE);
} else if (parent.getItemAtPosition(pos) == getResources().getString(R.string.game_type_last)){
mGameType = TypeOptions.LAST;
mPresetSpinner.setVisibility(View.GONE);
mRandomSpinner.setVisibility(View.GONE);
} else if (parent.getItemAtPosition(pos) == getResources().getString(R.string.game_type_specified)){
mGameType = TypeOptions.SPECIFIED;
mPresetSpinner.setVisibility(View.GONE);
mRandomSpinner.setVisibility(View.GONE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Nothing selected - so let's do nothing
}
// Container Activity must implement this interface
public interface OnStartGameListener {
public void onStartGameClick(ArrayList<String> values);
}
}