Commit c2cb0f2d authored by 王品堯's avatar 王品堯

HA-52 調整metadata的判斷, 調整取得血壓、睡眠、步數的回傳值, 增加參數改變步數interval

parent 9175a4f4
......@@ -11,6 +11,7 @@
@interface RCTAppleHealthKit (Methods_Fitness)
- (void)fitness_getStepCountOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_geStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_saveSteps:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_initializeStepEventObserver:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
......
......@@ -49,6 +49,40 @@
}
- (void)fitness_geStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit countUnit]];
NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit];
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
if(startDate == nil){
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
}
HKQuantityType *stepCountType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
NSPredicate * predicate = [RCTAppleHealthKit predicateForSamplesBetweenDates:startDate endDate:endDate];
[self fetchQuantitySamplesOfType:stepCountType
unit:unit
predicate:predicate
ascending:ascending
limit:limit
completion:^(NSArray *results, NSError *error) {
if(results){
callback(@[[NSNull null], results]);
return;
} else {
NSLog(@"error getting heart rate samples: %@", error);
callback(@[RCTMakeError(@"error getting heart rate samples", nil, nil)]);
return;
}
}];
}
- (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit countUnit]];
......@@ -56,6 +90,7 @@
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
NSString *gap = [input objectForKey: @"gap"];
if(startDate == nil){
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
......@@ -69,6 +104,7 @@
endDate:endDate
ascending:ascending
limit:limit
gap:gap
completion:^(NSArray *arr, NSError *err){
if (err != nil) {
NSLog(@"error with fetchCumulativeSumStatisticsCollection: %@", err);
......
......@@ -107,11 +107,40 @@
HKQuantitySample *bloodPressureSystolicValue = [bloodPressureValues objectsForType:systolicType].anyObject;
HKQuantitySample *bloodPressureDiastolicValue = [bloodPressureValues objectsForType:diastolicType].anyObject;
NSString *deviceName = bloodPressureSystolicValue.device.name ? bloodPressureSystolicValue.device.name : @"";
NSString *deviceManufacturer = bloodPressureSystolicValue.device.manufacturer ? bloodPressureSystolicValue.device.manufacturer : @"";
NSString *deviceHardwareVer = bloodPressureSystolicValue.device.hardwareVersion ? bloodPressureSystolicValue.device.hardwareVersion : @"";
NSString *deviceSoftwareVer = bloodPressureSystolicValue.device.softwareVersion ? bloodPressureSystolicValue.device.softwareVersion : @"";
NSString *sourceName = bloodPressureSystolicValue.sourceRevision.source.name;
NSString *sourceId = bloodPressureSystolicValue.sourceRevision.source.bundleIdentifier;
NSString *uuid = bloodPressureSystolicValue.UUID.UUIDString;
NSError *error;
NSDictionary *metaDict;
if(bloodPressureSystolicValue.metadata == nil){
metaDict = [[NSDictionary alloc] init];
}else{
metaDict = bloodPressureSystolicValue.metadata;
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:metaDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *elem = @{
@"bloodPressureSystolicValue" : @([bloodPressureSystolicValue.quantity doubleValueForUnit:unit]),
@"bloodPressureDiastolicValue" : @([bloodPressureDiastolicValue.quantity doubleValueForUnit:unit]),
@"startDate" : [sample valueForKey:@"startDate"],
@"endDate" : [sample valueForKey:@"endDate"],
@"deviceName" : deviceName,
@"deviceManufacturer" : deviceManufacturer,
@"deviceHardware" : deviceHardwareVer,
@"deviceSoftware" : deviceSoftwareVer,
@"sourceName" : sourceName,
@"sourceId" : sourceId,
@"unit" : unit.description,
@"uuid" : uuid,
@"metadata" : metadata
};
[data addObject:elem];
......
......@@ -36,6 +36,7 @@
endDate:(NSDate *)endDate
ascending:(BOOL)asc
limit:(NSUInteger)lim
gap:(NSString *)gap
completion:(void (^)(NSArray *, NSError *))completionHandler;
......
......@@ -93,7 +93,13 @@
NSString *uuid = sample.UUID.UUIDString;
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:sample.metadata options:NSJSONWritingPrettyPrinted error:&error];
NSDictionary *metaDict;
if(sample.metadata == nil){
metaDict = [[NSDictionary alloc] init];
}else{
metaDict = sample.metadata;
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:metaDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *elem = @{
......@@ -186,10 +192,38 @@
break;
}
NSString *deviceName = sample.device.name ? sample.device.name : @"";
NSString *deviceManufacturer = sample.device.manufacturer ? sample.device.manufacturer : @"";
NSString *deviceHardwareVer = sample.device.hardwareVersion ? sample.device.hardwareVersion : @"";
NSString *deviceSoftwareVer = sample.device.softwareVersion ? sample.device.softwareVersion : @"";
NSString *sourceName = sample.sourceRevision.source.name;
NSString *sourceId = sample.sourceRevision.source.bundleIdentifier;
NSString *uuid = sample.UUID.UUIDString;
NSError *error;
NSDictionary *metaDict;
if(sample.metadata == nil){
metaDict = [[NSDictionary alloc] init];
}else{
metaDict = sample.metadata;
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:metaDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *elem = @{
@"value" : valueString,
@"startDate" : startDateString,
@"endDate" : endDateString,
@"deviceName" : deviceName,
@"deviceManufacturer" : deviceManufacturer,
@"deviceHardware" : deviceHardwareVer,
@"deviceSoftware" : deviceSoftwareVer,
@"sourceName" : sourceName,
@"sourceId" : sourceId,
@"uuid" : uuid,
@"metadata" : metadata
};
[data addObject:elem];
......@@ -393,11 +427,16 @@
endDate:(NSDate *)endDate
ascending:(BOOL)asc
limit:(NSUInteger)lim
gap:(NSString *)gap
completion:(void (^)(NSArray *, NSError *))completionHandler {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *interval = [[NSDateComponents alloc] init];
if([gap isEqual: @"hour"]){
interval.hour = 1;
}else {
interval.day = 1;
}
NSDateComponents *anchorComponents = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
......
......@@ -105,6 +105,11 @@ RCT_EXPORT_METHOD(getStepCount:(NSDictionary *)input callback:(RCTResponseSender
[self fitness_getStepCountOnDay:input callback:callback];
}
RCT_EXPORT_METHOD(getStepCountSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback)
{
[self fitness_geStepSamples:input callback:callback];
}
RCT_EXPORT_METHOD(getDailyStepCountSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback)
{
[self fitness_getDailyStepSamples:input callback:callback];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment