Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
438 commits
Select commit Hold shift + click to select a range
29746e0
Adds performance logging to updates to BotStateContext
steve1316 Sep 20, 2025
d4f47a5
Refactor context providers and add new SettingsProvider
steve1316 Sep 20, 2025
7fbe0ca
Adds performance logging utility
steve1316 Sep 20, 2025
1b3c195
Adds immediate settings saving functionality
steve1316 Sep 20, 2025
c9ab5e9
Move useEffect callback higher up the functional component
steve1316 Sep 20, 2025
ef57478
Remove unneeded context props from useSettingsManager
steve1316 Sep 20, 2025
5317367
Refactor message log updates in useSettingsManager for async processing
steve1316 Sep 20, 2025
131d88f
Prevent message log clearing and handle error while loading settings
steve1316 Sep 20, 2025
d91c545
Remove unneeded context props from useSettingsFileManager
steve1316 Sep 20, 2025
d76d419
Simplify prop usage for hooks in Settings page
steve1316 Sep 20, 2025
269b176
Change useEffect on mount to only add MessageLog listener
steve1316 Sep 20, 2025
4f638f3
Add useEffect callback to mark app as ready when the SQLite database …
steve1316 Sep 20, 2025
392939f
Add a manual save trigger for the Start button
steve1316 Sep 20, 2025
93c1575
Remove unused useEffect callback and state
steve1316 Sep 20, 2025
03df32f
Simplify logic to check ready status
steve1316 Sep 20, 2025
46b1a11
Ensures settings are saved immediately when the app goes to the backg…
steve1316 Sep 20, 2025
6642530
Saves settings before starting the bot
steve1316 Sep 20, 2025
4b1e69a
Remove unused saveSettingsNow() function
steve1316 Sep 20, 2025
17dab67
Add comment about importance of the useEffect callback to pass messag…
steve1316 Sep 20, 2025
4bba0ea
Remove message logging from PerformanceLogger
steve1316 Sep 20, 2025
7f69049
Refactor DatabaseManager for batch settings and simplify code
steve1316 Sep 20, 2025
623c1ce
Refactor code and add debounced saving in useSQLiteSettings and updat…
steve1316 Sep 20, 2025
f8a41fd
Refactor SettingsContext and useSettingsManager for updated names fro…
steve1316 Sep 20, 2025
330e00c
Refactor useBootstrap with updated names from useSQLiteSettings and r…
steve1316 Sep 20, 2025
a72535a
Bump Automation Library version to 2.0.9
steve1316 Sep 20, 2025
48cfccb
Fix state restoration crash involving react-native-screens
steve1316 Sep 20, 2025
4d9e27d
Add some logging messages to StartModule
steve1316 Sep 20, 2025
c541816
Add settings management using SQLite for Android
steve1316 Sep 20, 2025
628ba3b
Initializes SQLite settings with debugging logs in StartModule
steve1316 Sep 20, 2025
4682b68
Use SettingsHelper to replace usage of SharedPreferences for settings
steve1316 Sep 20, 2025
664eb69
Adjust printToLog() to properly use MessageLog's printToLog()
steve1316 Sep 20, 2025
088fec6
Adjust when the debug tests run versus regular bot operations
steve1316 Sep 20, 2025
fa40abd
Reverse the conditional check for the speed training header
steve1316 Sep 20, 2025
5416218
Replace some logging messages with printing to the console instead du…
steve1316 Sep 20, 2025
d773424
Initialize CustomImageUtils with Tesseract and setting the subfolder …
steve1316 Sep 20, 2025
4f4df24
Minor logging changes to CustomImageUtils
steve1316 Sep 20, 2025
7d207c1
Upgrade packages to Expo SDK 54
steve1316 Sep 21, 2025
7f3546e
Upgrade nativewind to fix compatibility with Expo SDK 54
steve1316 Sep 21, 2025
cde1f67
Fix errors and warnings from expo prebuild and expo-doctor for Expo S…
steve1316 Sep 21, 2025
dbe1ef3
Upgrade Android Gradle Build Tools to 8.13.0
steve1316 Sep 21, 2025
30d9065
Update .gitignore for generated image files by react-navigation
steve1316 Sep 23, 2025
e936d28
Add a new build command for creating release type apks
steve1316 Sep 23, 2025
b2c8d3b
Adds armeabi-v7a architecture support for React Native
steve1316 Sep 23, 2025
48ab4b4
Avoid compressing the android.index.bundle Javascript file for slight…
steve1316 Sep 23, 2025
3d1417c
Remove unused import
steve1316 Sep 23, 2025
4bae53f
Add com.airbnb.android:lottie as a Android dependency
steve1316 Sep 23, 2025
9defbc7
Update app icon and its mipmaps to be high-res
steve1316 Sep 23, 2025
bfe462c
Remove unused Android XML files
steve1316 Sep 23, 2025
d604894
Create SplashTheme and update AppTheme for Lottie
steve1316 Sep 23, 2025
bc8ef7f
Assign SplashTheme to MainActivity in the manifest
steve1316 Sep 23, 2025
dc6351c
Create animated splash screen as a JSON file
steve1316 Sep 23, 2025
9c43bc7
Add logic in MainActivity to display the animated splash screen using…
steve1316 Sep 23, 2025
ab1934b
Add react-native-boost as a dependency
steve1316 Sep 23, 2025
51b2ea4
Add react-native-boost as a babel plugin
steve1316 Sep 23, 2025
3e94b92
Add optional placeholder prop to CustomSlider
steve1316 Sep 27, 2025
42dfd71
Add placholders to the existing usages of CustomSlider
steve1316 Sep 27, 2025
743d8ee
Exposes default settings as a variable in the BotStateContext
steve1316 Sep 27, 2025
48191aa
Fix styles of AlertDialogs in Settings page for light and dark mode
steve1316 Sep 27, 2025
e69a028
Create CustomButton component
steve1316 Sep 27, 2025
f37f314
Replace usage of RNR Button with CustomButton
steve1316 Sep 27, 2025
5b9fabc
Improve styling to DraggablePriorityList in dark mode
steve1316 Sep 27, 2025
56cd505
Fix positioning of File Explorer warning message
steve1316 Sep 27, 2025
d24b342
Apply Prettier formatting to recent changes
steve1316 Sep 27, 2025
1ddee1a
Remove unused defaultOrder prop
steve1316 Sep 27, 2025
04a86e2
Adjust background of modals in the Training Settings page
steve1316 Sep 27, 2025
47f436b
Expose defaultSettings from BotStateContext
steve1316 Sep 27, 2025
081b0a5
Rename debug test variable names in BotStateContext to clarify their …
steve1316 Sep 27, 2025
a268e49
Update usage of renamed debug test variables in the frontend
steve1316 Sep 27, 2025
eaee154
Add expo-file-system as a dependency
steve1316 Sep 27, 2025
95689c8
Split up the build commands for debug and release build types
steve1316 Sep 27, 2025
35f46b7
Removes unnecessary string interpolation when formatting messages
steve1316 Sep 27, 2025
cdda330
Adjust decimal formatting of relationship bar fill percentages
steve1316 Sep 27, 2025
e7a9c77
Adjust usage of styles in CustomButton
steve1316 Sep 28, 2025
6743122
Fix bug where CustomCheckbox description would overflow past the screen
steve1316 Sep 28, 2025
6108c24
Adjust the background color of the input element in CustomSlider
steve1316 Sep 28, 2025
0901d21
Adjust styles for DraggablePriorityList
steve1316 Sep 28, 2025
1a72638
Make the Select All button an outline variant in renderStatSelector
steve1316 Sep 28, 2025
8b1d7be
Bump Automation Library version to 2.0.10
steve1316 Sep 28, 2025
0e7a6ad
Update comment for clarity
steve1316 Sep 28, 2025
8f124e7
Rename debug test variables in SettingsPrinter
steve1316 Sep 28, 2025
e604d3f
Update references to renamed debug test variables
steve1316 Sep 28, 2025
cbf3c7a
Update startSingleTrainingOCRTest() to test the training on screen
steve1316 Sep 28, 2025
3ee0387
Add image assets for startSingleTrainingOCRTest()
steve1316 Sep 28, 2025
4aee5c0
Handle rare bug where entire log is duplicated on the first run
steve1316 Sep 28, 2025
cf0529d
Modify styles of some UI elements for compatibility with BlueStacks e…
steve1316 Sep 28, 2025
2b1bb65
Remove expo-constants dependency from package.json
steve1316 Sep 28, 2025
af42e52
Fix versionCode usage in app's build.gradle
steve1316 Sep 28, 2025
9d54b79
Save app name in BotStateContext
steve1316 Sep 28, 2025
a23f7fb
Replace usage of expo-constants with expo-applications
steve1316 Sep 28, 2025
28b9f38
Set step size of font size changer to 1
steve1316 Sep 28, 2025
65ebd39
Fix CustomSelect not being visible on Bluestacks emulator
steve1316 Sep 30, 2025
ace2f08
Remove unused states in BotStateContext
steve1316 Sep 30, 2025
2e5df5e
Remove remaining references to SharedPreferences in CustomImageUtils
steve1316 Sep 30, 2025
fd36bc0
Add message id to the message event sent to the React frontend
steve1316 Sep 30, 2025
3bf0e0b
Fix log duplication in MessageLogContext by using message IDs
steve1316 Sep 30, 2025
8c3ddf2
Ensures that event listeners are properly removed when the components…
steve1316 Sep 30, 2025
0171e93
Update the debug image names from determineStatGainFromTraining()
steve1316 Sep 30, 2025
caea4cd
Applies stat gain boost for when reading stat gains from trainings
steve1316 Sep 30, 2025
fd742e2
Move Python scraper and data JSON files to the frontend
steve1316 Sep 30, 2025
ce162d4
Simplify arguments for Chrome initialization
steve1316 Oct 1, 2025
9576347
Add function to dismiss ad banner while scraping
steve1316 Oct 1, 2025
0821e12
Update scraper to grab race data from GameTora
steve1316 Oct 1, 2025
f71a821
Create safe_click() method to account for ads that do not show up bef…
steve1316 Oct 1, 2025
cb8ff50
Create races.json
steve1316 Oct 1, 2025
d44d281
Update game data
steve1316 Oct 1, 2025
2acec34
Update README to note that in-game graphics need to be set to Standard
steve1316 Oct 1, 2025
f84abe6
Fix labeled returns not breaking out of for loops
steve1316 Oct 1, 2025
91096c5
Adjust logging while testing analyzeTrainings()
steve1316 Oct 1, 2025
d39477e
Rename package name to address npm warning
steve1316 Oct 1, 2025
48d75cf
Update README to clarify that later versions of Bluestacks should als…
steve1316 Oct 1, 2025
9b5dec7
Update README to clarify usage on other emulators like MuMu
steve1316 Oct 1, 2025
bf4d04b
Set worker threads of Gradle from all cores to 4
steve1316 Oct 5, 2025
a2ccdce
Stop all Gradle daemons before initiating a build
steve1316 Oct 5, 2025
093c3bd
Fix the app not resuming from background in various situations
steve1316 Oct 5, 2025
cc284ef
Stop showing splash screen when app is resumed from background
steve1316 Oct 5, 2025
e912055
Memoize FlatList renderItem
steve1316 Oct 5, 2025
6271df7
Add edge case for only the plus sign during training stat gain analysis
steve1316 Oct 5, 2025
081a46d
Adjust Checkbox border styling
steve1316 Oct 5, 2025
110b069
Remove unused imports and code
steve1316 Oct 5, 2025
40563fc
Rename TextDetection.kt to TrainingEventRecognizer.kt.
steve1316 Oct 11, 2025
304ff85
Separate determineDateFromString() into its own file
steve1316 Oct 11, 2025
d97866a
Clean up SettingsPrinter and remove unused import and parameter
steve1316 Oct 11, 2025
1eead71
Cut down on code duplication for OCR in CustomImageUtils into their o…
steve1316 Oct 11, 2025
eb07ac3
Add support for icons in CustomButton
steve1316 Oct 14, 2025
cf63a37
Update descriptions of navigation links in Settings page
steve1316 Oct 14, 2025
52a8ace
Make the header stay at the top of the pages when scrolling
steve1316 Oct 14, 2025
2f2a14b
Create CustomScrollView component
steve1316 Oct 14, 2025
b42452c
Add racing plan settings to BotStateContext
steve1316 Oct 14, 2025
7b6e58e
Create Racing Plan Settings page
steve1316 Oct 14, 2025
19ec5a0
Add Racing Plan Settings page to the navigation stack
steve1316 Oct 14, 2025
75e8e72
Enable fade animation to the navigation stack
steve1316 Oct 14, 2025
b551979
Use CustomScrollView in MessageLog
steve1316 Oct 14, 2025
23d4fd4
Add navigation link to the Racing Plan Settings from the Racing Setti…
steve1316 Oct 14, 2025
ca9ef5f
Add FlashList as a dependency
steve1316 Oct 14, 2025
5513c34
Add check to make sure that missing settings are added to the database
steve1316 Oct 16, 2025
71ec663
Create Python helper function to calculate turn number for races
steve1316 Oct 16, 2025
460f4d0
Fix bug where certain races that have multiple dates would not be scr…
steve1316 Oct 16, 2025
45be239
Apply formatting
steve1316 Oct 16, 2025
ec019e7
Update races.json
steve1316 Oct 16, 2025
e3f32c1
Major refactor of Game.kt to reorganize code into multiple files by r…
steve1316 Oct 18, 2025
33a8ce8
Delete SettingsPrinter.kt
steve1316 Oct 18, 2025
1e22ea8
Replace usage of SettingsPrinter with settings string constructed by …
steve1316 Oct 18, 2025
d4eaa07
Minor code cleanup
steve1316 Oct 18, 2025
b82cee8
Change GameDateParser into a class
steve1316 Oct 18, 2025
e6adab4
Add optional suppressLogging parameter to database.saveSetting
steve1316 Oct 18, 2025
09fdcaa
Increaase duration threshold for performance logger to 500ms
steve1316 Oct 18, 2025
26faa4a
Add OCR test for date detection to the Settings page
steve1316 Oct 18, 2025
ca7d65c
Minor refactor
steve1316 Oct 18, 2025
2816508
Update determineDayString() to read the date string from the Race Lis…
steve1316 Oct 18, 2025
532435d
Create startDateOCRTest() function to test date detection
steve1316 Oct 18, 2025
68c3f40
Call Game's printToLog() instead of the library's printToLog()
steve1316 Oct 18, 2025
64e28e1
Create getDatabase() helper function for direct database access
steve1316 Oct 19, 2025
a366a15
Simplify database initialization in Android
steve1316 Oct 19, 2025
9b2006a
Fix when the formatted settings string is being saved to SQLite
steve1316 Oct 19, 2025
137b6ea
Create flushSQLiteForKotlin() to force WAL checkpoint for SQLite
steve1316 Oct 19, 2025
82de52b
Save formattedSettingsString to BotStateContext
steve1316 Oct 19, 2025
33294da
Save debugMode_startRaceListDetectionTest to BotStateContext
steve1316 Oct 19, 2025
9c9700c
Create new option to start the Race List detection test in the Settin…
steve1316 Oct 19, 2025
d37a59d
Add debugMode_startRaceListDetectionTest to the formatted settings st…
steve1316 Oct 19, 2025
d2ce036
Move decimalFormat to Game class
steve1316 Oct 19, 2025
9f6e33b
Save the data from races.json to SQLite
steve1316 Oct 19, 2025
041db28
Create extractRaceName() in CustomImageUtils.kt
steve1316 Oct 19, 2025
5a00a57
Create the Android test to detect races on the Race List screen
steve1316 Oct 19, 2025
ca63171
Add a new test to detect the aptitudes to the Settings page
steve1316 Oct 19, 2025
b86c36c
Rework determineAptitudes() to determine all aptitudes
steve1316 Oct 19, 2025
67e4b5d
Create Aptitudes data class
steve1316 Oct 19, 2025
18faa8f
Create the Android test to detect aptitudes on the Main screen
steve1316 Oct 19, 2025
4afe799
Update remaining reference from updatePreferredDistance() to updateAp…
steve1316 Oct 19, 2025
50c6aac
Add some image assets for the Aptitudes detection functionality
steve1316 Oct 19, 2025
1b84b6e
Add local buffering for slider value for CustomSlider for performance…
steve1316 Oct 22, 2025
478f2b4
Remove local states and cleaning up onValueChange callback for Custom…
steve1316 Oct 22, 2025
93eb7d3
Fix MessageLog not saving the formatted settings string to BotStateCo…
steve1316 Oct 22, 2025
69d3fc0
Change templateMatchConfidence and templateMatchCustomScale to decima…
steve1316 Oct 22, 2025
e4b1938
Change logcat tag for TrainingEventRecognizer
steve1316 Oct 22, 2025
a5de162
Add possible fix to rare looping issue due to skipRacing flag not bei…
steve1316 Oct 22, 2025
ac253d5
Add disabled props to NavigationLink component
steve1316 Oct 22, 2025
0942983
Update the NavigationLink in Racing Settings page with disabled props
steve1316 Oct 22, 2025
7ff59d3
Add CustomTitle with description to Racing Plan Settings page
steve1316 Oct 22, 2025
8031f52
Add lookAheadDays and smartRacingCheckInterval to BotStateContext
steve1316 Oct 22, 2025
c26dbe2
Add new options to Racing Plan Settings page to customize the look-ah…
steve1316 Oct 22, 2025
ca91a27
Major addition of the Racing Plan feature including refactoring of th…
steve1316 Oct 22, 2025
ccb22f8
Add preferredDistanceOverride to BotStateContext
steve1316 Oct 22, 2025
a216afa
Configure preferredDistanceOverride in Training Settings page
steve1316 Oct 22, 2025
a5e52c0
Create updatePreferredDistance() in Training.kt
steve1316 Oct 22, 2025
53198c7
Update the preferred distance whenever the aptitudes are being updated
steve1316 Oct 22, 2025
e980f52
Remove input validation from Input fields in Racing Plan Settings page
steve1316 Oct 22, 2025
c13b6c2
Adjust margin of Divider in Racing Plan Settings page
steve1316 Oct 22, 2025
5849ac7
Shorten the description of the Racing Plan settings page
steve1316 Oct 22, 2025
2c1001c
Set the priority of each user-selected race in the racing plan
steve1316 Oct 22, 2025
92787b0
Ensure that user-selected races are handled by the Smart Racing Plan …
steve1316 Oct 22, 2025
1b5f013
Fix compileSdk name to compileSdkVersion in app's build.gradle
steve1316 Oct 23, 2025
6f2c7d8
Define missing NDK version in root's build.gradle
steve1316 Oct 23, 2025
583bd29
Add enableRaceStrategyOverride and juniorYearRaceStrategy to BotState…
steve1316 Oct 23, 2025
b5069bb
Add new settings for overriding race strategy during Junior Year race…
steve1316 Oct 23, 2025
75b0e18
Add new image assets for race strategy override
steve1316 Oct 23, 2025
a5d05f3
Add race strategy override functionality to Racing.kt for Junior Year…
steve1316 Oct 23, 2025
dd22031
Add mustRestBeforeSummer to BotStateContext
steve1316 Oct 23, 2025
7daa495
Add new option to force the bot to rest in June before Summer Trainin…
steve1316 Oct 23, 2025
59a23b4
Add the logic to force the bot to rest in June before Summer Training
steve1316 Oct 23, 2025
6a89881
Add acupunctureOption to BotStateContext
steve1316 Oct 23, 2025
d891c18
Add option to set the option to select for the Acupuncture event in t…
steve1316 Oct 23, 2025
bcc2e2e
Update TrainingEventRecognizer to return the event title
steve1316 Oct 23, 2025
68e1f43
Update TrainingEvent.kt to handle special handling for the Acupunctur…
steve1316 Oct 23, 2025
762c984
Reduce frequency of flickering during drag and drop for DraggablePrio…
steve1316 Oct 25, 2025
4f8535e
Adjust comments in DraggablePriorityList component
steve1316 Oct 25, 2025
5d94be7
Only enable scrolling when dragging in DraggablePriorityList component
steve1316 Oct 25, 2025
5e33bcf
Adjust logging of SQLite frontend operations for clarity
steve1316 Oct 25, 2025
13d5fcc
Adjust Select All functionality in Training Settings page to add the …
steve1316 Oct 25, 2025
a1d6a7e
Adjust description of the Prioritization element in the Training Sett…
steve1316 Oct 25, 2025
972ecba
Set the default stringified data of the races to be sent over to the …
steve1316 Oct 25, 2025
387d01a
Set the default mapped data of the characters and supports to be sent…
steve1316 Oct 25, 2025
e45011b
Add specialEventOverrides mapping to BotStateContext
steve1316 Oct 25, 2025
2f42597
Add new options to override event options for certain events
steve1316 Oct 25, 2025
91dfb2f
Adjust MessageLog formatted settings string to include the recently a…
steve1316 Oct 25, 2025
7b5f468
Remove fixIncorrectCharacters() function from TrainingEventRecognizer…
steve1316 Oct 25, 2025
8aa9ef6
Set statPrioritization to a default array if it was empty
steve1316 Oct 25, 2025
7a4333e
Remove upward swipe when starting the Race detection in handleRaceEve…
steve1316 Oct 25, 2025
fa905dd
Add logic to handle special event overrides for Training Events
steve1316 Oct 25, 2025
f4944ce
Add optional hideScrollbar prop to CustomScrollView component
steve1316 Oct 25, 2025
027522c
Hide the scrollbar for the MessageLog component
steve1316 Oct 25, 2025
d420ed3
Add @expo/vector-icons as a dependency
steve1316 Oct 25, 2025
24ddca4
Use @expo/vector-icons instead of lucide-react-native for the tab ico…
steve1316 Oct 25, 2025
05ec893
Fix formatting of race names for Medium distances for Python scraper
steve1316 Oct 25, 2025
b79ad6e
Update races.json with the new Medium distance formatting for the names
steve1316 Oct 25, 2025
f537465
Increase delays for Python scraper for tooltips to appear
steve1316 Oct 25, 2025
e4b2ab0
Update data up to Meisho Doto 2025-10-21
steve1316 Oct 25, 2025
288e537
Adjust step size of CustomSliders in Settings page
steve1316 Oct 25, 2025
ed31a55
Remove input validation for daysToRunExtraRaces setting in RacingSett…
steve1316 Oct 25, 2025
5671e0c
Create getDecimalPlaces() helper function for CustomSlider component
steve1316 Oct 25, 2025
08ba8ea
Fix Input functionality of CustomSlider component when interacting wi…
steve1316 Oct 25, 2025
eabcc44
Remove decimal formatting of templateMatchCustomScale in MessageLog c…
steve1316 Oct 25, 2025
2039bb2
Adjust training event override names in the mapping
steve1316 Oct 25, 2025
c4348d1
Centralize DB initialization by removing useSQLiteSettings hook
steve1316 Oct 25, 2025
a9553c2
Make debugMode setting in Game.kt publically accessible
steve1316 Oct 25, 2025
92bc17a
Refactor of JSONObject import
steve1316 Oct 25, 2025
5630c9e
Made logging improvements to Racing.kt
steve1316 Oct 25, 2025
5f468c4
Log the JSON object length of character and support event data in Tra…
steve1316 Oct 25, 2025
853828c
Clamp the confidence score of TrainingEventRecognizer with decimalFormat
steve1316 Oct 25, 2025
ede491a
Fix racing strategy recovery not working due to case mismatches
steve1316 Oct 25, 2025
a6cca5d
Move SettingsHelper calls to the top of Racing.kt
steve1316 Oct 25, 2025
3f1c184
Remove unused fields in FullRaceData
steve1316 Oct 25, 2025
47a65c3
Comment out debug logging for planned race evaluations
steve1316 Oct 25, 2025
226db37
Dismiss the warning popup about racing too many times when doing a ma…
steve1316 Oct 25, 2025
4387a83
Fix smart racing condition to not apply for Junior Year
steve1316 Oct 25, 2025
c20cd5e
Log that smart racing will not apply for Junior Year
steve1316 Oct 25, 2025
bc1e1dd
Move day number check outside of isPlannedRaceEligible() and use days…
steve1316 Oct 25, 2025
f773197
Keep track of seperate internal turn number to run planned races inde…
steve1316 Oct 25, 2025
7118b9a
Bump Opportunity Cost thresholds to be stricter in shouldRaceNow()
steve1316 Oct 25, 2025
c5d7ad3
Delete unused data files from Android project
steve1316 Oct 26, 2025
63abcca
Add positive and negative weights to statuses for training event opti…
steve1316 Oct 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
182 changes: 76 additions & 106 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,115 +1,85 @@
# Compiled class file
*.class
# OSX
#
.DS_Store

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

