6 Commits

Author SHA1 Message Date
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
be983a1107 feat: Intégration WebSocket pour l'interaction multijoueur
Remplace le polling REST inefficace et les tentatives d'envoi de mouvements via REST par une communication WebSocket complète dans MultiplayerActivity.

Modifications clés :
- Ajout de la dépendance OkHttp pour le support WebSocket (action manuelle).
- Utilisation de OkHttp pour établir et gérer la connexion WebSocket (, ).
- Implémentation d'un  () pour gérer les événements :
    - Envoi du message 'register' à l'ouverture ().
    - Réception et traitement des messages 'gameStateUpdate', 'error', 'info' ().
    - Gestion de la fermeture et des erreurs (, , ).
- Mise à jour de l'interface utilisateur (, ) en temps réel basée sur les messages  reçus (en utilisant ).
- Modification de  pour créer et envoyer les messages 'move' via WebSocket ().
- Suppression complète du mécanisme de polling basé sur .
- Gestion du cycle de vie de la connexion WebSocket dans , , .
- Ajout de classes de données internes pour parser/créer les messages WebSocket JSON (, , , etc.).
2025-04-05 11:16:48 +02:00
1977d2de3f Feat: Structure de base pour le mode Multijoueur (Client)
- Ajout dépendances Retrofit, OkHttp logging, Gson dans build.gradle.
- Création des modèles de données (POJO) pour l'API: GameInfo, GameStateResponse, MoveRequest.
- Création de l'interface Retrofit 'ApiService' définissant les endpoints (create/join, get state, make move).
- Création du client 'ApiClient' pour configurer et fournir l'instance Retrofit.
- Création de 'MultiplayerActivity' et 'activity_multiplayer.xml' pour l'écran de jeu multi.
- Implémentation de base dans MultiplayerActivity:
  - Initialisation (findViews, ApiService).
  - Tentative de création/rejoindre une partie via API.
  - Récupération de l'état initial du jeu via API (fetchGameState).
  - Mise à jour basique de l'UI multijoueur (scores, tour, plateau via syncBoardViewMulti).
  - Gestion basique des swipes (handleMultiplayerSwipe) : vérification du tour, envoi du mouvement via API.
  - Implémentation d'un polling simple et inefficace pour récupérer les coups adverses.
  - Gestion basique des erreurs réseau et indicateur de chargement.
- Modification de MainActivity pour lancer MultiplayerActivity via le bouton 'Multijoueur'.
2025-04-04 18:54:51 +02:00
a5cf3509d8 Feat: Bloquage orientation et plein écran 2025-04-04 11:24:15 +02:00
84ca7f9fc3 Feat: Liaison UI-Logique et gestion des swipes
- Modification de MainActivity:
  - Récupération des vues (GridLayout, TextViews).
  - Implémentation de initGameBoardLayout et updateUI pour dessiner la grille
    en fonction de l'état de Game.
  - Création et attachement de OnSwipeTouchListener pour gérer les swipes.
- Modification de Game:
  - Ajout des getters: getGameBoard, getScore, getHighScore (placeholder).
- Création de OnSwipeTouchListener.java pour la détection des gestes.
2025-04-03 19:11:52 +02:00
0126838872 Création du projet sous Android Studio 2025-04-03 18:21:45 +02:00