feat: Ajout du jeu Papelito, améliorations UX et corrections de bugs

Nouveau jeu:
- Ajout du jeu Papelito (Undercover) avec flow complet
- Configuration des joueurs, temps de discussion, votes
- Système d'élimination et gestion des égalités
- Interface Material Design avec cartes et dialogues

Corrections de bugs critiques:
- Fix crash Papelito au lancement (MaterialSwitch vs Switch)
- Fix crash lors des votes nuls (égalité entre joueurs)
- Fix crash fin de partie lors du retour (navigation vers hub)
- Fix visibilité texte questions (couleur dynamique)
- Fix compteur tours défis invisible (blanc sur blanc)
- Fix icone question manquante pendant défis

Améliorations UX Boidelo Classic:
- Harmonisation des couleurs dynamiques (toolbar, bouton)
- Bouton de réglages maintenant visible (MaterialButton)
- Conteneur IA se rétracte quand désactivé
- Meilleure gestion des couleurs selon catégorie
- Fix délai entre manches pour affichage message fin

Améliorations techniques:
- Mise à jour CLAUDE.md avec architecture Papelito
- Amélioration tests unitaires (GameEngine, PlayerStats, QuestionCategory)
- Standardisation des clés Intent entre activités
- Nettoyage code mort (méthodes non utilisées)