/opencv

# Built application files
*.apk
*.aar
*.ap_
*.aab

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/
# Uncomment the following line in case you need and you don't have the release build type files in your app
# release/

# Gradle files
.gradle/
# Xcode
#
build/

# Local configuration file (sdk path, etc)
*.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

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
# Android Studio 3 in .gitignore file.
.idea/caches
.idea/modules.xml
# Comment next line if keeping position of elements in Navigation Editor is relevant for you
.idea/navEditor.xml

# Keystore files
# Uncomment the following lines if you do not want to check your keystore files in.
#*.jks
#*.keystore

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
*.hprof
.cxx/
*.keystore
!debug.keystore
.kotlin/

# Google Services (e.g. APIs or Firebase)
# google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json
# node.js
#
node_modules/
npm-debug.log
yarn-error.log

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
#
# 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
android/app/src/main/assets/index.android.bundle

android/app/src/main/raw/

# Expo
.expo/
dist/
web-build/
expo-env.d.ts

# Version control
vcs.xml

# lint
lint/intermediates/
lint/generated/
lint/outputs/
lint/tmp/
# lint/reports/

# Android Profiling
*.hprof
.idea/
30 changes: 11 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ This project is purely for educational purposes to learn about Android automatio
- Android Device or Emulator (Nougat 7.0+)
- For the best performance and stability on phones, the device needs to be at 1080p display resolution. The speed is also best at 1080p and for other resolutions, it becomes dependent on the manual scale that you can set in the settings. Right now it defaults to 1.0 which uses 1080p as the baseline. You can determine what scales may be good for you with the template match test that you can enable in the settings as well.
- If you change the display resolution while the overlay button is still active, you will need to restart the app in order for the display changes to persist to the `MediaProjection` service.
- Tested emulator was on Bluestacks 5 (Pie 64-bit). The following setup is required:
- Tested emulator was on Bluestacks 5 (Pie 64-bit). Later versions of Bluestacks also should work. The following setup is required:
- Portrait Mode needs to be forced on always.
- Bluestacks itself needs to be updated to the latest version to avoid Uma Musume crashing.
- In the Bluestacks Settings > Phone, the predefined profile needs to be set to a modern high-end phone like the Samsung Galaxy S22.
Expand All @@ -26,6 +26,10 @@ This project is purely for educational purposes to learn about Android automatio
- 4GB Memory
- Display resolution set to Portrait 1080 x 1920
- Pixel density 240 DPI (Medium)
- Note that other emulators like MuMu may have their 1080p at a different DPI other than 240. MuMu by default uses 480 DPI which will throw template matching and OCR off. It is highly recommended to force it to 240 DPI in the emulator settings for the best performance. The following are tested resolutions + DPIs:
- 1080x1920 240 DPI (from Bluestacks emulator default settings)
- 1080x2340 450 DPI (from native Samsung phone)
- The in-game graphics need to be set to `Standard` instead of `Basic` for best performance.

