Bläddra i källkod

calculation of sight setting

master
Flo Smilari 3 år sedan
förälder
incheckning
5ce83ec5ca

Binär
.gradle/7.3.3/executionHistory/executionHistory.bin Visa fil


Binär
.gradle/7.3.3/executionHistory/executionHistory.lock Visa fil


Binär
.gradle/7.3.3/fileHashes/fileHashes.bin Visa fil


Binär
.gradle/7.3.3/fileHashes/fileHashes.lock Visa fil


Binär
.gradle/7.3.3/fileHashes/resourceHashesCache.bin Visa fil


Binär
.gradle/buildOutputCleanup/buildOutputCleanup.lock Visa fil


+ 7
- 3
.idea/misc.xml Visa fil

<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable-v24/avd_anim.xml" value="0.2825" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable-v24/avd_anim.xml" value="0.2825" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.25" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.25" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable-v24/ic_launcher_round.xml" value="0.25" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable-v24/ic_launcher_round.xml" value="0.25" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/evs_background.xml" value="0.279" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/evs_nok_background.xml" value="0.279" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/evs_ok_background.xml" value="0.279" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/ic_baseline_swipe_right_24.xml" value="0.264" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/ic_baseline_swipe_right_24.xml" value="0.264" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/ic_calcsight_parameter.xml" value="0.264" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/ic_calcsight_parameter.xml" value="0.264" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/ic_calcsight_trajectory.xml" value="0.264" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/ic_calcsight_trajectory.xml" value="0.264" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/side_nav_bar.xml" value="0.285" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/drawable/side_nav_bar.xml" value="0.285" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_equipment_configuration.xml" value="0.1994535519125683" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_equipment_configuration.xml" value="0.1994535519125683" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_main.xml" value="0.28072916666666664" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_main.xml" value="0.28072916666666664" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_riser_configuration.xml" value="0.25" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_riser_configuration.xml" value="0.2" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_sight_configuration.xml" value="0.1994535519125683" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/activity_sight_configuration.xml" value="0.1994535519125683" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/app_bar_main.xml" value="0.15" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/app_bar_main.xml" value="0.15" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/content_main.xml" value="0.14" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/content_main.xml" value="0.14" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_about.xml" value="0.15812841530054644" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_about.xml" value="0.15812841530054644" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight.xml" value="0.15812841530054644" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight.xml" value="0.15812841530054644" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight_parameters.xml" value="0.16" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight_sightsetting.xml" value="0.1840846994535519" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight_parameters.xml" value="0.2" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight_sightsetting.xml" value="0.22" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight_trajectory.xml" value="0.15" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_calcsight_trajectory.xml" value="0.15" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_equipment.xml" value="0.12361111111111112" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_equipment.xml" value="0.12361111111111112" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_equipment_add.xml" value="0.15812841530054644" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_equipment_add.xml" value="0.15812841530054644" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_slideshow.xml" value="0.1480978260869565" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_slideshow.xml" value="0.1480978260869565" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_userguide.xml" value="0.15812841530054644" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/fragment_userguide.xml" value="0.15812841530054644" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/nav_header_main.xml" value="0.18715277777777778" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/nav_header_main.xml" value="0.18715277777777778" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/simple_spinner_line.xml" value="0.16319444444444445" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/switch_item.xml" value="0.1" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/layout/switch_item.xml" value="0.1" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/menu/activity_main_drawer.xml" value="0.3625" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/menu/activity_main_drawer.xml" value="0.3625" />
<entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/menu/main.xml" value="0.3625" /> <entry key="..\:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/res/menu/main.xml" value="0.3625" />

+ 54
- 52
.idea/workspace.xml Visa fil

