Commit e64a4559027aa39d6dd7bc8015cf66a23035cfb1

Authored by 权海
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):首页提供的数据也从本地数据库取
@@ -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 ),