204 líneas
5.2 KiB
Markdown
204 líneas
5.2 KiB
Markdown
# Features Documentation
|
|
|
|
## My ActivityPub Application Features
|
|
|
|
This document describes the key features of the My ActivityPub application.
|
|
|
|
## Core Features
|
|
|
|
### 1. Pull-to-Refresh Timeline
|
|
|
|
The application now supports pull-to-refresh functionality for both public and home timelines.
|
|
|
|
**How to use:**
|
|
- Swipe down from the top of the timeline to refresh
|
|
- A loading indicator will appear while fetching new posts
|
|
- Timeline will be updated with the latest posts from your instance
|
|
|
|
**Technical Details:**
|
|
- Implemented using `PullToRefreshBox` from Material 3
|
|
- Refreshes without clearing the current timeline on error
|
|
- Works for both Public Federated Timeline and Home Timeline
|
|
|
|
### 2. Automatic Timeline Updates
|
|
|
|
Timelines automatically check for new posts every 30 seconds and update seamlessly.
|
|
|
|
**Behavior:**
|
|
- Checks for new posts using the `since_id` parameter
|
|
- New posts are added to the top of the timeline
|
|
- Updates happen silently in the background
|
|
- No interruption to user scrolling or reading
|
|
- Auto-refresh starts automatically when switching timelines
|
|
|
|
**Technical Details:**
|
|
- Uses Kotlin Coroutines with a 30-second delay loop
|
|
- Implemented in `TimelineViewModel.startAutoRefresh()`
|
|
- Cancels previous auto-refresh job when switching timelines
|
|
- Silently fails on network errors to avoid interrupting user experience
|
|
|
|
### 3. Clickable Links and Hashtags
|
|
|
|
Post content now supports interactive links and hashtags.
|
|
|
|
**Supported Elements:**
|
|
- **HTTP/HTTPS URLs**: Click to open in external browser
|
|
- **Hashtags**: Styled with primary color and underline
|
|
- **HTML Content**: Properly parsed and displayed
|
|
|
|
**User Experience:**
|
|
- Links and hashtags are displayed in the primary theme color
|
|
- Underlined for easy identification
|
|
- Tap any link to open in default browser
|
|
- Hashtags are visually distinct
|
|
|
|
**Technical Details:**
|
|
- Uses `AnnotatedString` with `ClickableText`
|
|
- Regex patterns to identify URLs and hashtags
|
|
- HTML content is parsed using Android's `Html.fromHtml()`
|
|
- Link annotations for click handling
|
|
|
|
## Timeline Features
|
|
|
|
### Public Federated Timeline
|
|
- Shows posts from across the Fediverse
|
|
- Default view when not logged in
|
|
- Updates automatically every 30 seconds
|
|
- Pull-to-refresh support
|
|
|
|
### Home Timeline
|
|
- Shows posts from accounts you follow
|
|
- Requires authentication
|
|
- Updates automatically every 30 seconds
|
|
- Pull-to-refresh support
|
|
|
|
### Infinite Scrolling
|
|
- Load more posts by scrolling to bottom
|
|
- "Load more" button appears when reaching end
|
|
- Preserves scroll position when navigating
|
|
|
|
## Post Interaction Features
|
|
|
|
### Viewing Posts
|
|
- Click any post to see detailed view
|
|
- View all replies in thread
|
|
- See post statistics (replies, boosts, favorites)
|
|
|
|
### Interacting with Posts (Authenticated Users Only)
|
|
- **Reply**: Add your own reply to any post
|
|
- **Boost**: Repost to your timeline
|
|
- **Favorite**: Like a post
|
|
- Post visibility selection when replying
|
|
|
|
### Post Details
|
|
- Full post content with clickable links
|
|
- User information and avatar
|
|
- Media attachments display
|
|
- Interaction buttons
|
|
- Reply thread view
|
|
|
|
## Authentication Features
|
|
|
|
### OAuth Login Flow
|
|
1. Enter your Mastodon/ActivityPub instance URL
|
|
2. Register application with instance
|
|
3. Authorize in browser
|
|
4. Automatic token storage
|
|
5. Persistent login across app restarts
|
|
|
|
### Security
|
|
- Tokens stored securely using DataStore
|
|
- OAuth 2.0 standard implementation
|
|
- HTTPS required for all API calls
|
|
|
|
## Notifications
|
|
|
|
- View all your notifications
|
|
- Support for different notification types:
|
|
- Mentions
|
|
- Favorites
|
|
- Boosts
|
|
- Follows
|
|
- Replies
|
|
|
|
## User Interface
|
|
|
|
### Modern Material Design 3
|
|
- Dynamic color support (Android 12+)
|
|
- Dark mode support
|
|
- Edge-to-edge display
|
|
- Smooth animations
|
|
|
|
### Navigation
|
|
- Bottom navigation for timeline switching
|
|
- Top app bar with menu options
|
|
- Back button support for detail views
|
|
- Drawer for account management
|
|
|
|
### Responsive Design
|
|
- Optimized for different screen sizes
|
|
- Proper padding and spacing
|
|
- Touch-friendly button sizes
|
|
|
|
## Technical Architecture
|
|
|
|
### Layer Structure
|
|
1. **UI Layer**: Composable functions
|
|
2. **ViewModel Layer**: State management
|
|
3. **Repository Layer**: Data operations
|
|
4. **API Layer**: Network calls
|
|
|
|
### Key Technologies
|
|
- Kotlin
|
|
- Jetpack Compose
|
|
- Material 3
|
|
- Retrofit for API calls
|
|
- OkHttp for networking
|
|
- Coil for image loading
|
|
- DataStore for preferences
|
|
- Kotlin Coroutines for async operations
|
|
|
|
## Performance
|
|
|
|
### Optimizations
|
|
- Lazy loading of timeline
|
|
- Image caching with Coil
|
|
- Efficient state management
|
|
- Background refresh doesn't block UI
|
|
- Debounced auto-refresh
|
|
|
|
### Network Efficiency
|
|
- Pagination with max_id/since_id
|
|
- Only fetches new posts on auto-refresh
|
|
- Request timeouts to prevent hanging
|
|
- Retry logic for failed requests
|
|
|
|
## Future Enhancements
|
|
|
|
Potential features for future releases:
|
|
- Direct messages
|
|
- Search functionality
|
|
- Filter/mute options
|
|
- Multiple account support
|
|
- Offline mode with local caching
|
|
- Push notifications
|
|
- Media upload
|
|
- Custom emoji support
|
|
- Poll creation
|
|
- Scheduled posts
|
|
|
|
---
|
|
|
|
## Getting Started
|
|
|
|
1. Launch the app
|
|
2. Browse public timeline without login
|
|
3. Tap "Login" to connect your account
|
|
4. Enter your instance URL
|
|
5. Authorize in browser
|
|
6. Start posting and interacting!
|
|
|
|
## Support
|
|
|
|
For issues or feature requests, please check the repository's issue tracker.
|