</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="41369230-c648-4299-baf3-de5f13bcb18c" name="Changes" comment=""> <list default="true" id="41369230-c648-4299-baf3-de5f13bcb18c" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/SuspendableTextWatcher.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/src/main/res/layout/simple_spinner_line.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gradle/7.3.3/executionHistory/executionHistory.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/7.3.3/executionHistory/executionHistory.bin" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gradle/7.3.3/executionHistory/executionHistory.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/7.3.3/executionHistory/executionHistory.lock" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gradle/7.3.3/fileHashes/fileHashes.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/7.3.3/fileHashes/fileHashes.bin" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gradle/7.3.3/fileHashes/fileHashes.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/7.3.3/fileHashes/fileHashes.lock" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gradle/7.3.3/fileHashes/resourceHashesCache.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/7.3.3/fileHashes/resourceHashesCache.bin" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/RBSMainActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/RBSMainActivity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/FlightCurveChart.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/FlightCurveChart.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/FontTextView.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/FontTextView.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/XTextView.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components/XTextView.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/RBSDatabaseHelper.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/RBSDatabaseHelper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/ArcherySetupDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/ArcherySetupDao.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/DAO.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/DAO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/RiserDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/RiserDao.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/SightDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/dao/SightDao.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/scheme/data/TblRBSArcherySetup.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/scheme/data/TblRBSArcherySetup.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/scheme/masterdata/TblRBSRiser.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/scheme/masterdata/TblRBSRiser.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/scheme/masterdata/TblRBSSight.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/database/scheme/masterdata/TblRBSSight.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/logic/CalculationTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/logic/CalculationTask.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/logic/TrajectoryCalculation.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/logic/TrajectoryCalculation.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/logic/TrajectoryCalculator.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/logic/TrajectoryCalculator.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/ArcherySetup.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/ArcherySetup.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/IArcherySetup.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/IArcherySetup.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/IEntity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/IEntity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/IRiser.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/IRiser.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/ISight.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/ISight.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/Riser.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/Riser.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/Sight.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/model/Sight.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightCollectionAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightCollectionAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightFragment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersViewModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersViewModel.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingViewModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingViewModel.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingViewModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingViewModel.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightTrajectoryFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightTrajectoryFragment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightTrajectoryViewModel.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/ArcherySetupConfigurationActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/ArcherySetupConfigurationActivity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/ArcherySetupConfigurationViewModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/ArcherySetupConfigurationViewModel.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/RiserConfigurationActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/RiserConfigurationActivity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/RiserConfigurationViewModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/RiserConfigurationViewModel.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/SightConfigurationActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/SightConfigurationActivity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/SightConfigurationViewModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/configuration/SightConfigurationViewModel.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/equipment/AddEquipmentFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/equipment/AddEquipmentFragment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/equipment/ChooseEquipmentFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/equipment/ChooseEquipmentFragment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/equipment/EquipmentRecyclerViewAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/equipment/EquipmentRecyclerViewAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/utilities/PlatformUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/utilities/PlatformUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/utilities/UnitConverter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/utilities/UnitConverter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/values/attr.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/values/attr.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/utilities/NoFilterArrayAdapter.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/utilities/NoFilterArrayAdapter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/layout/fragment_calcsight_parameters.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/layout/fragment_calcsight_parameters.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/layout/fragment_calcsight_sightsetting.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/layout/fragment_calcsight_sightsetting.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/layout/fragment_calcsight_trajectory.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/layout/fragment_calcsight_trajectory.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/values-de/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/values-de/strings.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/values/colors.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/values/colors.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="RECENT_TEMPLATES"> <option name="RECENT_TEMPLATES">
<list> <list>
<option value="resourceFile" /> <option value="resourceFile" />
<option value="layoutResourceFile" />
<option value="Class" /> <option value="Class" />
<option value="valueResourceFile" /> <option value="valueResourceFile" />
</list> </list>
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/androidx.recyclerview/recyclerview/1.2.1/f0f93e67af3f7417bdd560d5142f6dec4fe629c3/recyclerview-1.2.1-sources.jar!/androidx/recyclerview/widget/RecyclerView.java_SELECTED" value="RecyclerView" /> <property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/androidx.recyclerview/recyclerview/1.2.1/f0f93e67af3f7417bdd560d5142f6dec4fe629c3/recyclerview-1.2.1-sources.jar!/androidx/recyclerview/widget/RecyclerView.java_SELECTED" value="RecyclerView" />
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/androidx.viewpager2/viewpager2/1.0.0/3c3569044e6969f1ee5c3aa03b08e6717a2d782f/viewpager2-1.0.0-sources.jar!/androidx/viewpager2/widget/ViewPager2.java_SELECTED" value="ViewPager2" /> <property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/androidx.viewpager2/viewpager2/1.0.0/3c3569044e6969f1ee5c3aa03b08e6717a2d782f/viewpager2-1.0.0-sources.jar!/androidx/viewpager2/widget/ViewPager2.java_SELECTED" value="ViewPager2" />
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/androidx.viewpager2/viewpager2/1.0.0/3c3569044e6969f1ee5c3aa03b08e6717a2d782f/viewpager2-1.0.0-sources.jar!/androidx/viewpager2/widget/ViewPager2.java_ViewPager2_DIMENSIONS" value="1080&#10;1920" /> <property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/androidx.viewpager2/viewpager2/1.0.0/3c3569044e6969f1ee5c3aa03b08e6717a2d782f/viewpager2-1.0.0-sources.jar!/androidx/viewpager2/widget/ViewPager2.java_ViewPager2_DIMENSIONS" value="1080&#10;1920" />
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.6.1/d4d703885d24c61bc0ec39a9a705969e41d773ef/material-1.6.1-sources.jar!/com/google/android/material/textfield/TextInputLayout.java_SELECTED" value="TextInputLayout" />
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.6.1/d4d703885d24c61bc0ec39a9a705969e41d773ef/material-1.6.1-sources.jar!/com/google/android/material/textfield/TextInputLayout.java_TextInputLayout_DIMENSIONS" value="1080&#10;1920" />
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.6.1/d4d703885d24c61bc0ec39a9a705969e41d773ef/material-1.6.1-sources.jar!/com/google/android/material/textview/MaterialTextView.java_MaterialTextView_DIMENSIONS" value="1080&#10;1920" /> <property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.6.1/d4d703885d24c61bc0ec39a9a705969e41d773ef/material-1.6.1-sources.jar!/com/google/android/material/textview/MaterialTextView.java_MaterialTextView_DIMENSIONS" value="1080&#10;1920" />
<property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.6.1/d4d703885d24c61bc0ec39a9a705969e41d773ef/material-1.6.1-sources.jar!/com/google/android/material/textview/MaterialTextView.java_SELECTED" value="MaterialTextView" /> <property name="android-custom-viewC:/Users/FSmilari/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.6.1/d4d703885d24c61bc0ec39a9a705969e41d773ef/material-1.6.1-sources.jar!/com/google/android/material/textview/MaterialTextView.java_SELECTED" value="MaterialTextView" />
<property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/view/View.java_SELECTED" value="View" /> <property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/view/View.java_SELECTED" value="View" />
<property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/AbsListView.java_SELECTED" value="AbsListView" />
<property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/AutoCompleteTextView.java_SELECTED" value="AutoCompleteTextView" /> <property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/AutoCompleteTextView.java_SELECTED" value="AutoCompleteTextView" />
<property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/EditText.java_SELECTED" value="EditText" /> <property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/EditText.java_SELECTED" value="EditText" />
<property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/TextView.java_SELECTED" value="TextView" /> <property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-29/android/widget/TextView.java_SELECTED" value="TextView" />
<property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-32/android/widget/TextView.java_TextView_DIMENSIONS" value="1080&#10;1920" /> <property name="android-custom-viewC:/Users/FSmilari/AppData/Local/Android/Sdk/sources/android-32/android/widget/TextView.java_TextView_DIMENSIONS" value="1080&#10;1920" />
<property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/FontTextView.java_FontTextView_DIMENSIONS" value="1080&#10;1920" /> <property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/FontTextView.java_FontTextView_DIMENSIONS" value="1080&#10;1920" />
<property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/FontTextView.java_SELECTED" value="FontTextView" /> <property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/FontTextView.java_SELECTED" value="FontTextView" />
<property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/NumberAutoCompleteTextView.java_NumberAutoCompleteTextView_DIMENSIONS" value="1080&#10;1920" />
<property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/NumberAutoCompleteTextView.java_SELECTED" value="NumberAutoCompleteTextView" />
<property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/XTextView.java_SELECTED" value="XTextView" /> <property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/XTextView.java_SELECTED" value="XTextView" />
<property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/XTextView.java_XTextView_DIMENSIONS" value="1080&#10;1920" /> <property name="android-custom-viewZ:/Work/Java Projects/Android/RecurveBowSight/V2/app/src/main/java/ch/spherIC/recurvebowsight/components/XTextView.java_XTextView_DIMENSIONS" value="1080&#10;1920" />
<property name="cidr.known.project.marker" value="true" /> <property name="cidr.known.project.marker" value="true" />
<property name="code.cleanup.on.save" value="true" /> <property name="code.cleanup.on.save" value="true" />
<property name="format.on.save" value="true" /> <property name="format.on.save" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/components" />
<property name="last_directory_selection" value="$PROJECT_DIR$/app/src/main/res/drawable" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/app/src/main/res/drawable" />
<property name="optimize.imports.on.save" value="true" /> <property name="optimize.imports.on.save" value="true" />
<property name="settings.editor.selected.configurable" value="preferences.sourceCode.Java" /> <property name="settings.editor.selected.configurable" value="preferences.sourceCode.Java" />
</component> </component>
<recent name="ch.spherIC.recurvebowsight.ui.configuration" /> <recent name="ch.spherIC.recurvebowsight.ui.configuration" />
</key> </key>
<key name="CopyFile.RECENT_KEYS"> <key name="CopyFile.RECENT_KEYS">
<recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\java\ch\spherIC\recurvebowsight\components" />
<recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\res\drawable" /> <recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\res\drawable" />
<recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\java\ch\spherIC\recurvebowsight\components" />
<recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\java\ch\spherIC\recurvebowsight\ui\calcsight" /> <recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\java\ch\spherIC\recurvebowsight\ui\calcsight" />
<recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\res\layout" /> <recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\res\layout" />
<recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\java\ch\spherIC\recurvebowsight\utilities" /> <recent name="Z:\Work\Java Projects\Android\RecurveBowSight\V2\app\src\main\java\ch\spherIC\recurvebowsight\utilities" />
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager> <breakpoint-manager>
<breakpoints> <breakpoints>
<line-breakpoint enabled="true" suspend="THREAD" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java</url>
<line>78</line>
<option name="timeStamp" value="114" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java</url>
<line>67</line>
<option name="timeStamp" value="115" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="java-line"> <line-breakpoint enabled="true" suspend="THREAD" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java</url> <url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java</url>
<line>247</line>
<option name="timeStamp" value="110" />
<line>99</line>
<option name="timeStamp" value="116" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java</url>
<line>109</line>
<properties>
<option name="lambda-ordinal" value="0" />
</properties>
<option name="timeStamp" value="119" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java</url>
<line>45</line>
<option name="timeStamp" value="120" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="java-line">
<url>file://$PROJECT_DIR$/app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java</url>
<line>96</line>
<option name="timeStamp" value="122" />
</line-breakpoint> </line-breakpoint>
</breakpoints> </breakpoints>
</breakpoint-manager> </breakpoint-manager>
<watches-manager> <watches-manager>
<configuration name="app"> <configuration name="app">
<watch expression="this" /> <watch expression="this" />
<watch expression="getViewLifecycleOwner()" language="JAVA" />
<watch expression="getParentFragment()" language="JAVA" />
<watch expression="getParentFragment().getArguments()" language="JAVA" />
<watch expression="getActivity()" language="JAVA" />
<watch expression="getChildFragmentManager().getFragments()" language="JAVA" />
<watch expression="getParentFragment().getView().findViewById(R.id.arrowNockHeightTxt)" language="JAVA" />
<watch expression="getParentFragmentManager().getFragments()" language="JAVA" />
<watch expression="getParentFragment().getView().findViewById(R.id.fragment_calcsight_parameters).getMeasuredWidth()" language="JAVA" custom="ch.spherIC.recurvebowsight.R" />
</configuration> </configuration>
</watches-manager> </watches-manager>
</component> </component>

