From b44c96f220ac11497108860a5740223d6cc9f112 Mon Sep 17 00:00:00 2001 From: Aarav Garg Date: Tue, 16 Dec 2025 02:45:43 +0800 Subject: [PATCH] fixes --- .../conversations/conversations_page.dart | 12 ++-- .../widgets/conversation_list_item.dart | 27 ++++++- .../conversations/widgets/search_widget.dart | 70 ++----------------- app/lib/pages/home/page.dart | 28 ++++++++ .../home/widgets/battery_info_widget.dart | 55 +++++++++------ 5 files changed, 98 insertions(+), 94 deletions(-) diff --git a/app/lib/pages/conversations/conversations_page.dart b/app/lib/pages/conversations/conversations_page.dart index fbe58823a5c..8e3cef7f878 100644 --- a/app/lib/pages/conversations/conversations_page.dart +++ b/app/lib/pages/conversations/conversations_page.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:omi/backend/schema/conversation.dart'; -import 'package:omi/pages/capture/widgets/limitless_sync_widget.dart'; import 'package:omi/pages/capture/widgets/widgets.dart'; import 'package:omi/pages/conversations/widgets/processing_capture.dart'; import 'package:omi/pages/conversations/widgets/search_result_header_widget.dart'; @@ -168,7 +167,7 @@ class _ConversationsPageState extends State with AutomaticKee children: [ SizedBox(height: 12), // above search widget SearchWidget(), - SizedBox(height: 0), //below search widget + SizedBox(height: 12), //below search widget ], ), ); @@ -176,8 +175,10 @@ class _ConversationsPageState extends State with AutomaticKee ), const SliverToBoxAdapter(child: SearchResultHeaderWidget()), getProcessingConversationsWidget(convoProvider.processingConversations), - if (convoProvider.groupedConversations.isEmpty && !convoProvider.isLoadingConversations && !convoProvider.isFetchingConversations) - const SliverToBoxAdapter( + if (convoProvider.groupedConversations.isEmpty && + !convoProvider.isLoadingConversations && + !convoProvider.isFetchingConversations) + SliverToBoxAdapter( child: Center( child: Padding( padding: const EdgeInsets.only(top: 32.0), @@ -187,7 +188,8 @@ class _ConversationsPageState extends State with AutomaticKee ), ), ) - else if (convoProvider.groupedConversations.isEmpty && (convoProvider.isLoadingConversations || convoProvider.isFetchingConversations)) + else if (convoProvider.groupedConversations.isEmpty && + (convoProvider.isLoadingConversations || convoProvider.isFetchingConversations)) _buildLoadingShimmer() else SliverList( diff --git a/app/lib/pages/conversations/widgets/conversation_list_item.dart b/app/lib/pages/conversations/widgets/conversation_list_item.dart index bb3917fc6ff..f6ba2870885 100644 --- a/app/lib/pages/conversations/widgets/conversation_list_item.dart +++ b/app/lib/pages/conversations/widgets/conversation_list_item.dart @@ -225,9 +225,22 @@ class _ConversationListItemState extends State { const SizedBox(height: 8), // Duration and time below title (or New status) isNew - ? const ConversationNewStatusIndicator(text: "New 🚀") + ? Row( + children: [ + const ConversationNewStatusIndicator(text: "New 🚀"), + const Spacer(), + if (widget.conversation.starred) + const Padding( + padding: EdgeInsets.only(right: 4.0), + child: FaIcon( + FontAwesomeIcons.solidStar, + size: 12, + color: Colors.amber, + ), + ), + ], + ) : Row( - mainAxisSize: MainAxisSize.min, children: [ Text( dateTimeFormat( @@ -248,6 +261,16 @@ class _ConversationListItemState extends State { maxLines: 1, ), ], + const Spacer(), + if (widget.conversation.starred) + const Padding( + padding: EdgeInsets.only(right: 4.0), + child: FaIcon( + FontAwesomeIcons.solidStar, + size: 12, + color: Colors.amber, + ), + ), ], ), ], diff --git a/app/lib/pages/conversations/widgets/search_widget.dart b/app/lib/pages/conversations/widgets/search_widget.dart index 4abed494a4b..6e8c8eeaca0 100644 --- a/app/lib/pages/conversations/widgets/search_widget.dart +++ b/app/lib/pages/conversations/widgets/search_widget.dart @@ -95,13 +95,16 @@ class _SearchWidgetState extends State { filled: true, fillColor: const Color(0xFF1F1F25), border: OutlineInputBorder( - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(24), + borderSide: BorderSide.none, ), focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(24), + borderSide: BorderSide.none, ), enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(24), + borderSide: BorderSide.none, ), prefixIcon: const Icon( Icons.search, @@ -130,67 +133,6 @@ class _SearchWidgetState extends State { style: const TextStyle(color: Colors.white), ), ), - const SizedBox( - width: 8, - ), - // Calendar button - Consumer( - builder: (BuildContext context, ConversationProvider convoProvider, Widget? child) { - return Container( - decoration: BoxDecoration( - color: - convoProvider.selectedDate != null ? Colors.deepPurple.withOpacity(0.5) : const Color(0xFF1F1F25), - borderRadius: const BorderRadius.all(Radius.circular(16)), - ), - child: IconButton( - onPressed: () async { - HapticFeedback.mediumImpact(); - if (convoProvider.selectedDate != null) { - // Clear date filter - await convoProvider.clearDateFilter(); - MixpanelManager().calendarFilterCleared(); - } else { - // Open date picker - await _selectDate(context); - } - }, - icon: Icon( - convoProvider.selectedDate != null ? FontAwesomeIcons.calendarDay : FontAwesomeIcons.calendarDays, - color: Colors.white, - size: 18, - ), - tooltip: convoProvider.selectedDate != null - ? 'Filtered by ${DateFormat('MMM d, yyyy').format(convoProvider.selectedDate!)} - Tap to clear' - : 'Filter by date', - ), - ); - }, - ), - const SizedBox(width: 8), - // Starred filter button - Consumer( - builder: (BuildContext context, ConversationProvider convoProvider, Widget? child) { - return Container( - decoration: BoxDecoration( - color: convoProvider.showStarredOnly ? Colors.amber.withValues(alpha: 0.5) : const Color(0xFF1F1F25), - borderRadius: const BorderRadius.all(Radius.circular(16)), - ), - child: IconButton( - onPressed: () { - HapticFeedback.mediumImpact(); - convoProvider.toggleStarredFilter(); - }, - icon: Icon( - convoProvider.showStarredOnly ? FontAwesomeIcons.solidStar : FontAwesomeIcons.star, - color: convoProvider.showStarredOnly ? Colors.amber : Colors.white, - size: 18, - ), - tooltip: - convoProvider.showStarredOnly ? 'Showing starred only - Tap to show all' : 'Filter by starred', - ), - ); - }, - ), ], ), ); diff --git a/app/lib/pages/home/page.dart b/app/lib/pages/home/page.dart index 54bc3ecc5fd..16339e34a78 100644 --- a/app/lib/pages/home/page.dart +++ b/app/lib/pages/home/page.dart @@ -652,6 +652,10 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker begin: Alignment.topLeft, end: Alignment.bottomRight, ), + border: Border.all( + color: Colors.white.withValues(alpha: 0.3), + width: 1, + ), boxShadow: [ BoxShadow( color: Colors.deepPurpleAccent.withValues(alpha: 0.3), @@ -934,6 +938,30 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker ), ), const SizedBox(width: 8), + // Star filter button + Container( + width: 36, + height: 36, + decoration: BoxDecoration( + color: convoProvider.showStarredOnly + ? Colors.amber.withValues(alpha: 0.5) + : const Color(0xFF1F1F25), + shape: BoxShape.circle, + ), + child: IconButton( + padding: EdgeInsets.zero, + icon: Icon( + convoProvider.showStarredOnly ? FontAwesomeIcons.solidStar : FontAwesomeIcons.star, + size: 16, + color: convoProvider.showStarredOnly ? Colors.amber : Colors.white70, + ), + onPressed: () { + HapticFeedback.mediumImpact(); + convoProvider.toggleStarredFilter(); + }, + ), + ), + const SizedBox(width: 8), ], ); }, diff --git a/app/lib/pages/home/widgets/battery_info_widget.dart b/app/lib/pages/home/widgets/battery_info_widget.dart index 14be61846a6..70c6f88c0bf 100644 --- a/app/lib/pages/home/widgets/battery_info_widget.dart +++ b/app/lib/pages/home/widgets/battery_info_widget.dart @@ -32,18 +32,19 @@ class BatteryInfoWidget extends StatelessWidget { MixpanelManager().batteryIndicatorClicked(); }, child: Container( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), + height: 36, + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 0), decoration: BoxDecoration( color: const Color(0xFF1F1F25), - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(18), ), child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( - width: 10, - height: 10, + width: 8, + height: 8, decoration: BoxDecoration( color: deviceProvider.batteryLevel > 75 ? const Color.fromARGB(255, 0, 255, 8) @@ -55,11 +56,11 @@ class BatteryInfoWidget extends StatelessWidget { shape: BoxShape.circle, ), ), - const SizedBox(width: 8.0), + const SizedBox(width: 6.0), // Add device icon - Container( - width: 20, - height: 20, + SizedBox( + width: 16, + height: 16, child: Image.asset( DeviceUtils.getDeviceImagePath( deviceType: deviceProvider.connectedDevice?.type, @@ -69,7 +70,7 @@ class BatteryInfoWidget extends StatelessWidget { fit: BoxFit.contain, ), ), - const SizedBox(width: 8.0), + const SizedBox(width: 6.0), Text( deviceProvider.batteryLevel > 0 ? '${deviceProvider.batteryLevel.toString()}%' : "", style: const TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold), @@ -84,19 +85,20 @@ class BatteryInfoWidget extends StatelessWidget { await routeToPage(context, const ConnectedDevice()); }, child: Container( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), + height: 36, + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 0), decoration: BoxDecoration( color: const Color(0xFF1F1F25), - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(18), ), child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ // Device icon with slash line - Container( - width: 20, - height: 20, + SizedBox( + width: 16, + height: 16, child: Stack( children: [ Image.asset( @@ -112,10 +114,10 @@ class BatteryInfoWidget extends StatelessWidget { ], ), ), - const SizedBox(width: 8.0), + const SizedBox(width: 6.0), Text( "Disconnected", - style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.white70), + style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.white70, fontSize: 12), ), ], ), @@ -132,28 +134,35 @@ class BatteryInfoWidget extends StatelessWidget { } }, child: Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + height: 36, + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 0), decoration: BoxDecoration( color: const Color(0xFF1F1F25), - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(18), ), child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Image.asset( Assets.images.logoTransparent.path, - width: MediaQuery.sizeOf(context).width * 0.05, - height: MediaQuery.sizeOf(context).width * 0.05, + width: 16, + height: 16, ), - isMemoriesPage ? const SizedBox(width: 8) : const SizedBox.shrink(), + isMemoriesPage ? const SizedBox(width: 6) : const SizedBox.shrink(), deviceProvider.isConnecting && isMemoriesPage ? Text( "Searching", - style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.white), + style: + Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.white, fontSize: 12), ) : isMemoriesPage ? Text( "Connect Device", - style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.white), + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(color: Colors.white, fontSize: 12), ) : const SizedBox.shrink(), ],