# Features

Expand Down Expand Up @@ -88,24 +92,11 @@ Make sure to use 1.0 scaling, as well as 80% confidence for best results in 1080

1. Download and extract the project repository.
2. Go to `https://opencv.org/releases/` and download OpenCV (make sure to download the Android version of OpenCV) and extract it. As of 2025-07-20, the OpenCV version used in this project is 4.12.0.
3. Create a new folder inside the root of the project repository named `opencv` and copy the extracted files in `/OpenCV-android-sdk/sdk/` from Step 2 into it.
4. Open the project repository in `Android Studio`.
5. Open up the `opencv` module's `build.gradle`. At the end of the file, paste the following JVM Toolchain block:

```kotlin
// Explicitly set Kotlin JVM toolchain to Java 17 to match the OpenCV module's Java target.
// Without this, Kotlin defaults to JVM 21 (especially with Kotlin 2.x), which causes a build failure:
// "Inconsistent JVM Target Compatibility Between Java and Kotlin Tasks".
// See: https://kotl.in/gradle/jvm/toolchain for details.
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
```

6. You can now build and run on your Android Device or build your own .apk file.
7. You can set `universalApk` to `true` in the app's `build.gradle` to build a one-for-all .apk file or adjust the `include 'arm64-v8a'` to customize which ABI to build the .apk file for.
3. Create a new folder inside the `/android` folder named `opencv` and copy the extracted files in `/OpenCV-android-sdk/sdk/` from Step 2 into it.
4. Open up the root of the folder in your preferred IDE/terminal and execute `yarn install` to install the React Native dependencies from the `package.json`.
5. Your dev environment should now be set up. You can run the app on your connected Android device/emulator to have hot-reload changes for the frontend via the Metro HTTP server with `yarn android`. You can also now build the APK with `yarn build` or `yarn build:clean` if you encounter problems.
6. You can set `universalApk` to `true` in the app's `build.gradle` to build a one-for-all .apk file or adjust the `include 'arm64-v8a'` to customize which ABI to build the .apk file for.
7. Note: New to React Native, you should not run the app directly from Android Studio. Have the Metro bundler run the app for you.