+ 57
- 0
app/src/main/java/ch/spherIC/recurvebowsight/components/NumberAutoCompleteTextView.java Visa fil

package ch.spherIC.recurvebowsight.components;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;
import java.text.DecimalFormat;
import ch.spherIC.recurvebowsight.utilities.UnitConverter;
@SuppressLint("AppCompatCustomView")
public class NumberAutoCompleteTextView extends AutoCompleteTextView {
private DecimalFormat formatter;
public NumberAutoCompleteTextView(Context context) {
this(context, null);
}
public NumberAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NumberAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public NumberAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public NumberAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, Resources.Theme popupTheme) {
super(context, attrs, defStyleAttr, defStyleRes, popupTheme);
int paddingH = UnitConverter.dpToPxH(16);
int paddingV = UnitConverter.dpToPxV(16);
setPadding(paddingH, paddingV, paddingH, paddingV);
}
public DecimalFormat getFormatter() {
return formatter;
}
public void setFormatter(DecimalFormat formatter) {
this.formatter = formatter;
}
@Override
protected CharSequence convertSelectionToString(Object selectedItem) {
if (this.formatter != null && selectedItem instanceof Double) {
return this.formatter.format(selectedItem);
}
return super.convertSelectionToString(selectedItem);
}
}

+ 10
- 19
app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightParametersFragment.java Visa fil

public static final DecimalFormat DF = new DecimalFormat("0.##"); public static final DecimalFormat DF = new DecimalFormat("0.##");
public static final DecimalFormat DF_1 = new DecimalFormat("0.00"); public static final DecimalFormat DF_1 = new DecimalFormat("0.00");
public static final DecimalFormat DF_2 = new DecimalFormat("0.0##"); public static final DecimalFormat DF_2 = new DecimalFormat("0.0##");
public static final DecimalFormat DF_EVS = new DecimalFormat("0.#");
private static final double CENTI = 0.01; private static final double CENTI = 0.01;
private static final double MILLI = 0.001; private static final double MILLI = 0.001;
private static final int MAX_TRAJ_POINTS = 200; private static final int MAX_TRAJ_POINTS = 200;
if (getParentFragment() != null && getParentFragment().getArguments() != null && getParentFragment().getArguments().containsKey("setup")) { if (getParentFragment() != null && getParentFragment().getArguments() != null && getParentFragment().getArguments().containsKey("setup")) {
IArcherySetup archerySetup = getParentFragment().getArguments().getParcelable("setup"); IArcherySetup archerySetup = getParentFragment().getArguments().getParcelable("setup");
this.calculateSightViewModel.setSelectedArcherySetup(archerySetup); this.calculateSightViewModel.setSelectedArcherySetup(archerySetup);
Bundle bundle = new Bundle();
bundle.putParcelable("selectedArcherySetup", archerySetup);
getParentFragmentManager().setFragmentResult("selectedArcherySetup", bundle);
} }
} }


bundle.putParcelable("ballisticResults", ballisticResults); bundle.putParcelable("ballisticResults", ballisticResults);
getParentFragmentManager().setFragmentResult("ballisticResults", bundle); getParentFragmentManager().setFragmentResult("ballisticResults", bundle);


Bundle startAngleBundle = new Bundle();
startAngleBundle.putDouble("startAngle", ballisticResults.getStartAngle());
startAngleBundle.putDouble("shootingDistance", this.calculateSightViewModel.getShootingDistance().getValue());
getParentFragmentManager().setFragmentResult("startAngle", startAngleBundle);

if (this.progressDialog != null) { if (this.progressDialog != null) {
this.progressDialog.dismiss(); this.progressDialog.dismiss();
} }


((CalculateSightFragment) getParentFragment()).scrollToTab(1);
((CalculateSightFragment) getParentFragment()).scrollToTab(2);
} }


private void addObservers() { private void addObservers() {
&& !this.binding.arrowNockHeightTxt.getText().toString().isEmpty() && !this.binding.arrowNockHeightTxt.getText().toString().isEmpty()
&& !this.binding.targetCenterHeightTxt.getText().toString().isEmpty() && !this.binding.targetCenterHeightTxt.getText().toString().isEmpty()
&& !this.binding.deltaTimeTxt.getText().toString().isEmpty() && !this.binding.deltaTimeTxt.getText().toString().isEmpty()
&& !this.binding.calcPrecisionTxt.getText().toString().isEmpty()
&& allSightParamFieldsValid();
}

private boolean allSightParamFieldsValid() {
/*return !this.scVvisHTxtFld.getText().toString().isEmpty()
&& !this.scVvisVTxtFld.getText().toString().isEmpty()
&& !this.scaHTxtFld.getText().toString().isEmpty()
&& !this.scaVTxtFld.getText().toString().isEmpty()
&& !this.scVertScaleRngTxtFld.getText().toString().isEmpty()
&& !this.scPointerOffsetTxtFld.getText().toString().isEmpty()
&& ((this.scHeVSSpinner.getVisibility() == View.VISIBLE && this.scHeVSSpinner.getSelectedItem() != null)
|| (this.scHeVSTxtFld.getVisibility() == View.VISIBLE && !this.scHeVSTxtFld.getText().toString().isEmpty()))
&& !this.scVertScaleMiddleTxtFld.getText().toString().isEmpty();
*/
return true;
&& !this.binding.calcPrecisionTxt.getText().toString().isEmpty();
} }



