From fd42cead73098e40362d94f40d6ba86a46fad3c6 Mon Sep 17 00:00:00 2001 From: Sarah Jennings Date: Sat, 21 Feb 2026 03:28:59 -0800 Subject: [PATCH 1/4] Add README for environment set up --- README.md | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..c920872 --- /dev/null +++ b/README.md @@ -0,0 +1,99 @@ +# AlarmFLow + +This is a guide that explains how to set up a React Native development environment using Android Studio + +--- + +## Install Node.js + +You'll want to install the **LTS version**, using Chocolatey: + +Install Chocolatey in administrative mode on your terminal with the following command: +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + +And then follow the instructions for your system to install Node.js here: +https://nodejs.org + +Verify installation with: +node -v +npm -v + +## Install Java JDK 17 + +Go to: https://adoptium.net/temurin/releases?version=17&os=any&arch=any + +And install JDK17. Verify with: + +java -version + +## Install Android Studio + +Install Android Studios. We are using Otter 3: + +https://developer.android.com/studio/archive + +Install with default options, and make sure the following components are installed: + +*Android SDK +*SDK Platform Tools +*SDK Build Tools +*Android Emulator +*Virtual Device Manager + +## Install Android 16 SDK + +Open Android Studio and click More Actions -> SDK Manager + +Under SDK Platforms, select: **Android 16 ("Baklava") + +Under SDK Tools, ensure the following are installed: +*Android SDK Build Tools +*Android Emulator +*Android SDK Platform Tools + +And click Apply + +## Configure Environment Variables + +On your system open: Edit System Environment Variables + +Click: Environment Variables + +Create: ANDROID_HOME + +Variable Name: ANDROID_HOME +Variable Value: C:\Users\YOUR_USERNAME\AppData\Local\Android\Sdk + +And add to PATH: +%ANDROID_HOME%\platform-tools +%ANDROID_HOME%\emulator + +Then restart your computer + +## Create a React Native Project + +In Command Prompt or PowerShell: + +npx @react-native-community/cli init AppName + +Enter project: cd AppName + +## Create Android Emulator + +Click: More Actions -> Virtual Device Manager -> Create Device + +Select: Pixel 8 + +Click: Next -> Android 16 ("Buklava") -> Finish + +Start Emulator + +To make sure the app is running, run the following command to open Metro: + +npx react-native start + +And in a separate terminal: + +npx react-native run-android + +And the app should launch! \ No newline at end of file From 8cff14a8c0afacca0227b8d6fdf596fa83bd2a5b Mon Sep 17 00:00:00 2001 From: Sarah Jennings Date: Mon, 23 Feb 2026 11:03:14 -0800 Subject: [PATCH 2/4] Basic alarm app --- AlarmApp | 1 + 1 file changed, 1 insertion(+) create mode 160000 AlarmApp diff --git a/AlarmApp b/AlarmApp new file mode 160000 index 0000000..5c4669a --- /dev/null +++ b/AlarmApp @@ -0,0 +1 @@ +Subproject commit 5c4669a991c0a3a6c48c26655e14968d9e9e11d0 From 7c41ff22e0e1dd5eb929f33bf9618fd919ef3b38 Mon Sep 17 00:00:00 2001 From: Sarah Jennings Date: Mon, 23 Feb 2026 11:07:07 -0800 Subject: [PATCH 3/4] Remove nested git repo from AlarmApp --- AlarmApp | 1 - 1 file changed, 1 deletion(-) delete mode 160000 AlarmApp diff --git a/AlarmApp b/AlarmApp deleted file mode 160000 index 5c4669a..0000000 --- a/AlarmApp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5c4669a991c0a3a6c48c26655e14968d9e9e11d0 From 77225b4be8e17c357b0da300666447931162c19f Mon Sep 17 00:00:00 2001 From: Sarah Jennings Date: Mon, 23 Feb 2026 11:07:23 -0800 Subject: [PATCH 4/4] Alarm app --- AlarmApp/.bundle/config | 2 + AlarmApp/.eslintrc.js | 4 + AlarmApp/.gitignore | 75 + AlarmApp/.prettierrc.js | 5 + AlarmApp/.watchmanconfig | 1 + AlarmApp/App.tsx | 83 + AlarmApp/Gemfile | 16 + AlarmApp/README.md | 97 + AlarmApp/__tests__/App.test.tsx | 13 + AlarmApp/android/app/build.gradle | 119 + AlarmApp/android/app/debug.keystore | Bin 0 -> 2257 bytes AlarmApp/android/app/proguard-rules.pro | 10 + .../android/app/src/main/AndroidManifest.xml | 27 + .../main/java/com/alarmapp/MainActivity.kt | 22 + .../main/java/com/alarmapp/MainApplication.kt | 27 + .../res/drawable/rn_edit_text_material.xml | 37 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 9 + AlarmApp/android/build.gradle | 21 + AlarmApp/android/gradle.properties | 44 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45457 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + AlarmApp/android/gradlew | 251 + AlarmApp/android/gradlew.bat | 99 + AlarmApp/android/settings.gradle | 6 + AlarmApp/app.json | 4 + AlarmApp/babel.config.js | 3 + AlarmApp/index.js | 9 + AlarmApp/ios/.xcode.env | 11 + .../ios/AlarmApp.xcodeproj/project.pbxproj | 475 + .../xcshareddata/xcschemes/AlarmApp.xcscheme | 88 + AlarmApp/ios/AlarmApp/AppDelegate.swift | 48 + .../AppIcon.appiconset/Contents.json | 53 + .../AlarmApp/Images.xcassets/Contents.json | 6 + AlarmApp/ios/AlarmApp/Info.plist | 59 + AlarmApp/ios/AlarmApp/LaunchScreen.storyboard | 47 + AlarmApp/ios/AlarmApp/PrivacyInfo.xcprivacy | 37 + AlarmApp/ios/Podfile | 34 + AlarmApp/jest.config.js | 3 + AlarmApp/metro.config.js | 11 + AlarmApp/package-lock.json | 11967 ++++++++++++++++ AlarmApp/package.json | 42 + AlarmApp/tsconfig.json | 8 + 53 files changed, 13883 insertions(+) create mode 100644 AlarmApp/.bundle/config create mode 100644 AlarmApp/.eslintrc.js create mode 100644 AlarmApp/.gitignore create mode 100644 AlarmApp/.prettierrc.js create mode 100644 AlarmApp/.watchmanconfig create mode 100644 AlarmApp/App.tsx create mode 100644 AlarmApp/Gemfile create mode 100644 AlarmApp/README.md create mode 100644 AlarmApp/__tests__/App.test.tsx create mode 100644 AlarmApp/android/app/build.gradle create mode 100644 AlarmApp/android/app/debug.keystore create mode 100644 AlarmApp/android/app/proguard-rules.pro create mode 100644 AlarmApp/android/app/src/main/AndroidManifest.xml create mode 100644 AlarmApp/android/app/src/main/java/com/alarmapp/MainActivity.kt create mode 100644 AlarmApp/android/app/src/main/java/com/alarmapp/MainApplication.kt create mode 100644 AlarmApp/android/app/src/main/res/drawable/rn_edit_text_material.xml create mode 100644 AlarmApp/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 AlarmApp/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 AlarmApp/android/app/src/main/res/values/strings.xml create mode 100644 AlarmApp/android/app/src/main/res/values/styles.xml create mode 100644 AlarmApp/android/build.gradle create mode 100644 AlarmApp/android/gradle.properties create mode 100644 AlarmApp/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 AlarmApp/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 AlarmApp/android/gradlew create mode 100644 AlarmApp/android/gradlew.bat create mode 100644 AlarmApp/android/settings.gradle create mode 100644 AlarmApp/app.json create mode 100644 AlarmApp/babel.config.js create mode 100644 AlarmApp/index.js create mode 100644 AlarmApp/ios/.xcode.env create mode 100644 AlarmApp/ios/AlarmApp.xcodeproj/project.pbxproj create mode 100644 AlarmApp/ios/AlarmApp.xcodeproj/xcshareddata/xcschemes/AlarmApp.xcscheme create mode 100644 AlarmApp/ios/AlarmApp/AppDelegate.swift create mode 100644 AlarmApp/ios/AlarmApp/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 AlarmApp/ios/AlarmApp/Images.xcassets/Contents.json create mode 100644 AlarmApp/ios/AlarmApp/Info.plist create mode 100644 AlarmApp/ios/AlarmApp/LaunchScreen.storyboard create mode 100644 AlarmApp/ios/AlarmApp/PrivacyInfo.xcprivacy create mode 100644 AlarmApp/ios/Podfile create mode 100644 AlarmApp/jest.config.js create mode 100644 AlarmApp/metro.config.js create mode 100644 AlarmApp/package-lock.json create mode 100644 AlarmApp/package.json create mode 100644 AlarmApp/tsconfig.json diff --git a/AlarmApp/.bundle/config b/AlarmApp/.bundle/config new file mode 100644 index 0000000..848943b --- /dev/null +++ b/AlarmApp/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/AlarmApp/.eslintrc.js b/AlarmApp/.eslintrc.js new file mode 100644 index 0000000..187894b --- /dev/null +++ b/AlarmApp/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/AlarmApp/.gitignore b/AlarmApp/.gitignore new file mode 100644 index 0000000..de99955 --- /dev/null +++ b/AlarmApp/.gitignore @@ -0,0 +1,75 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore +.kotlin/ + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/AlarmApp/.prettierrc.js b/AlarmApp/.prettierrc.js new file mode 100644 index 0000000..06860c8 --- /dev/null +++ b/AlarmApp/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + arrowParens: 'avoid', + singleQuote: true, + trailingComma: 'all', +}; diff --git a/AlarmApp/.watchmanconfig b/AlarmApp/.watchmanconfig new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/AlarmApp/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/AlarmApp/App.tsx b/AlarmApp/App.tsx new file mode 100644 index 0000000..f5dbafb --- /dev/null +++ b/AlarmApp/App.tsx @@ -0,0 +1,83 @@ +import React, { useState, useEffect } from 'react'; +import { + View, + Text, + Button, + Alert, + StyleSheet, + } from 'react-native'; + +import DateTimePicker from '@react-native-community/datetimepicker'; + +export default function App() { + const [alarmTime, setAlarmTime] = useState(null); + const [showPicker, setShowPicker] = useState(false); + const [alarmSet, setAlarmSet] = useState(false); + + // check every second + useEffect(() => { + const interval = setInterval(() => { + if (!alarmTime || !alarmSet) return; + + const now = new Date(); + if (now.getHours() === alarmTime?.getHours() && now.getMinutes() === alarmTime.getMinutes() && now.getSeconds() === 0) { + Alert.alert("Wake up!!!"); + setAlarmSet(false); + } + }, 1000); + + return () => clearInterval(interval); + }, [alarmTime, alarmSet]); + + const onChange = (event: any, selectedDate?: Date) => { + setShowPicker(false); + if (selectedDate) { + setAlarmTime(selectedDate); + setAlarmSet(true); + } + }; + + return ( + + + Alarm App + + +