How jcarolus/android-chess works
Chess for Android is a multi-mode chess application. The central workflow is selecting or starting a game, viewing and playing positions through the board UI, and using the native chess engine for legal moves and analysis. Major branches add online play, puzzles, local game and practice content, board setup, opening lookup, board sharing, and third-party engines. The tree and README establish these capabilities; sampled source confirms engine, import, ECO, Lichess service, and socket-sharing behavior, but does not expose all activity-to-subsystem wiring.
Main entry points: JNI.java Chess JNI · PlayActivity.java Game screen · HotspotBoardService.java Sharing service · OexEngine.java OEX engine
Components 29
Chess play
- Game selection
app/src/main/java/jwtc/android/chess/GamesListActivity.java - Game screen
app/src/main/java/jwtc/android/chess/play/PlayActivity.java - Board display
app/src/main/java/jwtc/android/chess/views/ChessBoardView.java - Game state API
app/src/main/java/jwtc/android/chess/services/GameApi.java
Games and learning
- Game database
app/src/main/java/jwtc/android/chess/helpers/MyPGNProvider.java - Content import
app/src/main/java/jwtc/android/chess/tools/ImportService.java - Practice mode
app/src/main/java/jwtc/android/chess/practice/PracticeActivity.java - Puzzle mode
app/src/main/java/jwtc/android/chess/puzzle/PuzzleActivity.java - Board setup
app/src/main/java/jwtc/android/chess/setup/SetupActivity.java - Opening explorer
app/src/main/java/jwtc/android/chess/services/EcoService.java
Online and sharing
- Lichess play
app/src/main/java/jwtc/android/chess/lichess/LichessGameActivity.java - Lichess session
app/src/main/java/jwtc/android/chess/lichess/LichessService.java - Lichess API
app/src/main/java/jwtc/android/chess/lichess/LichessApi.java - FICS client
app/src/main/java/jwtc/android/chess/ics/ICSClient.java - FICS server
app/src/main/java/jwtc/android/chess/ics/ICSServer.java - Board sharing
app/src/main/java/jwtc/android/chess/hotspotboard/HotspotBoardActivity.java - Sharing service
app/src/main/java/jwtc/android/chess/hotspotboard/HotspotBoardService.java - Socket transport
app/src/main/java/jwtc/android/chess/services/SocketConnectService.java
Engine and rules
- Native chess core
native/project/jni/ChessBoard.cpp - Chess JNI
app/src/main/java/jwtc/chess/JNI.java - Built-in engine
app/src/main/java/jwtc/android/chess/engine/LocalEngine.java - OEX engine
app/src/main/java/jwtc/android/chess/engine/OexEngine.java - OEX discovery
app/src/main/java/jwtc/android/chess/engine/oex/OexEngineResolver.java
App experience
- Accessibility settings
app/src/main/java/jwtc/android/chess/activities/AccessibilityPreferences.java
Other components
- Player
- Lichess
- FICS
- Third-party engine
- Chromecast device
Connections 30
- Player → Game selection: selects game
- Game selection → Game screen: starts play
- Game screen → Board display: renders board
- Game screen → Game state API: uses game state
- Game state API → Chess JNI: accesses rules
- Chess JNI → Native chess core: calls native core
- Built-in engine → Chess JNI: searches position
- Game screen → Built-in engine: requests analysis
- Player → Content import: imports content
- Content import → Game database: imports game data
- Player → Practice mode: opens practice
- Player → Puzzle mode: solves puzzles
- Player → Board setup: sets position
- Player → Opening explorer: explores openings
- Player → Lichess play: plays online
- Lichess play → Lichess session: shares session
- Lichess session → Lichess API: owns API
- Lichess API → Lichess: connects to
- Player → FICS client: plays online
- FICS client → FICS server: communicates with
- Player → Board sharing: shares board
- Board sharing → Sharing service: controls service
- Sharing service → Socket transport: uses sockets
- Sharing service → Chess JNI: reads position
- Socket transport → Chromecast device: sends board data
- Player → OEX engine: chooses engine
- OEX engine → OEX discovery: resolves executable
- OEX discovery → Third-party engine: discovers engine
- OEX engine → Chess JNI: maps engine moves
- Player → Accessibility settings: configures access