private void addValueChangeListeners() { private void addValueChangeListeners() {
this.accuracyOptimizingTextWatcher = new SuspendableTextWatcher() { this.accuracyOptimizingTextWatcher = new SuspendableTextWatcher() {
@Override @Override

+ 278
- 8
app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingFragment.java Visa fil

*/ */
package ch.spherIC.recurvebowsight.ui.calcsight; package ch.spherIC.recurvebowsight.ui.calcsight;


import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Bundle; import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Toast;

import java.text.DecimalFormat;
import java.util.List;


import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import ch.spherIC.recurvebowsight.R;
import ch.spherIC.recurvebowsight.components.NumberAutoCompleteTextView;
import ch.spherIC.recurvebowsight.database.dao.RiserDao;
import ch.spherIC.recurvebowsight.database.dao.SightDao;
import ch.spherIC.recurvebowsight.databinding.FragmentCalcsightSightsettingBinding; import ch.spherIC.recurvebowsight.databinding.FragmentCalcsightSightsettingBinding;
import ch.spherIC.recurvebowsight.model.IArcherySetup;
import ch.spherIC.recurvebowsight.model.IRiser;
import ch.spherIC.recurvebowsight.model.ISight;
import ch.spherIC.recurvebowsight.utilities.NoFilterArrayAdapter;
import ch.spherIC.recurvebowsight.utilities.PlatformUtils;


public class CalculateSightSightSettingFragment extends Fragment { public class CalculateSightSightSettingFragment extends Fragment {


public static final DecimalFormat DF = new DecimalFormat("0.##");
public static final DecimalFormat DF_EVS = new DecimalFormat("0.#");

private FragmentCalcsightSightsettingBinding binding; private FragmentCalcsightSightsettingBinding binding;
private CalculateSightSightSettingViewModel calcSightSettingModel;
private ColorStateList defaultTextColors;
private int defaultBoxBackgroundColor;


public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
CalculateSightSightSettingViewModel calculateSightSightSettingViewModel = new ViewModelProvider(this).get(CalculateSightSightSettingViewModel.class);
binding = FragmentCalcsightSightsettingBinding.inflate(inflater, container, false);
View root = binding.getRoot();
this.calcSightSettingModel = new ViewModelProvider(this).get(CalculateSightSightSettingViewModel.class);
this.binding = FragmentCalcsightSightsettingBinding.inflate(inflater, container, false);
View root = this.binding.getRoot();

this.defaultTextColors = this.binding.ssEvSTxt.getTextColors();
this.defaultBoxBackgroundColor = this.binding.ssEvSLayout.getBoxBackgroundColor();
NumberAutoCompleteTextView horizontalSightSettingTxt = root.findViewById(R.id.ssHorizontalSightSettingTxt);
horizontalSightSettingTxt.setFormatter(new DecimalFormat("0.#"));

this.binding.fabCalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updateModelFromUI();
calculateSettings();
}
});

getParentFragmentManager().setFragmentResultListener("selectedArcherySetup", this, (requestKey, bundle) -> {
if (requestKey.equals("selectedArcherySetup")) {
IArcherySetup selectedArcherySetup = bundle.getParcelable("selectedArcherySetup");
if (selectedArcherySetup != null) {
this.calcSightSettingModel.setSelectedArcherySetup(selectedArcherySetup);
this.calcSightSettingModel.setSelectedRiser(selectedArcherySetup.getRiser());
this.calcSightSettingModel.setSelectedSight(selectedArcherySetup.getSight());
this.calcSightSettingModel.setHeVis(selectedArcherySetup.getSightHorzSetting());
this.calcSightSettingModel.setVertSkalaMiddle(selectedArcherySetup.getSightVertSkalaMiddle());
loadHeVis(selectedArcherySetup.getSight());
}
}
});

getParentFragmentManager().setFragmentResultListener("startAngle", this, (requestKey, bundle) -> {
if (requestKey.equals("startAngle")) {
Double startAngle = bundle.getDouble("startAngle");
Double shootingDist = bundle.getDouble("shootingDistance");
this.calcSightSettingModel.setStartAngle(startAngle);
this.calcSightSettingModel.setShootingDistance(shootingDist);
}
});


final TextView textView = binding.textCalcsightSightsetting;
calculateSightSightSettingViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
loadRisers();
loadSights();
addRiserSpinnerListener();
addSightSpinnerListener();
addHeVisSpinnerListener();
addObservers();
return root; return root;
} }


@Override
public void onResume() {
super.onResume();
calculateSettings(false);
}

@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
binding = null;
this.binding = null;
}

private void addObservers() {
this.calcSightSettingModel.getSelectedRiser().observe(getViewLifecycleOwner(), riser -> this.binding.ssRiserSelectionTxt.setText(riser != null ? riser.toString() : ""));
this.calcSightSettingModel.getSelectedSight().observe(getViewLifecycleOwner(), sight -> this.binding.ssSightSelectionTxt.setText(sight != null ? sight.toString() : ""));
this.calcSightSettingModel.getVVisV().observe(getViewLifecycleOwner(), vVisV -> this.binding.ssvVisVTxt.setText(vVisV != null ? DF.format(vVisV) : ""));
this.calcSightSettingModel.getVVisH().observe(getViewLifecycleOwner(), vVisH -> this.binding.ssvVisHTxt.setText(vVisH != null ? DF.format(vVisH) : ""));
this.calcSightSettingModel.getHeVis().observe(getViewLifecycleOwner(), heVis -> this.binding.ssHorizontalSightSettingTxt.setText(heVis != null ? DF.format(heVis) : ""));
this.calcSightSettingModel.getAV().observe(getViewLifecycleOwner(), aV -> this.binding.ssaVTxt.setText(aV != null ? DF.format(aV) : ""));
this.calcSightSettingModel.getAH().observe(getViewLifecycleOwner(), aH -> this.binding.ssaHTxt.setText(aH != null ? DF.format(aH) : ""));
this.calcSightSettingModel.getVertScaleRngMin().observe(getViewLifecycleOwner(), vertSclRngMin -> this.binding.ssVertScaleRngTxt.setText(getVertScaleRangeText(vertSclRngMin, null)));
this.calcSightSettingModel.getVertScaleRngMax().observe(getViewLifecycleOwner(), vertSclRngMax -> this.binding.ssVertScaleRngTxt.setText(getVertScaleRangeText(null, vertSclRngMax)));
this.calcSightSettingModel.getScalePointerOffset().observe(getViewLifecycleOwner(), scalePtrOffset -> this.binding.ssVertScalePointerOffsetTxt.setText(scalePtrOffset != null ? DF.format(scalePtrOffset) : ""));
this.calcSightSettingModel.getVertSkalaMiddle().observe(getViewLifecycleOwner(), vertScaleMiddle -> this.binding.ssVertSkalaMiddleTxt.setText(vertScaleMiddle != null ? DF.format(vertScaleMiddle) : ""));
this.calcSightSettingModel.getEvS().observe(getViewLifecycleOwner(), evs -> this.binding.ssEvSTxt.setText(evs != null ? DF_EVS.format(evs) : ""));
}

private void updateModelFromUI() {
this.calcSightSettingModel.setVertSkalaMiddle(PlatformUtils.parseDouble(this.binding.ssVertSkalaMiddleTxt.getText().toString()));
}

