Skip to content
Merged

fixes #3777

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions app/lib/pages/conversations/conversations_page.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -168,16 +167,18 @@ class _ConversationsPageState extends State<ConversationsPage> with AutomaticKee
children: [
SizedBox(height: 12), // above search widget
SearchWidget(),
SizedBox(height: 0), //below search widget
SizedBox(height: 12), //below search widget
],
),
);
},
),
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),
Expand All @@ -187,7 +188,8 @@ class _ConversationsPageState extends State<ConversationsPage> with AutomaticKee
),
),
)
else if (convoProvider.groupedConversations.isEmpty && (convoProvider.isLoadingConversations || convoProvider.isFetchingConversations))
else if (convoProvider.groupedConversations.isEmpty &&
(convoProvider.isLoadingConversations || convoProvider.isFetchingConversations))
_buildLoadingShimmer()
else
SliverList(
Expand Down
27 changes: 25 additions & 2 deletions app/lib/pages/conversations/widgets/conversation_list_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,22 @@ class _ConversationListItemState extends State<ConversationListItem> {
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(
Expand All @@ -248,6 +261,16 @@ class _ConversationListItemState extends State<ConversationListItem> {
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,
),
),
],
),
],
Expand Down
70 changes: 6 additions & 64 deletions app/lib/pages/conversations/widgets/search_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,16 @@ class _SearchWidgetState extends State<SearchWidget> {
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,
Expand Down Expand Up @@ -130,67 +133,6 @@ class _SearchWidgetState extends State<SearchWidget> {
style: const TextStyle(color: Colors.white),
),
),
const SizedBox(
width: 8,
),
// Calendar button
Consumer<ConversationProvider>(
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<ConversationProvider>(
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',
),
);
},
),
],
),
);
Expand Down
28 changes: 28 additions & 0 deletions app/lib/pages/home/page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -652,6 +652,10 @@ class _HomePageState extends State<HomePage> 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),
Expand Down Expand Up @@ -934,6 +938,30 @@ class _HomePageState extends State<HomePage> 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),
],
);
},
Expand Down
55 changes: 32 additions & 23 deletions app/lib/pages/home/widgets/battery_info_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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,
Expand All @@ -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),
Expand All @@ -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(
Expand All @@ -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),
),
],
),
Expand All @@ -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(),
],
Expand Down