9 Commits

Author SHA1 Message Date
f1a17d8f0d Refactor: Premier lancement et effets sonores
- Affichage de la boite de dialog 'Comment jouer ?' au premier lancement de l'application.
    - Modification des effets sonores.
2025-04-11 11:44:05 +02:00
1842213cac Refactor: Clean codebase, add MP features, improve notifications & robustness
This commit incorporates significant improvements and cleaning across the Best 2048 application.

**Code Cleaning & Refactoring:**
- Removed comments, logs (Log.*, System.out), and unused imports/variables/methods from all core Java files:
    - MainActivity, Game, GameStats, MultiplayerActivity, NotificationHelper,
      OnSwipeTouchListener, ApiClient, ApiService, data classes.
- Removed NotificationService.java as it's replaced by WorkManager.

**Notifications:**
- Replaced the unreliable Handler-based NotificationService with a robust WorkManager implementation (NotificationWorker.java).
- MainActivity now schedules/cancels periodic work for notifications correctly based on user preference and permissions.
- Removed the <service> declaration for NotificationService from AndroidManifest.xml.
- Requires 'androidx.work:work-runtime' dependency in build.gradle.

**Multiplayer Enhancements:**
- **Stats Integration:**
    - Added recordMultiplayerWin/Loss/Draw methods to GameStats.
    - MultiplayerActivity now correctly calculates game duration and updates GameStats upon game completion.
    - Added saveStats() call in MultiplayerActivity.onPause to persist MP stats.
- **Animations:**
    - Implemented tile appearance and merge animations in MultiplayerActivity by comparing previous and current board states received via WebSocket.