private String getVertScaleRangeText(Double vertSclRngMin, Double vertSclRngMax) {
if (vertSclRngMin != null && vertSclRngMax != null) {
return DF.format(vertSclRngMin) + "-" + DF.format(vertSclRngMax);
} else if (vertSclRngMin != null && vertSclRngMax == null) {
return DF.format(vertSclRngMin) + "-" + (this.calcSightSettingModel.getVertScaleRngMax().getValue() != null ?
DF.format(this.calcSightSettingModel.getVertScaleRngMax().getValue()) : "");
} else if (vertSclRngMin == null && vertSclRngMax != null) {
return (this.calcSightSettingModel.getVertScaleRngMin().getValue() != null ?
DF.format(this.calcSightSettingModel.getVertScaleRngMin().getValue()) : "") + "-" + DF.format(vertSclRngMax);
}
return "";
}

private void loadRisers() {
List<IRiser> risers = RiserDao.getInstance().loadAll();
ArrayAdapter<IRiser> adapter = new NoFilterArrayAdapter<IRiser>(this.binding.getRoot().getContext(), android.R.layout.simple_dropdown_item_1line, risers);
AutoCompleteTextView textView = this.binding.ssRiserSelectionTxt;
textView.setAdapter(adapter);
textView.invalidate();
}

private void loadSights() {
List<ISight> sights = SightDao.getInstance().loadAll();
ArrayAdapter<ISight> adapter = new NoFilterArrayAdapter<ISight>(this.binding.getRoot().getContext(), android.R.layout.simple_dropdown_item_1line, sights);
AutoCompleteTextView textView = this.binding.ssSightSelectionTxt;
textView.setAdapter(adapter);
textView.invalidate();
}

private void loadHeVis(ISight selectedSight) {
ArrayAdapter<Double> adapter = new NoFilterArrayAdapter<Double>(this.binding.getRoot().getContext(), android.R.layout.simple_dropdown_item_1line,
selectedSight.getHeVisList(), new DecimalFormat("0.#"));
AutoCompleteTextView textView = this.binding.ssHorizontalSightSettingTxt;
textView.setAdapter(adapter);
textView.invalidate();
}

private void addHeVisSpinnerListener() {
AutoCompleteTextView textView = this.binding.getRoot().findViewById(R.id.ssHorizontalSightSettingTxt);
textView.setOnItemClickListener((parent, view, position, id) -> {
Double selectedHeVis = (Double) textView.getAdapter().getItem(position);
if (selectedHeVis != null) {
calcSightSettingModel.setHeVis(selectedHeVis);
}
});
}

private void addSightSpinnerListener() {
AutoCompleteTextView textView = this.binding.getRoot().findViewById(R.id.ssSightSelectionTxt);
textView.setOnItemClickListener((parent, view, position, id) -> {
ISight selectedSight = (ISight) textView.getAdapter().getItem(position);
if (selectedSight != null) {
loadHeVis(selectedSight);
calcSightSettingModel.setSelectedSight(selectedSight);
calcSightSettingModel.setHeVis(selectedSight.getHeVisList().get(0));
}
});
}

private void addRiserSpinnerListener() {
AutoCompleteTextView textView = this.binding.getRoot().findViewById(R.id.ssRiserSelectionTxt);
textView.setOnItemClickListener((parent, view, position, id) -> {
IRiser selectedRiser = (IRiser) textView.getAdapter().getItem(position);
if (selectedRiser != null) {
calcSightSettingModel.setSelectedRiser(selectedRiser);
}
});
}

/**
* Berechnet die definitve Visiereinstellung anhand des berechneten Flugbahnwinkels.
*/
private void calculateSettings() {
calculateSettings(true);
}

private void calculateSettings(boolean hintOnValidationError) {
Context context = this.binding.getRoot().getContext();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(this.binding.getRoot().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
this.binding.ssEvSTxt.requestFocus();

if (allSightParamFieldsValid() && this.calcSightSettingModel.getSelectedArcherySetup() != null && this.calcSightSettingModel.getStartAngle() != null
&& this.calcSightSettingModel.getShootingDistance() != null) {
Double startAngle = this.calcSightSettingModel.getStartAngle();
Double x0;
Double y0;
Double x1;
Double y1;
Double x2;
Double y2;
Double x3;
Double y3;
Double r;
Double s;
Double vVh = this.calcSightSettingModel.getVVisH().getValue() + this.calcSightSettingModel.getAH().getValue();
Double vVv = this.calcSightSettingModel.getVVisV().getValue() + this.calcSightSettingModel.getAV().getValue();
Double a = this.calcSightSettingModel.getSelectedArcherySetup().getBowPullout() * 10;
Double heVs = this.calcSightSettingModel.getHeVis().getValue();

Double lhNA = this.calcSightSettingModel.getSelectedArcherySetup().getHNA();
Double dltH = (this.calcSightSettingModel.getSelectedArcherySetup().getTargetCenterHeight() - this.calcSightSettingModel.getSelectedArcherySetup().getArrowNockHeight()) * Math.pow(10, 3);
Double ldistH = this.calcSightSettingModel.getShootingDistance() * Math.pow(10, 3);
Double minSkala = this.calcSightSettingModel.getVertScaleRngMin().getValue();
Double maxSkala = this.calcSightSettingModel.getVertScaleRngMax().getValue();
Double pointerOffset = this.calcSightSettingModel.getScalePointerOffset().getValue();

Double nockRaising = this.calcSightSettingModel.getSelectedArcherySetup().getNockRaising() - this.calcSightSettingModel.getSelectedArcherySetup().getArrowDiameter();
Double braceHeight = this.calcSightSettingModel.getSelectedArcherySetup().getBraceHeight();
Double phi = -Math.atan(nockRaising / braceHeight); // Winkel des Pfeils zur Auflage infolge Nockpunktüberhöhung

// PIN auf Höhe UK Vertikalskala Visier, gedreht um den Abschusswinkel...
Double x01 = a * Math.cos(phi) + vVh + heVs;
Double y01 = a * Math.sin(phi) + vVv - maxSkala / 2;
x0 = Math.cos(Math.toRadians(startAngle)) * x01 - Math.sin(Math.toRadians(startAngle)) * y01;
y0 = Math.sin(Math.toRadians(startAngle)) * x01 + Math.cos(Math.toRadians(startAngle)) * y01;

// PIN auf Höhe Horizontalschlitten Visier, gedreht um den Abschusswinkel...
Double x02 = a * Math.cos(phi) + vVh + heVs;
Double y02 = a * Math.sin(phi) + vVv;
x2 = Math.cos(Math.toRadians(startAngle)) * x02 - Math.sin(Math.toRadians(startAngle)) * y02;
y2 = Math.sin(Math.toRadians(startAngle)) * x02 + Math.cos(Math.toRadians(startAngle)) * y02;

// Schnittpunkt der Achse Horizontalschlitten Visier mit Achse Befestigungslöcher Visier, gedreht um den Abschusswinkel...
Double x03 = a * Math.cos(phi) + vVh;
Double y03 = a * Math.sin(phi) + vVv;
x3 = Math.cos(Math.toRadians(startAngle)) * x03 - Math.sin(Math.toRadians(startAngle)) * y03;
y3 = Math.sin(Math.toRadians(startAngle)) * x03 + Math.cos(Math.toRadians(startAngle)) * y03;

// Unbekannte der Vektorgeradengleichung
r = (lhNA * (x0 - x2) - x0 * y2 + x2 * y0) / (ldistH * (y0 - y2) + (dltH - lhNA) * (x2 - x0));
s = -((ldistH * (lhNA - y0) + (dltH - lhNA) * x0) / (ldistH * (y0 - y2) + (dltH - lhNA) * (x2 - x0)));

// Pin auf Visierlinie
x1 = r * ldistH;
y1 = lhNA + r * (dltH - lhNA);

// Unten (+) oder oben (-) von (x2/y2) ?
Double n = ((y2 - y3) * (x1 - x3) - (x2 - x3) * (y1 - y3)) < 0 ? -1.0 : 1.0;

// Abstand P1 - P2
Double d = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) * n;

// Einstellung auf vert. Skala
Double sV = this.calcSightSettingModel.getVertSkalaMiddle().getValue() + d - pointerOffset;

this.binding.ssEvSTxt.setText(DF_EVS.format(sV));

if (minSkala <= sV && sV <= maxSkala) {
this.binding.ssEvSLayout.setBoxBackgroundColor(getResources().getColor(R.color.android_green, this.binding.getRoot().getContext().getTheme()));
this.binding.ssEvSTxt.setTextColor(getResources().getColor(R.color.black, this.binding.getRoot().getContext().getTheme()));
} else {
this.binding.ssEvSLayout.setBoxBackgroundColor(getResources().getColor(R.color.android_red, this.binding.getRoot().getContext().getTheme()));
this.binding.ssEvSTxt.setTextColor(getResources().getColor(R.color.white, this.binding.getRoot().getContext().getTheme()));
}

} else {
this.binding.ssEvSLayout.setBoxBackgroundColor(this.defaultBoxBackgroundColor);
this.binding.ssEvSTxt.setTextColor(this.defaultTextColors);
this.binding.ssEvSTxt.setText("");
this.binding.ssEvSTxt.clearFocus();
if (hintOnValidationError) {
Toast toast = Toast.makeText(this.binding.getRoot().getContext(), getResources().getString(R.string.caption_FillAllMandatoryFields), Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
} }
}

private boolean allSightParamFieldsValid() {
return !this.binding.ssvVisHTxt.getText().toString().isEmpty()
&& !this.binding.ssvVisVTxt.getText().toString().isEmpty()
&& !this.binding.ssHorizontalSightSettingTxt.getText().toString().isEmpty()
&& !this.binding.ssaVTxt.getText().toString().isEmpty()
&& !this.binding.ssaHTxt.getText().toString().isEmpty()
&& !this.binding.ssVertScaleRngTxt.getText().toString().isEmpty()
&& !this.binding.ssVertScalePointerOffsetTxt.getText().toString().isEmpty()
&& !this.binding.ssVertSkalaMiddleTxt.getText().toString().isEmpty();
}

}

