|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
import 'package:doublefeel_flutter/core/logging/app_logger.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/network/api/health_api.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/network/api/harmony_api.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/platform/pigeon_api_facade.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/result/app_result.dart';
|
|
...
|
...
|
@@ -31,15 +34,24 @@ OhosHealthRawDataSyncService createDefaultOhosHealthRawDataSyncService({ |
|
|
|
return OhosHealthRawDataSyncService(
|
|
|
|
localStore: localStore,
|
|
|
|
remoteDataSource: OhosHarmonyHealthRawDataRemoteDataSource(
|
|
|
|
HarmonyApiOhosRawDataClient(Get.find<HarmonyApi>()),
|
|
|
|
HarmonyApiOhosRawDataClient(
|
|
|
|
Get.find<HarmonyApi>(),
|
|
|
|
healthApi: Get.isRegistered<HealthApi>() ? Get.find<HealthApi>() : null,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient {
|
|
|
|
const HarmonyApiOhosRawDataClient(this._harmonyApi, [this._healthKitApi]);
|
|
|
|
const HarmonyApiOhosRawDataClient(
|
|
|
|
this._harmonyApi, {
|
|
|
|
HealthApi? healthApi,
|
|
|
|
AppHealthKitHostApi? healthKitApi,
|
|
|
|
}) : _healthApi = healthApi,
|
|
|
|
_healthKitApi = healthKitApi;
|
|
|
|
|
|
|
|
final HarmonyApi _harmonyApi;
|
|
|
|
final HealthApi? _healthApi;
|
|
|
|
final AppHealthKitHostApi? _healthKitApi;
|
|
|
|
|
|
|
|
bool get _preferNativeHealthData =>
|
|
...
|
...
|
@@ -118,7 +130,8 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { |
|
|
|
|
|
|
|
@override
|
|
|
|
Future<AppResult<V2ActivityTarget>> getActivityGoal() async {
|
|
|
|
if (!_preferNativeHealthData) {
|
|
|
|
final useRemoteData = false;
|
|
|
|
if (!_preferNativeHealthData || useRemoteData) {
|
|
|
|
AppLogger.i('[OHOS_ACTIVITY_GOAL] source=remote native_enabled=false');
|
|
|
|
return _harmonyApi.getActivityGoal();
|
|
|
|
}
|
|
...
|
...
|
@@ -138,6 +151,10 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { |
|
|
|
'[OHOS_ACTIVITY_GOAL] '
|
|
|
|
'source=native value=${_goalLogValue(nativeGoal)}',
|
|
|
|
);
|
|
|
|
if (useRemoteData || _preferNativeHealthData) {
|
|
|
|
// 上传目标值到服务器
|
|
|
|
unawaited(_uploadNativeActivityGoal(nativeGoal));
|
|
|
|
}
|
|
|
|
return AppSuccess(nativeGoal);
|
|
|
|
}
|
|
|
|
}
|
|
...
|
...
|
@@ -163,6 +180,29 @@ class HarmonyApiOhosRawDataClient implements OhosHarmonyRawDataClient { |
|
|
|
return remoteResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> _uploadNativeActivityGoal(V2ActivityTarget goal) async {
|
|
|
|
final healthApi = _healthApi;
|
|
|
|
if (healthApi == null) {
|
|
|
|
AppLogger.i(
|
|
|
|
'[OHOS_ACTIVITY_GOAL] upload_skipped reason=health_api_missing');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
final result = await healthApi.uploadV2ActivityTarget(goal);
|
|
|
|
switch (result) {
|
|
|
|
case AppSuccess():
|
|
|
|
AppLogger.i(
|
|
|
|
'[OHOS_ACTIVITY_GOAL] '
|
|
|
|
'upload_success value=${_goalLogValue(goal)}',
|
|
|
|
);
|
|
|
|
case AppFailure(:final error):
|
|
|
|
AppLogger.i(
|
|
|
|
'[OHOS_ACTIVITY_GOAL] '
|
|
|
|
'upload_failed error=$error value=${_goalLogValue(goal)}',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool _hasGoal(V2ActivityTarget goal) {
|
|
|
|
return goal.move != null ||
|
|
|
|
goal.step != null ||
|
...
|
...
|
|