feat: overhaul Telegram dashboard and Device Capabilities UI with exp…#1129
feat: overhaul Telegram dashboard and Device Capabilities UI with exp…#1129theovilardo merged 2 commits intomasterfrom
Conversation
…ressive design
- **Telegram Dashboard**:
- Completely redesign the dashboard with a collapsible top bar and a staggered list entry animation.
- Implement a bottom sheet for channel actions (Sync, Remove) to replace inline buttons.
- Enhance channel items with rich metadata pills (song count, last sync time), smooth corner shapes, and sync status indicators.
- Improve empty state with a centered, expressive layout and integrated "Add Channel" action.
- **Device Capabilities**:
- Modernize the UI using a card-based layout with gradient backgrounds and smooth corners.
- Refactor device information into hierarchical hero tiles and stats for better readability.
- Implement a segmented list for audio codecs, clearly highlighting hardware-accelerated components.
- **Streaming Providers**:
- Update `StreamingProviderSheet` with brand-specific icons for Telegram and Netease Cloud Music.
- Add a placeholder icon and updated styling for the Google Drive provider.
- **Resources**:
- Add vector assets for Netease Cloud Music and Google Drive logos.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ff4f465323
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ChannelActionCard( | ||
| title = "Remove channel", | ||
| subtitle = "Stop syncing and remove cached songs", | ||
| icon = Icons.Rounded.Delete, | ||
| onClick = onDelete, |
There was a problem hiding this comment.
Disable remove action while channel sync is in progress
The delete action stays enabled even when isSyncing is true, unlike the sync action. In that state, removing a channel can race with refreshChannel's completion path (which saves an updated channel entity), so a channel the user just removed can reappear after the sync finishes. This is a user-visible data consistency issue; the remove action should be gated while sync is active (or sync must be canceled before delete).
Useful? React with 👍 / 👎.
| .clip(listShape), | ||
| verticalArrangement = Arrangement.spacedBy(4.dp) | ||
| ) { | ||
| codecs.forEachIndexed { index, codec -> |
There was a problem hiding this comment.
Keep codec rendering lazy to avoid eager composition
This switches codec rendering from lazy items(...) to forEachIndexed inside a Column, meaning every codec card is composed and measured at once as a single LazyColumn item. On devices with large codec lists, this removes viewport virtualization and can noticeably degrade initial render and scroll performance compared with the previous implementation.
Useful? React with 👍 / 👎.
…ressive design
StreamingProviderSheetwith brand-specific icons for Telegram and Netease Cloud Music.