- **Robustness:**
    - Added automatic WebSocket reconnection attempts with UI feedback in MultiplayerActivity.
    - Implemented finer-grained handling of server error messages (critical vs. info).
    - Added UI feedback for opponent disconnections (inferred from final game state).
    - Disabled swipe input during inappropriate times (opponent's turn, disconnected, game over).

**Layout Corrections:**
- Fixed duplicate ID 'average_time_per_game_label' in stats_layout.xml (renamed the multiplayer one to 'average_time_per_game_multi_label').
- Removed the unused 'perfect_game_label' TextView from stats_layout.xml.
- Updated MainActivity's updateStatisticsTextViews to use the corrected ID.

**Localization:**
- Translated all user-facing strings in strings.xml from French to English.
2025-04-06 14:50:40 +02:00
1dc439c186 feat: Implémentation connexion REST initiale pour le multijoueur
Implémente les modifications nécessaires côté client Android pour établir une connexion de base avec l'API REST du serveur multijoueur.

Changements principaux :
- Ajout de la permission INTERNET dans AndroidManifest.xml.
- Correction de l'URL de base (BASE_URL) dans ApiClient pour utiliser HTTPS.
- Déclaration de MultiplayerActivity dans AndroidManifest.xml.
- Correction de l'appel API createOrJoinGame (ApiService et MultiplayerActivity) pour envoyer le playerId dans le corps de la requête (@Body) au lieu d'un paramètre de requête (@Query).
- Utilisation d'un UUID aléatoire temporaire comme playerId côté client.
- Mise à jour de GameStateResponse.java pour inclure targetScore et corriger la logique getMyScore/getOpponentScore.
2025-04-05 10:45:09 +02:00
bee192e335 Refactor: Nettoyage code, documentation et raffinements finaux
- **Cleanup:** Suppression logs de débogage superflus, commentaires obsolètes. Standardisation logging.
- **Documentation:** Ajout/Amélioration significative des commentaires JavaDoc (Game, GameStats, MainActivity, etc.).
- **Game Logic:** Refactoring des méthodes pushX en processMove. Ajout validation et helpers (isIndexValid). Amélioration robustesse (deserialize, win/loss checks). Classe rendue totalement indépendante du contexte/prefs.
- **Stats:** Suppression stat 'perfectGames'. Amélioration formatage temps/moyennes.
- **Notifications:** Logique de cooldown/intervalle affinée dans NotificationService. Utilisation centralisée de NotificationHelper. Gestion permission robuste.
- **MainActivity:** Refactoring affichage plateau (syncBoardView avec fonds + tuiles). Animation simplifiée (apparition/fusion seulement). Gestion améliorée des états de jeu (PLAYING, WON, GAME_OVER). Logique onResume/onPause/load/save affinée. Placeholders pour Menu/Multi clarifiés.
- **UI:** Layouts de dialogues standardisés avec LinearLayout. Permissions AndroidManifest nettoyées. Ajustements mineurs (marges, couleurs, strings, style police).
2025-04-04 18:40:08 +02:00
bf914f291d Feat: Implémentation Notifications Périodiques via Service
- Ajout permission POST_NOTIFICATIONS et déclaration NotificationService dans Manifest.
- Création NotificationHelper pour centraliser création canal et affichage notifications.
- Création NotificationService utilisant Handler/postDelayed pour simuler l'envoi
  périodique de rappels (HighScore, Inactivité) - NOTE: WorkManager recommandé en prod.
- Modification MainActivity:
  - Crée le canal via NotificationHelper.
  - Gère la demande de permission POST_NOTIFICATIONS (Android 13+) via ActivityResultLauncher,
    déclenchée par le switch dans les paramètres.
  - Démarre/Arrête NotificationService en fonction de l'état du switch Notifications.
  - Sauvegarde le timestamp de dernière partie jouée dans onPause.
  - Utilise NotificationHelper pour afficher la notification d'accomplissement (2048).
  - Suppression des méthodes/boutons de test de notification.
2025-04-04 15:58:02 +02:00
7dc7360e14 Feat: Implémentation de base des notifications
- Ajout permission POST_NOTIFICATIONS dans AndroidManifest.xml (Android 13+).
- Création d'un canal de notification ('BEST_2048_CHANNEL') dans MainActivity.onCreate.
- Ajout d'une icône de notification simple (ic_stat_notification_2048.xml).
- Ajout de strings pour les notifications et la gestion des permissions.
- Modification de MainActivity :
  - Implémentation de la demande de permission POST_NOTIFICATIONS via ActivityResultLauncher,
    déclenchée par l'activation du switch dans les paramètres.
  - Ajout méthode utilitaire 'showNotification' utilisant NotificationCompat.Builder.
  - Ajout méthodes 'showAchievementNotification', 'showHighScoreNotification' (test), 'showInactivityNotification' (test).
  - Déclenchement de 'showAchievementNotification' dans handleSwipe lors de la première victoire.
  - Activation du switch 'Notifications' dans le dialogue des paramètres et gestion de son état
    via SharedPreferences et demande de permission.
  - Ajout (commenté/optionnel) boutons de test pour notifications HighScore/Inactivité.
- NOTE: Notifications périodiques (HighScore, Inactivité) non planifiées, déclenchées
  manuellement pour test dans ce commit. Nécessite WorkManager/AlarmManager pour implémentation réelle.
2025-04-04 15:20:14 +02:00
73ab81e208 Feat: Stats, Refactor, Permissions
- AndroidManifest: Ajout permissions (Network, BT, Location).
- Game.java: Refonte majeure (renommage, contexte, états win/loss,
  logique SharedPreferences implémentée, probabilités addNewTile modifiées,
  méthodes check win/loss, pushX retourne boolean, JavaDoc).
- MainActivity.java: Refonte majeure (gestion stats via ViewStub,
  champs/méthodes stats, dialogs win/loss, refactorisation onCreate,
  getters/setters, gestion cycle vie onPause/onResume, MAJ handleSwipe).
- OnSwipeTouchListener.java: Ajout annotations, JavaDoc.
- Layouts: Ajout stats_layout.xml, ajout ViewStub dans activity_main.xml.
- Ressources: Ajout/MAJ strings (stats), colors (thème, tuiles, stats),
  styles (stats, fullscreen), dimens, anim (durée), drawables (bouton multi, tile_background).
2025-04-04 12:06:08 +02:00
a5cf3509d8 Feat: Bloquage orientation et plein écran 2025-04-04 11:24:15 +02:00
0126838872 Création du projet sous Android Studio 2025-04-03 18:21:45 +02:00