+ 126
- 5
app/src/main/java/ch/spherIC/recurvebowsight/ui/calcsight/CalculateSightSightSettingViewModel.java Visa fil

import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import ch.spherIC.recurvebowsight.model.IArcherySetup;
import ch.spherIC.recurvebowsight.model.IRiser;
import ch.spherIC.recurvebowsight.model.ISight;


public class CalculateSightSightSettingViewModel extends ViewModel { public class CalculateSightSightSettingViewModel extends ViewModel {


private final MutableLiveData<String> mText;
private final MutableLiveData<IRiser> mRiser;
private final MutableLiveData<Double> mVvisH;
private final MutableLiveData<Double> mVvisV;
private final MutableLiveData<ISight> mSight;
private final MutableLiveData<Double> mHeVis;
private final MutableLiveData<Double> mAV;
private final MutableLiveData<Double> mAH;
private final MutableLiveData<Double> mVertScaleRngMin;
private final MutableLiveData<Double> mVertScaleRngMax;
private final MutableLiveData<Double> mScalePointerOffset;
private final MutableLiveData<Double> mVertSkalaMiddle;
private final MutableLiveData<Double> mEvS;
private IArcherySetup selectedArcherySetup;
private Double startAngle;
private Double shootingDistance;


public CalculateSightSightSettingViewModel() { public CalculateSightSightSettingViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is the \"Calculate Sight Sight Setting\" fragment");
this.mRiser = new MutableLiveData<>();
this.mSight = new MutableLiveData<>();
this.mVvisH = new MutableLiveData<>();
this.mVvisV = new MutableLiveData<>();
this.mHeVis = new MutableLiveData<>();
this.mAV = new MutableLiveData<>();
this.mAH = new MutableLiveData<>();
this.mVertScaleRngMin = new MutableLiveData<>();
this.mVertScaleRngMax = new MutableLiveData<>();
this.mScalePointerOffset = new MutableLiveData<>();
this.mVertSkalaMiddle = new MutableLiveData<>();
this.mEvS = new MutableLiveData<>();

this.mRiser.setValue(null);
this.mSight.setValue(null);
this.mVvisH.setValue(null);
this.mVvisV.setValue(null);
this.mHeVis.setValue(null);
this.mAV.setValue(null);
this.mAH.setValue(null);
this.mVertScaleRngMin.setValue(null);
this.mVertScaleRngMax.setValue(null);
this.mScalePointerOffset.setValue(null);
this.mVertSkalaMiddle.setValue(null);
this.mEvS.setValue(null);
}

public void setSelectedRiser(IRiser aSelectedRiser) {
this.mRiser.setValue(aSelectedRiser);
this.mVvisH.setValue(aSelectedRiser != null ? aSelectedRiser.getVVisH() : null);
this.mVvisV.setValue(aSelectedRiser != null ? aSelectedRiser.getVVisV() : null);
}

public void setSelectedSight(ISight aSight) {
this.mSight.setValue(aSight);
this.mAV.setValue(aSight != null ? aSight.getAV() : null);
this.mAH.setValue(aSight != null ? aSight.getAH() : null);
this.mVertScaleRngMin.setValue(aSight != null ? aSight.getVertSkalaRangeMin() : null);
this.mVertScaleRngMax.setValue(aSight != null ? aSight.getVertSkalaRangeMax() : null);
this.mScalePointerOffset.setValue(aSight != null ? aSight.getPointerOffset() : null);
}

public void setVertSkalaMiddle(Double vertSkalaMiddle) {
this.mVertSkalaMiddle.setValue(vertSkalaMiddle);
}

public void setStartAngle(Double startAngle) {
this.startAngle = startAngle;
}

public void setSelectedArcherySetup(IArcherySetup selectedArcherySetup) {
this.selectedArcherySetup = selectedArcherySetup;
}

public void setHeVis(Double aHeVis) {
this.mHeVis.setValue(aHeVis);
}

public LiveData<IRiser> getSelectedRiser() {
return mRiser;
}

public LiveData<ISight> getSelectedSight() {
return mSight;
}

public LiveData<Double> getVVisH() {
return this.mVvisH;
} }


public LiveData<String> getText() {
return mText;
public LiveData<Double> getVVisV() {
return this.mVvisV;
} }

public LiveData<Double> getHeVis() {
return mHeVis;
}

public LiveData<Double> getAV() {
return mAV;
}

public LiveData<Double> getAH() {
return mAH;
}

public LiveData<Double> getVertScaleRngMin() {
return mVertScaleRngMin;
}

public LiveData<Double> getVertScaleRngMax() {
return mVertScaleRngMax;
}

public LiveData<Double> getScalePointerOffset() {return mScalePointerOffset;}

