-
-
Notifications
You must be signed in to change notification settings - Fork 195
Faditor mini ARCHITECTURE
Faded edited this page Feb 10, 2026
·
2 revisions
-
FaditorEditorActivity.java — Main editor activity (full-screen)
📍app/src/main/java/com/fadcam/ui/faditor/FaditorEditorActivity.java -
FaditorMiniFragment.java — Tab entry point (video picker)
📍app/src/main/java/com/fadcam/ui/FaditorMiniFragment.java
-
Clip.java — Single video segment
📍app/src/main/java/com/fadcam/ui/faditor/model/Clip.java -
Timeline.java — Ordered list of clips
📍app/src/main/java/com/fadcam/ui/faditor/model/Timeline.java -
FaditorProject.java — Project wrapper
📍app/src/main/java/com/fadcam/ui/faditor/model/FaditorProject.java -
ExportSettings.java — Export configuration
📍app/src/main/java/com/fadcam/ui/faditor/model/ExportSettings.java
-
FaditorPlayerManager.java — ExoPlayer lifecycle & controls
📍app/src/main/java/com/fadcam/ui/faditor/player/FaditorPlayerManager.java -
TimelineView.java — Custom timeline widget with trim handles
📍app/src/main/java/com/fadcam/ui/faditor/timeline/TimelineView.java
-
ExportManager.java — Media3 Transformer orchestration
📍app/src/main/java/com/fadcam/ui/faditor/export/ExportManager.java
-
ProjectStorage.java — JSON persistence (Gson + auto-save)
📍app/src/main/java/com/fadcam/ui/faditor/project/ProjectStorage.java -
UndoManager.java — Undo/redo state management
📍app/src/main/java/com/fadcam/ui/faditor/undo/UndoManager.java
-
crop/ — Crop transformation logic
📍app/src/main/java/com/fadcam/ui/faditor/crop/ -
util/ — Helpers (time formatting, etc.)
📍app/src/main/java/com/fadcam/ui/faditor/util/
User Flow:
FaditorMiniFragment (tab)
↓ [video picker]
FaditorEditorActivity (full-screen)
├─ FaditorPlayerManager (ExoPlayer playback)
├─ TimelineView (custom timeline UI)
├─ ProjectStorage (JSON persistence)
└─ ExportManager (Media3 Transformer)
↓ [export done]
FaditorMiniFragment (back to tab with exported file)
| Component | Technology | Why |
|---|---|---|
| Playback | Media3 ExoPlayer | Battle-tested, hardware acceleration, effects-capable |
| Export | Media3 Transformer | Frame-accurate lossless trim, unified pipeline |
| Trim Mode | EditList (near-lossless) | Precise frame-level accuracy without re-encoding entire file |
| Persistence | JSON (Gson) + auto-save | Simple, scalable, 3-second debounce |
| Navigation | Separate Activity | Clean lifecycle, SurfaceView z-order isolation |
FaditorProject
├── id: UUID
├── name: String
├── timeline: Timeline
│ └── clips: List<Clip>
│ ├── sourceUri: Uri
│ ├── inPointMs: long
│ ├── outPointMs: long
│ ├── speedMultiplier: float
│ └── effects: List<Effect>
└── exportSettings: ExportSettings
├── resolution, quality, format
Supports: Single trim → multi-clip → effects → audio mixing (future phases)
-
Debounce Delay: 3 seconds (configurable via
AUTO_SAVE_DELAY_MS) - Trigger: Every edit (trim, rotate, flip, crop, speed, audio)
-
Files Saved Together:
files/faditor/projects/{projectId}/project.jsonfiles/faditor/projects/{projectId}/undo_history.json
-
Implementation: Handler-based debounce in
FaditorEditorActivityHandler.postDelayed(autoSaveRunnable, AUTO_SAVE_DELAY_MS) // Resets timer on each edit (debounce)
- Full details: See the main repo file
FADITOR_MINI_PLAN.mdfor complete tech stack and phase roadmap.