docs: add notedeck_chrome docs

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2025-04-21 13:31:47 -07:00
parent f7e47dedee
commit 405b62c15a
2 changed files with 180 additions and 0 deletions

View File

@@ -0,0 +1,136 @@
# Developer Guide for Notedeck Chrome
This guide covers the technical details of the Notedeck Chrome component, which serves as the container and navigation framework for the Notedeck Nostr browser.
## Project Structure
```
notedeck_chrome
├── Cargo.toml - Project manifest and dependencies
├── android/ - Android-specific code and configuration
│ └── ...
└── src/
├── notedeck.rs - Main application entry point
├── lib.rs - Library exports
├── theme.rs - Theme definitions and customization
├── preview.rs - UI component preview system
├── chrome.rs - Core Chrome UI implementation
├── fonts.rs - Font loading and configuration
├── app.rs - Application management
├── android.rs - Android-specific code
└── setup.rs - Application setup and configuration
```
## Key Components
### Chrome
The `Chrome` struct (`src/chrome.rs`) is the main container that:
- Maintains a list of applications
- Renders the sidebar
- Handles application switching
- Processes UI actions
### NotedeckApp
The `NotedeckApp` enum (`src/app.rs`) represents different applications that can be managed by the Chrome:
- `Columns` - The main Damus columns interface
- `Dave` - The Dave application
- `Other` - Generic container for other implementations of the `App` trait
### Setup
The `setup.rs` file handles initialization of:
- Font loading
- Theme setup
- Window configuration
- App icons
## Architecture Overview
Notedeck Chrome follows a container-based architecture:
1. The `Chrome` struct maintains a vector of applications
2. It controls which application is active via an index
3. The sidebar is rendered with buttons for each application
4. When an application is selected, it's updated within the container
## Android Support
Android integration relies on:
- Native Android UI integration via `GameActivity`
- Custom keyboard height detection for improved mobile UX
- Configuration via external JSON files
### Android Keyboard Handling
The Android integration includes custom Java code to handle keyboard visibility changes:
- `KeyboardHeightProvider` - Detects keyboard height changes
- `KeyboardHeightObserver` - Interface for keyboard events
- `MainActivity` - Main Android activity with JNI integration
## Styling and Theming
The theme system supports:
- Light and dark mode
- OLED-optimized dark mode for mobile
- Customizable text styles
- Font loading with multiple typefaces
## Building and Running
### Desktop
```bash
# Run in debug mode
cargo run -- --debug
# Run in release mode
cargo run --release
```
## Testing
The project includes tests for:
- Database path configuration
- Command-line argument parsing
- Column initialization
Run tests with:
```bash
cargo test
```
## Configuration and Data Paths
- Desktop: Uses the platform-specific data location or current directory
- Android: Uses the Android app's internal storage
- Custom paths can be specified via command-line arguments
## Advanced Debugging
- Enable the `debug-widget-callstack` feature to debug UI hierarchy
- Enable the `debug-interactive-widgets` feature to highlight interactive areas
- Android logging uses `tracing-logcat` for detailed diagnostics
## Code Workflow
1. `notedeck.rs` is the entry point, which initializes `Notedeck`
2. `setup.rs` configures the application environment
3. `Chrome` is created and populated with applications
4. The main UI loop renders the sidebar and active application
## Key Files for Modification
- `chrome.rs` - To modify the sidebar or app container behavior
- `theme.rs` - To update theming and colors
- `setup.rs` - To change startup configuration
- `android.rs` - For Android-specific changes
## Adding a New Application
1. Implement the `notedeck::App` trait for your application
2. Add a new variant to the `NotedeckApp` enum if needed
3. Update the `Chrome::topdown_sidebar` method to add a button for your app
4. Add your app to the `Chrome` instance in `notedeck.rs`

View File

@@ -0,0 +1,44 @@
# Notedeck Chrome
Notedeck Chrome is the UI framework and container for the Notedeck Nostr browser. It manages multiple applications within a single cohesive interface, providing a consistent navigation experience through a persistent sidebar.
## Overview
Notedeck Chrome acts as the container for various applications within the Notedeck ecosystem, primarily:
- **Columns** - The main Nostr columns interface for viewing timelines and interactions
- **Dave** - An ai assistant
- **Other** - Anything else *tbd*
The Chrome component provides:
- A consistent, unified sidebar for navigation between applications
- Theme management (light/dark mode support)
- Profile picture and account management
- Settings access
- Wallet integration
## Features
- **Application Switching**: Switch between Damus columns view and Dave seamlessly
- **Theme Support**: Toggle between light and dark modes
- **Profile Management**: Quick access to account settings
- **Responsive Design**: Compatible with desktop and mobile interfaces
- **Android Support**: Native support for Android devices
## Development Status
Notedeck is currently in **ALPHA**. Expect bugs and please report any issues you encounter.
## Building from Source
For build instructions, see the [DEVELOPER.md](DEVELOPER.md) file.
## License
Licensed under GPLv3 - see the [Cargo.toml](Cargo.toml) file for details.
## Authors
- William Casarin <jb55@jb55.com>
- kernelkind <kernelkind@gmail.com>