V2 initialization
This commit is contained in:
@ -1,23 +0,0 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.MenuItem
|
||||
import android.widget.TextView
|
||||
|
||||
|
||||
class CreditsActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_credits)
|
||||
setSupportActionBar(findViewById(R.id.toolbar))
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
findViewById<TextView>(R.id.iconsCredit)?.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
finish()
|
||||
return true
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.DialogFragment
|
||||
|
||||
|
||||
class EndOfMatchDialog: DialogFragment() {
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?)=
|
||||
AlertDialog.Builder(activity).apply{
|
||||
val players = (activity as MainActivity).players
|
||||
val names = players.map { it.name }
|
||||
val winnerName = players.maxBy { it.score }?.name ?: ""
|
||||
val score = players.map { it.score }.sortedDescending()
|
||||
|
||||
setTitle(getString(R.string.end_match_dialog_title, winnerName))
|
||||
setMessage(getString(R.string.score, score[0], score[1]))
|
||||
setPositiveButton(
|
||||
R.string.new_match,
|
||||
DialogInterface.OnClickListener { dialog, id ->
|
||||
startActivity(
|
||||
Intent(context, MainActivity::class.java).apply {
|
||||
putExtra("names", names.toTypedArray())
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
setNeutralButton(
|
||||
R.string.share_button,
|
||||
DialogInterface.OnClickListener { dialog, id ->
|
||||
val newMatchIntent: Intent = Intent().apply {
|
||||
action = Intent.ACTION_SEND
|
||||
putExtra(
|
||||
Intent.EXTRA_SUBJECT,
|
||||
getString(
|
||||
R.string.share_subject,
|
||||
names[Side.LEFT.value],
|
||||
names[Side.RIGHT.value]
|
||||
)
|
||||
)
|
||||
putExtra(
|
||||
Intent.EXTRA_TEXT,
|
||||
getString(R.string.share_message,
|
||||
names[Side.LEFT.value],
|
||||
names[Side.RIGHT.value],
|
||||
winnerName,
|
||||
score[0],
|
||||
score[1]
|
||||
)
|
||||
)
|
||||
type = "text/plain"
|
||||
}
|
||||
startActivity(newMatchIntent)
|
||||
}
|
||||
)
|
||||
}.create()
|
||||
}
|
@ -1,181 +0,0 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.support.v7.app.AppCompatDelegate
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
import android.widget.ImageView
|
||||
import android.widget.Toast
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
var players: Array<Player> = emptyArray()
|
||||
var serviceSide: Side = Side.LEFT
|
||||
var relaunchSide: Side = Side.RIGHT
|
||||
var textScore: android.widget.TextView? = null
|
||||
var textService: android.widget.TextView? = null
|
||||
var buttons: Array<Button> = emptyArray()
|
||||
var imageViews: Array<ImageView?> = emptyArray()
|
||||
var history: MutableList<State> = ArrayList()
|
||||
var step: Int = 0
|
||||
var undo: MenuItem? = null
|
||||
var redo: MenuItem? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
|
||||
setContentView(R.layout.activity_main)
|
||||
setSupportActionBar(findViewById(R.id.toolbar))
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
|
||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
|
||||
}
|
||||
|
||||
var names: Array<String> = intent.getStringArrayExtra("names") ?: resources.getStringArray(R.array.default_players_names)
|
||||
players = arrayOf(
|
||||
Player(names[Side.LEFT.value]),
|
||||
Player(names[Side.RIGHT.value])
|
||||
)
|
||||
textScore = findViewById(R.id.textScore)
|
||||
textService = findViewById(R.id.textService)
|
||||
buttons = arrayOf(
|
||||
findViewById(R.id.buttonLeftPlayer),
|
||||
findViewById(R.id.buttonRightPlayer)
|
||||
)
|
||||
imageViews = arrayOf(
|
||||
findViewById(R.id.imgLeftService),
|
||||
findViewById(R.id.imgRightService)
|
||||
)
|
||||
updateUI()
|
||||
StarterNameDialog().show( supportFragmentManager, "StarterNameDialog")
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.main, menu)
|
||||
undo = menu.findItem(R.id.action_undo)
|
||||
redo = menu.findItem(R.id.action_redo)
|
||||
return super.onCreateOptionsMenu(menu)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
|
||||
R.id.action_undo -> {
|
||||
step--
|
||||
reloadState()
|
||||
redo?.isVisible = true
|
||||
true
|
||||
}
|
||||
R.id.action_redo -> {
|
||||
step++
|
||||
reloadState()
|
||||
undo?.isVisible = true
|
||||
true
|
||||
}
|
||||
R.id.action_new_match -> {
|
||||
startActivity(
|
||||
Intent(this, MainActivity::class.java).apply {
|
||||
putExtra("names", players.map{ it.name }.toTypedArray())
|
||||
}
|
||||
)
|
||||
true
|
||||
}
|
||||
R.id.action_about -> {
|
||||
startActivity(Intent(this, CreditsActivity::class.java))
|
||||
true
|
||||
}
|
||||
else -> {
|
||||
super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
fun saveState() {
|
||||
val state = State(players.map { it.score }, serviceSide)
|
||||
if (step == history.size) {
|
||||
history.add(state)
|
||||
} else {
|
||||
history[step] = state
|
||||
history = history.subList(0, step+1).toMutableList()
|
||||
}
|
||||
if (step > 0) {
|
||||
undo?.isVisible = true
|
||||
}
|
||||
redo?.isVisible = false
|
||||
}
|
||||
|
||||
fun reloadState() {
|
||||
history[step].let{
|
||||
players.zip(it.score).forEach{(player, score) -> player.score = score}
|
||||
serviceSide = it.serviceSide
|
||||
relaunchSide = when(serviceSide) {
|
||||
Side.LEFT -> Side.RIGHT
|
||||
Side.RIGHT -> Side.LEFT
|
||||
}
|
||||
}
|
||||
when(step){
|
||||
0 -> undo?.isVisible = false
|
||||
history.size - 1 -> redo?.isVisible = false
|
||||
}
|
||||
this.step = step
|
||||
updateUI()
|
||||
}
|
||||
|
||||
fun setStarterName(serviceSide: Side, names: Collection<String>) {
|
||||
players.zip(names).forEach { (player, name) -> player.name = name}
|
||||
this.serviceSide = serviceSide
|
||||
relaunchSide = when(serviceSide) {
|
||||
Side.LEFT -> Side.RIGHT
|
||||
Side.RIGHT -> Side.LEFT
|
||||
}
|
||||
saveState()
|
||||
updateUI()
|
||||
Toast.makeText(applicationContext, R.string.info, Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
fun updateUI() {
|
||||
textScore?.text = getString(R.string.score, players[serviceSide.value].score, players[relaunchSide.value].score)
|
||||
textService?.text = getString(R.string.service, players[serviceSide.value].name)
|
||||
|
||||
for ((button, player) in buttons.zip(players)) {
|
||||
button.text = fromHtml(getString(R.string.button_text, player.name, player.score))
|
||||
}
|
||||
|
||||
when (serviceSide) {
|
||||
Side.LEFT -> {
|
||||
imageViews[Side.LEFT.value]?.setImageResource(R.drawable.ic_left_service)
|
||||
imageViews[Side.RIGHT.value]?.setImageResource(0)
|
||||
}
|
||||
Side.RIGHT -> {
|
||||
imageViews[Side.LEFT.value]?.setImageResource(0)
|
||||
imageViews[Side.RIGHT.value]?.setImageResource(R.drawable.ic_right_service)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun updateScore(view: View) {
|
||||
for (side in enumValues<Side>()) {
|
||||
if (view == buttons[side.value]) {
|
||||
if (!matchIsFinished()) {
|
||||
step++
|
||||
players[side.value].score++
|
||||
if ((players.sumBy { it.score } % 2 == 0) or (players.all { it.score >= 10 })) {
|
||||
serviceSide = relaunchSide.also { relaunchSide = serviceSide }
|
||||
}
|
||||
saveState()
|
||||
updateUI()
|
||||
}
|
||||
if (matchIsFinished()) {
|
||||
EndOfMatchDialog().show(supportFragmentManager, "EndOfMatchDialog")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun matchIsFinished(): Boolean {
|
||||
val (minScore, maxScore) = players.map { it.score }.sorted()
|
||||
return (maxScore >= 11) and (maxScore - minScore >= 2)
|
||||
}
|
||||
}
|
8
app/src/main/java/adrienmalin/pingpoints/MatchModel.kt
Normal file
8
app/src/main/java/adrienmalin/pingpoints/MatchModel.kt
Normal file
@ -0,0 +1,8 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
class MatchModel : ViewModel() {
|
||||
var players: List<Player> = ListOf(Player(), Player())
|
||||
var server: Int = 0
|
||||
var ttsEnabled: Boolean = False
|
||||
var sttEnabled: Boolean = False
|
||||
}
|
6
app/src/main/java/adrienmalin/pingpoints/Play.kt
Normal file
6
app/src/main/java/adrienmalin/pingpoints/Play.kt
Normal file
@ -0,0 +1,6 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
data class Play {
|
||||
val score: List<Int>,
|
||||
val server: Int
|
||||
}
|
6
app/src/main/java/adrienmalin/pingpoints/Player.kt
Normal file
6
app/src/main/java/adrienmalin/pingpoints/Player.kt
Normal file
@ -0,0 +1,6 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
data class Player {
|
||||
var name: String = "",
|
||||
var score: Int = 0
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
|
||||
class StarterNameActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_starter_name)
|
||||
}
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.DialogFragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import android.widget.RadioGroup
|
||||
import android.widget.TextView
|
||||
|
||||
|
||||
class StarterNameDialog : DialogFragment() {
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?) =
|
||||
AlertDialog.Builder(activity).apply {
|
||||
val mainActivity = activity as MainActivity
|
||||
val inflater:LayoutInflater = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||
val namesView: View = inflater.inflate(R.layout.starter_name_dialog, null)
|
||||
val inputsPlayersNames: Array<EditText?> = arrayOf(
|
||||
namesView.findViewById(R.id.inputLeftPlayerName),
|
||||
namesView.findViewById(R.id.inputRightPlayerName)
|
||||
)
|
||||
|
||||
inputsPlayersNames.zip(mainActivity.players.map{ it.name }).forEach { (inputPlayerName, name) ->
|
||||
inputPlayerName?.setText(name, TextView.BufferType.EDITABLE)
|
||||
}
|
||||
|
||||
setTitle(R.string.starter_name_dialog_message)
|
||||
setView(namesView)
|
||||
setPositiveButton(R.string.go_button) { dialog, id ->
|
||||
dismiss()
|
||||
mainActivity.setStarterName(
|
||||
when (namesView.findViewById<RadioGroup>(R.id.radioGroup)?.checkedRadioButtonId) {
|
||||
R.id.radioLeftPlayer -> Side.LEFT
|
||||
else -> Side.RIGHT
|
||||
},
|
||||
inputsPlayersNames.map{ it?.text.toString() }
|
||||
)
|
||||
}
|
||||
}.create()
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
package adrienmalin.pingpoints
|
||||
|
||||
import android.os.Build
|
||||
import android.text.Html
|
||||
import android.text.Spanned
|
||||
|
||||
|
||||
data class Player(
|
||||
var name: String,
|
||||
var score: Int = 0
|
||||
)
|
||||
|
||||
|
||||
enum class Side(val value:Int) {
|
||||
LEFT(0),
|
||||
RIGHT(1)
|
||||
}
|
||||
|
||||
|
||||
data class State(
|
||||
val score: List<Int>,
|
||||
val serviceSide: Side
|
||||
)
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
fun fromHtml(html: String): Spanned {
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
|
||||
} else {
|
||||
Html.fromHtml(html)
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user