tarot-ens-info/app/src/main/java/fr/ynerant/tarot/ui/newgame/NewGameFragment.java

531 lines
18 KiB
Java

package fr.ynerant.tarot.ui.newgame;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import fr.ynerant.tarot.Game;
import fr.ynerant.tarot.MainActivity;
import fr.ynerant.tarot.Player;
import fr.ynerant.tarot.R;
import fr.ynerant.tarot.ui.home.HomeFragment;
public class NewGameFragment extends Fragment {
private NewGameViewModel newGameViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
newGameViewModel =
ViewModelProviders.of(this).get(NewGameViewModel.class);
final View root = inflater.inflate(R.layout.fragment_new_game, container, false);
if (PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getString("token", null) == null) {
//noinspection ConstantConditions
getFragmentManager().beginTransaction().replace(R.id.nav_host_fragment, new HomeFragment(), "Se connecter").commit();
return root;
}
TextView textView = root.findViewById(R.id.text_new_game);
textView.setText(R.string.menu_new_game);
final SeekBar nb_players = root.findViewById(R.id.nb_players);
final Spinner player1 = root.findViewById(R.id.player1);
final Spinner player2 = root.findViewById(R.id.player2);
final Spinner player3 = root.findViewById(R.id.player3);
final Spinner player4 = root.findViewById(R.id.player4);
final Spinner player5 = root.findViewById(R.id.player5);
final Spinner player6 = root.findViewById(R.id.player6);
final LinearLayout player4_layout = root.findViewById(R.id.player4_layout);
final LinearLayout player5_layout = root.findViewById(R.id.player5_layout);
final LinearLayout player6_layout = root.findViewById(R.id.player6_layout);
final List<Player> players = new ArrayList<>();
//noinspection ConstantConditions
ArrayAdapter<Player> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, new ArrayList<>(Player.getAllPlayers()));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
player1.setAdapter(adapter);
int id = 0;
while (adapter.getItem(id) != Player.THIS_PLAYER)
++id;
player1.setSelection(id);
player2.setAdapter(adapter);
player2.setSelection(1);
player3.setAdapter(adapter);
player3.setSelection(2);
player4.setAdapter(adapter);
player4.setSelection(3);
player5.setAdapter(adapter);
player5.setSelection(4);
player6.setAdapter(adapter);
player6.setSelection(5);
final Spinner[] spinners = new Spinner[]{player1, player2, player3, player4, player5, player6};
final Spinner attacker = root.findViewById(R.id.attacker);
final Spinner follower = root.findViewById(R.id.follower);
final LinearLayout follower_layout = root.findViewById(R.id.follower_layout);
final Spinner dealer = root.findViewById(R.id.dealer);
final SeekBar attack_points = root.findViewById(R.id.attack_score);
final SeekBar bet = root.findViewById(R.id.bet);
final SeekBar nb_ends = root.findViewById(R.id.nb_ends);
final Switch chelem_announced = root.findViewById(R.id.chelem_announced);
final Switch chelem_realized = root.findViewById(R.id.chelem_realized);
final SeekBar little_end = root.findViewById(R.id.little_end);
final SeekBar handle = root.findViewById(R.id.handle);
final ToggleButton misery1 = root.findViewById(R.id.player1_misery);
final ToggleButton misery2 = root.findViewById(R.id.player2_misery);
final ToggleButton misery3 = root.findViewById(R.id.player3_misery);
final ToggleButton misery4 = root.findViewById(R.id.player4_misery);
final ToggleButton misery5 = root.findViewById(R.id.player5_misery);
final ToggleButton misery6 = root.findViewById(R.id.player6_misery);
final ToggleButton[] miseries = new ToggleButton[]{misery1, misery2, misery3, misery4, misery5, misery6};
final TextView misery1Text = root.findViewById(R.id.player1_misery_text);
final TextView misery2Text = root.findViewById(R.id.player2_misery_text);
final TextView misery3Text = root.findViewById(R.id.player3_misery_text);
final TextView misery4Text = root.findViewById(R.id.player4_misery_text);
final TextView misery5Text = root.findViewById(R.id.player5_misery_text);
final TextView misery6Text = root.findViewById(R.id.player6_misery_text);
final TextView points1 = root.findViewById(R.id.player1_points);
final TextView points2 = root.findViewById(R.id.player2_points);
final TextView points3 = root.findViewById(R.id.player3_points);
final TextView points4 = root.findViewById(R.id.player4_points);
final TextView points5 = root.findViewById(R.id.player5_points);
final TextView points6 = root.findViewById(R.id.player6_points);
final TextView[] points = new TextView[]{points1, points2, points3, points4, points5, points6};
final TextView points1Text = root.findViewById(R.id.player1_points_text);
final TextView points2Text = root.findViewById(R.id.player2_points_text);
final TextView points3Text = root.findViewById(R.id.player3_points_text);
final TextView points4Text = root.findViewById(R.id.player4_points_text);
final TextView points5Text = root.findViewById(R.id.player5_points_text);
final TextView points6Text = root.findViewById(R.id.player6_points_text);
final Runnable updateScore = new Runnable() {
@Override
public void run() {
Game game = getGame();
for (int i = 0; i < game.getGameType().getNbPlayers(); ++i) {
points[i].setText(String.valueOf(game.points.get(i)));
}
}
public Game getGame() {
Game game = new Game();
game.gameType = Game.GameType.getGameType(nb_players.getProgress() + 3);
game.attacker = (Player) attacker.getSelectedItem();
if (game.getGameType().getNbPlayers() >= 5)
game.follower = (Player) follower.getSelectedItem();
game.attackScore = attack_points.getProgress();
game.players = players;
game.bet = Game.Bet.values()[bet.getProgress()];
game.ends = nb_ends.getProgress();
game.handle = handle.getProgress();
game.chelemAnnounced = chelem_announced.isChecked();
game.chelemRealized = chelem_realized.isChecked();
game.littleForAttacker = little_end.getProgress() == 1;
game.littleForDefenser = little_end.getProgress() == 2;
List<Boolean> miseriesList = new ArrayList<>();
for (int i = 0; i < game.getGameType().getNbPlayers(); ++i)
miseriesList.add(miseries[i].isChecked());
game.miseries = miseriesList;
game.calculateScores();
return game;
}
};
final Spinner.OnItemSelectedListener updatePlayers = new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
players.clear();
players.add((Player) player1.getSelectedItem());
players.add((Player) player2.getSelectedItem());
players.add((Player) player3.getSelectedItem());
if (nb_players.getProgress() >= 1)
players.add((Player) player4.getSelectedItem());
if (nb_players.getProgress() >= 2)
players.add((Player) player5.getSelectedItem());
if (nb_players.getProgress() == 3)
players.add((Player) player6.getSelectedItem());
//noinspection ConstantConditions
ArrayAdapter<Player> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, new ArrayList<>(players));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
attacker.setAdapter(adapter);
dealer.setAdapter(adapter);
follower.setAdapter(adapter);
misery1Text.setText(((Player) player1.getSelectedItem()).getName());
misery2Text.setText(((Player) player2.getSelectedItem()).getName());
misery3Text.setText(((Player) player3.getSelectedItem()).getName());
misery4Text.setText(((Player) player4.getSelectedItem()).getName());
misery5Text.setText(((Player) player5.getSelectedItem()).getName());
misery6Text.setText(((Player) player6.getSelectedItem()).getName());
points1Text.setText(((Player) player1.getSelectedItem()).getName());
points2Text.setText(((Player) player2.getSelectedItem()).getName());
points3Text.setText(((Player) player3.getSelectedItem()).getName());
points4Text.setText(((Player) player4.getSelectedItem()).getName());
points5Text.setText(((Player) player5.getSelectedItem()).getName());
points6Text.setText(((Player) player6.getSelectedItem()).getName());
updateScore.run();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
};
Spinner.OnItemSelectedListener justUpdate = new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateScore.run();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
ToggleButton.OnCheckedChangeListener justUpdate2 = new ToggleButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
updateScore.run();
}
};
updatePlayers.onItemSelected(null, null, 0, 0);
player1.setOnItemSelectedListener(updatePlayers);
player2.setOnItemSelectedListener(updatePlayers);
player3.setOnItemSelectedListener(updatePlayers);
player4.setOnItemSelectedListener(updatePlayers);
player5.setOnItemSelectedListener(updatePlayers);
player6.setOnItemSelectedListener(updatePlayers);
attacker.setOnItemSelectedListener(justUpdate);
follower.setOnItemSelectedListener(justUpdate);
dealer.setOnItemSelectedListener(justUpdate);
misery1.setOnCheckedChangeListener(justUpdate2);
misery2.setOnCheckedChangeListener(justUpdate2);
misery3.setOnCheckedChangeListener(justUpdate2);
misery4.setOnCheckedChangeListener(justUpdate2);
misery5.setOnCheckedChangeListener(justUpdate2);
misery6.setOnCheckedChangeListener(justUpdate2);
nb_players.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView nb_players_info = root.findViewById(R.id.nb_players_info);
int resource = R.string.players4;
switch (progress) {
case 0:
resource = R.string.players3;
break;
case 1:
resource = R.string.players4;
break;
case 2:
resource = R.string.players5;
break;
case 3:
resource = R.string.players6;
break;
}
nb_players_info.setText(resource);
player4_layout.setVisibility(View.GONE);
misery4Text.setVisibility(View.GONE);
misery4.setVisibility(View.GONE);
points4Text.setVisibility(View.GONE);
points4.setVisibility(View.GONE);
player5_layout.setVisibility(View.GONE);
misery5Text.setVisibility(View.GONE);
misery5.setVisibility(View.GONE);
points5Text.setVisibility(View.GONE);
points5.setVisibility(View.GONE);
player6_layout.setVisibility(View.GONE);
misery6Text.setVisibility(View.GONE);
misery6.setVisibility(View.GONE);
points6Text.setVisibility(View.GONE);
points6.setVisibility(View.GONE);
follower_layout.setVisibility(View.GONE);
switch (progress + 3) {
case 6:
player6_layout.setVisibility(View.VISIBLE);
misery6Text.setVisibility(View.VISIBLE);
misery6.setVisibility(View.VISIBLE);
points6Text.setVisibility(View.VISIBLE);
points6.setVisibility(View.VISIBLE);
case 5:
player5_layout.setVisibility(View.VISIBLE);
misery5Text.setVisibility(View.VISIBLE);
misery5.setVisibility(View.VISIBLE);
points5Text.setVisibility(View.VISIBLE);
points5.setVisibility(View.VISIBLE);
follower_layout.setVisibility(View.VISIBLE);
case 4:
player4_layout.setVisibility(View.VISIBLE);
misery4Text.setVisibility(View.VISIBLE);
misery4.setVisibility(View.VISIBLE);
points4Text.setVisibility(View.VISIBLE);
points4.setVisibility(View.VISIBLE);
}
updatePlayers.onItemSelected(null, null, 0, 0);
updateScore.run();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
attack_points.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView attack = root.findViewById(R.id.nb_points_attack);
TextView defense = root.findViewById(R.id.nb_points_defense);
attack.setText(String.valueOf(progress));
defense.setText(String.valueOf(91 - progress));
updateScore.run();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
bet.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView textView = root.findViewById(R.id.bet_info);
switch (progress) {
case 1:
textView.setText(R.string.guard);
break;
case 2:
textView.setText(R.string.guard_without);
break;
case 3:
textView.setText(R.string.guard_against);
break;
default:
textView.setText(R.string.little);
break;
}
updateScore.run();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
nb_ends.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView textView = root.findViewById(R.id.nb_ends_info);
switch (progress) {
case 1:
textView.setText(R.string.one_end);
break;
case 2:
textView.setText(R.string.two_ends);
break;
case 3:
textView.setText(R.string.three_ends);
break;
default:
textView.setText(R.string.null_end);
break;
}
updateScore.run();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
chelem_announced.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateScore.run();
}
});
chelem_realized.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateScore.run();
}
});
little_end.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView textView = root.findViewById(R.id.little_end_info);
switch (progress) {
case 1:
textView.setText(R.string.for_attacker);
break;
case 2:
textView.setText(R.string.for_defenser);
break;
default:
textView.setText(R.string.no);
break;
}
updateScore.run();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
attack_points.setProgress(46);
handle.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView textView = root.findViewById(R.id.handle_info);
switch (progress) {
case -3:
textView.setText(R.string.handle_3d);
break;
case -2:
textView.setText(R.string.handle_2d);
break;
case -1:
textView.setText(R.string.handle_1d);
break;
case 1:
textView.setText(R.string.handle_1a);
break;
case 2:
textView.setText(R.string.handle_2a);
break;
case 3:
textView.setText(R.string.handle_3a);
break;
default:
textView.setText(R.string.no_handle);
break;
}
updateScore.run();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
final Button btn = root.findViewById(R.id.add_game_button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "La partie est enregistrée !", Toast.LENGTH_SHORT).show();
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
Game g = getGame();
try {
URL url = new URL("https://ynerant.fr/tarot/game.php?add_game");
HttpURLConnection co = (HttpURLConnection) url.openConnection();
co.setRequestMethod("POST");
co.setRequestProperty("token", PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getString("token", null));
co.setRequestProperty("json", g.toJson());
co.connect();
System.out.println(g.toJson());
System.err.println(IOUtils.readLines(co.getInputStream()));
co.disconnect();
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
public Game getGame() {
Game game = new Game();
game.gameType = Game.GameType.getGameType(nb_players.getProgress() + 3);
game.attacker = (Player) attacker.getSelectedItem();
if (game.getGameType().getNbPlayers() >= 5)
game.follower = (Player) follower.getSelectedItem();
game.attackScore = attack_points.getProgress();
game.players = players;
game.bet = Game.Bet.values()[bet.getProgress()];
game.ends = nb_ends.getProgress();
game.handle = handle.getProgress();
game.chelemAnnounced = chelem_announced.isChecked();
game.chelemRealized = chelem_realized.isChecked();
game.littleForAttacker = little_end.getProgress() == 1;
game.littleForDefenser = little_end.getProgress() == 2;
List<Boolean> miseriesList = new ArrayList<>();
for (int i = 0; i < game.getGameType().getNbPlayers(); ++i)
miseriesList.add(miseries[i].isChecked());
game.miseries = miseriesList;
game.calculateScores();
return game;
}
});
return root;
}
}