Tests:
- 302 tests unitaires passants
- Couverture GameEngine, PlayerStats, QuestionCategory
- Tests Papelito (game logic, player management)
- Tests Game89 (challenges, players)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
feldenr
2026-01-16 12:05:29 +01:00
co-authored by Claude
parent 1b3d67526d
commit c803469643
42 changed files with 6549 additions and 201 deletions
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<!-- Tête du personnage mystère -->
<path
android:fillColor="@color/primary"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
<!-- Point d'interrogation au centre -->
<path
android:fillColor="@color/accent"
android:pathData="M12.5,13.5c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5zM12.5,7.5c0,-0.28 -0.22,-0.5 -0.5,-0.5s-0.5,0.22 -0.5,0.5v1c0,0.28 0.22,0.5 0.5,0.5s0.5,-0.22 0.5,-0.5v-1zM12,9c-0.83,0 -1.5,0.67 -1.5,1.5v1h1v-1c0,-0.28 0.22,-0.5 0.5,-0.5s0.5,0.22 0.5,0.5v1h1v-1c0,-0.83 -0.67,-1.5 -1.5,-1.5z"/>
</vector>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@@ -12,18 +11,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
app:navigationIcon="@android:drawable/ic_menu_revert"
app:title="@string/parameters"
app:titleTextColor="@color/text_on_primary" />
</com.google.android.material.appbar.AppBarLayout>
android:theme="@style/ThemeOverlay.AppCompat.Dark"/>
<!-- Main Content -->
<androidx.core.widget.NestedScrollView
@@ -39,12 +27,13 @@
<!-- Title -->
<TextView
android:id="@+id/Titre"
style="@style/BoideloTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="@string/game_settings" />
android:text="@string/param_tres_du_jeu" />
<!-- Game Settings Card -->
<com.google.android.material.card.MaterialCardView
@@ -56,117 +45,351 @@
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<!-- Number of Questions -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_questions"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
style="@style/BoideloSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="Paramètres de partie"
app:drawableStartCompat="@android:drawable/ic_menu_edit"
app:drawableTint="@color/primary"/>
<SeekBar
android:id="@+id/questionsSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:max="50"
android:min="10"
android:progress="20" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<TextView
android:id="@+id/questionsCountText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center"
android:textColor="@color/accent"
android:textSize="14sp"
android:textStyle="bold"
tools:text="20 questions" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<!-- Number of Gorgées -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/number_of_gorgees"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Nombre de questions"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<SeekBar
android:id="@+id/gorgeesSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:max="5"
android:min="1"
android:progress="1" />
<TextView
android:id="@+id/questionCountValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:paddingStart="12dp"
android:paddingTop="4dp"
android:paddingEnd="12dp"
android:paddingBottom="4dp"
android:text="50"
android:textColor="@color/primary"
android:textSize="14sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/gorgeesCountText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center"
android:textColor="@color/accent"
android:textSize="14sp"
android:textStyle="bold"
tools:text="+1 gorgée" />
</LinearLayout>
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progressTint="@color/accent"
android:thumbTint="@color/accent"/>
</LinearLayout>
<!-- Drink Addition -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Ajout de gorgées"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<TextView
android:id="@+id/gorgeesValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:paddingStart="12dp"
android:paddingTop="4dp"
android:paddingEnd="12dp"
android:paddingBottom="4dp"
android:text="0"
android:textColor="@color/accent"
android:textSize="14sp"
android:textStyle="bold"/>
</LinearLayout>
<SeekBar
android:id="@+id/seekBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progressTint="@color/accent"
android:thumbTint="@color/accent"/>
<!-- Palier Indicator -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:cardBackgroundColor="@color/surface_variant"
app:cardCornerRadius="8dp"
app:cardElevation="0dp">
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="12dp"
android:text="Palier : Grosse merde"
android:textColor="@color/text_secondary"
android:textSize="14sp"
android:textStyle="bold"/>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
<!-- Duration of Challenges -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textViewDuration"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Durée des défis"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<TextView
android:id="@+id/durationValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:paddingStart="12dp"
android:paddingTop="4dp"
android:paddingEnd="12dp"
android:paddingBottom="4dp"
android:text="0"
android:textColor="@color/primary"
android:textSize="14sp"
android:textStyle="bold"/>
</LinearLayout>
<SeekBar
android:id="@+id/seekBarDuration"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progressTint="@color/accent"
android:thumbTint="@color/accent"/>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- AI Settings Card -->
<!-- OpenAI Settings Card -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/openaiCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
app:cardElevation="4dp"
app:strokeColor="@color/surface_variant"
app:strokeWidth="1dp">
<LinearLayout
android:id="@+id/openaiCardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/artificial_intelligence"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
android:layout_marginBottom="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/aiSwitch"
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="8dp"
android:src="@android:drawable/ic_menu_edit"
app:tint="@color/primary" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/openai"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/checkBoxGPT"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- Provider Selection -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayoutProvider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/enable_ai_questions"
android:textColor="@color/text_hint"
android:textSize="14sp" />
android:layout_marginBottom="16dp"
android:enabled="false"
android:hint="Fournisseur IA"
app:boxBackgroundColor="@color/surface"
app:boxStrokeColor="@color/primary"
app:hintTextColor="@color/text_hint"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
<AutoCompleteTextView
android:id="@+id/autoCompleteProvider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
android:text="OpenAI" />
</com.google.android.material.textfield.TextInputLayout>
<!-- API Key Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayoutApiKey"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:hint="Clé API"
app:boxBackgroundColor="@color/surface"
app:boxStrokeColor="@color/primary"
app:endIconMode="password_toggle"
app:hintTextColor="@color/text_hint"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/editTextGPT"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Ratio SeekBar -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/textViewRatioGen"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="false"
android:text="Ratio BDD/OPENAI : 1/8"
android:textColor="@color/text_primary"
android:textSize="14sp" />
</LinearLayout>
<SeekBar
android:id="@+id/seekBar3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="false"
android:progressTint="@color/accent"
android:thumbTint="@color/accent" />
</LinearLayout>
<!-- Test API Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/ButtonTestApi"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="false"
android:onClick="onClickButtonTestAPI"
android:text="@string/test_de_connectivit_openai"
app:backgroundTint="@color/surface_variant"
app:icon="@android:drawable/ic_menu_info_details"
app:iconGravity="textStart" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Save Button -->
<!-- Start Game Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/saveButton"
style="@style/BoideloButton.Primary"
android:id="@+id/Go2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save" />
android:layout_height="64dp"
android:layout_marginTop="24dp"
android:layout_marginBottom="32dp"
android:onClick="onClickButtonStart"
android:text="@string/commencer_a_vous_mettre_une_mine"
android:textColor="@color/text_on_primary"
android:textSize="18sp"
android:textStyle="bold"
app:backgroundTint="@color/primary"
app:cornerRadius="16dp"
app:icon="@android:drawable/ic_media_play"
app:iconTint="@color/text_on_primary"
app:iconGravity="textStart"
android:elevation="8dp" />
</LinearLayout>
@@ -349,8 +349,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="false"
android:progressTint="@color/primary_light"
android:thumbTint="@color/primary_light" />
android:progressTint="@color/accent"
android:thumbTint="@color/accent" />
</LinearLayout>
@@ -0,0 +1,339 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".games.papelito.PapelitoGameActivity">
<!-- App Bar -->
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
app:navigationIcon="@android:drawable/ic_menu_revert"
app:title="Papelito"
app:titleTextColor="@android:color/white" />
</com.google.android.material.appbar.AppBarLayout>
<!-- Main Content -->
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<!-- Phase Card -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="@color/primary"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/phaseTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Phase 1: Révélation des mots"
android:textColor="@android:color/white"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Timer Display -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/timerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardBackgroundColor="@color/accent"
app:cardCornerRadius="16dp"
app:cardElevation="4dp"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temps de discussion"
android:textColor="@android:color/white"
android:textSize="16sp"
android:alpha="0.9" />
<TextView
android:id="@+id/timerTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="1:00"
android:textColor="@android:color/white"
android:textSize="48sp"
android:textStyle="bold"
android:fontFamily="monospace" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Current Player / Info Card -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/currentWordPlayerTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tour du joueur"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/infoTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="Informations de la phase"
android:textColor="@color/text_hint"
android:textSize="15sp"
android:lineSpacingExtra="4dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Secret Word Card -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/wordCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardBackgroundColor="@color/accent"
app:cardCornerRadius="20dp"
app:cardElevation="8dp"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="32dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ton mot secret est:"
android:textColor="@android:color/white"
android:textSize="16sp"
android:alpha="0.9" />
<TextView
android:id="@+id/wordTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="MOT"
android:textColor="@android:color/white"
android:textSize="42sp"
android:textStyle="bold"
android:fontFamily="monospace" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Mémorise-le bien!"
android:textColor="@android:color/white"
android:textSize="14sp"
android:alpha="0.8" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Action Buttons Container -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:orientation="vertical">
<!-- Show Word Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/showWordButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="👁️ Voir mon mot"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:backgroundTint="@color/accent"
app:cornerRadius="16dp"
app:icon="@android:drawable/ic_menu_info_details"
app:iconTint="@android:color/white"
android:elevation="4dp" />
<!-- Next Player Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/nextPlayerButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="12dp"
android:text="Joueur suivant ➡️"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:backgroundTint="@color/primary"
app:cornerRadius="16dp"
app:icon="@android:drawable/ic_media_next"
app:iconTint="@android:color/white"
android:elevation="4dp" />
<!-- Start Discussion Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/startDiscussionButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="12dp"
android:text="💬 Commencer la discussion"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:backgroundTint="@color/success"
app:cornerRadius="16dp"
app:icon="@android:drawable/ic_menu_edit"
app:iconTint="@android:color/white"
android:visibility="gone"
android:elevation="4dp" />
<!-- Start Voting Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/startVotingButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="12dp"
android:text="🗳️ Passer au vote"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:backgroundTint="@color/accent"
app:cornerRadius="16dp"
app:icon="@android:drawable/ic_menu_agenda"
app:iconTint="@android:color/white"
android:visibility="gone"
android:elevation="4dp" />
<!-- End Game Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/endGameButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="12dp"
android:text="🏁 Voir les résultats"
android:textColor="@android:color/white"
android:textSize="16sp"
android:textStyle="bold"
app:backgroundTint="@color/error"
app:cornerRadius="16dp"
app:icon="@android:drawable/ic_menu_info_details"
app:iconTint="@android:color/white"
android:visibility="gone"
android:elevation="4dp" />
</LinearLayout>
<!-- Game Info -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="💡 Rappel des règles"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="• Chaque joueur reçoit un mot secret\n• Les Civils ont tous le même mot\n• Les Undercovers ont un mot différent\n• Discutez pour trouver les Undercovers\n• Votez pour éliminer les suspects\n• Les Undercovers gagnent s'ils sont ≥ aux Civils"
android:textColor="@color/text_hint"
android:textSize="14sp"
android:lineSpacingExtra="2dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -0,0 +1,271 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".games.papelito.PapelitoResultActivity">
<!-- App Bar -->
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
app:title="Résultats"
app:titleTextColor="@color/text_on_primary" />
</com.google.android.material.appbar.AppBarLayout>
<!-- Main Content -->
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<!-- Winner Card -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/winnerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/primary"
app:cardCornerRadius="24dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="32dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="VICTOIRE"
android:textColor="@color/text_on_primary"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/winnerTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Les Civils gagnent !"
android:textColor="@color/text_on_primary"
android:textSize="28sp"
android:textStyle="bold"
android:gravity="center" />
<TextView
android:id="@+id/winningTeamTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Tous les Undercover ont été éliminés"
android:textColor="@color/text_on_primary"
android:textSize="16sp"
android:alpha="0.9"
android:gravity="center" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Secret Words Card -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/secretWordsCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/accent"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Mots secrets révélés"
android:textColor="@color/text_on_primary"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/civilWordTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_gravity="center"
android:text="Mot Civil: ???"
android:textColor="@color/text_on_primary"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/undercoverWordTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_gravity="center"
android:text="Mot Undercover: ???"
android:textColor="@color/text_on_primary"
android:textSize="24sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Players Roles Card -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/rolesCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Rôles des joueurs"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rolesRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/item_papelito_result" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Statistics Card -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/statsCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Statistiques de la partie"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/roundsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="Nombre de tours: 0"
android:textColor="@color/text_secondary"
android:textSize="14sp" />
<TextView
android:id="@+id/totalVotesTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Total des votes: 0"
android:textColor="@color/text_secondary"
android:textSize="14sp" />
<TextView
android:id="@+id/durationTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Durée de la partie: 0 min"
android:textColor="@color/text_secondary"
android:textSize="14sp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Action Buttons -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/newGameButton"
style="@style/BoideloButton.Primary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="Nouvelle partie"
android:textSize="14sp"
app:icon="@android:drawable/ic_menu_rotate"
app:cornerRadius="20dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/homeButton"
style="@style/BoideloButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1"
android:text="Retour"
android:textSize="14sp"
app:icon="@android:drawable/ic_menu_revert"
app:cornerRadius="20dp" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -0,0 +1,222 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/surface"
tools:context=".games.papelito.PapelitoSetupActivity">
<!-- App Bar -->
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
app:navigationIcon="@android:drawable/ic_menu_revert"
app:title="Papelito - Configuration"
app:titleTextColor="@color/text_on_primary" />
</com.google.android.material.appbar.AppBarLayout>
<!-- Main Content -->
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<!-- Title -->
<TextView
style="@style/BoideloTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginBottom="16dp"
android:text="Papelito"
android:textColor="@color/primary"
android:textSize="28sp"
android:textStyle="bold" />
<!-- Game Rules Card -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Règles du jeu"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Chaque joueur reçoit un mot secret. Les Undercover doivent deviner le mot commun, tandis que les Civils doivent identifier les Undercover. Mr White doit deviner le mot exact !"
android:textColor="@color/text_hint"
android:textSize="14sp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Players Card -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Joueurs"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/playersContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="vertical" />
<com.google.android.material.button.MaterialButton
android:id="@+id/addPlayerButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Ajouter un joueur"
app:icon="@android:drawable/ic_input_add" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Game Settings Card -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Paramètres de partie"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:textStyle="bold" />
<!-- Number of Undercovers -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Nombre d'Undercover"
android:textColor="@color/text_secondary"
android:textSize="14sp" />
<SeekBar
android:id="@+id/undercoverSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:max="3"
android:min="1"
android:progress="1" />
<TextView
android:id="@+id/undercoverText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center"
android:text="1 Undercover"
android:textColor="@color/accent"
android:textSize="16sp"
android:textStyle="bold" />
<!-- Mr White Toggle -->
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/mrWhiteSwitch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Activer Mr White"
android:textColor="@color/text_primary"
android:textSize="16sp"
app:thumbTint="@color/primary"
app:trackTint="@color/accent" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="Mr White ne connait aucun mot et doit le deviner pour gagner !"
android:textColor="@color/text_hint"
android:textSize="12sp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Start Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/startGameButton"
style="@style/BoideloButton.Primary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="JOUER"
android:textSize="18sp"
app:icon="@android:drawable/ic_media_play" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<!-- Title -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Votez pour éliminer"
android:textColor="@color/text_primary"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center" />
<TextView
android:id="@+id/voteInstructionTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Sélectionnez le joueur que vous soupçonnez être un Undercover"
android:textColor="@color/text_hint"
android:textSize="14sp"
android:gravity="center" />
<!-- Players List for Voting -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/votePlayersRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:maxHeight="300dp"
tools:listitem="@layout/item_papelito_player_vote" />
<!-- Cancel Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/cancelVoteButton"
style="@style/BoideloButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Annuler"
app:backgroundTint="@color/surface_variant" />
</LinearLayout>
@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<!-- Title -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Passage du téléphone"
android:textColor="@color/text_primary"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center" />
<TextView
android:id="@+id/currentPlayerTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="À tour de Joueur 1"
android:textColor="@color/accent"
android:textSize="18sp"
android:textStyle="bold"
android:gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Regardez votre mot secret en privé"
android:textColor="@color/text_hint"
android:textSize="14sp"
android:gravity="center" />
<!-- Word Reveal Area -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/wordCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:cardBackgroundColor="@color/primary"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="32dp">
<!-- Hidden State -->
<LinearLayout
android:id="@+id/hiddenStateLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="🔒"
android:textSize="64sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Mot caché"
android:textColor="@color/text_on_primary"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
<!-- Revealed State -->
<LinearLayout
android:id="@+id/revealedStateLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/secretWordTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MOT SECRET"
android:textColor="@color/text_on_primary"
android:textSize="36sp"
android:textStyle="bold"
android:letterSpacing="0.15" />
<TextView
android:id="@+id/roleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="Vous êtes: Civil"
android:textColor="@color/text_on_primary"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Action Buttons -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:orientation="horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/showWordButton"
style="@style/BoideloButton.Primary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="Voir le mot"
android:textSize="14sp"
app:cornerRadius="20dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/confirmButton"
style="@style/BoideloButton.Success"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1"
android:text="J'ai vu"
android:textSize="14sp"
android:visibility="gone"
app:cornerRadius="20dp" />
</LinearLayout>
</LinearLayout>
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="12dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical">
<!-- Player Avatar -->
<TextView
android:id="@+id/playerAvatarTextView"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_card"
android:gravity="center"
android:text="A"
android:textColor="@color/primary"
android:textSize="24sp"
android:textStyle="bold" />
<!-- Player Info -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/playerNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Player Name"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/playerRoleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="Inconnu"
android:textColor="@color/text_hint"
android:textSize="12sp"
android:visibility="gone"/>
</LinearLayout>
<!-- Status Indicator -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/playerStatusTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:paddingStart="8dp"
android:paddingTop="4dp"
android:paddingEnd="8dp"
android:paddingBottom="4dp"
android:text="En vie"
android:textColor="@color/success"
android:textSize="12sp"
android:textStyle="bold" />
<!-- Vote Count -->
<TextView
android:id="@+id/voteCountTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="0 vote"
android:textColor="@color/text_secondary"
android:textSize="11sp"
android:visibility="gone"/>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:clickable="true"
android:focusable="true"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="12dp"
app:cardElevation="2dp"
app:strokeColor="@color/primary"
app:strokeWidth="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical">
<!-- Player Avatar -->
<TextView
android:id="@+id/playerAvatarTextView"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_card"
android:gravity="center"
android:text="A"
android:textColor="@color/primary"
android:textSize="24sp"
android:textStyle="bold" />
<!-- Player Name -->
<TextView
android:id="@+id/playerNameTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:text="Player Name"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
<!-- Vote Indicator -->
<TextView
android:id="@+id/votesTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:paddingStart="12dp"
android:paddingTop="6dp"
android:paddingEnd="12dp"
android:paddingBottom="6dp"
android:text="0 votes"
android:textColor="@color/accent"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="12dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical">
<!-- Player Avatar -->
<TextView
android:id="@+id/playerAvatarTextView"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_card"
android:gravity="center"
android:text="A"
android:textColor="@color/primary"
android:textSize="24sp"
android:textStyle="bold" />
<!-- Player Info -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/playerNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Player Name"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/playerRoleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="Undercover"
android:textColor="@color/error"
android:textSize="14sp"
android:textStyle="bold"
tools:textColor="@color/error" />
</LinearLayout>
<!-- Status Badge -->
<TextView
android:id="@+id/playerStatusBadge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:paddingStart="8dp"
android:paddingTop="4dp"
android:paddingEnd="8dp"
android:paddingBottom="4dp"
android:text="Éliminé"
android:textColor="@color/error"
android:textSize="12sp"
android:textStyle="bold"
tools:text="Éliminé" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
+2 -2
View File
@@ -46,7 +46,7 @@
<color name="overlay_light">#80FFFFFF</color>
<!-- Pour compatibilité -->
<color name="white">#FBF9FF</color>
<color name="black">#000807</color>
<color name="white">#FFFFFF</color>
<color name="black">#FBF9FF</color>
</resources>
+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Mode SOMBRE - Corrections pour éviter texte blanc sur fond blanc -->
<!-- Correction pour le bouton secondaire - s'assurer que le texte est visible -->
<style name="BoideloButton.Secondary">
<item name="backgroundTint">@color/surface_variant</item>
<item name="android:textColor">@color/text_on_primary</item>
<item name="rippleColor">@color/primary_dark</item>
</style>
<!-- Correction pour les chips - améliorer le contraste -->
<style name="BoideloChip" parent="Widget.Material3.Chip.Suggestion">
<item name="chipBackgroundColor">@color/primary_container</item>
<item name="chipStrokeColor">@color/primary_dark</item>
<item name="android:textColor">@color/on_primary_container</item>
</style>
<!-- Correction pour la toolbar - s'assurer d'un bon contraste -->
<style name="BoideloToolbar" parent="Widget.Material3.Toolbar">
<item name="android:background">@color/surface</item>
<item name="titleTextColor">@color/text_primary</item>
<item name="android:elevation">4dp</item>
</style>
</resources>
+10
View File
@@ -48,4 +48,14 @@
<!-- Pour compatibilité -->
<color name="white">#FFFFFF</color>
<color name="black">#000807</color>
<!-- Papelito (Undercover) - Couleurs des rôles -->
<color name="civil_bg">#4CAF50</color>
<color name="civil_bg_light">#C8E6C9</color>
<color name="undercover_bg">#F44336</color>
<color name="undercover_bg_light">#FFCDD2</color>
<color name="mr_white_bg">#9E9E9E</color>
<color name="mr_white_bg_light">#E0E0E0</color>
<color name="success_green">#4CAF50</color>
<color name="error_red">#F44336</color>
</resources>