# Technologies Used

Expand All @@ -117,3 +108,4 @@ kotlin {
6. [Tesseract4Android - For performing OCR on the screen](https://github.com/adaptech-cz/Tesseract4Android)
7. [string-similarity - For comparing string similarities during text detection](https://github.com/rrice/java-string-similarity)
8. [AppUpdater - For automatically checking and notifying the user for new app updates](https://github.com/javiersantos/AppUpdater)
9. [React Native - Used as the frontend](https://reactnative.dev/)
118 changes: 118 additions & 0 deletions android/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

/opencv

# Built application files
*.apk
*.aar
*.ap_
*.aab

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/
# Uncomment the following line in case you need and you don't have the release build type files in your app
# release/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
# Android Studio 3 in .gitignore file.
.idea/caches
.idea/modules.xml
# Comment next line if keeping position of elements in Navigation Editor is relevant for you
.idea/navEditor.xml

# Keystore files
# Uncomment the following lines if you do not want to check your keystore files in.
#*.jks
#*.keystore

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
.cxx/

# Google Services (e.g. APIs or Firebase)
# google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md

# Version control
vcs.xml

# lint
lint/intermediates/
lint/generated/
lint/outputs/
lint/tmp/
# lint/reports/

# Android Profiling
*.hprof
.idea/

# Generated image files by react-navigation
app/src/main/drawable-*/
Loading