Commit e64a4559027aa39d6dd7bc8015cf66a23035cfb1
1 parent
fd20342d
feat(ui):华为目标值的获取和上传
xx feat(ui):修复ohos目标写法 xx (cherry picked from commit 3e164451) # Conflicts: # lib/core/services/raw_data_service/platform_ohos/ohos_harmony_health_raw_data_sync_service_factory.dart xx feat(ui):首页提供的数据也从本地数据库取
Showing
2 changed files
with
31 additions
and
15 deletions
| @@ -3,6 +3,7 @@ import 'dart:async'; | @@ -3,6 +3,7 @@ import 'dart:async'; | ||
| 3 | import 'package:doublefeel_flutter/core/logging/app_logger.dart'; | 3 | import 'package:doublefeel_flutter/core/logging/app_logger.dart'; |
| 4 | import 'package:doublefeel_flutter/core/network/api/health_api.dart'; | 4 | import 'package:doublefeel_flutter/core/network/api/health_api.dart'; |
| 5 | import 'package:doublefeel_flutter/core/network/api/harmony_api.dart'; | 5 | import 'package:doublefeel_flutter/core/network/api/harmony_api.dart'; |
| 6 | +import 'package:doublefeel_flutter/core/network/dio_client.dart'; | ||
| 6 | import 'package:doublefeel_flutter/core/platform/pigeon_api_facade.dart'; | 7 | import 'package:doublefeel_flutter/core/platform/pigeon_api_facade.dart'; |
| 7 | import 'package:doublefeel_flutter/core/result/app_result.dart'; | 8 | import 'package:doublefeel_flutter/core/result/app_result.dart'; |
| 8 | import 'package:doublefeel_flutter/data/models/harmony/hm_health_data.dart'; | 9 | import 'package:doublefeel_flutter/data/models/harmony/hm_health_data.dart'; |
| @@ -36,12 +37,25 @@ OhosHealthRawDataSyncService createDefaultOhosHealthRawDataSyncService({ | @@ -36,12 +37,25 @@ OhosHealthRawDataSyncService createDefaultOhosHealthRawDataSyncService({ | ||
| 36 | remoteDataSource: OhosHarmonyHealthRawDataRemoteDataSource( | 37 | remoteDataSource: OhosHarmonyHealthRawDataRemoteDataSource( |
| 37 | HarmonyApiOhosRawDataClient( | 38 | HarmonyApiOhosRawDataClient( |
| 38 | Get.find<HarmonyApi>(), | 39 | Get.find<HarmonyApi>(), |
| 39 | - healthApi: Get.isRegistered<HealthApi>() ? Get.find<HealthApi>() : null, | 40 | + healthApi: _resolveHealthApi(), |
| 40 | ), | 41 | ), |
| 41 | ), | 42 | ), |
| 42 | ); | 43 | ); |
| 43 | } | 44 | } |
| 44 | 45 | ||
| 46 | +/// HealthApi is normally lazy-registered. Activity-goal synchronization can | ||
| 47 | +/// start before that lazy dependency is materialized, so construct the same | ||
| 48 | +/// lightweight API wrapper from the app-wide DioClient as a fallback. | ||
| 49 | +HealthApi? _resolveHealthApi() { | ||
| 50 | + if (Get.isRegistered<HealthApi>()) { | ||
| 51 | + return Get.find<HealthApi>(); | ||
| 52 | + } | ||
| 53 | + if (Get.isRegistered<DioClient>()) { | ||
| 54 | + return HealthApi(Get.find<DioClient>()); | ||
| 55 | + } | ||
| 56 | + return null; | ||
| 57 | +} | ||
| 58 | + | ||
| 45 | class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { | 59 | class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { |
| 46 | const HarmonyApiOhosRawDataClient( | 60 | const HarmonyApiOhosRawDataClient( |
| 47 | this._harmonyApi, { | 61 | this._harmonyApi, { |
| @@ -130,12 +144,6 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { | @@ -130,12 +144,6 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { | ||
| 130 | 144 | ||
| 131 | @override | 145 | @override |
| 132 | Future<AppResult<V2ActivityTarget>> getActivityGoal() async { | 146 | Future<AppResult<V2ActivityTarget>> getActivityGoal() async { |
| 133 | - final useRemoteData = false; | ||
| 134 | - if (!_preferNativeHealthData || useRemoteData) { | ||
| 135 | - AppLogger.i('[OHOS_ACTIVITY_GOAL] source=remote native_enabled=false'); | ||
| 136 | - return _harmonyApi.getActivityGoal(); | ||
| 137 | - } | ||
| 138 | - | ||
| 139 | try { | 147 | try { |
| 140 | final goal = | 148 | final goal = |
| 141 | await (_healthKitApi ?? AppHealthKitHostApi()).readActivityGoal(); | 149 | await (_healthKitApi ?? AppHealthKitHostApi()).readActivityGoal(); |
| @@ -151,10 +159,9 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { | @@ -151,10 +159,9 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { | ||
| 151 | '[OHOS_ACTIVITY_GOAL] ' | 159 | '[OHOS_ACTIVITY_GOAL] ' |
| 152 | 'source=native value=${_goalLogValue(nativeGoal)}', | 160 | 'source=native value=${_goalLogValue(nativeGoal)}', |
| 153 | ); | 161 | ); |
| 154 | - if (useRemoteData || _preferNativeHealthData) { | ||
| 155 | - // 上传目标值到服务器 | ||
| 156 | - unawaited(_uploadNativeActivityGoal(nativeGoal)); | ||
| 157 | - } | 162 | + // Deliberately do not await: a failed request must not prevent the |
| 163 | + // user from entering the app or the health-data sync from continuing. | ||
| 164 | + unawaited(_uploadNativeActivityGoal(nativeGoal)); | ||
| 158 | return AppSuccess(nativeGoal); | 165 | return AppSuccess(nativeGoal); |
| 159 | } | 166 | } |
| 160 | } | 167 | } |
| @@ -245,6 +245,18 @@ class LocalHealthDataSource implements HealthDataSource { | @@ -245,6 +245,18 @@ class LocalHealthDataSource implements HealthDataSource { | ||
| 245 | Future<AppResult<V2ActivityTarget>> getV2ActivityTarget( | 245 | Future<AppResult<V2ActivityTarget>> getV2ActivityTarget( |
| 246 | int? queryUserId, int intDate) async { | 246 | int? queryUserId, int intDate) async { |
| 247 | try { | 247 | try { |
| 248 | + if (_isOhosPlatform) { | ||
| 249 | + // The OHOS sync pipeline persists the native activity ring goal in | ||
| 250 | + // the local activity_goal table. Prefer that exact value here instead | ||
| 251 | + // of reconstructing it from a day's activity summary. | ||
| 252 | + final storedGoal = await coreService.queryOhosActivityGoal( | ||
| 253 | + refresh: false, | ||
| 254 | + ); | ||
| 255 | + if (storedGoal != null) { | ||
| 256 | + return AppSuccess(storedGoal); | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + | ||
| 248 | final day = LocalHealthDataConvert.dateFromKey(intDate); | 260 | final day = LocalHealthDataConvert.dateFromKey(intDate); |
| 249 | final queryStart = LocalHealthDataConvert.unixSeconds(day); | 261 | final queryStart = LocalHealthDataConvert.unixSeconds(day); |
| 250 | final queryEnd = LocalHealthDataConvert.unixSeconds( | 262 | final queryEnd = LocalHealthDataConvert.unixSeconds( |
| @@ -256,13 +268,10 @@ class LocalHealthDataSource implements HealthDataSource { | @@ -256,13 +268,10 @@ class LocalHealthDataSource implements HealthDataSource { | ||
| 256 | ); | 268 | ); |
| 257 | final resolvedActivity = _resolveActivityTarget(activity); | 269 | final resolvedActivity = _resolveActivityTarget(activity); |
| 258 | if (_isOhosPlatform) { | 270 | if (_isOhosPlatform) { |
| 259 | - final activityGoal = await coreService.queryOhosActivityGoal( | ||
| 260 | - refresh: false, | ||
| 261 | - ); | ||
| 262 | return AppSuccess( | 271 | return AppSuccess( |
| 263 | _ohosActivityTarget( | 272 | _ohosActivityTarget( |
| 264 | userId: queryUserId ?? 0, | 273 | userId: queryUserId ?? 0, |
| 265 | - remoteOrCachedTarget: activityGoal, | 274 | + remoteOrCachedTarget: null, |
| 266 | activity: resolvedActivity, | 275 | activity: resolvedActivity, |
| 267 | fallbackUpdateTime: queryEnd, | 276 | fallbackUpdateTime: queryEnd, |
| 268 | ), | 277 | ), |
-
mentioned in commit f027d9ea
-
Please register or login to post a comment