mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-02 09:33:06 +02:00
Compare commits
1269 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 087b3b0e69 | |||
| 9d02d4ed67 | |||
| c4d5471c9b | |||
| a5645036ae | |||
| ec57495481 | |||
| 79a86769ee | |||
| 5f97aa4b99 | |||
| 102aabcc95 | |||
| cc28fdb65b | |||
| 9065992cd7 | |||
| cdf2cc8e81 | |||
| 6f5c1aec2c | |||
| ad8a9d2099 | |||
| 00540bcfcc | |||
| fc12c1f29e | |||
| 45dc512f01 | |||
| 0691875f06 | |||
| c320d16af4 | |||
| d105c58309 | |||
| 55fd48d2dd | |||
| 8c65aeec88 | |||
| 7749c2600a | |||
| 79b3a71d15 | |||
| c4bddfd6f4 | |||
| 073c8a3c98 | |||
| b653e8d059 | |||
| 71bb550b1f | |||
| 19f1853426 | |||
| 3b5fba9b52 | |||
| 89c9ad0612 | |||
| e4a62b4db8 | |||
| 1b3eaeb755 | |||
| b4573fdc23 | |||
| 2acfef5d33 | |||
| 40d611b2f4 | |||
| ae24966c42 | |||
| 342b214fd5 | |||
| 8c74fa74c1 | |||
| 4c552b4e24 | |||
| 089cb06680 | |||
| f20911ee2e | |||
| 041544573f | |||
| 29615a3f0d | |||
| 256a6c6ee7 | |||
| 62c40575c9 | |||
| acf2a4bee2 | |||
| 6bb87e1db9 | |||
| 5f99083747 | |||
| 22e9687aff | |||
| aaceb86ba9 | |||
| da013e9d51 | |||
| 8aa06c7128 | |||
| 1b27ff0d95 | |||
| 9c54cc0e86 | |||
| ffee51cee8 | |||
| 859248acde | |||
| 11972297b0 | |||
| 8c17c6b2d9 | |||
| 2ac6d5d07b | |||
| 87c2a8fd3e | |||
| 2a5f3e6afd | |||
| 8472dbb195 | |||
| 15ff1998cb | |||
| f682f347d5 | |||
| 625d0704bc | |||
| faa4ddd98f | |||
| e5885da82c | |||
| efa2f3f1d5 | |||
| b0afea35ee | |||
| 9207600130 | |||
| 81a9483f76 | |||
| 3cf1bebe07 | |||
| bee9f46eaf | |||
| 8afc6b4c04 | |||
| 152b77b01c | |||
| 822d1c3eb9 | |||
| aa7fb772a0 | |||
| 6ccff0697f | |||
| e23c2bcfb2 | |||
| 1ef6026134 | |||
| 93d702990a | |||
| d3216b0520 | |||
| feac34ca32 | |||
| 4a0a2a8856 | |||
| 8f72c36351 | |||
| dc019cd58d | |||
| 9feb097d11 | |||
| dad0befca4 | |||
| c013db29bc | |||
| 4b33e94707 | |||
| 362dcda90c | |||
| 43cf0659fd | |||
| 88c4e0e499 | |||
| aed9248b35 | |||
| c03f2a9adb | |||
| 9e6e4bc5af | |||
| 83af7a30d8 | |||
| 8000d51caf | |||
| 96d740db64 | |||
| ff15031113 | |||
| 4e9fa91f27 | |||
| 870c5d723c | |||
| 254a1d59ac | |||
| ce05f5b22a | |||
| b2eb50732e | |||
| 35395926ff | |||
| e77a685b50 | |||
| ee9a19d788 | |||
| 5cb0752645 | |||
| 26a41e0afc | |||
| d2ea6dfe8d | |||
| 46b027108c | |||
| 9afd415e3f | |||
| bb989dbc4c | |||
| 50095ad044 | |||
| 23ca7bd05e | |||
| f38c4ab242 | |||
| 966f661dce | |||
| 8db6f5b569 | |||
| c0aabcfa5a | |||
| 235fd16e5a | |||
| 5a3bcfa51a | |||
| c3912042e9 | |||
| cfbb1b1634 | |||
| 40d0eed281 | |||
| 5e52552a0c | |||
| 9a220fade9 | |||
| b86c9b3867 | |||
| d22deda242 | |||
| 2167111ff4 | |||
| 6028137c46 | |||
| 22dafff7b7 | |||
| 339b045697 | |||
| 28ce9a1656 | |||
| 34c273be7a | |||
| 0e645de733 | |||
| 1281bb311a | |||
| 5557144728 | |||
| 828949efa4 | |||
| b0980e2e90 | |||
| a17fc3efd2 | |||
| 6a9f3d9199 | |||
| ffd3f3f14b | |||
| 912075ddd4 | |||
| 3833a9f7fe | |||
| 6dd40a6edf | |||
| aa1a7a467f | |||
| a89475158f | |||
| bd887c6624 | |||
| e8d4537f0d | |||
| aa392d61e2 | |||
| fa2948e4ab | |||
| 4ce0809948 | |||
| 7956e761c8 | |||
| 2dc92dcc98 | |||
| c604c12297 | |||
| 3b249d6a06 | |||
| 1b0bdea135 | |||
| 604ded53b8 | |||
| d509890f8f | |||
| f973ab8ac2 | |||
| 67407d4bd6 | |||
| 36cbd4a96f | |||
| 896dab6d2b | |||
| 8103bf58d8 | |||
| 58868dcd4f | |||
| 762fc0d06e | |||
| bf03a4c54b | |||
| eac6bdcbbd | |||
| fe368bc87e | |||
| ff5999b383 | |||
| ebcfcf125c | |||
| c5e996546b | |||
| 9cd0d03298 | |||
| 456fa03f8e | |||
| a7e706268d | |||
| 794da145c6 | |||
| ca889ee04c | |||
| ee4e2c5288 | |||
| 1bd6e53f04 | |||
| bcba6dfe5d | |||
| ebe8cbc798 | |||
| f54fe60ca5 | |||
| 39b782053a | |||
| 5f83cc7656 | |||
| 97229c258d | |||
| 97e8037a6a | |||
| a9400afd74 | |||
| 2e11a2bfe2 | |||
| a59cc3a6a2 | |||
| 8c0593ad0a | |||
| 3566645643 | |||
| 127fb2d648 | |||
| bb3a14aac0 | |||
| 2cc2722a0b | |||
| 366aa4b307 | |||
| a6a43ef948 | |||
| 2419d652c2 | |||
| c47a01d11d | |||
| a6ec014e73 | |||
| b1569c4744 | |||
| 4f85e09edc | |||
| 3e9dd156e0 | |||
| 832aa0c303 | |||
| cdc17a8bb4 | |||
| caf59954da | |||
| 8b2f2b21cd | |||
| 744455adef | |||
| 7d9e1cd83a | |||
| 08d9af31f8 | |||
| a4711379e3 | |||
| 8c4773a9bf | |||
| 3e3b48e0cf | |||
| 5aea1348f6 | |||
| ce64da7849 | |||
| 74bc4a4515 | |||
| b723700d0b | |||
| f6983bba4b | |||
| 0ea4f6f13a | |||
| 1c2d64ea0a | |||
| e28a9a7cd2 | |||
| a200043667 | |||
| e8cf0a3dd2 | |||
| 10ed2233ee | |||
| ffb7cafe1b | |||
| 041550fa6b | |||
| f066c7bdce | |||
| f5eebb1b87 | |||
| 3731037e68 | |||
| ae28dc01fe | |||
| 65991ba512 | |||
| 55ac8995a9 | |||
| bdbc453fc0 | |||
| fc9dafeccd | |||
| c3cda97692 | |||
| 7cb3cdaa05 | |||
| a61d30f522 | |||
| 1bb4dac8b5 | |||
| 999285fcbc | |||
| 16dd54299a | |||
| cf7be09396 | |||
| 0365ac5043 | |||
| 89fb6f6bd8 | |||
| 52eb7bffb6 | |||
| ed3e3c9c41 | |||
| 77b54ed03b | |||
| c815579cb9 | |||
| 60f34d89ba | |||
| 2dd37ff965 | |||
| 750d109c93 | |||
| 23b5f879ae | |||
| cc4d57bc0c | |||
| c573301b2d | |||
| f19482985d | |||
| 2062ee7dfc | |||
| f24494d877 | |||
| 9f05d8d8d9 | |||
| ad139438f9 | |||
| 0118a7691f | |||
| 7915202aaa | |||
| 5492bf86d1 | |||
| 32e01c7861 | |||
| 13728c7c09 | |||
| a76945deef | |||
| 08c01f2b4e | |||
| eaa6922a95 | |||
| b99fa2b997 | |||
| cf28a3378f | |||
| 63ba6ec37c | |||
| f07856ecb7 | |||
| 44e81383f9 | |||
| d5c0b9cd5c | |||
| 4b0b519261 | |||
| fde0a4ade1 | |||
| fbd7f1b2b0 | |||
| 32bc71ae0f | |||
| 0cf39e94a2 | |||
| 6ccb32c837 | |||
| c63763982a | |||
| c26e63dec3 | |||
| 014e5257d0 | |||
| 1911187450 | |||
| 827e94b721 | |||
| fe9e6d47a2 | |||
| fe8cd0b884 | |||
| 496e0c0862 | |||
| f2c3673406 | |||
| 8dd2ebd245 | |||
| cc06c469ee | |||
| 96d8397787 | |||
| 20346091c3 | |||
| 776f9bf360 | |||
| d09218ca97 | |||
| c4e8375ef6 | |||
| 4e288e4b85 | |||
| 324d3f6ef1 | |||
| e640d4280a | |||
| 3951f08531 | |||
| 684546f080 | |||
| 507ab6723c | |||
| 0f4483e2f8 | |||
| de9c3c94de | |||
| 730048c70b | |||
| 1637d2202c | |||
| c0a6850eff | |||
| 8f642ad112 | |||
| 0b879eb5a0 | |||
| c1d4dd92cd | |||
| 4741e674c4 | |||
| d3ad49c4e1 | |||
| 3487da83ab | |||
| 3bc96bf319 | |||
| 3e22941484 | |||
| b6dcbb1377 | |||
| f6d99ba106 | |||
| 2bacc8d7b8 | |||
| dfc5d61514 | |||
| b2d989887d | |||
| 0c72f1e5d3 | |||
| 58ce6d8a2c | |||
| e7c0f3b5d0 | |||
| c799f8d716 | |||
| fb036bfe4c | |||
| acfd522b57 | |||
| f16f7b08c8 | |||
| b06201d079 | |||
| 17ba5e6a48 | |||
| b488ee5235 | |||
| a012943119 | |||
| 2afcd38bc5 | |||
| ef86905c58 | |||
| 66f41ca1ae | |||
| 44f53dabed | |||
| 2eee3c1c3e | |||
| ac652cbbd7 | |||
| de4a7be6a5 | |||
| 5a3a2231c0 | |||
| 8326d37806 | |||
| eb0ecadf31 | |||
| 661815ea1f | |||
| e4f1ca83f9 | |||
| da2b9cb132 | |||
| 547e5a26ee | |||
| 1068b64b74 | |||
| d8f6ed196e | |||
| 9ebea2b040 | |||
| 0c41c36c0d | |||
| 1b1f3e3d8b | |||
| fe33982df7 | |||
| 53804b6c80 | |||
| 5ce068b6fa | |||
| 9b97570a92 | |||
| 352b844954 | |||
| 49fff1d17e | |||
| d19f647d99 | |||
| c5deb1d3b7 | |||
| 167e1e79a8 | |||
| 91b3decf01 | |||
| 4ab93b067e | |||
| 008fa88012 | |||
| 4c49497577 | |||
| 8dd3741fa7 | |||
| 5572e07b34 | |||
| 3f5589b655 | |||
| 48abfdd621 | |||
| 06088b807b | |||
| 21e47d8ce0 | |||
| c39ab2fda2 | |||
| 4197120d92 | |||
| da7bd0f4ea | |||
| 21ac283355 | |||
| 153f638e03 | |||
| 9156735aa0 | |||
| b8ad90a4cb | |||
| 36f7ba71f9 | |||
| b1af2089a4 | |||
| 2b50a314a5 | |||
| 376d02cce2 | |||
| a4ae9e8fd5 | |||
| 9e5204934f | |||
| 1ffd77595d | |||
| dac6a362f2 | |||
| 6d29b5140b | |||
| 2c5414a8e7 | |||
| 2fa325dbf3 | |||
| 969a677d7d | |||
| 90470342e7 | |||
| a4e762fb01 | |||
| da2d732041 | |||
| 6a5acee438 | |||
| 49cd5014d2 | |||
| 522882c0cc | |||
| 7e8b4dc4b9 | |||
| 8e673f6634 | |||
| 05e6018bd1 | |||
| e1a845d49f | |||
| 2deded2d88 | |||
| af550a7104 | |||
| e68d7eb12d | |||
| a186e68ca0 | |||
| 81c60ca6f2 | |||
| bd9347afd7 | |||
| 9023cdf726 | |||
| 9caef87899 | |||
| c9d9c065a2 | |||
| c024c8d87b | |||
| 850a0d988a | |||
| 7bd3128e8f | |||
| 43a1ec60ce | |||
| d04d83b972 | |||
| 89516c41e3 | |||
| 4f9b6535fb | |||
| 6ab1f6158a | |||
| bb8e6a51f4 | |||
| 7a8ea2666b | |||
| 3029c6d10c | |||
| 9bb0ba2953 | |||
| 0e22eaf7c3 | |||
| 53ee9d31bc | |||
| 7134edf2f2 | |||
| e4da671cbc | |||
| 8cde2420e7 | |||
| 3c4c215931 | |||
| 2685309926 | |||
| 03b4a788c5 | |||
| eb6cdd0fc0 | |||
| 0b1c24e55c | |||
| 057c2d69a9 | |||
| 79c2cf90cf | |||
| 20cbdccbf6 | |||
| 5d05d71210 | |||
| 08294e8ada | |||
| 41f7262280 | |||
| 6aa361b801 | |||
| 7bcc428178 | |||
| c212217f67 | |||
| 9281e0adf3 | |||
| ace10fc511 | |||
| 0ac923e104 | |||
| 082aa0a34a | |||
| acf5c0931f | |||
| ee204f35ef | |||
| e51de2bfce | |||
| c7da9a45ee | |||
| e885224855 | |||
| d48eccc0e4 | |||
| 21012b305f | |||
| a79e322eff | |||
| b5a1cf1b10 | |||
| 40ebd7bc2c | |||
| ef37ee0f38 | |||
| 49033bf952 | |||
| d9725240a6 | |||
| cb5518a261 | |||
| ac71d8aa2a | |||
| aa733fbfb1 | |||
| d2b8f65612 | |||
| cf6ac06f73 | |||
| 496ad9c4e2 | |||
| 657ec17559 | |||
| 62c9af5cba | |||
| a4f16a1f30 | |||
| 1b595ee7fe | |||
| fa556e4e33 | |||
| 391d718909 | |||
| 2ce14e443d | |||
| cdf0a3a3e7 | |||
| f00f9a5277 | |||
| 7112642e89 | |||
| 3714c21f97 | |||
| 24c49b7f2f | |||
| b16429f3f8 | |||
| 27734495f4 | |||
| 097b338d19 | |||
| cbb8450435 | |||
| 3b7e0a91bd | |||
| d9a1e56282 | |||
| b63e74369c | |||
| 4d0ba06cba | |||
| c4369dc237 | |||
| 99dd212496 | |||
| 6e41033ed6 | |||
| 90a5cb7aae | |||
| bccfbaa03b | |||
| e32ff7116d | |||
| 00214843cb | |||
| dd4054c4fc | |||
| 0b40b92340 | |||
| 60a3c41003 | |||
| f501c60de1 | |||
| b985a935b0 | |||
| a2f1790db2 | |||
| 5784ab63cc | |||
| fd857c2586 | |||
| 29df8762e2 | |||
| 32e13c3495 | |||
| e6151b3b71 | |||
| 6823b08651 | |||
| b588bb02f4 | |||
| faf7b6efa2 | |||
| 03492da2cd | |||
| 8abfc2ada0 | |||
| a262a2ef71 | |||
| 435a38f1d1 | |||
| 91d7db7c01 | |||
| e298c88728 | |||
| d58e7a58d0 | |||
| e530412ef0 | |||
| 1d5e2dc4d5 | |||
| d0b5faf266 | |||
| 76e8a39276 | |||
| 66fe8e694f | |||
| abd8a230b4 | |||
| 565662a8aa | |||
| 0f00e71b5e | |||
| 44fea0117d | |||
| b9b39a24f7 | |||
| 358fb87683 | |||
| f0ef73d150 | |||
| 1d2297a5fc | |||
| 862736bba4 | |||
| e30dac7cc2 | |||
| f97d5fa232 | |||
| e909616aff | |||
| be219bbee6 | |||
| 17c1c81b4e | |||
| bf0a16c707 | |||
| 86a54feb41 | |||
| 2c923470f8 | |||
| 5d26250b45 | |||
| 6d90e0bf51 | |||
| 51df795a8c | |||
| 9ee053e4f9 | |||
| 4044185ab3 | |||
| f4fe825162 | |||
| cb785b89f0 | |||
| 8289128399 | |||
| e9146f5fc1 | |||
| bc7de458d3 | |||
| 4aa44331f0 | |||
| eada19f516 | |||
| 63677b1451 | |||
| 5789d96a3d | |||
| 0afdeb9bcc | |||
| 79dd8f4e49 | |||
| 93f204ba22 | |||
| 98ad96115a | |||
| ae4ce12c17 | |||
| b8767042b4 | |||
| 200e5f3373 | |||
| ebb68cccfe | |||
| cc4be23802 | |||
| 9f44b1695d | |||
| 94344deff3 | |||
| a41994cb41 | |||
| eee6a713fa | |||
| aed28fe503 | |||
| 7bc72e683b | |||
| 31e386de44 | |||
| 31737efd87 | |||
| be096b9657 | |||
| 3e773ef94b | |||
| 111adc917b | |||
| 6a1b2861f3 | |||
| ed3ff01c22 | |||
| 73e4af98cc | |||
| 84835428ba | |||
| 9f3099ef2b | |||
| 412eed51cd | |||
| bd20d1af02 | |||
| a15932cc7f | |||
| 8942c31a5c | |||
| 90fe6921e2 | |||
| e8a872d351 | |||
| a16ae846ae | |||
| 38de0e352f | |||
| eeaa50ddcb | |||
| 16b0d4eb24 | |||
| 053fb403c5 | |||
| 1d70d4bca0 | |||
| bba04ba1bd | |||
| e926180605 | |||
| 958b62f8c7 | |||
| d238a9e9dd | |||
| 1588c25fba | |||
| fb993a7060 | |||
| 6b375614ca | |||
| da928fb549 | |||
| f657c2f1d1 | |||
| 594cc0f06d | |||
| d712bb1988 | |||
| d00c92ef99 | |||
| 59a30238eb | |||
| cb75c6fbe6 | |||
| 8056b66714 | |||
| e09501d779 | |||
| 70192222ad | |||
| cc253d4b33 | |||
| 7d3918a1c6 | |||
| e759a14909 | |||
| fd5a1c5b4b | |||
| c95dc12a96 | |||
| 70ef5912c2 | |||
| 79bb9db3b9 | |||
| d3791ea99b | |||
| 5982fed0b8 | |||
| 1254df2db1 | |||
| 8a23af8581 | |||
| 9cabb27c39 | |||
| 5c17437ba6 | |||
| 520c3659d2 | |||
| 962374b765 | |||
| 8fcc809299 | |||
| 8eac101082 | |||
| b1605ac44e | |||
| 90afc1e221 | |||
| adeba81340 | |||
| 8c10b7ba04 | |||
| 8aae77ff70 | |||
| 7eeacc6268 | |||
| 06e02781d2 | |||
| 3b5625c663 | |||
| ea47f93bc1 | |||
| c33c2de18b | |||
| f125a798bf | |||
| 84d7281002 | |||
| d98a53ec43 | |||
| ee3026233e | |||
| 8fb0b69a79 | |||
| 03ce6c05a9 | |||
| 1d3a03909b | |||
| 7020b78faa | |||
| f1746b41a2 | |||
| 22b96e4b24 | |||
| ddf684f6c6 | |||
| cc9d327ea0 | |||
| 47e23e3463 | |||
| 8feb903021 | |||
| 124172e4d7 | |||
| 9d4367cfac | |||
| 6cd9dfce8c | |||
| 4a3dbe4d60 | |||
| 062ab5045a | |||
| ba472d3b7b | |||
| 82adcf37f4 | |||
| 4f23690ab4 | |||
| 17481aeb38 | |||
| 26adbb1717 | |||
| ffd2785499 | |||
| 5c6d160cbf | |||
| 28a5c5b343 | |||
| 3501fff7fc | |||
| 1988337598 | |||
| be2fdd5cfa | |||
| ef0837c514 | |||
| 252f88e362 | |||
| 8ba9b47141 | |||
| f984339b13 | |||
| a1ff1d2585 | |||
| 3bbe7d0322 | |||
| 3fd729f1a2 | |||
| 375b75c422 | |||
| 340a1e3e3a | |||
| 8d3ab8f93b | |||
| 8dc52de871 | |||
| 6ff39be4bf | |||
| e2548ac9e2 | |||
| 0ce94ada82 | |||
| 77a4c4be70 | |||
| 9616084769 | |||
| 163a246c58 | |||
| 31efcb4a86 | |||
| 1faea596f8 | |||
| cd5cb9093c | |||
| 9f1bd89a0c | |||
| 0908053881 | |||
| 910068bcf5 | |||
| d9ae0ff1bf | |||
| 4bea1a6e70 | |||
| e7873b0fa0 | |||
| c892704ee3 | |||
| 7cd44c853a | |||
| 818b42b97e | |||
| 5870ba98b4 | |||
| 19939c985a | |||
| 7d65a9ef22 | |||
| eb45f7c3bc | |||
| 90a89c9224 | |||
| e59b52dcac | |||
| 07d4edef4e | |||
| b76c2f7b8d | |||
| be414510a4 | |||
| e4b2052231 | |||
| 5066b23603 | |||
| 86de9830b4 | |||
| 758b5e4810 | |||
| 79e2c55c34 | |||
| 802cf51cf9 | |||
| 55d4a90041 | |||
| cf535a2f8f | |||
| ba38964e8a | |||
| c943e5dd43 | |||
| 65f44da4c9 | |||
| 24c51afa40 | |||
| e6739adb35 | |||
| 06fceb07cc | |||
| c87029254c | |||
| d52aca1d3d | |||
| 26af05cd01 | |||
| f7750f2a2c | |||
| 675b4f55c1 | |||
| a322439a83 | |||
| f7a1046c67 | |||
| c17593d932 | |||
| 109d2969a5 | |||
| 2d3c463bf3 | |||
| 74073b641f | |||
| 426033f835 | |||
| a9ad1e22d6 | |||
| 903aa014e4 | |||
| e058854c3f | |||
| c16ce866dc | |||
| f9eba950e0 | |||
| 3eb53d3195 | |||
| 2a5921d3d0 | |||
| 440c711335 | |||
| 7ea573123b | |||
| 7f5ce45fad | |||
| bd16542e25 | |||
| b95a696a5a | |||
| b8f40e8314 | |||
| 0bbeff0b5b | |||
| 5828e16421 | |||
| 8497d2efba | |||
| b578d2ced0 | |||
| 239b461f75 | |||
| c7db7c0926 | |||
| e107766a61 | |||
| 05a0b6c615 | |||
| 7ada8f18fb | |||
| 887a77f4a3 | |||
| 97bde67b1d | |||
| 33c3668175 | |||
| 0158fc3a7a | |||
| 72bb2ddb08 | |||
| 01c1a37fa2 | |||
| 35aa51d6a9 | |||
| ada42ee57d | |||
| fe9b27ecf2 | |||
| e03f120a00 | |||
| 59344f540d | |||
| e829f1fc1b | |||
| d9904eb5f1 | |||
| 10cd26af5e | |||
| c1f649fc83 | |||
| a4865f860d | |||
| 14fce8edfe | |||
| 6826e3567d | |||
| 250e8625a7 | |||
| 58530d6f72 | |||
| 823fb3fca7 | |||
| 29302c0891 | |||
| 03570ebd43 | |||
| 2a4a0d38e3 | |||
| 9be9127ad1 | |||
| 66dd1c01f0 | |||
| d8dce7938d | |||
| 0701f5885e | |||
| ea3f660999 | |||
| 95a21ffe8a | |||
| 89d2cf8340 | |||
| 0eb676d3cd | |||
| ac1a762fa8 | |||
| 59a05262a1 | |||
| 5f91d187c8 | |||
| 8d8bf311ed | |||
| 69545c8a56 | |||
| a1868c0205 | |||
| 12bc4f0da8 | |||
| 510b887042 | |||
| ff7171daa2 | |||
| 5b0dbd5d30 | |||
| 9c7fb25a94 | |||
| 2e24eab5ad | |||
| 8135ad4424 | |||
| 6ffa40e40d | |||
| bc120176ca | |||
| d50d4ae1c9 | |||
| d34aa61e95 | |||
| 04578a4ed1 | |||
| 3e5282a06d | |||
| f86cadb802 | |||
| c4fe4d87db | |||
| 7e5deeaab3 | |||
| 36c425d699 | |||
| a2c69c6144 | |||
| 58e3c0604d | |||
| 7408849eb5 | |||
| b42142f692 | |||
| ddafdcf392 | |||
| 95cbaf1993 | |||
| 43aa3c857d | |||
| 964e0d6f41 | |||
| 5a1c52d3b5 | |||
| 02c374b61e | |||
| f2094e049a | |||
| 8ff2b3b090 | |||
| eeaa363132 | |||
| 43e51848fc | |||
| 8b17117220 | |||
| a4e06a4ce0 | |||
| 4d55f5ebdb | |||
| 268f3c77c2 | |||
| ce73718620 | |||
| d307c58f87 | |||
| e7ec021da8 | |||
| ca94fc7a96 | |||
| 9d650c4885 | |||
| c6d9be499c | |||
| 0e78e8b3f9 | |||
| 2a99278b52 | |||
| 4a47c096f7 | |||
| bd961be055 | |||
| 525fea80b8 | |||
| 6f92ae6a59 | |||
| 8bad6c0f54 | |||
| 91cca16f40 | |||
| a0697a048d | |||
| d22c6aae79 | |||
| 83997980ba | |||
| 4d9bdd1c12 | |||
| 163a73722e | |||
| 65d17decb8 | |||
| 1aa300f97e | |||
| 8fbb30bded | |||
| 6b0f1a0c10 | |||
| 1cee590eca | |||
| 9ff370ee27 | |||
| cd0057ea5a | |||
| 2c0a294b6a | |||
| 3e09bd5c60 | |||
| 0a99d7cebb | |||
| 3138e3edc7 | |||
| 99ab34ad0b | |||
| 9b7923f8f5 | |||
| cfcbe7f107 | |||
| 5fb27ab186 | |||
| 36b1a3c020 | |||
| baccb5d12e | |||
| adc4621711 | |||
| a8d78664e9 | |||
| 9fab4eb088 | |||
| 0d0f1315ff | |||
| 555598c155 | |||
| f49fa23f69 | |||
| b732064f88 | |||
| 1f99a381eb | |||
| 81b610cc4c | |||
| b0a0bfc888 | |||
| 6221ccb53b | |||
| cbe1da2d68 | |||
| 24297e373c | |||
| 99d14a559c | |||
| 08339a1f65 | |||
| 4e3ad38087 | |||
| 63c97fadc6 | |||
| 45633ad7e8 | |||
| 8508decd5c | |||
| 315f47bf30 | |||
| 12f8d79d84 | |||
| 710690e2d2 | |||
| 03bfbe81d0 | |||
| c990fb6fe7 | |||
| 9b31cd63a4 | |||
| dee3ccdf77 | |||
| de23a32c96 | |||
| 2beb840a5c | |||
| f748d76549 | |||
| 9d9a326c2b | |||
| 9184827195 | |||
| cb533c954b | |||
| ead876036d | |||
| cfa25eccb1 | |||
| b0d6233de6 | |||
| b07b8a1aaa | |||
| a68cdaf2ba | |||
| 16641b9193 | |||
| 0469a90992 | |||
| 6dc3e5ab7a | |||
| 82012fa623 | |||
| 7ddd254bb1 | |||
| 464858cfdf | |||
| 30db23255d | |||
| 868c1ef891 | |||
| b961356b7b | |||
| 2e32d6c574 | |||
| a31e5aab79 | |||
| ae4f9565bd | |||
| f33ba10b96 | |||
| 904c519091 | |||
| a0db837910 | |||
| 51cb5db8b4 | |||
| c328728e0c | |||
| 3384ef67a6 | |||
| e89c549706 | |||
| 3c67ac73da | |||
| 656349e6c5 | |||
| df2af0185c | |||
| 913d30f2de | |||
| e96172b698 | |||
| 0c241f683d | |||
| a19097de2b | |||
| f6feeb9d1e | |||
| f205e6f9cc | |||
| 4e543e6068 | |||
| 176062f11c | |||
| 4d88191171 | |||
| 025ea1d094 | |||
| a4283d545a | |||
| 52fa2aace9 | |||
| fa711cf142 | |||
| 70bc7e53fe | |||
| 56f22aa073 | |||
| 878a87278d | |||
| c4a539d2ba | |||
| 4225e81080 | |||
| 8fd4887f10 | |||
| 0e397797b4 | |||
| e6c8458ce7 | |||
| 50ea9919af | |||
| 67f62df894 | |||
| 0da0280156 | |||
| fa713eac4a | |||
| 2c7d56ab34 | |||
| e340268dd0 | |||
| affec6720b | |||
| 5047826a74 | |||
| 33d9230442 | |||
| 607b174c5f | |||
| 6b4ea71404 | |||
| 014322c240 | |||
| b789f84151 | |||
| 19d5fe1ba6 | |||
| 93b95954c4 | |||
| fb7a2aaa32 | |||
| 3105eacd4d | |||
| 215893214f | |||
| 30e01d6700 | |||
| 94cfc5d7d6 | |||
| 471b32cce1 | |||
| 036b34e91d | |||
| 77f7f8c1ed | |||
| e6fc991d2a | |||
| 060881777d | |||
| 6e567fa725 | |||
| 7e4c01937f | |||
| 06a00e6482 | |||
| 242df42f55 | |||
| 8d78c16c8a | |||
| db2b05eb7f | |||
| 282b1090ba | |||
| 4f6c9fa866 | |||
| 9375842c71 | |||
| ea3fca0f1b | |||
| 5971d67a66 | |||
| 9f5fa880d6 | |||
| 357b68dd4f | |||
| 384f3f5698 | |||
| 4577ff9628 | |||
| e6cd9f524d | |||
| 3dad56621f | |||
| 6c9a225b64 | |||
| 3bbb9bd95d | |||
| a4f855ccd8 | |||
| 4d80af4e06 | |||
| 7abce12499 | |||
| 7b1302c011 | |||
| 66d23b7eac | |||
| dc0255509b | |||
| 6661f91eb5 | |||
| 2eb36aedeb | |||
| 0e623ebfeb | |||
| ffb73569e9 | |||
| 713cda9455 | |||
| 223721cca8 | |||
| e7479c8a93 | |||
| 224fe0069b | |||
| cb97847392 | |||
| 6a29531467 | |||
| 262e249d2c | |||
| 77479efaef | |||
| 898863a8d9 | |||
| 05d555f98d | |||
| 868092db10 | |||
| 7a738c2eca | |||
| b304dbcba6 | |||
| 6e28a5daa4 | |||
| 8f4f9660ed | |||
| 2d01535651 | |||
| e57d4669fc | |||
| f47c599dea | |||
| 7a693a90f7 | |||
| 9cf51de3f7 | |||
| 5089c20cd6 | |||
| a0da23f86a | |||
| 44d24b57c6 | |||
| c143d774d4 | |||
| 9e92240dd0 | |||
| d2c586b096 | |||
| fbfbb9408a | |||
| fb56665dec | |||
| 5b65c216b6 | |||
| 9ad98c5970 | |||
| cae9d0f2e5 | |||
| c0d267c63e | |||
| 70704b0a5e | |||
| b135275201 | |||
| 7e1eae6681 | |||
| 30f5d6dc85 | |||
| a50dd1168b | |||
| 62fa1620aa | |||
| a0d42c8b59 | |||
| a21663da61 | |||
| 67a0382942 | |||
| f5c2467d01 | |||
| a3abcc8094 | |||
| edf439f301 | |||
| 2245563250 | |||
| bca21d5515 | |||
| 89cae2e7c9 | |||
| 26c381a4c4 | |||
| 4bc5aa050c | |||
| cd44b0d180 | |||
| 59ee91ca5d | |||
| 59165a7033 | |||
| 93d242c05f | |||
| 4bbb6591e3 | |||
| 7df8025f6a | |||
| f19c52f40e | |||
| b7840779fe | |||
| 28042a8cc9 | |||
| b2907226bf | |||
| a2f46821f5 | |||
| b7385cd4cc | |||
| 718c65818c | |||
| 91e2293606 | |||
| 3c4a921f9a | |||
| d04b333126 | |||
| 0a4bef4d9a | |||
| a0f090a83a | |||
| dc8ee5943c | |||
| 9132c36aa7 | |||
| 224c0d759f | |||
| ffcaca2db1 | |||
| 409fc4a43b | |||
| 16968f3f2b | |||
| e3fd0dce21 | |||
| 53b6b6deca | |||
| 26f47a50d0 | |||
| 3cf77374c4 | |||
| a1129c3f0f | |||
| 2fe74603a3 | |||
| 54d517363d | |||
| 948fe0c0e6 | |||
| dbd8e6c0e9 | |||
| 02b5601933 | |||
| 3ed40608a2 | |||
| 36d7c2dd91 | |||
| fa7ef68851 | |||
| f84877a4fc | |||
| 261fb62e24 | |||
| 48d8aa4cd8 | |||
| 95ff0d3db6 | |||
| 2dc1d914c0 | |||
| fc06701009 | |||
| ee4f334296 | |||
| cac2395237 | |||
| 5afc3f13cf | |||
| 9030917c14 | |||
| 9905def352 | |||
| a3793aa92b | |||
| 76c8498956 | |||
| 75bd8ea5a2 | |||
| 50a5e864ac | |||
| 352fc26f7e | |||
| 44afa1623e | |||
| 14acafabfc | |||
| 773af58d03 | |||
| 352b851e9c | |||
| 8353a01082 | |||
| b70e001206 | |||
| a741bb4d55 | |||
| 24adee3d54 | |||
| 09203ffb95 | |||
| e94338f4c6 | |||
| dd9dd8ee81 | |||
| 01d6dcac59 | |||
| ad0ee6b0d6 | |||
| 769c8c228e | |||
| 50fcd67085 | |||
| 52d03e6b7d | |||
| b949cd0039 | |||
| e527170315 | |||
| ec7d210c36 | |||
| 74a4089464 | |||
| fa9e14f574 | |||
| cdbeefcd16 | |||
| ffdd5f4091 | |||
| bb60525780 | |||
| 82634af649 | |||
| 3643ed9f13 | |||
| fac59ab705 | |||
| 1e343b0d12 | |||
| 34bb467b97 | |||
| b092525c10 | |||
| 256dac3a82 | |||
| dfe947f54d | |||
| ce09407816 | |||
| beee6af79d | |||
| c282562867 | |||
| 2aed9b3a33 | |||
| 210910f21e | |||
| 1d666318ae | |||
| 4df6095089 | |||
| d4edcce224 | |||
| d7c6761841 | |||
| 5733224f8d | |||
| 22fd5042bc | |||
| 44a6f2d448 | |||
| cd9c17f9b3 | |||
| dc07bcf0fa | |||
| 248b8fb4fd | |||
| d5ec7c3001 | |||
| 35182a1483 | |||
| 21b0a517a9 | |||
| 19a770445e | |||
| c6512f1376 | |||
| 2cb3963138 | |||
| d05c394c68 | |||
| 797de31960 | |||
| a0af1a811a | |||
| 4933b9ce54 | |||
| e81c4eb155 | |||
| b284c8bc56 | |||
| 872d2d4337 | |||
| 525f1b7781 | |||
| 2f99d8ca62 | |||
| 7781014cf7 | |||
| 2432b36f5d | |||
| 288aa015fa | |||
| 1cb8b922c3 | |||
| 41cec64bf6 | |||
| d82bda9d00 | |||
| b84da40365 | |||
| d02c947b84 | |||
| 7167a5a71e | |||
| f13c2455ea | |||
| b200b66612 | |||
| b811df8cda | |||
| 1e239b78c3 | |||
| 3a8daadd92 | |||
| f605d6fca5 | |||
| cd85e43624 | |||
| 2b94d09539 | |||
| ab82da5c75 | |||
| 8a467aa537 | |||
| 742e6b1e3e | |||
| e35e8bcdce | |||
| 5f953aa47f | |||
| e550e9aa1d | |||
| 26e2defd9e | |||
| 3b3641c69e | |||
| 56ccd518d6 | |||
| 59846280a8 | |||
| aa95e3abcd | |||
| ad6340c1a7 | |||
| 62a54aab58 | |||
| 23f1e81cf0 | |||
| d014f422d2 | |||
| 68a9f1bc46 | |||
| 798637d465 | |||
| 60ea4c5f77 | |||
| 0e119950c2 | |||
| 4be4467fc6 | |||
| 06636b2a28 | |||
| 71a36d1b25 | |||
| 9ba93ff8d2 | |||
| 4059308dd7 | |||
| 9befe8ae5f | |||
| 20e01f3b2c | |||
| 98b894ed8e | |||
| ac8b7264b3 | |||
| bf7b24ecc0 | |||
| 9f43dd2db5 | |||
| 28d868985e | |||
| cf1be26da2 | |||
| 1de9b73aa0 | |||
| 3532a6360b | |||
| beddc8e1ea | |||
| df81fba565 | |||
| 25da0d26ef | |||
| e0c34d20a8 | |||
| cc6db5b5cc | |||
| c38df03add | |||
| 63402358d1 | |||
| 3ae1de735e | |||
| a701eb0e4f | |||
| 09caf017a9 | |||
| 32b8b2093d | |||
| c84a4f1aa8 | |||
| d90c0b5431 | |||
| 94f6785f0d | |||
| f01c382807 | |||
| 6d42803dd8 | |||
| 61e908ccb5 | |||
| 236bcba2bd | |||
| 7bae8c34a7 | |||
| 3960341640 | |||
| 06e453dd05 | |||
| 0347877290 | |||
| b464526d5e | |||
| 361b1cbad4 | |||
| 56a866fca7 | |||
| 49e0d68374 | |||
| 0ccd05e605 | |||
| 916e4586c5 | |||
| c9ffd0b4bb | |||
| 1d2f6f46a4 | |||
| 4af6d856b9 | |||
| 6fd4294391 | |||
| 88b2b85f2a | |||
| 2c1dff6ac8 | |||
| 481b42f563 | |||
| 597c321009 | |||
| 76651f75d8 | |||
| 3d8bae55a1 | |||
| 4b6869e367 | |||
| 477ba7c081 | |||
| 5b6d9725b8 | |||
| 25c3cea115 | |||
| d90601276f | |||
| 4f692bc698 | |||
| d8dd02eef0 | |||
| 8ad65ae233 | |||
| eabbb4569b | |||
| 49888b771d | |||
| 2b1c1cd052 | |||
| 61884e67ec | |||
| 9a2f028843 | |||
| 2b56acf164 | |||
| 98b67dcc28 | |||
| 500dfa3107 | |||
| c4efcfd2db | |||
| 81ee6bbcf6 | |||
| e4e2e76e06 | |||
| f847862e84 | |||
| 427dbeafde | |||
| 99ac85b40e | |||
| 020388baed | |||
| 4ade79de4f | |||
| 870dda9b8b | |||
| 27dd5298f7 | |||
| 6d5d406ce9 | |||
| ffb5e7e6f7 | |||
| 0de101c89f | |||
| bd3a0766e1 | |||
| f536cc8f8a | |||
| 826c0495fc | |||
| 9eac541ce5 |
@@ -17,8 +17,8 @@ limitations under the License.
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.google.android.maps.mytracks"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="39"
|
||||
android:versionName="1.1.16">
|
||||
android:versionCode="38"
|
||||
android:versionName="1.1.15">
|
||||
|
||||
<!-- Permissions to initialize service -->
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
@@ -293,7 +293,6 @@ limitations under the License.
|
||||
|
||||
<service android:name="com.google.android.apps.mytracks.services.ControlRecordingService"
|
||||
android:exported="false" />
|
||||
<service android:name="com.google.android.apps.mytracks.services.RemoveTempFilesService"/>
|
||||
|
||||
<receiver android:name="com.google.android.apps.mytracks.BootReceiver">
|
||||
<intent-filter>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -35,12 +35,12 @@ limitations under the License.
|
||||
http://maps.google.com/mapfiles/ms/micons/blue-pushpin.png
|
||||
</string>
|
||||
<string name="my_tracks_analytics_id">UA-7222692-2</string>
|
||||
<string name="my_tracks_privacy_url">www.google.com/policies/privacy/</string>
|
||||
<string name="my_tracks_privacy_url">m.google.com/privacy</string>
|
||||
<string name="my_tracks_recording_service_name">My Tracks Recording Service</string>
|
||||
<string name="my_tracks_support_url">
|
||||
groups.google.com/a/googleproductforums.com/forum/#!categories/maps/mytracks
|
||||
</string>
|
||||
<string name="my_tracks_web_url">www.google.com/mobile/mytracks</string>
|
||||
<string name="my_tracks_web_url">mytracks.appspot.com</string>
|
||||
<string name="permission_notification_value">
|
||||
com.google.android.apps.mytracks.MYTRACKS_NOTIFICATIONS
|
||||
</string>
|
||||
|
||||
+11
-216
@@ -465,166 +465,6 @@ limitations under the License.
|
||||
Y axis
|
||||
</string>
|
||||
|
||||
<!-- Description -->
|
||||
<string name="description_activity_type"
|
||||
translation_description="Activity type description.
|
||||
|
||||
%1$s activity type. E.g., 'hiking'">
|
||||
Activity type: %1$s
|
||||
</string>
|
||||
<string name="description_average_moving_pace"
|
||||
translation_description="Average moving pace description.
|
||||
|
||||
%1$.2f pace in minutes per kilometer
|
||||
%2$.1f pace in minutes per mile">
|
||||
Average moving pace: %1$.2f min/km (%2$.1f min/mi)
|
||||
</string>
|
||||
<string name="description_average_moving_speed"
|
||||
translation_description="Average moving speed description.
|
||||
|
||||
%1$.2f speed in kilometers per hour
|
||||
%2$.1f speed in miles per hour">
|
||||
Average moving speed: %1$.2f km/h (%2$.1f mi/h)
|
||||
</string>
|
||||
<string name="description_average_pace"
|
||||
translation_description="Average pace description.
|
||||
|
||||
%1$.2f pace in minutes per kilometer
|
||||
%2$.1f pace in minutes per mile">
|
||||
Average pace: %1$.2f min/km (%2$.1f min/mi)
|
||||
</string>
|
||||
<string name="description_average_speed"
|
||||
translation_description="Average speed description.
|
||||
|
||||
%1$.2f speed in kilometers per hour
|
||||
%2$.1f speed in miles per hour">
|
||||
Average speed: %1$.2f km/h (%2$.1f mi/h)
|
||||
</string>
|
||||
<string name="description_elevation_gain"
|
||||
translation_description="Elevation gain description.
|
||||
|
||||
%1$d elevation in meters
|
||||
%2$d elevation in feet">
|
||||
Elevation gain: %1$d m (%2$d ft)
|
||||
</string>
|
||||
<string name="description_location_accuracy"
|
||||
translation_description="Label for location accuracy in meters.">
|
||||
Accuracy (m)
|
||||
</string>
|
||||
<string name="description_location_altitude"
|
||||
translation_description="Label for location altitude in degrees.">
|
||||
Altitude (m)
|
||||
</string>
|
||||
<string name="description_location_bearing"
|
||||
translation_description="Label for location bearing in degrees.">
|
||||
Bearing (deg)
|
||||
</string>
|
||||
<string name="description_location_latitude"
|
||||
translation_description="Label for location latitude in degrees.">
|
||||
Latitude (deg)
|
||||
</string>
|
||||
<string name="description_location_longitude"
|
||||
translation_description="Label for location longitude in degrees.">
|
||||
Longitude (deg)
|
||||
</string>
|
||||
<string name="description_location_speed"
|
||||
translation_description="Label for location speed in meters per second.">
|
||||
Speed (m/s)
|
||||
</string>
|
||||
<string name="description_location_time"
|
||||
translation_description="Label for location time.">
|
||||
Time
|
||||
</string>
|
||||
<string name="description_max_elevation"
|
||||
translation_description="Max elevation description.
|
||||
|
||||
%1$d elevation in meters
|
||||
%2$d elevation in feet">
|
||||
Max elevation: %1$d m (%2$d ft)
|
||||
</string>
|
||||
<string name="description_max_grade"
|
||||
translation_description="Max grade description.
|
||||
|
||||
%1$d grade in percentage">
|
||||
Max grade: %1$d %%
|
||||
</string>
|
||||
<string name="description_max_speed"
|
||||
translation_description="Max speed description.
|
||||
|
||||
%1$.2f speed in kilometers per hour
|
||||
%2$.1f speed in miles per hour">
|
||||
Max speed: %1$.2f km/h (%2$.1f mi/h)
|
||||
</string>
|
||||
<string name="description_min_elevation"
|
||||
translation_description="Min elevation description.
|
||||
|
||||
%1$d elevation in meters
|
||||
%2$d elevation in feet">
|
||||
Min elevation: %1$d m (%2$d ft)
|
||||
</string>
|
||||
<string name="description_min_grade"
|
||||
translation_description="Min grade description.
|
||||
|
||||
%1$d grade in percentage">
|
||||
Min grade: %1$d %%
|
||||
</string>
|
||||
<string name="description_min_pace"
|
||||
translation_description="Min pace description.
|
||||
|
||||
%1$.2f pace in minutes per kilometer
|
||||
%2$.1f pace in minutes per mile">
|
||||
Min pace: %1$.2f min/km (%2$.1f min/mi)
|
||||
</string>
|
||||
<string name="description_moving_time"
|
||||
translation_description="Moving time description.
|
||||
|
||||
%1$s time. E.g., '1:08:59'">
|
||||
Moving time: %1$s
|
||||
</string>
|
||||
<string name="description_recorded_time"
|
||||
translation_description="Recorded time description.
|
||||
|
||||
%1$s time. E.g, '2/15/2012 1:40 PM'">
|
||||
Recorded: %1$s
|
||||
</string>
|
||||
<string name="description_sensor_battery_level"
|
||||
translation_description="Label for battery level with its unit percentage (%).">
|
||||
Battery level (%)
|
||||
</string>
|
||||
<string name="description_sensor_cadence"
|
||||
translation_description="Label for cadence with its unit revolutions per minute (rpm).">
|
||||
Cadence (rpm)
|
||||
</string>
|
||||
<string name="description_sensor_heart_rate"
|
||||
translation_description="Label for heart rate with its unit beats per minute (bpm).">
|
||||
Heart rate (bpm)
|
||||
</string>
|
||||
<string name="description_sensor_power"
|
||||
translation_description="Label for power with its unit watt (W).">
|
||||
Power (W)
|
||||
</string>
|
||||
<string name="description_track_point"
|
||||
translation_description="Label for a track point">
|
||||
Point
|
||||
</string>
|
||||
<string name="description_track_segment"
|
||||
translation_description="Label for a track segment">
|
||||
Segment
|
||||
</string>
|
||||
<string name="description_total_distance"
|
||||
translation_description="Total distance description.
|
||||
|
||||
%1$.2f distance in kilometers
|
||||
%2$.1f distance in miles">
|
||||
Total distance: %1$.2f km (%2$.1f mi)
|
||||
</string>
|
||||
<string name="description_total_time"
|
||||
translation_description="Total time description.
|
||||
|
||||
%1$s time. E.g., '1:08:59'">
|
||||
Total time: %1$s
|
||||
</string>
|
||||
|
||||
<!-- EULA -->
|
||||
<string name="eula_accept"
|
||||
translation_description="In the 'Terms of service' dialog, the button to accept.
|
||||
@@ -1259,7 +1099,7 @@ limitations under the License.
|
||||
<string name="search_global_description"
|
||||
translation_description="Description of what is searched in My Tracks, to be displayed in the
|
||||
global system search settings.">
|
||||
Tracks and waypoints
|
||||
My Tracks tracks and waypoints
|
||||
</string>
|
||||
<string name="search_hint"
|
||||
translation_description="The hint shown on the search box until the user types a search query.
|
||||
@@ -1350,6 +1190,11 @@ limitations under the License.
|
||||
%1$s: service name. 'Google Maps', 'Google Fusion Tables', or 'Google Docs'.">
|
||||
Sending to %1$s. Please wait...
|
||||
</string>
|
||||
<string name="send_google_recorded"
|
||||
translation_description="When sending a track to Google, in the track description, a tag
|
||||
for the track recorded date. E.g., 'Recorded: Tue Sep 06 15:08:30 PDT 2011'.">
|
||||
Recorded
|
||||
</string>
|
||||
<string name="send_google_result_header"
|
||||
translation_description="When sending a track to Google, the header on the top of the result
|
||||
page.
|
||||
@@ -2429,16 +2274,6 @@ limitations under the License.
|
||||
Screenshot: track_list.png">
|
||||
Pick a track. Press & hold for more options.
|
||||
</string>
|
||||
<string name="track_list_play"
|
||||
translation_description="In the context menu for a track, the menu option to play the track.">
|
||||
Play
|
||||
</string>
|
||||
<string name="track_list_play_install_earth_message"
|
||||
translation_description="After pressing the menu option to play a track, the message informing
|
||||
the user that he needs Google Earth to play the track and asking him if he wants to install
|
||||
Google Earth from the Android Market.">
|
||||
You need Google Earth to play the track. Do you want to install from the Market?
|
||||
</string>
|
||||
<string name="track_list_save_file"
|
||||
translation_description="In the context menu for a track, under the 'Save to SD card...'
|
||||
option, the menu option to save the track as a certain file format.
|
||||
@@ -2596,53 +2431,13 @@ limitations under the License.
|
||||
Screenshot: value_auto_resume.png">
|
||||
Always
|
||||
</string>
|
||||
<string name="value_float_feet"
|
||||
translation_description="Display a float value in feet (ft).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f ft
|
||||
</string>
|
||||
<string name="value_float_kilometer"
|
||||
translation_description="Display a float value in kilometers (km).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f km
|
||||
</string>
|
||||
<string name="value_float_kilometer_hour"
|
||||
translation_description="Display a float value in kilometers per hour (km/h).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f km/h
|
||||
</string>
|
||||
<string name="value_float_meter"
|
||||
translation_description="Display a float value in meters (m).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f m
|
||||
</string>
|
||||
<string name="value_float_mile"
|
||||
translation_description="Display a float value in miles (mi).
|
||||
translation_description="In a setting picker, the string format to display a float value in
|
||||
miles (mi).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f mi
|
||||
</string>
|
||||
<string name="value_float_mile_hour"
|
||||
translation_description="Display a float value in miles per hour (mi/h).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f mi/h
|
||||
</string>
|
||||
<string name="value_float_minute_kilometer"
|
||||
translation_description="Display a float value in minutes per kilometer (min/km).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f min/km
|
||||
</string>
|
||||
<string name="value_float_minute_mile"
|
||||
translation_description="Display a float value in minutes per mile (min/mi).
|
||||
|
||||
%1$.2f: a float number. E.g., '2.22'">
|
||||
%1$.2f min/mi
|
||||
%1$.1f: a float number. E.g., '2.2'
|
||||
Screenshot: value_gps_accuracy_mile_poor_gps.png">
|
||||
%1$.1f mi
|
||||
</string>
|
||||
<string name="value_float_mile_poor_gps"
|
||||
translation_description="In a setting picker, the string format to display a float value in
|
||||
|
||||
@@ -79,8 +79,10 @@ public class AntInterface {
|
||||
private static boolean mAntSupported = false;
|
||||
|
||||
/**
|
||||
* An interface for notifying AntInterface IPC clients when they have been
|
||||
* connected to the ANT service.
|
||||
* An interface for notifying AntInterface IPC clients when they have
|
||||
* been connected to the ANT service.
|
||||
*
|
||||
* @see ServiceEvent
|
||||
*/
|
||||
public interface ServiceListener
|
||||
{
|
||||
@@ -1044,6 +1046,8 @@ public class AntInterface {
|
||||
*
|
||||
* @param channelNumber Which channel to transmit on.
|
||||
* @param txBuffer The data to send.
|
||||
* @param initialPacket Which packet in the burst sequence does the data begin in, 1 is the first.
|
||||
* @param containsEndOfBurst Is this the last of the data to be sent in burst.
|
||||
* @return The number of bytes still to be sent (approximately). 0 if success.
|
||||
* @throws AntInterfaceException
|
||||
* @throws AntServiceNotConnectedException
|
||||
@@ -1209,7 +1213,7 @@ public class AntInterface {
|
||||
* Claims the interface if it is available. If not the user will be prompted (on the notification bar) if a force claim should be done.
|
||||
* If the ANT Interface is claimed, an AntInterfaceIntent.ANT_INTERFACE_CLAIMED_ACTION intent will be sent, with the current applications pid.
|
||||
*
|
||||
* @param appName The name if this application, to show to the user.
|
||||
* @param String appName The name if this application, to show to the user.
|
||||
* @returns false if a claim interface request notification already exists.
|
||||
* @throws IllegalArgumentException
|
||||
* @throws AntInterfaceException
|
||||
|
||||
@@ -19,7 +19,6 @@ import static android.content.Intent.ACTION_BOOT_COMPLETED;
|
||||
import static com.google.android.apps.mytracks.Constants.RESUME_TRACK_EXTRA_NAME;
|
||||
import static com.google.android.apps.mytracks.Constants.TAG;
|
||||
|
||||
import com.google.android.apps.mytracks.services.RemoveTempFilesService;
|
||||
import com.google.android.apps.mytracks.services.TrackRecordingService;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
@@ -51,9 +50,6 @@ public class BootReceiver extends BroadcastReceiver {
|
||||
Intent startIntent = new Intent(context, TrackRecordingService.class);
|
||||
startIntent.putExtra(RESUME_TRACK_EXTRA_NAME, true);
|
||||
context.startService(startIntent);
|
||||
|
||||
Intent removeTempFilesIntent = new Intent(context, RemoveTempFilesService.class);
|
||||
context.startService(removeTempFilesIntent);
|
||||
} else {
|
||||
Log.w(TAG, "BootReceiver: unsupported action");
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ import com.google.android.apps.mytracks.stats.TripStatisticsBuilder;
|
||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
@@ -259,8 +258,7 @@ public class ChartActivity extends Activity implements TrackDataListener {
|
||||
* @param location the location to get data for (this method takes ownership of that location)
|
||||
* @param result the resulting point to fill out
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void fillDataPoint(Location location, double result[]) {
|
||||
private void fillDataPoint(Location location, double result[]) {
|
||||
double timeOrDistance = Double.NaN,
|
||||
elevation = Double.NaN,
|
||||
speed = Double.NaN,
|
||||
@@ -292,6 +290,7 @@ public class ChartActivity extends Activity implements TrackDataListener {
|
||||
Mode mode = chartView.getMode();
|
||||
switch (mode) {
|
||||
case BY_DISTANCE:
|
||||
timeOrDistance = profileLength / 1000.0;
|
||||
if (lastLocation != null) {
|
||||
double d = lastLocation.distanceTo(location);
|
||||
if (metricUnits) {
|
||||
@@ -300,7 +299,6 @@ public class ChartActivity extends Activity implements TrackDataListener {
|
||||
profileLength += d * UnitConversions.KM_TO_MI;
|
||||
}
|
||||
}
|
||||
timeOrDistance = profileLength * UnitConversions.M_TO_KM;
|
||||
break;
|
||||
case BY_TIME:
|
||||
if (startTime == -1) {
|
||||
@@ -328,7 +326,7 @@ public class ChartActivity extends Activity implements TrackDataListener {
|
||||
&& (location.getSpeed() <= trackMaxSpeed)) {
|
||||
speedBuffer.setNext(location.getSpeed());
|
||||
}
|
||||
speed = speedBuffer.getAverage() * UnitConversions.MS_TO_KMH;
|
||||
speed = speedBuffer.getAverage() * 3.6;
|
||||
if (!metricUnits) {
|
||||
speed *= UnitConversions.KM_TO_MI;
|
||||
}
|
||||
@@ -480,19 +478,4 @@ public class ChartActivity extends Activity implements TrackDataListener {
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
ChartView getChartView() {
|
||||
return chartView;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
MenuItem getChartSettingsMenuItem() {
|
||||
return chartSettingsMenuItem;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setTrackMaxSpeed(double maxSpeed) {
|
||||
trackMaxSpeed = maxSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.google.android.apps.mytracks.stats.ExtremityMonitor;
|
||||
import com.google.android.apps.mytracks.util.StringUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -408,12 +407,11 @@ public class ChartView extends View {
|
||||
}
|
||||
|
||||
private int getWaypointX(Waypoint waypoint) {
|
||||
if (mode == Mode.BY_DISTANCE) {
|
||||
double lenghtInKm = waypoint.getLength() * UnitConversions.M_TO_KM;
|
||||
return getX(metricUnits ? lenghtInKm : lenghtInKm * UnitConversions.KM_TO_MI);
|
||||
} else {
|
||||
return getX(waypoint.getDuration());
|
||||
}
|
||||
return (mode == Mode.BY_DISTANCE)
|
||||
? getX(metricUnits
|
||||
? waypoint.getLength() / 1000.0
|
||||
: waypoint.getLength() * UnitConversions.KM_TO_MI / 1000.0)
|
||||
: getX(waypoint.getDuration());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -886,14 +884,4 @@ public class ChartView extends View {
|
||||
public void setChartValueSeriesEnabled(int index, boolean enabled) {
|
||||
series[index].setEnabled(enabled);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
int getZoomLevel() {
|
||||
return zoomLevel;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
int getMaxZoomLevel() {
|
||||
return maxZoomLevel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,26 +57,26 @@ public abstract class Constants {
|
||||
public static final int MENU_CHART_SETTINGS = 3;
|
||||
|
||||
/*
|
||||
* Context menu ids. Sorted alphabetically.
|
||||
* Context menu ids:
|
||||
*/
|
||||
public static final int MENU_CLEAR_MAP = 100;
|
||||
|
||||
public static final int MENU_EDIT = 100;
|
||||
public static final int MENU_DELETE = 101;
|
||||
public static final int MENU_EDIT = 102;
|
||||
public static final int MENU_PLAY = 103;
|
||||
public static final int MENU_SAVE_CSV_FILE = 104;
|
||||
public static final int MENU_SAVE_GPX_FILE = 105;
|
||||
public static final int MENU_SAVE_KML_FILE = 106;
|
||||
public static final int MENU_SAVE_TCX_FILE = 107;
|
||||
public static final int MENU_SEND_TO_GOOGLE = 108;
|
||||
public static final int MENU_SHARE = 109;
|
||||
public static final int MENU_SHARE_CSV_FILE = 110;
|
||||
public static final int MENU_SHARE_FUSION_TABLE = 111;
|
||||
public static final int MENU_SHARE_GPX_FILE = 112;
|
||||
public static final int MENU_SHARE_KML_FILE = 113;
|
||||
public static final int MENU_SHARE_MAP = 114;
|
||||
public static final int MENU_SHARE_TCX_FILE = 115;
|
||||
public static final int MENU_SHOW = 116;
|
||||
public static final int MENU_WRITE_TO_SD_CARD = 117;
|
||||
public static final int MENU_SEND_TO_GOOGLE = 102;
|
||||
public static final int MENU_SHARE = 103;
|
||||
public static final int MENU_SHOW = 104;
|
||||
public static final int MENU_SHARE_MAP = 200;
|
||||
public static final int MENU_SHARE_FUSION_TABLE = 201;
|
||||
public static final int MENU_SHARE_GPX_FILE = 202;
|
||||
public static final int MENU_SHARE_KML_FILE = 203;
|
||||
public static final int MENU_SHARE_CSV_FILE = 204;
|
||||
public static final int MENU_SHARE_TCX_FILE = 205;
|
||||
public static final int MENU_WRITE_TO_SD_CARD = 206;
|
||||
public static final int MENU_SAVE_GPX_FILE = 207;
|
||||
public static final int MENU_SAVE_KML_FILE = 208;
|
||||
public static final int MENU_SAVE_CSV_FILE = 209;
|
||||
public static final int MENU_SAVE_TCX_FILE = 210;
|
||||
public static final int MENU_CLEAR_MAP = 211;
|
||||
|
||||
/**
|
||||
* The number of distance readings to smooth to get a stable signal.
|
||||
|
||||
@@ -30,13 +30,11 @@ import com.google.android.apps.mytracks.io.sendtogoogle.UploadServiceChooserActi
|
||||
import com.google.android.apps.mytracks.stats.TripStatistics;
|
||||
import com.google.android.apps.mytracks.util.GeoRect;
|
||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||
import com.google.android.apps.mytracks.util.PlayTrackUtils;
|
||||
import com.google.android.maps.GeoPoint;
|
||||
import com.google.android.maps.MapController;
|
||||
import com.google.android.maps.MapView;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.ContentUris;
|
||||
import android.content.Intent;
|
||||
import android.location.Location;
|
||||
@@ -72,8 +70,6 @@ public class MapActivity extends com.google.android.maps.MapActivity
|
||||
implements View.OnTouchListener, View.OnClickListener,
|
||||
TrackDataListener {
|
||||
|
||||
private static final int DIALOG_INSTALL_EARTH = 0;
|
||||
|
||||
// Saved instance state keys:
|
||||
// ---------------------------
|
||||
|
||||
@@ -235,16 +231,6 @@ public class MapActivity extends com.google.android.maps.MapActivity
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
switch (id) {
|
||||
case DIALOG_INSTALL_EARTH:
|
||||
return PlayTrackUtils.createInstallEarthDialog(this);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Utility functions:
|
||||
// -------------------
|
||||
|
||||
@@ -441,7 +427,6 @@ public class MapActivity extends com.google.android.maps.MapActivity
|
||||
String shareFileFormat = getString(R.string.track_list_share_file);
|
||||
String fileTypes[] = getResources().getStringArray(R.array.file_types);
|
||||
|
||||
menu.add(Menu.NONE, Constants.MENU_PLAY, Menu.NONE, R.string.track_list_play);
|
||||
menu.add(Menu.NONE, Constants.MENU_SEND_TO_GOOGLE, Menu.NONE,
|
||||
R.string.track_list_send_google);
|
||||
SubMenu share = menu.addSubMenu(
|
||||
@@ -479,18 +464,6 @@ public class MapActivity extends com.google.android.maps.MapActivity
|
||||
Intent intent;
|
||||
long trackId = dataHub.getSelectedTrackId();
|
||||
switch (item.getItemId()) {
|
||||
case Constants.MENU_EDIT:
|
||||
intent = new Intent(this, TrackDetail.class).putExtra(TrackDetail.TRACK_ID, trackId);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case Constants.MENU_PLAY:
|
||||
if (PlayTrackUtils.isEarthInstalled(this)) {
|
||||
PlayTrackUtils.playTrack(this, trackId);
|
||||
return true;
|
||||
} else {
|
||||
showDialog(DIALOG_INSTALL_EARTH);
|
||||
return true;
|
||||
}
|
||||
case Constants.MENU_SEND_TO_GOOGLE:
|
||||
intent = new Intent(this, UploadServiceChooserActivity.class)
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, true, true, true));
|
||||
@@ -506,25 +479,32 @@ public class MapActivity extends com.google.android.maps.MapActivity
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, false, true, false));
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case Constants.MENU_SHARE_GPX_FILE:
|
||||
case Constants.MENU_SHARE_KML_FILE:
|
||||
case Constants.MENU_SHARE_CSV_FILE:
|
||||
case Constants.MENU_SHARE_TCX_FILE:
|
||||
case Constants.MENU_SAVE_GPX_FILE:
|
||||
case Constants.MENU_SAVE_KML_FILE:
|
||||
case Constants.MENU_SAVE_CSV_FILE:
|
||||
case Constants.MENU_SAVE_TCX_FILE:
|
||||
case Constants.MENU_SHARE_GPX_FILE:
|
||||
case Constants.MENU_SHARE_KML_FILE:
|
||||
case Constants.MENU_SHARE_CSV_FILE:
|
||||
case Constants.MENU_SHARE_TCX_FILE:
|
||||
SaveActivity.handleExportTrackAction(
|
||||
this, trackId, Constants.getActionFromMenuId(item.getItemId()));
|
||||
return true;
|
||||
case Constants.MENU_CLEAR_MAP:
|
||||
dataHub.unloadCurrentTrack();
|
||||
case Constants.MENU_EDIT: {
|
||||
intent = new Intent(this, TrackDetail.class);
|
||||
intent.putExtra(TrackDetail.TRACK_ID, trackId);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case Constants.MENU_DELETE:
|
||||
}
|
||||
case Constants.MENU_DELETE: {
|
||||
Uri uri = ContentUris.withAppendedId(TracksColumns.CONTENT_URI, trackId);
|
||||
intent = new Intent(Intent.ACTION_DELETE, uri);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
case Constants.MENU_CLEAR_MAP:
|
||||
dataHub.unloadCurrentTrack();
|
||||
return true;
|
||||
default:
|
||||
return super.onMenuItemSelected(featureId, item);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.google.android.apps.mytracks.maps.TrackPathPainter;
|
||||
import com.google.android.apps.mytracks.maps.TrackPathPainterFactory;
|
||||
import com.google.android.apps.mytracks.maps.TrackPathUtilities;
|
||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.GeoPoint;
|
||||
import com.google.android.maps.MapView;
|
||||
import com.google.android.maps.Overlay;
|
||||
@@ -104,7 +103,7 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe
|
||||
public CachedLocation(Location location) {
|
||||
this.valid = LocationUtils.isValidLocation(location);
|
||||
this.geoPoint = valid ? LocationUtils.getGeoPoint(location) : null;
|
||||
this.speed = (int) Math.floor(location.getSpeed() * UnitConversions.MS_TO_KMH);
|
||||
this.speed = (int) Math.floor(location.getSpeed() * 3.6);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -17,16 +17,17 @@ package com.google.android.apps.mytracks;
|
||||
|
||||
import static com.google.android.apps.mytracks.Constants.TAG;
|
||||
|
||||
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
|
||||
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
||||
import com.google.android.apps.mytracks.content.TrackDataHub;
|
||||
import com.google.android.apps.mytracks.content.TracksColumns;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.content.WaypointCreationRequest;
|
||||
import com.google.android.apps.mytracks.content.WaypointsColumns;
|
||||
import com.google.android.apps.mytracks.io.file.TempFileCleaner;
|
||||
import com.google.android.apps.mytracks.services.ITrackRecordingService;
|
||||
import com.google.android.apps.mytracks.services.ServiceUtils;
|
||||
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
|
||||
import com.google.android.apps.mytracks.util.AnalyticsUtils;
|
||||
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
|
||||
import com.google.android.apps.mytracks.util.EulaUtils;
|
||||
import com.google.android.apps.mytracks.util.SystemUtils;
|
||||
@@ -92,6 +93,11 @@ public class MyTracks extends TabActivity implements OnTouchListener {
|
||||
*/
|
||||
private MyTracksProviderUtils providerUtils;
|
||||
|
||||
/**
|
||||
* Google Analytics tracker
|
||||
*/
|
||||
private GoogleAnalyticsTracker tracker;
|
||||
|
||||
/*
|
||||
* Tabs/View navigation:
|
||||
*/
|
||||
@@ -139,7 +145,12 @@ public class MyTracks extends TabActivity implements OnTouchListener {
|
||||
ApiAdapterFactory.getApiAdapter().enableStrictMode();
|
||||
}
|
||||
|
||||
AnalyticsUtils.sendPageViews(this, "/appstart");
|
||||
tracker = GoogleAnalyticsTracker.getInstance();
|
||||
// Start the tracker in manual dispatch mode...
|
||||
tracker.start(getString(R.string.my_tracks_analytics_id), getApplicationContext());
|
||||
tracker.setProductVersion("android-mytracks", SystemUtils.getMyTracksVersion(this));
|
||||
tracker.trackPageView("/appstart");
|
||||
tracker.dispatch();
|
||||
|
||||
providerUtils = MyTracksProviderUtils.Factory.get(this);
|
||||
preferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
|
||||
@@ -245,7 +256,14 @@ public class MyTracks extends TabActivity implements OnTouchListener {
|
||||
@Override
|
||||
protected void onStop() {
|
||||
Log.d(TAG, "MyTracks.onStop");
|
||||
|
||||
dataHub.stop();
|
||||
|
||||
tracker.dispatch();
|
||||
tracker.stop();
|
||||
|
||||
// Clean up any temporary track files.
|
||||
TempFileCleaner.clean();
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,8 @@
|
||||
package com.google.android.apps.mytracks;
|
||||
|
||||
import com.google.android.apps.mytracks.content.TrackDataHub;
|
||||
import com.google.android.apps.mytracks.services.RemoveTempFilesService;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Intent;
|
||||
|
||||
/**
|
||||
* MyTracksApplication for keeping global state.
|
||||
@@ -30,11 +28,6 @@ public class MyTracksApplication extends Application {
|
||||
|
||||
private TrackDataHub trackDataHub;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
startService(new Intent(this, RemoveTempFilesService.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the application's TrackDataHub.
|
||||
*
|
||||
|
||||
@@ -207,8 +207,9 @@ public class SearchActivity extends ListActivity {
|
||||
resultMap.put(DESCRIPTION_FIELD, track.getDescription());
|
||||
resultMap.put(CATEGORY_FIELD, track.getCategory());
|
||||
resultMap.put(TIME_FIELD, StringUtils.formatDateTime(this, stats.getStartTime()));
|
||||
resultMap.put(STATS_FIELD, StringUtils.formatTimeDistance(
|
||||
this, stats.getTotalTime(), stats.getTotalDistance(), metricUnits));
|
||||
resultMap.put(STATS_FIELD,
|
||||
StringUtils.formatTimeDistance(this, stats.getTotalDistance(), stats.getTotalTime(),
|
||||
metricUnits));
|
||||
resultMap.put(TRACK_ID_FIELD, track.getId());
|
||||
}
|
||||
|
||||
|
||||
@@ -502,7 +502,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
format = getString(stringId);
|
||||
options[i] = String.format(format, value);
|
||||
} else {
|
||||
double mile = value * UnitConversions.FT_TO_MI;
|
||||
double mile = value / UnitConversions.MI_TO_FEET;
|
||||
format = getString(R.string.value_float_mile);
|
||||
options[i] = String.format(format, mile);
|
||||
}
|
||||
@@ -545,7 +545,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
}
|
||||
options[i] = String.format(format, value);
|
||||
} else {
|
||||
double mile = value * UnitConversions.FT_TO_MI;
|
||||
double mile = value / UnitConversions.MI_TO_FEET;
|
||||
if (values[i].equals(GPS_ACCURACY_POOR)) {
|
||||
format = getString(R.string.value_float_mile_poor_gps);
|
||||
} else {
|
||||
@@ -644,7 +644,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
String metricspeed = prefs.getString(getString(id), null);
|
||||
int englishspeed;
|
||||
try {
|
||||
englishspeed = (int) (Double.parseDouble(metricspeed) * UnitConversions.KM_TO_MI);
|
||||
englishspeed = (int) (Double.parseDouble(metricspeed) * UnitConversions.KMH_TO_MPH);
|
||||
} catch (NumberFormatException e) {
|
||||
englishspeed = 0;
|
||||
}
|
||||
@@ -663,7 +663,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
// Convert miles/h to km/h
|
||||
try {
|
||||
metricspeed = String.valueOf(
|
||||
(int) (Double.parseDouble(newValue) * UnitConversions.MI_TO_KM));
|
||||
(int) (Double.parseDouble(newValue) * UnitConversions.MPH_TO_KMH) + 1);
|
||||
} catch (NumberFormatException e) {
|
||||
metricspeed = "0";
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import com.google.android.apps.mytracks.content.TrackDataHub.ListenerDataType;
|
||||
import com.google.android.apps.mytracks.content.TrackDataListener;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.services.ServiceUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.Activity;
|
||||
@@ -191,7 +190,7 @@ public class StatsActivity extends Activity implements TrackDataListener {
|
||||
utils.setAltitude(R.id.elevation_register, l.getAltitude());
|
||||
utils.setLatLong(R.id.latitude_register, l.getLatitude());
|
||||
utils.setLatLong(R.id.longitude_register, l.getLongitude());
|
||||
utils.setSpeed(R.id.speed_register, l.getSpeed() * UnitConversions.MS_TO_KMH);
|
||||
utils.setSpeed(R.id.speed_register, l.getSpeed() * 3.6);
|
||||
}
|
||||
|
||||
private void showUnknownLocation() {
|
||||
|
||||
@@ -213,10 +213,10 @@ public class StatsUtilities {
|
||||
double minElevation, double maxElevation, double elevationGain,
|
||||
double minGrade, double maxGrade) {
|
||||
setTime(R.id.moving_time_register, movingTime);
|
||||
setDistance(R.id.total_distance_register, totalDistance * UnitConversions.M_TO_KM);
|
||||
setSpeed(R.id.average_speed_register, averageSpeed * UnitConversions.MS_TO_KMH);
|
||||
setSpeed(R.id.average_moving_speed_register, averageMovingSpeed * UnitConversions.MS_TO_KMH);
|
||||
setSpeed(R.id.max_speed_register, maxSpeed * UnitConversions.MS_TO_KMH);
|
||||
setDistance(R.id.total_distance_register, totalDistance / 1000.0);
|
||||
setSpeed(R.id.average_speed_register, averageSpeed * 3.6);
|
||||
setSpeed(R.id.average_moving_speed_register, averageMovingSpeed * 3.6);
|
||||
setSpeed(R.id.max_speed_register, maxSpeed * 3.6);
|
||||
setAltitude(R.id.min_elevation_register, minElevation);
|
||||
setAltitude(R.id.max_elevation_register, maxElevation);
|
||||
setAltitude(R.id.elevation_gain_register, elevationGain);
|
||||
@@ -226,11 +226,11 @@ public class StatsUtilities {
|
||||
|
||||
public void setAllStats(TripStatistics stats) {
|
||||
setTime(R.id.moving_time_register, stats.getMovingTime());
|
||||
setDistance(R.id.total_distance_register, stats.getTotalDistance() * UnitConversions.M_TO_KM);
|
||||
setSpeed(R.id.average_speed_register, stats.getAverageSpeed() * UnitConversions.MS_TO_KMH);
|
||||
setDistance(R.id.total_distance_register, stats.getTotalDistance() / 1000.0);
|
||||
setSpeed(R.id.average_speed_register, stats.getAverageSpeed() * 3.6);
|
||||
setSpeed(R.id.average_moving_speed_register,
|
||||
stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH);
|
||||
setSpeed(R.id.max_speed_register, stats.getMaxSpeed() * UnitConversions.MS_TO_KMH);
|
||||
stats.getAverageMovingSpeed() * 3.6);
|
||||
setSpeed(R.id.max_speed_register, stats.getMaxSpeed() * 3.6);
|
||||
setAltitude(R.id.min_elevation_register, stats.getMinElevation());
|
||||
setAltitude(R.id.max_elevation_register, stats.getMaxElevation());
|
||||
setAltitude(R.id.elevation_gain_register, stats.getTotalElevationGain());
|
||||
|
||||
@@ -23,11 +23,9 @@ import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest;
|
||||
import com.google.android.apps.mytracks.io.sendtogoogle.UploadServiceChooserActivity;
|
||||
import com.google.android.apps.mytracks.services.ServiceUtils;
|
||||
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
|
||||
import com.google.android.apps.mytracks.util.PlayTrackUtils;
|
||||
import com.google.android.apps.mytracks.util.StringUtils;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.app.ListActivity;
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
||||
@@ -62,8 +60,6 @@ public class TrackList extends ListActivity
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener,
|
||||
View.OnClickListener {
|
||||
|
||||
private static final int DIALOG_INSTALL_EARTH = 0;
|
||||
|
||||
private int contextPosition = -1;
|
||||
private long trackId = -1;
|
||||
private ListView listView = null;
|
||||
@@ -91,7 +87,6 @@ public class TrackList extends ListActivity
|
||||
String shareFileFormat = getString(R.string.track_list_share_file);
|
||||
String fileTypes[] = getResources().getStringArray(R.array.file_types);
|
||||
|
||||
menu.add(Menu.NONE, Constants.MENU_PLAY, Menu.NONE, R.string.track_list_play);
|
||||
menu.add(Menu.NONE, Constants.MENU_SEND_TO_GOOGLE, Menu.NONE,
|
||||
R.string.track_list_send_google);
|
||||
SubMenu share = menu.addSubMenu(
|
||||
@@ -169,18 +164,14 @@ public class TrackList extends ListActivity
|
||||
return true;
|
||||
}
|
||||
case Constants.MENU_EDIT: {
|
||||
intent = new Intent(this, TrackDetail.class).putExtra(TrackDetail.TRACK_ID, trackId);
|
||||
intent = new Intent(this, TrackDetail.class);
|
||||
intent.putExtra(TrackDetail.TRACK_ID, trackId);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
case Constants.MENU_PLAY:
|
||||
if (PlayTrackUtils.isEarthInstalled(this)) {
|
||||
PlayTrackUtils.playTrack(this, trackId);
|
||||
return true;
|
||||
} else {
|
||||
showDialog(DIALOG_INSTALL_EARTH);
|
||||
return true;
|
||||
}
|
||||
case Constants.MENU_SHARE:
|
||||
case Constants.MENU_WRITE_TO_SD_CARD:
|
||||
return false;
|
||||
case Constants.MENU_SEND_TO_GOOGLE:
|
||||
intent = new Intent(this, UploadServiceChooserActivity.class)
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, true, true, true));
|
||||
@@ -196,23 +187,24 @@ public class TrackList extends ListActivity
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, false, true, false));
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case Constants.MENU_SHARE_GPX_FILE:
|
||||
case Constants.MENU_SHARE_KML_FILE:
|
||||
case Constants.MENU_SHARE_CSV_FILE:
|
||||
case Constants.MENU_SHARE_TCX_FILE:
|
||||
case Constants.MENU_SAVE_GPX_FILE:
|
||||
case Constants.MENU_SAVE_KML_FILE:
|
||||
case Constants.MENU_SAVE_CSV_FILE:
|
||||
case Constants.MENU_SAVE_TCX_FILE:
|
||||
SaveActivity.handleExportTrackAction(
|
||||
this, trackId, Constants.getActionFromMenuId(item.getItemId()));
|
||||
case Constants.MENU_SHARE_GPX_FILE:
|
||||
case Constants.MENU_SHARE_KML_FILE:
|
||||
case Constants.MENU_SHARE_CSV_FILE:
|
||||
case Constants.MENU_SHARE_TCX_FILE:
|
||||
SaveActivity.handleExportTrackAction(this, trackId,
|
||||
Constants.getActionFromMenuId(item.getItemId()));
|
||||
return true;
|
||||
case Constants.MENU_DELETE:
|
||||
case Constants.MENU_DELETE: {
|
||||
intent = new Intent(Intent.ACTION_DELETE);
|
||||
Uri uri = ContentUris.withAppendedId(TracksColumns.CONTENT_URI, trackId);
|
||||
intent = new Intent(Intent.ACTION_DELETE)
|
||||
.setDataAndType(uri, TracksColumns.CONTENT_ITEMTYPE);
|
||||
intent.setDataAndType(uri, TracksColumns.CONTENT_ITEMTYPE);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
Log.w(TAG, "Unknown menu item: " + item.getItemId() + "(" + item.getTitle() + ")");
|
||||
return super.onMenuItemSelected(featureId, item);
|
||||
@@ -295,16 +287,6 @@ public class TrackList extends ListActivity
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
switch (id) {
|
||||
case DIALOG_INSTALL_EARTH:
|
||||
return PlayTrackUtils.createInstallEarthDialog(this);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/* Callback from menu/search_only.xml */
|
||||
public void onSearch(@SuppressWarnings("unused") MenuItem i) {
|
||||
onSearchRequested();
|
||||
@@ -349,8 +331,7 @@ public class TrackList extends ListActivity
|
||||
} else if (columnIndex == totalDistanceIdx) {
|
||||
double totalDistance = cursor.getDouble(totalDistanceIdx);
|
||||
long totalTime = cursor.getLong(totalTimeIdx);
|
||||
String totalDistanceStr = StringUtils.formatTimeDistance(
|
||||
TrackList.this, totalTime, totalDistance, metricUnits);
|
||||
String totalDistanceStr = StringUtils.formatTimeDistance(TrackList.this, totalDistance, totalTime, metricUnits);
|
||||
textView.setText(totalDistanceStr);
|
||||
} else {
|
||||
textView.setText(cursor.getString(columnIndex));
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.google.android.apps.mytracks;
|
||||
|
||||
import static com.google.android.apps.mytracks.Constants.TAG;
|
||||
|
||||
import com.google.android.apps.mytracks.content.DescriptionGeneratorImpl;
|
||||
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.content.WaypointCreationRequest;
|
||||
@@ -320,7 +319,7 @@ public class WaypointsList extends ListActivity
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
dialogInterface.dismiss();
|
||||
providerUtils.deleteWaypoint(waypointId,
|
||||
new DescriptionGeneratorImpl(WaypointsList.this));
|
||||
new StringUtils(WaypointsList.this));
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(getString(R.string.generic_no),
|
||||
|
||||
@@ -1,257 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.android.apps.mytracks.content;
|
||||
|
||||
import com.google.android.apps.mytracks.stats.TripStatistics;
|
||||
import com.google.android.apps.mytracks.util.ChartURLGenerator;
|
||||
import com.google.android.apps.mytracks.util.StringUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Pair;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* An implementation of {@link DescriptionGenerator} for My Tracks.
|
||||
*
|
||||
* @author Jimmy Shih
|
||||
*/
|
||||
public class DescriptionGeneratorImpl implements DescriptionGenerator {
|
||||
|
||||
private static final String HTML_LINE_BREAK = "<br>";
|
||||
private static final String TEXT_LINE_BREAK = "\n";
|
||||
|
||||
private Context context;
|
||||
|
||||
public DescriptionGeneratorImpl(Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateTrackDescription(
|
||||
Track track, Vector<Double> distances, Vector<Double> elevations) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
// Created by
|
||||
String url = context.getString(R.string.my_tracks_web_url);
|
||||
builder.append(context.getString(
|
||||
R.string.send_google_by_my_tracks, "<a href='http://" + url + "'>", "</a>"));
|
||||
builder.append("<p>");
|
||||
|
||||
builder.append(generateTripStatisticsDescription(track.getStatistics(), true));
|
||||
|
||||
// Activity type
|
||||
String trackCategory = track.getCategory();
|
||||
String category = trackCategory != null && trackCategory.length() > 0 ? trackCategory
|
||||
: context.getString(R.string.value_unknown);
|
||||
builder.append(context.getString(R.string.description_activity_type, category));
|
||||
builder.append(HTML_LINE_BREAK);
|
||||
|
||||
// Elevation chart
|
||||
if (distances != null && elevations != null) {
|
||||
builder.append("<img border=\"0\" src=\""
|
||||
+ ChartURLGenerator.getChartUrl(distances, elevations, track, context) + "\"/>");
|
||||
builder.append(HTML_LINE_BREAK);
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateWaypointDescription(Waypoint waypoint) {
|
||||
return generateTripStatisticsDescription(waypoint.getStatistics(), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a description for a {@link TripStatistics}.
|
||||
*
|
||||
* @param stats the trip statistics
|
||||
* @param html true to use "<br>" for line break instead of "\n"
|
||||
*/
|
||||
private String generateTripStatisticsDescription(TripStatistics stats, boolean html) {
|
||||
String lineBreak = html ? HTML_LINE_BREAK : TEXT_LINE_BREAK;
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
// Total distance
|
||||
writeDistance(
|
||||
stats.getTotalDistance(), builder, R.string.description_total_distance, lineBreak);
|
||||
|
||||
// Total time
|
||||
writeTime(stats.getTotalTime(), builder, R.string.description_total_time, lineBreak);
|
||||
|
||||
// Moving time
|
||||
writeTime(stats.getMovingTime(), builder, R.string.description_moving_time, lineBreak);
|
||||
|
||||
// Average speed
|
||||
Pair<Double, Double> averageSpeed = writeSpeed(
|
||||
stats.getAverageSpeed(), builder, R.string.description_average_speed, lineBreak);
|
||||
|
||||
// Average moving speed
|
||||
Pair<Double, Double> averageMovingSpeed = writeSpeed(stats.getAverageMovingSpeed(), builder,
|
||||
R.string.description_average_moving_speed, lineBreak);
|
||||
|
||||
// Max speed
|
||||
Pair<Double, Double> maxSpeed = writeSpeed(
|
||||
stats.getMaxSpeed(), builder, R.string.description_max_speed, lineBreak);
|
||||
|
||||
// Average pace
|
||||
writePace(averageSpeed, builder, R.string.description_average_pace, lineBreak);
|
||||
|
||||
// Average moving pace
|
||||
writePace(averageMovingSpeed, builder, R.string.description_average_moving_pace, lineBreak);
|
||||
|
||||
// Min pace
|
||||
writePace(maxSpeed, builder, R.string.description_min_pace, lineBreak);
|
||||
|
||||
// Max elevation
|
||||
writeElevation(stats.getMaxElevation(), builder, R.string.description_max_elevation, lineBreak);
|
||||
|
||||
// Min elevation
|
||||
writeElevation(stats.getMinElevation(), builder, R.string.description_min_elevation, lineBreak);
|
||||
|
||||
// Elevation gain
|
||||
writeElevation(
|
||||
stats.getTotalElevationGain(), builder, R.string.description_elevation_gain, lineBreak);
|
||||
|
||||
// Max grade
|
||||
writeGrade(stats.getMaxGrade(), builder, R.string.description_max_grade, lineBreak);
|
||||
|
||||
// Min grade
|
||||
writeGrade(stats.getMinGrade(), builder, R.string.description_min_grade, lineBreak);
|
||||
|
||||
// Recorded time
|
||||
builder.append(
|
||||
context.getString(R.string.description_recorded_time,
|
||||
StringUtils.formatDateTime(context, stats.getStartTime())));
|
||||
builder.append(lineBreak);
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes distance.
|
||||
*
|
||||
* @param distance distance in meters
|
||||
* @param builder StringBuilder to append distance
|
||||
* @param resId resource id of distance string
|
||||
* @param lineBreak line break string
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void writeDistance(double distance, StringBuilder builder, int resId, String lineBreak) {
|
||||
double distanceInKm = distance * UnitConversions.M_TO_KM;
|
||||
double distanceInMi = distanceInKm * UnitConversions.KM_TO_MI;
|
||||
builder.append(context.getString(resId, distanceInKm, distanceInMi));
|
||||
builder.append(lineBreak);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes time.
|
||||
*
|
||||
* @param time time in milliseconds.
|
||||
* @param builder StringBuilder to append time
|
||||
* @param resId resource id of time string
|
||||
* @param lineBreak line break string
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void writeTime(long time, StringBuilder builder, int resId, String lineBreak) {
|
||||
builder.append(context.getString(resId, StringUtils.formatElapsedTime(time)));
|
||||
builder.append(lineBreak);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes speed.
|
||||
*
|
||||
* @param speed speed in meters per second
|
||||
* @param builder StringBuilder to append speed
|
||||
* @param resId resource id of speed string
|
||||
* @param lineBreak line break string
|
||||
* @return a pair of speed, first in kilometers per hour, second in miles per
|
||||
* hour.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
Pair<Double, Double> writeSpeed(
|
||||
double speed, StringBuilder builder, int resId, String lineBreak) {
|
||||
double speedInKmHr = speed * UnitConversions.MS_TO_KMH;
|
||||
double speedInMiHr = speedInKmHr * UnitConversions.KM_TO_MI;
|
||||
builder.append(context.getString(resId, speedInKmHr, speedInMiHr));
|
||||
builder.append(lineBreak);
|
||||
return Pair.create(speedInKmHr, speedInMiHr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes pace.
|
||||
*
|
||||
* @param speed a pair of speed, first in kilometers per hour, second in miles
|
||||
* per hour
|
||||
* @param builder StringBuilder to append pace
|
||||
* @param resId resource id of pace string
|
||||
* @param lineBreak line break string
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void writePace(
|
||||
Pair<Double, Double> speed, StringBuilder builder, int resId, String lineBreak) {
|
||||
double paceInMinKm = getPace(speed.first);
|
||||
double paceInMinMi = getPace(speed.second);
|
||||
builder.append(context.getString(resId, paceInMinKm, paceInMinMi));
|
||||
builder.append(lineBreak);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes elevation.
|
||||
*
|
||||
* @param elevation elevation in meters
|
||||
* @param builder StringBuilder to append elevation
|
||||
* @param resId resource id of elevation string
|
||||
* @param lineBreak line break string
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void writeElevation(
|
||||
double elevation, StringBuilder builder, int resId, String lineBreak) {
|
||||
long elevationInM = Math.round(elevation);
|
||||
long elevationInFt = Math.round(elevation * UnitConversions.M_TO_FT);
|
||||
builder.append(context.getString(resId, elevationInM, elevationInFt));
|
||||
builder.append(lineBreak);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes grade.
|
||||
*
|
||||
* @param grade grade in fraction
|
||||
* @param builder StringBuilder to append grade
|
||||
* @param resId resource id grade string
|
||||
* @param lineBreak line break string
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void writeGrade(double grade, StringBuilder builder, int resId, String lineBreak) {
|
||||
long gradeInPercent = Double.isNaN(grade) || Double.isInfinite(grade) ? 0L
|
||||
: Math.round(grade * 100);
|
||||
builder.append(context.getString(resId, gradeInPercent));
|
||||
builder.append(lineBreak);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets pace (in minutes) from speed.
|
||||
*
|
||||
* @param speed speed in hours
|
||||
*/
|
||||
@VisibleForTesting
|
||||
double getPace(double speed) {
|
||||
return speed == 0 ? 0.0 : 60.0 / speed; // convert from hours to minutes
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,6 @@ package com.google.android.apps.mytracks.content;
|
||||
|
||||
import com.google.android.apps.mytracks.stats.TripStatistics;
|
||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.location.Location;
|
||||
@@ -386,7 +385,7 @@ public class SearchEngine {
|
||||
distanceResults);
|
||||
|
||||
// Score tracks close to the current location higher.
|
||||
double distanceKm = distanceResults[0] * UnitConversions.M_TO_KM;
|
||||
double distanceKm = distanceResults[0] / 1000.0;
|
||||
if (distanceKm > 0.0) {
|
||||
// Use the inverse of the amortized distance.
|
||||
return squash(distanceKm);
|
||||
|
||||
@@ -300,8 +300,8 @@ public class SendDocsUtils {
|
||||
appendTag(builder, "name", track.getName());
|
||||
appendTag(builder, "description", track.getDescription());
|
||||
appendTag(builder, "date", StringUtils.formatDateTime(context, stats.getStartTime()));
|
||||
appendTag(builder, "totaltime", StringUtils.formatElapsedTimeWithHour(stats.getTotalTime()));
|
||||
appendTag(builder, "movingtime", StringUtils.formatElapsedTimeWithHour(stats.getMovingTime()));
|
||||
appendTag(builder, "totaltime", StringUtils.formatElapsedTime(stats.getTotalTime()));
|
||||
appendTag(builder, "movingtime", StringUtils.formatElapsedTime(stats.getMovingTime()));
|
||||
appendTag(builder, "distance", getDistance(stats.getTotalDistance(), metricUnits));
|
||||
appendTag(builder, "distanceunit", distanceUnit);
|
||||
appendTag(builder, "averagespeed", getSpeed(stats.getAverageSpeed(), metricUnits));
|
||||
@@ -335,7 +335,7 @@ public class SendDocsUtils {
|
||||
.append("<gsx:")
|
||||
.append(name)
|
||||
.append(">")
|
||||
.append(StringUtils.formatCData(value))
|
||||
.append(StringUtils.stringAsCData(value))
|
||||
.append("</gsx:")
|
||||
.append(name)
|
||||
.append(">");
|
||||
@@ -349,7 +349,7 @@ public class SendDocsUtils {
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static final String getDistance(double distanceInMeter, boolean metricUnits) {
|
||||
double distanceInKilometer = distanceInMeter * UnitConversions.M_TO_KM;
|
||||
double distanceInKilometer = distanceInMeter / 1000.0;
|
||||
double distance = metricUnits ? distanceInKilometer
|
||||
: distanceInKilometer * UnitConversions.KM_TO_MI;
|
||||
return NUMBER_FORMAT.format(distance);
|
||||
@@ -363,9 +363,9 @@ public class SendDocsUtils {
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static final String getSpeed(double speedInMeterPerSecond, boolean metricUnits) {
|
||||
double speedInKilometerPerHour = speedInMeterPerSecond * UnitConversions.MS_TO_KMH;
|
||||
double speedInKilometerPerHour = speedInMeterPerSecond * 3.6;
|
||||
double speed = metricUnits ? speedInKilometerPerHour
|
||||
: speedInKilometerPerHour * UnitConversions.KM_TO_MI;
|
||||
: speedInKilometerPerHour * UnitConversions.KMH_TO_MPH;
|
||||
return NUMBER_FORMAT.format(speed);
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user