├── app
├── listings
│ ├── play
│ │ ├── default-language.txt
│ │ ├── listings
│ │ │ └── en-US
│ │ │ │ ├── title.txt
│ │ │ │ ├── default-language.txt
│ │ │ │ ├── short-description.txt
│ │ │ │ ├── graphics
│ │ │ │ ├── icon
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ └── phone-screenshots
│ │ │ │ │ ├── 1_start.png
│ │ │ │ │ ├── 3_history.png
│ │ │ │ │ ├── 6_accounts.png
│ │ │ │ │ ├── 5_detail_map.png
│ │ │ │ │ ├── 7_start_advanced.png
│ │ │ │ │ ├── 8_start_intervall.png
│ │ │ │ │ ├── 2_recording_advanced.png
│ │ │ │ │ └── 4_detail_laps_advanced.png
│ │ │ │ └── full-description.txt
│ │ ├── contact-email.txt
│ │ ├── release-notes
│ │ │ └── en-US
│ │ │ │ └── production.txt
│ │ └── privacy.html
│ └── README.md
├── res
│ ├── resources.properties
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ ├── drawable-hdpi
│ │ ├── ic_stat_notify.png
│ │ ├── service_strava.png
│ │ ├── service_dropbox.png
│ │ ├── service_runalyze.png
│ │ ├── ic_tab_main_white_24dp.png
│ │ ├── title_spinner_normal.9.png
│ │ ├── title_spinner_disabled.9.png
│ │ ├── title_spinner_pressed.9.png
│ │ ├── title_spinner_selected.9.png
│ │ ├── ic_tab_history_white_24dp.png
│ │ ├── ic_tab_main_seccolor_24dp.png
│ │ ├── ic_tab_settings_white_24dp.png
│ │ ├── ic_tab_history_seccolor_24dp.png
│ │ ├── ic_tab_settings_seccolor_24dp.png
│ │ └── title_spinner_disabled_focused.9.png
│ ├── drawable-ldpi
│ │ └── ic_stat_notify.png
│ ├── drawable-mdpi
│ │ ├── ic_stat_notify.png
│ │ ├── tab_selected_holo.9.png
│ │ ├── tab_unselected_holo.9.png
│ │ ├── tab_selected_focused_holo.9.png
│ │ ├── tab_selected_pressed_holo.9.png
│ │ ├── tab_unselected_focused_holo.9.png
│ │ └── tab_unselected_pressed_holo.9.png
│ ├── drawable-xxhdpi
│ │ ├── ic_map_marker_end.png
│ │ ├── ic_map_marker_lap.png
│ │ ├── ic_map_marker_pause.png
│ │ ├── ic_map_marker_resume.png
│ │ └── ic_map_marker_start.png
│ ├── drawable-nodpi
│ │ └── ic_icon_runnerup30x30.png
│ ├── values
│ │ ├── fonts.xml
│ │ ├── dimens.xml
│ │ ├── mapbox.xml
│ │ ├── strings.xml
│ │ ├── title_spinner.xml
│ │ └── number_picker.xml
│ ├── values-v21
│ │ └── fonts.xml
│ ├── xml
│ │ ├── backup_descriptor.xml
│ │ ├── data_extraction_rules.xml
│ │ ├── settings_map.xml
│ │ ├── settings_controls.xml
│ │ └── settings_units.xml
│ ├── color
│ │ ├── bottom_tabs.xml
│ │ ├── switch_thumb.xml
│ │ └── btn_text_color.xml
│ ├── layout
│ │ ├── actionbar_spinner.xml
│ │ ├── settings_activity.xml
│ │ ├── actionbar_dropdown_spinner.xml
│ │ ├── start_fab.xml
│ │ ├── whatsnew.xml
│ │ ├── manage_workouts_list_row.xml
│ │ ├── account_list.xml
│ │ ├── manage_workouts_list_category.xml
│ │ ├── settings_wrapper.xml
│ │ └── advanced_workout_row.xml
│ ├── drawable
│ │ ├── circle_40dp.xml
│ │ ├── step_recovery.xml
│ │ ├── ic_start_white_24dp.xml
│ │ ├── step_active.xml
│ │ ├── ic_add_white_24dp.xml
│ │ ├── ic_expand_down_white_24dp.xml
│ │ ├── ic_expand_up_white_24dp.xml
│ │ ├── step_cooldown.xml
│ │ ├── step_resting.xml
│ │ ├── step_warmup.xml
│ │ ├── ic_heartrate_white_24dp.xml
│ │ ├── sport_orienteering.xml
│ │ ├── service_file.xml
│ │ ├── ic_watch_white_24dp.xml
│ │ ├── switch_upload.xml
│ │ ├── ic_gps_3.xml
│ │ ├── ic_gps_2.xml
│ │ ├── ic_gps_1.xml
│ │ ├── ic_gps_0.xml
│ │ ├── step_repeat.xml
│ │ ├── sport_walking.xml
│ │ ├── sport_running.xml
│ │ ├── ic_tab_main_24dp.xml
│ │ ├── ic_tab_history_24dp.xml
│ │ ├── ic_tab_settings_24dp.xml
│ │ ├── service_endurain.xml
│ │ ├── sport_other.xml
│ │ ├── btn_blue.xml
│ │ ├── btn_green.xml
│ │ ├── btn_red.xml
│ │ └── title_spinner.xml
│ ├── menu
│ │ ├── manual_menu.xml
│ │ ├── hrzonessettings_menu.xml
│ │ ├── account_menu.xml
│ │ └── detail_menu.xml
│ ├── mipmap-anydpi-v26
│ │ └── ic_launcher.xml
│ ├── drawable-v21
│ │ ├── ic_tab_history_24dp.xml
│ │ └── ic_tab_settings_24dp.xml
│ ├── drawable-v24
│ │ └── ic_launcher_background.xml
│ └── values-ru-rRU
│ │ └── cues.xml
├── assets
│ ├── Strava.data
│ ├── RunKeeper.data
│ ├── RunningAHEAD.data
│ ├── egm96-delta.dat
│ ├── about.html
│ └── bundled
│ │ ├── app_workouts
│ │ └── 4x4.json
│ │ └── shared_prefs
│ │ └── 100m_audio_cues.xml
├── .settings
│ └── org.eclipse.jdt.ui.prefs
└── src
│ ├── main
│ ├── org
│ │ ├── runnerup
│ │ │ ├── notification
│ │ │ │ ├── NotificationState.java
│ │ │ │ ├── NotificationDisplayStrategy.java
│ │ │ │ ├── NotificationManagerDisplayStrategy.java
│ │ │ │ └── ForegroundNotificationDisplayStrategy.java
│ │ │ ├── tracker
│ │ │ │ ├── GpsInformation.java
│ │ │ │ └── WorkoutObserver.java
│ │ │ ├── view
│ │ │ │ ├── SettingsMapFragment.java
│ │ │ │ ├── SettingsGraphFragment.java
│ │ │ │ ├── SettingsUnitsFragment.java
│ │ │ │ ├── SettingsWorkoutFragment.java
│ │ │ │ ├── SettingsControlsFragment.java
│ │ │ │ └── SettingsFragment.java
│ │ │ ├── util
│ │ │ │ ├── NetworkUtils.java
│ │ │ │ ├── TickListener.java
│ │ │ │ └── Bitfield.java
│ │ │ ├── workout
│ │ │ │ ├── SpeedUnit.java
│ │ │ │ ├── feedback
│ │ │ │ │ ├── HRMStateChangeFeedback.java
│ │ │ │ │ ├── UtterancePrio.java
│ │ │ │ │ └── VibrationFeedback.java
│ │ │ │ ├── TickComponent.java
│ │ │ │ ├── WorkoutStepListener.java
│ │ │ │ ├── TriggerSuppression.java
│ │ │ │ ├── HRMStateTrigger.java
│ │ │ │ ├── Scope.java
│ │ │ │ ├── Event.java
│ │ │ │ ├── Feedback.java
│ │ │ │ ├── WorkoutInfo.java
│ │ │ │ └── Range.java
│ │ │ ├── export
│ │ │ │ ├── util
│ │ │ │ │ ├── Writable.java
│ │ │ │ │ └── StringWritable.java
│ │ │ │ └── oauth2client
│ │ │ │ │ └── OAuth2Server.java
│ │ │ ├── db
│ │ │ │ └── entities
│ │ │ │ │ └── DBEntity.java
│ │ │ └── widget
│ │ │ │ └── SpinnerInterface.java
│ │ └── matthiaszimmermann
│ │ │ └── location
│ │ │ └── egm96
│ │ │ └── Cubic.java
│ └── com
│ │ └── goebl
│ │ └── simplify
│ │ ├── Point.java
│ │ └── PointExtractor.java
│ ├── mapbox
│ └── org
│ │ └── runnerup
│ │ └── util
│ │ └── MapViewWrapper.java
│ ├── nomap
│ └── org
│ │ └── runnerup
│ │ └── util
│ │ ├── MapViewWrapper.java
│ │ └── MapWrapper.java
│ ├── nonplay
│ └── org
│ │ └── runnerup
│ │ └── util
│ │ └── GoogleApiHelper.java
│ ├── play
│ └── org
│ │ └── runnerup
│ │ └── util
│ │ └── GoogleApiHelper.java
│ └── osmdroid
│ └── org
│ └── runnerup
│ └── util
│ └── MapViewWrapper.java
├── fastlane
├── metadata
│ └── android
│ │ ├── en-US
│ │ ├── title.txt
│ │ ├── changelogs
│ │ │ ├── 15000327.txt
│ │ │ ├── 15000324.txt
│ │ │ ├── 15000326.txt
│ │ │ ├── 21000356.txt
│ │ │ ├── 15000323.txt
│ │ │ ├── 21000340.txt
│ │ │ ├── 21000335.txt
│ │ │ ├── 21000331.txt
│ │ │ └── 21000337.txt
│ │ ├── short_description.txt
│ │ ├── images
│ │ │ ├── icon.png
│ │ │ └── phoneScreenshots
│ │ │ │ ├── 1_start.png
│ │ │ │ ├── 3_history.png
│ │ │ │ ├── 6_accounts.png
│ │ │ │ ├── 5_detail_map.png
│ │ │ │ ├── 7_start_advanced.png
│ │ │ │ ├── 8_start_intervall.png
│ │ │ │ ├── 2_recording_advanced.png
│ │ │ │ └── 4_detail_laps_advanced.png
│ │ └── full_description.txt
│ │ ├── zh-CN
│ │ └── short_description.txt
│ │ ├── ja
│ │ └── short_description.txt
│ │ ├── cs
│ │ └── short_description.txt
│ │ ├── he
│ │ └── short_description.txt
│ │ ├── it
│ │ └── short_description.txt
│ │ ├── de
│ │ └── short_description.txt
│ │ ├── fr
│ │ └── short_description.txt
│ │ ├── pl
│ │ └── short_description.txt
│ │ ├── ru
│ │ └── short_description.txt
│ │ ├── tr
│ │ └── short_description.txt
│ │ ├── pt
│ │ └── short_description.txt
│ │ ├── ro
│ │ └── short_description.txt
│ │ ├── uk
│ │ └── short_description.txt
│ │ ├── ar
│ │ └── short_description.txt
│ │ ├── pt-BR
│ │ └── short_description.txt
│ │ └── es
│ │ └── short_description.txt
└── README.md
├── CONTRIBUTING.md
├── get_it_on_f-droid.png
├── settings.gradle
├── .gitmodules
├── common
├── src
│ └── main
│ │ ├── res
│ │ ├── drawable-mdpi
│ │ │ ├── ic_av_stop.png
│ │ │ ├── ic_av_newlap.png
│ │ │ ├── ic_av_pause.png
│ │ │ └── ic_av_play_arrow.png
│ │ ├── values-tr
│ │ │ └── array.xml
│ │ ├── drawable
│ │ │ └── countdown_background.xml
│ │ ├── values-cs
│ │ │ └── array.xml
│ │ ├── values-fa
│ │ │ └── array.xml
│ │ ├── values-ar
│ │ │ └── strings.xml
│ │ ├── values-bs
│ │ │ └── array.xml
│ │ ├── values-fi
│ │ │ └── array.xml
│ │ ├── values-nb-rNO
│ │ │ └── array.xml
│ │ ├── values-in
│ │ │ └── array.xml
│ │ ├── values-mn-rMN
│ │ │ └── array.xml
│ │ ├── values-zh
│ │ │ └── array.xml
│ │ ├── values-ja
│ │ │ └── array.xml
│ │ ├── values-iw
│ │ │ └── array.xml
│ │ ├── values-sv
│ │ │ └── array.xml
│ │ ├── values-nl
│ │ │ └── array.xml
│ │ ├── values-uk
│ │ │ └── array.xml
│ │ ├── values-hu
│ │ │ └── array.xml
│ │ ├── values-nl-rNL
│ │ │ └── array.xml
│ │ ├── values-ro
│ │ │ └── array.xml
│ │ ├── values-it
│ │ │ └── array.xml
│ │ ├── values-ru
│ │ │ └── array.xml
│ │ ├── values-ca
│ │ │ └── array.xml
│ │ ├── values-de
│ │ │ └── array.xml
│ │ ├── values-fr
│ │ │ └── array.xml
│ │ ├── values-pl
│ │ │ └── array.xml
│ │ ├── values-es
│ │ │ └── array.xml
│ │ ├── values-lt
│ │ │ └── array.xml
│ │ ├── values-pt
│ │ │ └── array.xml
│ │ ├── values-pt-rBR
│ │ │ └── array.xml
│ │ └── values-nl-rBE
│ │ │ └── strings.xml
│ │ └── AndroidManifest.xml
├── lint.xml
└── lint-baseline.xml
├── wear
├── src
│ └── main
│ │ ├── res
│ │ ├── drawable-nodpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-mdpi
│ │ │ ├── ic_av_location.png
│ │ │ └── ic_av_empty_location.png
│ │ ├── values
│ │ │ └── dimen.xml
│ │ ├── color
│ │ │ └── action_button.xml
│ │ ├── drawable
│ │ │ ├── dot.xml
│ │ │ ├── searching_animation.xml
│ │ │ └── border.xml
│ │ └── layout
│ │ │ ├── countdown.xml
│ │ │ └── card1.xml
│ │ └── java
│ │ └── org
│ │ └── runnerup
│ │ └── view
│ │ └── StoppedFragment.java
├── lint-baseline.xml
├── proguard.txt
└── lint.xml
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitattributes
├── hrdevice
├── res
│ └── values
│ │ └── strings.xml
└── AndroidManifest.xml
├── .gitignore
├── release.properties.sample
├── gradle.properties
├── Documentation
└── workout.txt
├── CREDITS.md
├── .tx
└── config
├── .travis.yml
├── Project_Default.xml
└── Dockerfile
/app/listings/play/default-language.txt:
--------------------------------------------------------------------------------
1 | en-US
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/title.txt:
--------------------------------------------------------------------------------
1 | RunnerUp
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | RunnerUp
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/default-language.txt:
--------------------------------------------------------------------------------
1 | en-US
--------------------------------------------------------------------------------
/app/listings/play/contact-email.txt:
--------------------------------------------------------------------------------
1 | runnerup.android@gmail.com
--------------------------------------------------------------------------------
/app/res/resources.properties:
--------------------------------------------------------------------------------
1 | unqualifiedResLocale=en-US
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 使用 GPS 跟踪您的体育活动
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja/short_description.txt:
--------------------------------------------------------------------------------
1 | GPSを使用してあなたのスポーツ活動を追跡
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/15000327.txt:
--------------------------------------------------------------------------------
1 | #1145: Cadence exception
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/15000324.txt:
--------------------------------------------------------------------------------
1 | BLUETOOTH_SCAN required for BLE
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs/short_description.txt:
--------------------------------------------------------------------------------
1 | Sledování sportovních aktivit pomocí GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/he/short_description.txt:
--------------------------------------------------------------------------------
1 | מעקב אחר הפעילות הספורטיבית באמצעות GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Traccia le tue attività sportive con il GPS
2 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Please see the [wiki](https://github.com/jonasoreland/runnerup/wiki/CONTRIBUTING)
2 |
--------------------------------------------------------------------------------
/app/assets/Strava.data:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/assets/Strava.data
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/short_description.txt:
--------------------------------------------------------------------------------
1 | Sportliche Aktivitäten mittels GPS aufzeichnen
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/short_description.txt:
--------------------------------------------------------------------------------
1 | Suivez vos activités sportives à l'aide du GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl/short_description.txt:
--------------------------------------------------------------------------------
1 | Śledzenie aktywności sportowej za pomocą GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Отслеживайте свои занятия спортом с помощью GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | GPS kullanarak spor etkinliklerinizi izleyin
2 |
--------------------------------------------------------------------------------
/get_it_on_f-droid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/get_it_on_f-droid.png
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':common'
2 | include ':hrdevice'
3 | include ':app'
4 | include ':wear'
5 |
--------------------------------------------------------------------------------
/app/assets/RunKeeper.data:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/assets/RunKeeper.data
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/short_description.txt:
--------------------------------------------------------------------------------
1 | Rastreie as suas atividades desportivas usando GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ro/short_description.txt:
--------------------------------------------------------------------------------
1 | Urmăriți-vă activitățile sportive cu ajutorul GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Відстежуйте свої спортивні заняття за допомогою GPS
2 |
--------------------------------------------------------------------------------
/app/assets/RunningAHEAD.data:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/assets/RunningAHEAD.data
--------------------------------------------------------------------------------
/app/assets/egm96-delta.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/assets/egm96-delta.dat
--------------------------------------------------------------------------------
/fastlane/metadata/android/ar/short_description.txt:
--------------------------------------------------------------------------------
1 | تتبع نشاطاتك الرياضية باستخدام خدمة تحديد المواقع (GPS)
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/15000326.txt:
--------------------------------------------------------------------------------
1 | #1139: Timers not updated when device was in deep sleep
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Rastreie as suas atividades esportivas usando o GPS
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Realiza un seguimiento de tus actividades deportivas usando GPS
2 |
--------------------------------------------------------------------------------
/app/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21000356.txt:
--------------------------------------------------------------------------------
1 | #1211 Resurrect WearOS companion app
2 | #1215 Target Android 15
3 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | RunnerUp - an open source GPS tracker with advanced workout and audio cues.
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/short-description.txt:
--------------------------------------------------------------------------------
1 | RunnerUp - an open source GPS tracker with advanced workout and audio cues.
--------------------------------------------------------------------------------
/app/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "ANT-Android-SDKs"]
2 | path = ANT-Android-SDKs
3 | url = https://github.com/ant-wireless/ANT-Android-SDKs
4 |
--------------------------------------------------------------------------------
/app/.settings/org.eclipse.jdt.ui.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | formatter_profile=_Android
3 | formatter_settings_version=12
4 |
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/service_strava.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/service_strava.png
--------------------------------------------------------------------------------
/app/res/drawable-ldpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-ldpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/service_dropbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/service_dropbox.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/service_runalyze.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/service_runalyze.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/tab_selected_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/tab_selected_holo.9.png
--------------------------------------------------------------------------------
/app/res/drawable-xxhdpi/ic_map_marker_end.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-xxhdpi/ic_map_marker_end.png
--------------------------------------------------------------------------------
/app/res/drawable-xxhdpi/ic_map_marker_lap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-xxhdpi/ic_map_marker_lap.png
--------------------------------------------------------------------------------
/fastlane/README.md:
--------------------------------------------------------------------------------
1 | This directory contains the description for F-Droid.
2 |
3 | Also see the Play description (in GPP format) in app/listings/
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/15000323.txt:
--------------------------------------------------------------------------------
1 | Target Android 13
2 | Option to ignore time in GPS points
3 | ANT+ HR were not detected
4 |
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_tab_main_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_tab_main_white_24dp.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/title_spinner_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/title_spinner_normal.9.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/tab_unselected_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/tab_unselected_holo.9.png
--------------------------------------------------------------------------------
/app/res/drawable-nodpi/ic_icon_runnerup30x30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-nodpi/ic_icon_runnerup30x30.png
--------------------------------------------------------------------------------
/app/res/drawable-xxhdpi/ic_map_marker_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-xxhdpi/ic_map_marker_pause.png
--------------------------------------------------------------------------------
/app/res/drawable-xxhdpi/ic_map_marker_resume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-xxhdpi/ic_map_marker_resume.png
--------------------------------------------------------------------------------
/app/res/drawable-xxhdpi/ic_map_marker_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-xxhdpi/ic_map_marker_start.png
--------------------------------------------------------------------------------
/common/src/main/res/drawable-mdpi/ic_av_stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/common/src/main/res/drawable-mdpi/ic_av_stop.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/wear/src/main/res/drawable-nodpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/wear/src/main/res/drawable-nodpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/title_spinner_disabled.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/title_spinner_disabled.9.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/title_spinner_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/title_spinner_pressed.9.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/title_spinner_selected.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/title_spinner_selected.9.png
--------------------------------------------------------------------------------
/common/src/main/res/drawable-mdpi/ic_av_newlap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/common/src/main/res/drawable-mdpi/ic_av_newlap.png
--------------------------------------------------------------------------------
/common/src/main/res/drawable-mdpi/ic_av_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/common/src/main/res/drawable-mdpi/ic_av_pause.png
--------------------------------------------------------------------------------
/wear/src/main/res/drawable-mdpi/ic_av_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/wear/src/main/res/drawable-mdpi/ic_av_location.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_tab_history_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_tab_history_white_24dp.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_tab_main_seccolor_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_tab_main_seccolor_24dp.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_tab_settings_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_tab_settings_white_24dp.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/tab_selected_focused_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/tab_selected_focused_holo.9.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/tab_selected_pressed_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/tab_selected_pressed_holo.9.png
--------------------------------------------------------------------------------
/app/res/values/fonts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | sans-serif
4 |
5 |
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_tab_history_seccolor_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_tab_history_seccolor_24dp.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/ic_tab_settings_seccolor_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/ic_tab_settings_seccolor_24dp.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/tab_unselected_focused_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/tab_unselected_focused_holo.9.png
--------------------------------------------------------------------------------
/app/res/drawable-mdpi/tab_unselected_pressed_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
--------------------------------------------------------------------------------
/common/src/main/res/drawable-mdpi/ic_av_play_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/common/src/main/res/drawable-mdpi/ic_av_play_arrow.png
--------------------------------------------------------------------------------
/app/res/drawable-hdpi/title_spinner_disabled_focused.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/res/drawable-hdpi/title_spinner_disabled_focused.9.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21000340.txt:
--------------------------------------------------------------------------------
1 | #1193 Endurain upload support
2 | #1192 Audio coundown feedback
3 | #1190 Buttons in notifications in Android 14
4 |
--------------------------------------------------------------------------------
/wear/src/main/res/drawable-mdpi/ic_av_empty_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/wear/src/main/res/drawable-mdpi/ic_av_empty_location.png
--------------------------------------------------------------------------------
/app/res/values-v21/fonts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/res/xml/backup_descriptor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:e2b82129ab64751fd40437007bd2f7f2afb3c6e41a9198e628650b22d5824a14
3 | size 49896
4 |
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/icon/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/icon/ic_launcher.png
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | assets/*.data binary
2 | *.xml text eol=lf
3 | gradlew text eol=lf
4 | gradlew.bat text eol=crlf
5 | *.jar filter=lfs diff=lfs merge=lfs -text
6 | *.properties eol=lf
7 |
--------------------------------------------------------------------------------
/app/listings/README.md:
--------------------------------------------------------------------------------
1 | play/ contains the Play store listing in Gradle Play Publisher (GPP, previously called Triple-T) format.
2 |
3 | Also see the F-Droid description in fastlane/
4 |
--------------------------------------------------------------------------------
/common/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1_start.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3_history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3_history.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6_accounts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/6_accounts.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/1_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/1_start.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/3_history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/3_history.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21000335.txt:
--------------------------------------------------------------------------------
1 | Target Android 14
2 | Library updates and internal cleanup
3 | Translation updates for pt
4 | #1176 Remove old Wear support, to allow Play update
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5_detail_map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5_detail_map.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/6_accounts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/6_accounts.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/5_detail_map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/5_detail_map.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/7_start_advanced.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/7_start_advanced.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/8_start_intervall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/8_start_intervall.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/7_start_advanced.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/7_start_advanced.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2_recording_advanced.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2_recording_advanced.png
--------------------------------------------------------------------------------
/wear/src/main/res/values/dimen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 32dp
4 | 32dp
5 |
6 |
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/8_start_intervall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/8_start_intervall.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4_detail_laps_advanced.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4_detail_laps_advanced.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/2_recording_advanced.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/2_recording_advanced.png
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/graphics/phone-screenshots/4_detail_laps_advanced.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jonasoreland/runnerup/HEAD/app/listings/play/listings/en-US/graphics/phone-screenshots/4_detail_laps_advanced.png
--------------------------------------------------------------------------------
/wear/lint-baseline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/notification/NotificationState.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.notification;
2 |
3 | import android.app.Notification;
4 |
5 | public interface NotificationState {
6 | Notification createNotification();
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/tracker/GpsInformation.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.tracker;
2 |
3 | public interface GpsInformation {
4 | float getGpsAccuracy();
5 |
6 | int getSatellitesAvailable();
7 |
8 | int getSatellitesFixed();
9 | }
10 |
--------------------------------------------------------------------------------
/wear/proguard.txt:
--------------------------------------------------------------------------------
1 | #Suppress warnings for proguard, for all irrelevant warnings
2 |
3 | #PlayServices related?
4 | -dontnote com.google.protobuf.zz*
5 | -dontnote com.google.android.gms.dynamic.IObjectWrapper
6 | -dontwarn com.google.android.wearable.**
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21000331.txt:
--------------------------------------------------------------------------------
1 | Prepare for Android 14
2 | Library updates and internal cleanup
3 | Update ANT+ library (finally with Android 13 fixes)
4 | Translation updates for iw, nl, zh, es, de
5 | Set time from system clock correction
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21000337.txt:
--------------------------------------------------------------------------------
1 | Target Android 14
2 | Library updates and internal cleanup
3 | Translation updates for pt
4 | #1176 Remove old Wear support, to allow Play update
5 | Remove e-NL locale, interfered with default English in Android 14
--------------------------------------------------------------------------------
/app/res/color/bottom_tabs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/res/color/switch_thumb.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/hrdevice/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | HRDevice
3 |
4 | pref_bt_paired_ble
5 | pref_bt_experimental
6 | pref_bt_mock
7 |
8 |
--------------------------------------------------------------------------------
/app/res/layout/actionbar_spinner.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/res/layout/settings_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/notification/NotificationDisplayStrategy.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.notification;
2 |
3 | import android.app.Notification;
4 |
5 | interface NotificationDisplayStrategy {
6 | void notify(int notificationId, Notification notification);
7 |
8 | void cancel(int notificationId);
9 | }
10 |
--------------------------------------------------------------------------------
/app/res/drawable/circle_40dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
9 |
12 |
--------------------------------------------------------------------------------
/app/res/layout/actionbar_dropdown_spinner.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/listings/play/release-notes/en-US/production.txt:
--------------------------------------------------------------------------------
1 | The major feature in 2.0 is a refreshed user interface using material design as well as many smaller cleanups and corrections.
2 |
3 | For details, see the change log in the app or at GitHub: https://htmlpreview.github.io/?https://raw.githubusercontent.com/jonasoreland/runnerup/blob/HEAD/app/assets/changes.html
--------------------------------------------------------------------------------
/app/res/drawable/step_recovery.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_start_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/menu/manual_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
9 |
--------------------------------------------------------------------------------
/app/res/drawable/step_active.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/common/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_add_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_expand_down_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_expand_up_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 88dp
4 | 16dp
5 |
6 | 20dp
7 | 44dp
8 | 24dp
9 | 8dp
10 |
--------------------------------------------------------------------------------
/app/res/drawable/step_cooldown.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/drawable/step_resting.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/drawable/step_warmup.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/mapbox/org/runnerup/util/MapViewWrapper.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.util;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 |
6 | public class MapViewWrapper extends com.mapbox.mapboxsdk.maps.MapView {
7 |
8 | public MapViewWrapper(Context context) {
9 | super(context);
10 | }
11 |
12 | public MapViewWrapper(Context context, AttributeSet attributeSet) {
13 | super(context, attributeSet);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/view/SettingsMapFragment.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.view;
2 |
3 | import android.os.Bundle;
4 | import androidx.preference.PreferenceFragmentCompat;
5 | import org.runnerup.R;
6 |
7 | public class SettingsMapFragment extends PreferenceFragmentCompat {
8 |
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
11 | setPreferencesFromResource(R.xml.settings_map, rootKey);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/nomap/org/runnerup/util/MapViewWrapper.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.util;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.view.View;
6 |
7 | public class MapViewWrapper extends View {
8 |
9 | public MapViewWrapper(final Context context) {
10 | super(context);
11 | }
12 |
13 | public MapViewWrapper(final Context context, final AttributeSet attrs) {
14 | super(context, attrs);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/view/SettingsGraphFragment.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.view;
2 |
3 | import android.os.Bundle;
4 | import androidx.preference.PreferenceFragmentCompat;
5 | import org.runnerup.R;
6 |
7 | public class SettingsGraphFragment extends PreferenceFragmentCompat {
8 |
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
11 | setPreferencesFromResource(R.xml.settings_graph, rootKey);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/view/SettingsUnitsFragment.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.view;
2 |
3 | import android.os.Bundle;
4 | import androidx.preference.PreferenceFragmentCompat;
5 | import org.runnerup.R;
6 |
7 | public class SettingsUnitsFragment extends PreferenceFragmentCompat {
8 |
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
11 | setPreferencesFromResource(R.xml.settings_units, rootKey);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/view/SettingsWorkoutFragment.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.view;
2 |
3 | import android.os.Bundle;
4 | import androidx.preference.PreferenceFragmentCompat;
5 | import org.runnerup.R;
6 |
7 | public class SettingsWorkoutFragment extends PreferenceFragmentCompat {
8 |
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
11 | setPreferencesFromResource(R.xml.settings_workout, rootKey);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Local configuration file (sdk path, etc)
2 | local.properties
3 |
4 | # Gedit temp files
5 | *~
6 |
7 | # gradle files
8 | .gradle/
9 | .idea/
10 | build/
11 | gen/
12 |
13 | #app bundle files
14 | *.aab
15 |
16 | # Intellij files (Android Studio)
17 | *.iml
18 |
19 | # NetBeans IDE project files
20 | /.nb-gradle/private/
21 |
22 | # Release signing property file
23 | release.properties
24 | /mapbox.properties
25 | /runalyze.properties
26 | /dropbox.properties
27 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/view/SettingsControlsFragment.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.view;
2 |
3 | import android.os.Bundle;
4 | import androidx.preference.PreferenceFragmentCompat;
5 | import org.runnerup.R;
6 |
7 | public class SettingsControlsFragment extends PreferenceFragmentCompat {
8 |
9 | @Override
10 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
11 | setPreferencesFromResource(R.xml.settings_controls, rootKey);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/common/lint-baseline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/common/src/main/res/values-tr/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | - Süre
7 | - Mesafe
8 |
9 |
10 | - Erkek
11 | - Kadın
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_heartrate_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/drawable/sport_orienteering.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/res/drawable/service_file.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/util/NetworkUtils.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.util;
2 |
3 | import android.content.Context;
4 | import android.net.ConnectivityManager;
5 | import android.net.NetworkInfo;
6 |
7 | public class NetworkUtils {
8 | public static boolean isNetworkAvailable(Context context) {
9 | ConnectivityManager cm =
10 | (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
11 | NetworkInfo netInfo = cm.getActiveNetworkInfo();
12 | return netInfo != null && netInfo.isConnectedOrConnecting();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_watch_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/layout/start_fab.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/release.properties.sample:
--------------------------------------------------------------------------------
1 | # Sample release.properties.
2 | # Specifies the details of the keystore and key that will sign a release build
3 | #
4 | # Make a copy of this file as 'release.properties' and it will be used to sign release builds.
5 | # 'release.properties' will not be added to the repository
6 |
7 | # Path of keystore, either absolute or relative to the project's top directory
8 | keyStore=/path/to/keystore.jks
9 | keyStorePassword=my_keystore_password
10 | # The name of the alias in the keystore that you wish to use for signing
11 | keyAlias=runnerup
12 | keyAliasPassword=my_key_alias_password
--------------------------------------------------------------------------------
/app/res/drawable/switch_upload.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/listings/play/privacy.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | RunnerUp records location (GPS) when an activity is started, as well steps (for cadence).
4 | The recording is done also when the app is in background (a notification is always shown when location is enabled)
5 |
6 | A user can export this information to accounts (files or web services), the information is not shared in any other way.
7 |
8 |
9 | The external accounts have separate privacy policies.
10 | Note that usage of the map has a separate policy: MapBox privacy policy
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/res/drawable-v21/ic_tab_history_24dp.xml:
--------------------------------------------------------------------------------
1 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/hrdevice/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_gps_3.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # R8 is not displaying warnings for configuration issues, proguard may be required
2 | # Build with ./gradlew app:minifyLatestReleaseWithProguard
3 | #android.enableR8=false
4 | android.enableJetifier=true
5 | android.useAndroidX=true
6 | org.gradle.caching = true
7 | org.gradle.parallel = true
8 | org.gradle.configureondemand = true
9 | org.gradle.vfs.watch = true
10 | org.gradle.unsafe.configuration-cache=true
11 | android.nonTransitiveRClass=true
12 | android.nonFinalResIds=true
13 | # org.runnerup.free=true
14 | # org.gradle.jvmargs=-Xmx4096M
15 | # org.runnerup.hr.disableAntPlus=true
16 | # org.runnerup.wear.disable=true
17 |
18 | # Disable map (i.e. neither MapBox nor osmdroid is used)
19 | # org.runnerup.nomap=true
20 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/SpeedUnit.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.workout;
2 |
3 | import org.runnerup.common.util.Constants;
4 |
5 | public enum SpeedUnit {
6 | SPEED(Constants.SPEED_UNIT.SPEED, org.runnerup.common.R.string.speed),
7 | PACE(Constants.SPEED_UNIT.PACE, org.runnerup.common.R.string.pace);
8 |
9 | final String value;
10 | final int textId;
11 |
12 | SpeedUnit(String val, int textId) {
13 | this.value = val;
14 | this.textId = textId;
15 | }
16 |
17 | public String getValue() {
18 | return value;
19 | }
20 |
21 | public int getTextId() {
22 | return textId;
23 | }
24 |
25 | public boolean equal(SpeedUnit what) {
26 | return !(what == null || !what.value.equals(this.value));
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_gps_2.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
16 |
17 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_gps_1.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
13 |
17 |
18 |
--------------------------------------------------------------------------------
/app/res/drawable-v24/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/notification/NotificationManagerDisplayStrategy.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.notification;
2 |
3 | import android.app.Notification;
4 | import android.app.NotificationManager;
5 |
6 | public class NotificationManagerDisplayStrategy implements NotificationDisplayStrategy {
7 | private final NotificationManager notificationManager;
8 |
9 | public NotificationManagerDisplayStrategy(NotificationManager notificationManager) {
10 | this.notificationManager = notificationManager;
11 | }
12 |
13 | @Override
14 | public void notify(int notificationId, Notification notification) {
15 | notificationManager.notify(notificationId, notification);
16 | }
17 |
18 | @Override
19 | public void cancel(int notificationId) {
20 | notificationManager.cancel(notificationId);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_gps_0.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
14 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/feedback/HRMStateChangeFeedback.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.workout.feedback;
2 |
3 | import android.content.Context;
4 | import org.runnerup.workout.HRMStateTrigger;
5 | import org.runnerup.workout.Scope;
6 | import org.runnerup.workout.Workout;
7 |
8 | public class HRMStateChangeFeedback extends AudioFeedback {
9 | public HRMStateChangeFeedback(HRMStateTrigger trigger) {
10 | // Set temporary id, overridden in getCue()
11 | super(org.runnerup.common.R.string.cue_hrm_connection_lost);
12 | }
13 |
14 | String getCue(Workout w, Context ctx) {
15 | return (formatter.getCueString(
16 | (w.getHeartRate(Scope.CURRENT) == 0)
17 | ? org.runnerup.common.R.string.cue_hrm_connection_lost
18 | : org.runnerup.common.R.string.cue_hrm_connection_restored));
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Documentation/workout.txt:
--------------------------------------------------------------------------------
1 | = name +
2 |
3 | = ? ? * ?
4 |
5 | = running | cycling
6 |
7 | = active | resting | recovery | warmup | cooldown
8 |
9 | = time | distance | pace | speed
10 |
11 | = workout | activity | lap
12 |
13 | = value
14 |
15 | = pace | speed | heart rate | heart rate zone
16 |
17 | = [ | ] +
18 |
19 | = first interval
20 |
21 | =
22 |
23 | = started | completed | paused | resumed
24 |
25 | = | | |
26 |
27 | = ( remaining? ) | ( )
28 |
29 |
--------------------------------------------------------------------------------
/CREDITS.md:
--------------------------------------------------------------------------------
1 | * icon from http://openclipart.org/detail/77317/running-pictogram-by-shokunin
2 | * src/org/runnerup/util/JsonWriter.java from ASOP (>= android 3.x)
3 | * res/drawable*/*holo* from ASOP
4 | * icons from https://octicons.github.com/
5 | * [Material icons v2.2](https://github.com/google/material-design-icons) (in the bottom nav. bar) by Google are licensed under [CC-BY 4.0](http://creativecommons.org/licenses/by/4.0/)
6 |
7 | * The Facebook icon was used in accordance to its [guidelines](https://en.facebookbrand.com/assets/f-logo). The symbol is intellectual property of Facebook.
8 | * Runalyze logo used with permission from Runalyze.
9 | * Jogg.se logo used with official permission, under the conditions that it isn't misused.
10 | * The Garmin Connect logo used in accordance to the [Garmin brand guidelines](https://developer.garmin.com/resources/brand-guidelines/).
11 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/util/TickListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.util;
19 |
20 | public interface TickListener {
21 |
22 | void onTick();
23 | }
24 |
--------------------------------------------------------------------------------
/app/res/drawable/step_repeat.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/.tx/config:
--------------------------------------------------------------------------------
1 | [main]
2 | host = https://app.transifex.com
3 | lang_map = fr_CA:fr-rCA,pt_BR:pt-rBR,pt_PT:pt,zh_CN:zh,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,de_DE:de,tr_TR:tr,fr_FR:fr,es_ES:es,hu_HU:hu,he:iw,sv_SE:sv,bg_BG:bg,el_GR:el,kn_IN:kn-rIN,cs_CZ:cs,mn_MN:mn-rMN,nl_BE:nl-rBE,nl_NL:nl-rNL,lt_LT:lt,nb_NO:nb-rNO,ru_RU:ru-rRU,id:in
4 | minimum_perc = 10
5 |
6 | [o:runner-up:p:runner-up-android:r:stringsxml]
7 | file_filter = common/src/main/res/values-/strings.xml
8 | source_file = common/src/main/res/values/strings.xml
9 | source_lang = en
10 | type = ANDROID
11 |
12 | [o:runner-up:p:runner-up-android:r:cuesxml]
13 | file_filter = app/res/values-/cues.xml
14 | source_file = app/res/values/cues.xml
15 | source_lang = en
16 | type = ANDROID
17 |
18 | [o:runner-up:p:runner-up-android:r:arrayxml]
19 | file_filter = common/src/main/res/values-/array.xml
20 | source_file = common/src/main/res/values/array.xml
21 | source_lang = en
22 | type = ANDROID
23 |
--------------------------------------------------------------------------------
/app/assets/about.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | About RunnerUp
5 |
6 |
7 | RunnerUp
8 | RunnerUp wiki
9 | RunnerUp issue list
10 | Release History
11 | Help translate (Transifex)
12 |
13 | 3rd party software
14 |
15 | GraphView
16 | MapBox
17 | Android ANT+ SDK
18 | PebbleKit Android
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/TickComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout;
19 |
20 | interface TickComponent extends WorkoutComponent {
21 | boolean onTick(Workout w);
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/WorkoutStepListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 niklas.weidemann
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package org.runnerup.workout;
18 |
19 | public interface WorkoutStepListener {
20 | void onStepChanged(Step oldStep, Step newStep);
21 | }
22 |
--------------------------------------------------------------------------------
/app/res/values-ru-rRU/cues.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 | разминка
18 | заминка
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/TriggerSuppression.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout;
19 |
20 | public abstract class TriggerSuppression {
21 |
22 | public abstract boolean suppress(Trigger trigger, Workout w);
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/export/util/Writable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.export.util;
19 |
20 | import java.io.IOException;
21 | import java.io.OutputStream;
22 |
23 | interface Writable {
24 | void write(OutputStream out) throws IOException;
25 | }
26 |
--------------------------------------------------------------------------------
/app/assets/bundled/app_workouts/4x4.json:
--------------------------------------------------------------------------------
1 | {"com.garmin.connect.workout.json.UserWorkoutJson":{"workoutSteps":[{"stepTypeKey":"warmup","endConditionTypeKey":"lap.button","endConditionUnitKey":"dimensionless","targetTypeKey":"no.target","targetValueUnitKey":"dimensionless","stepOrder":1,"groupId":1},{"stepTypeKey":"repeat","endConditionTypeKey":"iterations","endConditionValue":4,"endConditionUnitKey":"dimensionless","stepOrder":2,"groupId":2},{"stepTypeKey":"interval","endConditionTypeKey":"time","endConditionValue":240000,"endConditionUnitKey":"ms","targetTypeKey":"no.target","targetValueUnitKey":"dimensionless","stepOrder":3,"groupId":2,"parentGroupId":2},{"stepTypeKey":"recovery","endConditionTypeKey":"time","endConditionValue":180000,"endConditionUnitKey":"ms","targetTypeKey":"no.target","targetValueUnitKey":"dimensionless","stepOrder":4,"groupId":2,"parentGroupId":2},{"stepTypeKey":"cooldown","endConditionTypeKey":"lap.button","endConditionUnitKey":"dimensionless","targetTypeKey":"no.target","targetValueUnitKey":"dimensionless","stepOrder":5,"groupId":3}]}}
--------------------------------------------------------------------------------
/app/res/drawable/sport_walking.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/db/entities/DBEntity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.db.entities;
19 |
20 | import android.database.sqlite.SQLiteDatabase;
21 |
22 | public interface DBEntity {
23 |
24 | long insert(SQLiteDatabase db);
25 |
26 | void update(SQLiteDatabase db);
27 | }
28 |
--------------------------------------------------------------------------------
/app/res/drawable/sport_running.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/res/values/mapbox.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 | mapbox://styles/mapbox/outdoors-v11
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/tracker/WorkoutObserver.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 niklas.weidemann
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package org.runnerup.tracker;
18 |
19 | import org.runnerup.workout.WorkoutInfo;
20 |
21 | public interface WorkoutObserver {
22 | // @note: type is in Constants.DB.LOCATION.TYPE
23 | void workoutEvent(WorkoutInfo workoutInfo, int type);
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/nonplay/org/runnerup/util/GoogleApiHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 - 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.util;
19 |
20 | import android.content.Context;
21 |
22 | public class GoogleApiHelper {
23 | public static boolean isGooglePlayServicesAvailable(Context context) {
24 | return false;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/res/color/btn_text_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/wear/src/main/res/color/action_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/feedback/UtterancePrio.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2025 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout.feedback;
19 |
20 | // Higher prio will interrupt (flush) lower prio.
21 | enum UtterancePrio {
22 | PRIO_CUE(0),
23 | PRIO_COACH(1),
24 | PRIO_COUNTDOWN(2);
25 |
26 | private UtterancePrio(int val) { value = val; }
27 | final int value;
28 | };
29 |
--------------------------------------------------------------------------------
/app/res/menu/hrzonessettings_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
24 |
25 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | env:
2 | global:
3 | - ANDROID_API=35
4 | - ANDROID_BUILD_TOOLS=36.0.0
5 | - ADB_INSTALL_TIMEOUT=5
6 | language: android
7 | jdk:
8 | - oraclejdk8
9 | cache:
10 | directories:
11 | - $HOME/.gradle/caches/
12 | - $HOME/.gradle/wrapper/
13 | before_cache:
14 | - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
15 | - rm -f $HOME/.gradle/caches/*/classAnalysis/cache.properties.lock
16 | - rm -f $HOME/.gradle/caches/*/jarSnapshots/cache.properties.lock
17 | - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
18 | android:
19 | components:
20 | - tools #latest for "builtin" sdk tools (24.4.1 in Android-25)
21 | #To update SDK Tools to latest, another update is required
22 | #- tools #latest, 26.1.1 as of 2018-10-07
23 | #- platform-tools #latest, 28.0.1 as of 2018-10-07
24 | - build-tools-$ANDROID_BUILD_TOOLS
25 | - android-$ANDROID_API
26 | - extra-android-m2repository
27 | - extra-google-m2repository
28 | - extra-google-google_play_services
29 | notifications:
30 | email: false
31 | script:
32 | - ./gradlew wear:lintRelease
33 | - ./gradlew app:lintLatestRelease
34 | - ./gradlew app:assembleLatestRelease
35 | - ./gradlew app:test
36 |
--------------------------------------------------------------------------------
/app/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 | mm(31);kz(5,13);sg(5)
18 | +
19 | -
20 | 3
21 |
22 |
--------------------------------------------------------------------------------
/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:16.04
2 |
3 | ENV DEBIAN_FRONTEND noninteractive
4 |
5 | RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true\
6 | | debconf-set-selections
7 | RUN apt update &&\
8 | apt upgrade -y &&\
9 | apt install -y software-properties-common git unzip wget vim &&\
10 | add-apt-repository -y ppa:webupd8team/java &&\
11 | apt update &&\
12 | apt install -y oracle-java8-installer &&\
13 | apt clean &&\
14 | rm -rf /var/lib/apt/lists/* /var/cache/oracle-jdk8-installer
15 | RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz &&\
16 | tar xf android-sdk_r24.4.1-linux.tgz &&\
17 | mv android-sdk-linux /usr/local/android-sdk &&\
18 | rm android-sdk_r24.4.1-linux.tgz
19 | RUN echo y | /usr/local/android-sdk/tools/android update sdk --filter "platform-tools,android-27,build-tools-27.0.3,tools,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services" --no-ui -a
20 | RUN wget https://services.gradle.org/distributions/gradle-4.4-bin.zip &&\
21 | unzip gradle-4.4-bin.zip &&\
22 | mv gradle-4.4/bin/* /usr/bin/ &&\
23 | mv gradle-4.4/lib/* /usr/lib/ &&\
24 | rm -rf gradle-4.4*
25 |
26 |
--------------------------------------------------------------------------------
/wear/src/main/res/drawable/dot.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
20 |
21 |
25 |
26 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_tab_main_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/HRMStateTrigger.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.workout;
2 |
3 | import org.runnerup.hr.HRProvider;
4 |
5 | public class HRMStateTrigger extends Trigger {
6 | private boolean isConnected;
7 |
8 | @Override
9 | public boolean onTick(Workout w) {
10 | boolean newState = getState(w);
11 | if (newState != isConnected) {
12 | isConnected = newState;
13 | fire(w);
14 | }
15 | return false;
16 | }
17 |
18 | @Override
19 | public void onRepeat(int current, int limit) {}
20 |
21 | private boolean getState(Workout s) {
22 | if (s.tracker == null) {
23 | // Taskkiller?
24 | return false;
25 | }
26 | HRProvider hrProvider = s.tracker.getHRProvider();
27 | if (hrProvider != null) return (hrProvider.isConnected());
28 | return (false);
29 | }
30 |
31 | @Override
32 | public void onStart(Scope what, Workout s) {
33 | isConnected = getState(s);
34 | }
35 |
36 | @Override
37 | public void onPause(Workout s) {}
38 |
39 | @Override
40 | public void onStop(Workout s) {}
41 |
42 | @Override
43 | public void onResume(Workout s) {}
44 |
45 | @Override
46 | public void onComplete(Scope what, Workout s) {}
47 | }
48 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_tab_history_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/wear/src/main/res/drawable/searching_animation.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
20 |
21 |
24 |
27 |
--------------------------------------------------------------------------------
/app/res/drawable/ic_tab_settings_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/res/values/title_spinner.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/res/layout/whatsnew.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
22 |
23 |
28 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/export/util/StringWritable.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.export.util;
19 |
20 | import java.io.IOException;
21 | import java.io.OutputStream;
22 |
23 | public class StringWritable implements Writable {
24 | private final byte[] s;
25 |
26 | public StringWritable(String s) {
27 | this.s = s.getBytes();
28 | }
29 |
30 | public StringWritable(byte[] s) {
31 | this.s = s;
32 | }
33 |
34 | public void write(OutputStream out) throws IOException {
35 | out.write(s);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/common/src/main/res/drawable/countdown_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
20 |
21 |
22 |
27 |
--------------------------------------------------------------------------------
/common/src/main/res/values-cs/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Míle
5 | - Kilometry
6 |
7 |
8 | - Tempo
9 | - Rychlost
10 |
11 |
12 |
13 | - Rozehřátí
14 | - Aktivní
15 | - Odpočinek
16 | - Zotavení
17 | - Zklidnění
18 |
19 |
20 | - Do stisknutí
21 | - Čas
22 | - Vzdálenost
23 |
24 |
25 |
26 | - Běh
27 | - Cyklistika
28 | - Jiné
29 | - Orientační běh
30 | - Chůze
31 |
32 |
33 | - Čas
34 | - Vzdálenost
35 |
36 |
37 | - Muž
38 | - Žena
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/res/values/number_picker.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/feedback/VibrationFeedback.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout.feedback;
19 |
20 | import android.content.Context;
21 | import org.runnerup.workout.Feedback;
22 | import org.runnerup.workout.Workout;
23 |
24 | public class VibrationFeedback extends Feedback {
25 |
26 | @Override
27 | public boolean equals(Feedback _other) {
28 | return _other instanceof VibrationFeedback;
29 | }
30 |
31 | @Override
32 | public void emit(Workout s, Context ctx) {
33 | // TODO Auto-generated method stub
34 |
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/export/oauth2client/OAuth2Server.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.export.oauth2client;
19 |
20 | public interface OAuth2Server {
21 | /**
22 | * Used as title when opening authorization dialog
23 | *
24 | * @return
25 | */
26 | String getName();
27 |
28 | String getClientId();
29 |
30 | String getRedirectUri();
31 |
32 | String getClientSecret();
33 |
34 | String getAuthUrl();
35 |
36 | String getAuthExtra();
37 |
38 | String getTokenUrl();
39 |
40 | @SuppressWarnings("SameReturnValue")
41 | String getRevokeUrl();
42 | }
43 |
--------------------------------------------------------------------------------
/common/src/main/res/values-fa/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - مایل
5 | - کیلومتر
6 |
7 |
8 |
9 | - گرم کردن
10 | - فعال
11 | - استراحت
12 | - ریکاوری
13 | - سرد کردن
14 |
15 |
16 | - تا زمانی که فشار داده شود
17 | - زمان
18 | - مسافت
19 |
20 |
21 | - هیچکدام
22 | - سرعت
23 | - محدوده ضربان قلب
24 |
25 |
26 |
27 | - دویدن
28 | - دوچرخه سواری
29 | - باقی
30 | - جهتیابی
31 | - قدم زدن
32 |
33 |
34 | - زمان
35 | - مسافت
36 |
37 |
38 | - مرد
39 | - زن
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/common/src/main/res/values-ar/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | التعافي
24 | الإحماء
25 | الراحة
26 |
27 |
--------------------------------------------------------------------------------
/common/src/main/res/values-bs/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Milje
5 | - Kilometri
6 |
7 |
8 |
9 | - Zagrijavanje
10 | - Aktivan
11 | - Odmor
12 | - Oporavak
13 | - Hlađenje
14 |
15 |
16 | - Do pritiska
17 | - Vrijeme
18 | - Razdaljina
19 |
20 |
21 | - Ništa
22 | - Tempo
23 | - Zona pulsa
24 |
25 |
26 |
27 | - Trčanje
28 | - Bicikl
29 | - Ostalo
30 | - Planinarenje
31 | - Hodanje
32 |
33 |
34 | - Vrijeme
35 | - Udaljenost
36 |
37 |
38 | - Muško
39 | - Žensko
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/common/src/main/res/values-fi/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mailit
5 | - Kilometrit
6 |
7 |
8 |
9 | - Lämmittely
10 | - Aktiivinen
11 | - Lepo
12 | - Palautuminen
13 | - Jäähdyttely
14 |
15 |
16 | - Kunnes painettu
17 | - Aika
18 | - Matka
19 |
20 |
21 | - Ei mitään
22 | - Vauhti
23 | - Sykealue
24 |
25 |
26 |
27 | - Juokseminen
28 | - Pyöräily
29 | - Muu
30 | - Suunnistus
31 | - Kävely
32 |
33 |
34 | - Aika
35 | - Matka
36 |
37 |
38 | - Mies
39 | - Nainen
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/common/src/main/res/values-nb-rNO/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mil
5 | - Kilometer
6 |
7 |
8 |
9 | - Oppvarming
10 | - Aktivitet
11 | - Hvile
12 | - Restitusjon
13 | - Avkjøling
14 |
15 |
16 | - Fårestående trykk
17 | - Tid
18 | - Distanse
19 |
20 |
21 | - Ingen
22 | - Fart
23 | - Hjerterytmesone
24 |
25 |
26 |
27 | - Springing
28 | - Sykling
29 | - Annet
30 | - Orientering
31 | - Gåing
32 |
33 |
34 | - Tid
35 | - Distanse
36 |
37 |
38 | - Mann
39 | - Dame
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/common/src/main/res/values-in/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mil
5 | - Kilometer
6 |
7 |
8 |
9 | - Pemanasan
10 | - Aktif
11 | - Istirahat
12 | - Pemulihan
13 | - Pendinginan
14 |
15 |
16 | - Sampai dihentikan
17 | - Waktu
18 | - Jarak
19 |
20 |
21 | - Tiada
22 | - Laju
23 | - Zona denyut jantung
24 |
25 |
26 |
27 | - Lari
28 | - Sepeda
29 | - Lainnya
30 | - Orienteering
31 | - Jalan kaki
32 |
33 |
34 | - Waktu
35 | - Jarak
36 |
37 |
38 | - Pria
39 | - Wanita
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/res/drawable-v21/ic_tab_settings_24dp.xml:
--------------------------------------------------------------------------------
1 |
9 |
13 |
14 |
--------------------------------------------------------------------------------
/app/res/drawable/service_endurain.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/common/src/main/res/values-mn-rMN/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Миль
5 | - Километерүүд
6 |
7 |
8 |
9 | - Халаалт
10 | - Идэвхтэй үе
11 | - Амралт
12 | - Сэргэлт
13 | - Хөргөлт
14 |
15 |
16 | - Дарж дуустал
17 | - Хугацаа
18 | - Зай
19 |
20 |
21 |
22 | - Гүйлт
23 | - Дугуй унах
24 | - Бусад
25 | - Чиг баримжаа олох
26 | - Алхалт
27 |
28 |
29 | - Цаг
30 | - Зай
31 |
32 |
33 | - Эрэгтэй
34 | - Эмэгтэй
35 |
36 |
37 |
38 | - Радиалын зай (хурдан)
39 | - Рамер-Дуглас-Пойкер (өндөр чанартай)
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/assets/bundled/shared_prefs/100m_audio_cues.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | no
7 |
8 | 120
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 100
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/listings/play/listings/en-US/full-description.txt:
--------------------------------------------------------------------------------
1 | No ads, no in-app purchases, everything free.
2 | No user registration and/or tracking*.
3 |
4 | Track your sport activities with RunnerUp using the GPS in your Android phone:
5 |
6 | * See detailed stats around your pace, distance and time
7 | * Get stats and progress with built-in highly configurable audio cues
8 | * Run free runs with target pace or target heart rate zone
9 | * Easily configure and run effective interval workouts modeled after Garmin
10 | * Automatic upload to various external applications such as Strava and Runalyze. Some also support download and feed updates ([see here for details](https://github.com/jonasoreland/runnerup/wiki/Synchronization-with-external-providers)).
11 | * Share your favorite workouts with friends (using email)
12 | * Heart rate monitor: Bluetooth SMART (BLE) and ANT+ (as well as PolarWearLink and Zephyr)
13 | * Configure and use heart rate zones
14 | * Pebble support
15 |
16 | Upload your activities to a variety of external applications with a single click:
17 |
18 | * Strava
19 | * Runalyze
20 | * RunKeeper
21 | * RunningAHEAD
22 | * WebDAV
23 |
24 | Note: MapBox enables tracking by default (when using the map to view activities). This can be disabled from the MapBox logo on the lower left corner of the map.
25 |
26 | The app has a companion WearOS app, it is bundled in the apk and must be installed manually.
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/view/SettingsFragment.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.view;
2 |
3 | import android.os.Bundle;
4 | import androidx.annotation.NonNull;
5 | import androidx.preference.Preference;
6 | import androidx.preference.PreferenceFragmentCompat;
7 | import org.runnerup.BuildConfig;
8 | import org.runnerup.R;
9 | import org.runnerup.widget.AboutPreference;
10 |
11 | public class SettingsFragment extends PreferenceFragmentCompat {
12 |
13 | @Override
14 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
15 | setPreferencesFromResource(R.xml.settings, rootKey);
16 |
17 | if (BuildConfig.MAPBOX_ENABLED == 0) {
18 | Preference pref = findPreference("map_preferencescreen");
19 | pref.setEnabled(false);
20 | }
21 | }
22 |
23 | @Override
24 | public void onDisplayPreferenceDialog(@NonNull Preference preference) {
25 | if (preference instanceof AboutPreference) {
26 | // The about preference was clicked, show the about dialog
27 | AboutPreference.AboutDialogFragment aboutDialogFragment =
28 | AboutPreference.AboutDialogFragment.newInstance(preference.getKey());
29 | aboutDialogFragment.setTargetFragment(this, 0);
30 | aboutDialogFragment.show(getParentFragmentManager(), AboutPreference.AboutDialogFragment.TAG);
31 | } else {
32 | super.onDisplayPreferenceDialog(preference);
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/res/drawable/sport_other.xml:
--------------------------------------------------------------------------------
1 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/wear/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/res/layout/manage_workouts_list_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
22 |
23 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/play/org/runnerup/util/GoogleApiHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 - 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.util;
19 |
20 | import android.content.Context;
21 | import com.google.android.gms.common.ConnectionResult;
22 | import com.google.android.gms.common.GoogleApiAvailability;
23 |
24 | public class GoogleApiHelper {
25 | public static boolean isGooglePlayServicesAvailable(Context context) {
26 | boolean res = false;
27 |
28 | try {
29 | res =
30 | GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
31 | == ConnectionResult.SUCCESS;
32 | } catch (Exception e) {
33 | }
34 |
35 | return res;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/wear/src/main/res/drawable/border.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 | -
20 |
21 |
22 |
23 |
24 | -
25 |
26 |
27 |
28 |
29 | -
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/res/menu/account_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
24 |
25 |
29 |
30 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/util/Bitfield.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 - 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.util;
19 |
20 | public class Bitfield {
21 |
22 | public static boolean test(long flags, int bit) {
23 | long val = (1L << bit);
24 | return (flags & val) == val;
25 | }
26 |
27 | public static long set(long flags, int bit, boolean value) {
28 | if (value) return set(flags, bit);
29 | else return clear(flags, bit);
30 | }
31 |
32 | private static long set(long flags, int bit) {
33 | long val = (1L << bit);
34 | return flags | val;
35 | }
36 |
37 | private static long clear(long flags, int bit) {
38 | long val = (1L << bit);
39 | return flags & (~val);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/wear/src/main/java/org/runnerup/view/StoppedFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package org.runnerup.view;
18 |
19 | import android.app.Fragment;
20 | import android.os.Bundle;
21 | import android.view.LayoutInflater;
22 | import android.view.View;
23 | import android.view.ViewGroup;
24 | import org.runnerup.R;
25 |
26 | public class StoppedFragment extends Fragment {
27 |
28 | public StoppedFragment() {}
29 |
30 | @Override
31 | public View onCreateView(
32 | LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
33 | View view = inflater.inflate(R.layout.stopped, container, false);
34 | super.onViewCreated(view, savedInstanceState);
35 | return view;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/res/layout/account_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
23 |
24 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/org/matthiaszimmermann/location/egm96/Cubic.java:
--------------------------------------------------------------------------------
1 | package org.matthiaszimmermann.location.egm96;
2 |
3 | /**
4 | * @see Java Cubic
5 | * @author Ken Perlin
6 | */
7 | class Cubic {
8 | private static final double[][] BEZIER = { // Bezier basis matrix
9 | {-1, 3, -3, 1},
10 | {3, -6, 3, 0},
11 | {-3, 3, 0, 0},
12 | {1, 0, 0, 0}
13 | };
14 |
15 | private final double[][] C = new double[4][4]; // bicubic coefficients matrix
16 |
17 | Cubic(double[][] G) {
18 | double[][] t = new double[4][4];
19 | for (int i = 0; i < 4; i++) // T = G MT
20 | for (int j = 0; j < 4; j++)
21 | for (int k = 0; k < 4; k++) t[i][j] += G[i][k] * Cubic.BEZIER[j][k];
22 |
23 | for (int i = 0; i < 4; i++) // C = M T
24 | for (int j = 0; j < 4; j++)
25 | for (int k = 0; k < 4; k++) C[i][j] += Cubic.BEZIER[i][k] * t[k][j];
26 | }
27 |
28 | private final double[] C3 = C[0];
29 | private final double[] C2 = C[1];
30 | private final double[] C1 = C[2];
31 | private final double[] C0 = C[3];
32 |
33 | double eval(double u, double v) {
34 | return u
35 | * (u
36 | * (u * (v * (v * (v * C3[0] + C3[1]) + C3[2]) + C3[3])
37 | + (v * (v * (v * C2[0] + C2[1]) + C2[2]) + C2[3]))
38 | + (v * (v * (v * C1[0] + C1[1]) + C1[2]) + C1[3]))
39 | + (v * (v * (v * C0[0] + C0[1]) + C0[2]) + C0[3]);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Track your sport activities with RunnerUp using the GPS in your Android phone:
2 |
3 | * See detailed stats around your pace, distance and time.
4 | * Get stats and progress with built-in highly configurable audio cues.
5 | * Run free runs with target pace or target heart rate zone
6 | * Easily configure and run effective interval workouts modeled after Garmin
7 | * Share your favorite workouts with friends (using email)
8 | * Heart rate monitor: Bluetooth SMART (BLE)
9 | * Configure and use heart rate zones
10 |
11 | Upload your activities to a variety of running sites with a single click:
12 |
13 | * Strava
14 | * RunKeeper
15 | * RunningAHEAD
16 |
17 | Explanation to anti-features:
18 |
19 | * NonFreeNet: Uploading to Strava and other services makes use of non free net services. (The uploading is open similar to uploading a .tcx file, but the services are not open.)
20 | * UpstreamNonFree: The Play version (can be installed at the same time as the F-Droid version) has additional features using non free libraries, see below
21 |
22 | Features removed compared to Play version:
23 |
24 | * Map view (OsmDroid instead of MapBox, no MapBox API key in free)
25 | * WearOS app (requires non-free Play services)
26 | * HR ANT+ connectivity (requires closed source lib)
27 | * Runalyze and Dropbox upload (Requires API keys. Runalyze test upload possible.)
28 | * Download customized apk to device (F-Droid binary is universal for all supported binaries).
29 |
--------------------------------------------------------------------------------
/app/res/xml/settings_map.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
22 |
23 |
31 |
32 |
--------------------------------------------------------------------------------
/common/src/main/res/values-zh/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - 英里
5 | - 公里
6 |
7 |
8 | - 配速
9 | - 速度
10 |
11 |
12 |
13 | - 热身
14 | - 运动
15 | - 休息
16 | - 放松
17 | - 缓和
18 |
19 |
20 | - 直到按键
21 | - 时间
22 | - 距离
23 |
24 |
25 | - None
26 | - 配速
27 | - 心率区间
28 |
29 |
30 |
31 | - 跑步
32 | - 骑行
33 | - 其他
34 | - 越野
35 | - 行走
36 |
37 |
38 | - 时间
39 | - 距离
40 |
41 |
42 | - 男
43 | - 女
44 |
45 |
46 |
47 | - Radial-Distance (快)
48 | - Ramer-Douglas-Peucker (精度高)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/osmdroid/org/runnerup/util/MapViewWrapper.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.util;
2 |
3 | import android.content.Context;
4 | import android.os.Handler;
5 | import android.util.AttributeSet;
6 | import org.osmdroid.tileprovider.MapTileProviderBase;
7 |
8 | public class MapViewWrapper extends org.osmdroid.views.MapView {
9 | public MapViewWrapper(
10 | Context context,
11 | MapTileProviderBase tileProvider,
12 | Handler tileRequestCompleteHandler,
13 | AttributeSet attrs) {
14 | super(context, tileProvider, tileRequestCompleteHandler, attrs);
15 | }
16 |
17 | public MapViewWrapper(
18 | final Context context,
19 | MapTileProviderBase tileProvider,
20 | final Handler tileRequestCompleteHandler,
21 | final AttributeSet attrs,
22 | boolean hardwareAccelerated) {
23 | super(context, tileProvider, tileRequestCompleteHandler, attrs, hardwareAccelerated);
24 | }
25 |
26 | public MapViewWrapper(final Context context, final AttributeSet attrs) {
27 | super(context, attrs);
28 | }
29 |
30 | public MapViewWrapper(final Context context) {
31 | super(context);
32 | }
33 |
34 | public MapViewWrapper(final Context context, final MapTileProviderBase aTileProvider) {
35 | super(context, aTileProvider);
36 | }
37 |
38 | public MapViewWrapper(
39 | final Context context,
40 | final MapTileProviderBase aTileProvider,
41 | final Handler tileRequestCompleteHandler) {
42 | super(context, aTileProvider, tileRequestCompleteHandler);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/res/layout/manage_workouts_list_category.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
27 |
28 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/common/src/main/res/values-ja/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - マイル
5 | - キロメートル
6 |
7 |
8 | - ペース
9 | - スピード
10 |
11 |
12 |
13 | - ウォームアップ
14 | - アクティブ
15 | - 休憩
16 | - リカバリー
17 | - クールダウン
18 |
19 |
20 | - 押すまで
21 | - 時間
22 | - 距離
23 |
24 |
25 | - なし
26 | - ペース
27 | - 心拍数ゾーン
28 |
29 |
30 |
31 | - ランニング
32 | - サイクリング
33 | - その他
34 | - オリエンテーリング
35 | - ウォーキング
36 |
37 |
38 | - 時間
39 | - 距離
40 |
41 |
42 | - 男性
43 | - 女性
44 |
45 |
46 |
47 | - ラジアル距離 (高速)
48 | - ダグラス・ピーカー (高品質)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/com/goebl/simplify/Point.java:
--------------------------------------------------------------------------------
1 | /*
2 | The MIT License (MIT)
3 |
4 | Copyright (c) 2013 Heinrich Göbl
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in
14 | all copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | THE SOFTWARE.
23 | */
24 |
25 | /*
26 | * Source retrieved from: https://github.com/hgoebl/simplify-java
27 | * No changes made.
28 | */
29 |
30 | package com.goebl.simplify;
31 |
32 | /**
33 | * Access to X and Y coordinates (2D-Point).
34 | *
35 | * @author hgoebl
36 | * @since 06.07.13
37 | */
38 | public interface Point {
39 | double getX();
40 |
41 | double getY();
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/Scope.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 - 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout;
19 |
20 | import org.runnerup.R;
21 |
22 | /** This is just constant */
23 | public enum Scope {
24 | ACTIVITY(1, R.string.cue_activity),
25 | STEP(2, R.string.cue_interval),
26 | LAP(3, R.string.cue_lap),
27 | CURRENT(4, R.string.cue_current);
28 |
29 | final int value;
30 | final int cueId;
31 |
32 | Scope(int val, int cueId) {
33 | this.value = val;
34 | this.cueId = cueId;
35 | }
36 |
37 | /**
38 | * @return the scopeValue
39 | */
40 | public int getValue() {
41 | return value;
42 | }
43 |
44 | public boolean equal(Scope what) {
45 | return !(what == null || what.value != this.value);
46 | }
47 |
48 | public int getCueId() {
49 | return cueId;
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/nomap/org/runnerup/util/MapWrapper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 - 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.util;
19 |
20 |
21 | import android.content.Context;
22 | import android.database.sqlite.SQLiteDatabase;
23 | import android.os.Bundle;
24 |
25 | public class MapWrapper {
26 |
27 | public MapWrapper(
28 | Context context, SQLiteDatabase mDB, long mID, Formatter formatter, Object mapView) {
29 | }
30 |
31 | public static void start(Context context) {}
32 |
33 | public void onCreate(Bundle savedInstanceState) {}
34 |
35 | public void onResume() {}
36 |
37 | public void onStart() {}
38 |
39 | public void onStop() {}
40 |
41 | public void onPause() {}
42 |
43 | public void onSaveInstanceState(Bundle outState) {}
44 |
45 | public void onLowMemory() {}
46 |
47 | public void onDestroy() {}
48 | }
49 |
--------------------------------------------------------------------------------
/common/src/main/res/values-iw/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - מיילים
5 | - קילומטרים
6 |
7 |
8 | - קצב
9 | - מהירות
10 |
11 |
12 |
13 | - חימום
14 | - פעילות
15 | - מנוחה
16 | - התאוששות
17 | - התקררות
18 |
19 |
20 | - עד ללחיצה
21 | - זמן
22 | - מרחק
23 |
24 |
25 | - ללא
26 | - קצב
27 | - אזור דופק
28 |
29 |
30 |
31 | - ריצה
32 | - אופניים
33 | - אחר
34 | - התמצאות
35 | - הליכה
36 |
37 |
38 | - זמן
39 | - מרחק
40 |
41 |
42 | - זכר
43 | - נקבה
44 |
45 |
46 |
47 | - מרחק רדיאלי (מהיר)
48 | - ראמר-דאגלאס-פוקר (איכותי)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/Event.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout;
19 |
20 | import org.runnerup.R;
21 |
22 | /** This is just constant */
23 | public enum Event {
24 | STARTED(1, R.string.cue_started),
25 | PAUSED(2, R.string.cue_paused),
26 | STOPPED(3, R.string.cue_stopped),
27 | RESUMED(4, R.string.cue_resumed),
28 | COMPLETED(5, R.string.cue_completed);
29 |
30 | final int value;
31 | final int cueId;
32 |
33 | Event(int val, int cueId) {
34 | this.value = val;
35 | this.cueId = cueId;
36 | }
37 |
38 | /**
39 | * @return the eventValue
40 | */
41 | public int getValue() {
42 | return value;
43 | }
44 |
45 | public boolean equal(Event what) {
46 | return !(what == null || what.value != this.value);
47 | }
48 |
49 | public int getCueId() {
50 | return cueId;
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/Feedback.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012 - 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout;
19 |
20 | import android.content.Context;
21 | import java.util.HashMap;
22 |
23 | public abstract class Feedback {
24 |
25 | @SuppressWarnings("EmptyMethod")
26 | public void onInit(Workout s) {}
27 |
28 | public void onBind(Workout s, HashMap bindValues) {}
29 |
30 | public void onStart(Workout s) {}
31 |
32 | public void onEnd(Workout s) {}
33 |
34 | /**
35 | * compare feedback to another feedback so that same information isn't emitted twice (or more)
36 | * during one tick i.e different triggers can have same feedback
37 | *
38 | * @param other
39 | */
40 | public abstract boolean equals(Feedback other);
41 |
42 | /** Emit the feedback */
43 | public abstract void emit(Workout s, Context ctx);
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/com/goebl/simplify/PointExtractor.java:
--------------------------------------------------------------------------------
1 | /*
2 | The MIT License (MIT)
3 |
4 | Copyright (c) 2013 Heinrich Göbl
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in
14 | all copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | THE SOFTWARE.
23 | */
24 |
25 | /*
26 | * Source retrieved from: https://github.com/hgoebl/simplify-java
27 | * No changes made.
28 | */
29 |
30 | package com.goebl.simplify;
31 |
32 | /**
33 | * Helper to get X and Y coordinates from a foreign class T.
34 | *
35 | * @author hgoebl
36 | * @since 06.07.13
37 | */
38 | public interface PointExtractor {
39 | double getX(T point);
40 |
41 | double getY(T point);
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/widget/SpinnerInterface.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.widget;
2 |
3 | import android.view.View;
4 | import android.widget.AdapterView;
5 | import android.widget.SpinnerAdapter;
6 |
7 | /**
8 | * @author Miroslav Mazel
9 | */
10 | public interface SpinnerInterface {
11 | void setViewPrompt(CharSequence charSequence);
12 |
13 | void setViewLabel(CharSequence charSequence);
14 |
15 | void setViewValue(int itemId);
16 |
17 | void setViewText(CharSequence charSequence);
18 |
19 | CharSequence getViewValueText();
20 |
21 | void setViewOnClickListener(View.OnClickListener onClickListener);
22 |
23 | void setViewAdapter(DisabledEntriesAdapter adapter);
24 |
25 | SpinnerAdapter getViewAdapter();
26 |
27 | void setViewSelection(int value);
28 |
29 | void viewOnClose(OnCloseDialogListener listener, boolean b);
30 |
31 | AdapterView.OnItemSelectedListener getViewOnItemSelectedListener();
32 | void setViewOnItemSelectedListener(AdapterView.OnItemSelectedListener listener);
33 |
34 | void setOnClickSpinnerOpen();
35 |
36 | interface OnCloseDialogListener {
37 | void onClose(SpinnerInterface spinner, boolean ok);
38 | }
39 |
40 | interface OnSetValueListener {
41 | /**
42 | * @param newValue
43 | * @return
44 | * @throws java.lang.IllegalArgumentException
45 | */
46 | String preSetValue(String newValue) throws java.lang.IllegalArgumentException;
47 |
48 | /**
49 | * @param newValue
50 | * @return
51 | * @throws java.lang.IllegalArgumentException
52 | */
53 | int preSetValue(int newValue) throws java.lang.IllegalArgumentException;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/common/src/main/res/values-sv/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Miles
5 | - Kilometer
6 |
7 |
8 | - Tempo
9 | - Hastighet
10 |
11 |
12 |
13 | - Uppvärmning
14 | - Aktiv
15 | - Vila
16 | - Återhämtning
17 | - Nedvarvning
18 |
19 |
20 | - Knapptryckning
21 | - Tid
22 | - Distans
23 |
24 |
25 | - Inget
26 | - Tempo
27 | - Pulszon
28 |
29 |
30 |
31 | - Löpning
32 | - Cykling
33 | - Övrigt
34 | - Orientering
35 | - Gång
36 |
37 |
38 | - Tid
39 | - Distans
40 |
41 |
42 | - Man
43 | - Kvinna
44 |
45 |
46 |
47 | - Radial-Distance (snabb)
48 | - Ramer-Douglas-Peucker (bättre)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-nl/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mijlen
5 | - Kilometers
6 |
7 |
8 | - Pas
9 | - Snelheid
10 |
11 |
12 |
13 | - Warming-up
14 | - Actief
15 | - Rust
16 | - Herstel
17 | - Cooling-down
18 |
19 |
20 | - Totdat gedrukt
21 | - Tijd
22 | - Afstand
23 |
24 |
25 | - NGeen
26 | - Pas
27 | - Hartslagzone
28 |
29 |
30 |
31 | - Lopen
32 | - Fietsen
33 | - Andere
34 | - Orienteren
35 | - Wandelen
36 |
37 |
38 | - Tijd
39 | - Afstand
40 |
41 |
42 | - Man
43 | - Vrouw
44 |
45 |
46 |
47 | - Radiaalafstand (snel)
48 | - Ramer-Douglas-Peucker (hoge kwaliteit)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-uk/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Милі
5 | - Кілометри
6 |
7 |
8 | - Темп
9 | - Швидкість
10 |
11 |
12 |
13 | - Розминка
14 | - Активність
15 | - Передишка
16 | - Відновлення
17 | - Заминка
18 |
19 |
20 | - До натискання
21 | - Час
22 | - Дистанція
23 |
24 |
25 | - Нема
26 | - Темп
27 | - Пульсова зона
28 |
29 |
30 |
31 | - Біг
32 | - Велосипед
33 | - Інше
34 | - Орієнтування
35 | - Прогулянка
36 |
37 |
38 | - Час
39 | - Дистанція
40 |
41 |
42 | - Чоловік
43 | - Жінка
44 |
45 |
46 |
47 | - Опхейма (швидше)
48 | - Рамера-Дугласа-Пекера (точніше)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/notification/ForegroundNotificationDisplayStrategy.java:
--------------------------------------------------------------------------------
1 | package org.runnerup.notification;
2 |
3 | import android.Manifest;
4 | import android.app.Notification;
5 | import android.app.Service;
6 | import android.content.pm.PackageManager;
7 | import android.content.pm.ServiceInfo;
8 | import android.os.Build;
9 | import androidx.core.app.ServiceCompat;
10 | import androidx.core.content.ContextCompat;
11 |
12 | public class ForegroundNotificationDisplayStrategy implements NotificationDisplayStrategy {
13 | private final Service service;
14 |
15 | public ForegroundNotificationDisplayStrategy(Service service) {
16 | this.service = service;
17 | }
18 |
19 | @Override
20 | public void notify(int notificationId, Notification notification) {
21 | int type = 0;
22 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
23 | if (ContextCompat.checkSelfPermission(service, Manifest.permission.ACCESS_FINE_LOCATION)
24 | == PackageManager.PERMISSION_GRANTED) {
25 | type = ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION;
26 | }
27 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
28 | && ContextCompat.checkSelfPermission(service, Manifest.permission.ACTIVITY_RECOGNITION)
29 | == PackageManager.PERMISSION_GRANTED) {
30 | type |= ServiceInfo.FOREGROUND_SERVICE_TYPE_HEALTH;
31 | }
32 | }
33 | ServiceCompat.startForeground(service, notificationId, notification, type);
34 | }
35 |
36 | @Override
37 | public void cancel(int notificationId) {
38 | ServiceCompat.stopForeground(service, ServiceCompat.STOP_FOREGROUND_REMOVE);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/common/src/main/res/values-hu/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mérföld
5 | - Kilométer
6 |
7 |
8 | - Tempó
9 | - Sebesség
10 |
11 |
12 |
13 | - Bemelegítés
14 | - Aktív
15 | - Pihenés
16 | - Regeneráció
17 | - Levezetés
18 |
19 |
20 | - Megnyomásig
21 | - Idő
22 | - Távolság
23 |
24 |
25 | - Nincs
26 | - Iram
27 | - Pulzus zóna
28 |
29 |
30 |
31 | - Futás
32 | - Kerékpározás
33 | - Egyéb
34 | - Tájfutás
35 | - Gyaloglás
36 |
37 |
38 | - Idő
39 | - Távolság
40 |
41 |
42 | - Férfi
43 | - Nő
44 |
45 |
46 |
47 | - Radiális távoltás (gyors)
48 | - Ramer-Douglas-Peucker (nagy pontosságú)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-nl-rNL/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mijlen
5 | - Kilometers
6 |
7 |
8 | - Tempo
9 | - Snelheid
10 |
11 |
12 |
13 | - Warming-up
14 | - Actief
15 | - Rust
16 | - Herstel
17 | - Cooling-down
18 |
19 |
20 | - Tot aan indrukken
21 | - Tijd
22 | - Afstand
23 |
24 |
25 | - Geen
26 | - Tempo
27 | - Hartslag zone
28 |
29 |
30 |
31 | - Hardlopen
32 | - Fietsen
33 | - Overig
34 | - Oriënteren
35 | - Wandelen
36 |
37 |
38 | - Tijd
39 | - Afstand
40 |
41 |
42 | - Man
43 | - Vrouw
44 |
45 |
46 |
47 | - Radiale-afstand (snel)
48 | - Ramer-Douglas-Peucker (hoge kwaliteit)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-ro/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mile
5 | - Kilometri
6 |
7 |
8 | - Ritm
9 | - Viteză
10 |
11 |
12 |
13 | - Încălzire
14 | - Activitate
15 | - Odihnă
16 | - Recuperare
17 | - Răcire
18 |
19 |
20 | - Până la apăsare
21 | - Timp
22 | - Distanţă
23 |
24 |
25 | - Nici un
26 | - Ritm
27 | - Zona de ritm cardiac
28 |
29 |
30 |
31 | - Alergare
32 | - Ciclism
33 | - Alte
34 | - Orienteering
35 | - Umblare
36 |
37 |
38 | - Timp
39 | - Distanţă
40 |
41 |
42 | - Bărbat
43 | - Femeie
44 |
45 |
46 |
47 | - Distanță-Radială (rapid)
48 | - Ramer-Douglas-Peucker (calitate superioară)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-it/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Miglia
5 | - Chilometri
6 |
7 |
8 | - Ritmo
9 | - Velocità
10 |
11 |
12 |
13 | - Riscaldamento
14 | - Attivo
15 | - Riposo
16 | - Recupero
17 | - Defaticamento
18 |
19 |
20 | - Dall\'ultima pressione
21 | - Tempo
22 | - Distanza
23 |
24 |
25 | - Nessuno
26 | - Ritmo
27 | - Zona BPM
28 |
29 |
30 |
31 | - Corsa
32 | - Bicicletta
33 | - Altro
34 | - Orientamento
35 | - Camminata
36 |
37 |
38 | - Tempo
39 | - Distanza
40 |
41 |
42 | - Uomo
43 | - Donna
44 |
45 |
46 |
47 | - Distanza-Radiale (veloce)
48 | - Ramer-Douglas-Peucker (alta qualità)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-ru/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Мили
5 | - Километры
6 |
7 |
8 | - Темп
9 | - Скорость
10 |
11 |
12 |
13 | - Разминка
14 | - Движение
15 | - Отдых
16 | - Восстановление
17 | - Заминка
18 |
19 |
20 | - До нажатия
21 | - Время
22 | - Дистанция
23 |
24 |
25 | - Нет
26 | - Темп
27 | - Пульсовая зона
28 |
29 |
30 |
31 | - Бег
32 | - Велосипед
33 | - Прочее
34 | - Ориентирование
35 | - Ходьба
36 |
37 |
38 | - Время
39 | - Дистанция
40 |
41 |
42 | - Мужской
43 | - Женский
44 |
45 |
46 |
47 | - Радиальное расстояние (быстрое)
48 | - Алгоритм Рамера — Дугласа — Пекера (качественное)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-ca/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Milles
5 | - Kilòmetres
6 |
7 |
8 | - Ritme
9 | - Velocitat
10 |
11 |
12 |
13 | - Escalfament
14 | - Activitat
15 | - Descans
16 | - Recuperació
17 | - Refredament
18 |
19 |
20 | - Fins a prémer
21 | - Temps
22 | - Distància
23 |
24 |
25 | - Cap
26 | - Ritme
27 | - Zona de freqüència cardíaca
28 |
29 |
30 |
31 | - Córrer
32 | - Ciclisme
33 | - Altres
34 | - Orientació
35 | - Caminar
36 |
37 |
38 | - Temps
39 | - Distància
40 |
41 |
42 | - Home
43 | - Dona
44 |
45 |
46 |
47 | - Distància-Radial (ràpid)
48 | - Ramer-Douglas-Peucker (alta qualitat)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-de/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Meilen
5 | - Kilometer
6 |
7 |
8 | - Pace (min/km)
9 | - Geschwindigkeit (km/h)
10 |
11 |
12 |
13 | - Aufwärmen
14 | - Aktivität
15 | - Ruhen
16 | - Erholen
17 | - Abkühlen
18 |
19 |
20 | - Lap-Taste
21 | - Zeit
22 | - Distanz
23 |
24 |
25 | - Freies Training
26 | - Pace
27 | - HR-Zone
28 |
29 |
30 |
31 | - Laufen
32 | - Radfahren
33 | - Anderes
34 | - Orientierungslauf
35 | - Gehen
36 |
37 |
38 | - Zeit
39 | - Distanz
40 |
41 |
42 | - Männlich
43 | - Weiblich
44 |
45 |
46 |
47 | - Radialer Abstand (schneller)
48 | - Ramer–Douglas–Peucker (präziser)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-fr/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Milles
5 | - Kilomètres
6 |
7 |
8 | - Rythme
9 | - Vitesse
10 |
11 |
12 |
13 | - Échauffement
14 | - Actif
15 | - Repos
16 | - Récupération
17 | - Refroidissement
18 |
19 |
20 | - Jusqu\'à l\'appui
21 | - Temps
22 | - Distance
23 |
24 |
25 | - Aucune
26 | - Rythme
27 | - Zone cardiaque
28 |
29 |
30 |
31 | - Course à pied
32 | - Vélo
33 | - Autre
34 | - Course d\'orientation
35 | - Marche
36 |
37 |
38 | - Temps
39 | - Distance
40 |
41 |
42 | - Homme
43 | - Femme
44 |
45 |
46 |
47 | - Radial-Distance (rapide)
48 | - Ramer-Douglas-Peucker (haute qualité)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-pl/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mile
5 | - Kilometry
6 |
7 |
8 | - Tempo
9 | - Prędkość
10 |
11 |
12 |
13 | - Rozgrzewka
14 | - Aktywność
15 | - Odpoczynek
16 | - Regeneracja
17 | - Uspokojenie
18 |
19 |
20 | - Do przyciśnięcia
21 | - Czas
22 | - Dystans
23 |
24 |
25 | - Brak
26 | - Tempo
27 | - Strefa tętna
28 |
29 |
30 |
31 | - Bieganie
32 | - Jazda rowerem
33 | - Inne
34 | - Bieg na orientację
35 | - Chodzenie
36 |
37 |
38 | - Czas
39 | - Dystans
40 |
41 |
42 | - Mężczyzna
43 | - Kobieta
44 |
45 |
46 |
47 | - Radial-Distance (szybki)
48 | - Ramer-Douglas-Peucker (wysoka jakość)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-es/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Millas
5 | - Kilómetros
6 |
7 |
8 | - Ritmo
9 | - Velocidad
10 |
11 |
12 |
13 | - Calentamiento
14 | - Activo
15 | - Descanso
16 | - Recuperación
17 | - Enfriamiento
18 |
19 |
20 | - Hasta pulsación
21 | - Tiempo
22 | - Distancia
23 |
24 |
25 | - Ninguno
26 | - Ritmo
27 | - Zona de frecuencia cardíaca
28 |
29 |
30 |
31 | - Carrera
32 | - Ciclismo
33 | - Otro
34 | - Orientación
35 | - Caminar
36 |
37 |
38 | - Tiempo
39 | - Distancia
40 |
41 |
42 | - Hombre
43 | - Mujer
44 |
45 |
46 |
47 | - Distancia-Radial (rápido)
48 | - Ramer-Douglas-Peucker (alta calidad)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-lt/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Mylios
5 | - Kilometrai
6 |
7 |
8 | - Tempas
9 | - Greitis
10 |
11 |
12 |
13 | - Apšilimas
14 | - Aktyvumas
15 | - Poilsis
16 | - Atsistatymas
17 | - Atvėsimas
18 |
19 |
20 | - Iki paspaudimo
21 | - Laikas
22 | - Atstumas
23 |
24 |
25 | - Nėra
26 | - Tempas
27 | - Širdies ritmo zona
28 |
29 |
30 |
31 | - Bėgimas
32 | - Dviračių sportas
33 | - Kita
34 | - Orientacijios sportas
35 | - Ėjimas
36 |
37 |
38 | - Laikas
39 | - Atstumas
40 |
41 |
42 | - Vyras
43 | - Moteris
44 |
45 |
46 |
47 | - Radialinis atstumas (greitas)
48 | - Ramer-Douglas-Peucker (aukštos kokybės)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-pt/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Milhas
5 | - Quilómetros
6 |
7 |
8 | - Ritmo
9 | - Velocidade
10 |
11 |
12 |
13 | - Aquecimento
14 | - Atividade
15 | - Descanso
16 | - Recuperação
17 | - Arrefecimento
18 |
19 |
20 | - Até ser pressionado
21 | - Tempo
22 | - Distância
23 |
24 |
25 | - Nenhum
26 | - Ritmo
27 | - Zona de freq. cardíaca
28 |
29 |
30 |
31 | - Corrida
32 | - Ciclismo
33 | - Outros
34 | - Orientação
35 | - Caminhada
36 |
37 |
38 | - Tempo
39 | - Distância
40 |
41 |
42 | - Masculino
43 | - Feminino
44 |
45 |
46 |
47 | - Distância-radial (rápido)
48 | - Ramer-Douglas-Peucker (alta qualidade)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/common/src/main/res/values-pt-rBR/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - Milhas
5 | - Quilômetros
6 |
7 |
8 | - Ritmo
9 | - Velocidade
10 |
11 |
12 |
13 | - Aquecimento
14 | - Atividade
15 | - Descanso
16 | - Recuperação
17 | - Desaquecimento
18 |
19 |
20 | - Até ser pressionado
21 | - Tempo
22 | - Distância
23 |
24 |
25 | - Nenhuma
26 | - Ritmo
27 | - Zona de freq. cardíaca
28 |
29 |
30 |
31 | - Corrida
32 | - Ciclismo
33 | - Outros
34 | - Orientação
35 | - Caminhada
36 |
37 |
38 | - Tempo
39 | - Distância
40 |
41 |
42 | - Masculino
43 | - Feminino
44 |
45 |
46 |
47 | - Distância-radial (rápido)
48 | - Ramer-Douglas-Peucker (alta qualidade)
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/res/xml/settings_controls.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
22 |
23 |
27 |
28 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/wear/src/main/res/layout/countdown.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
25 |
26 |
33 |
34 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/WorkoutInfo.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 niklas.weidemann
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package org.runnerup.workout;
18 |
19 | import android.location.Location;
20 |
21 | public interface WorkoutInfo {
22 | double get(Scope scope, Dimension d);
23 |
24 | double getDistance(Scope scope);
25 |
26 | double getTime(Scope scope);
27 |
28 | double getSpeed(Scope scope);
29 |
30 | double getPace(Scope scope);
31 |
32 | double getDuration(Scope scope, Dimension dimension);
33 |
34 | double getRemaining(Scope scope, Dimension dimension);
35 |
36 | double getHeartRate(Scope scope);
37 |
38 | double getHeartRateZone(Scope scope);
39 |
40 | double getCadence(Scope scope);
41 |
42 | double getTemperature(Scope scope);
43 |
44 | double getPressure(Scope scope);
45 |
46 | int getSport();
47 |
48 | Intensity getIntensity();
49 |
50 | /* TODO make better/more elaborate state visible... */
51 | boolean isPaused();
52 |
53 | boolean isEnabled(Dimension dim, Scope scope);
54 |
55 | Location getLastKnownLocation();
56 | }
57 |
--------------------------------------------------------------------------------
/app/res/menu/detail_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
24 |
25 |
29 |
30 |
34 |
35 |
39 |
40 |
44 |
45 |
--------------------------------------------------------------------------------
/app/src/main/org/runnerup/workout/Range.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 jonas.oreland@gmail.com
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package org.runnerup.workout;
19 |
20 | import androidx.annotation.NonNull;
21 |
22 | public class Range {
23 |
24 | public double minValue;
25 | public double maxValue;
26 |
27 | public Range(double minValue, double maxValue) {
28 | if (minValue <= maxValue) {
29 | this.minValue = minValue;
30 | this.maxValue = maxValue;
31 | } else {
32 | this.minValue = maxValue;
33 | this.maxValue = minValue;
34 | }
35 | }
36 |
37 | public boolean inside(double d) {
38 | return compare(d) == 0;
39 | }
40 |
41 | public int compare(double value) {
42 | if (value < minValue) return -1;
43 | if (value > maxValue) return 1;
44 | return 0;
45 | }
46 |
47 | public boolean contentEquals(Range range) {
48 | return this.maxValue == range.maxValue && this.minValue == range.minValue;
49 | }
50 |
51 | @NonNull
52 | public String toString() {
53 | return "[ " + minValue + " - " + maxValue + " ]";
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/common/src/main/res/values-nl-rBE/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 | km
19 | mi
20 | m
21 | u
22 | m
23 | min
24 | s
25 |
26 | Maximale hartslag (MHS)
27 |
28 |
29 |
30 |
31 | herstel
32 | opwarming
33 | afkoeling
34 |
35 |
--------------------------------------------------------------------------------
/app/res/layout/settings_wrapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
22 |
23 |
32 |
33 |
40 |
41 |
--------------------------------------------------------------------------------
/app/res/xml/settings_units.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
22 |
23 |
30 |
31 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/app/res/layout/advanced_workout_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
25 |
26 |
32 |
33 |
50 |
51 |
--------------------------------------------------------------------------------
/app/res/drawable/btn_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 | -
20 |
21 |
25 |
26 |
27 |
28 | -
29 |
30 |
34 |
35 |
36 |
37 | -
38 |
39 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/res/drawable/btn_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 | -
20 |
21 |
25 |
26 |
27 |
28 | -
29 |
30 |
34 |
35 |
36 |
37 | -
38 |
39 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/res/drawable/btn_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 | -
20 |
21 |
25 |
26 |
27 |
28 | -
29 |
30 |
34 |
35 |
36 |
37 | -
38 |
39 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/res/drawable/title_spinner.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
23 |
26 |
29 |
32 |
35 |
38 |
40 |
41 |
--------------------------------------------------------------------------------
/wear/src/main/res/layout/card1.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
25 |
26 |
33 |
34 |
38 |
39 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------