public LiveData<Double> getVertSkalaMiddle() {
return mVertSkalaMiddle;
}

public LiveData<Double> getEvS() {
return mEvS;
}

public Double getStartAngle() {return startAngle;}

public IArcherySetup getSelectedArcherySetup() {return selectedArcherySetup;}

public Double getShootingDistance() {return shootingDistance;}

public void setShootingDistance(Double shootingDistance) {this.shootingDistance = shootingDistance;}
} }

+ 58
- 4
app/src/main/java/ch/spherIC/recurvebowsight/utilities/NoFilterArrayAdapter.java Visa fil

package ch.spherIC.recurvebowsight.utilities; package ch.spherIC.recurvebowsight.utilities;
import android.content.Context; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Filter; import android.widget.Filter;
import android.widget.TextView;
import java.text.DecimalFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import ch.spherIC.recurvebowsight.R;
/** /**
* Almost unbelievably, if we want to create a Material Spinner, * Almost unbelievably, if we want to create a Material Spinner,
public class NoFilterArrayAdapter<T extends Object> extends ArrayAdapter<T> { public class NoFilterArrayAdapter<T extends Object> extends ArrayAdapter<T> {
private final List<T> objects; private final List<T> objects;
private final DecimalFormat formatter;
private final Filter filter_that_does_nothing = new Filter() { private final Filter filter_that_does_nothing = new Filter() {
@Override @Override
/** /**
* Constructor * Constructor
* *
* @param context the context
* @param context the context
* @param resource the resource * @param resource the resource
* @param objects the list of objects
* @param objects the list of objects
*/ */
public NoFilterArrayAdapter(@NonNull Context context, int resource, @NonNull List<T> objects) { public NoFilterArrayAdapter(@NonNull Context context, int resource, @NonNull List<T> objects) {
this(context, resource, objects, null);
}
/**
* Constructor
*
* @param context the context
* @param resource the resource
* @param objects the list of objects
* @param formatter a formatter for the items
*/
public NoFilterArrayAdapter(@NonNull Context context, int resource, @NonNull List<T> objects, @Nullable DecimalFormat formatter) {
super(context, resource, objects); super(context, resource, objects);
this.objects = objects; this.objects = objects;
this.formatter = formatter;
} }
/** /**
* Constructor * Constructor
* *
* @param context the context
* @param context the context
* @param resource the resource * @param resource the resource
* @param objects the list of objects
* @param objects the list of objects
*/ */
public NoFilterArrayAdapter(@NonNull Context context, int resource, @NonNull T[] objects) { public NoFilterArrayAdapter(@NonNull Context context, int resource, @NonNull T[] objects) {
this(context, resource, objects, null);
}
/**
* Constructor
*
* @param context the context
* @param resource the resource
* @param objects the list of objects
* @param formatter a formatter for the items
*/
public NoFilterArrayAdapter(@NonNull Context context, int resource, @NonNull T[] objects, @Nullable DecimalFormat formatter) {
super(context, resource, objects); super(context, resource, objects);
this.objects = Arrays.asList(objects); this.objects = Arrays.asList(objects);
this.formatter = formatter;
} }
@NonNull @NonNull
public Filter getFilter() { public Filter getFilter() {
return filter_that_does_nothing; return filter_that_does_nothing;
} }
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (this.formatter == null) {
return super.getView(position, convertView, parent);
} else {
T item = getItem(position);
if (item instanceof Double) {
String val = this.formatter.format(item);
convertView = LayoutInflater.from(getContext()).inflate(R.layout.simple_spinner_line, parent, false);
TextView tv = convertView.findViewById(R.id.idSimpleLineText);
tv.setText(val);
} else {
return super.getView(position, convertView, parent);
}
return convertView;
}
}
} }

+ 1
- 1
app/src/main/res/layout/fragment_calcsight_parameters.xml Visa fil

android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">



<TextView <TextView
android:id="@+id/bowAndArrowParams" android:id="@+id/bowAndArrowParams"
style="@style/Widget.AppCompat.TextView" style="@style/Widget.AppCompat.TextView"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
app:borderWidth="6dp"
app:fabSize="auto" app:fabSize="auto"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

+ 333
- 15
app/src/main/res/layout/fragment_calcsight_sightsetting.xml Visa fil

android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.calcsight.CalculateSightParametersFragment"> tools:context=".ui.calcsight.CalculateSightParametersFragment">


<TextView
android:id="@+id/text_calcsight_sightsetting"
android:layout_width="match_parent"
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0">


<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/sightSettings"
style="@style/Widget.AppCompat.TextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:background="@color/purple_700"
android:padding="4dp"
android:text="@string/titleSightConfig"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssRiserSelectionLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sightSettings">

<AutoCompleteTextView
android:id="@+id/ssRiserSelectionTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scRiserLbl"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>

<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/vvisParamsFlow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="9dp"
app:constraint_referenced_ids="ssvVisHLayout, ssvVisVLayout "
app:flow_wrapMode="aligned"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssRiserSelectionLayout" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssvVisHLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingRight="4dp"
app:layout_constraintTop_toBottomOf="@+id/ssRiserSelectionLayout"
tools:layout_editor_absoluteX="8dp">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssvVisHTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scVvisHLbl"
android:nextFocusDown="@id/ssvVisVTxt"
android:singleLine="true" />

</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssvVisVLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
app:layout_constraintStart_toEndOf="@+id/ssvVisHLayout"
app:layout_constraintTop_toBottomOf="@+id/ssRiserSelectionLayout">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssvVisVTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scVvisVLbl"
android:nextFocusDown="@id/ssSightSelectionTxt"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssSightSelectionLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vvisParamsFlow">

<AutoCompleteTextView
android:id="@+id/ssSightSelectionTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scSightLbl"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssHorizontalSightSettingLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssSightSelectionLayout">

<ch.spherIC.recurvebowsight.components.NumberAutoCompleteTextView
android:id="@+id/ssHorizontalSightSettingTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scHeVSLbl"
android:padding="16dp"
android:singleLine="true"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>

<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/ssaHVParamsFlow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:constraint_referenced_ids="ssaVLayout,ssaHLayout "
app:flow_wrapMode="aligned"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssHorizontalSightSettingLayout" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssaVLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingRight="4dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="339dp">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssaVTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scaVLbl"
android:nextFocusDown="@id/ssVertScaleRngTxt"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>


<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssaHLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
app:layout_constraintStart_toEndOf="@+id/ssaVLayout"
app:layout_constraintTop_toBottomOf="@+id/ssHorizontalSightSettingLayout">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssaHTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scaHLbl"
android:nextFocusDown="@id/ssVertScaleRngTxt"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>

<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/ssScaleParamsFlow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:constraint_referenced_ids="ssVertScaleRngLayout,ssVertScalePointerOffsetLayout"
app:flow_wrapMode="aligned"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssaHVParamsFlow" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssVertScaleRngLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingRight="4dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="339dp">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssVertScaleRngTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scVertScaleRngLbl"
android:nextFocusDown="@id/ssVertSkalaMiddleTxt"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssVertScalePointerOffsetLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
app:layout_constraintStart_toEndOf="@+id/ssVertScaleRngLayout"
app:layout_constraintTop_toBottomOf="@+id/ssaHLayout">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssVertScalePointerOffsetTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="@string/scVertScalePointerOffsetLbl"
android:nextFocusDown="@id/ssVertSkalaMiddleTxt"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>


