Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
josancamon19 committed Sep 28, 2024
2 parents e72cbbb + c8971e4 commit 3306b44
Show file tree
Hide file tree
Showing 20 changed files with 462 additions and 110 deletions.
15 changes: 5 additions & 10 deletions app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ import 'package:friend_private/providers/speech_profile_provider.dart';
import 'package:friend_private/services/notifications.dart';
import 'package:friend_private/services/services.dart';
import 'package:friend_private/utils/analytics/growthbook.dart';
import 'package:friend_private/utils/analytics/intercom.dart';
import 'package:friend_private/utils/analytics/mixpanel.dart';
import 'package:friend_private/utils/features/calendar.dart';
import 'package:friend_private/utils/logger.dart';
import 'package:instabug_flutter/instabug_flutter.dart';
import 'package:intercom_flutter/intercom_flutter.dart';
import 'package:opus_dart/opus_dart.dart';
import 'package:opus_flutter/opus_flutter.dart' as opus_flutter;
import 'package:provider/provider.dart';
Expand All @@ -56,13 +56,7 @@ Future<bool> _init() async {
await Firebase.initializeApp(options: dev.DefaultFirebaseOptions.currentPlatform, name: 'dev');
}

if (Env.intercomAppId != null) {
await Intercom.instance.initialize(
Env.intercomAppId!,
iosApiKey: Env.intercomIOSApiKey,
androidApiKey: Env.intercomAndroidApiKey,
);
}
await IntercomManager().initIntercom();
await NotificationService.instance.initialize();
await SharedPreferencesUtil.init();
await MixpanelManager.init();
Expand Down Expand Up @@ -281,15 +275,16 @@ class _DeciderWidgetState extends State<DeciderWidget> {

if (context.read<AuthenticationProvider>().user != null) {
context.read<HomeProvider>().setupHasSpeakerProfile();
await Intercom.instance.loginIdentifiedUser(
await IntercomManager.instance.intercom.loginIdentifiedUser(
userId: FirebaseAuth.instance.currentUser!.uid,
);
context.read<MessageProvider>().setMessagesFromCache();
context.read<PluginProvider>().setPluginsFromCache();
context.read<MessageProvider>().refreshMessages();
} else {
await Intercom.instance.loginUnidentifiedUser();
await IntercomManager.instance.intercom.loginUnidentifiedUser();
}
IntercomManager.instance.setUserAttributes();
});
super.initState();
}
Expand Down
4 changes: 2 additions & 2 deletions app/lib/pages/home/device.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import 'package:friend_private/backend/preferences.dart';
import 'package:friend_private/backend/schema/bt_device.dart';
import 'package:friend_private/providers/device_provider.dart';
import 'package:friend_private/services/services.dart';
import 'package:friend_private/utils/analytics/intercom.dart';
import 'package:friend_private/utils/analytics/mixpanel.dart';
import 'package:friend_private/widgets/device_widget.dart';
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
import 'package:intercom_flutter/intercom_flutter.dart';
import 'package:provider/provider.dart';

