6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 1ccf854d
Changed files
comwell_key_app/ios/Runner/Info.plist | 2 + .../screens/onboarding/onboarding_routes.dart | 2 +- .../usage_tracking_permission_cubit.dart | 45 ++++++++++++++++++++-- .../usage_tracking_permission_screen.dart | 8 +++- comwell_key_app/pubspec.yaml | 1 + 5 files changed, 51 insertions(+), 7 deletions(-)
Diff
diff --git a/comwell_key_app/ios/Runner/Info.plist b/comwell_key_app/ios/Runner/Info.plist
index 064db7fc..1194b9bc 100644
--- a/comwell_key_app/ios/Runner/Info.plist
+++ b/comwell_key_app/ios/Runner/Info.plist
@@ -99,6 +99,8 @@
<string>Always Allow is required to improve scanning performance in the background</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Always Allow is required to improve scanning performance in the background</string>
+ <key>NSUserTrackingUsageDescription</key>
+ <string>Comwell would like your to track your usage to improve performance and provide your with personalized content and offers</string>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UIBackgroundModes</key>
diff --git a/comwell_key_app/lib/presentation/screens/onboarding/onboarding_routes.dart b/comwell_key_app/lib/presentation/screens/onboarding/onboarding_routes.dart
index 03ef3fba..55b1eb33 100644
--- a/comwell_key_app/lib/presentation/screens/onboarding/onboarding_routes.dart
+++ b/comwell_key_app/lib/presentation/screens/onboarding/onboarding_routes.dart
@@ -45,7 +45,7 @@ RouteBase get usageTrackingPermissionRoute => GoRoute(
builder: (context, state) {
return BlocProvider(
lazy: false,
- create: (context) => UsageTrackingPermissionCubit(locator.get()),
+ create: (context) => UsageTrackingPermissionCubit(true, locator.get()),
child: const UsageTrackingPermissionScreen(),
);
},
diff --git a/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_cubit.dart b/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_cubit.dart
index b3edda72..151ae4c9 100644
--- a/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_cubit.dart
+++ b/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_cubit.dart
@@ -1,3 +1,7 @@
+import 'dart:io';
+
+import 'package:app_settings/app_settings.dart';
+import 'package:app_tracking_transparency/app_tracking_transparency.dart';
import 'package:comwell_key_app/base/base_cubit.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@@ -6,15 +10,48 @@ import '../../../../utils/secure_storage.dart';
part '../../../../.generated/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_cubit.freezed.dart';
class UsageTrackingPermissionCubit extends BaseCubit<UsageTrackingPermissionState> {
- UsageTrackingPermissionCubit(this._preferences) : super(const UsageTrackingPermissionState()) {
+ UsageTrackingPermissionCubit(this.isOnboarding, this._preferences)
+ : super(const UsageTrackingPermissionState()) {
init();
}
+ final bool isOnboarding;
final ComwellPreferences _preferences;
- void init() async {
- await _preferences.setOnboardingHasSeenUsageTracking();
- print("qqq setOnboardingHasSeenUsageTracking=${_preferences.onboardingHasSeenUsageTracking}");
+ /// The system prompt will only show a limited number of times to prevent "eager" UX.
+ /// However UX can get frustrating if we do not react their input. As such, we listen
+ /// to the amount of clicks on the toggle. If counter >= 3 then we open the app settings.
+ int _clickCounter = 0;
+
+ Future<void> init() async {
+ if (isOnboarding) {
+ await _preferences.setOnboardingHasSeenUsageTracking();
+ }
+ }
+
+ Future<bool> confirm() async {
+ if (Platform.isIOS) {
+ return _requestPermission();
+ } else {
+ return true;
+ }
+ }
+
+ Future<bool> _requestPermission() async {
+ final initialStatus = await AppTrackingTransparency.trackingAuthorizationStatus;
+ _clickCounter++;
+ safeEmit(state.copyWith(isLoading: true));
+ if (_clickCounter >= 3) {
+ await AppSettings.openAppSettings(type: AppSettingsType.settings);
+ } else if (isOnboarding) {
+ return true;
+ } else {
+ await AppSettings.openAppSettings(type: AppSettingsType.settings);
+ }
+ safeEmit(state.copyWith(isLoading: false));
+ final updatedStatus = await AppTrackingTransparency.trackingAuthorizationStatus;
+ // used to check in settings if rationale should pop
+ return initialStatus != updatedStatus;
}
}
diff --git a/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_screen.dart b/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_screen.dart
index 6b883d76..b4eeabca 100644
--- a/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_screen.dart
+++ b/comwell_key_app/lib/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_screen.dart
@@ -1,7 +1,9 @@
import 'package:comwell_key_app/.generated/assets/assets.gen.dart';
import 'package:comwell_key_app/presentation/screens/onboarding/permission_screen_template.dart';
+import 'package:comwell_key_app/presentation/screens/onboarding/usage_tracking/usage_tracking_permission_cubit.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
class UsageTrackingPermissionScreen extends StatelessWidget {
@@ -9,13 +11,15 @@ class UsageTrackingPermissionScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
+ final cubit = context.read<UsageTrackingPermissionCubit>();
return PermissionScreenTemplate(
title: "Må vi tracke din aktivitet for at forbredre din app oplevelse?",
subtitle:
"Exercitation tempor consequat in voluptate nisi id et in sunt incididunt occaecat ad minim ut magna elit deserunt irure duis.",
primaryButtonText: "Tillad tracking",
- primaryButtonOnClick: () {
- // TODO handle
+ primaryButtonOnClick: () async {
+ await cubit.confirm();
+ if (context.mounted) context.go(AppRoutes.overview);
},
secondaryButtonText: "Spring over",
secondaryButtonOnClick: () {
diff --git a/comwell_key_app/pubspec.yaml b/comwell_key_app/pubspec.yaml
index d5720f81..fc27ee85 100644
--- a/comwell_key_app/pubspec.yaml
+++ b/comwell_key_app/pubspec.yaml
@@ -67,6 +67,7 @@ dependencies:
flutter_blue_plus: ^2.1.0
app_settings: ^7.0.0
internet_connection_checker_plus: ^2.9.1+2
+ app_tracking_transparency: ^2.0.6+1
dependency_overrides:
#Remove override when slider button updates