<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssVertSkalaMiddleLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_weight="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssScaleParamsFlow">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssVertSkalaMiddleTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/scVertSkalaMiddleLbl"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="72dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssVertSkalaMiddleLayout">

<Space
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/ssEvSLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1"
app:boxCornerRadiusBottomEnd="8dp"
app:boxCornerRadiusBottomStart="8dp"
app:boxCornerRadiusTopEnd="8dp"
app:boxCornerRadiusTopStart="8dp"
app:boxStrokeWidth="2.5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ssScaleParamsFlow">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ssEvSTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:editable="false"
android:fontFamily="sans-serif-medium"
android:hint="@string/scEvSLbl"
android:paddingVertical="15dp"
android:singleLine="true"
android:textSize="20sp" />
</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_calculate"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:borderWidth="6dp"
app:fabSize="auto"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_calcsight_sightsetting" />
app:maxImageSize="36dp"
app:srcCompat="@drawable/ic_icon_calculate"
tools:ignore="SpeakableTextPresentCheck" />


</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

+ 1
- 1
app/src/main/res/layout/fragment_calcsight_trajectory.xml Visa fil

android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginHorizontal="8dp" android:layout_marginHorizontal="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:background="@color/light_gray"
android:background="@color/gray_light"
android:ems="10" android:ems="10"
android:inputType="textMultiLine" android:inputType="textMultiLine"
android:padding="4dp" android:padding="4dp"

+ 9
- 0
app/src/main/res/layout/simple_spinner_line.xml Visa fil

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/idSimpleLineText"
style="?android:attr/dropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu" />

+ 7
- 1
app/src/main/res/values-de/strings.xml Visa fil

<string name="rcVvisVLbl">VvisV [mm]</string> <string name="rcVvisVLbl">VvisV [mm]</string>
<string name="scTitleSightConfig">Konfiguration Visier</string> <string name="scTitleSightConfig">Konfiguration Visier</string>
<string name="rcSightLbl">Visier</string> <string name="rcSightLbl">Visier</string>
<string name="titleSightConfig">Visiereinstellung</string>
<string name="scRiserLbl">Griffstück</string>
<string name="scVvisHLbl">VvisH [mm]</string>
<string name="scVvisVLbl">VvisV [mm]</string>
<string name="scSightLbl">Visier</string>
<string name="scManufacturerLbl">Hersteller</string> <string name="scManufacturerLbl">Hersteller</string>
<string name="scModelLbl">Modell</string> <string name="scModelLbl">Modell</string>
<string name="scHeVSLbl">Horz. Einst. Visierschlitten [mm]</string> <string name="scHeVSLbl">Horz. Einst. Visierschlitten [mm]</string>
<string name="scaHLbl">aH [mm]</string> <string name="scaHLbl">aH [mm]</string>
<string name="scaVLbl">aV [mm]</string> <string name="scaVLbl">aV [mm]</string>
<string name="scVertScaleRngLbl">Bereich vert. Skala [mm] /\nSkalenversatz [mm]</string>
<string name="scVertScaleRngLbl">Bereich vert. Skala [mm]</string>
<string name="scVertScalePointerOffsetLbl">Skalenversatz [mm]</string>
<string name="scVertScaleRngMinLbl">Min. Bereich vert. Skala [mm]</string> <string name="scVertScaleRngMinLbl">Min. Bereich vert. Skala [mm]</string>
<string name="scVertScaleRngMaxLbl">Max. Bereich vert. Skala [mm]</string> <string name="scVertScaleRngMaxLbl">Max. Bereich vert. Skala [mm]</string>
<string name="scVertSkalaMiddleLbl">Mittelstellung M vert. Skala [mm]</string> <string name="scVertSkalaMiddleLbl">Mittelstellung M vert. Skala [mm]</string>

+ 9
- 1
app/src/main/res/values/colors.xml Visa fil

<color name="teal_700">#FF018786</color> <color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color> <color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<color name="light_gray">#EBF1F8</color>
<color name="gray_light">#EBF1F8</color>
<color name="gray_medium">#FFA0A0A0</color>
<color name="qrt_translucent_white">#BDFFFFFF</color> <color name="qrt_translucent_white">#BDFFFFFF</color>
<color name="semi_translucent_black">#80000000</color> <color name="semi_translucent_black">#80000000</color>
<color name="android_green">#FF99CC00</color>
<color name="android_green_dark">#FF669900</color>
<color name="android_yellow">#FFFFBB33</color>
<color name="android_yellow_dark">#FFFF8800</color>
<color name="android_red">#FFFF4444</color>
<color name="android_red_dark">#FFCC0000</color>

</resources> </resources>

+ 8
- 1
app/src/main/res/values/strings.xml Visa fil

<string name="rcVvisVLbl">VvisV [mm]</string> <string name="rcVvisVLbl">VvisV [mm]</string>
<string name="scTitleSightConfig">Sight Configuration</string> <string name="scTitleSightConfig">Sight Configuration</string>
<string name="rcSightLbl">Sight</string> <string name="rcSightLbl">Sight</string>
<string name="titleSightConfig">Sight Setting</string>
<string name="scRiserLbl">Riser</string>
<string name="scVvisHLbl">VvisH [mm]</string>
<string name="scVvisVLbl">VvisV [mm]</string>
<string name="scSightLbl">Sight</string>
<string name="scManufacturerLbl">Manufacturer</string> <string name="scManufacturerLbl">Manufacturer</string>
<string name="scModelLbl">Model</string> <string name="scModelLbl">Model</string>
<string name="scHeVSLbl">Horz. Sight Sliding Carriage [mm]</string> <string name="scHeVSLbl">Horz. Sight Sliding Carriage [mm]</string>
<string name="scaHLbl">aH [mm]</string> <string name="scaHLbl">aH [mm]</string>
<string name="scaVLbl">aV [mm]</string> <string name="scaVLbl">aV [mm]</string>
<string name="scVertScaleRngLbl">Vert. Scale Range [mm] /\nScale Pointer Offset [mm]</string>
<string name="scVertScaleRngLbl">Vert. Scale Range [mm]</string>
<string name="scVertScalePointerOffsetLbl">Scale Pointer Offset [mm]</string>
<string name="scVertScaleRngMinLbl">Vert. Scale Range Min. [mm]</string> <string name="scVertScaleRngMinLbl">Vert. Scale Range Min. [mm]</string>
<string name="scVertScaleRngMaxLbl">Vert. Scale Range Max. [mm]</string> <string name="scVertScaleRngMaxLbl">Vert. Scale Range Max. [mm]</string>
<string name="scVertSkalaMiddleLbl">Vert. Scale Middle Setting M [mm]</string> <string name="scVertSkalaMiddleLbl">Vert. Scale Middle Setting M [mm]</string>
<string name="fcChart_TitleLable">Trajectory</string> <string name="fcChart_TitleLable">Trajectory</string>
<string name="fcChart_TitleXAxis">Distance [m]</string> <string name="fcChart_TitleXAxis">Distance [m]</string>
<string name="fcChart_TitleYAxis">Height [m]</string> <string name="fcChart_TitleYAxis">Height [m]</string>

</resources> </resources>

Laddar…
Avbryt
Spara