From 77dd285781388236a6dfc2130422db03f6f34965 Mon Sep 17 00:00:00 2001 From: Vishnu Ravi Date: Fri, 5 Apr 2024 11:37:37 -0400 Subject: [PATCH] Create daily survey task --- StrokeCog.xcodeproj/project.pbxproj | 12 +++++ StrokeCog/Home.swift | 10 ---- StrokeCog/Map/OptionsPanel.swift | 12 ++++- StrokeCog/Survey/DailySurveyTask.swift | 73 ++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 StrokeCog/Survey/DailySurveyTask.swift diff --git a/StrokeCog.xcodeproj/project.pbxproj b/StrokeCog.xcodeproj/project.pbxproj index 3db152d..1e0379f 100644 --- a/StrokeCog.xcodeproj/project.pbxproj +++ b/StrokeCog.xcodeproj/project.pbxproj @@ -73,6 +73,7 @@ 63497B732BBF855E001F8419 /* OptionsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63497B722BBF855E001F8419 /* OptionsPanel.swift */; }; 63BBF8162BB8993B006890CE /* StudyIDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63BBF8152BB8993B006890CE /* StudyIDView.swift */; }; 63BBF8192BB89CF7006890CE /* studyIDs.csv in Resources */ = {isa = PBXBuildFile; fileRef = 63BBF8182BB89CF7006890CE /* studyIDs.csv */; }; + 63EA5F7B2BC04F8400A48590 /* DailySurveyTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EA5F7A2BC04F8400A48590 /* DailySurveyTask.swift */; }; 63F4C3992BBCCC300033D985 /* MapboxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F4C3982BBCCC300033D985 /* MapboxView.swift */; }; 63F4C39B2BBCCCF80033D985 /* LocationModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F4C39A2BBCCCF80033D985 /* LocationModule.swift */; }; 63F4C39D2BBCCD200033D985 /* LocationUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F4C39C2BBCCD200033D985 /* LocationUtils.swift */; }; @@ -156,6 +157,7 @@ 63497B722BBF855E001F8419 /* OptionsPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionsPanel.swift; sourceTree = ""; }; 63BBF8152BB8993B006890CE /* StudyIDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyIDView.swift; sourceTree = ""; }; 63BBF8182BB89CF7006890CE /* studyIDs.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = studyIDs.csv; sourceTree = ""; }; + 63EA5F7A2BC04F8400A48590 /* DailySurveyTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailySurveyTask.swift; sourceTree = ""; }; 63F4C3982BBCCC300033D985 /* MapboxView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapboxView.swift; sourceTree = ""; }; 63F4C39A2BBCCCF80033D985 /* LocationModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationModule.swift; sourceTree = ""; }; 63F4C39C2BBCCD200033D985 /* LocationUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationUtils.swift; sourceTree = ""; }; @@ -347,6 +349,14 @@ path = Location; sourceTree = ""; }; + 63EA5F792BC04F6E00A48590 /* Survey */ = { + isa = PBXGroup; + children = ( + 63EA5F7A2BC04F8400A48590 /* DailySurveyTask.swift */, + ); + path = Survey; + sourceTree = ""; + }; 653A2544283387FE005D4D48 = { isa = PBXGroup; children = ( @@ -372,6 +382,7 @@ 653A254F283387FE005D4D48 /* StrokeCog */ = { isa = PBXGroup; children = ( + 63EA5F792BC04F6E00A48590 /* Survey */, 653A2550283387FE005D4D48 /* StrokeCog.swift */, 2F5E32BC297E05EA003432F8 /* StrokeCogDelegate.swift */, 2FF53D8C2A8729D600042B76 /* StrokeCogStandard.swift */, @@ -672,6 +683,7 @@ 56F6F2A02AB441930022FE5A /* ContributionsList.swift in Sources */, 566155292AB8447C00209B80 /* Package+LicenseType.swift in Sources */, 5680DD392AB8983D004E6D4A /* PackageCell.swift in Sources */, + 63EA5F7B2BC04F8400A48590 /* DailySurveyTask.swift in Sources */, 2F5E32BD297E05EA003432F8 /* StrokeCogDelegate.swift in Sources */, 2FE5DC5229EDD7FA004B9AB4 /* StrokeCogScheduler.swift in Sources */, 63BBF8162BB8993B006890CE /* StudyIDView.swift in Sources */, diff --git a/StrokeCog/Home.swift b/StrokeCog/Home.swift index fda9681..61fee05 100644 --- a/StrokeCog/Home.swift +++ b/StrokeCog/Home.swift @@ -12,20 +12,10 @@ import SwiftUI struct HomeView: View { - enum Tabs: String { - case schedule - case contact - case mockUpload - case map - case profile - } - static var accountEnabled: Bool { !FeatureFlags.disableFirebase && !FeatureFlags.skipOnboarding } - - @AppStorage(StorageKeys.homeTabSelection) private var selectedTab = Tabs.schedule @State private var presentingAccount = false diff --git a/StrokeCog/Map/OptionsPanel.swift b/StrokeCog/Map/OptionsPanel.swift index ea62383..7947d3c 100644 --- a/StrokeCog/Map/OptionsPanel.swift +++ b/StrokeCog/Map/OptionsPanel.swift @@ -5,7 +5,8 @@ // Created by Vishnu Ravi on 4/4/24. // - +import ResearchKit +import ResearchKitSwiftUI import Spezi import SwiftUI @@ -33,7 +34,14 @@ struct OptionsPanel: View { ) } .sheet(isPresented: $showingSurvey) { - // TODO: Launch StrokeCog Survey + ORKOrderedTaskView(tasks: DailySurveyTask(identifier: "DailySurveyTask")) { result in + guard case let .completed(taskResult) = result else { + return + } + + // TODO: Save result to Firestore + self.showingSurvey.toggle() + } } } diff --git a/StrokeCog/Survey/DailySurveyTask.swift b/StrokeCog/Survey/DailySurveyTask.swift new file mode 100644 index 0000000..4aacff8 --- /dev/null +++ b/StrokeCog/Survey/DailySurveyTask.swift @@ -0,0 +1,73 @@ +// +// DailySurveyTask.swift +// StrokeCog +// +// Created by Vishnu Ravi on 4/5/24. +// + +import Foundation +import ResearchKit + +class DailySurveyTask: ORKOrderedTask { + convenience init(identifier: String) { + // Initialize the array to hold the steps of the survey + var steps = [ORKStep]() + + // Question 1: Close friends or family seen today + let answerFormat1 = ORKAnswerFormat.choiceAnswerFormat(with: .singleChoice, textChoices: [ + ORKTextChoice(text: "0", value: 0 as NSNumber), + ORKTextChoice(text: "1-4", value: 1 as NSNumber), + ORKTextChoice(text: "5-10", value: 2 as NSNumber), + ORKTextChoice(text: "10 or more", value: 3 as NSNumber) + ]) + let question1Step = ORKQuestionStep( + identifier: "Question1", + title: "Social Interaction", + question: "How many close friends or family did you see today face to face?", + answer: answerFormat1 + ) + steps.append(question1Step) + + // Question 2: Times left house + let answerFormat2 = ORKAnswerFormat.integerAnswerFormat(withUnit: nil) + answerFormat2.minimum = 0 + let question2Step = ORKQuestionStep( + identifier: "Question2", + title: "Leaving the House", + question: "How many times today did you leave your house and engage meaningfully with others?", + answer: answerFormat2 + ) + steps.append(question2Step) + + // Question 3: Happiness + let answerFormat3 = ORKAnswerFormat.booleanAnswerFormat() + let question3Step = ORKQuestionStep( + identifier: "Question3", + title: "Emotional Well-being", + question: "I was happy", + answer: answerFormat3 + ) + steps.append(question3Step) + + // Question 4: Fatigue + let answerFormat4 = ORKAnswerFormat.scale( + withMaximumValue: 4, + minimumValue: 0, + defaultValue: 0, + step: 1, + vertical: false, + maximumValueDescription: "Very much", + minimumValueDescription: "Not at all" + ) + let question4Step = ORKQuestionStep( + identifier: "Question4", + title: "Physical Well-being", + question: "I feel fatigued", + answer: answerFormat4 + ) + steps.append(question4Step) + + // Initialize the ORKOrderedTask with the steps array + self.init(identifier: identifier, steps: steps) + } +}