How kitsumed/shizucallrecorder works
ShizuCallRecorder is an Android call-recording app that uses Shizuku to obtain shell-level access for audio capture. Its main workflow detects a call, evaluates automatic-recording rules, starts a foreground recording session, and delegates capture and encoding to a shell-side engine. The README also documents codec choices, split uplink/downlink audio, call exclusions, and Shizuku security controls. Several subsystem paths are included from the repository tree and README, but their internal links are omitted where the sampled source does not establish them.
Main entry points: RecordingForegroundService.kt Recording service · ShellRecordingEngine.kt Recording engine · RecordingDecisionEngine.kt Recording rules · EnrichedCallData.kt Call metadata
Components 22
App and settings
- App UI
app/src/main/java/com/kitsumed/shizucallrecorder/AppNavigationScreen.kt - Preferences
app/src/main/java/com/kitsumed/shizucallrecorder/data/AppPreferences.kt - Call metadata
app/src/main/java/com/kitsumed/shizucallrecorder/data/call/EnrichedCallData.kt - Number parsing
app/src/main/java/com/kitsumed/shizucallrecorder/utils/PhoneNumberManager.kt
Call detection
- Detection mode
app/src/main/java/com/kitsumed/shizucallrecorder/services/callDetection/CallDetectionOrchestrator.kt - Telecom calls
app/src/main/java/com/kitsumed/shizucallrecorder/services/callDetection/incall/InCallService.kt - Phone state
app/src/main/java/com/kitsumed/shizucallrecorder/services/callDetection/phoneState/PhoneStateSessionManager.kt - Recording rules
app/src/main/java/com/kitsumed/shizucallrecorder/services/RecordingDecisionEngine.kt
Recording control
- Recording service
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingForegroundService.kt - Plan resolution
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingPlanResolver.kt - Session state
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingServiceState.kt - Recording session
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingSession.kt - Notifications
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingNotificationHelper.kt
Shell audio engine
- Shell service
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/ShellService.kt - Recording engine
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/ShellRecordingEngine.kt - Audio capture
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/capture/IAudioCapture.kt - PCM processing
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/processing/PcmProcessor.kt - Audio encoding
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/encoding/AudioEncoder.kt
Android integration
- Shizuku binding
app/src/main/java/com/kitsumed/shizucallrecorder/integrations/shizuku/ShizukuConnectionManager.kt - Recording files
app/src/main/java/com/kitsumed/shizucallrecorder/system/storage/SafHelper.kt - Permission checks
app/src/main/java/com/kitsumed/shizucallrecorder/system/permissions/PermissionChecks.kt
Other components
- Phone events
Connections 20
- Phone events → Telecom calls: reports calls
app/src/main/java/com/kitsumed/shizucallrecorder/services/callDetection/incall/InCallService.kt - Telecom calls → Recording rules: evaluates call
app/src/main/java/com/kitsumed/shizucallrecorder/services/callDetection/incall/InCallService.kt - Phone state → Recording rules: evaluates state
app/src/main/java/com/kitsumed/shizucallrecorder/services/callDetection/phoneState/PhoneStateSessionManager.kt - Recording rules → Recording service: starts service
app/src/main/java/com/kitsumed/shizucallrecorder/services/RecordingDecisionEngine.kt - Recording rules → Preferences: reads rules
app/src/main/java/com/kitsumed/shizucallrecorder/services/RecordingDecisionEngine.kt - Recording service → Plan resolution: resolves plan
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingForegroundService.kt - Recording service → Shizuku binding: starts server
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingForegroundService.kt - Shizuku binding → Shell service: binds service
app/src/main/java/com/kitsumed/shizucallrecorder/integrations/shizuku/ShizukuConnectionManager.kt - Recording service → Session state: updates state
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingForegroundService.kt - Recording service → Notifications: manages notices
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingForegroundService.kt - Shell service → Recording engine: starts engine
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/ShellService.kt - Recording engine → Audio capture: reads audio
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/ShellRecordingEngine.kt - Recording engine → PCM processing: processes PCM
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/ShellRecordingEngine.kt - Recording engine → Audio encoding: encodes audio
app/src/main/java/com/kitsumed/shizucallrecorder/services/shell/recording/ShellRecordingEngine.kt - App UI → Preferences: configures options
- Recording engine → Recording files: writes recordings
- Recording rules → Call metadata: produces metadata
app/src/main/java/com/kitsumed/shizucallrecorder/services/RecordingDecisionEngine.kt - Call metadata → Number parsing: normalizes number
app/src/main/java/com/kitsumed/shizucallrecorder/data/call/EnrichedCallData.kt - Recording service → Recording session: owns session
app/src/main/java/com/kitsumed/shizucallrecorder/services/recording/RecordingForegroundService.kt - Recording service → Permission checks: checks access