From 47d6161241e5921a771e904704c336bf03becd98 Mon Sep 17 00:00:00 2001 From: Joan Cabezas Date: Sun, 15 Sep 2024 12:23:03 -0700 Subject: [PATCH] Empty state recording in progress wrapper fix --- app/lib/pages/capture/_page.dart | 2 +- app/lib/pages/capture/widgets/widgets.dart | 7 +- app/lib/pages/home/page.dart | 6 +- app/lib/pages/memories/page.dart | 11 +-- app/lib/pages/memories/widgets/capture.dart | 8 +- .../memories/widgets/processing_capture.dart | 78 ++++++++++--------- app/lib/providers/connectivity_provider.dart | 1 + 7 files changed, 56 insertions(+), 57 deletions(-) diff --git a/app/lib/pages/capture/_page.dart b/app/lib/pages/capture/_page.dart index fe13f56b6..4bc532380 100644 --- a/app/lib/pages/capture/_page.dart +++ b/app/lib/pages/capture/_page.dart @@ -216,7 +216,7 @@ class CapturePageState extends State with AutomaticKeepAliveClientM SnackBar( content: Text( error, - style: TextStyle(color: Colors.white, fontSize: 14), + style: const TextStyle(color: Colors.white, fontSize: 14), ), ), ); diff --git a/app/lib/pages/capture/widgets/widgets.dart b/app/lib/pages/capture/widgets/widgets.dart index 40ba0c049..8f00239e1 100644 --- a/app/lib/pages/capture/widgets/widgets.dart +++ b/app/lib/pages/capture/widgets/widgets.dart @@ -218,6 +218,7 @@ speechProfileWidget(BuildContext context) { await routeToPage(context, const SpeakerIdPage()); if (hasSpeakerProfile != SharedPreferencesUtil().hasSpeakerProfile) { if (context.mounted) { + // TODO: is the websocket restarting once the user comes back? context.read().restartWebSocket(); } } @@ -227,7 +228,7 @@ speechProfileWidget(BuildContext context) { color: Colors.grey.shade900, borderRadius: const BorderRadius.all(Radius.circular(12)), ), - margin: const EdgeInsets.symmetric(vertical: 16, horizontal: 24), + margin: const EdgeInsets.fromLTRB(16, 0, 16, 16), padding: const EdgeInsets.all(16), child: const Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -238,7 +239,7 @@ speechProfileWidget(BuildContext context) { Icon(Icons.multitrack_audio), SizedBox(width: 16), Text( - 'Set up speech profile', + 'Teach Omi your voice', style: TextStyle(color: Colors.white, fontSize: 16), ), ], @@ -260,7 +261,7 @@ speechProfileWidget(BuildContext context) { ), ], ) - : const SizedBox(height: 16); + : const SizedBox(height: 0); } getTranscriptWidget( diff --git a/app/lib/pages/home/page.dart b/app/lib/pages/home/page.dart index ff4bf40b7..d6890c789 100644 --- a/app/lib/pages/home/page.dart +++ b/app/lib/pages/home/page.dart @@ -518,7 +518,11 @@ class _HomePageState extends State with WidgetsBindingObserver, Ticker Row( children: [ Consumer2(builder: (context, memoryProvider, home, child) { - if (home.selectedIndex != 0) return const SizedBox.shrink(); + if (home.selectedIndex != 0 || + !memoryProvider.hasNonDiscardedMemories || + memoryProvider.isLoadingMemories) { + return const SizedBox.shrink(); + } return IconButton( onPressed: memoryProvider.toggleDiscardMemories, icon: Icon( diff --git a/app/lib/pages/memories/page.dart b/app/lib/pages/memories/page.dart index d9879b976..ebf6295cb 100644 --- a/app/lib/pages/memories/page.dart +++ b/app/lib/pages/memories/page.dart @@ -2,14 +2,12 @@ import 'package:flutter/material.dart'; import 'package:friend_private/backend/preferences.dart'; import 'package:friend_private/backend/schema/memory.dart'; import 'package:friend_private/pages/capture/location_service.dart'; +import 'package:friend_private/pages/capture/widgets/widgets.dart'; import 'package:friend_private/pages/memories/widgets/date_list_item.dart'; import 'package:friend_private/pages/memories/widgets/processing_capture.dart'; -import 'package:friend_private/providers/home_provider.dart'; import 'package:friend_private/providers/memory_provider.dart'; -import 'package:friend_private/utils/analytics/growthbook.dart'; import 'package:friend_private/utils/analytics/mixpanel.dart'; import 'package:friend_private/widgets/dialog.dart'; -import 'package:gradient_borders/box_borders/gradient_box_border.dart'; import 'package:location/location.dart'; import 'package:provider/provider.dart'; import 'package:visibility_detector/visibility_detector.dart'; @@ -18,9 +16,7 @@ import 'widgets/empty_memories.dart'; import 'widgets/memory_list_item.dart'; class MemoriesPage extends StatefulWidget { - const MemoriesPage({ - super.key, - }); + const MemoriesPage({super.key}); @override State createState() => _MemoriesPageState(); @@ -102,8 +98,6 @@ class _MemoriesPageState extends State with AutomaticKeepAliveClie print('building memories page'); super.build(context); return Consumer(builder: (context, memoryProvider, child) { - bool isEmpty = memoryProvider.memories.isEmpty && !memoryProvider.isLoadingMemories; - bool displaySearchBar = GrowthbookUtil().displayMemoriesSearchBar(); return RefreshIndicator( backgroundColor: Colors.black, color: Colors.white, @@ -113,6 +107,7 @@ class _MemoriesPageState extends State with AutomaticKeepAliveClie child: CustomScrollView( slivers: [ const SliverToBoxAdapter(child: SizedBox(height: 32)), + SliverToBoxAdapter(child: speechProfileWidget(context)), SliverToBoxAdapter(child: getMemoryCaptureWidget()), if (memoryProvider.memoriesWithDates.isEmpty && !memoryProvider.isLoadingMemories) const SliverToBoxAdapter( diff --git a/app/lib/pages/memories/widgets/capture.dart b/app/lib/pages/memories/widgets/capture.dart index e28e140f2..ba7df1bc0 100644 --- a/app/lib/pages/memories/widgets/capture.dart +++ b/app/lib/pages/memories/widgets/capture.dart @@ -4,10 +4,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_foreground_task/flutter_foreground_task.dart'; import 'package:flutter_provider_utilities/flutter_provider_utilities.dart'; -import 'package:friend_private/backend/preferences.dart'; import 'package:friend_private/backend/schema/bt_device.dart'; import 'package:friend_private/backend/schema/geolocation.dart'; -import 'package:friend_private/pages/capture/location_service.dart'; import 'package:friend_private/pages/capture/widgets/widgets.dart'; import 'package:friend_private/providers/capture_provider.dart'; import 'package:friend_private/providers/connectivity_provider.dart'; @@ -15,16 +13,12 @@ import 'package:friend_private/providers/device_provider.dart'; import 'package:friend_private/providers/onboarding_provider.dart'; import 'package:friend_private/providers/websocket_provider.dart'; import 'package:friend_private/services/services.dart'; -import 'package:friend_private/utils/analytics/mixpanel.dart'; import 'package:friend_private/utils/audio/wav_bytes.dart'; import 'package:friend_private/widgets/dialog.dart'; -import 'package:location/location.dart'; import 'package:provider/provider.dart'; class LiteCaptureWidget extends StatefulWidget { - const LiteCaptureWidget({ - super.key, - }); + const LiteCaptureWidget({super.key}); @override State createState() => LiteCaptureWidgetState(); diff --git a/app/lib/pages/memories/widgets/processing_capture.dart b/app/lib/pages/memories/widgets/processing_capture.dart index f2fa4043e..7d44f4bc2 100644 --- a/app/lib/pages/memories/widgets/processing_capture.dart +++ b/app/lib/pages/memories/widgets/processing_capture.dart @@ -32,43 +32,47 @@ class _MemoryCaptureWidgetState extends State { builder: (context, provider, deviceProvider, connectivityProvider, child) { var topMemoryId = (provider.memoryProvider?.memories ?? []).isNotEmpty ? provider.memoryProvider!.memories.first.id : null; - return /*provider.memoryCreating || - deviceProvider.connectedDevice != null || - provider.recordingState == RecordingState.record - ? */ - GestureDetector( - onTap: () async { - if (provider.segments.isEmpty && provider.photos.isEmpty) return; - routeToPage(context, MemoryCapturingPage(topMemoryId: topMemoryId)); - }, - child: Container( - margin: const EdgeInsets.symmetric(horizontal: 16), - width: double.maxFinite, - decoration: BoxDecoration( - color: Colors.grey.shade900, - borderRadius: BorderRadius.circular(16.0), - ), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _getMemoryHeader(context), - provider.segments.isNotEmpty - ? const Column( - children: [ - SizedBox(height: 8), - LiteCaptureWidget(), - SizedBox(height: 8), - ], - ) - : const SizedBox.shrink(), - ], - ), - ), - ), - ) /* : const SizedBox.shrink()*/; + + bool showPhoneMic = deviceProvider.connectedDevice == null && !deviceProvider.isConnecting; + bool isConnected = deviceProvider.connectedDevice != null || + provider.recordingState == RecordingState.record || + (provider.memoryCreating && deviceProvider.connectedDevice != null); + + return (showPhoneMic || isConnected) + ? GestureDetector( + onTap: () async { + if (provider.segments.isEmpty && provider.photos.isEmpty) return; + routeToPage(context, MemoryCapturingPage(topMemoryId: topMemoryId)); + }, + child: Container( + margin: const EdgeInsets.symmetric(horizontal: 16), + width: double.maxFinite, + decoration: BoxDecoration( + color: Colors.grey.shade900, + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _getMemoryHeader(context), + provider.segments.isNotEmpty + ? const Column( + children: [ + SizedBox(height: 8), + LiteCaptureWidget(), + SizedBox(height: 8), + ], + ) + : const SizedBox.shrink(), + ], + ), + ), + ), + ) + : const SizedBox.shrink(); }); } diff --git a/app/lib/providers/connectivity_provider.dart b/app/lib/providers/connectivity_provider.dart index 0317a6de8..f51f9c763 100644 --- a/app/lib/providers/connectivity_provider.dart +++ b/app/lib/providers/connectivity_provider.dart @@ -8,6 +8,7 @@ class ConnectivityProvider extends ChangeNotifier { final InternetConnection _internetConnection = InternetConnection(); bool get isConnected => _isConnected; + bool get previousConnection => _previousConnection; ConnectivityProvider() {