class ConnectedDevice extends StatefulWidget {
Expand Down Expand Up @@ -162,7 +162,7 @@ class _ConnectedDeviceState extends State<ConnectedDevice> {
const SizedBox(height: 8),
TextButton(
onPressed: () async {
await Intercom.instance.displayArticle('9907475-how-to-charge-the-device');
await IntercomManager.instance.displayChargingArticle();
},
child: const Text(
'Issues charging?',
Expand Down
5 changes: 3 additions & 2 deletions app/lib/pages/home/page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import 'package:friend_private/providers/memory_provider.dart';
import 'package:friend_private/providers/message_provider.dart';
import 'package:friend_private/providers/plugin_provider.dart';
import 'package:friend_private/services/notifications.dart';
import 'package:friend_private/utils/analytics/analytics_manager.dart';
import 'package:friend_private/utils/analytics/mixpanel.dart';
import 'package:friend_private/utils/audio/foreground.dart';
import 'package:friend_private/utils/other/temp.dart';
Expand All @@ -45,11 +46,11 @@ class _HomePageWrapperState extends State<HomePageWrapper> {
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (SharedPreferencesUtil().notificationsEnabled != await Permission.notification.isGranted) {
SharedPreferencesUtil().notificationsEnabled = await Permission.notification.isGranted;
MixpanelManager().setUserProperty('Notifications Enabled', SharedPreferencesUtil().notificationsEnabled);
AnalyticsManager().setUserAttribute('Notifications Enabled', SharedPreferencesUtil().notificationsEnabled);
}
if (SharedPreferencesUtil().locationEnabled != await Permission.location.isGranted) {
SharedPreferencesUtil().locationEnabled = await Permission.location.isGranted;
MixpanelManager().setUserProperty('Location Enabled', SharedPreferencesUtil().locationEnabled);
AnalyticsManager().setUserAttribute('Location Enabled', SharedPreferencesUtil().locationEnabled);
}
context.read<DeviceProvider>().periodicConnect('coming from HomePageWrapper');
await context.read<mp.MemoryProvider>().getInitialMemories();
Expand Down
22 changes: 16 additions & 6 deletions app/lib/pages/onboarding/name/name_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:friend_private/backend/auth.dart';
import 'package:friend_private/backend/preferences.dart';
import 'package:gradient_borders/gradient_borders.dart';
import 'package:intercom_flutter/intercom_flutter.dart';

class NameWidget extends StatefulWidget {
final Function goNext;
Expand Down Expand Up @@ -41,18 +42,12 @@ class _NameWidgetState extends State<NameWidget> {
enabled: true,
focusNode: focusNode,
controller: nameController,
// textCapitalization: TextCapitalization.sentences,
obscureText: false,
// canRequestFocus: true,
textAlign: TextAlign.center,
textAlignVertical: TextAlignVertical.center,
decoration: InputDecoration(
hintText: 'How Omi should call you?',
// label: const Text('What should Omi call you?'),
hintStyle: const TextStyle(fontSize: 14, color: Colors.grey),
// border: UnderlineInputBorder(
// borderSide: BorderSide(color: Colors.grey.shade200),
// ),
border: GradientOutlineInputBorder(
borderRadius: BorderRadius.circular(8),
gradient: const LinearGradient(
Expand Down Expand Up @@ -107,6 +102,21 @@ class _NameWidgetState extends State<NameWidget> {
)
],
),
const SizedBox(
height: 12,
),
InkWell(
child: Text(
'Need Help?',
style: TextStyle(
color: Colors.grey.shade300,
decoration: TextDecoration.underline,
),
),
onTap: () {
Intercom.instance.displayMessenger();
},
),
],
),
);
Expand Down
16 changes: 16 additions & 0 deletions app/lib/pages/onboarding/permissions/permissions_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:friend_private/providers/onboarding_provider.dart';
import 'package:friend_private/widgets/dialog.dart';
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
import 'package:intercom_flutter/intercom_flutter.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';

Expand Down Expand Up @@ -216,6 +217,21 @@ class _PermissionsWidgetState extends State<PermissionsWidget> {
)
],
),
const SizedBox(
height: 12,
),
InkWell(
child: Text(
'Need Help?',
style: TextStyle(
color: Colors.grey.shade300,
decoration: TextDecoration.underline,
),
),
onTap: () {
Intercom.instance.displayMessenger();
},
),
],
),
);
Expand Down
134 changes: 76 additions & 58 deletions app/lib/pages/onboarding/welcome/page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:friend_private/providers/onboarding_provider.dart';
import 'package:friend_private/utils/analytics/intercom.dart';
import 'package:friend_private/widgets/dialog.dart';
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
import 'package:permission_handler/permission_handler.dart';
Expand Down Expand Up @@ -37,71 +38,88 @@ class _WelcomePageState extends State<WelcomePage> with SingleTickerProviderStat
return Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Consumer<OnboardingProvider>(builder: (context, provider, child) {
return Padding(
padding: EdgeInsets.only(left: screenSize.width * 0.1, right: screenSize.width * 0.1),
child: Container(
decoration: BoxDecoration(
border: const GradientBoxBorder(
gradient: LinearGradient(colors: [
Color.fromARGB(127, 208, 208, 208),
Color.fromARGB(127, 188, 99, 121),
Color.fromARGB(127, 86, 101, 182),
Color.fromARGB(127, 126, 190, 236)
]),
width: 2,
),
borderRadius: BorderRadius.circular(12),
),
child: ElevatedButton(
onPressed: () async {
await provider.askForBluetoothPermissions();
if (provider.hasBluetoothPermission) {
widget.goNext();
} else {
showDialog(
context: context,
builder: (c) => getDialog(
context,
() {
Navigator.of(context).pop();
openAppSettings();
},
() {},
'Permissions Required',
'This app needs Bluetooth and Location permissions to function properly. Please enable them in the settings.',
okButtonText: 'Open Settings',
singleButton: true,
),
barrierDismissible: false,
);
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.transparent,
shadowColor: const Color.fromARGB(255, 17, 17, 17),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
Consumer<OnboardingProvider>(
builder: (context, provider, child) {
return Padding(
padding: EdgeInsets.only(left: screenSize.width * 0.1, right: screenSize.width * 0.1),
child: Container(
decoration: BoxDecoration(
border: const GradientBoxBorder(
gradient: LinearGradient(colors: [
Color.fromARGB(127, 208, 208, 208),
Color.fromARGB(127, 188, 99, 121),
Color.fromARGB(127, 86, 101, 182),
Color.fromARGB(127, 126, 190, 236)
]),
width: 2,
),
borderRadius: BorderRadius.circular(12),
),
child: Container(
width: double.infinity, // Button takes full width of the padding
height: 45, // Fixed height for the button
alignment: Alignment.center,
child: const Text(
'Connect My Friend',
style: TextStyle(
fontWeight: FontWeight.w400,
fontSize: 18,
color: Color.fromARGB(255, 255, 255, 255),
child: ElevatedButton(
onPressed: () async {
await provider.askForBluetoothPermissions();
if (provider.hasBluetoothPermission) {
widget.goNext();
} else {
showDialog(
context: context,
builder: (c) => getDialog(
context,
() {
Navigator.of(context).pop();
openAppSettings();
},
() {},
'Permissions Required',
'This app needs Bluetooth and Location permissions to function properly. Please enable them in the settings.',
okButtonText: 'Open Settings',
singleButton: true,
),
barrierDismissible: false,
);
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.transparent,
shadowColor: const Color.fromARGB(255, 17, 17, 17),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Container(
width: double.infinity, // Button takes full width of the padding
height: 45, // Fixed height for the button
alignment: Alignment.center,
child: const Text(
'Connect My Friend',
style: TextStyle(
fontWeight: FontWeight.w400,
fontSize: 18,
color: Color.fromARGB(255, 255, 255, 255),
),
),
),
),
),
);
},
),
const SizedBox(
height: 12,
),
InkWell(
child: Text(
'Need Help?',
style: TextStyle(
color: Colors.grey.shade300,
decoration: TextDecoration.underline,
),
);
}),
const SizedBox(height: 16)
),
onTap: () {
IntercomManager.instance.intercom.displayMessenger();
},
),
const SizedBox(height: 10)
],
);
}
Expand Down
12 changes: 11 additions & 1 deletion app/lib/pages/onboarding/wrapper.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:math';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:friend_private/backend/auth.dart';
import 'package:friend_private/backend/preferences.dart';
Expand All @@ -16,6 +17,7 @@ import 'package:friend_private/providers/home_provider.dart';
import 'package:friend_private/providers/onboarding_provider.dart';
import 'package:friend_private/providers/speech_profile_provider.dart';
import 'package:friend_private/services/services.dart';
import 'package:friend_private/utils/analytics/intercom.dart';
import 'package:friend_private/utils/analytics/mixpanel.dart';
import 'package:friend_private/utils/other/temp.dart';
import 'package:friend_private/widgets/device_widget.dart';
Expand Down Expand Up @@ -79,6 +81,9 @@ class _OnboardingWrapperState extends State<OnboardingWrapper> with TickerProvid
onSignIn: () {
MixpanelManager().onboardingStepCompleted('Auth');
context.read<HomeProvider>().setupHasSpeakerProfile();
IntercomManager.instance.intercom.loginIdentifiedUser(
userId: FirebaseAuth.instance.currentUser!.uid,
);
if (SharedPreferencesUtil().onboardingCompleted) {
// previous users
// Not needed anymore, because AuthProvider already does this
Expand All @@ -90,6 +95,11 @@ class _OnboardingWrapperState extends State<OnboardingWrapper> with TickerProvid
),
NameWidget(goNext: () {
_goNext();
IntercomManager.instance.updateUser(
FirebaseAuth.instance.currentUser!.email,
FirebaseAuth.instance.currentUser!.displayName,
FirebaseAuth.instance.currentUser!.uid,
);
MixpanelManager().onboardingStepCompleted('Name');
}),
PermissionsWidget(
Expand Down Expand Up @@ -199,7 +209,7 @@ class _OnboardingWrapperState extends State<OnboardingWrapper> with TickerProvid
SizedBox(
height: (_controller!.index == 5 || _controller!.index == 6 || _controller!.index == 7)
? max(MediaQuery.of(context).size.height - 500 - 10, maxHeightWithTextScale(context))
: max(MediaQuery.of(context).size.height - 500 - 60, maxHeightWithTextScale(context)),
: max(MediaQuery.of(context).size.height - 500 - 30, maxHeightWithTextScale(context)),
child: Padding(
padding: EdgeInsets.only(bottom: MediaQuery.sizeOf(context).height <= 700 ? 10 : 64),
child: TabBarView(
Expand Down
4 changes: 2 additions & 2 deletions app/lib/pages/settings/about.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:friend_private/pages/settings/webview.dart';
import 'package:friend_private/utils/analytics/intercom.dart';
import 'package:friend_private/utils/analytics/mixpanel.dart';
import 'package:friend_private/utils/other/temp.dart';
import 'package:intercom_flutter/intercom_flutter.dart';
import 'package:url_launcher/url_launcher.dart';

class AboutOmiPage extends StatefulWidget {
Expand Down Expand Up @@ -54,7 +54,7 @@ class _AboutOmiPageState extends State<AboutOmiPage> {
contentPadding: const EdgeInsets.fromLTRB(4, 0, 24, 0),
trailing: const Icon(Icons.help_outline_outlined, color: Colors.white, size: 20),
onTap: () async {
await Intercom.instance.displayMessenger();
await IntercomManager.instance.intercom.displayMessenger();
},
),
ListTile(
Expand Down
Loading

0 comments on commit 3306b44

Please sign in to comment.