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.
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.
- 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.
- 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.