Compare commits

...

363 Commits

Author SHA1 Message Date
Rodrigo Damazio c7db7c0926 Releasing version 1.1.2 2011-02-24 20:22:46 -03:00
Rodrigo Damazio e107766a61 Updating Maps library to fix cupcake/donut issues. 2011-02-24 15:19:38 -03:00
Rodrigo Damazio 05a0b6c615 Fixing app and uploading on Cupcake/Donut. 2011-02-24 14:46:24 -03:00
Rodrigo Damazio 887a77f4a3 Merging Bart's changes 2011-02-23 19:39:11 -03:00
Rodrigo Damazio 97bde67b1d Merging to head 2011-02-23 19:37:59 -03:00
Matthew Simmons 33c3668175 Disable debugging 2011-02-23 15:38:27 -05:00
Matthew Simmons 0158fc3a7a merge 2011-02-23 15:39:24 -05:00
Sandor Dornbush 72bb2ddb08 Address comments. 2011-02-23 12:32:07 -08:00
Sandor Dornbush 01c1a37fa2 Address comments. 2011-02-23 09:50:31 -08:00
Sandor Dornbush 35aa51d6a9 Request audio focus. 2011-02-22 22:13:44 -08:00
Matthew Simmons fe9b27ecf2 fix method name 2011-02-23 00:07:29 -05:00
Matthew Simmons e03f120a00 Remove ANT entries from preferences if the device does not support ANT. 2011-02-23 00:03:39 -05:00
Sandor Dornbush 59344f540d Tabs->spaces. 2011-02-22 19:06:49 -08:00
Sandor Dornbush e829f1fc1b Hide the first stats waypoint. 2011-02-22 16:52:22 -08:00
Rodrigo Damazio d9904eb5f1 Bring My Maps back 2011-02-22 19:55:27 -03:00
Matthew Simmons 10cd26af5e Upgrade ANT support libraries
Rework AntSensorManager (and subclasses) to use asynchronous ANT interfaces
Encapsulate message byte arrays with per-message classes
Add tests
2011-02-21 19:49:43 -05:00
Sandor Dornbush c1f649fc83 Remove strict mode violation from onLocationChanged 2011-02-18 16:12:49 -08:00
Rodrigo Damazio a4865f860d Adding missing fusion tables permission. 2011-02-18 14:07:59 -02:00
Sandor Dornbush 14fce8edfe Merge. 2011-02-17 22:09:47 -08:00
Sandor Dornbush 6826e3567d Fix build breakage. 2011-02-17 22:01:46 -08:00
Sandor Dornbush 250e8625a7 Shorten some strings in csv. 2011-02-17 21:33:47 -08:00
Sandor Dornbush 58530d6f72 Catalan update. 2011-02-17 21:02:35 -08:00
Sandor Dornbush 823fb3fca7 Merge. 2011-02-17 20:13:51 -08:00
Sandor Dornbush 29302c0891 Try to fix moving time. 2011-02-17 07:55:19 -08:00
Matthew Simmons 03570ebd43 merge 2011-02-16 11:35:41 -05:00
Sandor Dornbush 2a4a0d38e3 Merge import changes. 2011-02-16 07:42:25 -08:00
David Piggott 9be9127ad1 Tiny style improvement in ImportAllTracks 2011-02-16 08:19:57 +00:00
David Piggott 66dd1c01f0 Improve style and external storage access methods of ImportAllTracks 2011-02-16 01:29:20 +00:00
Matthew Simmons d8dce7938d Format the Fusion Tables URL locale-insensitively 2011-02-15 07:20:58 -05:00
Rodrigo Damazio 0701f5885e Merging Jared's heads. 2011-02-14 15:01:41 -02:00
Rodrigo Damazio ea3f660999 Merging Jared's heads. 2011-02-14 14:54:31 -02:00
Rodrigo Damazio 95a21ffe8a Merging Jared's heads 2011-02-14 14:51:38 -02:00
David Piggott 89d2cf8340 Tidy up incorrect indentation resulting from Eclipse misconfiguration 2011-02-14 11:17:14 +00:00
David Piggott 0eb676d3cd Improve style and usability of ImportAllTracks
Fix style issues pointed out in code review. Move acquireWakeLock method into
MyTracksUtils and call that from ImportAllTracks and ExportAllTracks. Replace
important Toast messages with dialogs.
2011-02-14 10:53:37 +00:00
Jared Casper ac1a762fa8 Make GPX importer more robust.
Handle the case where the first track point does not have a time
without segfaulting. (issue #316, #192)

Don't throw an exception on a negative time change. It isn't the end
of the world, just put a warning in the log and move on (without
updating the speed, since we really don't have a clue now). (issue #186)

Reset the element content even when we aren't in a track element.  GPX
can have elements outside of the <trk>.  This was causing problems
such as content in a <metadata> element before the <trk> being
included in the track name.

There could still be weirdness in the stats if some of the points have
a time element while others don't.  Hard to say what the best course
of action is in that case though, and may involve changes to the
TripStatisticsBuilder.
2011-02-13 21:33:31 -08:00
David Piggott 59a05262a1 Issue 45: Add ImportAllTracks to import GPX files from /sdcard/MyTracks/gpx
ImportAllTracks is essentially just a modification of ExportAllTracks that
uses the existing GpxImporter to import all GPX files found in
/sdcard/MyTracks/gpx. So that the import functionality can always be accessed,
the MyTracks Activity's MenuManager is altered so that the Tracks button shows
regardless of whether there are any tracks in the database (ImportAllTracks is
launched by a button in the lower right of the MyTracksList activity).

A Toast message shows if no GPX files are found; this serves as a hint to
users on where to put GPX files for import so that this addition should be
discoverable and useable without documentation.

Im
2011-02-13 22:15:48 +00:00
Jared Casper 5f91d187c8 Merge upstream. 2011-02-12 15:49:23 -08:00
Matthew Simmons 8d8bf311ed Added tag v1.1.1 for changeset 98c38ee0ac32 2011-02-10 23:33:29 -05:00
Matthew Simmons 69545c8a56 Update for 1.1.1 release. 2011-02-10 19:05:52 -05:00
Matthew Simmons a1868c0205 Move drawable-mdpi/* to drawable so Cupcake can see them 2011-02-10 17:48:44 -05:00
Matthew Simmons 12bc4f0da8 Rename API feature check method 2011-02-10 16:29:00 -05:00
Matthew Simmons 510b887042 Issue 311: Don't reuse the SQLiteQueryBuilder on Cupcake or Donut
due to Android issue 1587
2011-02-10 15:58:01 -05:00
Matthew Simmons ff7171daa2 Parse the HTTP status code correctly 2011-02-09 21:06:20 -05:00
Jared Casper 5b0dbd5d30 Be more explicit in testing the XML output of GpxTrackWriter.
Instead of producing the comparison strings in the tester just as they
are produced in the tested code, use string literals, thus actually
testing that the formatting code is working as expected.
2011-02-09 16:23:55 -08:00
Jared Casper 9c7fb25a94 Be more explicit in testing the XML output of GpxTrackWriter.
Instead of producing the comparison strings in the tester just as they
are produced in the tested code, use string literals, thus actually
testing that the formatting code is working as expected.
2011-02-09 16:23:55 -08:00
Jared Casper 2e24eab5ad Addressing review comments. 2011-02-09 15:13:54 -08:00
Jared Casper 8135ad4424 Addressing review comments. 2011-02-09 15:13:54 -08:00
Jared Casper 6ffa40e40d Export GPX 1.1 instead of 1.0.
The only thing not allowed in 1.1 currently used is the track color
tag, which is moved into the "<extensions>" tag to make it conform to
the 1.1 schema.
2011-02-09 10:54:13 -08:00
Jared Casper bc120176ca Export GPX 1.1 instead of 1.0.
The only thing not allowed in 1.1 currently used is the track color
tag, which is moved into the "<extensions>" tag to make it conform to
the 1.1 schema.
2011-02-09 10:54:13 -08:00
Jared Casper d50d4ae1c9 Export GPX 1.1 instead of 1.0.
The only thing not allowed in 1.1 currently used is the track color
tag, which is moved into the "<extensions>" tag to make it conform to
the 1.1 schema.
2011-02-09 10:54:13 -08:00
Jared Casper d34aa61e95 Export GPX 1.1 instead of 1.0.
The only thing not allowed in 1.1 currently used is the track color
tag, which is moved into the "<extensions>" tag to make it conform to
the 1.1 schema.
2011-02-09 10:54:13 -08:00
Jared Casper 04578a4ed1 Reorder waypoint and track writing on export.
The GPX schema requires waypoints to come before the track.

Waypoints are not currently used in TCX export, so there are no
changes there.

In KML files, both tracks and waypoints are "Placemark"s, so it
doesn't matter what order they come in there.

This does change the order they appear in CSV files, which could
potentially invalidate some assumptions made in downstream tools.
2011-02-09 10:42:34 -08:00
Jared Casper 3e5282a06d Reorder waypoint and track writing on export.
The GPX schema requires waypoints to come before the track.

Waypoints are not currently used in TCX export, so there are no
changes there.

In KML files, both tracks and waypoints are "Placemark"s, so it
doesn't matter what order they come in there.

This does change the order they appear in CSV files, which could
potentially invalidate some assumptions made in downstream tools.
2011-02-09 10:42:34 -08:00
Jared Casper f86cadb802 Reorder waypoint and track writing on export.
The GPX schema requires waypoints to come before the track.

Waypoints are not currently used in TCX export, so there are no
changes there.

In KML files, both tracks and waypoints are "Placemark"s, so it
doesn't matter what order they come in there.

This does change the order they appear in CSV files, which could
potentially invalidate some assumptions made in downstream tools.
2011-02-09 10:42:34 -08:00
Jared Casper c4fe4d87db Reorder waypoint and track writing on export.
The GPX schema requires waypoints to come before the track.

Waypoints are not currently used in TCX export, so there are no
changes there.

In KML files, both tracks and waypoints are "Placemark"s, so it
doesn't matter what order they come in there.

This does change the order they appear in CSV files, which could
potentially invalidate some assumptions made in downstream tools.
2011-02-09 10:42:34 -08:00
Matthew Simmons 7e5deeaab3 merge 2011-02-09 13:41:15 -05:00
Matthew Simmons 36c425d699 Add HTTP status code to the error message 2011-02-09 13:27:20 -05:00
Jared Casper a2c69c6144 Clean up formatting of numbers in gpx export.
Addresses issue #299 and ensures Latitude and Longitude are formatted
correctly as well.

Also orders the elements in the waypoint correctly according to the
schema: <ele> and <time> need to come before <name> and <desc>.
2011-02-09 10:25:28 -08:00
Jared Casper 58e3c0604d Clean up formatting of numbers in gpx export.
Addresses issue #299 and ensures Latitude and Longitude are formatted
correctly as well.
2011-02-09 10:25:28 -08:00
Jared Casper 7408849eb5 Clean up formatting of numbers in gpx export.
Addresses issue #299 and ensures Latitude and Longitude are formatted
correctly as well.

Also orders the elements in the waypoint correctly according to the
schema: <ele> and <time> need to come before <name> and <desc>.
2011-02-09 10:25:28 -08:00
Jared Casper b42142f692 Clean up formatting of numbers in gpx export.
Addresses issue #299 and ensures Latitude and Longitude are formatted
correctly as well.

Also orders the elements in the waypoint correctly according to the
schema: <ele> and <time> need to come before <name> and <desc>.
2011-02-09 10:25:28 -08:00
Rodrigo Damazio ddafdcf392 Merging proguard changes. 2011-02-09 15:40:18 -02:00
Matthew Simmons 95cbaf1993 Add a better status message to the exception wrapper.
Be more paranoid about exception messages.
2011-02-09 11:34:46 -05:00
Sandor Dornbush 43aa3c857d Added tag v1.1.0 for changeset b5645347b00e 2011-02-08 20:05:33 -08:00
Sandor Dornbush 964e0d6f41 Update for 1.1.0 release. 2011-02-08 20:03:18 -08:00
Matthew Simmons 5a1c52d3b5 Code review fix 2011-02-08 17:32:19 -05:00
Matthew Simmons 02c374b61e Map Fusion Tables uploading failures to the HTTP Exception that GData expects.
Fix typo in proguard disabling comment.
2011-02-08 17:23:39 -05:00
Matthew Simmons f2094e049a Disable proguard 2011-02-08 17:10:59 -05:00
Sandor Dornbush 8ff2b3b090 Merge chart changes. 2011-02-08 07:28:23 -08:00
Sandor Dornbush eeaa363132 Minor chart fixes. 2011-02-07 21:50:12 -08:00
Sandor Dornbush 43e51848fc Don't trap runtime exceptions. 2011-02-07 17:03:06 -08:00
Sandor Dornbush 8b17117220 Unify chart display code. 2011-02-06 19:37:43 -08:00
Sandor Dornbush a4e06a4ce0 Merge Matthew's changes. 2011-02-04 15:35:16 -08:00
Sandor Dornbush 4d55f5ebdb Merge Matthew's changes. 2011-02-04 15:34:22 -08:00
Sandor Dornbush 268f3c77c2 Merge FR translations. 2011-02-04 15:32:28 -08:00
Sandor Dornbush ce73718620 Fine tune JA translation. 2011-02-04 15:28:23 -08:00
Sandor Dornbush d307c58f87 Fine tune JA translation. 2011-02-04 15:23:20 -08:00
Sandor Dornbush e7ec021da8 Address comments. 2011-02-04 15:13:33 -08:00
Matthew Simmons ca94fc7a96 Reuse existing messages 2011-02-04 17:15:34 -05:00
Matthew Simmons 9d650c4885 Rearrange Fusion Tables upload progress reporting 2011-02-04 16:21:20 -05:00
Sandor Dornbush c6d9be499c Merge heads. 2011-02-04 12:16:36 -08:00
Matthew Simmons 0e78e8b3f9 Remove unused imports 2011-02-04 15:09:03 -05:00
Matthew Simmons 2a99278b52 SQL-escape the track name
Don't catch HTTPException in runUpdate/query -- let GDataWrapper do that for us
2011-02-04 15:01:21 -05:00
Sandor Dornbush 4a47c096f7 Possible fix for chart view. 2011-02-04 10:41:17 -08:00
Olivier Beyssac bd961be055 Updating French translations. 2011-02-04 16:25:54 +00:00
boiledorange73 525fea80b8 One entry went back... Corrects it. 2011-02-04 10:44:18 +09:00
boiledorange73 6f92ae6a59 JP translate : Deleted duplicated entries in strings.xml 2011-02-04 10:40:56 +09:00
boiledorange73-201102 91cca16f40 JP trans: small change (LAST) 2011-02-03 00:18:52 +09:00
boiledorange73 a0697a048d JP translate: small changes 2011-02-02 16:48:38 +09:00
boiledorange73 d22c6aae79 JP translate 2011-02-02 15:15:48 +09:00
Rodrigo Damazio 83997980ba Merging German translation 2011-02-02 01:19:40 -02:00
Rodrigo Damazio 4d9bdd1c12 Fixing typo in Proguard config. 2011-02-01 21:46:45 -02:00
Rodrigo Damazio 163a73722e Fixing translation leftovers from Fusion Tables and other changes.
The strings that need updating are commented-out, as a reference to translators.
(many other strings are simply missing, I didn't do anything about those)
2011-02-01 21:39:26 -02:00
marian.steinbach 65d17decb8 Added missing labels 2011-02-01 09:06:29 +01:00
Sandor Dornbush 1aa300f97e Merge in Rodrigo's changes. 2011-01-31 20:39:15 -08:00
marian.steinbach 8fbb30bded Added some missing ANT-related labels, deleted obsolete sensor labels, changed 'Energie' (power) to 'Kraft' 2011-01-31 23:37:04 +01:00
Rodrigo Damazio 6b0f1a0c10 Merging 2011-01-31 14:57:22 -02:00
Rodrigo Damazio 1cee590eca Adding some debugging information back 2011-01-31 14:56:54 -02:00
Sandor Dornbush 9ff370ee27 Clean up zh-cn strings.xml 2011-01-30 21:49:43 -08:00
Sandor Dornbush cd0057ea5a A bunch of fusion tables fixes. 2011-01-30 21:39:43 -08:00
Sandor Dornbush 2c0a294b6a A bunch of fusion tables fixes. 2011-01-30 21:39:27 -08:00
Rodrigo Damazio 3e09bd5c60 Fixing ProGuard support by removing usage of reflection and ignoring a few unused classes. 2011-01-30 01:20:37 -02:00
Rodrigo Damazio 0a99d7cebb Changing AndroidMock config to look for API level 9 classes. 2011-01-29 22:26:26 -02:00
Sandor Dornbush 3138e3edc7 Remove reference to old string. 2011-01-27 23:11:15 -08:00
Sandor Dornbush 99ab34ad0b Merge spanish update. 2011-01-23 21:38:56 -08:00
Sandor Dornbush 9b7923f8f5 Merge Matthew's changes. 2011-01-21 22:21:39 -08:00
Matthew Simmons cfcbe7f107 Refactor platform adapter logic 2011-01-21 18:22:41 -05:00
Matthew Simmons 5fb27ab186 Bump the database version, update the migration code 2011-01-21 17:54:37 -05:00
Matthew Simmons 36b1a3c020 Rename locatePlatformAdapter to createPlatformAdapter 2011-01-21 17:22:30 -05:00
Matthew Simmons baccb5d12e Use reflection to find the platform adapters 2011-01-21 17:09:25 -05:00
Matthew Simmons adc4621711 self-review 2011-01-21 16:32:27 -05:00
Matthew Simmons a8d78664e9 Added support for backing up sensors 2011-01-21 16:28:04 -05:00
Sandor Dornbush 9fab4eb088 Update spanish translation. 2011-01-19 22:41:50 -08:00
Sandor Dornbush 0d0f1315ff Add spain spanish translation. 2011-01-19 22:28:46 -08:00
Sandor Dornbush 555598c155 Only show sensor options for the right sensor type. 2011-01-13 21:28:10 -08:00
Sandor Dornbush f49fa23f69 Merge from head. 2011-01-13 21:07:15 -08:00
Rodrigo Damazio b732064f88 Moving assets to their own repository. 2011-01-13 22:26:44 -02:00
Rodrigo Damazio 1f99a381eb Merging Fusion Tables changes. 2011-01-13 22:23:51 -02:00
Sandor Dornbush 81b610cc4c Change the code to use the new icons + delete the old icon files. 2011-01-13 15:17:20 -08:00
marian.steinbach b0a0bfc888 Simplified icons for Record Track and Stop Recording, both drawable and assets 2011-01-12 19:53:52 +01:00
marian.steinbach 6221ccb53b Merging changes from main repository 2011-01-12 19:17:47 +01:00
leifhendrik cbe1da2d68 Keeping db version 18. Bug fixes. 2011-01-11 15:01:44 -08:00
Sandor Dornbush 24297e373c Merging to head + return early to fully ignore close locations. 2011-01-11 14:06:06 -08:00
leifhendrik 99d14a559c Synced with head. Resolved conflicts. 2011-01-11 13:30:03 -08:00
leifhendrik 08339a1f65 String cleanups and responded to most comments. 2011-01-11 12:29:22 -08:00
Rodrigo Damazio 4e3ad38087 Merging Matthew's changes. 2011-01-10 15:41:41 -02:00
Sandor Dornbush 63c97fadc6 Merge in SendToDocs changes. 2011-01-09 22:21:03 -08:00
Matthew Simmons 45633ad7e8 Code review comments 2011-01-07 14:43:25 -05:00
Matthew Simmons 8508decd5c fix url 2011-01-07 14:04:59 -05:00
Matthew Simmons 315f47bf30 Add License button to the About dialog box.
Add link to privacy policy to the About dialog box.
2011-01-07 13:22:30 -05:00
Matthew Simmons 12f8d79d84 unconcatenate constant 2011-01-06 15:42:05 -05:00
Rodrigo Damazio 710690e2d2 Merging to head. 2011-01-06 18:00:11 -02:00
Rodrigo Damazio 03bfbe81d0 Merging Sandor's change. 2011-01-06 15:08:42 -02:00
Matthew Simmons c990fb6fe7 don't hardcode the encoding in the tcx writer either 2011-01-06 11:53:10 -05:00
Sandor Dornbush 9b31cd63a4 Fix overcounting distance. 2011-01-05 22:58:53 -08:00
Rodrigo Damazio dee3ccdf77 Cleaning up deps 2011-01-05 23:09:16 -02:00
Matthew Simmons de23a32c96 Write the VM's charset in the GPX file's XML header, rather than using a
hard-coded value.  Per the Android docs, the default charset for Android is
UTF-8.
2011-01-05 19:54:49 -05:00
Matthew Simmons 2beb840a5c Code review 2011-01-05 18:26:01 -05:00
Matthew Simmons f748d76549 Move the methods which initiate the SendToDocs GData calls into their own class.
This makes SendToDocs easier to understand and easier to test.
2011-01-05 17:16:01 -05:00
Rodrigo Damazio 9d9a326c2b Merging Bart's fix. 2011-01-05 17:00:12 -02:00
marian.steinbach 9184827195 Pre-production files for menu icons (second attempt) 2011-01-05 09:08:51 +01:00
marian.steinbach cb533c954b Merged remote changes 2011-01-05 09:00:36 +01:00
marian.steinbach ead876036d Removing icons from /MyTracks/assets 2011-01-05 08:48:12 +01:00
Sandor Dornbush cfa25eccb1 Fix export all TCX. 2011-01-04 21:57:49 -08:00
Sandor Dornbush b0d6233de6 Merge from head and address comment. 2011-01-04 21:00:12 -08:00
bartn b07b8a1aaa Fix broken test and avoid mocking provider. 2011-01-04 16:19:32 -08:00
leifhendrik a68cdaf2ba More cleanups. Towards a working solution. 2011-01-04 10:11:03 -08:00
marian.steinbach 16641b9193 Pre-production files for menu icons 2011-01-04 09:10:30 +01:00
Sandor Dornbush 0469a90992 Merging from head. 2011-01-03 16:47:35 -08:00
Sandor Dornbush 6dc3e5ab7a Remove trailing white space. 2011-01-03 16:44:34 -08:00
Rodrigo Damazio 82012fa623 Merging from head. 2011-01-03 13:05:30 -02:00
marian.steinbach 7ddd254bb1 Added various missing strings, modified some existing translations 2011-01-03 00:37:56 +01:00
marian.steinbach 464858cfdf Slight comment clean-up 2011-01-03 00:37:12 +01:00
marian.steinbach 30db23255d New menu icons (according to pre-2.3-guidelines) 2011-01-02 22:50:02 +01:00
Sandor Dornbush 868c1ef891 Merge from head. 2010-12-31 09:14:09 -08:00
Sandor Dornbush b961356b7b Addressed comments.
Merge from head.
2010-12-31 09:11:22 -08:00
bartn 2e32d6c574 Address comments and fix broken test. 2010-12-31 00:15:12 -08:00
bartn a31e5aab79 Address comments. 2010-12-30 19:46:14 -08:00
bartn ae4f9565bd Chart drawing refactoring, part 1. Better handle label drawings for multiple data series, fix a few bugs and introduce fine grained zoom settings. 2010-12-29 17:52:23 -08:00
bartn f33ba10b96 Merge with 5ad4c64449adf707f3a0619d568deac185e7ff05 2010-12-28 17:14:37 -08:00
Sandor Dornbush 904c519091 Move untranslated strings to a new resources file. 2010-12-28 17:01:23 -08:00
bartn a0db837910 Merge with 0d6e42a25349b4c1099e8a03a37e22cc559da048 2010-12-28 16:58:56 -08:00
Sandor Dornbush 51cb5db8b4 Add ANT+ sensor support. 2010-12-28 16:29:26 -08:00
bartn c328728e0c Use LocationIterator for scalability and instantiate MyTracksLocation to make sure that sensor data is properly read. 2010-12-28 16:19:34 -08:00
Sandor Dornbush 3384ef67a6 Addressed comments. 2010-12-28 14:39:26 -08:00
bartn e89c549706 Merge with 6f18dfaa4b33c178829a3cdfa374f0ac6a55d5c7 2010-12-28 11:17:43 -08:00
leifhendrik 3c67ac73da Support uploading of tracks to fusion tables. Remove support for maps data api. 2010-12-28 10:40:49 -08:00
Sandor Dornbush 656349e6c5 Use scaled pixels for chart view.
Use better colors for sensor data.
2010-12-27 09:06:08 -08:00
Rodrigo Damazio df2af0185c Using preferences' apply() instead of commit() on Gingerbread. 2010-12-24 05:41:03 -02:00
Rodrigo Damazio 913d30f2de Merge from head 2010-12-24 05:27:56 -02:00
Hauke Ingmar Schmidt e96172b698 * Fixed some typos. 2010-12-23 16:25:34 +01:00
Hauke Ingmar Schmidt 0c241f683d * Did a cross check with current english file, added keys
* Stoppen->Anhalten
*
2010-12-23 15:04:10 +01:00
bartn a19097de2b Get rid of unused getTrackPoints(...). 2010-12-22 16:54:13 -08:00
bartn f6feeb9d1e Fix a typo. 2010-12-22 16:03:10 -08:00
bartn f205e6f9cc Make sure we don't upgrade twice on newer DBs. Prepare for upcoming DB changes v19. 2010-12-22 16:02:05 -08:00
bartn 4e543e6068 Merge with f31f08b12616cde71b9f6df34a92a66c35140d92 2010-12-22 15:30:47 -08:00
bartn 176062f11c Address comments (round #2). 2010-12-22 14:39:04 -08:00
bartn 4d88191171 Address comments. Use bulkInsert to improve performace (2min for 20K points before vs. 10 sec now). 2010-12-22 14:24:26 -08:00
Sandor Dornbush 025ea1d094 Address comments. 2010-12-21 09:31:54 -08:00
bartn a4283d545a Add missing Java class with unit tests. 2010-12-20 14:51:00 -08:00
bartn 52fa2aace9 Finalize the new interface, fix bugs and add unit tests. 2010-12-20 14:50:27 -08:00
Sandor Dornbush fa711cf142 Address comments + add more tests. 2010-12-19 22:11:41 -08:00
bartn 70bc7e53fe Fix a bug in getLocationIterator 2010-12-17 15:09:58 -08:00
bartn 56f22aa073 Addressed comments + new method getLocationId() 2010-12-17 13:57:51 -08:00
Sandor Dornbush 878a87278d Address comments. 2010-12-17 06:59:43 -08:00
bartn c4a539d2ba Initial implementation of getLocationIterator 2010-12-16 21:09:12 -08:00
bartn 4225e81080 Added missing change. 2010-12-16 17:58:28 -08:00
bartn 8fd4887f10 Merge with c31ef4ac66823a80d02265da7810432b51ce01ed 2010-12-16 17:49:01 -08:00
bartn 0e397797b4 Addressed Rodrigo's comments. 2010-12-16 17:46:27 -08:00
bartn e6c8458ce7 Initial draft of the upcoming changes to simplify track points management. 2010-12-16 14:13:09 -08:00
bartn 50ea9919af Add myself to the About box, as suggested by Rodrigo. 2010-12-16 12:31:35 -08:00
Sandor Dornbush 67f62df894 Fix a few bad characters in Catalan files. 2010-12-16 08:35:16 -08:00
Sandor Dornbush 0da0280156 Address one last comment. 2010-12-15 16:53:38 -08:00
Sandor Dornbush fa713eac4a Address comments. 2010-12-15 16:49:37 -08:00
Sandor Dornbush 2c7d56ab34 Adding Catalan translation. 2010-12-15 08:49:02 -08:00
Sandor Dornbush e340268dd0 Minor fixes and respond to comments. 2010-12-13 22:34:58 -08:00
Sandor Dornbush affec6720b Update tests.
Lazily allocate stats objects on waypoints.
2010-12-12 20:02:12 -08:00
Sandor Dornbush 5047826a74 Minor fixes. 2010-12-11 22:06:55 -08:00
Sandor Dornbush 33d9230442 Refactor the waypoint insertion code. 2010-12-11 19:14:47 -08:00
Rodrigo Damazio 607b174c5f Fixing some StrictMode violations, making it softer for others which the Android runtime itself triggers. 2010-12-10 16:40:22 -02:00
Rodrigo Damazio 6b4ea71404 Enabling Proguard to reduce APK size. 2010-12-10 15:39:48 -02:00
Rodrigo Damazio 014322c240 Updating new projects to API level 9 and adding xlarge screen size support. 2010-12-10 14:41:21 -02:00
Rodrigo Damazio b789f84151 Adding new method required in Gingerbread. 2010-12-10 14:36:24 -02:00
Rodrigo Damazio 19d5fe1ba6 Merging gingerbread changes to head. 2010-12-10 14:30:29 -02:00
Rodrigo Damazio 93b95954c4 Updating to API level 9 2010-12-10 14:28:25 -02:00
Rodrigo Damazio fb7a2aaa32 Enabling strict mode in non-release builds 2010-12-10 14:28:11 -02:00
Rodrigo Damazio 3105eacd4d Adding Gingerbread platform adapter 2010-12-10 14:26:14 -02:00
Rodrigo Damazio 215893214f Merging sensor and library changes together. 2010-12-07 18:04:28 -02:00
Bartlomiej Niechwiej 30e01d6700 Revert back local changes. 2010-12-04 23:54:53 -08:00
Bartlomiej Niechwiej 94cfc5d7d6 Merge with 3af20c63ed16c56b6e5e3d854272ec1fb8074570 2010-12-04 23:50:16 -08:00
Sandor Dornbush 471b32cce1 Fix announcement available setting. 2010-12-03 13:11:56 -08:00
Bartlomiej Niechwiej 036b34e91d Fix upgrade SQL. 2010-12-03 00:43:00 -08:00
Bartlomiej Niechwiej 77f7f8c1ed Merge with c6c03f517e6dc6d0da60ace9bd21311c9b20f4dc 2010-12-03 00:35:44 -08:00
Bartlomiej Niechwiej e6fc991d2a DO NOT PULL (local changes) 2010-12-03 00:35:25 -08:00
Sandor Dornbush 060881777d A few more minor fixes. 2010-12-01 20:37:11 -08:00
Sandor Dornbush 6e567fa725 Fix broken build and add icon for sensor state. 2010-12-01 17:56:28 -08:00
Sandor Dornbush 7e4c01937f Minor fixes. 2010-12-01 17:28:22 -08:00
Sandor Dornbush 06a00e6482 Merge from head + bug fixes. 2010-12-01 14:24:47 -08:00
Bartlomiej Niechwiej 242df42f55 Fixed a few NumberFormatExceptions as found in the market reports. 2010-11-28 17:44:37 -08:00
Rodrigo Damazio 8d78c16c8a Adding more tests and other minor fixes. 2010-11-28 03:37:27 -08:00
Rodrigo Damazio db2b05eb7f Moving more constants to the library. 2010-11-28 03:17:24 -08:00
Rodrigo Damazio 282b1090ba Merging from head 2010-11-28 03:00:51 -08:00
Rodrigo Damazio 4f6c9fa866 Creating a library to hold code and resources common to both My Tracks and third-party apps. 2010-11-28 02:35:30 -08:00
Rodrigo Damazio 9375842c71 Moving intent constants to XML file. 2010-11-28 00:48:05 -08:00
Rodrigo Damazio ea3fca0f1b Addressing review suggestions for third-party apps. 2010-11-27 02:52:04 -08:00
Rodrigo Damazio 5971d67a66 Moving signal strength sampling into a separate app. 2010-11-26 23:51:32 -08:00
Rodrigo Damazio 357b68dd4f Merging 1.0.21 changes back to the default branch 2010-11-26 15:00:41 -08:00
Rodrigo Damazio 384f3f5698 Added tag v1.0.21 for changeset f9230d18271a 2010-11-26 14:57:35 -08:00
Rodrigo Damazio 4577ff9628 Releasing 1.0.21 2010-11-26 14:57:03 -08:00
Rodrigo Damazio e6cd9f524d Replacing tabs with spaces 2010-11-24 19:21:29 -08:00
Rodrigo Damazio 3dad56621f Transplanting Sandor's bugfix change for dialogs in old devices. 2010-11-24 18:57:40 -08:00
Rodrigo Damazio 6c9a225b64 Merging Bart's changes into the bugfix branch. 2010-11-24 18:27:40 -08:00
Rodrigo Damazio 3bbb9bd95d Making a 1.0.20 bugfix branch 2010-11-24 18:26:30 -08:00
Bartlomiej Niechwiej a4f855ccd8 Addressed Rodrigo's comments. 2010-11-24 16:26:12 -08:00
Bartlomiej Niechwiej 4d80af4e06 An emergency fix for a NPE in the service. 2010-11-24 15:46:57 -08:00
Rodrigo Damazio 7abce12499 Merging from head. 2010-11-23 22:13:01 -08:00
Rodrigo Damazio 7b1302c011 Adding broadcasts for when we start/stop recording.
Pause/resume constants are there so apps consider them, but not yet implemented.
2010-11-23 22:12:16 -08:00
Rodrigo Damazio 66d23b7eac Fixing permission descriptions so they show up properly in application manager 2010-11-23 22:11:04 -08:00
Rodrigo Damazio dc0255509b Adding permissions for third-party apps. 2010-11-23 21:53:59 -08:00
Rodrigo Damazio 6661f91eb5 Added tag v1.0.20 for changeset b259d09396e5 2010-11-23 15:20:15 -08:00
Hauke Ingmar Schmidt d5ec7c3001 * Fixed some translation flaws
* Converted usages of formal language into informal language
2010-09-25 16:19:03 +02:00
Rodrigo Damazio a0af1a811a Added tag v1.0.17 for changeset 4181d0daba76 2010-09-09 20:07:21 -03:00
Rodrigo Damazio 4933b9ce54 Releasing version 1.0.17 2010-09-09 20:06:58 -03:00
Rodrigo Damazio e81c4eb155 Clearly marking the backup feature as a beta. 2010-09-09 20:06:44 -03:00
Rodrigo Damazio b284c8bc56 Fixing Sandor's fix :) 2010-09-08 22:36:59 -03:00
Sandor Dornbush 525f1b7781 Fix restarting recording. 2010-09-07 17:18:06 -07:00
Rodrigo Damazio 2f99d8ca62 Fixing GPX importer tests to work on any timezone. 2010-09-07 17:39:38 -03:00
Rodrigo Damazio 7781014cf7 Fixing issue 148 - properly loading bounding boxes, and adding regression tests. 2010-09-07 16:32:46 -03:00
Rodrigo Damazio 2432b36f5d Minor javadoc style fix 2010-09-07 15:47:07 -03:00
Rodrigo Damazio 288aa015fa Merging GPX import fix 2010-09-07 15:08:54 -03:00
Rodrigo Damazio 1cb8b922c3 Fixing GPX import (issue 150) by properly parsing timestamps according to XML spec. 2010-09-06 23:05:09 -03:00
Rodrigo Damazio 41cec64bf6 Translating overlooked strings to Chinese 2010-09-02 21:06:37 -03:00
Rodrigo Damazio d82bda9d00 Merging Chinese translation 2010-09-02 20:56:31 -03:00
Rodrigo Damazio d02c947b84 Style fixing 2010-09-01 17:46:36 -03:00
Rodrigo Damazio 7167a5a71e Final touches to cloud backup: being future-compatible by not using the agent helpers (those manage the backup state themselves, and we don't want to have to follow their format) 2010-09-01 17:42:14 -03:00
Rodrigo Damazio f13c2455ea Not overwriting files during export, and instead adding a suffix to them.
Also greatly simplifying name sanitization.
2010-09-01 00:03:34 -03:00
Rodrigo Damazio b200b66612 Fixing volume control - making the main activities control the text-to-speech volume. 2010-08-31 18:55:12 -03:00
Rodrigo Damazio b811df8cda Fixing indentation 2010-08-31 17:38:05 -03:00
Rodrigo Damazio 1e239b78c3 Fixing crash seen on developer console.
Basically, if the screen space gets really constrained, we would get a negative dimension for an image.
2010-08-31 17:35:38 -03:00
Rodrigo Damazio 3a8daadd92 Fixing NPE seen on developer console.
Apparently this happens when the activity was previously showing the chart settings dialog, and was paused then restarted - in that case we'll just keep the default chart settings.
2010-08-31 17:31:54 -03:00
Rodrigo Damazio f605d6fca5 Fixing issue 35 - detecting errors during "export all". 2010-08-31 17:14:46 -03:00
Rodrigo Damazio cd85e43624 Merging from head 2010-08-31 16:48:37 -03:00
Nulled 2b94d09539 removed file format array.
minor change to the strings.xml
2010-08-31 09:03:44 +08:00
Nulled ab82da5c75 removed colors.xml 2010-08-31 08:40:40 +08:00
Nulled 8a467aa537 updated chinese translation 2010-08-31 08:39:20 +08:00
Rodrigo Damazio 742e6b1e3e Added tag v1.0.16 for changeset 35854d46e6e4 2010-08-30 18:54:39 -03:00
Rodrigo Damazio e35e8bcdce Updating version number to 1.0.16 in preparation for release. 2010-08-30 18:42:48 -03:00
Rodrigo Damazio 5f953aa47f Fixing version display (missed merge). 2010-08-30 18:36:16 -03:00
Rodrigo Damazio e550e9aa1d Merge 2010-08-30 17:41:35 -03:00
Rodrigo Damazio 26e2defd9e Import cleanup 2010-08-30 17:39:16 -03:00
Sandor Dornbush 3b3641c69e Merging changes from head. 2010-08-27 17:21:33 -07:00
Rodrigo Damazio 56ccd518d6 Adding missing Eclipse configuration files for developers - these have to be manually imported 2010-08-24 22:48:49 -03:00
Rodrigo Damazio 59846280a8 Adding compression to the backup: assuming that backups/restore are infrequent, the added CPU/battery usage is not an issue 2010-08-24 22:39:29 -03:00
Rodrigo Damazio aa95e3abcd Minor leftover cleanup 2010-08-24 21:49:42 -03:00
Rodrigo Damazio ad6340c1a7 BackupActivity doesn't need to be an activity anymore, it has no own content 2010-08-24 21:41:40 -03:00
Rodrigo Damazio 62a54aab58 Style cleanup 2010-08-24 21:34:28 -03:00
Rodrigo Damazio 23f1e81cf0 A lot of cleanup:
* Splitting ExternalFileBackup into UI and non-UI parts
* Disabling backups while recording
* Triggering cloud backups when preferences are changed
2010-08-24 21:27:43 -03:00
Rodrigo Damazio d014f422d2 Ensuring the rest of the app can deal with preferences being restored from the backup 2010-08-24 21:17:55 -03:00
Rodrigo Damazio 68a9f1bc46 Clearing more leftovers from cloud backup. 2010-08-24 20:07:12 -03:00
Rodrigo Damazio 798637d465 Getting rid of full cloud backup for now - the backup service has a small size limit (1MB) which wouldn't be enough for us 2010-08-24 17:38:35 -03:00
Rodrigo Damazio 60ea4c5f77 Merging Sandor's changes with backup (non-trivial merge) 2010-08-24 17:25:50 -03:00
Rodrigo Damazio 0e119950c2 Merging Sandor's changes 2010-08-24 17:02:36 -03:00
Sandor Dornbush 4be4467fc6 Fix NPE. 2010-08-24 12:20:18 -07:00
Sandor Dornbush 06636b2a28 Fix test access modifier. 2010-08-23 09:12:12 -07:00
Sandor Dornbush 71a36d1b25 Address Rodrigo's comments. 2010-08-23 09:05:55 -07:00
Sandor Dornbush 9ba93ff8d2 Fix javadoc. 2010-08-23 08:03:54 -07:00
Sandor Dornbush 4059308dd7 Added comments and license to pref mgr.
Removed sampling from track overlay.
2010-08-22 12:51:40 -07:00
Rodrigo Damazio 9befe8ae5f Reversing backup order 2010-08-20 23:42:51 -03:00
Rodrigo Damazio 20e01f3b2c Storing files in UTC timezone 2010-08-20 23:31:17 -03:00
Rodrigo Damazio 98b894ed8e Adding SD card backup option to the preferences 2010-08-20 23:26:38 -03:00
Rodrigo Damazio ac8b7264b3 Minor initialization fixes 2010-08-20 23:13:05 -03:00
Rodrigo Damazio bf7b24ecc0 Isolating file utilities 2010-08-20 23:10:09 -03:00
sandordornbush 9f43dd2db5 Reverting classpath changes. 2010-08-20 16:11:36 -07:00
sandordornbush 28d868985e One more minor bug fix for a NPE. 2010-08-20 13:32:53 -07:00
sandordornbush cf1be26da2 Two minor bug fixes from the developer console. 2010-08-20 10:51:09 -07:00
Sandor Dornbush 1de9b73aa0 Address Rodrigo's comments.
Add service preference manager.
2010-08-18 22:05:01 -07:00
Rodrigo Damazio 3532a6360b Adding backup facilities. TODO: some tests, calling to trigger new automatic backup on Froyo, manual backup to SD option 2010-08-16 22:22:14 -03:00
Sandor Dornbush beddc8e1ea Add Track Writer test.
Fix total time bug in stats activity.
Fix track segments on the map overlay.
2010-08-16 17:16:43 -07:00
Rodrigo Damazio df81fba565 Fixing directory used in sharing as well 2010-08-16 18:17:14 -03:00
Rodrigo Damazio 25da0d26ef Changing exporters to use a subdirectory of the SD card 2010-08-16 18:14:33 -03:00
Rodrigo Damazio e0c34d20a8 Removing DO NOT TRANSLATE values from Japanese translation 2010-08-16 00:57:03 -03:00
Rodrigo Damazio cc6db5b5cc Merging japanese translation 2010-08-16 00:54:44 -03:00
Rodrigo Damazio c38df03add Ignoring eclipse workspace metadata if present 2010-08-13 13:03:58 -03:00
Rodrigo Damazio 63402358d1 Fixing empty method comment 2010-08-13 04:53:07 -03:00
Rodrigo Damazio 3ae1de735e Removing overlooked debug lines 2010-08-13 04:52:14 -03:00
Rodrigo Damazio a701eb0e4f Fixing 24-hour format mistake 2010-08-13 04:37:37 -03:00
Rodrigo Damazio 09caf017a9 Adding support for segments 2010-08-13 04:37:14 -03:00
Rodrigo Damazio 32b8b2093d REAL performance improvement in importer - using a bulk insertion 2010-08-13 03:50:55 -03:00
Rodrigo Damazio c84a4f1aa8 Moving androidmock to the right directory and making eclipse use it properly 2010-08-12 22:16:38 -03:00
Rodrigo Damazio d90c0b5431 Optimizing the importer a little 2010-08-12 22:14:47 -03:00
Rodrigo Damazio 94f6785f0d Removing no longer used provider utility methods 2010-08-12 22:06:58 -03:00
Rodrigo Damazio f01c382807 Style fixing SAX importer contribution 2010-08-12 20:22:54 -03:00
Rodrigo Damazio 6d42803dd8 Updating statistics object usage in SAX importer 2010-08-12 19:43:27 -03:00
Rodrigo Damazio 61e908ccb5 Merge SAX GPX importer contribution 2010-08-12 18:37:38 -03:00
Sandor Dornbush 7bae8c34a7 Integrate most of Rodrigo's comments. 2010-08-11 22:02:49 -07:00
Sandor Dornbush 3960341640 Revert classpath 2010-08-09 16:45:36 -07:00
Sandor Dornbush 06e453dd05 Merging changes from realtime branch into mainline. 2010-08-07 10:38:41 -07:00
boiledorange73 361b1cbad4 Reverted "DO NOT TRANSLATE" entries 2010-08-04 19:51:00 +09:00
boiledorange73 56a866fca7 Modified bits of values-ja files. 2010-08-04 17:13:35 +09:00
boiledorange73 49e0d68374 res/values-ja added 2010-08-04 14:35:30 +09:00
Sandor Dornbush c9ffd0b4bb Exporting the TrackRecordingService. 2010-07-27 16:34:13 -07:00
Nulled 1d2f6f46a4 Fixed Chinese Simplified translation folder name 2010-06-12 08:09:49 +08:00
Nulled 4af6d856b9 Added Chinese Simplified translation 2010-06-11 08:50:23 +08:00
Steffen Horlacher 6fd4294391 Bugfix for empty total time in trip statistics and missing first location in exported files 2010-06-06 23:31:03 +02:00
Rodrigo Damazio 88b2b85f2a Making Track and Waypoint use the TripStatisticsData class.
This grealy simplifies those classes since the fields are the same.
There's certainly more cleanup to do on top of this, but I thought this
was already more than enough for a single change.

The only *functional* change expected from this is that the average
speed is now calculated over the time until the last known position,
which IMHO makes sense since the distance used in that calculation only
includes up to that position. The visible effect is that having no GPS
signal doesn't make the speed decrease.

This was imported from perforce CL 15953263.
2010-06-04 14:59:09 -03:00
Rodrigo Damazio 2c1dff6ac8 Adding test project files (TODO: replace easymock with android mock) 2010-06-02 19:26:31 -03:00
Rodrigo Damazio 481b42f563 Auto-merge 2010-06-02 16:58:49 -03:00
Rodrigo Damazio 597c321009 Added tag v1.0.15 for changeset e774d13e5b6a 2010-06-02 16:57:46 -03:00
Rodrigo Damazio 76651f75d8 Automated merge with https://tnapierala-mytracks.googlecode.com/hg/ 2010-06-02 16:22:24 -03:00
t napierala 3d8bae55a1 pl_PL - removed some non-translatable strings 2010-06-01 10:00:28 +02:00
Steffen Horlacher 4b6869e367 Added check for negative time changes and bugfix for files with multiple tracks 2010-05-30 20:06:22 +02:00
Steffen Horlacher 477ba7c081 Changes according to comments 2010-05-30 18:10:56 +02:00
johan helin 5b6d9725b8 Removed all strings that should not be translated in the swedish translation of arrays.xml 2010-05-30 14:01:26 +02:00
t napierala 25c3cea115 pl_PL removed colors.xml, removed non-translatable strings as per Issue 68, comment 2 2010-05-30 13:20:08 +02:00
johan helin d90601276f Finnished translating my tracks to swedish 2010-05-29 13:30:20 +02:00
johan helin 4f692bc698 Finnished translating strings.xml and did some more of the strings in arrays.xml 2010-05-29 12:44:30 +02:00
johan helin d8dd02eef0 Further strings translated 2010-05-28 22:38:04 +02:00
johan helin 8ad65ae233 First commit with cleanup from english and some strings translated 2010-05-28 22:22:39 +02:00
t napierala eabbb4569b final translation 2010-05-26 16:34:26 +02:00
t napierala 49888b771d first part of changes 2010-05-26 14:29:40 +02:00
ob 2b1c1cd052 Add a missing string for "Elevation" to the French strings.xml file. 2010-05-24 18:23:39 +01:00
Steffen Horlacher 61884e67ec track rollback: javadoc and some minor other corrections 2010-05-23 12:58:50 +02:00
Steffen Horlacher 9a2f028843 code format 2010-05-23 11:26:41 +02:00
Steffen Horlacher 2b56acf164 code format 2010-05-23 11:21:27 +02:00
Steffen 98b67dcc28 Sax style GPX file importer and tests 2010-05-23 11:08:51 +02:00
Rodrigo Damazio 500dfa3107 Releasing mytracks 1.0.15 2010-05-23 00:00:00 -03:00
Rodrigo Damazio c4efcfd2db Fixing bug in GPX import - we were reading the last point time too soon 2010-05-22 01:17:59 -07:00
Rodrigo Damazio 81ee6bbcf6 Add a few calls back into SendToMyMaps which actually add the stats to the ending waypoint. (imported from perforce) 2010-05-22 00:41:40 -07:00
Rodrigo Damazio e4e2e76e06 Added tag v1.0.14 for changeset 4c02a4515632 2010-05-20 16:53:43 -07:00
Rodrigo Damazio f847862e84 Releasing 1.0.14 (no code changes, just a release mistake) 2010-05-20 16:53:40 -07:00
Rodrigo Damazio 427dbeafde Added tag v1.0.13 for changeset 84cce31f6b83 2010-05-20 12:18:35 -07:00
Rodrigo Damazio 99ac85b40e Releasing 1.0.13 2010-05-20 12:18:29 -07:00
Rodrigo Damazio 020388baed Fixing uploading bug which happened in gzipped responses 2010-05-20 11:21:46 -07:00
Rodrigo Damazio 4ade79de4f Added tag v1.0.12 for changeset 51aa4e7cf7d8 2010-05-20 05:14:00 -03:00
Rodrigo Damazio 870dda9b8b Importing tests source 2010-05-19 17:35:08 -07:00
Rodrigo Damazio 27dd5298f7 Importing all the source code :) 2010-05-19 17:32:31 -07:00
Rodrigo Damazio 6d5d406ce9 Importing external libraries 2010-05-19 17:31:41 -07:00
Rodrigo Damazio ffb5e7e6f7 Importing project files 2010-05-19 17:31:20 -07:00
Rodrigo Damazio 0de101c89f Updating resources to the latest version 2010-05-19 17:30:26 -07:00
Rodrigo Damazio bd3a0766e1 Adding service definition 2010-05-07 17:58:54 -03:00
Rodrigo Damazio f536cc8f8a Adding hgignore for bin and gen dirs 2010-05-07 15:59:52 -03:00
Rodrigo Damazio 826c0495fc Initial import of MyTracks content files and their dependencies.
MyTracksUtils and MyTracksConstants are cut-down versions of the original files
which contain only what's used by the content package, we'll later post the rest
of them.
2010-05-07 15:59:33 -03:00
Rodrigo Damazio 9eac541ce5 Initial import of MyTracks resources and assets 2010-05-07 15:57:42 -03:00
253 changed files with 15269 additions and 5181 deletions
+2
View File
@@ -2,5 +2,7 @@ syntax:glob
*/bin
*/gen/**
*/proguard/**
.metadata
MyTracksTest/annotations.log
MyTracks/src/com/google/android/apps/mytracks/io/mymaps
+4
View File
@@ -4,7 +4,11 @@
<classpathentry kind="lib" path="libs/googleloginclient-helper.jar"/>
<classpathentry kind="lib" path="libs/google-common.jar"/>
<classpathentry kind="lib" path="libs/accounts.jar"/>
<classpathentry kind="lib" path="libs/google-api-client-1.2.2-alpha.jar"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry exported="true" kind="lib" path="/MyTracksLib/libs/protobuf-java-2.3.0-lite.jar"/>
<classpathentry kind="src" path="MyTracksLib_src"/>
<classpathentry kind="lib" path="libs/libmymaps.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
+7
View File
@@ -30,4 +30,11 @@
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
<linkedResources>
<link>
<name>MyTracksLib_src</name>
<type>2</type>
<locationURI>_android_MyTracksLib_e2802071/src</locationURI>
</link>
</linkedResources>
</projectDescription>
+71 -12
View File
@@ -1,9 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.maps.mytracks"
android:installLocation="auto"
android:versionCode="21"
android:versionName="1.0.20">
android:versionCode="25"
android:versionName="1.1.2">
<application android:icon="@drawable/arrow_icon"
android:label="@string/app_name"
android:backupAgent="com.google.android.apps.mytracks.io.backup.MyTracksBackupAgent">
@@ -13,7 +28,10 @@
android:value="AEdPqrEAAAAIi-_QiwoRSc9_bAC9cmuNXTQyU8ajJmGtKdhskQ" />
<provider android:name="com.google.android.apps.mytracks.content.MyTracksProvider"
android:authorities="com.google.android.maps.mytracks" />
android:authorities="com.google.android.maps.mytracks"
android:exported="true"
android:readPermission="com.google.android.apps.mytracks.READ_TRACK_DATA"
android:writePermission="com.google.android.apps.mytracks.WRITE_TRACK_DATA" />
<activity android:name="com.google.android.apps.mytracks.MyTracks"
android:label="My Tracks"
@@ -35,11 +53,13 @@
</activity>
<activity android:name="com.google.android.apps.mytracks.MyTracksMap"
android:label="MyTracks" />
android:label="MyTracks"
android:exported="false" />
<activity android:name="com.google.android.apps.mymaps.MyMapsList"
<activity android:name="com.google.android.apps.mytracks.MyMapsList"
android:label="@string/map_list_title"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale" />
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale"
android:exported="false" />
<activity android:name="com.google.android.apps.mytracks.MyTracksList"
android:label="Recorded Tracks" />
@@ -60,19 +80,26 @@
android:label="@string/aggregated_stats" />
<activity android:name="com.google.android.apps.mytracks.StatsActivity"
android:label="@string/statistics" />
android:label="@string/statistics"
android:exported="false" />
<activity android:name="com.google.android.apps.mytracks.SensorStateActivity"
android:label="@string/sensor_state" />
<activity android:name="com.google.android.apps.mytracks.ChartActivity"
android:label="@string/elevation_label"/>
android:label="@string/elevation_label"
android:exported="false" />
<activity android:name="com.google.android.apps.mytracks.WelcomeActivity"
android:label="@string/welcome"/>
android:label="@string/welcome"
android:exported="false" />
<service android:name="com.google.android.apps.mytracks.services.TrackRecordingService"
android:label="Track Recording Service"
android:icon="@drawable/arrow_320"
android:enabled="true"
android:exported="true" />
android:exported="true"
android:permission="com.google.android.apps.mytracks.WRITE_TRACK_DATA" />
<receiver android:name="com.google.android.apps.mytracks.MyTracksReceiver">
<intent-filter>
@@ -89,12 +116,18 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="com.dsi.ant.permission.ANT" />
<uses-permission android:name="com.dsi.ant.permission.ANT_ADMIN" />
<!-- Permissions for uploading tracks -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.fusiontables" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.local" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.wise" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.writely" />
@@ -102,12 +135,37 @@
<!-- Permissions for misc services -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- Exported permissions (for other apps to use our features) -->
<!-- Permission to get track start/end broadcasts -->
<permission android:name="com.google.android.apps.mytracks.TRACK_NOTIFICATIONS"
android:permissionGroup="android.permission-group.LOCATION"
android:label="@string/notification_permission_label"
android:description="@string/notification_permission_description"
android:protectionLevel="normal" />
<!-- Permission to read raw track data (points, etc.) -->
<permission android:name="com.google.android.apps.mytracks.READ_TRACK_DATA"
android:permissionGroup="android.permission-group.LOCATION"
android:label="@string/read_tracks_permission_label"
android:description="@string/read_tracks_permission_description"
android:protectionLevel="dangerous" />
<!-- Permission to write track data, either raw or by making service calls -->
<permission android:name="com.google.android.apps.mytracks.WRITE_TRACK_DATA"
android:permissionGroup="android.permission-group.LOCATION"
android:label="@string/write_tracks_permission_label"
android:description="@string/write_tracks_permission_description"
android:protectionLevel="dangerous" />
<!-- We read and write raw track data, obviously. -->
<uses-permission android:name="com.google.android.apps.mytracks.READ_TRACK_DATA" />
<uses-permission android:name="com.google.android.apps.mytracks.WRITE_TRACK_DATA" />
<uses-permission android:name="com.google.android.apps.mytracks.TRACK_NOTIFICATIONS" />
<!-- Features required -->
<uses-feature android:name="android.hardware.location" android:required="true"/>
<uses-feature android:name="android.hardware.location.gps" android:required="true"/>
<uses-feature android:name="android.hardware.touchscreen" android:required="true"/>
<!-- Features optional -->
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
<uses-feature android:name="android.hardware.location.network" android:required="false"/>
@@ -118,6 +176,7 @@
<uses-sdk android:minSdkVersion="3"/>
<supports-screens
android:xlargeScreens="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
+2 -2
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml version="1.0" encoding="UTF-8"?>
<launchConfiguration type="com.android.ide.eclipse.adt.debug.LaunchConfigType">
<intAttribute key="com.android.ide.eclipse.adt.action" value="0"/>
<stringAttribute key="com.android.ide.eclipse.adt.commandline" value=""/>
@@ -16,8 +16,8 @@
<listEntry value="1"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ALLOW_TERMINATE" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MyTracks"/>
+7 -1
View File
@@ -10,4 +10,10 @@
# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
target=Google Inc.:Google APIs:8
target=Google Inc.:Google APIs:9
android.library.reference.1=../MyTracksLib/
# ProGuard is turned off while we investigate the removal of code that
# isn't actually dead from Fusion Tables. See issue 303 for an example of
# the result of that removal.
#proguard.config=proguard.cfg
+17
View File
@@ -0,0 +1,17 @@
The libraries contained here in binary format are licensed according to their
own licenses, which allow their usage for the My Tracks application. Any other
applications that wish to use these files should consult the appropriate
licenses or the JAR's authors.
References are provided to the libraries:
accounts.jar (Android accounts library):
http://code.google.com/p/libs-for-android/wiki/AccountsLibrary
google-api-client-*.jar (GData client):
http://code.google.com/p/google-api-java-client/
google-common.jar,
googleloginclient-helper.jar,
libmymaps.jar (Google My Maps upload library):
Licensed exclusively for use in My Tracks and derived Android applications.
Binary file not shown.
Binary file not shown.
+53
View File
@@ -0,0 +1,53 @@
-target 6
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# Add the libraries, but ignore warnings about them
-libraryjars libs
-libraryjars ../MyTracksLib/libs
-dontwarn com.google.android.googleapps.**
-dontwarn com.android.common.**
-dontwarn com.google.android.gsf.**
-dontwarn org.codehaus.**
-dontwarn com.google.appengine.**
# Make our stack traces useful
# Line numbers will be correct, file names will be replaced by "MT" since the
# class name is enough to get the file name.
-renamesourcefileattribute MT
-keepattributes SourceFile,LineNumberTable
# Keep everything android references from XMLs
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.app.backup.BackupAgent
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

+28 -8
View File
@@ -41,8 +41,7 @@ limitations under the License.
</LinearLayout>
</TableRow>
<View
android:layout_height="2dip" />
<View android:layout_height="2dip" />
<TableRow>
<TextView
@@ -58,6 +57,11 @@ limitations under the License.
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/about_bart"
android:textSize="20sp" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
@@ -81,8 +85,7 @@ limitations under the License.
</LinearLayout>
</TableRow>
<View
android:layout_height="2dip" />
<View android:layout_height="2dip" />
<TableRow>
<TextView
@@ -101,8 +104,7 @@ limitations under the License.
android:textSize="20sp" />
</TableRow>
<View
android:layout_height="2dip" />
<View android:layout_height="2dip" />
<TableRow>
<TextView
@@ -121,7 +123,25 @@ limitations under the License.
android:textSize="18sp" />
</TableRow>
<View
android:layout_height="4dip" />
<View android:layout_height="2dip" />
<TableRow>
<TextView
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:layout_column="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/about_privacy"
android:textSize="20sp" />
<TextView
android:autoLink="web"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/about_privacy_weburl"
android:textSize="18sp" />
</TableRow>
<View android:layout_height="4dip" />
</TableLayout>
+15
View File
@@ -103,6 +103,21 @@ limitations under the License.
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/speed"/>
<CheckBox android:id="@+id/chart_settings_power"
android:checked="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/power"/>
<CheckBox android:id="@+id/chart_settings_cadence"
android:checked="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cadence"/>
<CheckBox android:id="@+id/chart_settings_heart_rate"
android:checked="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/heart_rate"/>
</LinearLayout>
</TableRow>
</TableLayout>
@@ -30,13 +30,15 @@ limitations under the License.
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:layout_weight="0">
<ZoomControls android:id="@+id/elevation_zoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
android:layout_centerHorizontal="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
<LinearLayout android:id="@+id/elevation_busypane"
android:orientation="vertical"
+6
View File
@@ -50,6 +50,12 @@ limitations under the License.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button android:id="@+id/tracklist_btn_import_all"
android:layout_width="wrap_content"
android:layout_height="48dip"
android:layout_gravity="left|top"
android:text="@string/tracklist_btn_import_all"
android:textSize="14dip"/>
<Button android:id="@+id/tracklist_btn_export_all"
android:layout_width="wrap_content"
android:layout_height="48dip"
@@ -41,6 +41,8 @@ limitations under the License.
android:stretchColumns="1"
android:layout_marginTop="5dip"
android:layout_marginLeft="5dip">
<!-- My Maps -->
<TableRow>
<ImageView android:src="@drawable/mymaps_icon"
android:layout_width="wrap_content"
@@ -70,6 +72,27 @@ limitations under the License.
</RadioGroup>
</LinearLayout>
</TableRow>
<!-- Fusion Tables -->
<TableRow>
<ImageView android:src="@drawable/googledocs_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dip">
<CheckBox android:id="@+id/sendtogoogle_google_fusiontables"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/sendtogoogle_google_fusiontables"
android:textSize="20dip"
android:checked="true"/>
</LinearLayout>
</TableRow>
<!-- Google Docs -->
<TableRow>
<ImageView android:src="@drawable/googledocs_icon"
android:layout_width="wrap_content"
+131
View File
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent">
<ScrollView
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TableLayout
android:layout_height="wrap_content"
android:stretchColumns="1,4"
android:layout_width="fill_parent">
<!-- Layout the sensor state on one line. -->
<TableRow>
<TextView
android:layout_span="5"
android:text="@string/sensor_state" />
</TableRow>
<TableRow
android:background="@color/stat_label_background">
<TextView
android:id="@+id/sensor_state_register"
android:layout_column="1"
android:layout_span="5"
style="@style/StatsRegister" />
</TableRow>
<!-- Layout the sensor data age on one line. -->
<TableRow>
<TextView
android:layout_span="5"
android:text="@string/sensor_data_time" />
</TableRow>
<TableRow
android:background="@color/stat_label_background">
<TextView
android:id="@+id/sensor_data_time_register"
android:layout_column="1"
android:layout_span="5"
style="@style/StatsRegister" />
</TableRow>
<!-- Power meter -->
<TableRow
android:padding="1dip">
<TextView
android:layout_column="1"
android:layout_span="3"
android:text="@string/power" />
</TableRow>
<TableRow
android:background="@color/stat_label_background">
<TextView
style="@style/StatsRegister.Big"
android:id="@+id/power_state_register"
android:layout_column="1"
android:layout_span="4" />
<TextView
style="@style/StatsUnitSolo" />
android:layout_column="5"
android:text="@string/watts" />
</TableRow>
<!-- Cadence -->
<TableRow
android:padding="1dip">
<TextView
android:layout_column="1"
android:layout_span="3"
android:text="@string/cadence" />
</TableRow>
<TableRow
android:background="@color/stat_label_background">
<TextView
style="@style/StatsRegister.Big"
android:id="@+id/cadence_state_register"
android:layout_column="4" />
<TextView
style="@style/StatsUnitSolo" />
android:layout_column="2"
android:text="@string/revolutions_per_minute" />
</TableRow>
<!-- Heart Rate -->
<TableRow
android:padding="1dip">
<TextView
android:layout_column="1"
android:layout_span="3"
android:text="@string/heart_rate" />
</TableRow>
<TableRow
android:background="@color/stat_label_background">
<TextView
style="@style/StatsRegister.Big"
android:id="@+id/heart_rate_register"
android:layout_column="1"
android:layout_span="4" />
<TextView
style="@style/StatsUnitSolo"
android:layout_column="5"
android:text="@string/bpm" />
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
+48 -225
View File
@@ -42,15 +42,10 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
style="@style/StatsRegister.Big"
android:id="@+id/speed_register"
android:layout_column="1"
android:layout_marginBottom="-13dip"
android:layout_marginTop="-13dip"
android:layout_span="4"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="50sp" />
android:layout_span="4"/>
<LinearLayout
android:gravity="bottom"
android:layout_column="5"
@@ -62,24 +57,12 @@ limitations under the License.
android:layout_width="fill_parent" />
<TextView
android:id="@+id/speed_unit_label_top"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="2dip"
android:layout_marginTop="2dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
<TextView
android:background="@color/black"
android:layout_height="3dip"
android:layout_width="fill_parent" />
style="@style/StatsDivider" />
<TextView
android:id="@+id/speed_unit_label_bottom"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="2dip"
android:layout_marginTop="2dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
</LinearLayout>
</TableRow>
@@ -100,43 +83,25 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
style="@style/StatsRegister"
android:id="@+id/total_distance_register"
android:layout_column="1"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
android:layout_column="1" />
<TextView
android:gravity="left"
android:id="@+id/total_distance_unit_label"
android:layout_column="2"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/mile"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnitSolo" />
<!-- TODO 4/08/2009
The following is a bad hack to get a spacer the same size as the
text. Ideally this should just be a View, however I don't know how to
set the view height properly. fill_parent on this element causes as
NullPointerException. This same filler is repeated on each line.-->
<TextView
android:background="@color/black"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="40sp" />
style="@style/StatsSpacer"
android:layout_column="3"/>
<TextView
android:gravity="right"
android:id="@+id/max_speed_register"
android:layout_column="4"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister"
android:layout_column="4" />
<LinearLayout
android:gravity="bottom"
android:layout_column="5"
@@ -145,24 +110,12 @@ limitations under the License.
android:orientation="vertical">
<TextView
android:id="@+id/max_speed_unit_label_top"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="-1dip"
android:layout_marginTop="-1dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
<TextView
android:background="@color/black"
android:layout_height="3dip"
android:layout_width="fill_parent" />
style="@style/StatsDivider" />
<TextView
android:id="@+id/max_speed_unit_label_bottom"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="-1dip"
android:layout_marginTop="-1dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
</LinearLayout>
</TableRow>
@@ -182,33 +135,19 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
android:id="@+id/total_time_register"
android:layout_column="1"
android:layout_height="wrap_content"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_span="2"
android:layout_width="fill_parent"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:background="@color/black"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="40sp" />
style="@style/StatsSpacer"
android:layout_column="3"/>
<TextView
android:gravity="right"
android:id="@+id/average_speed_register"
android:layout_column="4"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<LinearLayout
android:gravity="bottom"
android:layout_column="5"
@@ -217,24 +156,12 @@ limitations under the License.
android:orientation="vertical">
<TextView
android:id="@+id/average_speed_unit_label_top"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="-1dip"
android:layout_marginTop="-1dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
<TextView
android:background="@color/black"
android:layout_height="3dip"
android:layout_width="fill_parent" />
style="@style/StatsDivider" />
<TextView
android:id="@+id/average_speed_unit_label_bottom"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="-1dip"
android:layout_marginTop="-1dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
</LinearLayout>
</TableRow>
@@ -254,33 +181,18 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
android:id="@+id/moving_time_register"
android:layout_column="1"
android:layout_height="wrap_content"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_span="2"
android:layout_width="fill_parent"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:background="@color/black"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="40sp" />
style="@style/StatsSpacer"
android:layout_column="3"/>
<TextView
android:gravity="right"
android:id="@+id/average_moving_speed_register"
android:layout_column="4"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<LinearLayout
android:gravity="bottom"
android:layout_column="5"
@@ -289,24 +201,14 @@ limitations under the License.
android:orientation="vertical">
<TextView
android:id="@+id/average_moving_speed_unit_label_top"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="-1dip"
android:layout_marginTop="-1dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
<TextView
android:background="@color/black"
style="@style/StatsDivider" />
android:layout_height="3dip"
android:layout_width="fill_parent" />
<TextView
android:id="@+id/average_moving_speed_unit_label_bottom"
android:gravity="bottom"
android:layout_height="wrap_content"
android:layout_marginBottom="-1dip"
android:layout_marginTop="-1dip"
android:layout_width="wrap_content"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnit" />
</LinearLayout>
</TableRow>
@@ -326,46 +228,24 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
android:id="@+id/elevation_register"
android:layout_column="1"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:gravity="left"
android:id="@+id/elevation_unit_label"
android:layout_column="2"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/feet"
android:textColor="@color/stat_label_text"/>
style="@style/StatsUnitSolo" />
<TextView
android:background="@color/black"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="40sp" />
style="@style/StatsSpacer"
android:layout_column="3"/>
<TextView
android:gravity="right"
android:id="@+id/elevation_gain_register"
android:layout_column="4"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:gravity="right"
android:id="@+id/elevation_gain_unit_label"
android:layout_column="5"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/feet"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnitSolo" />
</TableRow>
<!-- Min and max elevation -->
@@ -384,46 +264,24 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
android:id="@+id/min_elevation_register"
android:layout_column="1"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:gravity="left"
android:id="@+id/min_elevation_unit_label"
android:layout_column="2"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/feet"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnitSolo" />
<TextView
android:background="@color/black"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="40sp" />
style="@style/StatsSpacer"
android:layout_column="3"/>
<TextView
android:gravity="right"
android:id="@+id/max_elevation_register"
android:layout_column="4"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:gravity="right"
android:id="@+id/max_elevation_unit_label"
android:layout_column="5"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:text="@string/feet"
android:textColor="@color/stat_label_text" />
style="@style/StatsUnitSolo" />
</TableRow>
<!-- Min and max grade -->
@@ -442,36 +300,18 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
android:id="@+id/min_grade_register"
android:layout_column="1"
android:layout_height="wrap_content"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="fill_parent"
android:layout_span="2"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
<TextView
android:background="@color/black"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="40sp" />
style="@style/StatsSpacer"
android:layout_column="3"/>
<TextView
android:gravity="right"
android:id="@+id/max_grade_register"
android:layout_column="4"
android:layout_height="wrap_content"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="fill_parent"
android:layout_span="2"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="40sp" />
style="@style/StatsRegister" />
</TableRow>
<!-- Latitude and Longitude -->
@@ -488,36 +328,19 @@ limitations under the License.
<TableRow
android:background="@color/stat_label_background">
<TextView
android:gravity="right"
android:id="@+id/latitude_register"
android:layout_column="1"
android:layout_height="wrap_content"
android:layout_marginBottom="-5dip"
android:layout_marginTop="-5dip"
android:layout_width="fill_parent"
android:layout_span="2"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="25sp" />
style="@style/StatsRegister.Small" />
<TextView
android:background="@color/black"
style="@style/StatsSpacer"
android:layout_column="3"
android:layout_marginBottom="-9dip"
android:layout_marginTop="-9dip"
android:layout_width="5dip"
android:textSize="25sp" />
<TextView
android:gravity="right"
android:id="@+id/longitude_register"
android:layout_column="4"
android:layout_height="wrap_content"
android:layout_marginBottom="-5dip"
android:layout_marginTop="-5dip"
android:layout_width="fill_parent"
android:layout_span="2"
android:text="@string/unknown"
android:textColor="@color/stat_label_text"
android:textSize="25sp" />
style="@style/StatsRegister.Small" />
</TableRow>
</TableLayout>
+9 -5
View File
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_start_recording"
android:icon="@drawable/menu_record"
android:icon="@drawable/ic_menu_recordtrack"
android:title="@string/start_recording"/>
<item android:id="@+id/menu_stop_recording"
android:icon="@drawable/menu_stop"
android:icon="@drawable/ic_menu_stoprecording"
android:title="@string/stop_recording"/>
<item android:id="@+id/menu_list_tracks"
android:icon="@drawable/menu_list_tracks"
android:icon="@drawable/ic_menu_tracklist"
android:title="@string/list_tracks"/>
<item android:id="@+id/menu_list_markers"
android:icon="@drawable/menu_marker"
android:icon="@drawable/ic_menu_waypoints"
android:title="@string/list_markers"/>
<item android:id="@+id/menu_settings"
@@ -22,10 +22,14 @@
android:title="@string/settings"/>
<item android:id="@+id/menu_aggregated_stats"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="1002"
android:title="@string/aggregated_stats"/>
<item android:id="@+id/menu_sensor_state"
android:icon="@drawable/ic_menu_sensorstatus"
android:orderInCategory="1000"
android:title="@string/sensor_state"/>
<item android:id="@+id/menu_help"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="1003"
+292
View File
@@ -0,0 +1,292 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- Task frequency -->
<string-array name="task_frequency_options">
<item>Inactiu</item>
<item>1 min</item>
<item>2 min</item>
<item>5 min</item>
<item>10 min</item>
<item>15 min</item>
<item>30 min</item>
<item>60 min</item>
</string-array>
<!-- Minimum recording distance -->
<string-array name="min_recording_distance_options">
<item>1 m</item>
<item>2 m</item>
<item>3 m</item>
<item>4 m</item>
<item>5 m (recomanat)</item>
<item>10 m</item>
<item>100 m</item>
</string-array>
<string-array name="min_recording_distance_options_ft">
<item>3 ft</item>
<item>6 ft</item>
<item>10 ft</item>
<item>13 ft</item>
<item>16 ft (recomanat)</item>
<item>33 ft</item>
<item>328 ft</item>
</string-array>
<!-- Maximum recording distance -->
<string-array name="max_recording_distance_options">
<item>50 m</item>
<item>100 m</item>
<item>200 m (recomanat)</item>
<item>500 m</item>
<item>1000 m</item>
<item>5000 m</item>
</string-array>
<string-array name="max_recording_distance_options_ft">
<item>164 ft</item>
<item>328 ft</item>
<item>656 ft (recomanat)</item>
<item>1640 ft</item>
<item>0.6 miles</item>
<item>3.1 miles</item>
</string-array>
<!-- Minimum recording interval -->
<string-array name="min_recording_interval_options">
<item>poca precisió (adaptable)</item>
<item>gran precisió (adaptable)</item>
<item>el millor (recomanat)</item>
<item>2 s</item>
<item>3 s</item>
<item>4 s</item>
<item>5 s</item>
<item>10 s</item>
<item>20 s</item>
<item>30 s</item>
<item>1 min</item>
<item>2 min</item>
<item>5 min</item>
<item>10 min</item>
<item>15 min</item>
<item>30 min</item>
</string-array>
<!-- Minimum required accuracy -->
<string-array name="min_required_accuracy_options">
<item>10 m (senyal GPS excel·lent)</item>
<item>20 m</item>
<item>50 m</item>
<item>100 m</item>
<item>200 m (recomanat)</item>
<item>500 m</item>
<item>1000 m</item>
<item>2000 m</item>
<item>5000 m (senyal GPS pobre)</item>
</string-array>
<string-array name="min_required_accuracy_options_ft">
<item>33 ft (senyal GPS excel·lent)</item>
<item>66 ft</item>
<item>165 ft</item>
<item>328 ft</item>
<item>656 ft (recomanat)</item>
<item>1640 ft</item>
<item>0.6 miles</item>
<item>1.2 miles</item>
<item>3.1 miles (senyal GPS pobre)</item>
</string-array>
<!-- Split frequency -->
<string-array name="split_frequency_options">
<item>Sense divisió</item>
<item>100 km</item>
<item>50 km</item>
<item>25 km</item>
<item>10 km</item>
<item>5 km</item>
<item>1 km</item>
<item>60 min</item>
<item>30 min</item>
<item>15 min</item>
<item>10 min</item>
<item>5 min</item>
<item>2 min</item>
<item>1 min</item>
</string-array>
<string-array name="split_frequency_options_ft">
<item>No splitting</item>
<item>100 mi</item>
<item>50 mi</item>
<item>25 mi</item>
<item>10 mi</item>
<item>5 mi</item>
<item>1 mi</item>
<item>60 min</item>
<item>30 min</item>
<item>15 min</item>
<item>10 min</item>
<item>5 min</item>
<item>2 min</item>
<item>1 min</item>
</string-array>
<!-- Auto-resume track timeout -->
<string-array name="auto_resume_track_timeout_options">
<item>Mai</item>
<item>5 min</item>
<item>10 min</item>
<item>15 min</item>
<item>Always</item>
</string-array>
<!-- Other non-preference arrays -->
<array name="activity_types">
<item>desconegut</item>
<item>tipus barrejats</item>
<item>altre</item>
<item>córrer</item>
<item>córrer al carrer</item>
<item>pista d\'atletisme</item>
<item>córrer en ruta</item>
<item>a peu</item>
<item>caminar de presa</item>
<item>senderisme</item>
<item>ruta de senderisme</item>
<item>senderisme fora de ruta</item>
<item>escalada</item>
<item>ciclisme</item>
<item>bici al carrer</item>
<item>bici de muntanya</item>
<item>ruta de bici</item>
<item>patinatge</item>
<item>patinatge en línia</item>
<item>skate</item>
<item>snow shoeing</item>
<item>skiing</item>
<item>snow boarding</item>
<item>sled</item>
<item>ice sailing</item>
<item>pesca</item>
<item>rem</item>
<item>caiac</item>
<item>rem</item>
<item>llanxa motora</item>
<item>ferry</item>
<item>RC boat</item>
<item>surf</item>
<item>windsurf</item>
<item>kitesurf</item>
<item>esquí aquàtic</item>
<item>wakeboard</item>
<item>avió</item>
<item>hidroavió</item>
<item>avió comercial</item>
<item>helicòpter</item>
<item>globus aerostàtic</item>
<item>dirigible</item>
<item>avió RC</item>
<item>helicòpter RC</item>
<item>salt d\'esquí</item>
<item>vol sense motor</item>
<item>ala delta</item>
<item>parapent</item>
<item>riding</item>
<item>horse back riding</item>
<item>donkey back riding</item>
<item>conducció d\'automòbil</item>
<item>conducció de bus</item>
<item>tren</item>
<item>moto</item>
<item>dirtbike</item>
<item>ATV</item>
<item>landsailing</item>
<item>frisbee</item>
<item>ultimate frisbee</item>
</array>
<array name="waypoint_types">
<item>ATM</item>
<item>banc</item>
<item>bar</item>
<item>barbeque</item>
<item>edifici</item>
<item>parada de bús</item>
<item>cafeteria</item>
<item>acampada</item>
<item>càmping</item>
<item>església</item>
<item>cafeteria</item>
<item>botiga de conveniència</item>
<item>aigua potable</item>
<item>caiguda de roques</item>
<item>ferry</item>
<item>llar de foc</item>
<item>estació de bombers</item>
<item>pesca</item>
<item>benzinera</item>
<item>camp de golf</item>
<item>botiga de queviures</item>
<item>perruqueria</item>
<item>port</item>
<item>ruta de senderisme</item>
<item>hotel</item>
<item>casa</item>
<item>informació</item>
<item>intersecció</item>
<item>bústia</item>
<item>mercat</item>
<item>punt de trobada</item>
<item>opera</item>
<item>parking</item>
<item>oficina de correus</item>
<item>sot</item>
<item>comissaria dels mossos</item>
<item>encreuament ferroviari</item>
<item>restaurant</item>
<item>compres</item>
<item>vista</item>
<item>magatzem</item>
<item>piscina</item>
<item>telèfon</item>
<item>teatre</item>
<item>serveis</item>
<item>informació turística</item>
<item>túnel</item>
<item>arbre</item>
<item>cascada</item>
<item>font d\'aigua</item>
<item>punt de referència</item>
</array>
<array name="sensor_type_options">
<item>Cap</item>
<item>Zephyr Bluetooth</item>
</array>
</resources>
+413
View File
@@ -0,0 +1,413 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- Used by the Menu -->
<string name="start_recording">Enregistra la ruta</string>
<string name="stop_recording">Atura l\'enregistrament</string>
<string name="switch_to_sat">Mode de satèl·lit</string>
<string name="switch_to_map">Mode de mapa</string>
<string name="mylocation">La meva ubicació</string>
<string name="list_tracks">Rutes</string>
<string name="list_markers">Marcadors</string>
<string name="delete_all_tracks">Elimina totes les rutes</string>
<string name="settings">Paràmetres</string>
<string name="elevation">Elevació</string>
<string name="choose_track_message">Seleccioneu la ruta que es visualitzarà</string>
<string name="current_track">Ruta actual</string>
<string name="current_segment">Darrer segment</string>
<string name="sensor_state">Estat del sensor</string>
<string name="aggregated_stats">Estadístiques agregades</string>
<!-- Error messages -->
<string name="error_no_location_manager">No s\'ha trobat cap gestor d\'ubicacions en aquest dispositiu.</string>
<string name="error_no_gps_location_provider">No s\'ha trobat cap proveïdor d\'ubicació GPS en aquest dispositiu.</string>
<string name="error_sending_to_fusiontables">S\'ha produït un error quan s\'enviava la ruta a Google Fusion Tables. Proveu més tard.</string>
<string name="error_sending_to_docs">S\'ha prdouït un error quan s\'enviava la ruta a Google Docs. Proveu més tard.</string>
<string name="error_unable_to_start_recording">No es pot iniciar l\'enregistrament. Proveu de nou.</string>
<string name="error_unable_to_stop_recording">No es pot aturar l\'enregistrament. Proveu de nou.</string>
<string name="error_unable_to_read_file">No es pot llegir des del fitxer.</string>
<string name="error_invalid_gpx_format">El fitxer no conté un format GPX vàlid.</string>
<string name="error_generic">S\'ha produït un error. Proveu de nou.</string>
<string name="error_track_does_not_exist">No existeix la ruta.</string>
<string name="error_out_of_memory">Aquest fitxer és massa gran (ha d\'ésser inferior a 500KB. S\'està cancel·lant.</string>
<string name="error_unable_to_insert_marker">No es pot inserir un marcador. No hi ha cap ubicació fixa disponible.</string>
<!-- Status messages -->
<string name="wait_for_fix">S\'està esperant per tenir una posició GPS fixa. Assegureu-vos que el cel és visible.</string>
<string name="status_now_recording">Ara s\'està enregistrant una ruta nova.</string>
<string name="status_stopped_recording">S\'ha aturat l\'enregistrament de la ruta.</string>
<string name="status_new_fusiontable_has_been_created">S\'ha creat un Google Fusion Table nou a google.com/fusiontables.</string>
<string name="status_tracks_have_been_uploaded">S\'ha enviat la ruta a maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">S\'ha enviat la ruta a un full de càlcul a docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">S\'ha enviat la ruta a docs.google.com.</string>
<string name="status_enable_gps">Toqueu aquí per anar als paràmetres de seguretat i ubicació i activeu \'habilita els satèl·lits GPS\'. Premeu el botó d\'anar enrere per tornar.</string>
<string name="status_approximate_location">Nota: Es mostra una ubicació determinada a partir de les xarxes sense fils i antenes telefòniques.</string>
<string name="status_no_location">No es pot determinar la ubicació. Habiliteu més fonts d\'ubicació (vegeu els paràmetres de seguretat i ubicació) i assegureu-vos que el cel és visible. Proveu de nou més tard.</string>
<string name="status_waypoint_inserted">S\'ha inserit un marcader de punt de ruta.</string>
<string name="status_statistics_inserted">S\'ha inserit un marcador d\'estadístiques.</string>
<!-- Progress dialog -->
<string name="progress_title">Espereu...</string>
<string name="progress_message">S\'està enviant la ruta a Google.</string>
<string name="progress_message_reading_track">S\'està llegint la ruta...</string>
<string name="progress_message_preparing_track">S\'està preparant la ruta...</string>
<string name="progress_message_authenticating_fusiontables">S\'està to Google Fusion Tables...</string>
<string name="progress_message_authenticating_docs">S\'està autenticant a Google Docs...</string>
<string name="progress_message_sending_docs">S\'està enviant la ruta a Google Docs...</string>
<string name="progress_message_sending_fusiontables">S\'està enviant a Google Fusion Tables...</string>
<string name="progress_message_creating_fusiontable">S\'està creant un Fusion Table nou...</string>
<string name="import_progress_message">S\'està imporant una ruta GPS. Això pot trigar una estona.</string>
<string name="write_progress_message">S\'està escrivint a la targeta SD. Això pot trigar una estona.</string>
<string name="progress_message_updating_track">S\'estan actualitzant les estadístiques de la ruta...</string>
<!-- Used by DeleteAllDataHandler -->
<string name="are_you_sure_question">Esteu segur?</string>
<string name="all_data_will_be_permanently_deleted">Tots els marcadors i rutes s\'eliminaran d\'aquest telèfon.</string>
<string name="track_will_be_permanently_deleted">La ruta i els seus marcadors s\'eliminaran de forma permanent d\'aquest telèfon.</string>
<string name="marker_will_be_permanently_deleted">El marcador s\'eliminarà de forma permanent d\'aquest telèfon.</string>
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">Creat per My Tracks a l\'Android.</string>
<string name="fusiontable_link">Creat per &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; a l\'Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Punts</string>
<string name="recorded_date">Enregistrat</string>
<string name="category">Tipus d\'activitat</string>
<string name="waypoint_category">Tipus de marcador</string>
<string name="part">(Part %d)</string>
<!-- Used by the track recording service -->
<string name="recording_your_track">S\'està enregistrant la ruta...</string>
<string name="new_track">Ruta %d</string>
<!-- Common -->
<string name="no">No</string>
<string name="yes">Sí</string>
<string name="ok">D\'acord</string>
<string name="error">Error</string>
<string name="success">Fet</string>
<string name="waypoint">Punt de referència</string>
<string name="cancel">Cancel·la</string>
<string name="close">Tanca</string>
<string name="edit">Edita</string>
<string name="save">Desa</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Inici)</string>
<string name="end">(Fi)</string>
<!-- TrackList -->
<string name="tracklist_show_track">Mostra</string>
<string name="tracklist_send_to_fusiontables">Envia a Google Fusion Tables</string>
<string name="tracklist_send_to_new_fusiontable">Envia a un Google Fusion Table nou</string>
<string name="tracklist_send_to_docs">Envia a Google Docs</string>
<string name="tracklist_send_to_google">Envia a Google...</string>
<string name="tracklist_delete_track">Elimina del telèfon...</string>
<string name="tracklist_edit_track">Edita els detalls</string>
<string name="tracklist_write_to_sd">Escriu a la targeta SD...</string>
<string name="tracklist_save_as_gpx">Anomena i desa com un fitxer GPX</string>
<string name="tracklist_save_as_kml">Anomena i desa com un fitxer KML</string>
<string name="tracklist_save_as_csv">Anomena i desa com un fitxer CSV</string>
<string name="tracklist_save_as_tcx">Anomena i desa com un fitxer TCX</string>
<string name="tracklist_btn_send_all_to_fusiontables">Envia a Google Fusion Tables</string>
<string name="tracklist_btn_delete_all">Elimina totes les rutes</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Exporta totes les rutes</string>
<string name="export_done">Exporta les finalitzades</string>
<string name="tracklist_pick_one">Seleccioneu una ruta. Mantingueu el dit per veure més opcions.</string>
<string name="tracklist_all_tracks">Totes les rutes:</string>
<string name="tracklist_this_track">Aquesta ruta</string>
<string name="tracklist_share_track">Comparteix amb amics...</string>
<string name="tracklist_share_gpx_file">Un fitxer GPX</string>
<string name="tracklist_share_kml_file">Un fitxer KML</string>
<string name="tracklist_share_csv_file">Un fitxer CSV</string>
<string name="tracklist_share_tcx_file">Un fitxer TCX</string>
<string name="tracklist_clear_map">Neteja el mapa</string>
<!-- Waypoints list -->
<string name="waypointslist_btn_delete_all">Elimina tots els marcadors</string>
<string name="waypointslist_this_waypoint">Aquest marcador</string>
<string name="waypointslist_delete_waypoint">Elimina</string>
<string name="waypointslist_edit_waypoint">Edita els detalls</string>
<string name="waypointslist_show_waypoint">Mostra al mapa</string>
<string name="waypointslist_btn_insert_waypoint">Insereix un punt de referència</string>
<string name="waypointslist_btn_insert_statistics">Insereix estadístiques</string>
<string name="waypointslist_pick_one">Seleccioneu un marcador. Mantingueu el dit per veure més opcions.</string>
<!-- MyTracks Details -->
<string name="trackdetails_title">Detalls de la ruta</string>
<string name="trackdetails_name">Nom de la ruta</string>
<string name="trackdetails_description">Descripció de la ruta</string>
<string name="trackdetails_category">Tipus d\'activitat (p.e. senderisme, bicicleta, còrrer, escalada...)</string>
<!-- MyTracks Waypoint Details -->
<string name="waypointdetails_title">Detalls del marcador</string>
<string name="waypointdetails_name">Nom del marcador</string>
<string name="waypointdetails_description">Descripció del marcador</string>
<string name="waypointdetails_category">Tipus de marcador (e.g. edifici, sot, vista...)</string>
<!-- MyTracks Settings -->
<string name="mytracks_settings">Paràmetres de My Tracks</string>
<string name="settings_display">Visualització</string>
<string name="settings_recording">Enregistrament</string>
<string name="settings_sharing">Compartició</string>
<string name="settings_not_available_summary">No es troba disponible a la vostra versió de l\'Android</string>
<string name="settings_announcement_frequency">Freqüència d\'avís</string>
<string name="settings_announcement_frequency_summary">Temps mínim entre dos avisos de veu</string>
<string name="settings_min_recording_distance">Distància mínima entre punts</string>
<string name="settings_min_recording_distance_summary">La distància més petita entre dos punts enregistrats de la vostra posició</string>
<string name="settings_max_recording_distance">Distància màxima entre punts</string>
<string name="settings_max_recording_distance_summary">Si dos punts estan més lluny d\'això, es dividirà la ruta</string>
<string name="settings_min_recording_interval">Temps mínim entre punts</string>
<string name="settings_min_recording_interval_summary">Interval de temps mínim entre dos enregistraments de la vostra posició</string>
<string name="settings_min_required_accuracy">Precisió mínima</string>
<string name="settings_min_required_accuracy_summary">S\'aturarà l\'enregistrament si la vostra posició no és així de precisa com a mínim</string>
<string name="settings_metric_units">Fes servir unitats mètriques</string>
<string name="settings_metric_units_summary_on">Totes les distàncies es mostraran en unitats mètriques</string>
<string name="settings_metric_units_summary_off">Totes les distàncies es mostraran en unitats imperials</string>
<string name="settings_map_public">Fes el mapa públic</string>
<string name="settings_map_public_summary_on">Els mapes pujats seran visibles per tothom a maps.google.com</string>
<string name="settings_map_public_summary_off">Els mapes pujats no es llistaran públicament a maps.google.com</string>
<string name="settings_report_speed_or_pace">Mostra la velocitat</string>
<string name="settings_report_speed_or_pace_summary_on">Es mostrarà la velocitat</string>
<string name="settings_report_speed_or_pace_summary_off">Es mostrarà el ritme de pas</string>
<string name="settings_share_url_only">Comparteix només l\'URL</string>
<string name="settings_share_url_only_summary_on">Només s\'enviarà l\'URL del mapa quan es comparteixi</string>
<string name="settings_share_url_only_summary_off">També s\'inclouran els continguts de la ruta quan es comparteixi</string>
<string name="settings_split_frequency">Freqüència de divisió</string>
<string name="settings_split_frequency_summary">Temps o distància màxima a partir de la qual s\'insertarà un marcador de divisió nou</string>
<string name="settings_auto_resume_track_timeout">Temps d\'espera per reprende la ruta</string>
<string name="settings_auto_resume_track_timeout_summary">Temps màxim en minuts a partir del qual l\'anterior ruta enregistrada no es reprendrà en actualitzar el telèfon</string>
<string name="settings_timestamp_track_name">Data i hora com a nom de la ruta</string>
<string name="settings_timestamp_track_name_summary_on">El nom per defecte de la ruta serà la data i hora en que s\'ha iniciat.</string>
<string name="settings_timestamp_track_name_summary_off">Els noms de les rutes seran números que s\'incrementaran per a cada nova ruta.</string>
<string name="pace_label">Ritme de pas</string>
<string name="eclair_required">Suportat només en Android 2.0 i superior</string>
<string name="settings_sensor_type">Tipus de sensor</string>
<string name="settings_sensor_type_summary">El tipus de sensor al qual es connecta.</string>
<string name="bluetooth_sensor_title">Sensor bluetooth</string>
<string name="bluetooth_sensor_summary">El sensor bluetooth al qual es connecta.</string>
<string name="settings_modular_stats_display_title">Pantalla d\'estadístiques modulars</string>
<string name="settings_backup">Còpia de seguretat (BETA)</string>
<string name="settings_sd_backup">Còpia de seguretat a la targeta SD</string>
<string name="settings_backup_to_sd">Fes la còpia ara</string>
<string name="settings_backup_to_sd_summary">Escriu una còpia completa de totes les rutes i els paràmetres a la targeta SD</string>
<string name="settings_restore_from_sd">Restaura ara</string>
<string name="settings_restore_from_sd_summary">Restaura totes les rutes i els paràmetres des de la targeta SD.</string>
<string name="settings_no_backup_while_recording">No es poden gestionar les còpies de seguretat mentre s\'enregistra una ruta.</string>
<!-- Backups -->
<string name="restore_overwrites_warning">La restauració d\'una còpia de seguretat des de la targeta SD sobreescriurà totes les rutes i paràmetres. Esteu segur?</string>
<string name="select_backup_to_restore">Seleccioneu la còpia que es restaurarà</string>
<string name="no_backups">No s\'ha trobat cap còpia de seguretat.</string>
<string name="backup_write_progress_message">S\'estan escrivint totes les rutes i els paràmetres a la targeta SD. Això pot trigar una estona...</string>
<string name="backup_import_progress_message">S\'estan llegint totes les rutes i els paràmetres de la targeta SD. Això pot trigar una estona...</string>
<!-- MyTracksSky -->
<string name="mytracks_sky">Satèl·lits GPS</string>
<!-- Sharing -->
<string name="share_map_subject">M\'agradaria compartir un mapa amb tu</string>
<string name="share_map_body_format">Em sembla que estaràs interessat en aquest mapa:
%s</string>
<string name="send_track_subject">M\'agradaria compartir una ruta amb tu</string>
<string name="send_track_body_format">Em sembla que estaràs interessat en aquesta ruta.
Per veure aquesta ruta fes servir Google Earth o altre programari de mapes.</string>
<string name="share_track">Comparteix la ruta amb amics</string>
<!-- Visibility -->
<string name="public_map">Públic</string>
<string name="unlisted_map">No llistat</string>
<string name="mapslist_no_maps_available">Encara no teniu cap mapa.</string>
<!-- Statistics View -->
<!-- Average Moving -->
<string name="average_moving_speed_label">Velocitat mitjana en moviment</string>
<string name="average_moving_pace_label">Ritme mitjà en moviment</string>
<!-- Average -->
<string name="average_speed_label">Velocitat mitjana</string>
<string name="average_pace_label">Ritme de pas mitjà</string>
<string name="elevation_chart_name">Gràfic d\'elevació</string>
<string name="elevation_gain_label">Guany d\'elevació</string>
<string name="elevation_label">Elevació</string>
<string name="latitude_label">Latitud</string>
<string name="longitude_label">Longitud</string>
<!-- Min -->
<string name="min_elevation_label">Elevació mínima</string>
<string name="min_grade_label">Grau mínim</string>
<string name="min_pace_label">Ritme de pas mínima</string>
<!-- Max -->
<string name="max_elevation_label">Elevació màxima</string>
<string name="max_grade_label">Grau màxim</string>
<string name="max_speed_label">Velocitat màxima</string>
<string name="loading_track">S\'està carregant la ruta...</string>
<!-- Chart Settings -->
<string name="chart_settings">Configuració del gràfic</string>
<!-- X Axis -->
<string name="x_axis">Eix X</string>
<string name="by_distance">Per distància</string>
<string name="by_time">Per temps</string>
<!-- Y Axis -->
<string name="y_axis">Eix Y</string>
<!-- Units -->
<!-- Time -->
<string name="hour">hora</string>
<string name="hours">hores</string>
<string name="minute">minut</string>
<string name="minutes">minuts</string>
<string name="second">segon</string>
<string name="seconds">segons</string>
<!-- Distance -->
<string name="kilometers_long">kilòmetres</string>
<string name="miles_long">milles</string>
<!-- Speed and Pace -->
<string name="kilometer_per_hour_long">kilòmetres per hora</string>
<string name="per_kilometer">per kilòmetre</string>
<string name="mile_per_hour_long">milles per hora</string>
<string name="per_mile">per milla</string>
<!-- Stats Labels -->
<string name="moving_time_label">Temps en moviment</string>
<string name="total_time_label">Temps total</string>
<string name="time_label">Temps</string>
<string name="sd_unavail">La targeta SD no està disponible</string>
<string name="speed">Velocitat</string>
<string name="start_trip">Heu d\'iniciar la marxa.</string>
<string name="statistics">Estadístiques</string>
<string name="total_distance_label">Distància total</string>
<string name="distance_label">Distància</string>
<string name="power">Energia</string>
<string name="cadence">Cadència</string>
<string name="heart_rate">Freqüència cardíaca</string>
<string name="max_heart_rate">Freqüència cardíaca màxima</string>
<string name="waiting">S\'està esperant...</string>
<!-- End User License Agreement -->
<string name="eula_title">Acord de llicencia d\'usuari final</string>
<string name="accept">Accepta</string>
<string name="decline">Rebutja</string>
<!-- About -->
<string name="about">Quant a</string>
<string name="help">Ajuda</string>
<string name="about_team">Equip:</string>
<string name="about_version">Versió:</string>
<string name="about_support">Assistència:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Envia a...</string>
<string name="sendtogoogle_send_now">Envia ara</string>
<string name="sendtogoogle_send_stats">Envia les estadístiques de la ruta</string>
<string name="sendtogoogle_send_stats_and_points">Envia les estadístiques i els punts</string>
<!-- Getting the account to upload to. -->
<string name="no_account_found_title">No s\'ha trobat cap compte</string>
<string name="no_account_found">No s\'ha trobat cap compte on pujar les rutes.</string>
<string name="choose_account_title">Trieu un compte</string>
<!-- SD card -->
<string name="io_no_external_storage_found">No s\'ha trobat cap dispositiu d\'emmagatzematge extern. Assegureu-vos que la targeta SD està inserida i que el telèfon no està connectat a un ordinador.</string>
<string name="io_write_failed">No es pot escriure a un fitxer.</string>
<string name="io_read_failed">No es pot llegir des del fitxer.</string>
<string name="io_create_dir_failed">No es pot crear el directori a la targeta SD.</string>
<string name="io_write_finished">S\'ha finalitzat l\'escriptura a la targeta SD.</string>
<string name="io_read_finished">S\'ha finalitzat la lectura a la targeta SD.</string>
<!-- VersionChecker -->
<string name="version_check_title">Comprovació d\'actualitzacions</string>
<string name="version_check_upgrade_button">Actualitza ara</string>
<string name="version_check_continue_button">Continua sense actualitzar</string>
<string name="upgrade_required">La vostra versió de %1$s podria no funcionar correctament a partir d\'ara i no està suportada. Actualitzeu per continuar fent servir %1$s.</string>
<string name="upgrade_recommended">La vostra versió de %1$s podria no funcionar correctament a partir d\'ara. Heu d\'actualitzar-la ara o continuar fent-la servir pel vostre compte. Algunes funcionalitats com la sincronització podrien no funcionar fins que no actualitzeu.</string>
<string name="upgrade_available">Hi ha una nova versió disponible de %1$s. Podeu continuar fent servir la vostra versió sense cap problema, però no aconseguireu les darreres funcionalitats fins que no actualitzeu.</string>
<!-- Welcome -->
<string name="welcome">Benvingut</string>
<string name="welcome_read_later">D\'acord</string>
<string name="welcome_about">Quant a My Tracks</string>
<!-- Announcement -->
<string name="announce_no_distance">Sense distància My Tracks</string>
<!-- Format:
$1 : Distance label
$2 : Distance value (5)
$3 : Distance units (mi, km)
$4 : Time description (10 minutes 5 seconds)
$5 : Speed value (5.6) : Pace value (5 minutes 6 seconds)
$6 : Speed units (mph) : Pace units (per mile)
-->
<string name="announce_template">My Tracks %1$s %2$.2f %3$s en %4$s at %5$s %6$s</string>
<!-- Check Units -->
<string name="check_units_title">Avís de les unitats de mesura</string>
<string name="check_units_message">Les unitats són mètriques per defecte. Voleu canviar aquest paràmetre?</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<string name="bluetooth_options">Opcions del Bluetooth</string>
<string name="bluetooth_pairing">Associació de dispositius</string>
<string name="bluetooth_pairing_summary">Obriu els paràmetres de bluetooth de l\'Android per associar un dispositiu</string>
<string name="sensor_bluetooth_options_key">bluetoothSensorsEnabled</string>
<string name="sensor_options">Opcions del sensor</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">Connectat a %s</string>
<string name="bluetooth_connecting">Connexió del sensor bluetooth...</string>
<string name="bluetooth_not_connected">El sensor bluetooth no està connectat</string>
<!-- Sensor State -->
<string name="sensor_data_time">Dades del sensor de temps</string>
<string name="power_meter_enabled">S\'ha habilitat el mesurador de potència</string>
<string name="heart_rate_monitor_enabled">S\'ha habilitat el monitor de la freqüència cardíaca</string>
<string name="no_sensor_manager">Cap gestor de sensors</string>
<string name="enabled">Habilitat</string>
<string name="connecting">S\'està connectant</string>
<string name="connected">S\'ha connectat</string>
<string name="disconnected">S\'ha desconnectat</string>
<string name="no_sensor_service">Cap servei de sensor</string>
<string name="searching">S\'està cercant</string>
<string name="sending">S\'està enviant</string>
</resources>
+16 -14
View File
@@ -17,7 +17,7 @@ limitations under the License.
<resources>
<!-- Task frequency -->
<string-array name="task_frequency_options">
<item>Off</item>
<item>Aus</item>
<item>1 min</item>
<item>2 min</item>
<item>5 min</item>
@@ -70,8 +70,8 @@ limitations under the License.
<!-- Minimum recording interval -->
<string-array name="min_recording_interval_options">
<item>batterie sparend (adaptiv)</item>
<item>hohe genauigkeit (adaptiv)</item>
<item>batteriesparend (adaptiv)</item>
<item>hohe Genauigkeit (adaptiv)</item>
<item>maximal (empfohlen)</item>
<item>2 s</item>
<item>3 s</item>
@@ -133,12 +133,12 @@ limitations under the License.
<string-array name="split_frequency_options_ft">
<item>Nicht zerteilen</item>
<item>100 meilen</item>
<item>50 meilen</item>
<item>25 meilen</item>
<item>10 meilen</item>
<item>5 meilen</item>
<item>1 meile</item>
<item>100 Meilen</item>
<item>50 Meilen</item>
<item>25 Meilen</item>
<item>10 Meilen</item>
<item>5 Meilen</item>
<item>1 Meile</item>
<item>60 min</item>
<item>30 min</item>
<item>15 min</item>
@@ -159,7 +159,7 @@ limitations under the License.
<item>Laufbahn</item>
<item>Geländelauf</item>
<item>Gehen</item>
<item>Schnelles Gehen</item>
<item>Gehen (Sport)</item>
<item>Wandern</item>
<item>Bergwandern</item>
<item>Bergsteigen</item>
@@ -181,11 +181,11 @@ limitations under the License.
<item>Eissegeln</item>
<item>Segeln</item>
<item>Kanadierfahren</item>
<item>Kajakfahren</item>
<item>Paddeln</item>
<item>Kajak fahren</item>
<item>Kanuwandern</item>
<item>Rudern</item>
<item>Motorbootfahren</item>
<item>Motorboot fahren</item>
<item>Fähre</item>
<item>Ferngesteuertes Boot</item>
<item>Surfen</item>
@@ -229,13 +229,14 @@ limitations under the License.
<item>Bank</item>
<item>Kneipe</item>
<item>Grill</item>
<item>Imbiss</item>
<item>Gebäude</item>
<item>Bushaltestelle</item>
<item>Straßenbahnhaltestelle</item>
<item>Bahnhof</item>
<item>S-Bahnhof</item>
<item>Café</item>
<item>Lagerfeuer</item>
<item>Feuerstelle</item>
<item>Campingplatz</item>
<item>Zeltplatz</item>
<item>Kirche</item>
@@ -278,6 +279,7 @@ limitations under the License.
<item>Tunnel</item>
<item>Baum</item>
<item>Wasserfall</item>
<item>Springbrunnen</item>
<item>Wegpunkt</item>
</array>
+387 -317
View File
@@ -1,347 +1,381 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- Used by the Menu -->
<string name="start_recording">Track aufzeichnen</string>
<string name="stop_recording">Aufzeichnung anhalten</string>
<string name="switch_to_sat">Satellitenansicht</string>
<string name="switch_to_map">Kartenansicht</string>
<string name="mylocation">Mein Aufenthaltsort</string>
-->
<resources>
<!-- Used by the Menu -->
<string name="start_recording">Track aufzeichnen</string>
<string name="stop_recording">Aufzeichnung anhalten</string>
<string name="switch_to_sat">Satellitenansicht</string>
<string name="switch_to_map">Kartenansicht</string>
<string name="mylocation">Mein Aufenthaltsort</string>
<string name="list_markers">Wegpunkte</string>
<string name="delete_all_tracks">Alle Tracks löschen</string>
<string name="settings">Einstellungen</string>
<string name="elevation">Höhe</string>
<string name="choose_track_message">Bitte wählen Sie einen Track zur Ansicht aus</string>
<string name="current_track">Aktueller Track</string>
<string name="current_segment">Letztes Segment</string>
<!-- Error messages -->
<string name="error_no_location_manager">Es wurde kein \'Location Manager\' auf diesem Gerät gefunden.</string>
<string name="error_no_gps_location_provider">Konnte keinen GPS-Empfänger auf diesem Gerät finden.</string>
<string name="error_sending_to_mymap">Beim Senden Ihres Tracks an Google My Maps ist ein Fehler aufgetreten. Bitte versuchen Sie es später nochmal.</string>
<string name="error_sending_to_docs">Beim Senden Ihres Tracks an Google Docs ist ein Fehler aufgetreten. Bitte versuchen Sie es später nochmal.</string>
<string name="error_unable_to_start_recording">Aufzeichnen fehlgeschlagen. Bitte versuchen Sie es nochmal.</string>
<string name="error_unable_to_stop_recording">Anhalten unmöglich. Bitte versuchen Sie es nochmal.</string>
<string name="error_unable_to_read_file">Datei nicht lesbar.</string>
<string name="error_invalid_gpx_format">Datei ist nicht im GPX-Format.</string>
<string name="error_generic">Ein Fehler ist aufgetreten. Bitte versuchen Sie es nochmal.</string>
<string name="error_track_does_not_exist">Track existiert nicht.</string>
<string name="error_out_of_memory">Die Datei ist zu groß (Obergrenze sind 500 KB). Operation abgebrochen.</string>
<string name="error_unable_to_insert_marker">Der Wegpunkt kann nicht einfügt werden. Keine Positionsbestimmung möglich.</string>
<!-- Status messages -->
<string name="wait_for_fix">Warten auf ein besseres GPS-Signal. Bitte stellen Sie sicher, dass der Himmel sichtbar ist.</string>
<string name="status_now_recording">Ein neuer Track wird aufgezeichnet.</string>
<string name="status_stopped_recording">Die Aufzeichnung wurde beendet.</string>
<string name="status_new_mymap_has_been_created">Eine neue Karte wurde auf maps.google.com erstellt.</string>
<string name="status_tracks_have_been_uploaded">Ihr Track wurde auf maps.google.com gespeichert.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Ihr Track wurde in einer neuen Tabelle bei docs.google.com gespeichert.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Ihr Track wurde an docs.google.com gesendet.</string>
<string name="status_mymap_info">Manchmal dauert es ein paar Minuten, bis neue Tracks bei maps.google.com erscheinen.</string>
<string name="status_enable_gps">Berühren Sie hier um zu den Sicherheits- und Positionseinstellungen zu gelangen. Aktiviere \'GPS-Satelliten\'. Drücken Sie dann den Zurück-Knopf um zurückzukehren.</string>
<string name="status_approximate_location">Anmerkung: Eine ungefähre Position wird angezeigt, bestimmt mittels Funktürmen und WiFi-Netzwerken.</string>
<string name="status_no_location">Ihre Position kann derzeit nicht bestimmt werden. Aktivieren Sie mehr Positionsquellen (siehe Sicherheits- und Positionseinstellungen) und stellen Sie sicher, dass der Himmel sichtbar ist.</string>
<string name="status_waypoint_inserted">Ein Wegpunkt wurde eingefügt.</string>
<string name="status_statistics_inserted">Ein Statistikwegpunkt wurde eingefügt.</string>
<!-- Progress dialog -->
<string name="progress_title">Bitte warten…</string>
<string name="progress_message">Ihr GPS-Track wird an Google gesendet.</string>
<string name="progress_message_reading_track">Lese Track</string>
<string name="progress_message_preparing_track">Bereite Track vor</string>
<string name="progress_message_authenticating_mymaps">Anmelden bei Google Maps</string>
<string name="progress_message_authenticating_docs">Anmelden bei Google Docs</string>
<string name="progress_message_sending_docs">Track an Google Docs senden</string>
<string name="progress_message_sending_mymaps">Track an Google Maps senden</string>
<string name="progress_message_creating_map">Neue \'Meine Karte\' erstellen</string>
<string name="import_progress_message">Importiere GPS-Track. Das dauert ein wenig.</string>
<string name="write_progress_message">Schreibe Datei auf SD-Karte. Das dauert ein wenig.</string>
<string name="progress_message_updating_track">Aktualisiere Trackstatistik</string>
<!-- Used by DeleteAllDataHandler -->
<string name="are_you_sure_question">Bist Du Dir wirklich sicher?</string>
<string name="all_data_will_be_permanently_deleted">Alle Tracks und Wegpunkte werden endgültig von diesem Gerät gelöscht.</string>
<string name="track_will_be_permanently_deleted">Dieser Track und seine Wegpunkte werden endgültig von diesem Gerät gelöscht.</string>
<string name="marker_will_be_permanently_deleted">Dieser Wegpunkt wird endgültig von diesem Gerät gelöscht.</string>
<!-- Text and links when uploading to Google MyMaps -->
<string name="new_map_title">Neue Karte</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Punkte</string>
<string name="recorded_date">Aufgezeichnet am</string>
<string name="category">"Aktivität"</string>
<string name="waypoint_category">"Art des Wegpunktes"</string>
<string name="part">"(Teil %d)"</string>
<!-- Used by the track recording service -->
<string name="recording_your_track">"Ihr Track wird aufgezeichnet…"</string>
<!-- Common -->
<string name="no">Nein</string>
<string name="yes">Ja</string>
<string name="error">Fehler</string>
<string name="success">Erfolgreich</string>
<string name="waypoint">Wegpunkt</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Anfang)</string>
<string name="end">(Ende)</string>
<!-- TrackList -->
<string name="tracklist_show_track">Anzeigen</string>
<string name="tracklist_send_to_mymaps">An eine Google MyMaps-Karte senden</string>
<string name="tracklist_send_to_new_mymap">An eine neue Google MyMaps-Karte senden</string>
<string name="tracklist_send_to_docs">An Google Docs senden</string>
<string name="tracklist_send_to_google">An Google senden…</string>
<string name="tracklist_delete_track">Vom Gerät löschen…</string>
<string name="tracklist_edit_track">Bearbeiten</string>
<string name="tracklist_write_to_sd">Auf SD-Karte speichern…</string>
<string name="tracklist_save_as_gpx">GPX-Datei exportieren</string>
<string name="tracklist_save_as_kml">KML-Datei exportieren</string>
<string name="tracklist_btn_send_all_to_mymaps">An Google MyMaps senden</string>
<string name="tracklist_btn_delete_all">Alle Tracks löschen</string>
<string name="tracklist_pick_one">Eine Track auswählen. Lange berühren für mehr Optionen.</string>
<string name="tracklist_all_tracks">Alle Tracks:</string>
<string name="tracklist_this_track">Dieser Track</string>
<string name="tracklist_share_track">Mit Freunden teilen…</string>
<string name="tracklist_share_link">Ein Link zur Google MyMaps-Karte</string>
<string name="tracklist_share_gpx_file">Eine GPX-Datei</string>
<string name="tracklist_share_kml_file">Eine KML-Datei</string>
<string name="tracklist_clear_map">Karte zurücksetzen.</string>
<!-- Waypoints list -->
<string name="waypointslist_btn_delete_all">Alle Wegpunkte löschen</string>
<string name="waypointslist_this_waypoint">Dieser Wegpunkt</string>
<string name="waypointslist_delete_waypoint">Löschen</string>
<string name="waypointslist_edit_waypoint">Details bearbeiten</string>
<string name="waypointslist_show_waypoint">Auf der Karte zeigen</string>
<string name="waypointslist_btn_insert_waypoint">Wegpunkt einfügen</string>
<string name="waypointslist_btn_insert_statistics">Statistik einfügen</string>
<string name="waypointslist_pick_one">Wegpunkt auswählen. Lange berühren für mehr Optionen.</string>
<!-- MyTracks Details -->
<string name="trackdetails_title">Trackdetails</string>
<string name="trackdetails_name">Name</string>
<string name="trackdetails_description">Beschreibung</string>
<string name="trackdetails_category">Aktivität (z. B. Wandern, Fahrradfahren, Laufen, Klettern…)</string>
<!-- MyTracks Waypoint Details -->
<string name="waypointdetails_title">Wegpunktdetails</string>
<string name="waypointdetails_name">Wegpunktname</string>
<string name="waypointdetails_description">Wegpunktbeschreibung</string>
<string name="waypointdetails_category">Art des Wegpunktes (z. B. Gebäude, Schlagloch, Sehenswürdigkeit…)</string>
<!-- MyTracks Settings -->
<string name="mytracks_settings">Einstellungen für My Tracks</string>
<string name="settings_display">Anzeige</string>
<string name="settings_recording">Aufzeichnen</string>
<string name="settings_sharing">Mit Freunden Teilen</string>
<string name="settings_announcement_frequency">Dauer zwischen Ansagen:</string>
<string name="settings_announcement_frequency_summary">Kürzeste Zeit zwichen zwei Ansagen</string>
<string name="settings_min_recording_distance">Kleinste Entfernung zwischen Punkten:</string>
<string name="settings_min_recording_distance_summary">Kleinste Entfernung zwischen zwei Positionsaufzeichnungen</string>
<string name="settings_max_recording_distance">Neues Segment wenn Punkte weiter entfernt als:</string>
<string name="settings_max_recording_distance_summary">Der Track wird in Zwei geteilt wenn zwei folgende Punkte weiter entfernt sind als hier angegeben.</string>
<string name="settings_min_recording_interval">Aufzeichnungsfrequenz:</string>
<string name="settings_min_recording_interval_summary">Kürzeste Zeit zwischen zwei Positionsaufzeichnungen.</string>
<string name="settings_min_required_accuracy">Aufzeichnung pausieren wenn Genauigkeit kleiner als:</string>
<string name="settings_min_required_accuracy_summary">Die Aufzeichnung wird kurzfristig angehalten, wenn Ihre Position nicht genauer als hier angegeben ermittelt werden kann.</string>
<string name="settings_metric_units">Entfernungen in metrischen Einheiten anzeigen</string>
<string name="settings_metric_units_summary_on">Alle Entfernungen werden in metrischen Einheiten angezeigt.</string>
<string name="settings_metric_units_summary_off">Alle Entfernungen werden in britischen Längeneinheiten angezeigt.</string>
<string name="settings_map_public">Karten auf maps.google.com veröffentlichen</string>
<string name="settings_map_public_summary_on">Hochgeladene Karten auf maps.google.com sind für alle sichtbar.</string>
<string name="settings_map_public_summary_off">Hochgeladene Karten auf maps.google.com werden nicht öffentlich sichtbar aufgelistet.</string>
<string name="settings_report_speed_or_pace">Geschwindigkeitsanzeige:</string>
<string name="settings_report_speed_or_pace_summary_on">Geschwindigkeit wird angezeigt.</string>
<string name="settings_report_speed_or_pace_summary_off">Gangart wird angezeigt.</string>
<string name="settings_share_url_only">Nur URL als Einladung zum Teilen senden</string>
<string name="settings_share_url_only_summary_on">Beim teilen mit Freunden wird nur die Karten URL gesendet.</string>
<string name="settings_share_url_only_summary_off">Beim teilen mit Freunden wird der GPS Track selbst gesendet.</string>
<string name="settings_signal_sampling_frequency">Empfangsstärke Aufzeichnungsfrequenz</string>
<string name="settings_signal_sampling_frequency_summary">Dauer zwischen zwei Aufzeichnungen der Telefonempfangsstärke.</string>
<string name="settings_split_frequency">Zerteilungs Frequenz</string>
<string name="settings_split_frequency_summary">Längste Dauer oder Entfernung nach der automatisch ein Marker eingefügt wird.</string>
<string name="pace_label">Tempo</string>
<!-- MyTracksSky -->
<string name="mytracks_sky">GPS-Satelliten</string>
<!-- MyMaps -->
<string name="select_map_message">Wähle eine Karte von Deinem Konto aus:</string>
<string name="create_new_map">Neue Karte erstellen…</string>
<string name="map_list_title">An Google My Maps senden</string>
<string name="maps_list_loading">Karten werden geladen…</string>
<string name="maps_list_failed">Ihre Karten konnten im Augenblick nicht geladen werden!</string>
<string name="open_map">Diese Karte auswählen</string>
<string name="edit_map_details">Kartendetails bearbeiten</string>
<string name="share_map">Karte mit Freunden teilen</string>
<string name="share_track">Track mit Freunden teilen</string>
<string name="delete_map">Karte vom Konto löschen</string>
<string name="map_title">Kartentitel:</string>
<string name="map_description">Trackbeschreibung:</string>
<string name="map_searchable_edit">Diese Karte und Ihren Inhalt in Suchergebnissen sichtbar machen.</string>
<string name="map_not_searchable_edit">Diese Karte und Ihren Inhalt nicht in Suchergebnissen sichtbar machen.</string>
<string name="map_searchable">Diese Karte und Ihr Inhalt sind in Suchergebnissen sichtbar.</string>
<string name="map_not_searchable">Weder diese Karte noch Ihr Inhalt sind in Suchergebnissen sichtbar, allerdings können Sie trotzdem von anderen durch einen direkten Link angezeigt werden.</string>
<string name="delete_all_tracks">Alle Tracks löschen</string>
<string name="settings">Einstellungen</string>
<string name="elevation">Höhe</string>
<string name="choose_track_message">Bitte wähle einen Track zur Ansicht aus</string>
<string name="current_track">Aktueller Track</string>
<string name="current_segment">Letztes Segment</string>
<string name="sensor_state">Sensorstatus</string>
<string name="aggregated_stats">Aggregierte Statistiken</string>
<!-- Error messages -->
<string name="error_no_location_manager">Es wurde kein Dienst zur Positionsermittlung auf diesem Gerät gefunden.</string>
<string name="error_no_gps_location_provider">Es wurde kein GPS-Empfänger auf diesem Gerät gefunden.</string>
<string name="error_sending_to_fusiontables">Beim Senden des Tracks an Google Fusion Tables ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.</string>
<string name="error_sending_to_docs">Beim Senden des Tracks an Google Docs ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.</string>
<string name="error_unable_to_start_recording">Start der Aufzeichnung fehlgeschlagen. Bitte versuche es noch einmal.</string>
<string name="error_unable_to_stop_recording">Anhalten unmöglich. Bitte versuche es noch einmal.</string>
<string name="error_unable_to_read_file">Konnte Datei nicht lesen.</string>
<string name="error_invalid_gpx_format">Datei ist nicht im GPX-Format.</string>
<string name="error_generic">Ein Fehler ist aufgetreten. Bitte versuche es noch einmal.</string>
<string name="error_track_does_not_exist">Track existiert nicht.</string>
<string name="error_out_of_memory">Die Datei ist zu groß (maximal 500 KB). Operation abgebrochen.</string>
<string name="error_unable_to_insert_marker">Der Wegpunkt kann nicht einfügt werden. Keine Positionsbestimmung möglich.</string>
<!-- Status messages -->
<string name="wait_for_fix">Warte auf ein besseres GPS-Signal. Bitte stelle sicher, dass der Himmel sichtbar ist.</string>
<string name="status_now_recording">Ein neuer Track wird aufgezeichnet.</string>
<string name="status_stopped_recording">Die Aufzeichnung wurde angehalten.</string>
<string name="status_new_fusiontable_has_been_created">Eine neue Tabelle wurde auf google.com/fusiontables erstellt.</string>
<string name="status_tracks_have_been_uploaded">Dein Track wurde auf maps.google.com gespeichert.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Dein Track wurde in einer neuen Tabelle bei docs.google.com gespeichert.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Dein Track wurde an docs.google.com gesendet.</string>
<string name="status_enable_gps">Hier berühren, um zu den Sicherheits- und Positionseinstellungen zu gelangen. Aktiviere \'GPS-Satelliten\'. Drücke dann den Zurück-Knopf, um hierher zurückzukehren.</string>
<string name="status_approximate_location">Anmerkung: Eine ungefähre Position wird angezeigt, bestimmt mittels Mobilfunkstationen und WiFi-Netzwerken.</string>
<string name="status_no_location">Die Position kann derzeit nicht bestimmt werden. Aktiviere mehr Positionsquellen (siehe Sicherheits- und Positionseinstellungen) und stelle sicher, dass der Himmel sichtbar ist.</string>
<string name="status_waypoint_inserted">Ein Wegpunkt wurde eingefügt.</string>
<string name="status_statistics_inserted">Ein Statistikwegpunkt wurde eingefügt.</string>
<!-- Progress dialog -->
<string name="progress_title">Bitte warten…</string>
<string name="progress_message">Dein Track wird an Google gesendet...</string>
<string name="progress_message_reading_track">Lese Track...</string>
<string name="progress_message_preparing_track">Bereite Track vor...</string>
<string name="progress_message_authenticating_fusiontables">Anmeldung bei Google Fusion Tables...</string>
<string name="progress_message_authenticating_docs">Anmeldung bei Google Docs...</string>
<string name="progress_message_sending_docs">Track wird an Google Docs gesendet...</string>
<string name="progress_message_sending_fusiontables">Track wird an Google Fusion Tables gesendet...</string>
<string name="progress_message_creating_fusiontable">Neue \'Fusion Tabelle\' wird erstellt...</string>
<string name="import_progress_message">Importiere GPS-Track. Das kann ein wenig dauern.</string>
<string name="write_progress_message">Schreibe Datei auf SD-Karte. Das kann ein wenig dauern.</string>
<string name="progress_message_updating_track">Aktualisiere Trackstatistik...</string>
<!-- Used by DeleteAllDataHandler -->
<string name="are_you_sure_question">Bist Du Dir wirklich sicher?</string>
<string name="all_data_will_be_permanently_deleted">Alle Tracks und Wegpunkte werden endgültig von diesem Gerät gelöscht.</string>
<string name="track_will_be_permanently_deleted">Dieser Track und seine Wegpunkte werden endgültig von diesem Gerät gelöscht.</string>
<string name="marker_will_be_permanently_deleted">Dieser Wegpunkt wird endgültig von diesem Gerät gelöscht.</string>
<!-- Text and links when uploading to Google Fusion Tables -->
<string name="new_map_description">Erstellt von My Tracks für Android.</string>
<string name="fusiontable_link">Erstellt von &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; für Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Punkte</string>
<string name="recorded_date">Aufgezeichnet am</string>
<string name="category">Aktivität</string>
<string name="waypoint_category">Art des Wegpunktes</string>
<string name="part">(Teil %d)</string>
<!-- Used by the track recording service -->
<string name="recording_your_track">Dein Track wird aufgezeichnet…</string>
<!-- Common -->
<string name="no">Nein</string>
<string name="yes">Ja</string>
<string name="error">Fehler</string>
<string name="success">Erfolgreich</string>
<string name="waypoint">Wegpunkt</string>
<string name="license">Lizenz</string>
<string name="cancel">Abbrechen</string>
<string name="close">Schließen</string>
<string name="edit">Bearbeiten</string>
<string name="cancel">Abbrechen</string>
<string name="save">Sichern</string>
<!-- Sharing -->
<string name="share_map_subject">Ich möchte gerne eine Karte mit Dir teilen.</string>
<!-- Placemark labels for start and end of track -->
<string name="end">(Ende)</string>
<!-- TrackList -->
<string name="tracklist_show_track">Anzeigen</string>
<string name="tracklist_send_to_fusiontables">An eine Google Fusion Tables-Karte senden</string>
<string name="tracklist_send_to_new_fusiontable">An eine neue Google Fusion Tables-Karte senden</string>
<string name="tracklist_send_to_docs">An Google Docs senden</string>
<string name="tracklist_send_to_google">An Google senden…</string>
<string name="tracklist_delete_track">Vom Gerät löschen…</string>
<string name="tracklist_edit_track">Bearbeiten</string>
<string name="tracklist_write_to_sd">Auf SD-Karte speichern…</string>
<string name="tracklist_save_as_gpx">GPX-Datei exportieren</string>
<string name="tracklist_save_as_kml">KML-Datei exportieren</string>
<string name="tracklist_save_as_csv">CSV-Datei exportieren</string>
<string name="tracklist_save_as_tcx">TCX-Datei exportieren</string>
<string name="tracklist_btn_send_all_to_fusiontables">An Google Fusion Tables senden</string>
<string name="tracklist_btn_delete_all">Alle Tracks löschen</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Alle Tracks exportieren</string>
<string name="export_done">Exportieren beendet</string>
<string name="tracklist_pick_one">Einen Track auswählen. Lange berühren für mehr Optionen.</string>
<string name="tracklist_all_tracks">Alle Tracks</string>
<string name="tracklist_this_track">Dieser Track</string>
<string name="tracklist_share_track">Mit Freunden teilen…</string>
<string name="tracklist_share_gpx_file">Eine GPX-Datei</string>
<string name="tracklist_share_kml_file">Eine KML-Datei</string>
<string name="tracklist_share_csv_file">Eine CSV-Datei</string>
<string name="tracklist_share_tcx_file">Eine TCX-Datei</string>
<string name="tracklist_clear_map">Karte zurücksetzen.</string>
<!-- Waypoints list -->
<string name="waypointslist_btn_delete_all">Alle Wegpunkte löschen</string>
<string name="waypointslist_this_waypoint">Dieser Wegpunkt</string>
<string name="waypointslist_delete_waypoint">Löschen</string>
<string name="waypointslist_edit_waypoint">Details bearbeiten</string>
<string name="waypointslist_show_waypoint">Auf der Karte zeigen</string>
<string name="waypointslist_btn_insert_waypoint">Wegpunkt einfügen</string>
<string name="waypointslist_btn_insert_statistics">Statistik einfügen</string>
<string name="waypointslist_pick_one">Wegpunkt auswählen. Lange berühren für mehr Optionen.</string>
<!-- MyTracks Details -->
<string name="trackdetails_title">Trackdetails</string>
<string name="trackdetails_name">Name</string>
<string name="trackdetails_description">Beschreibung</string>
<string name="trackdetails_category">Aktivität (z. B. Wandern, Fahrradfahren, Laufen, Klettern…)</string>
<!-- MyTracks Waypoint Details -->
<string name="waypointdetails_title">Wegpunktdetails</string>
<string name="waypointdetails_name">Wegpunktname</string>
<string name="waypointdetails_description">Wegpunktbeschreibung</string>
<string name="waypointdetails_category">Art des Wegpunktes (z. B. Gebäude, Schlagloch, Sehenswürdigkeit…)</string>
<!-- MyTracks Settings -->
<string name="mytracks_settings">Einstellungen für My Tracks</string>
<string name="settings_display">Anzeige</string>
<string name="settings_recording">Aufzeichnung</string>
<string name="settings_sharing">Mit Freunden teilen</string>
<string name="settings_not_available_summary">In dieser Android-Version nicht verfügbar</string>
<string name="settings_announcement_frequency">Dauer zwischen Ansagen</string>
<string name="settings_announcement_frequency_summary">Kürzeste Zeit zwischen zwei Ansagen</string>
<string name="settings_min_recording_distance">Kleinste Entfernung zwischen Punkten</string>
<string name="settings_min_recording_distance_summary">Kleinste Entfernung zwischen zwei Positionsaufzeichnungen</string>
<string name="settings_max_recording_distance">Neues Segment, wenn Punkte weiter entfernt als</string>
<string name="settings_max_recording_distance_summary">Der Track wird in zwei geteilt, wenn zwei folgende Punkte weiter entfernt sind als hier angegeben.</string>
<string name="settings_min_recording_interval">Aufzeichnungsfrequenz</string>
<string name="settings_min_recording_interval_summary">Kürzeste Zeit zwischen zwei Positionsaufzeichnungen</string>
<string name="settings_min_required_accuracy">Aufzeichnung pausieren, wenn Genauigkeit kleiner als</string>
<string name="settings_min_required_accuracy_summary">Die Aufzeichnung wird kurzfristig angehalten, wenn Deine Position nicht genauer als hier angegeben ermittelt werden kann.</string>
<string name="settings_metric_units">Entfernungen in metrischen Einheiten anzeigen</string>
<string name="settings_metric_units_summary_on">Alle Entfernungen werden in metrischen Einheiten angezeigt.</string>
<string name="settings_metric_units_summary_off">Alle Entfernungen werden in imperialen Längeneinheiten angezeigt.</string>
<string name="settings_map_public">Karten auf maps.google.com veröffentlichen</string>
<string name="settings_map_public_summary_on">Hochgeladene Karten auf maps.google.com sind für alle sichtbar.</string>
<string name="settings_map_public_summary_off">Hochgeladene Karten auf maps.google.com werden nicht öffentlich sichtbar aufgelistet.</string>
<string name="settings_report_speed_or_pace">Geschwindigkeitsanzeige</string>
<string name="settings_report_speed_or_pace_summary_on">Geschwindigkeit wird angezeigt.</string>
<string name="settings_report_speed_or_pace_summary_off">Pace wird angezeigt.</string>
<string name="settings_share_url_only">Nur URL als Einladung zum Teilen senden</string>
<string name="settings_share_url_only_summary_on">Beim Teilen mit Freunden wird nur die Karten-URL gesendet.</string>
<string name="settings_share_url_only_summary_off">Beim Teilen mit Freunden wird der GPS-Track selbst gesendet.</string>
<string name="settings_split_frequency">Zerteilungsfrequenz</string>
<string name="settings_split_frequency_summary">Längste Dauer oder Entfernung, nach der automatisch ein Marker eingefügt wird.</string>
<string name="settings_auto_resume_track_timeout">Zeitbegrenzung der Auto-Wiederaufnahme</string>
<string name="settings_auto_resume_track_timeout_summary">Maximale Zeit in Minuten, nach der eine abgebrochene Aufzeichnung nach einem Telefonneustart wiederaufgenommen wird.</string>
<string name="settings_timestamp_track_name">Zeitstempel als Trackname</string>
<string name="settings_timestamp_track_name_summary_on">Der Trackname wird aus Datum und Zeit zum Aufzeichnungsbeginn zusammengesetzt.</string>
<string name="settings_timestamp_track_name_summary_off">Tracknamen erhalten eine fortlaufende Nummer.</string>
<string name="pace_label">Pace</string>
<string name="eclair_required">Wird nur unter Android 2.0 oder höher unterstützt</string>
<string name="settings_sensor_type">Sensortyp</string>
<string name="settings_sensor_type_summary">Der Typ des zu verbindenden Sensors</string>
<string name="settings_heart_rate_ant_sensor_id">Verbindung mit ANT Herzqrequenzmesser aufheben</string>
<string name="settings_power_ant_sensor_id">Verbindung mit ANT Kraftmesser aufheben</string>
<string name="settings_srm_bridge_ant_sensor_id">Verbindung mit ANT srm bridge aufheben</string>
<string name="settings_ant_not_paired">ANT-Sensor nicht verbunden</string>
<string name="settings_ant_paired">ANT-Sensor verbunden mit: %d</string>
<string name="bluetooth_sensor_title">Bluetooth-Sensor</string>
<string name="bluetooth_sensor_summary">Der zu verbindende Bluetoothsensor</string>
<string name="settings_modular_stats_display_title">Art der Datenanzeige</string>
<!-- Backups -->
<string name="settings_backup">Datensicherung (BETA)</string>
<string name="settings_sd_backup">SD-Karten-Sicherung</string>
<string name="settings_backup_to_sd">Jetzt sichern</string>
<string name="settings_backup_to_sd_summary">Eine Kopie aller Deiner Tracks und Einstellungen auf die SD-Karte schreiben</string>
<string name="settings_restore_from_sd">Jetzt wiederherstellen</string>
<string name="settings_restore_from_sd_summary">Alle Tracks und Einstellungen von der SD-Karte holen.</string>
<string name="settings_no_backup_while_recording">Während ein Track aufgezeichnet wird, kann nicht mit der Datensicherung gearbeitet werden.</string>
<string name="restore_overwrites_warning">Eine Wiederherstellung von der SD-Karte ÜBERSCHREIBT alle vorhandenen Tracks und Einstellungen. Willst Du das wirklich?</string>
<string name="select_backup_to_restore">Wähle die wiederherzustellende Datensicherung aus</string>
<string name="no_backups">Keine Datensicherungen gefunden.</string>
<string name="backup_write_progress_message">Schreibe alle Tracks und Einstellungen auf die SD-Karte. Dies kann eine Weile dauern...</string>
<string name="backup_import_progress_message">Lese alle Tracks und Einstellungen von der SD-Karte. Dies kann eine Weile dauern...</string>
<!-- MyTracksSky -->
<string name="mytracks_sky">GPS-Satelliten</string>
<!-- Sharing -->
<string name="share_map">Karte mit Freunden teilen</string>
<string name="share_map_subject">Ich möchte gerne eine Karte mit Dir teilen.</string>
<string name="share_map_body_format">Vielleicht interessierst Du Dich für diese Karte:
%s</string>
<string name="send_track_subject">Ich möchte einen GPS-Track mit Dir teilen</string>
%s</string>
<string name="send_track_subject">Ich möchte einen GPS-Track mit Dir teilen</string>
<string name="send_track_body_format">Vielleicht interessierst Du Dich für diese Track:
%s.</string>
<string name="share_track">Track mit Freunden teilen</string>
<!-- Visibility -->
<string name="public_map">Öffentlich</string>
<string name="unlisted_map">Nicht in Suchergebnissen enthalten.</string>
<string name="mapslist_no_maps_available">Du hast noch keine Karten.</string>
<!-- Statistics View -->
<!-- Average Moving -->
<string name="average_moving_speed_label">Durchschnitt in Bew.</string>
<string name="average_moving_pace_label">Durchschnitt in Bew.</string>
<!-- Average -->
<string name="average_speed_label">Durchschnittsgeschw.</string>
<string name="average_pace_label">Durchschnittstempo</string>
<string name="elevation_chart_name">Höhenprofil</string>
<string name="elevation_gain_label">Höhengewinn</string>
<string name="elevation_label">Höhe</string>
<string name="latitude_label">Breitengrad</string>
<string name="longitude_label">Längengrad</string>
<!-- Min -->
<string name="min_elevation_label">Niedrigste Höhenlage</string>
<string name="min_grade_label">Minimale Steigung</string>
<string name="min_pace_label">Schnellstes Tempo</string>
<!-- Max -->
<string name="max_elevation_label">Höchste Höhenlage</string>
<string name="max_grade_label">Maximale Steigung</string>
<string name="max_speed_label">Max. Geschwindigkeit</string>
<string name="loading_track">Lade Track…</string>
<!-- Chart Settings -->
<string name="chart_settings">Diagram Einstellungen</string>
<!-- X Axis -->
<string name="x_axis">X Achse</string>
<string name="by_distance">Nach Entfernung</string>
<string name="by_time">Nach Zeit</string>
<!-- Y Axis -->
<string name="y_axis">Y Achse</string>
<!-- Units -->
<!-- Time -->
<string name="hour">Stunde</string>
<string name="hours">Stunden</string>
<string name="hr">Std</string>
<string name="minute">Minute</string>
<string name="minutes">Minuten</string>
<string name="second">Sekunde</string>
<string name="seconds">Sekunden</string>
<!-- Distance -->
<string name="feet">Fuß</string>
<!-- Statistics View -->
<!-- Average Moving -->
<string name="average_moving_speed_label">Durchschnitt in Bew.</string>
<string name="average_moving_pace_label">Pace in Bew.</string>
<!-- Average -->
<string name="average_speed_label">Durchschnittsgeschw.</string>
<string name="average_pace_label">Durchschnitts-Pace</string>
<string name="elevation_chart_name">Höhenprofil</string>
<string name="elevation_gain_label">Höhengewinn</string>
<string name="elevation_label">Höhe</string>
<string name="latitude_label">Breitengrad</string>
<string name="longitude_label">Längengrad</string>
<!-- Min -->
<string name="min_elevation_label">Niedrigste Höhenlage</string>
<string name="min_grade_label">Minimale Steigung</string>
<string name="min_pace_label">Minimaler Pace</string>
<!-- Max -->
<string name="max_elevation_label">Höchste Höhenlage</string>
<string name="max_grade_label">Maximale Steigung</string>
<string name="max_speed_label">Max. Geschwindigkeit</string>
<string name="loading_track">Lade Track…</string>
<!-- Chart Settings -->
<string name="chart_settings">Diagramm-Einstellungen</string>
<!-- X Axis -->
<string name="x_axis">X-Achse</string>
<string name="by_distance">Nach Entfernung</string>
<string name="by_time">Nach Zeit</string>
<!-- Y Axis -->
<string name="y_axis">Y-Achse</string>
<!-- Units -->
<!-- Time -->
<string name="hour">Stunde</string>
<string name="hours">Stunden</string>
<string name="hr">Std</string>
<string name="minute">Minute</string>
<string name="minutes">Minuten</string>
<string name="second">Sekunde</string>
<string name="seconds">Sekunden</string>
<!-- Distance -->
<string name="kilometers_long">Kilometer</string>
<string name="miles_long">Meilen</string>
<string name="feet">Fuß</string>
<string name="miles_long">Meilen</string>
<!-- Speed and Pace -->
<string name="kilometer_per_hour_long">Kilometer pro Stunde</string>
<string name="per_kilometer">pro Kilometer</string>
<string name="per_kilometer">pro Kilometer</string>
<string name="mile_per_hour_long">Meilen pro Stunde</string>
<string name="per_mile">pro meile</string>
<!-- Stats Labels -->
<string name="moving_time_label">Zeit in Bewegung</string>
<string name="total_time_label">Gesamtzeit</string>
<string name="time_label">Zeit</string>
<string name="sd_unavail">SD-Karte nicht verfügbar</string>
<string name="speed">Geschwindigkeit</string>
<string name="start_trip">Sie müssen erst eine Strecke zurücklegen.</string>
<string name="statistics">Statistik</string>
<string name="total_distance_label">Gesamtentfernung</string>
<string name="distance_label">Entfernung</string>
<string name="waiting">Bitte warten…</string>
<!-- End User License Agreement -->
<string name="eula_title">Lizenzvereinbarung für Endverbraucher</string>
<string name="accept">Akzeptieren</string>
<string name="decline">Ablehnen</string>
<!-- About -->
<string name="about">Über</string>
<string name="help">Hilfe</string>
<string name="about_email">Unterstützung</string>
<string name="per_mile">pro Meile</string>
<!-- Stats Labels -->
<string name="moving_time_label">Zeit in Bewegung</string>
<string name="total_time_label">Gesamtzeit</string>
<string name="time_label">Zeit</string>
<string name="sd_unavail">SD-Karte nicht verfügbar</string>
<string name="speed">Geschwindigkeit</string>
<string name="start_trip">Du musst erst eine Aufzeichnung beginnen.</string>
<string name="statistics">Statistik</string>
<string name="total_distance_label">Gesamtentfernung</string>
<string name="distance_label">Entfernung</string>
<string name="power">Kraft</string>
<string name="cadence">Kadenz</string>
<string name="heart_rate">Herzfrequenz</string>
<string name="max_heart_rate">Höchste Herzfrequenz</string>
<string name="waiting">Bitte warten…</string>
<!-- End User License Agreement -->
<string name="eula_title">Lizenzvereinbarung für Endverbraucher</string>
<string name="accept">Akzeptieren</string>
<string name="decline">Ablehnen</string>
<!-- About -->
<string name="about">Über</string>
<string name="help">Hilfe</string>
<string name="about_support">Unterstützung:</string>
<string name="about_privacy">Datenschutz:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Senden an…</string>
<string name="sendtogoogle_send_now">Jetzt senden</string>
<string name="sendtogoogle_create_new_map">Neue Karte erstellen</string>
<string name="sendtogoogle_pick_existing_map">Eine Karte auswählen</string>
<string name="sendtogoogle_send_stats">Trackstatistik senden</string>
<string name="sendtogoogle_send_stats_and_points">Statistik und Punkte senden</string>
<!-- Getting the account to upload to. -->
<string name="no_account_found_title">Kein Konto vorhanden</string>
<string name="no_account_found">Kein Konto gefunden um Tracks zu versenden.</string>
<string name="choose_account_title">Wählen Sei ein Konto</string>
<!-- SD card -->
<string name="io_no_external_storage_found">Keine externes Speichermedium verfügbar. Stellen Sie sicher, dass eine SD-Karte vorhanden ist und nicht bereits von einem Computer darauf zugegriffen wird.</string>
<string name="io_write_failed">Die Datei kann nicht geschrieben werden.</string>
<string name="io_create_dir_failed">Das Verzeichnis auf der SD-Karte kann nicht erstellt werden.</string>
<string name="io_write_finished">Der Track wurde auf die SD-Karte geschrieben.</string>
<!-- VersionChecker -->
<string name="version_check_title">Suche nach neuer Version</string>
<string name="version_check_upgrade_button">Jetzt aktualisieren</string>
<string name="version_check_continue_button">Fortfahren ohne zu aktualisieren</string>
<string name="upgrade_required">Ihre Version von %1$s funktioniert möglicherweise nicht mehr richtig und wird nicht mehr unterstützt. Bitte aktualisieren Sie %1$s.</string>
<string name="upgrade_recommended">Ihre Version von %1$s funktioniert möglicherweise nicht mehr richtig. Sie können sie jetzt aktualisieren, oder auf sie auf eigene Gefahr weiterverwenden. Einige Funktionen wie Datenaustausch mit Google-Diensten wird möglicherweise nicht mehr funktionieren, solange Sie die Software nicht aktualisieren.</string>
<string name="upgrade_available">Eine neue Version von %1$s ist jetzt verfügbar. Sie können Ihre aktuelle Version ohne Probleme weiterverwenden, aber um die neuesten Funktionen in Anspruch nehmen zu können, müssen sie die Software aktualisieren.</string>
<!-- Welcome -->
<string name="welcome">Willkommen</string>
<string name="welcome_about">Über My Tracks</string>
<!-- Announcement -->
<string name="announce_no_distance">My Tracks keine Entfernung</string>
<string name="sendtogoogle_google_docs">Google Text &amp; Tabellen</string>
<string name="sendtogoogle_send_now">Jetzt senden</string>
<string name="sendtogoogle_send_stats">Trackstatistik senden</string>
<string name="sendtogoogle_send_stats_and_points">Statistik und Punkte senden</string>
<!-- Getting the account to upload to. -->
<string name="no_account_found_title">Kein Konto vorhanden</string>
<string name="no_account_found">Kein Konto gefunden, um Tracks zu versenden.</string>
<string name="choose_account_title">Wähle ein Konto</string>
<!-- SD card -->
<string name="io_no_external_storage_found">Keine externes Speichermedium verfügbar. Stelle sicher, dass eine SD-Karte vorhanden ist und nicht bereits von einem Computer darauf zugegriffen wird.</string>
<string name="io_write_failed">Die Datei kann nicht geschrieben werden.</string>
<string name="io_read_failed">Die Datei konnte nicht gelesen werden.</string>
<string name="io_create_dir_failed">Das Verzeichnis auf der SD-Karte kann nicht erstellt werden.</string>
<string name="io_write_finished">Der Track wurde auf die SD-Karte geschrieben.</string>
<string name="io_read_finished">Lesen von der SD-Karte beendet.</string>
<!-- VersionChecker -->
<string name="version_check_title">Suche nach neuer Version</string>
<string name="version_check_upgrade_button">Jetzt aktualisieren</string>
<string name="version_check_continue_button">Fortfahren, ohne zu aktualisieren</string>
<string name="upgrade_required">Deine Version von %1$s funktioniert möglicherweise nicht mehr richtig und wird nicht mehr unterstützt. Bitte aktualisiere %1$s.</string>
<string name="upgrade_recommended">Deine Version von %1$s funktioniert möglicherweise nicht mehr richtig. Du kannst sie jetzt aktualisieren, oder auf sie auf eigene Gefahr weiterverwenden. Einige Funktionen wie Datenaustausch mit Google-Diensten werden möglicherweise nicht mehr funktionieren, solange Du die Software nicht aktualisierst.</string>
<string name="upgrade_available">Eine neue Version von %1$s ist jetzt verfügbar. Du kannst Deine installierte Version ohne Probleme weiterverwenden, aber um die neuesten Funktionen in Anspruch nehmen zu können, musst Du die Software aktualisieren.</string>
<!-- Welcome -->
<string name="welcome">Willkommen</string>
<string name="welcome_read_later">OK</string>
<string name="welcome_about">Über My Tracks</string>
<!-- Announcement -->
<string name="announce_no_distance">My Tracks keine Entfernung</string>
<!-- Format:
$1 : Distance label
$2 : Distance value (5)
@@ -349,6 +383,42 @@ limitations under the License.
$4 : Time description (10 minutes 5 seconds)
$5 : Speed value (5.6) : Pace value (5 minutes 6 seconds)
$6 : Speed units (mph) : Pace units (per mile)
-->
<string name="announce_template">My Tracks %1$s %2$.2f %3$s in %4$s mit %5$s %6$s</string>
</resources>
-->
<string name="announce_template">My Tracks %1$s %2$.2f %3$s in %4$s mit %5$s %6$s</string>
<!-- Check Units -->
<string name="check_units_title">Einheitenbenachrichtigung</string>
<string name="check_units_message">Voreingestellt sind metrische Einheiten. Willst Du diese Einstellung ändern?</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<string name="bluetooth_options">Bluetooth-Einstellungen</string>
<string name="bluetooth_pairing">Geräteverbindung</string>
<string name="bluetooth_pairing_summary">Öffnet Androids Bluetooth-Einstellungen, um Geräte zu verbinden.</string>
<string name="sensor_options">Sensor-Einstellungen</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">Verbunden mit %s</string>
<string name="bluetooth_connecting">Verbinde mit Bluetooth-Sensor ...</string>
<string name="bluetooth_not_connected">Bluetooth-Sensor nicht verbunden.</string>
<!-- Sensor State -->
<string name="sensor_data_time">Uhrzeit</string>
<string name="power_meter_enabled">Kraftmesser aktiviert</string>
<string name="heart_rate_monitor_enabled">Herzfrequenzmessung aktiviert</string>
<string name="no_sensor_manager">Keine Sensoren verfügbar</string>
<string name="enabled">Aktiviert</string>
<string name="connecting">Verbinde...</string>
<string name="connected">Verbunden</string>
<string name="disconnected">Getrennt</string>
<string name="no_sensor_service">Kein Sensor-Dienst</string>
<string name="searching">Suche...</string>
<string name="sending">Sende...</string>
<!-- Manifest description (not seen inside the app) -->
<string name="notification_permission_label">Track-Aufzeichnungs-Benachrichtigungen empfangen</string>
<string name="read_tracks_permission_label">Aufgezeichnete Trackdaten lesen</string>
<string name="write_tracks_permission_label">Aufgezeichnete Trackdaten schreiben, Starten/Anhalten des Aufzeichnens von Tracks</string>
<string name="notification_permission_description">Werde benachrichtigt, wenn die Aufzeichnung eines Tracks beginnt oder anhält.</string>
<string name="read_tracks_permission_description">Ermöglicht das Lesen von Trackdaten wie Messpunkten oder Wegpunkten.</string>
<string name="write_tracks_permission_description">Ermöglicht das Schreiben von Trackdaten wie beim Starten der Aufzeichnung oder beim Hinzufügen von Wegpunkten.</string>
</resources>
+153
View File
@@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- Other non-preference arrays -->
<array name="activity_types">
<item>desconocido</item>
<item>tipo mixto</item>
<item>otro</item>
<item>correr</item>
<item>correr en calle</item>
<item>correr en pista</item>
<item>correr en senda</item>
<item>caminar</item>
<item>caminar rápido</item>
<item>excursión</item>
<item>excursión por sendas</item>
<item>excursión campo a través</item>
<item>escalando</item>
<item>bicicleta</item>
<item>bicicleta de carreras</item>
<item>bicicleta de montaña</item>
<item>bicicleta de pista</item>
<item>patinando</item>
<item>patinando inline</item>
<item>skate boarding</item>
<item>caminata sobre nieve</item>
<item>esquiando</item>
<item>snow boarding</item>
<item>trineo</item>
<item>navegando sobre hielo</item>
<item>navegando</item>
<item>en canoa</item>
<item>en kayak</item>
<item>remo</item>
<item>bote de motor</item>
<item>transbordador</item>
<item>barco teledirigido</item>
<item>surfeando</item>
<item>wind surfing</item>
<item>kite surfing</item>
<item>esquí aquático</item>
<item>wake boarding</item>
<item>avión</item>
<item>hidroavión</item>
<item>avión comercial</item>
<item>helicóptero</item>
<item>globo aerostático</item>
<item>dirigible</item>
<item>avión teledirigido</item>
<item>helicóptero teledirigido</item>
<item>paracaidismo</item>
<item>planeador</item>
<item>hang gliding</item>
<item>para gliding</item>
<item>montando</item>
<item>montando caballo</item>
<item>montando burro</item>
<item>conduciendo coche</item>
<item>conduciendo autobús</item>
<item>tren</item>
<item>moto</item>
<item>moto cross</item>
<item>ATV</item>
<item>navegando sobre tierra</item>
<item>frisbee</item>
<item>ultimate frisbee</item>
</array>
<array name="waypoint_types">
<item>cajero automático</item>
<item>banco</item>
<item>bar</item>
<item>barbacoa</item>
<item>edificio</item>
<item>parada de autobús</item>
<item>café</item>
<item>fogata</item>
<item>campamento</item>
<item>iglesia</item>
<item>café</item>
<item>tienda de abarrotes</item>
<item>agua potable</item>
<item>derrumbamiento</item>
<item>transbordador</item>
<item>chimenea</item>
<item>estación de bomberos</item>
<item>pesca</item>
<item>gasolinera</item>
<item>campo de golf</item>
<item>tienda de abarrotes</item>
<item>salon de belleza</item>
<item>puerto</item>
<item>senda</item>
<item>hotel</item>
<item>casa</item>
<item>información</item>
<item>intersección</item>
<item>buzón de correos</item>
<item>mercado</item>
<item>punto de encuentro</item>
<item>ópera</item>
<item>aparcamiento</item>
<item>oficina de correos</item>
<item>bache</item>
<item>comisaría de policía</item>
<item>cruce de vía de tren</item>
<item>restaurante</item>
<item>mall</item>
<item>lugar de interés</item>
<item>tienda</item>
<item>piscina</item>
<item>teléfono</item>
<item>teatro</item>
<item>baño</item>
<item>información turística</item>
<item>túnel</item>
<item>árbol</item>
<item>cascada</item>
<item>fuente de agua</item>
<item>camino</item>
</array>
<array name="sensor_type_options">
<item>Ninguna</item>
<item>ANT+ Sensores</item>
<item>SRM ANT+ Puente</item>
<item>Zephyr Bluetooth</item>
</array>
</resources>
+131
View File
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- Used by the Menu -->
<string name="list_markers">Señales</string>
<!-- Error messages -->
<!-- Status messages -->
<!-- Progress dialog -->
<!-- Used by DeleteAllDataHandler -->
<!-- Text and links when uploading to Google Fusion Tables -->
<!-- Formatting of track and marker descriptions -->
<!-- Used by the track recording service -->
<!-- Common -->
<string name="license">Licencia</string>
<string name="close">Cerrar</string>
<string name="edit">Editar</string>
<string name="save">Guardar</string>
<!-- Placemark labels for start and end of track -->
<!-- TrackList -->
<string name="tracklist_send_to_fusiontables">Enviar a Google Fusion Tables</string>
<string name="tracklist_send_to_new_fusiontable">Enviar a nueva Google Fusion Table</string>
<string name="tracklist_save_as_csv">Guardar en archivo CSV</string>
<string name="tracklist_save_as_tcx">Guardar en archivo TCX</string>
<string name="tracklist_btn_send_all_to_fusiontables">Enviar a Google Fusion Tables</string>
<!-- Export All -->
<string name="tracklist_share_csv_file">Un archivo CSV</string>
<string name="tracklist_share_tcx_file">Un archivo TCX</string>
<!-- Waypoints list -->
<!-- MyTracks Details -->
<!-- MyTracks Waypoint Details -->
<!-- MyTracks Settings -->
<string name="settings_not_available_summary">No está disponible en su versión de Android</string>
<string name="settings_report_speed_or_pace">Mostrar velocidad</string>
<!-- Backups -->
<!-- MyTracksSky -->
<!-- Sharing -->
<!-- Visibility -->
<!-- Statistics View -->
<!-- Average Moving -->
<!-- Average -->
<!-- Min -->
<!-- Max -->
<!-- Chart Settings -->
<!-- X Axis -->
<!-- Y Axis -->
<!-- Units -->
<!-- Time -->
<!-- Distance -->
<!-- Speed and Pace -->
<!-- Sensors -->
<!-- Stats Labels -->
<!-- End User License Agreement -->
<!-- About -->
<string name="about_version">Versión:</string>
<string name="about_support">Soporte:</string>
<string name="about_privacy">Privacidad:</string>
<!-- Send to Google -->
<!-- Getting the account to upload to. -->
<string name="no_account_found_title">No se ha encontrado la cuenta</string>
<string name="no_account_found">No se ha encontrado la cuenta a la que subir los recorridos.</string>
<string name="choose_account_title">Elegir cuenta</string>
<!-- SD card -->
<string name="io_read_failed">No es posible leer del fichero.</string>
<string name="io_write_finished">Grabación a tarjeta SD terminada.</string>
<string name="io_read_finished">Lectura de tarjeta SD terminada.</string>
<!-- VersionChecker -->
<!-- Welcome -->
<!-- Announcement -->
<!-- Format:
$1 : Distance label
$2 : Distance value (5)
$3 : Distance units (mi, km)
$4 : Time description (10 minutes 5 seconds)
$5 : Speed value (5.6) : Pace value (5 minutes 6 seconds)
$6 : Speed units (mph) : Pace units (per mile)
-->
</resources>
+85 -43
View File
@@ -32,7 +32,7 @@ limitations under the License.
<!-- Error messages -->
<string name="error_no_location_manager">Ningún administrador de ubicación fue hallado en este aparato! </string>
<string name="error_no_gps_location_provider">Ningún proveedor GPS de ubicación fue hallado en este aparato.</string>
<string name="error_sending_to_mymap">Hubo un error al mandar su recorrido a Google My Map. Por favor inténtelo de nuevo más tarde.</string>
<string name="error_sending_to_fusiontables">Hubo un error al mandar su recorrido a Google Fusion Tables. Por favor inténtelo de nuevo más tarde.</string>
<string name="error_sending_to_docs">Hubo un error al mandar su recorrido a Google Docs. Por favor inténtelo de nuevo más tarde.</string>
<string name="error_unable_to_start_recording">No pude empezar a grabar. Por favor inténtelo de nuevo. </string>
<string name="error_unable_to_stop_recording">No pude dejar de grabar. Por favor inténtelo de nuevo.</string>
@@ -47,11 +47,10 @@ limitations under the License.
<string name="wait_for_fix">Esperando una ubicación mas exacta del GPS. Asegúrese que el cielo sea visible.</string>
<string name="status_now_recording">Grabando un nuevo recorrido.</string>
<string name="status_stopped_recording">Grabacíon interrumpida.</string>
<string name="status_new_mymap_has_been_created">Un mapa Google My Map nuevo has sido creado en maps.google.com.</string>
<string name="status_new_fusiontable_has_been_created">Un mapa Google Fusion Tables nuevo has sido creado en google.com/fusiontables.</string>
<string name="status_tracks_have_been_uploaded">Su recorrido ha sido enviado a maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Su recorrido ha sido enviado a una nueva hoja de cálculo en docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Su recorrido ha sido enviado a docs.google.com.</string>
<string name="status_mymap_info">A veces nuevos recorridos pueden tardar algunos minutos en aparecer.</string>
<string name="status_enable_gps">Por favor presione aquí para ir al menú de Seguridad y Ubicación y asegúrese que el GPS esté habilitado. Presione el botón de regreso para regresar.</string>
<string name="status_approximate_location">Nota: Una ubicación aproximada es mostrada, basada en informacion de torres de telefonía celular y red WIFI.</string>
<string name="status_no_location">La ubicación actual no puede ser determinada. Habilite más fuentes de datos (vea configuraciones de Seguridad y Ubicación) y asegúrese que el cielo sea visible. Inténtelo mas tarde.</string>
@@ -63,11 +62,11 @@ limitations under the License.
<string name="progress_message">Enviando su recorrido a Google.</string>
<string name="progress_message_reading_track">Leyendo recorrido...</string>
<string name="progress_message_preparing_track">Preparando recorrido...</string>
<string name="progress_message_authenticating_mymaps">Autenticando con Google Maps...</string>
<string name="progress_message_authenticating_fusiontables">Autenticando con Google Fusion Tables...</string>
<string name="progress_message_authenticating_docs">Autenticando con Google Docs...</string>
<string name="progress_message_sending_docs">Enviando recorrido a Google Docs...</string>
<string name="progress_message_sending_mymaps">Enviando recorrido a Google Maps...</string>
<string name="progress_message_creating_map">Creando nuevo mapa My Map...</string>
<string name="progress_message_sending_fusiontables">Enviando recorrido a Google Fusion Tables...</string>
<string name="progress_message_creating_fusiontable">Creando nuevo mapa Fusion Tables...</string>
<string name="import_progress_message">Importando un recorrido GPS. Esto puede tardar.</string>
<string name="write_progress_message">Escribiendo archivo a tarjeta SD. Esto puede tardar.</string>
<string name="progress_message_updating_track">Actualizando estadísticas del recorrido...</string>
@@ -78,10 +77,8 @@ limitations under the License.
<string name="track_will_be_permanently_deleted">El recorrido y sus señales serán borrados permanentemente de este teléfono.</string>
<string name="marker_will_be_permanently_deleted">La señal será borrada permanentemente de este teléfono.</string>
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">"Creado por My Tracks en Android."</string>
<string name="my_map_link">"Creado por &lt;a href='http://mytracks.appspot.com'&gt;My Tracks&lt;/a&gt; en Android."</string>
<string name="new_map_title">Nuevo mapa</string>
<!-- Text and links when uploading to Google Fusion Tables -->
<string name="fusiontable_link">Creado por &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; en Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Puntos</string>
@@ -98,6 +95,7 @@ limitations under the License.
<string name="yes">Sí</string>
<string name="success">Éxito</string>
<string name="waypoint">Señal de recorrido</string>
<string name="cancel">Cancelar</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Inicio)</string>
@@ -105,8 +103,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">Mostrar</string>
<string name="tracklist_send_to_mymaps">Enviar a Google My Maps</string>
<string name="tracklist_send_to_new_mymap">Enviar a nuevo Google My Map</string>
<string name="tracklist_send_to_fusiontables">Enviar a Google Fusion Tables</string>
<string name="tracklist_send_to_new_fusiontable">Enviar a nueva Google Fusion Table</string>
<string name="tracklist_send_to_docs">Enviar a Google Docs</string>
<string name="tracklist_send_to_google">Enviar a Google...</string>
<string name="tracklist_delete_track">Borrar del teléfono...</string>
@@ -114,7 +112,7 @@ limitations under the License.
<string name="tracklist_write_to_sd">Guardar en tarjeta SD...</string>
<string name="tracklist_save_as_gpx">Guardar en archivo GPX</string>
<string name="tracklist_save_as_kml">Guardar en archivo KML</string>
<string name="tracklist_btn_send_all_to_mymaps">Enviar a Google My Maps</string>
<string name="tracklist_btn_send_all_to_fusiontables">Enviar a Google Fusion Tables</string>
<string name="tracklist_btn_delete_all">Borrar todos los recorridos</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Exportar todos los recorridos</string>
@@ -123,7 +121,6 @@ limitations under the License.
<string name="tracklist_all_tracks">Todos los recorridos:"</string>
<string name="tracklist_this_track">Este recorrido"</string>
<string name="tracklist_share_track">Compartir con amigos..."</string>
<string name="tracklist_share_link">Un link a Google My Map"</string>
<string name="tracklist_share_gpx_file">Un archivo GPX"</string>
<string name="tracklist_share_kml_file">Un archivo KML"</string>
<string name="tracklist_clear_map">"Limpiar mapa"</string>
@@ -187,39 +184,47 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">Sólo el URL del mapa será enviado al compartir</string>
<string name="settings_share_url_only_summary_off">Los contenidos de la pista también serán incluídos al compartir</string>
<string name="settings_signal_sampling_frequency">Frecuencia de medición de señal</string>
<string name="settings_signal_sampling_frequency_summary">Tiempo entre grabaciones de la intensidad de la señal del teléfono</string>
<string name="settings_split_frequency">Dividir frecuencia</string>
<string name="settings_split_frequency_summary">Tiempo o distancia máxima para insertar una nueva marca de división</string>
<string name="pace_label">Paso</string>
<string name="settings_auto_resume_track_timeout">Temporizador de auto-reinicio de recorrido</string>
<string name="settings_auto_resume_track_timeout_summary">Máximo tiempo en minutos después del cual un recorrido previamente grabado no será reiniciado después de un reinicio del teléfono</string>
<string name="settings_timestamp_track_name">Hora como nombre de recorrido</string>
<string name="settings_timestamp_track_name_summary_on">El nombre por defecto del recorrido será la fecha y hora del inicio del recorrido</string>
<string name="settings_timestamp_track_name_summary_off">Los nombre de recorrido tendrán números que se incrementarán en cada nuevo recorrido.</string>
<string name="eclair_required">Sólo soportado en Android 2.0 o superior</string>
<string name="settings_sensor_type">Tipo de sensor</string>
<string name="settings_sensor_type_summary">Tipo de sensor al que conectar</string>
<string name="settings_heart_rate_ant_sensor_id">Liberar conexión al sensor de corazón ANT</string>
<string name="settings_power_ant_sensor_id">Liberar conexión al sensor de energía ANT</string>
<string name="settings_srm_bridge_ant_sensor_id">Liberar conexión al sensor puente SRM ANT</string>
<string name="settings_ant_not_paired">Sensor ANT no conectado</string>
<string name="settings_ant_paired">Sensor ANT conectado con: %d</string>
<string name="bluetooth_sensor_title">Sensor Bluetooth</string>
<string name="bluetooth_sensor_summary">Sensor Bluetooth al que conectar</string>
<!-- Backups -->
<string name="settings_sd_backup">Backup en tarjeta SD</string>
<string name="settings_backup_to_sd">Hacer backup</string>
<string name="settings_backup_to_sd_summary">Hacer una copia total de sus recorridos y configuraciones a la tarjeta SD</string>
<string name="settings_restore_from_sd">Restaurar</string>
<string name="settings_restore_from_sd_summary">Restaurar todos los recorridos y configuraciones desde la tarjeta SD</string>
<string name="settings_no_backup_while_recording">No se pueden manejar backups mientras se está registrando un recorrido.</string>
<string name="restore_overwrites_warning">Restaurar un backup desde la tarjeta SD SOBREESCRIBIRÁ todos sus recorridos y configuraciones actuales. ¿Está usted seguro?</string>
<string name="select_backup_to_restore">Seleccionar el backup para restaurar</string>
<string name="no_backups">No se han encontrado backups.</string>
<string name="backup_write_progress_message">Guardando todos los recorridos y configuraciones a la tarjeta SD. Esto puede llevar un rato...</string>
<string name="backup_import_progress_message">Leyendo todos los recorridos y configuraciones desde la tarjeta SD. Esto puede llevar un rato...</string>
<!-- MyTracksSky -->
<string name="mytracks_sky">Satélites GPS</string>
<!-- My Maps -->
<string name="select_map_message">Elija un mapa de su cuenta:</string>
<string name="create_new_map">Crear mapa nuevo...</string>
<string name="map_list_title">Enviar a Google My Maps</string>
<string name="maps_list_loading">Cargando mapas...</string>
<string name="maps_list_failed">Sus mapas no pudieron ser cargados en este momento!</string>
<string name="open_map">Seleccione este mapa</string>
<string name="edit_map_details">Editar detalles del mapa</string>
<string name="share_map">Compartir mapa con amigos</string>
<string name="share_track">Compartir recorrido con amigos</string>
<string name="delete_map">Borrar mapa de su cuenta</string>
<string name="map_title">Título del mapa:</string>
<string name="map_description">Descripción del mapa:</string>
<string name="map_searchable_edit">Permitir que este mapa y su contenido sean mostrados en resultados de búsqueda</string>
<string name="map_not_searchable_edit">No permitir que este mapa y su contenido sean mostrados en resultados de búsqueda, pero permitir acceso directo mediante su URL</string>
<string name="map_searchable">Este mapa y su contenido serán mostrados en resultados de búsqueda</string>
<string name="map_not_searchable">No mostrar ni este mapa ni sus contenidos en resultados de búsqueda, pero permitir acceso directo mediante su URL</string>
<string name="close">Cerrar</string>
<string name="edit">Editar</string>
<string name="cancel">Cancelar</string>
<string name="save">Guardar</string>
<!-- Sharing -->
<string name="share_map">Compartir mapa con amigos</string>
<string name="share_map_subject">Me gustaría compartir un mapa contigo</string>
<string name="share_map_body_format">Creo que este mapa pudiera interesarte:
@@ -228,6 +233,7 @@ limitations under the License.
<string name="send_track_body_format">Creo que este recorrido pudiera interesarte.
Para ver este recorrido usa Google Earth o algún otro software de mapeo.</string>
<string name="share_track">Compartir recorrido con amigos</string>
<!-- Visibility -->
<string name="public_map">Público</string>
@@ -301,6 +307,10 @@ limitations under the License.
<string name="total_distance_label">Distancia total</string>
<string name="distance_label">Distancia</string>
<string name="waiting">Esperando...</string>
<string name="power">Potencia</string>
<string name="cadence">Cadencia</string>
<string name="heart_rate">Ritmo cardíaco</string>
<string name="max_heart_rate">Máx ritmo cardíaco</string>
<!-- End User License Agreement -->
<string name="eula_title">Contrato de Licencia de Usuario Final</string>
@@ -310,16 +320,12 @@ limitations under the License.
<!-- About -->
<string name="about">Sobre</string>
<string name="help">Ayuda</string>
<string name="about_email">Soporte técnico</string>
<string name="about_team">Equipo:</string>
<string name="about_support">Soporte técnico:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Enviar a...</string>
<string name="sendtogoogle_send_now">Enviar ahora</string>
<string name="sendtogoogle_create_new_map">Crear un nuevo mapa</string>
<string name="sendtogoogle_pick_existing_map">Escoja un mapa existente</string>
<string name="sendtogoogle_send_stats">Enviar estadísticas de recorrido</string>
<string name="sendtogoogle_send_stats_and_points">Enviar estadísticas y puntos</string>
@@ -352,5 +358,41 @@ limitations under the License.
$6 : Speed units (mph) : Pace units (per mile)
-->
<string name="announce_template">My Tracks %1$s %2$.2f %3$s en %4$s a %5$s %6$s</string>
</resources>
<!-- Check Units -->
<string name="check_units_title">Aviso de unidades de medida</string>
<string name="check_units_message">Por defecto las unidades son métricas. ¿Quiere cambiar la configuración?</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<string name="bluetooth_options">Opciones Bluetooth</string>
<string name="bluetooth_pairing">Conexión de dispositivos</string>
<string name="bluetooth_pairing_summary">Abrir la configuración Bluetooth de Android para conectar un dispositivo</string>
<string name="sensor_bluetooth_options_key">Sensor Bluetooth activado</string>
<string name="sensor_options">Opciones del sensor</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">Conectado a %s</string>
<string name="bluetooth_connecting">Sensor Bluetooth conectando ...</string>
<string name="bluetooth_not_connected">Sensor Bluetooth no conectado</string>
<!-- Sensor State -->
<string name="sensor_data_time">Hora de los datos del sensor</string>
<string name="power_meter_enabled">Sensor de batería activado</string>
<string name="heart_rate_monitor_enabled">Monitor de ritmo cardíaco activado</string>
<string name="no_sensor_manager">No hay un gestor de sensores</string>
<string name="enabled">Activado</string>
<string name="connecting">Conectando</string>
<string name="connected">Conectado</string>
<string name="disconnected">Desconectando</string>
<string name="no_sensor_service">No hay un servicio de sensores</string>
<string name="searching">Buscando</string>
<string name="sending">Enviando</string>
<!-- Manifest description (not seen inside the app) -->
<string name="notification_permission_label">recibir avisos de registro de recorridos</string>
<string name="read_tracks_permission_label">leer datos de recorridos grabados</string>
<string name="write_tracks_permission_label">escribir datos de recorridos grabados, iniciar/detener recorridos</string>
<string name="notification_permission_description">Ser notificado cuando un recorrido empieza o termina de registrarse.</string>
<string name="read_tracks_permission_description">Poder leer datos, como puntos de interés.</string>
<string name="write_tracks_permission_description">Poder escribir datos, como registrar o añadir puntos de interés.</string>
</resources>
+8 -1
View File
@@ -201,7 +201,7 @@ limitations under the License.
<item>kayak</item>
<item>bateau à moteur</item>
<item>ferry</item>
<item>boat télécommandé</item>
<item>bateau télécommandé</item>
<item>surf</item>
<item>planche à voile</item>
<item>kite surf</item>
@@ -304,4 +304,11 @@ limitations under the License.
<item>point de passage</item>
</array>
<array name="sensor_type_options">
<item>Aucun</item>
<item>Capteur ANT+</item>
<item>Pont SRM ANT+</item>
<item>Bluetooth Zephyr</item>
</array>
</resources>
+93 -40
View File
@@ -30,11 +30,13 @@ limitations under the License.
<string name="choose_track_message">Sélectionnez le parcours à visualiser</string>
<string name="current_track">Parcours actuel</string>
<string name="current_segment">Segment actuel</string>
<string name="sensor_state">État du capteur</string>
<string name="aggregated_stats">Statistiques consolidées</string>
<!-- Error messages -->
<string name="error_no_location_manager">Aucune source de localisation n\'a été trouvée sur ce système !</string>
<string name="error_no_gps_location_provider">Aucune source GPS de localisation n\'a été trouvée sur ce système.</string>
<string name="error_sending_to_mymap">Il y a eu une erreur lors de l\'envoi de votre parcours à Google Mes cartes. Réessayez plus tard SVP.</string>
<string name="error_sending_to_fusiontables">Il y a eu une erreur lors de l\'envoi de votre parcours à Google Fusion Tables. Réessayez plus tard SVP.</string>
<string name="error_sending_to_docs">Il y a eu une erreur lors de l\'envoi de votre parcours à Google Docs. Réessayez plus tard SVP.</string>
<string name="error_unable_to_start_recording">Impossible de débuter l\'enregistrement. Réessayez.</string>
<string name="error_unable_to_stop_recording">Impossible de stopper l\'enregistrement. Réessayez.</string>
@@ -49,11 +51,10 @@ limitations under the License.
<string name="wait_for_fix">Attente du signal GPS. Assurez-vous que le ciel est bien visible.</string>
<string name="status_now_recording">Parcours en cours d\'enregistrement.</string>
<string name="status_stopped_recording">Enregistrement du parcours terminé.</string>
<string name="status_new_mymap_has_been_created">Une nouvelle carte Google \'Mes cartes\' vient d\'être créée sur maps.google.com.</string>
<string name="status_new_fusiontable_has_been_created">Une nouvelle table Google Fusion vient d\'être créée sur google.com/fusiontables.</string>
<string name="status_tracks_have_been_uploaded">Votre parcours a été envoyé à maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Votre parcours a été envoyé dans un tableur à docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Votre parcours a été envoyé à docs.google.com.</string>
<string name="status_mymap_info">Votre parcours peut prendre quelques minutes avant d\'être visible.</string>
<string name="status_enable_gps">Cliquez ici et allez dans \'Paramètres\', \'Sécurité et Localisation\' et selectionnez \'Activer les satellites GPS\'. Appuyez sur le bouton de retour pour revenir au menu.</string>
<string name="status_approximate_location">Note : Votre position est approximative, elle a été déterminée par les antennes de téléphonie ou le réseau WiFi.</string>
<string name="status_no_location">Votre position ne peut être déterminée. Vérifiez votre configuration dans \'Paramètres\', \'Sécurité et Localisation\'. Assurez-vous également que le ciel soit bien visible.</string>
@@ -65,11 +66,11 @@ limitations under the License.
<string name="progress_message">Envoi du parcours à Google...</string>
<string name="progress_message_reading_track">Lecture du parcours...</string>
<string name="progress_message_preparing_track">Préparation du parcours</string>
<string name="progress_message_authenticating_mymaps">Authentification à Google Mes cartes...</string>
<string name="progress_message_authenticating_fusiontables">Authentification à Google Fusion Tables...</string>
<string name="progress_message_authenticating_docs">Authentification à Google Docs...</string>
<string name="progress_message_sending_docs">Envoi du parcours vers Google Docs...</string>
<string name="progress_message_sending_mymaps">Envoi du parcours vers Google Mes cartes...</string>
<string name="progress_message_creating_map">Création d\'une nouvelle carte...</string>
<string name="progress_message_sending_fusiontables">Envoi du parcours vers Google Fusion Tables...</string>
<string name="progress_message_creating_fusiontable">Création d\'une nouvelle \'Fusion Table\'...</string>
<string name="import_progress_message">Importation du parcours GPS. Patientez SVP.</string>
<string name="write_progress_message">Enregistrement du fichier sur la carte SD. Patientez SVP.</string>
<string name="progress_message_updating_track">Mise à jour des statistiques du parcours...</string>
@@ -82,8 +83,7 @@ limitations under the License.
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">Créée par My Tracks sous Android.</string>
<string name="my_map_link">Créée par &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; sous Android.</string>
<string name="new_map_title">Nouvelle carte</string>
<string name="fusiontable_link">Créée par &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; sous Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="recorded_date">Enregistré</string>
@@ -100,6 +100,10 @@ limitations under the License.
<string name="yes">Oui</string>
<string name="error">Erreur</string>
<string name="waypoint">Point de passage</string>
<string name="cancel">Annuler</string>
<string name="close">Fermer</string>
<string name="edit">Modifier</string>
<string name="save">Enregistrer</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Début)</string>
@@ -107,8 +111,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">Afficher</string>
<string name="tracklist_send_to_mymaps">Envoyer à Google Mes cartes</string>
<string name="tracklist_send_to_new_mymap">Envoyer et créer un nouvelle carte Google Mes cartes</string>
<string name="tracklist_send_to_fusiontables">Envoyer à Google Fusion Tables</string>
<string name="tracklist_send_to_new_fusiontable">Envoyer et créer un nouvelle table Google Fusion Tables</string>
<string name="tracklist_send_to_docs">Envoyer à Google Docs</string>
<string name="tracklist_send_to_google">Envoyer à Google...</string>
<string name="tracklist_delete_track">Effacer du téléphone...</string>
@@ -116,14 +120,13 @@ limitations under the License.
<string name="tracklist_write_to_sd">Enregistrer sur la carte SD...</string>
<string name="tracklist_save_as_gpx">Enregistrer en fichier GPX </string>
<string name="tracklist_save_as_kml">Enregistrer en fichier KML</string>
<string name="tracklist_btn_send_all_to_mymaps">Envoyer à Google Mes cartes</string>
<string name="tracklist_btn_send_all_to_fusiontables">Envoyer à Google Fusion Tables</string>
<string name="tracklist_btn_export_all">Exporter tous les parcours</string>
<string name="tracklist_btn_delete_all">Tout supprimer</string>
<string name="tracklist_pick_one">Choisissez un parcours. Faites un appui prolongé pour plus d\'options.</string>
<string name="tracklist_all_tracks">Tous les parcours:</string>
<string name="tracklist_this_track">Ce parcours</string>
<string name="tracklist_share_track">Partager...</string>
<string name="tracklist_share_link">Lien sur Google Mes cartes</string>
<string name="tracklist_share_gpx_file">Fichier GPX</string>
<string name="tracklist_share_kml_file">Fichier KML</string>
<string name="tracklist_clear_map">Effacer la carte</string>
@@ -187,39 +190,43 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">Seule l\'adresse URL de la carte sera envoyée lors du partage</string>
<string name="settings_share_url_only_summary_off">Le contenu du parcours sera également inclus lors du partage</string>
<string name="settings_signal_sampling_frequency">Échantillonnage du signal</string>
<string name="settings_signal_sampling_frequency_summary">Intervalle de temps entre deux enregistrements de la force du signal</string>
<string name="settings_split_frequency">Fréquence de séparation</string>
<string name="settings_split_frequency_summary">Temps ou distance minimum avant l\'insertion d\'un marqueur de séparation</string>
<string name="pace_label">Rythme</string>
<string name="eclair_required">Nécessite au minimum Android 2.0</string>
<string name="settings_sensor_type">Type de capteur</string>
<string name="settings_sensor_type_summary">Type du capteur à utiliser</string>
<string name="settings_heart_rate_ant_sensor_id">Se désassocier du Cardiofréquencemètre ANT</string>
<string name="settings_power_ant_sensor_id">Se désassocier du compteur ANT</string>
<string name="settings_srm_bridge_ant_sensor_id">Se désassocier du pont SRM ANT</string>
<string name="settings_ant_not_paired">Capteur ANT non associé</string>
<string name="settings_ant_paired">Capteur ANT associé: %d</string>
<string name="bluetooth_sensor_title">Capteur Bluetooth</string>
<string name="bluetooth_sensor_summary">Capteur Bluetooth à utiliser</string>
<string name="settings_modular_stats_display_title">Affichage des statistiques modulaires</string>
<!-- Backups -->
<string name="settings_backup">Sauvegarde (BETA)</string>
<string name="settings_sd_backup">Sauvegarde sur carte SD</string>
<string name="settings_backup_to_sd">Sauvegarder</string>
<string name="settings_backup_to_sd_summary">Copier tous vos parcours et paramètres sur la carte SD</string>
<string name="settings_restore_from_sd">Restaurer</string>
<string name="settings_restore_from_sd_summary">Restaurer tous les parcours et paramètres depuis la carte SD</string>
<string name="settings_no_backup_while_recording">Sauvegarde impossible lors de l\'enregistrement d\'un parcours.</string>
<string name="restore_overwrites_warning">Restaurer une sauvegarde depuis la carte SD écrasera tous vos parcours et paramètres actuels.</string>
<string name="select_backup_to_restore">Choisissez la sauvegarde à restaurer</string>
<string name="no_backups">Pas de sauvegarde disponible.</string>
<string name="backup_write_progress_message">Écriture de tous vos parcours et paramètres sur la carte SD. Veuillez patienter...</string>
<string name="backup_import_progress_message">Lecture de tous vos parcours et paramètres depuis la carte SD. Veuillez patienter...</string>
<!-- MyTracksSky -->
<string name="mytracks_sky">Satellites GPS</string>
<!-- MyMaps -->
<string name="select_map_message">Choisissez une carte de votre compte :</string>
<string name="create_new_map">Création d\'une nouvelle carte en cours...</string>
<string name="map_list_title">Envoyer à Google Mes cartes</string>
<string name="maps_list_loading">Chargements de vos cartes...</string>
<string name="maps_list_failed">Vos cartes n\'ont pu être chargées</string>
<string name="open_map">Sélectionnez la carte</string>
<string name="edit_map_details">Consulter les détails de la carte</string>
<string name="share_map">Partager.</string>
<string name="share_track">Partager des parcours.</string>
<string name="delete_map">Supprimer la carte de votre compte.</string>
<string name="map_title">Titre de la carte :</string>
<string name="map_description">Description de la carte :</string>
<string name="map_searchable_edit">Rendre cette carte et son contenu visibles dans les résultats de recherche.</string>
<string name="map_not_searchable_edit">Ne pas inclure cette carte et sont contenu dans les résultats de recherche. Ils seront cependant consultables par d\'autres utilisateurs en utilisant l\'adresse URL exacte</string>
<string name="map_searchable">Cette carte et son contenu seront visibles dans les résultats de recherche</string>
<string name="map_not_searchable">Ni cette carte, ni son contenu seront visible dans les résultats de recherche, mais ils seront consultables en utilisant l\'adresse URL exacte</string>
<string name="close">Fermer</string>
<string name="edit">Modifier</string>
<string name="cancel">Annuler</string>
<string name="save">Enregistrer</string>
<!-- Sharing -->
<string name="share_map">Partager.</string>
<string name="share_map_subject">Je voudrais partager ma carte avec vous</string>
<string name="share_map_body_format">Je pense que cette carte vous intéressera :
@@ -228,6 +235,7 @@ limitations under the License.
<string name="send_track_body_format">Je pense que ce parcours vous intéressera.
Pour voir ce parcours, utilisez Google Earth ou tout autre logiciel de cartographie.</string>
<string name="share_track">Partager des parcours.</string>
<!-- Visibility -->
<string name="unlisted_map">Carte non listée</string>
@@ -288,6 +296,9 @@ limitations under the License.
<string name="mile_per_hour_long">miles/heure</string>
<string name="per_mile">per mile</string>
<string name="waiting">Waiting...</string>
<!-- Stats Labels -->
<string name="moving_time_label">Durée (déplacement)</string>
<string name="total_time_label">Durée totale</string>
@@ -295,6 +306,12 @@ limitations under the License.
<string name="sd_unavail">Carte SD indisponible</string>
<string name="speed">Vitesse</string>
<string name="start_trip">Vous devez commencer un parcours</string>
<string name="distance_label">Distance</string>
<string name="power">Puissance</string>
<string name="cadence">Cadence</string>
<string name="heart_rate">Rythme cardiaque</string>
<string name="max_heart_rate">Rythme cardiaque maximum</string>
<string name="unknown">-</string>
<string name="statistics">Statistiques</string>
<string name="total_distance_label">Distance totale</string>
<string name="waiting">Patientez</string>
@@ -313,8 +330,6 @@ limitations under the License.
<!-- Send to Google -->
<string name="sendtogoogle_title">Envoyer à</string>
<string name="sendtogoogle_send_now">Envoyer maintenant</string>
<string name="sendtogoogle_create_new_map">Créer une nouvelle carte</string>
<string name="sendtogoogle_pick_existing_map">Choisir une carte</string>
<string name="sendtogoogle_send_stats">Envoyer les statistiques du parcours</string>
<string name="sendtogoogle_send_stats_and_points">Envoyer les statistiques et les balises</string>
@@ -353,4 +368,42 @@ limitations under the License.
$6 : Speed units (mph) : Pace units (per mile)
-->
<string name="announce_template">My Tracks %1$s %2$.2f %3$s en %4$s at %5$s %6$s</string>
<!-- Check Units -->
<string name="check_units_title">Note sur les unités de mesure</string>
<string name="check_units_message">Le système métrique est utilisé par défaut. Souhaitez-vous changer ce paramètre ?</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<string name="method_bluetooth">Bluetooth</string>
<string name="bluetooth_options">Options Bluetooth</string>
<string name="bluetooth_pairing">Association d\'un appareil</string>
<string name="bluetooth_pairing_summary">Visitez les paramètres Bluetooth d\'Android pour associer un nouvel appareil</string>
<string name="sensor_bluetooth_options_key">bluetoothSensorsEnabled</string>
<string name="sensor_options">Options du capteur</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">Connecté à %s</string>
<string name="bluetooth_connecting">Connexion du capteur Bluetooth...</string>
<string name="bluetooth_not_connected">Capteur Bluetooth non connecté</string>
<!-- Sensor State -->
<string name="sensor_data_time">Date des données du capteur</string>
<string name="power_meter_enabled">Compteur activé</string>
<string name="heart_rate_monitor_enabled">Cardiofréquencemètre activé</string>
<string name="no_sensor_manager">Pas de gestionnaire de capteur</string>
<string name="enabled">Activé</string>
<string name="connecting">Connexion</string>
<string name="connected">Connecté</string>
<string name="disconnected">Déconnecté</string>
<string name="no_sensor_service">Pas de capteur</string>
<string name="searching">Recherche</string>
<string name="sending">Envoi</string>
<!-- Manifest description (not seen inside the app) -->
<string name="notification_permission_label">notifications lors de l\'enregistrement de parcours</string>
<string name="read_tracks_permission_label">lecture des parcours enregistrés</string>
<string name="write_tracks_permission_label">sauvegarde de parcours, lancer/arrêter l\'enregistrement de parcours</string>
<string name="notification_permission_description">Notifications lors du lancement et de l\'arrêt de l\'enregistrement de parcours.</string>
<string name="read_tracks_permission_description">Possibilité de lire les données des parcours enregistrés, telles que les marqueurs et les points de passage.</string>
<string name="write_tracks_permission_description">Possibilité d\'écrire des données de parcours, telles que les marqueurs et les points de passage..</string>
</resources>
+16 -44
View File
@@ -15,8 +15,6 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<string name="app_name">My Tracks</string>
<!-- Used by the Menu -->
<string name="start_recording">Registra percorso</string>
<string name="stop_recording">Fine registrazione</string>
@@ -35,7 +33,7 @@ limitations under the License.
<!-- Error messages -->
<string name="error_no_location_manager">Nessuna fonte di posizione trovata su questo dispositivo.</string>
<string name="error_no_gps_location_provider">Nessuna fonte di posizione GPS trovata su questo dispositivo.</string>
<string name="error_sending_to_mymap">Si è verificato un errore nell\'invio del percorso a «Le mie mappe». Per favore riprova più tardi.</string>
<string name="error_sending_to_fusiontables">Si è verificato un errore nell\'invio del percorso a Google Fusion Tables. Per favore riprova più tardi.</string>
<string name="error_sending_to_docs">Si è verificato un errore nell\'invio del percorso a Google Docs. Per favore riporva più tardi.</string>
<string name="error_unable_to_start_recording">Impossibile iniziare la registrazione. Riprova.</string>
<string name="error_unable_to_stop_recording">Impossibile fermare la registrazione. Riprova.</string>
@@ -50,11 +48,10 @@ limitations under the License.
<string name="wait_for_fix">Sto aspettando il fix del GPS. Accertati che il cielo sia visibile.</string>
<string name="status_now_recording">Sto registrando un nuovo percorso.</string>
<string name="status_stopped_recording">Registrazione del percorso terminata.</string>
<string name="status_new_mymap_has_been_created">Una nuova mappa è stata creata in «Le mie mappe» su maps.google.com.</string>
<!-- <string name="status_new_fusiontable_has_been_created">Una nuova mappa è stata creata in «Le mie mappe» su maps.google.com.</string> -->
<string name="status_tracks_have_been_uploaded">Il tuo percorso è stato inviato a maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Il tuo percorso è stato inviato ad un nuovo foglio di calcolo su docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Il tuo percorso è stato inviato a docs.google.com.</string>
<string name="status_mymap_info">Potrebbe essere necessario aspettare qualche minuto prima che i nuovi percorsi siano visibili.</string>
<string name="status_enable_gps">Premi qui per andare a «Impostazioni di posizione e protezione» e attiva «Utilizza satelliti GPS». Poi premi il tasto di ritorno per tornare qui.</string>
<string name="status_approximate_location">Nota: la posizione indicata è un\'approssimazione determinata in base alle antenne cellulari e reti WIFI vicine.</string>
<string name="status_no_location">La posizione non può essere determinata. Attiva più fonti di posizione (vedi «Impostazioni di posizione e protezione») e eccertati che il cielo sia visibile. Riprova più tardi.</string>
@@ -66,11 +63,11 @@ limitations under the License.
<string name="progress_message">Invio del percorso a Google in corso.</string>
<string name="progress_message_reading_track">Lettura in corso...</string>
<string name="progress_message_preparing_track">Elaborazione del percorso in corso...</string>
<string name="progress_message_authenticating_mymaps">Autenticazione a Google Maps in corso...</string>
<!-- <string name="progress_message_authenticating_fusiontables">Autenticazione a Google Maps in corso...</string> -->
<string name="progress_message_authenticating_docs">Autenticazione a Google Docs in corso...</string>
<string name="progress_message_sending_docs">Invio del percorso a Google Docs in corso...</string>
<string name="progress_message_sending_mymaps">Invio del percorso a Google Maps in corso...</string>
<string name="progress_message_creating_map">Creazione di una nuova mappa in «Le mie mappe» in corso...</string>
<!-- <string name="progress_message_sending_fusiontables">Invio del percorso a Google Maps in corso...</string> -->
<!-- <string name="progress_message_creating_fusiontable">Creazione di una nuova mappa in «Le mie mappe» in corso...</string> -->
<string name="import_progress_message">Importazione del percorso GPS in corso. Attendere prego...</string>
<string name="write_progress_message">Salvataggio del file sulla scheda SD in corso. Attendere prego...</string>
<string name="progress_message_updating_track">Aggiornamento delle statistiche del percorso in corso...</string>
@@ -83,8 +80,7 @@ limitations under the License.
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">Creato da My Tracks su Android.</string>
<string name="my_map_link">Creato da &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; su Android.</string>
<string name="new_map_title">Nuova mappa</string>
<string name="fusiontable_link">Creato da &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; su Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Punti</string>
@@ -104,6 +100,10 @@ limitations under the License.
<string name="error">Errore</string>
<string name="success">Successo</string>
<string name="waypoint">Punto di passaggio</string>
<string name="cancel">Annulla</string>
<string name="close">Chiudi</string>
<string name="edit">Modifica</string>
<string name="save">Salva</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Inizio)</string>
@@ -111,8 +111,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">Mostra</string>
<string name="tracklist_send_to_mymaps">Invia a «Le mie mappe» di Google</string>
<string name="tracklist_send_to_new_mymap">Invia a nuova mappa in «Le mie mappe» di Google</string>
<!-- <string name="tracklist_send_to_fusiontables">Invia a «Le mie mappe» di Google</string> -->
<!-- <string name="tracklist_send_to_new_fusiontable">Invia a nuova mappa in «Le mie mappe» di Google</string> -->
<string name="tracklist_send_to_docs">Invia a Google Docs</string>
<string name="tracklist_send_to_google">Invia a Google...</string>
<string name="tracklist_delete_track">Elimina dal telefono...</string>
@@ -120,7 +120,7 @@ limitations under the License.
<string name="tracklist_write_to_sd">Salva su scheda SD...</string>
<string name="tracklist_save_as_gpx">Salva in un file GPX</string>
<string name="tracklist_save_as_kml">Salva in un file KML</string>
<string name="tracklist_btn_send_all_to_mymaps">Invia a «Le mie mappe» di Google</string>
<!-- <string name="tracklist_btn_send_all_to_fusiontables">Invia a «Le mie mappe» di Google</string> -->
<string name="tracklist_btn_delete_all">Elimina tutti i percorsi</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Esporta tutti i percorsi</string>
@@ -129,7 +129,7 @@ limitations under the License.
<string name="tracklist_all_tracks">Tutti i percorsi:</string>
<string name="tracklist_this_track">Questo percorso</string>
<string name="tracklist_share_track">Condividi con amici...</string>
<string name="tracklist_share_link">Un link alla mappa in «Le mie mappe» di Google</string>
<string name="tracklist_share_link">Un link alla mappa</string>
<string name="tracklist_share_gpx_file">Un file GPX</string>
<string name="tracklist_share_kml_file">Un file KML</string>
<string name="tracklist_clear_map">Cancella la mappa</string>
@@ -193,9 +193,6 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">Solo l\'URL della mappa sarà inviata quando condividi un percorso</string>
<string name="settings_share_url_only_summary_off">Anche il contenuto del percorso sarà inviato quando condividi un persorso</string>
<string name="settings_signal_sampling_frequency">Frequenza di campionamento</string>
<string name="settings_signal_sampling_frequency_summary">Tempo fra due registrazioni della qualità del segnale cellulare</string>
<string name="settings_split_frequency">Frequenza di divisione</string>
<string name="settings_split_frequency_summary">Tempo o distanza massima dopo di cui il percorso verrà diviso</string>
<string name="pace_label">Andatura</string>
@@ -203,28 +200,6 @@ limitations under the License.
<!-- MyTracksSky -->
<string name="mytracks_sky">Satelliti GPS</string>
<!-- My Maps -->
<string name="select_map_message">Scegli una mappa dal tuo account:</string>
<string name="create_new_map">Crea una nuova mappa...</string>
<string name="map_list_title">Invia a «Le mie mappe» di Google</string>
<string name="maps_list_loading">Caricamento mappe in corso...</string>
<string name="maps_list_failed">Le tue mappe non possono momentaneamente essere caricate!</string>
<string name="open_map">Scegli questa mappa</string>
<string name="edit_map_details">Modifica dettagli della mappa</string>
<string name="share_map">Condividi la mappa con amici</string>
<string name="share_track">Condividi il percorso con amici</string>
<string name="delete_map">Elimina la mappa dal tuo account</string>
<string name="map_title">Titolo della mappa:</string>
<string name="map_description">Descrizione della mappa:</string>
<string name="map_searchable_edit">Rendi questa mappa e il suo contenuto visibili fra i risultati di ricerche</string>
<string name="map_not_searchable_edit">Rendi questa mappa e il suo contenuto invisibili fra i risultati di ricerche. Resteranno comunque visibili ad altri utilizzando l\'indirizzo URL esatto</string>
<string name="map_searchable">Questa mappa e il suo contenuto saranno visibili fra i risultati di ricerche</string>
<string name="map_not_searchable">Né questa mappa né il suo contenuto saranno visibili in risultati di ricerche, ma saranno comunque visibili ad altri tramite un link diretto.</string>
<string name="close">Chiudi</string>
<string name="edit">Modifica</string>
<string name="cancel">Annulla</string>
<string name="save">Salva</string>
<!-- Sharing -->
<string name="share_map_subject">Vorrei condividere una mappa con te</string>
<string name="share_map_body_format">Credo che questa mappa potrebbe interessarti:
@@ -234,6 +209,7 @@ limitations under the License.
<string name="send_track_body_format">Credo che questo percorso potrebbe interessarti.
Per vedere questo percorso, usa Google Earth o un altro software di cartografia.</string>
<string name="share_track">Condividi il percorso con amici</string>
<!-- Visibility -->
<string name="public_map">Pubblica</string>
@@ -327,19 +303,15 @@ limitations under the License.
<!-- About -->
<string name="about">Informazioni</string>
<string name="help">Aiuto</string>
<string name="about_email">Supporto</string>
<string name="about_team">Team:</string>
<string name="about_version">Versione:</string>
<string name="about_support">Supporto:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Invia a...</string>
<string name="sendtogoogle_google_mymaps">«Le mie mappe» di Google</string>
<!-- <string name="sendtogoogle_google_fusiontables">«Le mie mappe» di Google</string> -->
<string name="sendtogoogle_google_docs">Google Docs</string>
<string name="sendtogoogle_send_now">Invia adesso</string>
<string name="sendtogoogle_create_new_map">Crea una nuova mappa</string>
<string name="sendtogoogle_pick_existing_map">Scegli una mappa esistente</string>
<string name="sendtogoogle_send_stats">Invia statistiche del percorso</string>
<string name="sendtogoogle_send_stats_and_points">Invia statistiche e segnaposti</string>
+11 -3
View File
@@ -151,6 +151,14 @@ limitations under the License.
<item>1 分</item>
</string-array>
<!-- Auto-resume track timeout -->
<string-array name="auto_resume_track_timeout_options">
<item>なし</item>
<item>5 分</item>
<item>10 分</item>
<item>15 分</item>
<item>常時</item>
</string-array>
<!-- Other non-preference arrays -->
<array name="activity_types">
@@ -249,12 +257,12 @@ limitations under the License.
<item>ゴルフ場</item>
<item>雑貨店</item>
<item>美容室</item>
<item>散髪屋</item>
<item>船着き場</item>
<item>ハイキング道</item>
<item>ホテル</item>
<item>家</item>
<item>情報</item>
<item>交差</item>
<item>案内所</item>
<item>交差点</item>
<item>メールボックス</item>
<item>市場</item>
<item>集合場所</item>
+135 -98
View File
@@ -22,18 +22,20 @@ limitations under the License.
<string name="switch_to_map">地図モード</string>
<string name="mylocation">現在地</string>
<string name="list_tracks">トラック</string>
<string name="list_markers">マーカ</string>
<string name="list_markers">マーカー</string>
<string name="delete_all_tracks">全トラック消去</string>
<string name="settings">設定</string>
<string name="elevation">標高</string>
<string name="choose_track_message">表示するトラックを選択して下さい</string>
<string name="current_track">現在のトラック</string>
<string name="current_segment">最終セグメント</string>
<string name="sensor_state">センサー情報</string>
<string name="aggregated_stats">集計情報</string>
<!-- Error messages -->
<string name="error_no_location_manager">この端末でロケーションマネージャを発見できませんでした</string>
<string name="error_no_gps_location_provider">この端末でGPSロケーションプロバイダを発見できました</string>
<string name="error_sending_to_mymap">Googleマイマップへのトラック送信でエラーが発生しました.しばらく待って試して下さい.</string>
<string name="error_no_location_manager">この端末でロケーションマネージャを発見できませんでした.</string>
<string name="error_no_gps_location_provider">この端末でGPSロケーションプロバイダを発見できました.</string>
<string name="error_sending_to_fusiontables">Google Fusion Tablesへのトラック送信でエラーが発生しました.しばらく待って試して下さい.</string>
<string name="error_sending_to_docs">Google Docsへのトラック送信でエラーが発生しました.しばらく待って試して下さい.</string>
<string name="error_unable_to_start_recording">記録作成開始できません.もう一度試して下さい.</string>
<string name="error_unable_to_stop_recording">記録停止できません.もう一度試して下さい.</string>
@@ -42,54 +44,52 @@ limitations under the License.
<string name="error_generic">エラーが発生しました.もう一度試して下さい.</string>
<string name="error_track_does_not_exist">トラックが存在しません.</string>
<string name="error_out_of_memory">大きなファイルです(500KB未満でなければなりません).終了します.</string>
<string name="error_unable_to_insert_marker">マーカの挿入ができません.位置決定ができません.</string>
<string name="error_unable_to_insert_marker">マーカーの挿入ができません.位置決定ができません.</string>
<!-- Status messages -->
<string name="wait_for_fix">GPS位置精度がよくなるまで待機しています.空が見えるところにいて下さい.</string>
<string name="status_now_recording">新しいトラックを記録中です.</string>
<string name="status_stopped_recording">トラック記録を停止しました.</string>
<string name="status_new_mymap_has_been_created">新しいGoogleマイマップを maps.google.com に作成しました.</string>
<string name="status_tracks_have_been_uploaded">トラックを maps.google.com に送信しました.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">トラックを docs.google.com の新しいスプレッドシートに送信しました.</string>
<string name="status_tracks_have_been_uploaded_to_docs">トラックを docs.google.com に送信しました.</string>
<string name="status_mymap_info">新しいトラックが見えるようになるまで数分程度かかります.</string>
<string name="status_enable_gps">ここをタップして,セキュリティ &amp;位置情報 を開いて,「GPS機能をONにする」にチェックして下さい.バックボタンで戻ってください.</string>
<string name="status_new_fusiontable_has_been_created">新しいGoogle Fusion Tableをgoogle.com/fusiontablesに作成しました.</string>
<string name="status_tracks_have_been_uploaded">トラックをmaps.google.comに送信しました.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">トラックをdocs.google.comの新しいスプレッドシートに送信しました.</string>
<string name="status_tracks_have_been_uploaded_to_docs">トラックをdocs.google.comに送信しました.</string>
<string name="status_enable_gps">ここをタップして「位置情報とセキュリティの設定」を開いて「GPS機能を使用」にチェックして下さい.バックボタンで戻ってください.</string>
<string name="status_approximate_location">ご注意: 携帯電話中継局とWi-Fiネットワークから大まかな位置を特定します.</string>
<string name="status_no_location">現在位置決定ができません.位置取得源を増やし(セキュリティ&amp;位置情報をご覧ください),空が見えるようにして下さい.もう一度試して下さい.</string>
<string name="status_waypoint_inserted">ウェイポイントマーカを挿入しました.</string>
<string name="status_statistics_inserted">統計マーカを挿入しました.</string>
<string name="status_no_location">現在位置決定ができません.位置取得源を増やし(位置情報とセキュリティの設定 をご覧ください)、空が見えるようにして下さい.もう一度試して下さい.</string>
<string name="status_waypoint_inserted">ウェイポイントマーカーを挿入しました.</string>
<string name="status_statistics_inserted">統計マーカーを挿入しました.</string>
<!-- Progress dialog -->
<string name="progress_title">お待ちください...</string>
<string name="progress_message">トラックをGoogleに送信しました.</string>
<string name="progress_message_reading_track">トラックを読んでいます...</string>
<string name="progress_message_preparing_track">トラックを準備しています...</string>
<string name="progress_message_authenticating_mymaps">Googleマップの認証しています...</string>
<string name="progress_message_authenticating_fusiontables">Google Fusion Tablesへの認証を行っています...</string>
<string name="progress_message_authenticating_docs">Google Docsへの認証を行っています...</string>
<string name="progress_message_sending_docs">トラックをGoogle Docsに送信しています...</string>
<string name="progress_message_sending_mymaps">トラックをGoogleマップに送信しています...</string>
<string name="progress_message_creating_map">新しいマイマップを生成しています...</string>
<string name="progress_message_sending_fusiontables">トラックをFusion Tablesに送信しています...</string>
<string name="progress_message_creating_fusiontable">新しいFusion Tablesを生成しています...</string>
<string name="import_progress_message">GPSトラックをインポートしています.若干時間がかかります.</string>
<string name="write_progress_message">SDカードにデータを書き込んでいます.若干時間がかかります.</string>
<string name="progress_message_updating_track">トラック統計情報を更新しています...</string>
<!-- Used by DeleteAllDataHandler -->
<string name="are_you_sure_question">よろしいですか?</string>
<string name="all_data_will_be_permanently_deleted">全てのトラックとマーカをこの端末から削除しました.</string>
<string name="track_will_be_permanently_deleted">トラックとマーカをこの端末から完全に削除しました.</string>
<string name="marker_will_be_permanently_deleted">マーカをこの端末から完全に削除しました.</string>
<string name="all_data_will_be_permanently_deleted">全てのトラックとマーカーをこの端末から削除します.</string>
<string name="track_will_be_permanently_deleted">トラックとマーカーをこの端末から完全に削除します.</string>
<string name="marker_will_be_permanently_deleted">マーカーをこの端末から完全に削除します.</string>
<!-- Text and links when uploading to Google My Maps -->
<!-- Text and links when uploading to Google Fusion Tables -->
<string name="new_map_description">Android用My Tracksで作成</string>
<string name="my_map_link">Android用&lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt;で作成しました.</string>
<string name="new_map_title">新規マップ</string>
<string name="fusiontable_link">Android用&lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt;で作成しました.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">ポイント</string>
<string name="recorded_date">記録</string>
<string name="recorded_date">記録日</string>
<string name="category">活動タイプ</string>
<string name="waypoint_category">マーカタイプ</string>
<string name="part">(Part %d)</string>
<string name="waypoint_category">マーカータイプ</string>
<string name="part">(パート %d)</string>
<!-- Used by the track recording service -->
<string name="recording_your_track">トラックを保存中...</string>
@@ -98,10 +98,14 @@ limitations under the License.
<!-- Common -->
<string name="no">いいえ</string>
<string name="yes">はい</string>
<string name="ok">OK</string>
<string name="error">エラー</string>
<string name="success">成功</string>
<string name="waypoint">ウェイポイント</string>
<string name="license">ライセンス</string>
<string name="cancel">キャンセル</string>
<string name="close">閉じる</string>
<string name="edit">編集</string>
<string name="save">保存</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(開始)</string>
@@ -109,8 +113,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">表示</string>
<string name="tracklist_send_to_mymaps">Google My Mapsへ送信</string>
<string name="tracklist_send_to_new_mymap">新規Googleマイマップへ送信</string>
<string name="tracklist_send_to_fusiontables">Google Fusion Tablesへ送信</string>
<string name="tracklist_send_to_new_fusiontable">新規Google Fusion Tableへ送信</string>
<string name="tracklist_send_to_docs">Google Docsへ送信</string>
<string name="tracklist_send_to_google">Googleへ送信...</string>
<string name="tracklist_delete_track">端末から削除...</string>
@@ -119,42 +123,43 @@ limitations under the License.
<string name="tracklist_save_as_gpx">GPXファイルの保存</string>
<string name="tracklist_save_as_kml">KMLファイルの保存</string>
<string name="tracklist_save_as_csv">CVSファイルの保存</string>
<string name="tracklist_btn_send_all_to_mymaps">Googleマイマップへの送信</string>
<string name="tracklist_btn_delete_all">全てのトラックの削除</string>
<string name="tracklist_save_as_tcx">TCXファイルの保存</string>
<string name="tracklist_btn_send_all_to_fusiontables">Google Fusion Tablesへの送信</string>
<string name="tracklist_btn_delete_all">全トラックの削除</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">全てのトラックのエクスポート</string>
<string name="export_done">エクスポート終了</string>
<string name="tracklist_btn_export_all">全トラックの出力</string>
<string name="export_done">出力終了</string>
<string name="tracklist_pick_one">トラックを選択します.オプションを表示するには長押しして下さい.</string>
<string name="tracklist_all_tracks">全てのトラック:</string>
<string name="tracklist_this_track">このトラック</string>
<string name="tracklist_share_track">共有...</string>
<string name="tracklist_share_link">Googleマイマップへのリンク</string>
<string name="tracklist_share_gpx_file">GPXファイル</string>
<string name="tracklist_share_kml_file">KMLファイル</string>
<string name="tracklist_share_csv_file">CSVファイル</string>
<string name="tracklist_share_tcx_file">TCXファイル</string>
<string name="tracklist_clear_map">マップの消去</string>
<!-- Waypoints list -->
<string name="waypointslist_btn_delete_all">全てのマーカの削除</string>
<string name="waypointslist_this_waypoint">このマーカ</string>
<string name="waypointslist_btn_delete_all">全てのマーカーの削除</string>
<string name="waypointslist_this_waypoint">このマーカー</string>
<string name="waypointslist_delete_waypoint">削除</string>
<string name="waypointslist_edit_waypoint">詳細編集</string>
<string name="waypointslist_show_waypoint">マップに表示</string>
<string name="waypointslist_btn_insert_waypoint">ウェイポイントの挿入</string>
<string name="waypointslist_btn_insert_statistics">統計情報の挿入</string>
<string name="waypointslist_pick_one">マーカを選択します.オプションを表示するには長押しして下さい.</string>
<string name="waypointslist_pick_one">マーカーを選択します.オプションを表示するには長押しして下さい.</string>
<!-- MyTracks Details -->
<string name="trackdetails_title">トラック詳細</string>
<string name="trackdetails_name">トラック名</string>
<string name="trackdetails_description">トラック説明</string>
<string name="trackdetails_category">活動タイプ(ハイキング, サイクリング, ランニング, 登山...)</string>
<string name="trackdetails_category">活動タイプ(ハイキング, サイクリング、ランニング、登山...)</string>
<!-- MyTracks Waypoint Details -->
<string name="waypointdetails_title">マーカ詳細</string>
<string name="waypointdetails_name">マーカ名</string>
<string name="waypointdetails_description">マーカ説明</string>
<string name="waypointdetails_category">マーカタイプ(建物, 洞穴, 名所...)</string>
<string name="waypointdetails_title">マーカー詳細</string>
<string name="waypointdetails_name">マーカー名</string>
<string name="waypointdetails_description">マーカー説明</string>
<string name="waypointdetails_category">マーカータイプ(建物、洞穴、名所...)</string>
<!-- MyTracks Settings -->
<string name="mytracks_settings">My Tracks設定</string>
@@ -162,9 +167,10 @@ limitations under the License.
<string name="settings_recording">記録</string>
<string name="settings_sharing">共有</string>
<string name="settings_not_available_summary">このAndroidバージョンでは使用できません</string>
<string name="settings_announcement_frequency">定期通知</string>
<string name="settings_announcement_frequency_summary">音声通知間隔の最小時間</string>
<string name="settings_min_recording_distance">ポイント間の最短距離</string>
<string name="settings_min_recording_distance_summary">位置記録間の最短距離</string>
@@ -194,41 +200,50 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">共有時にマップのURLのみ送信します</string>
<string name="settings_share_url_only_summary_off">共有時にトラックのコンテントが含まれます</string>
<string name="settings_signal_sampling_frequency">信号サンプリング周波数</string>
<string name="settings_signal_sampling_frequency_summary">端末の信号強度記録の時間間隔</string>
<string name="settings_split_frequency">分割頻度</string>
<string name="settings_split_frequency_summary">分割マーカを挿入する時間または距離の間隔</string>
<string name="settings_split_frequency_summary">分割マーカーを挿入する時間または距離の間隔</string>
<string name="settings_auto_resume_track_timeout">記録自動再開の制限時間</string>
<string name="settings_auto_resume_track_timeout_summary">指定時間(分単位)以内なら端末再起動時に以前のトラック記録を再開します.</string>
<string name="settings_timestamp_track_name">日時をトラック名にする</string>
<string name="settings_timestamp_track_name_summary_on">デフォルトのトラック名をトラック開始日時にします.</string>
<string name="settings_timestamp_track_name_summary_off">トラック名を昇順の数字にします.</string>
<string name="pace_label">ペース</string>
<string name="eclair_required">Android 2.0以上でのみサポート</string>
<string name="settings_sensor_type">センサータイプ</string>
<string name="settings_sensor_type_summary">接続先センサーのタイプ</string>
<string name="settings_heart_rate_ant_sensor_id">ANT心拍数センサーとのペアリング解消</string>
<string name="settings_power_ant_sensor_id">ANT心拍強度センサーとのペアリング解消</string>
<string name="settings_srm_bridge_ant_sensor_id">ANT SRMブリッジセンサーとのペアリング解消</string>
<string name="settings_ant_not_paired">ANTセンサーとペアリングしていません</string>
<string name="settings_ant_paired">ANTセンサーとペアリング: %d</string>
<string name="bluetooth_sensor_title">Bluetoothセンサー</string>
<string name="bluetooth_sensor_summary">Bluetoothセンサー接続先</string>
<string name="settings_modular_stats_display_title">モジュール統計表示 </string>
<!-- Backups -->
<string name="settings_backup">バックアップ (ベータ版)</string>
<string name="settings_sd_backup">SDカード バックアップ</string>
<string name="settings_backup_to_sd">今すぐバックアップ</string>
<string name="settings_backup_to_sd_summary">SDカードに全てのトラックと設定をバックアップします</string>
<string name="settings_restore_from_sd">今すぐ復元</string>
<string name="settings_restore_from_sd_summary">SDカードから全てのトラックと設定を復元します</string>
<string name="settings_no_backup_while_recording">トラック記録中はバックアップ操作はできません.</string>
<string name="restore_overwrites_warning">SDカードからの復元を実行すると、現在のトラックと設定は *全て上書き* されてしまいます.よろしいですか?</string>
<string name="select_backup_to_restore">復元するバックアップの選択</string>
<string name="no_backups">バックアップがありません.</string>
<string name="backup_write_progress_message">SDカードに全てのトラックと設定をバックアップしています.しばらくかかることがあります...</string>
<string name="backup_import_progress_message">SDカードから全てのトラックと設定を復元しています.しばらくかかることがあります...</string>
<!-- MyTracksSky -->
<string name="mytracks_sky">GPS衛星</string>
<!-- My Maps -->
<string name="select_map_message">ご使用のアカウントからのマップ選択:</string>
<string name="create_new_map">新規マップ...</string>
<string name="map_list_title">Googleマイマップへの送信</string>
<string name="maps_list_loading">マップの読み込み中...</string>
<string name="maps_list_failed">マップを読み込めませんでした!</string>
<string name="open_map">このマップを選択</string>
<string name="edit_map_details">マップ詳細の編集</string>
<string name="share_map">マップの共有</string>
<string name="share_track">トラックの共有</string>
<string name="delete_map">アカウントからマップの削除</string>
<string name="map_title">マップタイトル:</string>
<string name="map_description">マップ説明:</string>
<string name="map_searchable_edit">このマップとコンテンツを検索結果に表示させる</string>
<string name="map_not_searchable_edit">このマップとコンテンツはどちらも検索結果に表示させない(直接URLで他の方が見ることは可能)</string>
<string name="map_searchable">このマップとコンテンツは検索結果に表示されます</string>
<string name="map_not_searchable">このマップとコンテンツはどちらも検索結果に表示されませんが,直接リンクで他の方が見ることができます.</string>
<string name="close">閉じる</string>
<string name="edit">編集</string>
<string name="cancel">キャンセル</string>
<string name="save">保存</string>
<!-- Sharing -->
<string name="share_map">マップ共有</string>
<string name="share_map_subject">マップを共有したいと思います</string>
<string name="share_map_body_format">このマップに興味を持って頂けると思います:
@@ -236,7 +251,8 @@ limitations under the License.
<string name="send_track_subject">トラックを共有したいと思います</string>
<string name="send_track_body_format">このトラックに興味を持って頂けると思います.
このトラックを閲覧するには,Google Earthまたは他のマッピングソフトウェアが必要です.</string>
このトラックを閲覧するには、Google Earthまたは他のマッピングソフトウェアが必要です.</string>
<string name="share_track">トラックの共有</string>
<!-- Visibility -->
<string name="public_map">公開</string>
@@ -290,23 +306,16 @@ limitations under the License.
<string name="minutes">分</string>
<string name="second">秒</string>
<string name="seconds">秒</string>
<string name="milliseconds">ミリ秒</string>
<!-- Distance -->
<string name="meter">m</string>
<string name="kilometer">km</string>
<string name="kilometers_long">キロメータ</string>
<string name="feet">ft</string>
<string name="mile">mi</string>
<string name="miles_long">マイル</string>
<!-- Speed and Pace -->
<string name="kilometer_per_hour">km/h</string>
<string name="kilometer_per_hour_long">キロメータ毎時</string>
<string name="min_per_kilometer">min/km</string>
<string name="per_kilometer">毎キロメータ</string>
<string name="mile_per_hour">mi/h</string>
<string name="mile_per_hour_long">マイル毎時</string>
<string name="min_per_mile">min/mi</string>
<string name="per_mile">毎マイル</string>
<!-- Stats Labels -->
@@ -319,6 +328,10 @@ limitations under the License.
<string name="statistics">統計</string>
<string name="total_distance_label">合計距離</string>
<string name="distance_label">距離</string>
<string name="power">心拍強度</string>
<string name="cadence">ケイデンス</string>
<string name="heart_rate">心拍数</string>
<string name="max_heart_rate">最大心拍数</string>
<string name="unknown">-</string>
<string name="waiting">待機中...</string>
@@ -332,16 +345,13 @@ limitations under the License.
<string name="help">ヘルプ</string>
<string name="about_team">チーム:</string>
<string name="about_version">バージョン:</string>
<string name="about_email">サポート</string>
<string name="about_support">サポート:</string>
<string name="about_privacy">プライバシー:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">送信...</string>
<string name="sendtogoogle_google_mymaps">Googleマイマップ</string>
<string name="sendtogoogle_google_docs">Google Docs</string>
<string name="sendtogoogle_google_fusiontables">Googleマイマップ</string>
<string name="sendtogoogle_send_now">今すぐ送信</string>
<string name="sendtogoogle_create_new_map">新規マップ作成</string>
<string name="sendtogoogle_pick_existing_map">既存マップ選択</string>
<string name="sendtogoogle_send_stats">トラック統計情報送信</string>
<string name="sendtogoogle_send_stats_and_points">統計情報とポイント送信</string>
@@ -351,22 +361,23 @@ limitations under the License.
<string name="choose_account_title">アカウント選択</string>
<!-- SD card -->
<string name="io_no_external_storage_found">外部ストレージを発見できませんでした.SDカードが刺さっているか,端末がコンピュータにマウントされているか確認してください.</string>
<string name="io_no_external_storage_found">外部ストレージを発見できませんでした.SDカードが刺さっているか、端末がコンピュータにマウントされていないか確認してください.</string>
<string name="io_write_failed">ファイルへの書き込みができません.</string>
<string name="io_read_failed">ファイルからの読み込みができません.</string>
<string name="io_create_dir_failed">SDカードにディレクトリを作成できません.</string>
<string name="io_write_finished">SDカードへの書き込み終了.</string>
<string name="io_read_finished">SDカードからの読み込み終了.</string>
<!-- VersionChecker -->
<string name="version_check_title">アップグレードチェック</string>
<string name="version_check_upgrade_button">今すぐアップデート</string>
<string name="version_check_upgrade_button">今すぐアップグレード</string>
<string name="version_check_continue_button">アップグレードせずに続行</string>
<string name="upgrade_required">お使いの版では,確実には動作せず,サポートもされません.ご使用を続けるには %1$s のアップグレードしてください.</string>
<string name="upgrade_recommended">お使いの版では,確実には動作しません.すぐにアップグレードすることをお勧めします.アップグレードされない場合は問題発生の可能性があることをご認識ください. サーバ同期するような機能の中には,アップグレードされるまで機能しないものがあります.</string>
<string name="upgrade_available">%1$s の新しい版が出ています.現版で問題なくご使用になれますが,アップグレードするまで最新の機能をお使いになれません.</string>
<string name="upgrade_required">お使いの版では、確実には動作せず、サポートもされません.ご使用を続けるには %1$s をアップグレードしてください.</string>
<string name="upgrade_recommended">お使いの版では、確実には動作しません.すぐにアップグレードすることをお勧めします.アップグレードされない場合は問題発生の可能性があることをご認識ください. サーバ同期するような機能の中には、アップグレードされるまで機能しないものがあります.</string>
<string name="upgrade_available">%1$s の新しい版が出ています.現版で問題なくご使用になれますが、アップグレードするまで最新の機能をお使いになれません.</string>
<!-- Welcome -->
<string name="welcome">ようこそ</string>
<string name="welcome_read_later">Ok</string>
<string name="welcome_about">My Tracksについて</string>
<!-- Announcement -->
@@ -385,11 +396,37 @@ limitations under the License.
<string name="check_units_title">計測単位についてのご注意</string>
<string name="check_units_message">デフォルトの単位はメートルです.設定を変更しますか?</string>
<!-- Signal Strength -->
<string name="error_rate"> 誤り率: %1$d</string>
<string name="signal_to_noise_ratio"> S/N比: %1$d</string>
<string name="ecio"> Ec/Io比: %1$.1f dB</string>
<string name="gsm_strength">GSM 強度: %1$d</string>
<string name="cdma_strength">CDMA 強度: %1$d dBm</string>
<string name="evdo_strength">EVDO 強度: %1$d dBm</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<!-- string name="method_bluetooth">Bluetooth</string --> <!-- duplicate -->
<string name="bluetooth_options">Bluetoothオプション</string>
<string name="bluetooth_pairing">ペアリング</string>
<string name="bluetooth_pairing_summary">ペアリングを行うには「Bluetooth設定」を開いて下さい</string>
<string name="sensor_bluetooth_options_key">bluetoothSensorsEnabled</string>
<string name="sensor_options">センサーオプション</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">%sに接続しました</string>
<string name="bluetooth_connecting">Bluetoothセンサー接続中...</string>
<string name="bluetooth_not_connected">Bluetoothセンサーに接続していません</string>
<!-- Sensor State -->
<string name="sensor_data_time">計測日時</string>
<string name="power_meter_enabled">パワーメーター有効</string>
<string name="heart_rate_monitor_enabled">心拍数モニタ有効</string>
<string name="no_sensor_manager">センサーマネージャがありません</string>
<string name="enabled">有効</string>
<string name="connecting">接続中</string>
<string name="connected">接続</string>
<string name="disconnected">解除</string>
<string name="no_sensor_service">センサーサービスがありません</string>
<string name="searching">検索中</string>
<string name="sending">送信中</string>
<!-- Manifest description (not seen inside the app) -->
<string name="notification_permission_label">トラック記録通知受信</string>
<string name="read_tracks_permission_label">トラック読み込み</string>
<string name="write_tracks_permission_label">トラック書き込み トラック記録の開始・終了</string>
<string name="notification_permission_description">トラック記録の開始・終了時に通知されます.</string>
<string name="read_tracks_permission_description">ポイントやウェイポイントといったトラックの読み込みを可能にします.</string>
<string name="write_tracks_permission_description">記録開始やウェイポイント追加といったトラック記録を可能にします.</string>
</resources>
+16 -54
View File
@@ -34,7 +34,7 @@ limitations under the License.
<!-- Error messages -->
<string name="error_no_location_manager">Brak menedżera lokalizacji na urządzeniu!</string>
<string name="error_no_gps_location_provider">Brak dostawcy lokalizacji GPS na urządzeniu.</string>
<string name="error_sending_to_mymap">Podczas przesyłania pliku do Moich Map Google pojawił się błąd. Spróbuj ponownie później.</string>
<string name="error_sending_to_fusiontables">Podczas przesyłania pliku do Moich Map Google pojawił się błąd. Spróbuj ponownie później.</string>
<string name="error_sending_to_docs">Podczas przesyłania pliku do Dokumentów Google pojawił się błąd. Spróbuj ponownie później.</string>
<string name="error_unable_to_start_recording">Nie można rozpocząć rejestrowania. Spróbuj ponownie.</string>
<string name="error_unable_to_stop_recording">Nie można zakończyć rejestrowania. Spróbuj ponownie.</string>
@@ -49,11 +49,10 @@ limitations under the License.
<string name="wait_for_fix">Oczekiwanie na lepsze ustalenie pozycji GPS. Upewnij się, że niebo jest widoczne.</string>
<string name="status_now_recording">Rejestrowanie nowej trasy.</string>
<string name="status_stopped_recording">Zatrzymano rejestrowanie nowej trasy.</string>
<string name="status_new_mymap_has_been_created">Utworzona nową Mapę Google na maps.google.com.</string>
<!-- <string name="status_new_fusiontable_has_been_created">Utworzona nową Mapę Google na maps.google.com.</string> -->
<string name="status_tracks_have_been_uploaded">Twoja trasa został wysłana do maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Twoja trasa została wysłana do nowego arkusza na docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Twoja trasa została wysłana do docs.google.com.</string>
<string name="status_mymap_info">Trasa będzie widoczna za kilka minut.</string>
<string name="status_enable_gps">Tapnij tutaj, aby przejść do ustawień Lokalizacji i zabezpieczeń, a następnie zaznacz Użyj satelitów GPS. Naciśnij klawisz Wstecz, aby powrócić.</string>
<string name="status_approximate_location">Uwaga: używana jest przybliżona lokalizacja ustalona za pomocą stacji komórkowych i sieci WIFI.</string>
<string name="status_no_location">Lokalizacja nie może być obecnie ustalona. Włącz wiecej źródeł (zobacz ustawienia Lokalizacji i zabezpieczeń) i upewnij się, że niebo jest widoczne. Spróbuj później.</string>
@@ -65,11 +64,11 @@ limitations under the License.
<string name="progress_message">Przesyłanie trasy do Google.</string>
<string name="progress_message_reading_track">Czytanie trasy...</string>
<string name="progress_message_preparing_track">Przygotowywanie trasy...</string>
<string name="progress_message_authenticating_mymaps">Uwierzytelnianie w Mapach Google...</string>
<!-- <string name="progress_message_authenticating_fusiontables">Uwierzytelnianie w Mapach Google...</string> -->
<string name="progress_message_authenticating_docs">Uwierzytelnianie w Dokumentach Google...</string>
<string name="progress_message_sending_docs">Przesyłanie trasy do Dokumentów Google...</string>
<string name="progress_message_sending_mymaps">Przesyłanie trasy do Map Google...</string>
<string name="progress_message_creating_map">Tworzenie nowej Mojej Mapy...</string>
<!-- <string name="progress_message_sending_fusiontables">Przesyłanie trasy do Map Google...</string> -->
<!-- <string name="progress_message_creating_fusiontable">Tworzenie nowej Mojej Mapy...</string> -->
<string name="import_progress_message">Importowanie trasy GPS. Poczekaj chwilę.</string>
<string name="write_progress_message">Zapisywanie pliku na kartę SD. Poczekaj chwilę.</string>
<string name="progress_message_updating_track">Aktualizacja statystyk trasy...</string>
@@ -82,8 +81,7 @@ limitations under the License.
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">Utworzono za pomocą My Tracks na Android.</string>
<string name="my_map_link">Utworzona przez &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; na Android.</string>
<string name="new_map_title">Nowa mapa</string>
<string name="fusiontable_link">Utworzona przez &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; na Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Punkty</string>
@@ -103,6 +101,10 @@ limitations under the License.
<string name="error">Błąd</string>
<string name="success">Powodzenie</string>
<string name="waypoint">Punkt orientacyjny</string>
<string name="cancel">Anuluj</string>
<string name="close">Zamknij</string>
<string name="edit">Edytuj</string>
<string name="save">Zapisz</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Początek)</string>
@@ -110,8 +112,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">Pokaż</string>
<string name="tracklist_send_to_mymaps">Wyślij do Moich Map Google</string>
<string name="tracklist_send_to_new_mymap">Wyślij do Moich Map Google jako nową mapę</string>
<!-- <string name="tracklist_send_to_fusiontables">Wyślij do Moich Map Google</string> -->
<!-- <string name="tracklist_send_to_new_fusiontable">Wyślij do Moich Map Google jako nową mapę</string> -->
<string name="tracklist_send_to_docs">Wyślij do Dokumentów Google</string>
<string name="tracklist_send_to_google">Wyślij do Google...</string>
<string name="tracklist_delete_track">Usuń z telefonu...</string>
@@ -120,7 +122,7 @@ limitations under the License.
<string name="tracklist_save_as_gpx">Zapisz plik GPX</string>
<string name="tracklist_save_as_kml">Zapisz plik KML</string>
<string name="tracklist_save_as_csv">Zapisz plik CSV</string>
<string name="tracklist_btn_send_all_to_mymaps">Wyślij do Moich Map Google</string>
<!-- <string name="tracklist_btn_send_all_to_fusiontables">Wyślij do Moich Map Google</string> -->
<string name="tracklist_btn_delete_all">Usuń wszystkie trasy</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Eksportuj wszystkie trasy</string>
@@ -129,7 +131,6 @@ limitations under the License.
<string name="tracklist_all_tracks">Wszystkie trasy:</string>
<string name="tracklist_this_track">Ta trasa</string>
<string name="tracklist_share_track">Podziel się z przyjaciółmi...</string>
<string name="tracklist_share_link">Link do Moich Map Google</string>
<string name="tracklist_share_gpx_file">Plik GPX</string>
<string name="tracklist_share_kml_file">PLik KML</string>
<string name="tracklist_share_csv_file">Plik CSV</string>
@@ -195,9 +196,6 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">Tylko odnośnik do mapy będzie wysyłany podczas dzielenia się</string>
<string name="settings_share_url_only_summary_off">Zawartość trasy będzie również przesyłana</string>
<string name="settings_signal_sampling_frequency">Częstotliowść próbkowania sygnału</string>
<string name="settings_signal_sampling_frequency_summary">Czas między dwoma zapisami siły sygnału telefonu</string>
<string name="settings_split_frequency">Częstotliwość rozdzielania</string>
<string name="settings_split_frequency_summary">Maksymalny czas lub odległość po którym wstawiony zostanie znacznik rozdzielenia</string>
@@ -209,14 +207,9 @@ limitations under the License.
<string name="eclair_required">Dostępne tylko w wersji Android 2.0 lub nowszej</string>
<string name="settings_sensor_type">Typ Czujnika</string>
<string name="settings_sensor_type_summary">Typ czujnika do podłączenia.</string>
<string name="settings_sensor_id">Id Czujnika</string>
<string name="settings_sensor_id_summary">Identyfikator wysyłany do czujników.</string>
<string name="sensor_id_malformed">Identyfikator musi być liczbą całkowitą.</string>
<string name="bluetooth_sensor_title">Czujnik bluetooth</string>
<string name="bluetooth_sensor_summary">Czujnik bluetooth do podłączenia.</string>
<string name="settings_modular_stats_display_title">Widok Statystyk Modularnych</string>
<string name="settings_modular_stats_display_summary_on">Ekran statystyk jest podzielony w zależności od trybu.</string>
<string name="settings_modular_stats_display_summary_off">Wyświetl wszystkie statystyki na jednym ekranie.</string>
<string name="settings_backup">Kopia zapasowa (BETA)</string>
<string name="settings_sd_backup">Kopia zapasowa na kartę SD</string>
@@ -236,28 +229,6 @@ limitations under the License.
<!-- MyTracksSky -->
<string name="mytracks_sky">Satelity GPS</string>
<!-- My Maps -->
<string name="select_map_message">Wybierz mapę z twojego konta:</string>
<string name="create_new_map">Utwórz nową mapę...</string>
<string name="map_list_title">Wyślij do Moich Map Google</string>
<string name="maps_list_loading">Wczytywanie map...</string>
<string name="maps_list_failed">Nie można wczytać twoich map!</string>
<string name="open_map">Wybierz tę mapę</string>
<string name="edit_map_details">Edytuj szczegóły mapy</string>
<string name="share_map">Podziel się mapą z przyjaciółmi</string>
<string name="share_track">Podziel się trasą z przyjaciółmi</string>
<string name="delete_map">Usuń mapę z twojego konta</string>
<string name="map_title">Tytuł mapy:</string>
<string name="map_description">Opis mapy:</string>
<string name="map_searchable_edit">Pokazuj tę pamę i jej zawartość w wynikach wyszukiwania</string>
<string name="map_not_searchable_edit">Nie pokazuj tej mapy i jej zawartości w wynikach wyszukiwania. Dostęp do mapy będzie ciągle możliwy poprzez odnośnik</string>
<string name="map_searchable">Ta mapa i jej zawartość będzie dostępna w wynikach wyszukiwania</string>
<string name="map_not_searchable">Mapa i jej zawartość nie będzie dostępna w wynikach wyszukiwania, ale będzie dostępna przez bezpośredni odnośnik</string>
<string name="close">Zamknij</string>
<string name="edit">Edytuj</string>
<string name="cancel">Anuluj</string>
<string name="save">Zapisz</string>
<!-- Sharing -->
<string name="share_map_subject">Chciałbym się z Tobą podzielić mapą</string>
<string name="share_map_body_format">Myślę, że może Cię zainteresować ta mapa:
@@ -267,6 +238,7 @@ limitations under the License.
<string name="send_track_body_format">Myślę, że może Cię zainteresować ta trasa.
Trasę możesz obejrzeć w Google Earth lub innym programie do obsługi map.</string>
<string name="share_track">Podziel się trasą z przyjaciółmi</string>
<!-- Visibility -->
<string name="public_map">Publiczna</string>
@@ -362,16 +334,14 @@ limitations under the License.
<string name="help">Pomoc</string>
<string name="about_team">Zespół:</string>
<string name="about_version">Wersja:</string>
<string name="about_email">Wsparcie</string>
<string name="about_support">Wsparcie:</string>
<string name="about_bart">Bartłomiej Niechwiej</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Wyślij do...</string>
<string name="sendtogoogle_google_mymaps">Moje Mapy Google</string>
<!-- <string name="sendtogoogle_google_fusiontables">Moje Mapy Google</string> -->
<string name="sendtogoogle_google_docs">Dokumenty Google</string>
<string name="sendtogoogle_send_now">Wyślij teraz</string>
<string name="sendtogoogle_create_new_map">Utwórz nową mapę</string>
<string name="sendtogoogle_pick_existing_map">Wybierz istniejąca mapę</string>
<string name="sendtogoogle_send_stats">Wyślij statystyki trasy</string>
<string name="sendtogoogle_send_stats_and_points">Wyślij statystyki i punkty</string>
@@ -416,12 +386,4 @@ limitations under the License.
<!-- Check Units -->
<string name="check_units_title">Jednostki miary</string>
<string name="check_units_message">Domyślnie używane są jednostki metryczne. Chcesz to zmienić?</string>
<!-- Signal Strength -->
<string name="error_rate"> Poziom błędów: %1$d</string>
<string name="signal_to_noise_ratio"> Stosunek sygnału do szumu: %1$d</string>
<string name="ecio"> Ec/lo: %1$.1f dB</string>
<string name="gsm_strength">Siła GSM: %1$d</string>
<string name="cdma_strength">Siła CDMA: %1$d dBm</string>
<string name="evdo_strength">Siła EVDO: %1$d dBm</string>
</resources>
+39 -63
View File
@@ -18,9 +18,9 @@ limitations under the License.
<!-- Used by the Menu -->
<string name="start_recording">Gravar caminho</string>
<string name="stop_recording">Para gravação</string>
<string name="switch_to_sat">Modo do satélite"</string>
<string name="switch_to_map">Modo do mapa"</string>
<string name="mylocation">Minha Localização"</string>
<string name="switch_to_sat">Modo do satélite</string>
<string name="switch_to_map">Modo do mapa</string>
<string name="mylocation">Minha Localização</string>
<string name="list_tracks">Caminhos</string>
<string name="list_markers">Marcadores</string>
<string name="delete_all_tracks">Apagar todos os caminhos</string>
@@ -31,10 +31,10 @@ limitations under the License.
<string name="current_segment">Último segmento</string>
<!-- Error messages -->
<string name="error_no_location_manager">Gerenciador de localização não encontrado neste dispositivo!"</string>
<string name="error_no_gps_location_provider">"Provedor de posição de GPS não encontrado neste dispositivo."</string>
<string name="error_sending_to_mymap">Ocorreu um erro ao enviar seu caminho para o Google Meu Mapa. Por favor tente novamente mais tarde."</string>
<string name="error_sending_to_docs">Ocorreu um erro ao enviar seu caminho para o Google Docs. Por favor tente novamente mais tarde."</string>
<string name="error_no_location_manager">Gerenciador de localização não encontrado neste dispositivo!</string>
<string name="error_no_gps_location_provider">"Provedor de posição de GPS não encontrado neste dispositivo.</string>
<string name="error_sending_to_fusiontables">Ocorreu um erro ao enviar seu caminho para o Google Fusion Tables. Por favor tente novamente mais tarde.</string>
<string name="error_sending_to_docs">Ocorreu um erro ao enviar seu caminho para o Google Docs. Por favor tente novamente mais tarde.</string>
<string name="error_unable_to_start_recording">Impossível iniciar a gravação. Tente novamente.</string>
<string name="error_unable_to_stop_recording">Impossível interromper a gravação. Tente novamente.</string>
<string name="error_unable_to_read_file">Impossível ler do arquivo.</string>
@@ -48,12 +48,11 @@ limitations under the License.
<string name="wait_for_fix">Esperando por um sinal melhor do GPS. Assegure-se de que o céu está visível.</string>
<string name="status_now_recording">Gravando um novo caminho.</string>
<string name="status_stopped_recording">Gravação interrompida.</string>
<string name="status_new_mymap_has_been_created">Um novo Meu Mapa Google foi criado em maps.google.com.</string>
<string name="status_new_fusiontable_has_been_created">Uma nova Fusion Table Google foi criada em google.com/fusiontables.</string>
<string name="status_tracks_have_been_uploaded">Seu caminho foi enviado para maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Seu caminho foi enviado para uma nova planilha em docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Seu caminho foi enviado para docs.google.com.</string>
<string name="status_mymap_info">"Pode demorar alguns minutor para que novos caminhos apareçam.</string>
<string name="status_enable_gps">"Por favor pressione aqui para ir aos ajustes de segurança e localização e verifique que o GPS esteja habilitado. Pressione o botão de voltar para retornar."</string>
<string name="status_enable_gps">"Por favor pressione aqui para ir aos ajustes de segurança e localização e verifique que o GPS esteja habilitado. Pressione o botão de voltar para retornar.</string>
<string name="status_approximate_location">Nota: Uma localização aproximada, determinada por torres de telefonia celular, está sendo mostrada.</string>
<string name="status_no_location">Sua localização não pôde ser determinada. Habilite fontes adicionais de localização (veja configurações de Segurança e Localização) e assegure-se de que o céu está visível.</string>
<string name="status_waypoint_inserted">Um marcador de ponto de passagem foi inserido.</string>
@@ -64,11 +63,11 @@ limitations under the License.
<string name="progress_message">Enviando seu caminho ao Google.</string>
<string name="progress_message_reading_track">Lendo caminho...</string>
<string name="progress_message_preparing_track">Preparando caminho...</string>
<string name="progress_message_authenticating_mymaps">Autenticando com o Google Maps...</string>
<string name="progress_message_authenticating_fusiontables">Autenticando com o Google Fusion Tables...</string>
<string name="progress_message_authenticating_docs">Authenticando com o Google Docs...</string>
<string name="progress_message_sending_docs">Enviando caminho para o Google Docs...</string>
<string name="progress_message_sending_mymaps">Enviando caminho para o Google Maps...</string>
<string name="progress_message_creating_map">Criando novo Meu Mapa...</string>
<string name="progress_message_sending_fusiontables">Enviando caminho para o Google Fusion Tables...</string>
<string name="progress_message_creating_fusiontable">Criando nova Fusion Table...</string>
<string name="import_progress_message">Importando um caminho de GPS. Isso pode demorar alguns instantes.</string>
<string name="write_progress_message">Salvando arquivo para o cartão SD. Isso pode demorar alguns instantes.</string>
<string name="progress_message_updating_track">Atualizando estatísticas do caminho...</string>
@@ -80,20 +79,19 @@ limitations under the License.
<string name="marker_will_be_permanently_deleted">O marcador será permanentemente apagado deste telefone.</string>
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">"Criado por My Tracks no Android."</string>
<string name="my_map_link">"Criado por &lt;a href='http://mytracks.appspot.com'&gt;My Tracks&lt;/a&gt; no Android."</string>
<string name="new_map_title">Novo mapa</string>
<string name="new_map_description">"Criado por My Tracks no Android.</string>
<string name="fusiontable_link">"Criado por &lt;a href='http://mytracks.appspot.com'&gt;My Tracks&lt;/a&gt; no Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Pontos</string>
<string name="recorded_date">Gravado"</string>
<string name="category">"Tipo de atividade"</string>
<string name="waypoint_category">"Tipo de marcador"</string>
<string name="part">"(Parte %d)"</string>
<string name="recorded_date">Gravado</string>
<string name="category">"Tipo de atividade</string>
<string name="waypoint_category">"Tipo de marcador</string>
<string name="part">"(Parte %d)</string>
<!-- Used by the track recording service -->
<string name="recording_your_track">"Gravando seu caminho..."</string>
<string name="new_track">"Caminho %d"</string>
<string name="recording_your_track">"Gravando seu caminho...</string>
<string name="new_track">"Caminho %d</string>
<!-- Common -->
<string name="no">Não</string>
@@ -101,6 +99,10 @@ limitations under the License.
<string name="error">Erro</string>
<string name="success">Successo</string>
<string name="waypoint">Ponto de passagem</string>
<string name="cancel">Cancelar</string>
<string name="close">Fechar</string>
<string name="edit">Editar</string>
<string name="save">Salvar</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Início)</string>
@@ -108,8 +110,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">Mostrar</string>
<string name="tracklist_send_to_mymaps">Enviar para o Google Meus Mapas</string>
<string name="tracklist_send_to_new_mymap">Enviar para o novo Google Meu Mapa</string>
<string name="tracklist_send_to_fusiontables">Enviar para o Google Fusion Tables</string>
<string name="tracklist_send_to_new_fusiontable">Enviar para nova Google Fusion Table</string>
<string name="tracklist_send_to_docs">Enviar para o Google Docs</string>
<string name="tracklist_send_to_google">Enviar para o Google...</string>
<string name="tracklist_delete_track">Apagar do telefone...</string>
@@ -117,25 +119,25 @@ limitations under the License.
<string name="tracklist_write_to_sd">Salvar no cartão SD...</string>
<string name="tracklist_save_as_gpx">Salvar arquivo GPX</string>
<string name="tracklist_save_as_kml">Salvar arquivo KML</string>
<string name="tracklist_btn_send_all_to_mymaps">Enviar para o Google Meus Mapas</string>
<string name="tracklist_btn_send_all_to_fusiontables">Enviar para o Google Fusion Tables</string>
<string name="tracklist_btn_delete_all">Apagar todos os caminhos</string>
<string name="tracklist_pick_one">Escolha um caminho. Pressione&amp;segure para mais opções.</string>
<string name="tracklist_all_tracks">Todos os Caminhos:"</string>
<string name="tracklist_this_track">Este Caminho"</string>
<string name="tracklist_share_track">Compartilhar com amigos..."</string>
<string name="tracklist_share_link">Um link para o Google Meu Mapa"</string>
<string name="tracklist_share_gpx_file">Um arquivo GPX"</string>
<string name="tracklist_share_kml_file">Um arquivo KML"</string>
<string name="tracklist_clear_map">"Limpar mapa"</string>
<string name="tracklist_all_tracks">Todos os Caminhos:</string>
<string name="tracklist_this_track">Este Caminho</string>
<string name="tracklist_share_track">Compartilhar com amigos...</string>
<string name="tracklist_share_link">Um link para a mapa</string>
<string name="tracklist_share_gpx_file">Um arquivo GPX</string>
<string name="tracklist_share_kml_file">Um arquivo KML</string>
<string name="tracklist_clear_map">Limpar mapa</string>
<!-- Waypoints list -->
<string name="waypointslist_btn_delete_all">Apagar todos os marcadores</string>
<string name="waypointslist_this_waypoint">Este Marcador</string>
<string name="waypointslist_delete_waypoint">Apagar</string>
<string name="waypointslist_edit_waypoint">Editar detalhes"</string>
<string name="waypointslist_show_waypoint">Mostrar no mapa"</string>
<string name="waypointslist_btn_insert_waypoint">Inserir ponto no caminho"</string>
<string name="waypointslist_btn_insert_statistics">Inserir estatísticas"</string>
<string name="waypointslist_edit_waypoint">Editar detalhes</string>
<string name="waypointslist_show_waypoint">Mostrar no mapa</string>
<string name="waypointslist_btn_insert_waypoint">Inserir ponto no caminho</string>
<string name="waypointslist_btn_insert_statistics">Inserir estatísticas</string>
<string name="waypointslist_pick_one">Escolha um marcador. Pressione&amp;segure para mais opções.</string>
<!-- MyTracks Details -->
@@ -184,28 +186,6 @@ limitations under the License.
<!-- MyTracksSky -->
<string name="mytracks_sky">Satélites de GPS</string>
<!-- My Maps -->
<string name="select_map_message">Escolha um mapa da sua conta:</string>
<string name="create_new_map">Criar novo mapa...</string>
<string name="map_list_title">Enviar para o Google Meus Mapas</string>
<string name="maps_list_loading">Carregando mapas...</string>
<string name="maps_list_failed">Seus mapas não puderam ser carregados neste momento!</string>
<string name="open_map">Selecionar este Mapa</string>
<string name="edit_map_details">Editar detalhes do mapa</string>
<string name="share_map">Compartilhar mapa com amigos</string>
<string name="share_track">Compartilhar caminho com amigos</string>
<string name="delete_map">Apagar mapa da sua conta</string>
<string name="map_title">Título do Mapa:</string>
<string name="map_description">Descrição do Mapa:</string>
<string name="map_searchable_edit">Fazer com que o conteúdo deste mapa apareça em resultados de buscas</string>
<string name="map_not_searchable_edit">Não permitir que este mapa ou seu conteúdo apareçam em resultados de buscas, porém ele ainda pode ser visto por sua URL direta</string>
<string name="map_searchable">Este mapa e seu conteúdo vão aparecer em resultados de buscas</string>
<string name="map_not_searchable">Nem este mapa nem seu conteúdo vão aparecer em resultados de buscas, porém outras pessoas ainda podem vê-los se obtiverem sua URL direta</string>
<string name="close">Fechar</string>
<string name="edit">Editar</string>
<string name="cancel">Cancelar</string>
<string name="save">Salvar</string>
<!-- Sharing -->
<string name="share_map_subject">Eu gostaria de compartilhar um mapa com você</string>
<string name="share_map_body_format">Eu acredito que você pode se interessar por este mapa:
@@ -215,6 +195,7 @@ limitations under the License.
<string name="send_track_body_format">Eu acredito que você pode se interesasr por este caminho.
Para visualizar este caminho, use o Google Earth ou outro software de mapas.</string>
<string name="share_track">Compartilhar caminho com amigos</string>
<!-- Visibility -->
<string name="public_map">Público</string>
@@ -298,19 +279,14 @@ limitations under the License.
<!-- About -->
<string name="about">Sobre</string>
<string name="help">Ajuda</string>
<string name="about_email">Suporte</string>
<string name="about_team">Equipe:</string>
<string name="about_version">Versão:</string>
<string name="about_support">Suporte:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Enviar para...</string>
<string name="sendtogoogle_google_mymaps">Google Meus Mapas</string>
<string name="sendtogoogle_google_docs">Google Docs</string>
<string name="sendtogoogle_send_now">Enviar agora</string>
<string name="sendtogoogle_create_new_map">Criar novo mapa</string>
<string name="sendtogoogle_pick_existing_map">Escolher um mapa existente</string>
<string name="sendtogoogle_send_stats">Enviar estatísticas do caminho</string>
<string name="sendtogoogle_send_stats_and_points">Enviar estatísticas e pontos</string>
+15 -49
View File
@@ -34,7 +34,7 @@ limitations under the License.
<!-- Error messages -->
<string name="error_no_location_manager">Ingen platshanterare hittades på denna enhet!</string>
<string name="error_no_gps_location_provider">Ingen GPS-positioneringstjänst hittades på denna enhet.</string>
<string name="error_sending_to_mymap">Det uppstod ett fel i sändningen av ditt spår till Google Mina Kartor. Försök igen senare.</string>
<string name="error_sending_to_fusiontables">Det uppstod ett fel i sändningen av ditt spår till Google Fusion Tables. Försök igen senare.</string>
<string name="error_sending_to_docs">Det uppstod ett fel i sändningen av ditt spår till Google Dokument. Försök igen senare.</string>
<string name="error_unable_to_start_recording">Kan inte starta inspelningen. Försök igen.</string>
<string name="error_unable_to_stop_recording">Kan inte stoppa inspelningen. Försök igen.</string>
@@ -49,11 +49,10 @@ limitations under the License.
<string name="wait_for_fix">Väntar på bättre GPS-position. Se till att himlen är synlig.</string>
<string name="status_now_recording">Spelar nu in ett nytt spår.</string>
<string name="status_stopped_recording">Stoppade inspelning av ditt spår.</string>
<string name="status_new_mymap_has_been_created">En ny Google Mina Kartor har skapats på maps.google.com.</string>
<!-- <string name="status_new_fusiontable_has_been_created">En ny Google Mina Kartor har skapats på maps.google.com.</string> -->
<string name="status_tracks_have_been_uploaded">Ditt spår har skickats till maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Ditt spår har skickats till ett nytt kalkylblad på docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Ditt spår har skickats till docs.google.com.</string>
<string name="status_mymap_info">Det kan ibland ta några minuter innan nya spår visas.</string>
<string name="status_enable_gps">Klicka här för att gå till Säkerhet och Platsinställningar och kryssa i \'aktivera gps-satteliter\'. Tryck på tillbakaknappen för att återgå.</string>
<string name="status_approximate_location">OBS: En ungefärlig position som avgörs från mobilmaster och WIFI-nät visas.</string>
<string name="status_no_location">En position kan för närvarande inte fastställas. Aktivera mer platskällor (se Säkerhet och Platsinställningar) och se till att himlen är synlig. Försök igen senare.</string>
@@ -65,11 +64,11 @@ limitations under the License.
<string name="progress_message">Skickar ditt spår till Google.</string>
<string name="progress_message_reading_track">Läser spår...</string>
<string name="progress_message_preparing_track">Förbereder spår...</string>
<string name="progress_message_authenticating_mymaps">Autentiserar till Google Kartor...</string>
<!-- <string name="progress_message_authenticating_fusiontables">Autentiserar till Google Kartor...</string> -->
<string name="progress_message_authenticating_docs">Autentiserar till Google Dokument...</string>
<string name="progress_message_sending_docs">Skickar spår till Google Dokument...</string>
<string name="progress_message_sending_mymaps">Skickar spår till Google Kartor...</string>
<string name="progress_message_creating_map">Skapar en ny Min Karta...</string>
<!-- <string name="progress_message_sending_fusiontables">Skickar spår till Google Kartor...</string> -->
<!-- <string name="progress_message_creating_fusiontable">Skapar en ny Min Karta...</string> -->
<string name="import_progress_message">Importerar ett GPS-spår. Detta kan ta en stund.</string>
<string name="write_progress_message">Skriver till SD-kortet. Detta kan ta en stund.</string>
<string name="progress_message_updating_track">Uppdaterar spårstatistik...</string>
@@ -82,8 +81,7 @@ limitations under the License.
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">Skapad av My Tracks på Android.</string>
<string name="my_map_link">Skapad av &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; på Android.</string>
<string name="new_map_title">Ny karta</string>
<string name="fusiontable_link">Skapad av &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; på Android.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">Punkter</string>
@@ -103,6 +101,10 @@ limitations under the License.
<string name="error">Fel</string>
<string name="success">Lyckades</string>
<string name="waypoint">Positionsmärke</string>
<string name="cancel">Avbryt</string>
<string name="close">Stäng</string>
<string name="edit">Ändra</string>
<string name="save">Spara</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Start)</string>
@@ -110,8 +112,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">Visa</string>
<string name="tracklist_send_to_mymaps">Skicka till Google Mina Kartor</string>
<string name="tracklist_send_to_new_mymap">Skicka till ny Google Mina Kartor</string>
<!-- <string name="tracklist_send_to_fusiontables">Skicka till Google Mina Kartor</string> -->
<!-- <string name="tracklist_send_to_new_fusiontable">Skicka till ny Google Mina Kartor</string> -->
<string name="tracklist_send_to_docs">Skicka till Google Dokument</string>
<string name="tracklist_send_to_google">Skicka till Google...</string>
<string name="tracklist_delete_track">Ta bort från telefonen...</string>
@@ -120,7 +122,7 @@ limitations under the License.
<string name="tracklist_save_as_gpx">Spara en GPX-fil</string>
<string name="tracklist_save_as_kml">Spara en KML-fil</string>
<string name="tracklist_save_as_csv">Spara en CSV-fil</string>
<string name="tracklist_btn_send_all_to_mymaps">Skicka till Google Mina Kartor</string>
<!-- <string name="tracklist_btn_send_all_to_fusiontables">Skicka till Google Mina Kartor</string> -->
<string name="tracklist_btn_delete_all">Ta bort alla spår</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Exportera alla spår</string>
@@ -129,7 +131,6 @@ limitations under the License.
<string name="tracklist_all_tracks">Alla spår:</string>
<string name="tracklist_this_track">Det här spåret</string>
<string name="tracklist_share_track">Dela med vänner...</string>
<string name="tracklist_share_link">En länk till Google Mina Kartor</string>
<string name="tracklist_share_gpx_file">En GPX-fil</string>
<string name="tracklist_share_kml_file">En KML-fil</string>
<string name="tracklist_share_csv_file">En CSV-fil</string>
@@ -195,9 +196,6 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">Bara länken till kartan kommer att skickas vid delning</string>
<string name="settings_share_url_only_summary_off">Innehållet i spåret kommer också att inkluderas vid delning</string>
<string name="settings_signal_sampling_frequency">Signalprovsfrekvens</string>
<string name="settings_signal_sampling_frequency_summary">Tid mellan två inspelningar av telefonens signalstyrka</string>
<string name="settings_split_frequency">Delningsfrekvens</string>
<string name="settings_split_frequency_summary">Maximala tiden eller distansen varefter en ny delningsmarkör kommer infogas</string>
<string name="pace_label">Tempo</string>
@@ -205,28 +203,6 @@ limitations under the License.
<!-- MyTracksSky -->
<string name="mytracks_sky">GPS-satelliter</string>
<!-- My Maps -->
<string name="select_map_message">Välj en karta från ditt konto:</string>
<string name="create_new_map">Skapa en ny karta...</string>
<string name="map_list_title">Skicka till Google Mina Kartor</string>
<string name="maps_list_loading">Laddar kartor...</string>
<string name="maps_list_failed">Dina kartor kunde inte laddas just nu!</string>
<string name="open_map">Välj den här kartan</string>
<string name="edit_map_details">Ändra kartdetaljer</string>
<string name="share_map">Dela kartan med vänner</string>
<string name="share_track">Dela spår med vänner</string>
<string name="delete_map">Ta bort kartan från ditt konto</string>
<string name="map_title">Karttitel:</string>
<string name="map_description">Kartbeskrivning:</string>
<string name="map_searchable_edit">Gör så att kartan och dess innehåll visas i sökresultat</string>
<string name="map_not_searchable_edit">Låt inte kartan och dess innehåll visas i sökresultat, men de kan ändå ses av andra genom en direktlänk</string>
<string name="map_searchable">Kartan och dess innehåll kommer att visas i sökresultat</string>
<string name="map_not_searchable">Varken kartan eller dess innehåll visas i sökresultat, men de kan ändå ses av andra genom en direktlänk</string>
<string name="close">Stäng</string>
<string name="edit">Ändra</string>
<string name="cancel">Avbryt</string>
<string name="save">Spara</string>
<!-- Sharing -->
<string name="share_map_subject">Jag vill dela en karta med dig</string>
<string name="share_map_body_format">Jag tror att du skulle vara intresserad av den här kartan:
@@ -236,6 +212,7 @@ limitations under the License.
<string name="send_track_body_format">Jag tror att du skulle vara intresserad av det här spåret.
För att se det här spåret använd Google Earth eller något annat kartprogram.</string>
<string name="share_track">Dela spår med vänner</string>
<!-- Visibility -->
<string name="public_map">Publik</string>
@@ -331,16 +308,13 @@ limitations under the License.
<string name="help">Hjälp</string>
<string name="about_team">Team:</string>
<string name="about_version">Version:</string>
<string name="about_email">Support</string>
<string name="about_support">Support:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Skicka till...</string>
<string name="sendtogoogle_google_mymaps">Google Mina Kartor</string>
<!--<string name="sendtogoogle_google_fusiontables">Google Mina Kartor</string>-->
<string name="sendtogoogle_google_docs">Google Dokument</string>
<string name="sendtogoogle_send_now">Skicka nu</string>
<string name="sendtogoogle_create_new_map">Skapa en ny karta</string>
<string name="sendtogoogle_pick_existing_map">Välj en befintlig karta</string>
<string name="sendtogoogle_send_stats">Skicka spårstatistik</string>
<string name="sendtogoogle_send_stats_and_points">Skicka statistik och punkter</string>
@@ -383,12 +357,4 @@ limitations under the License.
<!-- Check Units -->
<string name="check_units_title">Mätenheter</string>
<string name="check_units_message">Som standard är enheterna metriska. Vill du ändra den inställningen?</string>
<!-- Signal Strength -->
<string name="error_rate"> Felfrekvens: %1$d</string>
<string name="signal_to_noise_ratio"> Signal / brus-förhållande: %1$d</string>
<string name="ecio"> Ec/lo: %1$.1f dB</string>
<string name="gsm_strength">GSM-styrka: %1$d</string>
<string name="cdma_strength">CDMA-styrka: %1$d dBm</string>
<string name="evdo_strength">EVDO-styrka: %1$d dBm</string>
</resources>
+14 -101
View File
@@ -15,9 +15,6 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<!-- Used by the Menu -->
<string name="start_recording">记录轨迹</string>
<string name="stop_recording">停止记录</string>
@@ -37,7 +34,7 @@ limitations under the License.
<!-- Error messages -->
<string name="error_no_location_manager">此设备上没有位置管理器!</string>
<string name="error_no_gps_location_provider">此设备上没有 GPS 定位装置.</string>
<string name="error_sending_to_mymap">发送你的轨迹到 Google My Map 时发生错误. 请稍后重试.</string>
<string name="error_sending_to_fusiontables">发送你的轨迹到 Google Fusion Tables 时发生错误. 请稍后重试.</string>
<string name="error_sending_to_docs">发送你的轨迹到 Google Docs 时发生错误. 请稍后重试.</string>
<string name="error_unable_to_start_recording">无法开始记录. 请重试.</string>
<string name="error_unable_to_stop_recording">无法停止记录. 请重试.</string>
@@ -52,11 +49,10 @@ limitations under the License.
<string name="wait_for_fix">等待更准确的 GPS 定位. 请确定可以看见天空.</string>
<string name="status_now_recording">现在开始记录新的轨迹.</string>
<string name="status_stopped_recording">停止记录你的轨迹.</string>
<string name="status_new_mymap_has_been_created">已在 maps.google.com 创建新 Google My Map.</string>
<string name="status_new_fusiontable_has_been_created">已在 google.com/fusiontables 创建新 Google Fusion Table.</string>
<string name="status_tracks_have_been_uploaded">你的轨迹已经发送到 maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">你的轨迹已经作为新的电子表格发送到 docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">你的轨迹已经发送到 docs.google.com.</string>
<string name="status_mymap_info">新增的轨迹可能需要等待一段时间才会显示到页面上.</string>
<string name="status_enable_gps">请点击这里进入\'安全和位置设置\'并勾选上\'启用 GPS 卫星\'. 然后用后退键返回.</string>
<string name="status_approximate_location">注意: 当前显示的位置是根据无线信号和无线网络计算的近似位置.</string>
<string name="status_no_location">目前无法定位. 请启用更多的位置来源 (在\'安全和位置设置\'中) 并确认天空是可见的. 再重试.</string>
@@ -68,11 +64,11 @@ limitations under the License.
<string name="progress_message">发送你的轨迹到 Google.</string>
<string name="progress_message_reading_track">读取轨迹中...</string>
<string name="progress_message_preparing_track">准备轨迹中...</string>
<string name="progress_message_authenticating_mymaps">登录 Google Maps 中...</string>
<string name="progress_message_authenticating_fusiontables">登录 Google Fusion Tables 中...</string>
<string name="progress_message_authenticating_docs">登录 Google Docs 中...</string>
<string name="progress_message_sending_docs">发送轨迹到 Google Docs 中...</string>
<string name="progress_message_sending_mymaps">发送轨迹到 Google Maps 中...</string>
<string name="progress_message_creating_map">创建新的 My Map 中...</string>
<string name="progress_message_sending_fusiontables">发送轨迹到 Google Fusion Tables 中...</string>
<string name="progress_message_creating_fusiontable">创建新的 Fusion Table 中...</string>
<string name="import_progress_message">导入 GPS 轨迹中. 请稍候.</string>
<string name="write_progress_message">写入文件到 SD 卡中. 请稍候.</string>
<string name="progress_message_updating_track">更新轨迹统计信息中...</string>
@@ -85,8 +81,7 @@ limitations under the License.
<!-- Text and links when uploading to Google My Maps -->
<string name="new_map_description">由 Android 上的 My Tracks 生成.</string>
<string name="my_map_link">由 Android 上的 &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; 生成.</string>
<string name="new_map_title">新地图</string>
<string name="fusiontable_link">由 Android 上的 &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; 生成.</string>
<!-- Formatting of track and marker descriptions -->
<string name="points">点数</string>
@@ -106,6 +101,10 @@ limitations under the License.
<string name="error">错误</string>
<string name="success">成功</string>
<string name="waypoint">路点</string>
<string name="cancel">取消</string>
<string name="close">关闭</string>
<string name="edit">编辑</string>
<string name="save">保存</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(开始)</string>
@@ -113,8 +112,8 @@ limitations under the License.
<!-- TrackList -->
<string name="tracklist_show_track">显示</string>
<string name="tracklist_send_to_mymaps">发送到 Google My Maps</string>
<string name="tracklist_send_to_new_mymap">发送到新建 Google My Map</string>
<string name="tracklist_send_to_fusiontables">发送到 Google Fusion Table</string>
<string name="tracklist_send_to_new_fusiontable">发送到新建 Google Fusion Table</string>
<string name="tracklist_send_to_docs">发送到 Google Docs</string>
<string name="tracklist_send_to_google">发送到 Google...</string>
<string name="tracklist_delete_track">从手机上删除...</string>
@@ -124,7 +123,7 @@ limitations under the License.
<string name="tracklist_save_as_kml">保存为 KML 文件</string>
<string name="tracklist_save_as_csv">保存为 CSV 文件</string>
<string name="tracklist_save_as_tcx">保存为 TCX 文件</string>
<string name="tracklist_btn_send_all_to_mymaps">发送到 Google My Maps</string>
<string name="tracklist_btn_send_all_to_fusiontables">发送到 Google Fusion Tables</string>
<string name="tracklist_btn_delete_all">删除所有轨迹</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">导出所有轨迹</string>
@@ -133,7 +132,6 @@ limitations under the License.
<string name="tracklist_all_tracks">全部轨迹:</string>
<string name="tracklist_this_track">此轨迹</string>
<string name="tracklist_share_track">与朋友分享...</string>
<string name="tracklist_share_link">链接到 Google My Map</string>
<string name="tracklist_share_gpx_file">GPX 文件</string>
<string name="tracklist_share_kml_file">KML 文件</string>
<string name="tracklist_share_csv_file">CSV 文件</string>
@@ -201,9 +199,6 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">在分享时只发送地图的 URL</string>
<string name="settings_share_url_only_summary_off">在分享时也包括轨迹的内容</string>
<string name="settings_signal_sampling_frequency">信号采样频率</string>
<string name="settings_signal_sampling_frequency_summary">记录电话信号强度的时间间隔</string>
<string name="settings_split_frequency">切割频度</string>
<string name="settings_split_frequency_summary">插入新切割标记所需要达到的最大时间或距离</string>
@@ -215,15 +210,9 @@ limitations under the License.
<string name="eclair_required">只在 Android 2.0 及以上版本支持</string>
<string name="settings_sensor_type">感应器类型</string>
<string name="settings_sensor_type_summary">要连接到的感应器类型</string>
<string name="settings_sensor_id">感应器ID</string>
<string name="settings_sensor_id_summary">发送到感应器的ID.</string>
<string name="sensor_id_malformed">ID必须是一个整数值.</string>
<string name="bluetooth_sensor_title">蓝牙感应器</string>
<string name="bluetooth_sensor_summary">要连接到的蓝牙感应器</string>
<string name="settings_backup">备份 (测试版)</string>
<string name="settings_sd_backup">SD 存储卡备份</string>
<string name="settings_backup_to_sd">立即备份</string>
@@ -242,28 +231,6 @@ limitations under the License.
<!-- MyTracksSky -->
<string name="mytracks_sky">GPS 卫星</string>
<!-- My Maps -->
<string name="select_map_message">从你的帐户里选择地图:</string>
<string name="create_new_map">创建新地图...</string>
<string name="map_list_title">发送到 Google My Maps</string>
<string name="maps_list_loading">载入地图中...</string>
<string name="maps_list_failed">现在无法载入你的地图!</string>
<string name="open_map">选择此地图</string>
<string name="edit_map_details">编辑地图详细信息</string>
<string name="share_map">与朋友分享地图</string>
<string name="share_track">与朋友分享轨迹</string>
<string name="delete_map">删除你帐号下的此地图</string>
<string name="map_title">地图标题:</string>
<string name="map_description">地图描述:</string>
<string name="map_searchable_edit">允许此地图及其内容出现在搜索结果中</string>
<string name="map_not_searchable_edit">不允许地图及其内容出现在搜索结果中, 但它的内容依然可以通过网址直接访问</string>
<string name="map_searchable">此地图及其内容会出现在搜索结果中</string>
<string name="map_not_searchable">此地图及其内容不会出现在搜索结果中, 但它的内容依然可以通过网址直接访问</string>
<string name="close">关闭</string>
<string name="edit">编辑</string>
<string name="cancel">取消</string>
<string name="save">保存</string>
<!-- Sharing -->
<string name="share_map_subject">我想与你分享一张地图</string>
<string name="share_map_body_format">我想你可能会对这个地图感兴趣:
@@ -273,6 +240,7 @@ limitations under the License.
<string name="send_track_body_format">我想你可能会对这条轨迹感兴趣.
请用 Google Earth 或其它地图软件查看此轨迹.</string>
<string name="share_track">与朋友分享轨迹</string>
<!-- Visibility -->
<string name="public_map">公开</string>
@@ -327,32 +295,16 @@ limitations under the License.
<string name="second">秒</string>
<string name="seconds">秒</string>
<!-- Distance -->
<string name="kilometers_long">千米</string>
<string name="miles_long">英里</string>
<!-- Speed and Pace -->
<string name="kilometer_per_hour_long">千米每小时</string>
<string name="per_kilometer">每千米</string>
<string name="mile_per_hour_long">英里每小时</string>
<string name="per_mile">每英里</string>
<!-- Stats Labels -->
<string name="moving_time_label">移动时间</string>
<string name="total_time_label">总时间</string>
@@ -367,7 +319,6 @@ limitations under the License.
<string name="cadence">节奏</string>
<string name="heart_rate">心率</string>
<string name="max_heart_rate">最大心率</string>
<string name="waiting">请稍候...</string>
<!-- End User License Agreement -->
@@ -380,33 +331,11 @@ limitations under the License.
<string name="help">帮助</string>
<string name="about_team">开发团队:</string>
<string name="about_version">版本:</string>
<string name="about_email">技术支持</string>
<string name="about_support">技术支持:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">发送到...</string>
<string name="sendtogoogle_send_now">立即发送</string>
<string name="sendtogoogle_create_new_map">创建新地图</string>
<string name="sendtogoogle_pick_existing_map">选择已有地图</string>
<string name="sendtogoogle_send_stats">发送轨迹统计信息</string>
<string name="sendtogoogle_send_stats_and_points">发送统计信息和路点</string>
@@ -451,28 +380,13 @@ limitations under the License.
<string name="check_units_title">测量单位提示</string>
<string name="check_units_message">默认单位均为公制. 你想要修改此设置吗?</string>
<!-- Signal Strength -->
<string name="error_rate"> 错误率: %1$d</string>
<string name="signal_to_noise_ratio"> 信噪比: %1$d</string>
<string name="ecio"> Ec/lo: %1$.1f dB</string>
<string name="gsm_strength">GSM 强度 %1$d</string>
<string name="cdma_strength">CDMA 强度 %1$d dBm</string>
<string name="evdo_strength">EVDO 强度 %1$d dBm</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<string name="method_bluetooth">蓝牙</string>
<string name="bluetooth_options">蓝牙设置</string>
<string name="bluetooth_pairing">设备关联</string>
<string name="bluetooth_pairing_summary">打开 Android 的蓝牙设置关联设备</string>
<string name="sensor_options">感应器选项</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">连接到 %s</string>
<string name="bluetooth_connecting">蓝牙感应器连接中 ...</string>
@@ -482,5 +396,4 @@ limitations under the License.
<string name="sensor_data_time">感应器数据时间</string>
<string name="power_meter_enabled">电源计量器已启用</string>
<string name="heart_rate_monitor_enabled">心率监视器已启用</string>
</resources>
+22
View File
@@ -390,4 +390,26 @@ limitations under the License.
<item>CSV</item>
<item>TCX</item>
</array>
<array name="sensor_type_options">
<item>None</item>
<item>ANT+ Sensors</item>
<item>SRM ANT+ Bridge</item>
<item>Zephyr Bluetooth</item>
</array>
<!-- DO NOT TRANSLATE -->
<array name="sensor_type_values">
<item>@string/none</item>
<item>@string/ant_sensor_type</item>
<item>@string/srm_ant_bridge_sensor_type</item>
<item>@string/zephyr_sensor_type</item>
</array>
<!-- DO NOT TRANSLATE -->
<string-array name="ant_sensor_type_values">
<item>@string/ant_sensor_type</item>
<item>@string/srm_ant_bridge_sensor_type</item>
</string-array>
</resources>
+26 -7
View File
@@ -15,17 +15,36 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<color name="gold">#FFffd700</color>
<color name="white">#FFFFFFFF</color>
<color name="black">#FF000000</color>
<color name="lightblue">#FF00FFFF</color>
<color name="blue">#FF0000FF</color>
<color name="blue_transparent">#400000FF</color>
<color name="red">#FFFF0000</color>
<color name="green">#FF00AA00</color>
<color name="gray">#FFAAAAAA</color>
<color name="darkgray">#FF444444</color>
<color name="gold">#FFffd700</color>
<color name="gray">#FFAAAAAA</color>
<color name="lightblue">#FF00FFFF</color>
<color name="opaque_shadow">#70000000</color>
<color name="red">#FFFF0000</color>
<color name="stat_label_background">#FFF0F0F0</color>
<color name="stat_label_text">#FF0F0F0F</color>
<color name="white">#FFFFFFFF</color>
<!-- Chart colors by series. -->
<!-- Green and a transparent green -->
<color name="elevation_border">#FF339933</color>
<color name="elevation_fill">#40B3CFB3</color>
<!-- Blue and a transparent blue -->
<color name="speed_border">#FF0066FF</color>
<color name="speed_fill">#40C8E0FF</color>
<!-- Red and a transparent red -->
<color name="heartrate_border">#FFCC3300</color>
<color name="heartrate_fill">#40E88A70</color>
<!-- Pink and a transparent pink -->
<color name="cadence_border">#FFF128F3</color>
<color name="cadence_fill">#40F128F3</color>
<!-- Purple and a transparent purple -->
<color name="power_border">#FF401465</color>
<color name="power_fill">#40401465</color>
</resources>
+37
View File
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- DO NOT TRANSLATE ANY STRINGS IN THIS FILE. -->
<string name="app_name">My Tracks</string>
<!-- About Dialog -->
<string name="about_googlegroups">mytracks@googlegroups.com</string>
<string name="about_weburl">mytracks.appspot.com</string>
<string name="about_privacy_weburl">m.google.com/privacy</string>
<string name="about_copyright_message">Copyright 2009 Google Inc.</string>
<string name="about_bart">Bartlomiej Niechwiej</string>
<string name="about_dylan">Dylan Casey</string>
<string name="about_leif">Leif Hendrik Wilden</string>
<string name="about_rdamazio">Rodrigo Damazio Bovendorp</string>
<string name="about_sandor">Sandor Dornbush</string>
<!-- Sensor Types -->
<string name="none">NONE</string>
<string name="ant_sensor_type">ANT</string>
<string name="srm_ant_bridge_sensor_type">SRM_ANT_BRIDGE</string>
<string name="zephyr_sensor_type">ZEPHYR</string>
</resources>
+8 -2
View File
@@ -17,6 +17,9 @@ limitations under the License.
<resources>
<!-- Keys for application preferences - DO NOT TRANSLATE -->
<string name="announcement_frequency_key">announcementFrequency</string>
<string name="ant_heart_rate_sensor_id_key">antHeartRateSensorId</string>
<string name="ant_power_sensor_id_key">antPowerSensorId</string>
<string name="ant_srm_bridge_sensor_id_key">antSRMBridgeSensorId</string>
<string name="auto_resume_track_timeout_key">autoResumeTrackTimeout</string>
<string name="bluetooth_device_key">bluetoothDevice</string>
<string name="bluetooth_pairing_key">bluetoothPairing</string>
@@ -33,10 +36,9 @@ limitations under the License.
<string name="send_stats_and_points_key">sendStatsAndPoints</string>
<string name="send_to_docs_key">sendToDocs</string>
<string name="send_to_my_maps_key">sendToMyMaps</string>
<string name="sensor_id_key">sensorId</string>
<string name="send_to_fusion_tables_key">sendToFusionTables</string>
<string name="sensor_type_key">sensorType</string>
<string name="share_url_only_key">shareUrlOnly</string>
<string name="signal_sampling_frequency_key">signalSamplingFrequency</string>
<string name="split_frequency_key">splitFrequency</string>
<string name="timestamp_track_name_key">timestampTrackName</string>
@@ -48,4 +50,8 @@ limitations under the License.
<!-- Keys for non-persisted preferences - DO NOT TRANSLATE -->
<string name="backup_to_sd_key">backupToSd</string>
<string name="restore_from_sd_key">restoreFromSd</string>
<!-- Inoperative keys used for the location of preferences items -->
<string name="sensor_options_key">sensorOptions</string>
<string name="ant_options_key">antOptions</string>
</resources>
+63 -50
View File
@@ -15,9 +15,6 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<!-- DO NOT TRANSLATE -->
<string name="app_name">My Tracks</string>
<!-- Used by the Menu -->
<string name="start_recording">Record track</string>
<string name="stop_recording">Stop recording</string>
@@ -32,12 +29,14 @@ limitations under the License.
<string name="choose_track_message">Please select the track to view</string>
<string name="current_track">Current track</string>
<string name="current_segment">Last segment</string>
<string name="sensor_state">Sensor State</string>
<string name="aggregated_stats">Aggregated Statistics</string>
<!-- Error messages -->
<string name="error_no_location_manager">No location manager was found on this device!</string>
<string name="error_no_gps_location_provider">No GPS location provider was found on this device.</string>
<string name="error_sending_to_mymap">There was an error while sending your track to Google My Map. Please try again later.</string>
<string name="error_sending_to_fusiontables">There was an error while sending your track to Google Fusion Tables. Please try again later.</string>
<string name="error_sending_to_docs">There was an error while sending your track to Google Docs. Please try again later.</string>
<string name="error_unable_to_start_recording">Unable to start recording. Try again.</string>
<string name="error_unable_to_stop_recording">Unable to stop recording. Try again.</string>
@@ -53,6 +52,7 @@ limitations under the License.
<string name="status_now_recording">Now recording a new track.</string>
<string name="status_stopped_recording">Stopped recording your track.</string>
<string name="status_new_mymap_has_been_created">A new Google My Map has been created at maps.google.com.</string>
<string name="status_new_fusiontable_has_been_created">A new Google Fusion table has been created at google.com/fusiontables.</string>
<string name="status_tracks_have_been_uploaded">Your track has been sent to maps.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_new_doc">Your track has been sent to a new spreadsheet at docs.google.com.</string>
<string name="status_tracks_have_been_uploaded_to_docs">Your track has been sent to docs.google.com.</string>
@@ -68,11 +68,14 @@ limitations under the License.
<string name="progress_message">Sending your track to Google.</string>
<string name="progress_message_reading_track">Reading track...</string>
<string name="progress_message_preparing_track">Preparing track...</string>
<string name="progress_message_authenticating_fusiontables">Authenticating to Google Fusion Tables...</string>
<string name="progress_message_authenticating_mymaps">Authenticating to Google Maps...</string>
<string name="progress_message_authenticating_docs">Authenticating to Google Docs...</string>
<string name="progress_message_sending_docs">Sending track to Google Docs...</string>
<string name="progress_message_sending_mymaps">Sending track to Google Maps...</string>
<string name="progress_message_creating_map">Creating new My Map...</string>
<string name="progress_message_sending_fusiontables">Sending track to Fusion Tables...</string>
<string name="progress_message_creating_fusiontable">Creating new Fusion table...</string>
<string name="import_progress_message">Importing a GPS track. This may take a while.</string>
<string name="write_progress_message">Writing file to SD card. This may take a while.</string>
<string name="progress_message_updating_track">Updating track statistics...</string>
@@ -83,8 +86,11 @@ limitations under the License.
<string name="track_will_be_permanently_deleted">The track and its markers will be permanently deleted from this phone.</string>
<string name="marker_will_be_permanently_deleted">The marker will be permanently deleted from this phone.</string>
<!-- Text and links when uploading to Google My Maps -->
<!-- Text and links when uploading to Google Fusion Tables -->
<string name="new_map_description">Created by My Tracks on Android.</string>
<string name="fusiontable_link">Created by &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; on Android.</string>
<!-- Text and links when uploading to Google My Maps -->
<string name="my_map_link">Created by &lt;a href=\'http://mytracks.appspot.com\'&gt;My Tracks&lt;/a&gt; on Android.</string>
<string name="new_map_title">New map</string>
@@ -106,6 +112,11 @@ limitations under the License.
<string name="error">Error</string>
<string name="success">Success</string>
<string name="waypoint">Waypoint</string>
<string name="license">License</string>
<string name="cancel">Cancel</string>
<string name="close">Close</string>
<string name="edit">Edit</string>
<string name="save">Save</string>
<!-- Placemark labels for start and end of track -->
<string name="start">(Start)</string>
@@ -115,6 +126,8 @@ limitations under the License.
<string name="tracklist_show_track">Show</string>
<string name="tracklist_send_to_mymaps">Send to Google My Maps</string>
<string name="tracklist_send_to_new_mymap">Send to New Google My Map</string>
<string name="tracklist_send_to_fusiontables">Send to Google Fusion Tables</string>
<string name="tracklist_send_to_new_fusiontable">Send to New Google Fusion Table</string>
<string name="tracklist_send_to_docs">Send to Google Docs</string>
<string name="tracklist_send_to_google">Send to Google...</string>
<string name="tracklist_delete_track">Delete from phone...</string>
@@ -124,21 +137,33 @@ limitations under the License.
<string name="tracklist_save_as_kml">Save a KML file</string>
<string name="tracklist_save_as_csv">Save a CSV file</string>
<string name="tracklist_save_as_tcx">Save a TCX file</string>
<string name="tracklist_btn_send_all_to_fusiontables">Send to Google Fusion Tables</string>
<string name="tracklist_btn_send_all_to_mymaps">Send to Google My Maps</string>
<string name="tracklist_btn_delete_all">Delete all tracks</string>
<string name="tracklist_btn_delete_all">Delete all</string>
<!-- Export All -->
<string name="tracklist_btn_export_all">Export all tracks</string>
<string name="tracklist_btn_export_all">Export all</string>
<string name="export_done">Export finished</string>
<string name="tracklist_pick_one">Pick a track. Press&amp;hold for more options.</string>
<string name="tracklist_all_tracks">All Tracks:</string>
<string name="tracklist_this_track">This Track</string>
<string name="tracklist_share_track">Share with Friends...</string>
<string name="tracklist_share_link">A link to Google My Map</string>
<string name="tracklist_share_link">A link to the map</string>
<string name="tracklist_share_gpx_file">A GPX file</string>
<string name="tracklist_share_kml_file">A KML file</string>
<string name="tracklist_share_csv_file">A CSV file</string>
<string name="tracklist_share_tcx_file">A TCX file</string>
<string name="tracklist_clear_map">Clear map</string>
<!-- Import All -->
<string name="tracklist_btn_import_all">Import all</string>
<string name="import_done">Import finished, imported</string>
<!-- Format:
$1 : Successful imports
$2 : Attempted imports
$3 : MyTracks gpx path
-->
<string name="import_done">Imported %1$d of %2$d GPX files from %3$s</string>
<string name="import_empty">No GPX files found in %s. SD card may be unreadable or directory may not contain GPX files.</string>
<string name="import_error">Import error for file %s</string>
<!-- Waypoints list -->
<string name="waypointslist_btn_delete_all">Delete all markers</string>
@@ -201,9 +226,6 @@ limitations under the License.
<string name="settings_share_url_only_summary_on">Only the URL of the map will be sent when sharing</string>
<string name="settings_share_url_only_summary_off">The contents of the track will also be included when sharing</string>
<string name="settings_signal_sampling_frequency">Signal sampling frequency</string>
<string name="settings_signal_sampling_frequency_summary">Time between two recordings of the phone\'s signal strength</string>
<string name="settings_split_frequency">Split frequency</string>
<string name="settings_split_frequency_summary">Maximum time or distance after which a new split marker will be inserted</string>
@@ -218,16 +240,17 @@ limitations under the License.
<string name="eclair_required">Only supported in Android 2.0 or above</string>
<string name="settings_sensor_type">Sensor Type</string>
<string name="settings_sensor_type_summary">The type of sensor to connect to.</string>
<string name="settings_sensor_id">Sensor Id</string>
<string name="settings_sensor_id_summary">The Id sent to sensors.</string>
<string name="sensor_id_malformed">The Id must be an integer value.</string>
<string name="settings_sensor_type_summary">The type of sensor to connect to</string>
<string name="settings_heart_rate_ant_sensor_id">Clear ANT heart rate sensor pairing</string>
<string name="settings_power_ant_sensor_id">Clear ANT power sensor pairing</string>
<string name="settings_srm_bridge_ant_sensor_id">Clear ANT SRM bridge sensor pairing</string>
<string name="settings_ant_not_paired">ANT sensor not paired</string>
<string name="settings_ant_paired">ANT sensor paired with: %d</string>
<string name="bluetooth_sensor_title">Bluetooth sensor</string>
<string name="bluetooth_sensor_summary">The bluetooth sensor to connect to.</string>
<string name="bluetooth_sensor_summary">The bluetooth sensor to connect to</string>
<string name="settings_modular_stats_display_title">Modular Stats Display</string>
<string name="settings_modular_stats_display_summary_on">The stats screen is split in various modes.</string>
<string name="settings_modular_stats_display_summary_off">Display all stats on one screen</string>
<!-- Backups -->
<string name="settings_backup">Backup (BETA)</string>
<string name="settings_sd_backup">SD Card Backup</string>
<string name="settings_backup_to_sd">Backup now</string>
@@ -236,7 +259,6 @@ limitations under the License.
<string name="settings_restore_from_sd_summary">Restore all tracks and settings from the SD card</string>
<string name="settings_no_backup_while_recording">Cannot manipulate backups while recording a track.</string>
<!-- Backups -->
<string name="restore_overwrites_warning">Restoring a backup from the SD card will OVERWRITE all your current tracks and settings. Are you sure?</string>
<string name="select_backup_to_restore">Select the backup to restore</string>
<string name="no_backups">No backups found.</string>
@@ -254,7 +276,6 @@ limitations under the License.
<string name="maps_list_failed">Your maps could not be loaded at this time!</string>
<string name="open_map">Select this Map</string>
<string name="edit_map_details">Edit Map Details</string>
<string name="share_map">Share Map with Friends</string>
<string name="share_track">Share Track with Friends</string>
<string name="delete_map">Delete Map from your Account</string>
<string name="map_title">Map Title:</string>
@@ -263,20 +284,18 @@ limitations under the License.
<string name="map_not_searchable_edit">Do not let this map or its contents show up in search results, though they may still be viewed be others through the direct URL</string>
<string name="map_searchable">This map and its contents will show in search results</string>
<string name="map_not_searchable">Neither this map nor its contents will show in search results, but they may still be viewed by others through a direct link</string>
<string name="close">Close</string>
<string name="edit">Edit</string>
<string name="cancel">Cancel</string>
<string name="save">Save</string>
<!-- Sharing -->
<string name="share_map_subject">I would like to share a map with you</string>
<string name="share_map_body_format">I think you might be interested in this map:
<string name="share_map">Share map with friends</string>
<string name="share_map_subject">I would like to share a track with you</string>
<string name="share_map_body_format">I think you might be interested in this track:
%s</string>
<string name="send_track_subject">I would like to share a track with you</string>
<string name="send_track_body_format">I think you might be interested in this track.
To view this track use Google Earth or other mapping software.</string>
<string name="share_track">Share track with friends</string>
<!-- Visibility -->
<string name="public_map">Public</string>
@@ -350,7 +369,7 @@ limitations under the License.
<string name="min_per_mile">min/mi</string>
<string name="per_mile">per mile</string>
<!-- Power -->
<!-- Sensors -->
<string name="watts">W</string>
<string name="revolutions_per_minute">rpm</string>
@@ -383,20 +402,12 @@ limitations under the License.
<string name="help">Help</string>
<string name="about_team">Team:</string>
<string name="about_version">Version:</string>
<string name="about_email">Support</string>
<string name="about_support">Support:</string>
<!-- DO NOT TRANSLATE -->
<string name="about_googlegroups">mytracks@googlegroups.com</string>
<string name="about_weburl">mytracks.appspot.com</string>
<string name="about_copyright_message">Copyright 2009 Google Inc.</string>
<string name="about_dylan">Dylan Casey</string>
<string name="about_leif">Leif Hendrik Wilden</string>
<string name="about_rdamazio">Rodrigo Damazio Bovendorp</string>
<string name="about_sandor">Sandor Dornbush</string>
<string name="about_privacy">Privacy:</string>
<!-- Send to Google -->
<string name="sendtogoogle_title">Send to...</string>
<string name="sendtogoogle_google_fusiontables">Google Fusion Tables</string>
<string name="sendtogoogle_google_mymaps">Google My Maps</string>
<string name="sendtogoogle_google_docs">Google Docs</string>
<string name="sendtogoogle_send_now">Send now</string>
@@ -447,28 +458,15 @@ limitations under the License.
<string name="check_units_title">Units of Measure Notice</string>
<string name="check_units_message">By default units are metric. Would you like to change that setting?</string>
<!-- Signal Strength -->
<string name="error_rate"> Error Rate: %1$d</string>
<string name="signal_to_noise_ratio"> Signal to Noise Ratio: %1$d</string>
<string name="ecio"> Ec/lo: %1$.1f dB</string>
<string name="gsm_strength">GSM Strength: %1$d</string>
<string name="cdma_strength">CDMA Strength: %1$d dBm</string>
<string name="evdo_strength">EVDO Strength: %1$d dBm</string>
<!-- Fake preference keys - never saved, but show options in the preferences screen -->
<string name="method_bluetooth">Bluetooth</string>
<string name="bluetooth_options">Bluetooth options</string>
<string name="bluetooth_pairing">Device pairing</string>
<string name="bluetooth_pairing_summary">Open Android\'s bluetooth settings to pair a device</string>
<string name="sensor_bluetooth_options_key">bluetoothSensorsEnabled</string>
<string name="ant_options">ANT options</string>
<string name="sensor_options">Sensor Options</string>
<!-- Sensor Types => DO NOT TRANSLATE -->
<string name="none">NONE</string>
<string name="ant_sensor_type">ANT</string>
<string name="srm_sensor_type">SRM</string>
<string name="athlosoft_sensor_type">ATHLOSOFT</string>
<!-- Bluetooth Sensor -->
<string name="bluetooth_connected">Connected to %s</string>
<string name="bluetooth_connecting">Bluetooth sensor connecting ...</string>
@@ -478,5 +476,20 @@ limitations under the License.
<string name="sensor_data_time">Sensor Data Time</string>
<string name="power_meter_enabled">Power meter enabled</string>
<string name="heart_rate_monitor_enabled">Heart rate monitor enabled</string>
<string name="no_sensor_manager">No Sensor Manager</string>
<string name="enabled">Enabled</string>
<string name="connecting">Connecting</string>
<string name="connected">Connected</string>
<string name="disconnected">Disconnected</string>
<string name="no_sensor_service">No Sensor Service</string>
<string name="searching">Searching</string>
<string name="sending">Sending</string>
<!-- Manifest description (not seen inside the app) -->
<string name="notification_permission_label">receive track recording notifications</string>
<string name="read_tracks_permission_label">read recorded track data</string>
<string name="write_tracks_permission_label">write recorded track data, start/stop recording tracks</string>
<string name="notification_permission_description">Be notified when a track starts or stops being recorded.</string>
<string name="read_tracks_permission_description">Be able to read track data, such as points and waypoints.</string>
<string name="write_tracks_permission_description">Be able to write track data, such as starting recording or adding waypoints.</string>
</resources>
+77
View File
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- The style for the unit on the statistics activity. -->
<style name="StatsUnit" parent="@android:Widget.TextView">
<item name="android:gravity">bottom</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginBottom">-2dip</item>
<item name="android:layout_marginTop">-2dip</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textColor">@color/stat_label_text</item>
</style>
<!-- The style for the unit on the statistics activity where there is only one string. -->
<style name="StatsUnitSolo" parent="@android:Widget.TextView">
<item name="android:gravity">right</item>
<item name="android:layout_marginBottom">-9dip</item>
<item name="android:layout_marginTop">-9dip</item>
<item name="android:textColor">@color/stat_label_text</item>
</style>
<!-- The style for a text view for displaying a value on the statistics activity. -->
<style name="StatsRegister" parent="@android:Widget.TextView">
<item name="android:gravity">right</item>
<item name="android:layout_marginBottom">-9dip</item>
<item name="android:layout_marginTop">-9dip</item>
<item name="android:text">@string/unknown</item>
<item name="android:textColor">@color/stat_label_text</item>
<item name="android:textSize">40sp</item>
</style>
<!-- The style for a text view for displaying a large value on the statistics activity. -->
<style name="StatsRegister.Big">
<item name="android:layout_marginBottom">-13dip</item>
<item name="android:layout_marginTop">-13dip</item>
<item name="android:textSize">50sp</item>
</style>
<!-- The style for a text view for displaying a small value on the statistics activity. -->
<style name="StatsRegister.Small">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginBottom">-5dip</item>
<item name="android:layout_marginTop">-5dip</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:textSize">25sp</item>
</style>
<!-- The style for a view which divides two columns in the statistics activity. -->
<style name="StatsSpacer" parent="@android:Widget.TextView">
<item name="android:background">@color/black</item>
<item name="android:layout_marginBottom">-9dip</item>
<item name="android:layout_marginTop">-9dip</item>
<item name="android:layout_width">5dip</item>
<item name="android:textSize">40sp</item>
</style>
<!-- The style for a view which divides the numerator and denominator of the units on the statistics activity. -->
<style name="StatsDivider" parent="@android:Widget.TextView">
<item name="android:background">@color/black</item>
<item name="android:layout_height">3dip</item>
<item name="android:layout_width">fill_parent</item>
</style>
</resources>
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 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.
-->
<resources>
<!-- DO NOT TRANSLATE -->
<string name="waypoint_icon_url">http://maps.google.com/mapfiles/ms/micons/blue-pushpin.png</string>
<string name="stats_icon_url">http://maps.google.com/mapfiles/ms/micons/ylw-pushpin.png</string>
</resources>
+40 -8
View File
@@ -84,14 +84,6 @@ limitations under the License.
android:entryValues="@array/min_required_accuracy_values"
android:defaultValue="200" />
<com.google.android.apps.mytracks.IntegerListPreference
android:key="@string/signal_sampling_frequency_key"
android:title="@string/settings_signal_sampling_frequency"
android:summary="@string/settings_signal_sampling_frequency_summary"
android:entries="@array/task_frequency_options"
android:entryValues="@array/task_frequency_values"
android:defaultValue="-1" />
<com.google.android.apps.mytracks.IntegerListPreference
android:key="@string/auto_resume_track_timeout_key"
android:title="@string/settings_auto_resume_track_timeout"
@@ -109,6 +101,46 @@ limitations under the License.
</PreferenceScreen>
<!-- Sensors -->
<PreferenceScreen android:title="@string/sensor_options"
android:key="@string/sensor_options_key">
<ListPreference android:key="@string/sensor_type_key"
android:title="@string/settings_sensor_type"
android:summary="@string/settings_sensor_type_summary"
android:entries="@array/sensor_type_options"
android:entryValues="@array/sensor_type_values"
android:defaultValue="@string/none"/>
<!-- Bluetooth -->
<PreferenceCategory android:title="@string/bluetooth_options">
<ListPreference android:key="@string/bluetooth_sensor_key"
android:title="@string/bluetooth_sensor_title"
android:summary="@string/bluetooth_sensor_summary"
android:defaultValue="any" />
<Preference android:key="@string/bluetooth_pairing_key"
android:title="@string/bluetooth_pairing"
android:summary="@string/bluetooth_pairing_summary"
android:persistent="false" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/ant_options"
android:key="@string/ant_options_key">
<com.google.android.apps.mytracks.AntPreference
android:key="@string/ant_heart_rate_sensor_id_key"
android:title="@string/settings_heart_rate_ant_sensor_id"/>
<!--
<com.google.android.apps.mytracks.AntPreference
android:key="@string/ant_power_sensor_id_key"
android:title="@string/settings_power_ant_sensor_id"/>
-->
<com.google.android.apps.mytracks.AntPreference
android:key="@string/ant_srm_bridge_sensor_id_key"
android:title="@string/settings_srm_bridge_ant_sensor_id"/>
</PreferenceCategory>
</PreferenceScreen>
<!-- Sharing settings -->
<PreferenceScreen android:title="@string/settings_sharing">
<CheckBoxPreference
+268
View File
@@ -0,0 +1,268 @@
/*
* Copyright 2010 Dynastream Innovations 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.dsi.ant;
/**
* The Android Ant API is not finalized, and *will* change. Use at your
* own risk.
*
* Public API for controlling the Ant Service.
* AntDefines contains definitions commonly used in ANT messaging.
*
* @hide
*/
public class AntDefine {
//////////////////////////////////////////////
// Valid Configuration Values
//////////////////////////////////////////////
public static final byte MIN_BIN = 0;
public static final byte MAX_BIN = 10;
public static final short MIN_DEVICE_ID = 0;
public static final short MAX_DEVICE_ID = (short)65535;
public static final short MIN_BUFFER_THRESHOLD = 0;
public static final short MAX_BUFFER_THRESHOLD = 996;
//////////////////////////////////////////////
// ANT Message Payload Size
//////////////////////////////////////////////
public static final byte ANT_STANDARD_DATA_PAYLOAD_SIZE =((byte)8);
//////////////////////////////////////////////
// ANT LIBRARY Extended Data Message Fields
// NOTE: You must check the extended message
// bitfield first to find out which fields
// are present before accessing them!
//////////////////////////////////////////////
public static final byte ANT_EXT_MESG_DEVICE_ID_FIELD_SIZE =((byte)4);
//public static final byte ANT_EXT_STRING_SIZE =((byte)19); // this is the additional buffer space required required for setting USB Descriptor strings
public static final byte ANT_EXT_STRING_SIZE =((byte)0); // changed to 0 as we will not be dealing with ANT USB parts.
//////////////////////////////////////////////
// ANT Extended Data Message Bifield Definitions
//////////////////////////////////////////////
public static final byte ANT_EXT_MESG_BITFIELD_DEVICE_ID =((byte)0x80); // first field after bitfield
public static final byte ANT_EXT_MESG_BITFIELD_RSSI =((byte)0x40); // next field after ID, if there is one
public static final byte ANT_EXT_MESG_BITFIELD_TIME_STAMP =((byte)0x20); // next field after RSSI, if there is one
// 4 bits free reserved set to 0
public static final byte ANT_EXT_MESG_BIFIELD_EXTENSION =((byte)0x01);
// extended message input bitfield defines
public static final byte ANT_EXT_MESG_BITFIELD_OVERWRITE_SHARED_ADR =((byte)0x10);
public static final byte ANT_EXT_MESG_BITFIELD_TRANSMISSION_TYPE =((byte)0x08);
//////////////////////////////////////////////
// ID Definitions
//////////////////////////////////////////////
public static final byte ANT_ID_SIZE =((byte)4);
public static final byte ANT_ID_TRANS_TYPE_OFFSET =((byte)3);
public static final byte ANT_ID_DEVICE_TYPE_OFFSET =((byte)2);
public static final byte ANT_ID_DEVICE_NUMBER_HIGH_OFFSET =((byte)1);
public static final byte ANT_ID_DEVICE_NUMBER_LOW_OFFSET =((byte)0);
public static final byte ANT_ID_DEVICE_TYPE_PAIRING_FLAG =((byte)0x80);
public static final byte ANT_TRANS_TYPE_SHARED_ADDR_MASK =((byte)0x03);
public static final byte ANT_TRANS_TYPE_1_BYTE_SHARED_ADDRESS =((byte)0x02);
public static final byte ANT_TRANS_TYPE_2_BYTE_SHARED_ADDRESS =((byte)0x03);
//////////////////////////////////////////////
// Assign Channel Parameters
//////////////////////////////////////////////
public static final byte PARAMETER_RX_NOT_TX =((byte)0x00);
public static final byte PARAMETER_TX_NOT_RX =((byte)0x10);
public static final byte PARAMETER_SHARED_CHANNEL =((byte)0x20);
public static final byte PARAMETER_NO_TX_GUARD_BAND =((byte)0x40);
public static final byte PARAMETER_ALWAYS_RX_WILD_CARD_SEARCH_ID =((byte)0x40); //Pre-AP2
public static final byte PARAMETER_RX_ONLY =((byte)0x40);
//////////////////////////////////////////////
// Ext. Assign Channel Parameters
//////////////////////////////////////////////
public static final byte EXT_PARAM_ALWAYS_SEARCH =((byte)0x01);
public static final byte EXT_PARAM_FREQUENCY_AGILITY =((byte)0x04);
//////////////////////////////////////////////
// Radio TX Power Definitions
//////////////////////////////////////////////
public static final byte RADIO_TX_POWER_LVL_MASK =((byte)0x03);
public static final byte RADIO_TX_POWER_LVL_0 =((byte)0x00); //(formerly: RADIO_TX_POWER_MINUS20DB); lowest
public static final byte RADIO_TX_POWER_LVL_1 =((byte)0x01); //(formerly: RADIO_TX_POWER_MINUS10DB);
public static final byte RADIO_TX_POWER_LVL_2 =((byte)0x02); //(formerly: RADIO_TX_POWER_MINUS5DB);
public static final byte RADIO_TX_POWER_LVL_3 =((byte)0x03); //(formerly: RADIO_TX_POWER_0DB); highest
//////////////////////////////////////////////
// Channel Status
//////////////////////////////////////////////
public static final byte STATUS_CHANNEL_STATE_MASK =((byte)0x03);
public static final byte STATUS_UNASSIGNED_CHANNEL =((byte)0x00);
public static final byte STATUS_ASSIGNED_CHANNEL =((byte)0x01);
public static final byte STATUS_SEARCHING_CHANNEL =((byte)0x02);
public static final byte STATUS_TRACKING_CHANNEL =((byte)0x03);
//////////////////////////////////////////////
// Standard capabilities defines
//////////////////////////////////////////////
public static final byte CAPABILITIES_NO_RX_CHANNELS =((byte)0x01);
public static final byte CAPABILITIES_NO_TX_CHANNELS =((byte)0x02);
public static final byte CAPABILITIES_NO_RX_MESSAGES =((byte)0x04);
public static final byte CAPABILITIES_NO_TX_MESSAGES =((byte)0x08);
public static final byte CAPABILITIES_NO_ACKD_MESSAGES =((byte)0x10);
public static final byte CAPABILITIES_NO_BURST_TRANSFER =((byte)0x20);
//////////////////////////////////////////////
// Advanced capabilities defines
//////////////////////////////////////////////
public static final byte CAPABILITIES_OVERUN_UNDERRUN =((byte)0x01); // Support for this functionality has been dropped
public static final byte CAPABILITIES_NETWORK_ENABLED =((byte)0x02);
public static final byte CAPABILITIES_AP1_VERSION_2 =((byte)0x04); // This Version of the AP1 does not support transmit and only had a limited release
public static final byte CAPABILITIES_SERIAL_NUMBER_ENABLED =((byte)0x08);
public static final byte CAPABILITIES_PER_CHANNEL_TX_POWER_ENABLED =((byte)0x10);
public static final byte CAPABILITIES_LOW_PRIORITY_SEARCH_ENABLED =((byte)0x20);
public static final byte CAPABILITIES_SCRIPT_ENABLED =((byte)0x40);
public static final byte CAPABILITIES_SEARCH_LIST_ENABLED =((byte)0x80);
//////////////////////////////////////////////
// Advanced capabilities 2 defines
//////////////////////////////////////////////
public static final byte CAPABILITIES_LED_ENABLED =((byte)0x01);
public static final byte CAPABILITIES_EXT_MESSAGE_ENABLED =((byte)0x02);
public static final byte CAPABILITIES_SCAN_MODE_ENABLED =((byte)0x04);
public static final byte CAPABILITIES_RESERVED =((byte)0x08);
public static final byte CAPABILITIES_PROX_SEARCH_ENABLED =((byte)0x10);
public static final byte CAPABILITIES_EXT_ASSIGN_ENABLED =((byte)0x20);
public static final byte CAPABILITIES_FREE_1 =((byte)0x40);
public static final byte CAPABILITIES_FIT1_ENABLED =((byte)0x80);
//////////////////////////////////////////////
// Advanced capabilities 3 defines
//////////////////////////////////////////////
public static final byte CAPABILITIES_SENSRCORE_ENABLED =((byte)0x01);
public static final byte CAPABILITIES_RESERVED_1 =((byte)0x02);
public static final byte CAPABILITIES_RESERVED_2 =((byte)0x04);
public static final byte CAPABILITIES_RESERVED_3 =((byte)0x08);
//////////////////////////////////////////////
// Burst Message Sequence
//////////////////////////////////////////////
public static final byte CHANNEL_NUMBER_MASK =((byte)0x1F);
public static final byte SEQUENCE_NUMBER_MASK =((byte)0xE0);
public static final byte SEQUENCE_NUMBER_ROLLOVER =((byte)0x60);
public static final byte SEQUENCE_FIRST_MESSAGE =((byte)0x00);
public static final byte SEQUENCE_LAST_MESSAGE =((byte)0x80);
public static final byte SEQUENCE_NUMBER_INC =((byte)0x20);
//////////////////////////////////////////////
// Control Message Flags
//////////////////////////////////////////////
public static final byte BROADCAST_CONTROL_BYTE =((byte)0x00);
public static final byte ACKNOWLEDGED_CONTROL_BYTE =((byte)0xA0);
//////////////////////////////////////////////
// Response / Event Codes
//////////////////////////////////////////////
public static final byte RESPONSE_NO_ERROR =((byte)0x00);
public static final byte NO_EVENT =((byte)0x00);
public static final byte EVENT_RX_SEARCH_TIMEOUT =((byte)0x01);
public static final byte EVENT_RX_FAIL =((byte)0x02);
public static final byte EVENT_TX =((byte)0x03);
public static final byte EVENT_TRANSFER_RX_FAILED =((byte)0x04);
public static final byte EVENT_TRANSFER_TX_COMPLETED =((byte)0x05);
public static final byte EVENT_TRANSFER_TX_FAILED =((byte)0x06);
public static final byte EVENT_CHANNEL_CLOSED =((byte)0x07);
public static final byte EVENT_RX_FAIL_GO_TO_SEARCH =((byte)0x08);
public static final byte EVENT_CHANNEL_COLLISION =((byte)0x09);
public static final byte EVENT_TRANSFER_TX_START =((byte)0x0A); // a pending transmit transfer has begun
public static final byte EVENT_CHANNEL_ACTIVE =((byte)0x0F);
public static final byte EVENT_TRANSFER_TX_NEXT_MESSAGE =((byte)0x11); // only enabled in FIT1
public static final byte CHANNEL_IN_WRONG_STATE =((byte)0x15); // returned on attempt to perform an action from the wrong channel state
public static final byte CHANNEL_NOT_OPENED =((byte)0x16); // returned on attempt to communicate on a channel that is not open
public static final byte CHANNEL_ID_NOT_SET =((byte)0x18); // returned on attempt to open a channel without setting the channel ID
public static final byte CLOSE_ALL_CHANNELS =((byte)0x19); // returned when attempting to start scanning mode, when channels are still open
public static final byte TRANSFER_IN_PROGRESS =((byte)0x1F); // returned on attempt to communicate on a channel with a TX transfer in progress
public static final byte TRANSFER_SEQUENCE_NUMBER_ERROR =((byte)0x20); // returned when sequence number is out of order on a Burst transfer
public static final byte TRANSFER_IN_ERROR =((byte)0x21);
public static final byte TRANSFER_BUSY =((byte)0x22);
public static final byte INVALID_MESSAGE_CRC =((byte)0x26); // returned if there is a framing error on an incomming message
public static final byte MESSAGE_SIZE_EXCEEDS_LIMIT =((byte)0x27); // returned if a data message is provided that is too large
public static final byte INVALID_MESSAGE =((byte)0x28); // returned when the message has an invalid parameter
public static final byte INVALID_NETWORK_NUMBER =((byte)0x29); // returned when an invalid network number is provided
public static final byte INVALID_LIST_ID =((byte)0x30); // returned when the provided list ID or size exceeds the limit
public static final byte INVALID_SCAN_TX_CHANNEL =((byte)0x31); // returned when attempting to transmit on channel 0 when in scan mode
public static final byte INVALID_PARAMETER_PROVIDED =((byte)0x33); // returned when an invalid parameter is specified in a configuration message
public static final byte EVENT_SERIAL_QUE_OVERFLOW =((byte)0x34);
public static final byte EVENT_QUE_OVERFLOW =((byte)0x35); // ANT event que has overflowed and lost 1 or more events
public static final byte EVENT_CLK_ERROR =((byte)0x36); // debug event for XOSC16M on LE1
public static final byte SCRIPT_FULL_ERROR =((byte)0x40); // error writing to script, memory is full
public static final byte SCRIPT_WRITE_ERROR =((byte)0x41); // error writing to script, bytes not written correctly
public static final byte SCRIPT_INVALID_PAGE_ERROR =((byte)0x42); // error accessing script page
public static final byte SCRIPT_LOCKED_ERROR =((byte)0x43); // the scripts are locked and can't be dumped
public static final byte NO_RESPONSE_MESSAGE =((byte)0x50); // returned to the Command_SerialMessageProcess function, so no reply message is generated
public static final byte RETURN_TO_MFG =((byte)0x51); // default return to any mesg when the module determines that the mfg procedure has not been fully completed
public static final byte FIT_ACTIVE_SEARCH_TIMEOUT =((byte)0x60); // Fit1 only event added for timeout of the pairing state after the Fit module becomes active
public static final byte FIT_WATCH_PAIR =((byte)0x61); // Fit1 only
public static final byte FIT_WATCH_UNPAIR =((byte)0x62); // Fit1 only
public static final byte USB_STRING_WRITE_FAIL =((byte)0x70);
// Internal only events below this point
public static final byte INTERNAL_ONLY_EVENTS =((byte)0x80);
public static final byte EVENT_RX =((byte)0x80); // INTERNAL: Event for a receive message
public static final byte EVENT_NEW_CHANNEL =((byte)0x81); // INTERNAL: EVENT for a new active channel
public static final byte EVENT_PASS_THRU =((byte)0x82); // INTERNAL: Event to allow an upper stack events to pass through lower stacks
public static final byte EVENT_BLOCKED =((byte)0xFF); // INTERNAL: Event to replace any event we do not wish to go out, will also zero the size of the Tx message
///////////////////////////////////////////////////////
// Script Command Codes
///////////////////////////////////////////////////////
public static final byte SCRIPT_CMD_FORMAT =((byte)0x00);
public static final byte SCRIPT_CMD_DUMP =((byte)0x01);
public static final byte SCRIPT_CMD_SET_DEFAULT_SECTOR =((byte)0x02);
public static final byte SCRIPT_CMD_END_SECTOR =((byte)0x03);
public static final byte SCRIPT_CMD_END_DUMP =((byte)0x04);
public static final byte SCRIPT_CMD_LOCK =((byte)0x05);
///////////////////////////////////////////////////////
// Reset Mesg Codes
///////////////////////////////////////////////////////
public static final byte RESET_FLAGS_MASK =((byte)0xE0);
public static final byte RESET_SUSPEND =((byte)0x80); // this must follow bitfield def
public static final byte RESET_SYNC =((byte)0x40); // this must follow bitfield def
public static final byte RESET_CMD =((byte)0x20); // this must follow bitfield def
public static final byte RESET_WDT =((byte)0x02);
public static final byte RESET_RST =((byte)0x01);
public static final byte RESET_POR =((byte)0x00);
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,37 @@
/*
* Copyright 2010 Dynastream Innovations 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.dsi.ant;
/**
* Manages the ANT Interface
*
* @hide
*/
public interface AntInterfaceIntent {
public static final String STATUS = "com.dsi.ant.rx.intent.STATUS";
public static final String ANT_MESSAGE = "com.dsi.ant.intent.ANT_MESSAGE";
public static final String ANT_INTERFACE_CLAIMED_PID = "com.dsi.ant.intent.ANT_INTERFACE_CLAIMED_PID";
public static final String ANT_ENABLED_ACTION = "com.dsi.ant.intent.action.ANT_ENABLED";
public static final String ANT_DISABLED_ACTION = "com.dsi.ant.intent.action.ANT_DISABLED";
public static final String ANT_RESET_ACTION = "com.dsi.ant.intent.action.ANT_RESET";
public static final String ANT_INTERFACE_CLAIMED_ACTION = "com.dsi.ant.intent.action.ANT_INTERFACE_CLAIMED_ACTION";
public static final String ANT_RX_MESSAGE_ACTION = "com.dsi.ant.intent.action.ANT_RX_MESSAGE_ACTION";
}
+279
View File
@@ -0,0 +1,279 @@
/*
* Copyright 2010 Dynastream Innovations 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.dsi.ant;
/**
* Public API for controlling the Ant Service.
* AntMesg contains definitions for ANT message IDs
*
* @hide
*/
public class AntMesg {
/////////////////////////////////////////////////////////////////////////////
// HCI VS Message Format
// Messages are in the format:
//
// Outgoing ANT messages (host -> ANT chip)
// 01 D1 FD XX YY YY II JJ ------
// ^ ^ ^ ^
// | HCI framing | | ANT Mesg |
//
// where: 01 is the 1 byte HCI packet Identifier (HCI Command packet)
// D1 FD is the 2 byte HCI op code (0xFDD1 stored in little endian)
// XX is the 1 byte Length of all parameters in bytes (number of bytes in the HCI packet after this byte)
// YY YY is the 2 byte Parameter describing the length of the entire ANT message (II JJ ------) stored in little endian
// II is the 1 byte size of the ANT message (0-249)
// JJ is the 1 byte ID of the ANT message (1-255, 0 is invalid)
// ------ is the data of the ANT message (0-249 bytes of data)
//
// Incoming HCI Command Complete for ANT message command (host <- ANT chip)
// 04 0E 04 01 D1 FD ZZ
//
// where: 04 is the 1 byte HCI packet Identifier (HCI Event packet)
// 0E is the 1 byte HCI event (Command Complete)
// 04 is the 1 byte Length of all parameters in bytes (there are 4 bytes)
// 01 is the 1 byte Number of parameters in the packet (there is 1 parameter)
// D1 FD is the 2 byte HCI Op code of the command (0xFDD1 stored in little endian)
// ZZ is the 1 byte response to the command (0x00 - Command Successful
// 0x1F - Returned if the receive message queue of the ANT chip is full, the command should be retried
// Other - Any other non-zero response code indicates an error)
//
// Incoming ANT messages (host <- ANT chip)
// 04 FF XX 00 05 YY YY II JJ ------
// ^ ^ ^ ^
// | HCI framing | | ANT Mesg |
//
// where: 04 is the 1 byte HCI packet Identifier (HCI Event packet)
// FF is the 1 byte HCI event code (0xFF Vendor Specific event)
// XX is the 1 byte Length of all parameters in bytes (number of bytes in the HCI packet after this byte)
// 00 05 is the 2 byte vendor specific event code for ANT messages (0x0500 stored in little endian)
// YY YY is the 2 byte Parameter describing the length of the entire ANT message (II JJ ------) stored in little endian
// II is the 1 byte size of the ANT message (0-249)
// JJ is the 1 byte ID of the ANT message (1-255, 0 is invalid)
// ------ is the data of the ANT message (0-249 bytes of data)
//
/////////////////////////////////////////////////////////////////////////////
public static final byte MESG_SYNC_SIZE =((byte)0); // Ant messages are embedded in HCI messages we do not include a sync byte
public static final byte MESG_SIZE_SIZE =((byte)1);
public static final byte MESG_ID_SIZE =((byte)1);
public static final byte MESG_CHANNEL_NUM_SIZE =((byte)1);
public static final byte MESG_EXT_MESG_BF_SIZE =((byte)1); // NOTE: this could increase in the future
public static final byte MESG_CHECKSUM_SIZE =((byte)0); // Ant messages are embedded in HCI messages we do not include a checksum
public static final byte MESG_DATA_SIZE =((byte)9);
// The largest serial message is an ANT data message with all of the extended fields
public static final byte MESG_ANT_MAX_PAYLOAD_SIZE =AntDefine.ANT_STANDARD_DATA_PAYLOAD_SIZE;
public static final byte MESG_MAX_EXT_DATA_SIZE =(AntDefine.ANT_EXT_MESG_DEVICE_ID_FIELD_SIZE + AntDefine.ANT_EXT_STRING_SIZE); // ANT device ID (4 bytes) + Padding for ANT EXT string size(19 bytes)
public static final byte MESG_MAX_DATA_SIZE =(MESG_ANT_MAX_PAYLOAD_SIZE + MESG_EXT_MESG_BF_SIZE + MESG_MAX_EXT_DATA_SIZE); // ANT data payload (8 bytes) + extended bitfield (1 byte) + extended data (10 bytes)
public static final byte MESG_MAX_SIZE_VALUE =(MESG_MAX_DATA_SIZE + MESG_CHANNEL_NUM_SIZE); // this is the maximum value that the serial message size value is allowed to be
public static final byte MESG_BUFFER_SIZE =(MESG_SIZE_SIZE + MESG_ID_SIZE + MESG_CHANNEL_NUM_SIZE + MESG_MAX_DATA_SIZE + MESG_CHECKSUM_SIZE);
public static final byte MESG_FRAMED_SIZE =(MESG_ID_SIZE + MESG_CHANNEL_NUM_SIZE + MESG_MAX_DATA_SIZE);
public static final byte MESG_HEADER_SIZE =(MESG_SYNC_SIZE + MESG_SIZE_SIZE + MESG_ID_SIZE);
public static final byte MESG_FRAME_SIZE =(MESG_HEADER_SIZE + MESG_CHECKSUM_SIZE);
public static final byte MESG_MAX_SIZE =(MESG_MAX_DATA_SIZE + MESG_FRAME_SIZE);
public static final byte MESG_SIZE_OFFSET =(MESG_SYNC_SIZE);
public static final byte MESG_ID_OFFSET =(MESG_SYNC_SIZE + MESG_SIZE_SIZE);
public static final byte MESG_DATA_OFFSET =(MESG_HEADER_SIZE);
public static final byte MESG_RECOMMENDED_BUFFER_SIZE =((byte) 64); // This is the recommended size for serial message buffers if there are no RAM restrictions on the system
//////////////////////////////////////////////
// Message ID's
//////////////////////////////////////////////
public static final byte MESG_INVALID_ID =((byte)0x00);
public static final byte MESG_EVENT_ID =((byte)0x01);
public static final byte MESG_VERSION_ID =((byte)0x3E);
public static final byte MESG_RESPONSE_EVENT_ID =((byte)0x40);
public static final byte MESG_UNASSIGN_CHANNEL_ID =((byte)0x41);
public static final byte MESG_ASSIGN_CHANNEL_ID =((byte)0x42);
public static final byte MESG_CHANNEL_MESG_PERIOD_ID =((byte)0x43);
public static final byte MESG_CHANNEL_SEARCH_TIMEOUT_ID =((byte)0x44);
public static final byte MESG_CHANNEL_RADIO_FREQ_ID =((byte)0x45);
public static final byte MESG_NETWORK_KEY_ID =((byte)0x46);
public static final byte MESG_RADIO_TX_POWER_ID =((byte)0x47);
public static final byte MESG_RADIO_CW_MODE_ID =((byte)0x48);
public static final byte MESG_SYSTEM_RESET_ID =((byte)0x4A);
public static final byte MESG_OPEN_CHANNEL_ID =((byte)0x4B);
public static final byte MESG_CLOSE_CHANNEL_ID =((byte)0x4C);
public static final byte MESG_REQUEST_ID =((byte)0x4D);
public static final byte MESG_BROADCAST_DATA_ID =((byte)0x4E);
public static final byte MESG_ACKNOWLEDGED_DATA_ID =((byte)0x4F);
public static final byte MESG_BURST_DATA_ID =((byte)0x50);
public static final byte MESG_CHANNEL_ID_ID =((byte)0x51);
public static final byte MESG_CHANNEL_STATUS_ID =((byte)0x52);
public static final byte MESG_RADIO_CW_INIT_ID =((byte)0x53);
public static final byte MESG_CAPABILITIES_ID =((byte)0x54);
public static final byte MESG_STACKLIMIT_ID =((byte)0x55);
public static final byte MESG_SCRIPT_DATA_ID =((byte)0x56);
public static final byte MESG_SCRIPT_CMD_ID =((byte)0x57);
public static final byte MESG_ID_LIST_ADD_ID =((byte)0x59);
public static final byte MESG_ID_LIST_CONFIG_ID =((byte)0x5A);
public static final byte MESG_OPEN_RX_SCAN_ID =((byte)0x5B);
public static final byte MESG_EXT_CHANNEL_RADIO_FREQ_ID =((byte)0x5C); // OBSOLETE: (for 905 radio)
public static final byte MESG_EXT_BROADCAST_DATA_ID =((byte)0x5D);
public static final byte MESG_EXT_ACKNOWLEDGED_DATA_ID =((byte)0x5E);
public static final byte MESG_EXT_BURST_DATA_ID =((byte)0x5F);
public static final byte MESG_CHANNEL_RADIO_TX_POWER_ID =((byte)0x60);
public static final byte MESG_GET_SERIAL_NUM_ID =((byte)0x61);
public static final byte MESG_GET_TEMP_CAL_ID =((byte)0x62);
public static final byte MESG_SET_LP_SEARCH_TIMEOUT_ID =((byte)0x63);
public static final byte MESG_SET_TX_SEARCH_ON_NEXT_ID =((byte)0x64);
public static final byte MESG_SERIAL_NUM_SET_CHANNEL_ID_ID =((byte)0x65);
public static final byte MESG_RX_EXT_MESGS_ENABLE_ID =((byte)0x66);
public static final byte MESG_RADIO_CONFIG_ALWAYS_ID =((byte)0x67);
public static final byte MESG_ENABLE_LED_FLASH_ID =((byte)0x68);
public static final byte MESG_XTAL_ENABLE_ID =((byte)0x6D);
public static final byte MESG_STARTUP_MESG_ID =((byte)0x6F);
public static final byte MESG_AUTO_FREQ_CONFIG_ID =((byte)0x70);
public static final byte MESG_PROX_SEARCH_CONFIG_ID =((byte)0x71);
public static final byte MESG_EVENT_BUFFERING_CONFIG_ID =((byte)0x74);
public static final byte MESG_CUBE_CMD_ID =((byte)0x80);
public static final byte MESG_GET_PIN_DIODE_CONTROL_ID =((byte)0x8D);
public static final byte MESG_PIN_DIODE_CONTROL_ID =((byte)0x8E);
public static final byte MESG_FIT1_SET_AGC_ID =((byte)0x8F);
public static final byte MESG_FIT1_SET_EQUIP_STATE_ID =((byte)0x91); // *** CONFLICT: w/ Sensrcore, Fit1 will never have sensrcore enabled
// Sensrcore Messages
public static final byte MESG_SET_CHANNEL_INPUT_MASK_ID =((byte)0x90);
public static final byte MESG_SET_CHANNEL_DATA_TYPE_ID =((byte)0x91);
public static final byte MESG_READ_PINS_FOR_SECT_ID =((byte)0x92);
public static final byte MESG_TIMER_SELECT_ID =((byte)0x93);
public static final byte MESG_ATOD_SETTINGS_ID =((byte)0x94);
public static final byte MESG_SET_SHARED_ADDRESS_ID =((byte)0x95);
public static final byte MESG_ATOD_EXTERNAL_ENABLE_ID =((byte)0x96);
public static final byte MESG_ATOD_PIN_SETUP_ID =((byte)0x97);
public static final byte MESG_SETUP_ALARM_ID =((byte)0x98);
public static final byte MESG_ALARM_VARIABLE_MODIFY_TEST_ID =((byte)0x99);
public static final byte MESG_PARTIAL_RESET_ID =((byte)0x9A);
public static final byte MESG_OVERWRITE_TEMP_CAL_ID =((byte)0x9B);
public static final byte MESG_SERIAL_PASSTHRU_SETTINGS_ID =((byte)0x9C);
public static final byte MESG_BIST_ID =((byte)0xAA);
public static final byte MESG_UNLOCK_INTERFACE_ID =((byte)0xAD);
public static final byte MESG_SERIAL_ERROR_ID =((byte)0xAE);
public static final byte MESG_SET_ID_STRING_ID =((byte)0xAF);
public static final byte MESG_PORT_GET_IO_STATE_ID =((byte)0xB4);
public static final byte MESG_PORT_SET_IO_STATE_ID =((byte)0xB5);
public static final byte MESG_SLEEP_ID =((byte)0xC5);
public static final byte MESG_GET_GRMN_ESN_ID =((byte)0xC6);
public static final byte MESG_SET_USB_INFO_ID =((byte)0xC7);
public static final byte MESG_COMMAND_COMPLETE_RESPONSE_ID =((byte)0xC8);
//////////////////////////////////////////////
// Command complete results
//////////////////////////////////////////////
public static final byte MESG_COMMAND_COMPLETE_SUCCESS =((byte)0x00);
public static final byte MESG_COMMAND_COMPLETE_RETRY =((byte)0x1F);
//////////////////////////////////////////////
// Message Sizes
//////////////////////////////////////////////
public static final byte MESG_INVALID_SIZE =((byte)0);
public static final byte MESG_VERSION_SIZE =((byte)13);
public static final byte MESG_RESPONSE_EVENT_SIZE =((byte)3);
public static final byte MESG_CHANNEL_STATUS_SIZE =((byte)2);
public static final byte MESG_UNASSIGN_CHANNEL_SIZE =((byte)1);
public static final byte MESG_ASSIGN_CHANNEL_SIZE =((byte)3);
public static final byte MESG_CHANNEL_ID_SIZE =((byte)5);
public static final byte MESG_CHANNEL_MESG_PERIOD_SIZE =((byte)3);
public static final byte MESG_CHANNEL_SEARCH_TIMEOUT_SIZE =((byte)2);
public static final byte MESG_CHANNEL_RADIO_FREQ_SIZE =((byte)2);
public static final byte MESG_CHANNEL_RADIO_TX_POWER_SIZE =((byte)2);
public static final byte MESG_NETWORK_KEY_SIZE =((byte)9);
public static final byte MESG_RADIO_TX_POWER_SIZE =((byte)2);
public static final byte MESG_RADIO_CW_MODE_SIZE =((byte)3);
public static final byte MESG_RADIO_CW_INIT_SIZE =((byte)1);
public static final byte MESG_SYSTEM_RESET_SIZE =((byte)1);
public static final byte MESG_OPEN_CHANNEL_SIZE =((byte)1);
public static final byte MESG_CLOSE_CHANNEL_SIZE =((byte)1);
public static final byte MESG_REQUEST_SIZE =((byte)2);
public static final byte MESG_CAPABILITIES_SIZE =((byte)6);
public static final byte MESG_STACKLIMIT_SIZE =((byte)2);
public static final byte MESG_SCRIPT_DATA_SIZE =((byte)10);
public static final byte MESG_SCRIPT_CMD_SIZE =((byte)3);
public static final byte MESG_ID_LIST_ADD_SIZE =((byte)6);
public static final byte MESG_ID_LIST_CONFIG_SIZE =((byte)3);
public static final byte MESG_OPEN_RX_SCAN_SIZE =((byte)1);
public static final byte MESG_EXT_CHANNEL_RADIO_FREQ_SIZE =((byte)3);
public static final byte MESG_RADIO_CONFIG_ALWAYS_SIZE =((byte)2);
public static final byte MESG_RX_EXT_MESGS_ENABLE_SIZE =((byte)2);
public static final byte MESG_SET_TX_SEARCH_ON_NEXT_SIZE =((byte)2);
public static final byte MESG_SET_LP_SEARCH_TIMEOUT_SIZE =((byte)2);
public static final byte MESG_SERIAL_NUM_SET_CHANNEL_ID_SIZE =((byte)3);
public static final byte MESG_ENABLE_LED_FLASH_SIZE =((byte)2);
public static final byte MESG_GET_SERIAL_NUM_SIZE =((byte)4);
public static final byte MESG_GET_TEMP_CAL_SIZE =((byte)4);
public static final byte MESG_XTAL_ENABLE_SIZE =((byte)1);
public static final byte MESG_STARTUP_MESG_SIZE =((byte)1);
public static final byte MESG_AUTO_FREQ_CONFIG_SIZE =((byte)4);
public static final byte MESG_PROX_SEARCH_CONFIG_SIZE =((byte)2);
public static final byte MESG_GET_PIN_DIODE_CONTROL_SIZE =((byte)1);
public static final byte MESG_PIN_DIODE_CONTROL_ID_SIZE =((byte)2);
public static final byte MESG_FIT1_SET_EQUIP_STATE_SIZE =((byte)2);
public static final byte MESG_FIT1_SET_AGC_SIZE =((byte)3);
public static final byte MESG_BIST_SIZE =((byte)6);
public static final byte MESG_UNLOCK_INTERFACE_SIZE =((byte)1);
public static final byte MESG_SET_SHARED_ADDRESS_SIZE =((byte)3);
public static final byte MESG_GET_GRMN_ESN_SIZE =((byte)5);
public static final byte MESG_PORT_SET_IO_STATE_SIZE =((byte)5);
public static final byte MESG_EVENT_BUFFERING_CONFIG_SIZE =((byte)6);
public static final byte MESG_SLEEP_SIZE =((byte)1);
public static final byte MESG_EXT_DATA_SIZE =((byte)13);
protected AntMesg()
{ }
}
+70
View File
@@ -0,0 +1,70 @@
/*
* Copyright 2010 Dynastream Innovations 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.dsi.ant;
/**
* The Android Ant API is not finalized, and *will* be updated and expanded.
* This is the base level ANT messaging API and gives any application full
* control over the ANT radio HW. Caution should be exercised when using
* this interface.
*
* Public API for controlling the Ant Service.
*
* {@hide}
*/
interface IAnt {
// Since version 1 (1.0):
boolean enable();
boolean disable();
boolean isEnabled();
boolean ANTTxMessage(in byte[] message);
boolean ANTResetSystem();
boolean ANTUnassignChannel(byte channelNumber);
boolean ANTAssignChannel(byte channelNumber, byte channelType, byte networkNumber);
boolean ANTSetChannelId(byte channelNumber, int deviceNumber, byte deviceType, byte txType);
boolean ANTSetChannelPeriod(byte channelNumber, int channelPeriod);
boolean ANTSetChannelRFFreq(byte channelNumber, byte radioFrequency);
boolean ANTSetChannelSearchTimeout(byte channelNumber, byte searchTimeout);
boolean ANTSetLowPriorityChannelSearchTimeout(byte channelNumber, byte searchTimeout);
boolean ANTSetProximitySearch(byte channelNumber, byte searchThreshold);
boolean ANTSetChannelTxPower(byte channelNumber, byte txPower);
boolean ANTAddChannelId(byte channelNumber, int deviceNumber, byte deviceType, byte txType, byte listIndex);
boolean ANTConfigList(byte channelNumber, byte listSize, byte exclude);
boolean ANTOpenChannel(byte channelNumber);
boolean ANTCloseChannel(byte channelNumber);
boolean ANTRequestMessage(byte channelNumber, byte messageID);
boolean ANTSendBroadcastData(byte channelNumber, in byte[] txBuffer);
boolean ANTSendAcknowledgedData(byte channelNumber, in byte[] txBuffer);
boolean ANTSendBurstTransferPacket(byte control, in byte[] txBuffer);
int ANTSendBurstTransfer(byte channelNumber, in byte[] txBuffer);
int ANTTransmitBurst(byte channelNumber, in byte[] txBuffer, int initialPacket, boolean containsEndOfBurst);
// Since version 4 (1.3):
boolean ANTConfigEventBuffering(int screenOnFlushTimerInterval, int screenOnFlushBufferThreshold, int screenOffFlushTimerInterval, int screenOffFlushBufferThreshold);
// Since version 2 (1.1):
boolean ANTDisableEventBuffering();
// Since version 3 (1.2):
int getServiceLibraryVersionCode();
String getServiceLibraryVersionName();
}
+77
View File
@@ -0,0 +1,77 @@
/*
* Copyright 2011 Dynastream Innovations 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.dsi.ant;
/**
* The Android Ant API is not finalized, and *will* be updated and expanded.
* This is the base level ANT messaging API and gives any application full
* control over the ANT radio HW. Caution should be exercised when using
* this interface.
*
* Public API for controlling the Ant Service.
*
* {@hide}
*/
interface IAnt_6 {
// Since version 1 (1.0):
boolean enable();
boolean disable();
boolean isEnabled();
boolean ANTTxMessage(in byte[] message);
boolean ANTResetSystem();
boolean ANTUnassignChannel(byte channelNumber);
boolean ANTAssignChannel(byte channelNumber, byte channelType, byte networkNumber);
boolean ANTSetChannelId(byte channelNumber, int deviceNumber, byte deviceType, byte txType);
boolean ANTSetChannelPeriod(byte channelNumber, int channelPeriod);
boolean ANTSetChannelRFFreq(byte channelNumber, byte radioFrequency);
boolean ANTSetChannelSearchTimeout(byte channelNumber, byte searchTimeout);
boolean ANTSetLowPriorityChannelSearchTimeout(byte channelNumber, byte searchTimeout);
boolean ANTSetProximitySearch(byte channelNumber, byte searchThreshold);
boolean ANTSetChannelTxPower(byte channelNumber, byte txPower);
boolean ANTAddChannelId(byte channelNumber, int deviceNumber, byte deviceType, byte txType, byte listIndex);
boolean ANTConfigList(byte channelNumber, byte listSize, byte exclude);
boolean ANTOpenChannel(byte channelNumber);
boolean ANTCloseChannel(byte channelNumber);
boolean ANTRequestMessage(byte channelNumber, byte messageID);
boolean ANTSendBroadcastData(byte channelNumber, in byte[] txBuffer);
boolean ANTSendAcknowledgedData(byte channelNumber, in byte[] txBuffer);
boolean ANTSendBurstTransferPacket(byte control, in byte[] txBuffer);
int ANTSendBurstTransfer(byte channelNumber, in byte[] txBuffer);
int ANTTransmitBurst(byte channelNumber, in byte[] txBuffer, int initialPacket, boolean containsEndOfBurst);
// Since version 4 (1.3):
boolean ANTConfigEventBuffering(int screenOnFlushTimerInterval, int screenOnFlushBufferThreshold, int screenOffFlushTimerInterval, int screenOffFlushBufferThreshold);
// Since version 2 (1.1):
boolean ANTDisableEventBuffering();
// Since version 3 (1.2):
int getServiceLibraryVersionCode();
String getServiceLibraryVersionName();
// Since version 6 (1.5):
boolean claimInterface();
boolean requestForceClaimInterface(String appName);
boolean stopRequestForceClaimInterface();
boolean releaseInterface();
boolean hasClaimedInterface();
}
@@ -0,0 +1,29 @@
/*
* Copyright 2010 Dynastream Innovations 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.dsi.ant;
/**
*
* API for configuring the non-ANT components of the ANT Service.
*
* {@hide}
*/
interface IServiceSettings {
void debugLogging(boolean debug);
boolean setNumCombinedBurstPackets(int numPackets);
int getNumCombinedBurstPackets();
}
+35
View File
@@ -0,0 +1,35 @@
/*
* Copyright 2011 Dynastream Innovations 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.dsi.ant;
/**
* Defines version numbers
*
* @hide
*/
public class Version {
//////////////////////////////////////////////
// Library Version Information
//////////////////////////////////////////////
public static final int ANT_LIBRARY_VERSION_CODE = 6;
public static final int ANT_LIBRARY_VERSION_MAJOR = 2;
public static final int ANT_LIBRARY_VERSION_MINOR = 0;
public static final String ANT_LIBRARY_VERSION_NAME = String.valueOf(ANT_LIBRARY_VERSION_MAJOR) + "." + String.valueOf(ANT_LIBRARY_VERSION_MINOR);
}
@@ -0,0 +1,20 @@
package com.dsi.ant.exception;
public class AntInterfaceException extends Exception
{
/**
*
*/
private static final long serialVersionUID = -7278855366167722274L;
public AntInterfaceException()
{
this("Unknown ANT Interface error");
}
public AntInterfaceException(String string)
{
super(string);
}
}
@@ -0,0 +1,23 @@
package com.dsi.ant.exception;
import android.os.RemoteException;
public class AntRemoteException extends AntInterfaceException
{
/**
*
*/
private static final long serialVersionUID = 8950974759973459561L;
public AntRemoteException(RemoteException e)
{
this("ANT Interface error, ANT Radio Service remote error: "+e.toString(), e);
}
public AntRemoteException(String string, RemoteException e)
{
super(string);
this.initCause(e);
}
}
@@ -0,0 +1,19 @@
package com.dsi.ant.exception;
public class AntServiceNotConnectedException extends AntInterfaceException
{
/**
*
*/
private static final long serialVersionUID = -2085081032170129309L;
public AntServiceNotConnectedException()
{
this("ANT Interface error, ANT Radio Service not connected.");
}
public AntServiceNotConnectedException(String string)
{
super(string);
}
}
@@ -1,247 +0,0 @@
/*
* Copyright 2009 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.mymaps;
import com.google.android.maps.GeoPoint;
import java.io.Serializable;
import java.util.Vector;
/**
* MyMapsFeature contains all of the data associated with a feature in My Maps,
* where a feature is a marker, line, or shape. Some of the data is stored in a
* {@link MyMapsFeatureMetadata} object so that it can be more efficiently
* transmitted to other activities.
*/
public class MyMapsFeature implements Serializable {
private static final long serialVersionUID = 8439035544430497236L;
/** A marker feature displays an icon at a single point on the map. */
public static final int MARKER = 0;
/**
* A line feature displays a line connecting a set of points on the map.
*/
public static final int LINE = 1;
/**
* A shape feature displays a border defined by connecting a set of points,
* including connecting the last to the first, and displays the area
* confined by this border.
*/
public static final int SHAPE = 2;
/** The local feature id for this feature, if needed. */
private String androidId;
/**
* The latitudes of the points of this feature in order, specified in
* millionths of a degree north.
*/
private final Vector<Integer> latitudeE6 = new Vector<Integer>();
/**
* The longitudes of the points of this feature in order, specified in
* millionths of a degree east.
*/
private final Vector<Integer> longitudeE6 = new Vector<Integer>();
/** The metadata of this feature in a format efficient for transmission. */
private MyMapsFeatureMetadata featureInfo = new MyMapsFeatureMetadata();
/**
* Initializes a valid but empty feature. It will default to a
* {@link #MARKER} with a blue placemark with a dot as an icon at the
* location (0, 0).
*/
public MyMapsFeature() {
}
/**
* Adds a new point to the end of this feature.
*
* @param point The new point to add
*/
public synchronized void addPoint(GeoPoint point) {
latitudeE6.add(point.getLatitudeE6());
longitudeE6.add(point.getLongitudeE6());
}
/**
* Generates a new local id for this feature based on the current time and
* a random number.
*/
public synchronized void generateAndroidId() {
Long time = System.currentTimeMillis();
Integer random = (int) (Math.random() * 10000);
androidId = time.toString() + "." + random.toString();
}
/**
* Retrieves the current local id for this feature if one is available.
*
* @return The local id for this feature
*/
public String getAndroidId() {
return androidId;
}
/**
* Retrieves the current (html) description of this feature. The description
* is stored in the feature metadata.
*
* @return The description of this feature
*/
public String getDescription() {
return featureInfo.getDescription();
}
/**
* Sets the description of this feature. That description is stored in the
* feature metadata.
*
* @param description The new description of this feature
*/
public synchronized void setDescription(String description) {
featureInfo.setDescription(description);
}
/**
* Retrieves the point at the given index for this feature.
*
* @param index The index of the point desired
* @return A {@link GeoPoint} representing the point or null if that point
* doesn't exist
*/
public GeoPoint getPoint(int index) {
if (latitudeE6.size() <= index) {
return null;
}
return new GeoPoint(latitudeE6.get(index), longitudeE6.get(index));
}
/**
* Counts the number of points in this feature and return that count.
*
* @return The number of points in this feature
*/
public int getPointCount() {
return latitudeE6.size();
}
/**
* Retrieves the title of this feature. That title is stored in the feature
* metadata.
*
* @return the current title of this feature
*/
public String getTitle() {
return featureInfo.getTitle();
}
/**
* Retrieves the type of this feature. That type is stored in the feature
* metadata.
*
* @return One of {@link #MARKER}, {@link #LINE}, or {@link #SHAPE}
* identifying the type of this feature
*/
public int getType() {
return featureInfo.getType();
}
/**
* Retrieves the current color of this feature as an ARGB color integer.
* That color is stored in the feature metadata.
*
* @return The ARGB color of this feature
*/
public int getColor() {
return featureInfo.getColor();
}
/**
* Retrieves the current line width of this feature. That line width is
* stored in the feature metadata.
*
* @return The line width of this feature
*/
public int getLineWidth() {
return featureInfo.getLineWidth();
}
/**
* Retrieves the current fill color of this feature as an ARGB color
* integer. That color is stored in the feature metadata.
*
* @return The ARGB fill color of this feature
*/
public int getFillColor() {
return featureInfo.getFillColor();
}
/**
* Retrieves the current icon url of this feature. That icon url is stored
* in the feature metadata.
*
* @return The icon url for this feature
*/
public String getIconUrl() {
return featureInfo.getIconUrl();
}
/**
* Sets the title of this feature. That title is stored in the feature
* metadata.
*
* @param title The new title of this feature
*/
public synchronized void setTitle(String title) {
featureInfo.setTitle(title);
}
/**
* Sets the type of this feature. That type is stored in the feature
* metadata.
*
* @param type The new type of the feature. That type must be one of
* {@link #MARKER}, {@link #LINE}, or {@link #SHAPE}
*/
public synchronized void setType(int type) {
featureInfo.setType(type);
}
/**
* Sets the ARGB color of this feature. That color is stored in the feature
* metadata.
*
* @param color The new ARGB color of this feature
*/
public synchronized void setColor(int color) {
featureInfo.setColor(color);
}
/**
* Sets the icon url of this feature. That icon url is stored in the feature
* metadata.
*
* @param url The new icon url of the feature
*/
public synchronized void setIconUrl(String url) {
featureInfo.setIconUrl(url);
}
}
@@ -1,101 +0,0 @@
/*
* Copyright 2009 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.mymaps;
/**
* Metadata about a maps feature.
*/
public class MyMapsFeatureMetadata {
private static final String BLUE_DOT_URL =
"http://maps.google.com/mapfiles/ms/micons/blue-dot.png";
private static final int DEFAULT_COLOR = 0x800000FF;
private static final int DEFAULT_FILL_COLOR = 0xC00000FF;
private String title;
private String description;
private int type;
private int color;
private int lineWidth;
private int fillColor;
private String iconUrl;
public MyMapsFeatureMetadata() {
title = "";
description = "";
type = MyMapsFeature.MARKER;
color = DEFAULT_COLOR;
lineWidth = 5;
fillColor = DEFAULT_FILL_COLOR;
iconUrl = BLUE_DOT_URL;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getLineWidth() {
return lineWidth;
}
public void setLineWidth(int width) {
lineWidth = width;
}
public int getFillColor() {
return fillColor;
}
public void setFillColor(int color) {
fillColor = color;
}
public String getIconUrl() {
return iconUrl;
}
public void setIconUrl(String url) {
iconUrl = new String(url);
}
}
@@ -1,195 +0,0 @@
/*
* Copyright 2009 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.mymaps;
import com.google.wireless.gdata.data.Entry;
import com.google.wireless.gdata.data.StringUtils;
import com.google.wireless.gdata.maps.MapFeatureEntry;
import com.google.wireless.gdata.maps.MapsClient;
import android.graphics.Color;
import android.util.Log;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
import java.io.StringWriter;
/**
* Converter from GData objects to MyMaps objects.
*/
public class MyMapsGDataConverter {
private final XmlSerializer xmlSerializer;
public MyMapsGDataConverter() throws XmlPullParserException {
xmlSerializer = XmlPullParserFactory.newInstance().newSerializer();
}
public static MyMapsMapMetadata getMapMetadataForEntry(
MapFeatureEntry entry) {
MyMapsMapMetadata metadata = new MyMapsMapMetadata();
if ("public".equals(entry.getPrivacy())) {
metadata.setSearchable(true);
} else {
metadata.setSearchable(false);
}
metadata.setTitle(entry.getTitle());
String desc = entry.getContent();
if (desc.length() > 12) {
metadata.setDescription(desc.substring(9, desc.length() - 3));
}
metadata.setGDataEditUri(entry.getEditUri());
return metadata;
}
public static String getMapidForEntry(Entry entry) {
return MapsClient.getMapIdFromMapEntryId(entry.getId());
}
public static Entry getMapEntryForMetadata(MyMapsMapMetadata metadata) {
MapFeatureEntry entry = new MapFeatureEntry();
entry.setEditUri(metadata.getGDataEditUri());
entry.setTitle(metadata.getTitle());
entry.setContent(metadata.getDescription());
entry.setPrivacy(metadata.getSearchable() ? "public" : "unlisted");
entry.setAuthor("android");
entry.setEmail("nobody@google.com");
return entry;
}
public MapFeatureEntry getEntryForFeature(MyMapsFeature feature) {
MapFeatureEntry entry = new MapFeatureEntry();
entry.setTitle(feature.getTitle());
entry.setAuthor("android");
entry.setEmail("nobody@google.com");
entry.setCategoryScheme("http://schemas.google.com/g/2005#kind");
entry.setCategory("http://schemas.google.com/g/2008#mapfeature");
entry.setEditUri("");
if (!StringUtils.isEmpty(feature.getAndroidId())) {
entry.setAttribute("_androidId", feature.getAndroidId());
}
try {
StringWriter writer = new StringWriter();
xmlSerializer.setOutput(writer);
xmlSerializer.startTag(null, "Placemark");
xmlSerializer.attribute(null, "xmlns", "http://earth.google.com/kml/2.2");
xmlSerializer.startTag(null, "Style");
if (feature.getType() == MyMapsFeature.MARKER) {
xmlSerializer.startTag(null, "IconStyle");
xmlSerializer.startTag(null, "Icon");
xmlSerializer.startTag(null, "href");
xmlSerializer.text(feature.getIconUrl());
xmlSerializer.endTag(null, "href");
xmlSerializer.endTag(null, "Icon");
xmlSerializer.endTag(null, "IconStyle");
} else {
xmlSerializer.startTag(null, "LineStyle");
xmlSerializer.startTag(null, "color");
int color = feature.getColor();
// Reverse the color because KML is ABGR and Android is ARGB
xmlSerializer.text(Integer.toHexString(
Color.argb(Color.alpha(color), Color.blue(color),
Color.green(color), Color.red(color))));
xmlSerializer.endTag(null, "color");
xmlSerializer.startTag(null, "width");
xmlSerializer.text(Integer.toString(feature.getLineWidth()));
xmlSerializer.endTag(null, "width");
xmlSerializer.endTag(null, "LineStyle");
if (feature.getType() == MyMapsFeature.SHAPE) {
xmlSerializer.startTag(null, "PolyStyle");
xmlSerializer.startTag(null, "color");
int fcolor = feature.getFillColor();
// Reverse the color because KML is ABGR and Android is ARGB
xmlSerializer.text(Integer.toHexString(Color.argb(Color.alpha(fcolor),
Color.blue(fcolor), Color.green(fcolor), Color.red(fcolor))));
xmlSerializer.endTag(null, "color");
xmlSerializer.startTag(null, "fill");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "fill");
xmlSerializer.startTag(null, "outline");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "outline");
xmlSerializer.endTag(null, "PolyStyle");
}
}
xmlSerializer.endTag(null, "Style");
xmlSerializer.startTag(null, "name");
xmlSerializer.text(feature.getTitle());
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "description");
xmlSerializer.cdsect(feature.getDescription());
xmlSerializer.endTag(null, "description");
StringBuilder pointBuilder = new StringBuilder();
for (int i = 0; i < feature.getPointCount(); ++i) {
if (i > 0) {
pointBuilder.append('\n');
}
pointBuilder.append(feature.getPoint(i).getLongitudeE6() / 1e6);
pointBuilder.append(',');
pointBuilder.append(feature.getPoint(i).getLatitudeE6() / 1e6);
pointBuilder.append(",0.000000");
}
String pointString = pointBuilder.toString();
if (feature.getType() == MyMapsFeature.MARKER) {
xmlSerializer.startTag(null, "Point");
xmlSerializer.startTag(null, "coordinates");
xmlSerializer.text(pointString);
xmlSerializer.endTag(null, "coordinates");
xmlSerializer.endTag(null, "Point");
} else if (feature.getType() == MyMapsFeature.LINE) {
xmlSerializer.startTag(null, "LineString");
xmlSerializer.startTag(null, "tessellate");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "tessellate");
xmlSerializer.startTag(null, "coordinates");
xmlSerializer.text(pointString);
xmlSerializer.endTag(null, "coordinates");
xmlSerializer.endTag(null, "LineString");
} else {
xmlSerializer.startTag(null, "Polygon");
xmlSerializer.startTag(null, "outerBoundaryIs");
xmlSerializer.startTag(null, "LinearRing");
xmlSerializer.startTag(null, "tessellate");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "tessellate");
xmlSerializer.startTag(null, "coordinates");
xmlSerializer.text(pointString + "\n"
+ Double.toString(feature.getPoint(0).getLongitudeE6() / 1e6)
+ ","
+ Double.toString(feature.getPoint(0).getLatitudeE6() / 1e6)
+ ",0.000000");
xmlSerializer.endTag(null, "coordinates");
xmlSerializer.endTag(null, "LinearRing");
xmlSerializer.endTag(null, "outerBoundaryIs");
xmlSerializer.endTag(null, "Polygon");
}
xmlSerializer.endTag(null, "Placemark");
xmlSerializer.flush();
entry.setContent(writer.toString());
Log.d("My Google Maps", "Generated kml:\n" + entry.getContent());
Log.d("My Google Maps", "Edit URI: " + entry.getEditUri());
} catch (IOException e) {
e.printStackTrace();
}
return entry;
}
}
@@ -1,190 +0,0 @@
/*
* Copyright 2010 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.mymaps;
import com.google.android.apps.mytracks.MyTracksConstants;
import com.google.android.apps.mytracks.io.AuthManager;
import com.google.android.apps.mytracks.io.gdata.GDataClientFactory;
import com.google.android.common.gdata.AndroidXmlParserFactory;
import com.google.wireless.gdata.client.GDataClient;
import com.google.wireless.gdata.client.HttpException;
import com.google.wireless.gdata.maps.MapsClient;
import com.google.wireless.gdata.maps.xml.XmlMapsGDataParserFactory;
import com.google.wireless.gdata.parser.xml.SimplePullParser.ParseException;
import com.google.wireless.gdata2.ConflictDetectedException;
import com.google.wireless.gdata2.client.AuthenticationException;
import android.content.Context;
import android.util.Log;
import java.io.IOException;
/**
* MyMapsGDataWrapper provides a wrapper around GData operations that maintains
* the GData client, and provides a method to run gdata queries with proper
* error handling. After a query is run, the wrapper can be queried about the
* error that occurred.
*/
public class MyMapsGDataWrapper {
/**
* A QueryFunction is passed in when executing a query. The query function
* of the class is called with the GData client as a parameter. The
* function should execute whatever operations it desires on the client
* without concern for whether the client will throw an error.
*/
public interface QueryFunction {
public abstract void query(MapsClient client)
throws AuthenticationException, IOException, ParseException,
ConflictDetectedException, Exception;
}
// The types of error that may be encountered
/** No error occurred. */
public static final int ERROR_NO_ERROR = 0;
/** There was an authentication error, the auth token may be invalid. */
public static final int ERROR_AUTH = 1;
/** There was an internal error on the server side. */
public static final int ERROR_INTERNAL = 2;
/** There was an error connecting to the server. */
public static final int ERROR_CONNECTION = 3;
/** The item queried did not exit. */
public static final int ERROR_NOT_FOUND = 4;
/** There was an error parsing or serializing locally. */
public static final int ERROR_LOCAL = 5;
/** There was a conflict, update the entry and try again. */
public static final int ERROR_CONFLICT = 6;
/**
* A query was run after cleaning up the wrapper, so the client was invalid.
*/
public static final int ERROR_CLEANED_UP = 7;
/** An unknown error occurred. */
public static final int ERROR_UNKNOWN = 100;
private final GDataClient androidGdataClient;
private final MapsClient client;
private String errorMessage;
private int errorType;
private AuthManager auth;
private boolean retryOnAuthFailure;
private int retriesPending;
private boolean cleanupCalled;
public MyMapsGDataWrapper(Context context) {
androidGdataClient = GDataClientFactory.getGDataClient(context);
client =
new MapsClient(androidGdataClient, new XmlMapsGDataParserFactory(
new AndroidXmlParserFactory()));
errorType = ERROR_NO_ERROR;
errorMessage = null;
auth = null;
retryOnAuthFailure = false;
retriesPending = 0;
cleanupCalled = false;
}
public boolean runQuery(final QueryFunction query) {
if (client == null) {
errorType = ERROR_CLEANED_UP;
errorMessage = "GData Wrapper has already been cleaned up!";
return false;
}
try {
query.query(client);
errorType = ERROR_NO_ERROR;
errorMessage = null;
return true;
} catch (AuthenticationException e) {
Log.e(MyTracksConstants.TAG, "Exception", e);
errorType = ERROR_AUTH;
errorMessage = e.getMessage();
} catch (HttpException e) {
Log.e(MyTracksConstants.TAG, "HttpException", e);
errorMessage = e.getMessage();
if (errorMessage != null && errorMessage.contains("401")) {
errorType = ERROR_AUTH;
} else {
errorType = ERROR_CONNECTION;
}
} catch (IOException e) {
Log.e(MyTracksConstants.TAG, "Exception", e);
errorMessage = e.getMessage();
if (errorMessage != null && errorMessage.contains("503")) {
errorType = ERROR_INTERNAL;
} else {
errorType = ERROR_CONNECTION;
}
} catch (ParseException e) {
Log.e(MyTracksConstants.TAG, "Exception", e);
errorType = ERROR_LOCAL;
errorMessage = e.getMessage();
} catch (ConflictDetectedException e) {
Log.e(MyTracksConstants.TAG, "Exception", e);
errorType = ERROR_CONFLICT;
errorMessage = e.getMessage();
} catch (Exception e) {
Log.e(MyTracksConstants.TAG, "Exception", e);
errorType = ERROR_UNKNOWN;
errorMessage = e.getMessage();
e.printStackTrace();
}
Log.d(MyTracksConstants.TAG, "GData error encountered: " + errorMessage);
if (errorType == ERROR_AUTH && auth != null) {
Runnable whenFinished = null;
if (retryOnAuthFailure) {
retriesPending++;
whenFinished = new Runnable() {
public void run() {
retriesPending--;
retryOnAuthFailure = false;
runQuery(query);
if (cleanupCalled && retriesPending == 0) {
cleanUp();
}
}
};
}
auth.invalidateAndRefresh(whenFinished);
}
return false;
}
public int getErrorType() {
return errorType;
}
public String getErrorMessage() {
return errorMessage;
}
// cleanUp must be called when done using this wrapper to close the client.
// Note that the cleanup will be delayed if auth failure retries were
// requested and there is a pending retry.
public void cleanUp() {
if (retriesPending == 0 && !cleanupCalled) {
androidGdataClient.close();
}
cleanupCalled = true;
}
public void setAuthManager(AuthManager newAuth) {
this.auth = newAuth;
}
public void setRetryOnAuthFailure(boolean retry) {
retryOnAuthFailure = retry;
}
}
@@ -1,350 +0,0 @@
/*
* Copyright 2009 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.mymaps;
import com.google.android.accounts.Account;
import com.google.android.apps.mymaps.MyMapsGDataWrapper.QueryFunction;
import com.google.android.apps.mytracks.AccountChooser;
import com.google.android.apps.mytracks.MyTracks;
import com.google.android.apps.mytracks.io.AuthManager;
import com.google.android.apps.mytracks.io.AuthManagerFactory;
import com.google.android.maps.mytracks.R;
import com.google.wireless.gdata.maps.MapFeatureEntry;
import com.google.wireless.gdata.maps.MapsClient;
import com.google.wireless.gdata.parser.GDataParser;
import android.app.Activity;
import android.content.Intent;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
/**
* Activity which displays the list of "my maps" maps.
*/
public class MyMapsList extends Activity implements ListAdapter {
private static final int MENU_OPEN = 0;
private static final int MENU_SHARE = 2;
private static final int GET_LOGIN = 1;
private LookupThread listLookup;
private Vector<String[]> mapsList;
private Vector<Boolean> publicList;
private Set<DataSetObserver> observerSet;
private Handler loadHandler;
private int contextPosition;
private AuthManager auth;
/**
* Thread which looks up the maps list.
*/
private class LookupThread extends Thread {
private boolean finished = false;
private boolean success = true;
private GDataParser listParser;
@Override
public void run() {
finished = false;
listParser = null;
MyMapsGDataWrapper wrapper = new MyMapsGDataWrapper(MyMapsList.this);
wrapper.setAuthManager(auth);
wrapper.setRetryOnAuthFailure(true);
success = wrapper.runQuery(new QueryFunction() {
public void query(MapsClient client) throws IOException, Exception {
listParser = client.getParserForFeed(
MapFeatureEntry.class, MapsClient.getMapsFeed(),
auth.getAuthToken());
listParser.init();
while (listParser.hasMoreData()) {
MapFeatureEntry entry =
(MapFeatureEntry) listParser.readNextEntry(null);
MyMapsMapMetadata metadata =
MyMapsGDataConverter.getMapMetadataForEntry(entry);
String mapid = MyMapsGDataConverter.getMapidForEntry(entry);
synchronized (mapsList) {
// Search through the maps list to see if it has the mapid and
// remove it if so, so that we can replace it with updated info
for (int i = 0; i < mapsList.size(); ++i) {
if (mapid.equals(mapsList.get(i)[0])) {
mapsList.remove(i);
publicList.remove(i);
--i;
}
}
mapsList.add(new String[] {
mapid, metadata.getTitle(), metadata.getDescription() });
publicList.add(metadata.getSearchable());
}
}
listParser.close();
listParser = null;
success = true;
finished = true;
}
});
if (listParser != null) {
listParser.close();
}
wrapper.cleanUp();
if (success || wrapper.getErrorType() != MyMapsGDataWrapper.ERROR_AUTH) {
finished = true;
}
}
public boolean isFinished() {
return finished;
}
public boolean succeeded() {
return success;
}
}
private final Runnable checkLoaded = new Runnable() {
@Override
public void run() {
if (listLookup.isFinished()) {
findViewById(R.id.loading).setVisibility(View.GONE);
if (!listLookup.succeeded()) {
findViewById(R.id.failed).setVisibility(View.VISIBLE);
}
TextView emptyView = (TextView) findViewById(R.id.mapslist_empty);
ListView list = (ListView) findViewById(R.id.maplist);
list.setEmptyView(emptyView);
} else {
loadHandler.postDelayed(checkLoaded, 500);
}
Iterator<DataSetObserver> iter = observerSet.iterator();
while (iter.hasNext()) {
iter.next().onChanged();
}
}
};
private final OnItemClickListener clickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
Intent result = new Intent();
result.putExtra("mapid", (String) getItem(position));
MyMapsList.this.setResult(RESULT_OK, result);
finish();
}
};
private final OnCreateContextMenuListener contextMenuListener =
new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) menuInfo;
contextPosition = info.position;
menu.add(0, MENU_OPEN, 0, R.string.open_map);
menu.add(0, MENU_SHARE, 0, R.string.share_map);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
auth = AuthManagerFactory.getAuthManager(this, GET_LOGIN, null, true,
MapsClient.SERVICE);
setContentView(R.layout.list);
ListView list = (ListView) findViewById(R.id.maplist);
list.setOnItemClickListener(clickListener);
list.setOnCreateContextMenuListener(contextMenuListener);
mapsList = new Vector<String[]>();
publicList = new Vector<Boolean>();
listLookup = new LookupThread();
// TODO fix this for non-froyo devices.
if (AuthManagerFactory.useModernAuthManager()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
MyTracks.getInstance().getAccountChooser().chooseAccount(
MyMapsList.this,
new AccountChooser.AccountHandler() {
@Override
public void handleAccountSelected(Account account) {
if (account != null) {
// The user did not quit and there was a valid google
// account.
doLogin(account);
}
}
});
}
});
} else {
doLogin(null);
}
observerSet = new HashSet<DataSetObserver>();
list.setAdapter(this);
loadHandler = new Handler();
loadHandler.postDelayed(checkLoaded, 500);
}
private void doLogin(final Account account) {
auth.doLogin(new Runnable() {
public void run() {
listLookup.start();
}
}, account);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == GET_LOGIN) {
auth.authResult(resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case MENU_OPEN:
clickListener.onItemClick(null, null, contextPosition, 0);
return true;
case MENU_SHARE:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT,
getText(R.string.share_map_subject));
shareIntent.putExtra(Intent.EXTRA_TEXT, String.format(
getText(R.string.share_map_body_format).toString(),
mapsList.get(contextPosition)[1],
MyMapsConstants.MAPSHOP_BASE_URL + "?msa=0&msid="
+ mapsList.get(contextPosition)[0]));
startActivity(Intent.createChooser(shareIntent,
getText(R.string.share_map).toString()));
return true;
}
return false;
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return true;
}
@Override
public int getCount() {
return mapsList.size();
}
@Override
public Object getItem(int position) {
return mapsList.get(position)[0];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView =
getLayoutInflater().inflate(R.layout.listitem, parent, false);
}
String[] map = mapsList.get(position);
((TextView) convertView.findViewById(R.id.maplistitem)).setText(map[1]);
((TextView) convertView.findViewById(R.id.maplistdesc)).setText(map[2]);
TextView publicUnlisted =
(TextView) convertView.findViewById(R.id.maplistpublic);
if (publicList.get(position)) {
publicUnlisted.setTextColor(Color.RED);
publicUnlisted.setText(R.string.public_map);
} else {
publicUnlisted.setTextColor(Color.GREEN);
publicUnlisted.setText(R.string.unlisted_map);
}
return convertView;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isEmpty() {
return mapsList.isEmpty();
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
observerSet.add(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
observerSet.remove(observer);
}
}
@@ -1,66 +0,0 @@
/*
* Copyright 2009 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.mymaps;
/**
* Metadata about a "my maps" map.
*/
public class MyMapsMapMetadata {
private String title;
private String description;
private String gdataEditUri;
private boolean searchable;
public MyMapsMapMetadata() {
title = "";
description = "";
gdataEditUri = "";
searchable = false;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = new String(title);
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = new String(description);
}
public boolean getSearchable() {
return searchable;
}
public void setSearchable(boolean searchable) {
this.searchable = searchable;
}
public String getGDataEditUri() {
return gdataEditUri;
}
public void setGDataEditUri(String editUri) {
this.gdataEditUri = new String(editUri);
}
}
@@ -0,0 +1,62 @@
/*
* Copyright 2010 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;
import com.google.android.maps.mytracks.R;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
/**
* A preference for an ANT device pairing.
* Currently this shows the ID and lets the user clear that ID for future pairing.
* TODO: Support pairing from this preference.
*
* @author Sandor Dornbush
*/
public class AntPreference extends Preference {
public AntPreference(Context context) {
super(context);
init();
}
public AntPreference(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
int sensorId = getPersistedInt(0);
if (sensorId == 0) {
setSummary(R.string.settings_ant_not_paired);
} else {
setSummary(String.format(getContext().getString(R.string.settings_ant_paired), sensorId));
}
// Add actions to allow repairing.
setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AntPreference.this.persistInt(0);
setSummary(R.string.settings_ant_not_paired);
return true;
}
});
}
}
@@ -16,11 +16,14 @@
package com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.ChartView.Mode;
import com.google.android.apps.mytracks.content.MyTracksLocation;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Sensor;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.TrackPointsColumns;
import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.WaypointsColumns;
import com.google.android.apps.mytracks.content.Sensor.SensorDataSet;
import com.google.android.apps.mytracks.services.StatusAnnouncerFactory;
import com.google.android.apps.mytracks.stats.DoubleBuffer;
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder;
@@ -57,6 +60,7 @@ import java.util.ArrayList;
public class ChartActivity extends Activity implements
SharedPreferences.OnSharedPreferenceChangeListener {
private final static int BUFFER_SIZE = 1024;
private double profileLength = 0;
private boolean metricUnits = true;
@@ -98,7 +102,7 @@ public class ChartActivity extends Activity implements
/*
* UI elements:
*/
private ChartView cv;
private ChartView chartView;
private MenuItem chartSettingsMenuItem;
private LinearLayout busyPane;
private ZoomControls zoomControls;
@@ -115,10 +119,10 @@ public class ChartActivity extends Activity implements
@Override
public void run() {
busyPane.setVisibility(View.GONE);
zoomControls.setIsZoomInEnabled(cv.canZoomIn());
zoomControls.setIsZoomOutEnabled(cv.canZoomOut());
cv.setShowPointer(selectedTrackIsRecording());
cv.invalidate();
zoomControls.setIsZoomInEnabled(chartView.canZoomIn());
zoomControls.setIsZoomOutEnabled(chartView.canZoomOut());
chartView.setShowPointer(selectedTrackIsRecording());
chartView.invalidate();
}
};
@@ -155,54 +159,12 @@ public class ChartActivity extends Activity implements
private Handler updateTrackHandler;
/**
* A runnable that update the profile from the provider.
* A runnable that updates the profile from the provider.
*/
private final Runnable updateTrackRunnable = new Runnable() {
@Override
public void run() {
Log.d(MyTracksConstants.TAG, "MyTracks: Updating chart.");
Track track = providerUtils.getTrack(recordingTrackId);
if (track == null) {
Log.w(MyTracksConstants.TAG, "MyTracks: track not found");
return;
}
Cursor cursor = null;
try {
cursor = providerUtils.getLocationsCursor(recordingTrackId,
lastSeenLocationId + 1,
MyTracksConstants.MAX_DISPLAYED_TRACK_POINTS - cv.getData().size(),
true);
if (cursor != null) {
if (cursor.moveToLast()) {
final int idColumnIdx =
cursor.getColumnIndexOrThrow(TrackPointsColumns._ID);
ArrayList<double[]> data = new ArrayList<double[]>();
// Need two locations so we can keep track of the last location.
Location location = new Location("");
do {
lastSeenLocationId = cursor.getLong(idColumnIdx);
providerUtils.fillLocation(cursor, location);
if (MyTracksUtils.isValidLocation(location)) {
double[] point = new double[3];
location = getDataPoint(location, track, point);
data.add(point);
}
} while (cursor.moveToPrevious());
cv.addDataPoints(data);
}
}
} catch (RuntimeException e) {
Log.w(MyTracksConstants.TAG, "Caught an unexpected exception.", e);
} finally {
if (cursor != null) {
cursor.close();
}
uiHandler.post(new Runnable() {
public void run() {
cv.invalidate();
}
});
}
readNewTrackPoints();
}
};
@@ -219,13 +181,13 @@ public class ChartActivity extends Activity implements
metricUnits =
sharedPreferences.getBoolean(getString(R.string.metric_units_key),
true);
cv.setMetricUnits(metricUnits);
chartView.setMetricUnits(metricUnits);
readProfileAsync();
} else if (key.equals(getString(R.string.report_speed_key))) {
reportSpeed =
sharedPreferences.getBoolean(getString(R.string.report_speed_key),
true);
cv.setReportSpeed(reportSpeed, this);
chartView.setReportSpeed(reportSpeed, this);
readProfileAsync();
} else if (key.equals(getString(R.string.recording_track_key))) {
recordingTrackId =
@@ -249,13 +211,13 @@ public class ChartActivity extends Activity implements
setVolumeControlStream(volumeStream);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mytracks_elevation);
setContentView(R.layout.mytracks_charts);
ViewGroup layout = (ViewGroup) findViewById(R.id.elevation_chart);
cv = new ChartView(this);
cv.setMode(this.mode);
chartView = new ChartView(this);
chartView.setMode(this.mode);
LayoutParams params =
new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
layout.addView(cv, params);
layout.addView(chartView, params);
SharedPreferences preferences =
getSharedPreferences(MyTracksSettings.SETTINGS_NAME, 0);
@@ -266,10 +228,10 @@ public class ChartActivity extends Activity implements
preferences.getLong(getString(R.string.recording_track_key), -1);
metricUnits = preferences.getBoolean(getString(R.string.metric_units_key),
true);
cv.setMetricUnits(metricUnits);
chartView.setMetricUnits(metricUnits);
reportSpeed = preferences.getBoolean(getString(R.string.report_speed_key),
true);
cv.setReportSpeed(reportSpeed, this);
chartView.setReportSpeed(reportSpeed, this);
preferences.registerOnSharedPreferenceChangeListener(this);
}
@@ -329,7 +291,7 @@ public class ChartActivity extends Activity implements
ChartActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
cv.invalidate();
chartView.invalidate();
}
});
}
@@ -381,21 +343,21 @@ public class ChartActivity extends Activity implements
}
private void zoomIn() {
cv.zoomIn();
zoomControls.setIsZoomInEnabled(cv.canZoomIn());
zoomControls.setIsZoomOutEnabled(cv.canZoomOut());
chartView.zoomIn();
zoomControls.setIsZoomInEnabled(chartView.canZoomIn());
zoomControls.setIsZoomOutEnabled(chartView.canZoomOut());
}
private void zoomOut() {
cv.zoomOut();
zoomControls.setIsZoomInEnabled(cv.canZoomIn());
zoomControls.setIsZoomOutEnabled(cv.canZoomOut());
chartView.zoomOut();
zoomControls.setIsZoomInEnabled(chartView.canZoomIn());
zoomControls.setIsZoomOutEnabled(chartView.canZoomOut());
}
public void setMode(Mode newMode) {
if (this.mode != newMode) {
this.mode = newMode;
cv.setMode(this.mode);
chartView.setMode(this.mode);
readProfileAsync();
}
}
@@ -405,12 +367,12 @@ public class ChartActivity extends Activity implements
}
public void setSeriesEnabled(int index, boolean enabled) {
cv.getChartValueSeries(index).setEnabled(enabled);
chartView.getChartValueSeries(index).setEnabled(enabled);
runOnUiThread(updateChart);
}
public boolean isSeriesEnabled(int index) {
return cv.getChartValueSeries(index).isEnabled();
return chartView.getChartValueSeries(index).isEnabled();
}
private void readWaypoints() {
@@ -418,7 +380,7 @@ public class ChartActivity extends Activity implements
return;
}
Cursor cursor = null;
cv.clearWaypoints();
chartView.clearWaypoints();
try {
// We will silently drop extra waypoints to make the app responsive.
cursor =
@@ -428,7 +390,7 @@ public class ChartActivity extends Activity implements
if (cursor.moveToFirst()) {
do {
Waypoint wpt = providerUtils.createWaypoint(cursor);
cv.addWaypoint(wpt);
chartView.addWaypoint(wpt);
} while (cursor.moveToNext());
}
}
@@ -464,10 +426,14 @@ public class ChartActivity extends Activity implements
/**
* Given a location, creates a new data point for the chart. A data point is
* an array double[2], where:
* an array double[3 or 6], where:
* data[0] = the time or distance
* data[1] = the elevation
* data[2] = the speed
* and possibly:
* data[3] = power
* data[4] = cadence
* data[5] = heart rate
*
* This must be called in order for each point.
*
@@ -477,6 +443,35 @@ public class ChartActivity extends Activity implements
* @return the previous location, now available for reuse
*/
private Location getDataPoint(Location location, Track track, double[] result) {
if (location instanceof MyTracksLocation &&
((MyTracksLocation) location).getSensorDataSet() != null) {
SensorDataSet sensorData = ((MyTracksLocation) location).getSensorDataSet();
if (sensorData.hasPower()
&& sensorData.getPower().getState() == Sensor.SensorState.SENDING
&& sensorData.getPower().hasValue()) {
result[3] = sensorData.getPower().getValue();
} else {
result[3] = Double.NaN;
}
if (sensorData.hasCadence()
&& sensorData.getCadence().getState() == Sensor.SensorState.SENDING
&& sensorData.getCadence().hasValue()) {
result[4] = sensorData.getCadence().getValue();
} else {
result[4] = Double.NaN;
}
if (sensorData.hasHeartRate()
&& sensorData.getHeartRate().getState() == Sensor.SensorState.SENDING
&& sensorData.getHeartRate().hasValue()) {
result[5] = sensorData.getHeartRate().getValue();
} else {
result[5] = Double.NaN;
}
} else {
result[3] = Double.NaN;
result[4] = Double.NaN;
result[5] = Double.NaN;
}
switch (mode) {
case BY_DISTANCE:
result[0] = profileLength;
@@ -529,7 +524,7 @@ public class ChartActivity extends Activity implements
if (oldLastLocation == null) {
// No previous location, but return a blank one for reuse
return new Location("");
return new MyTracksLocation("");
}
return oldLastLocation;
@@ -539,7 +534,7 @@ public class ChartActivity extends Activity implements
* Sets the chart data points reading from the provider. This is non-blocking.
*/
private void readProfileAsync() {
cv.reset();
chartView.reset();
updateTrackHandler.post(new Runnable() {
public void run() {
runOnUiThread(showSpinner);
@@ -558,7 +553,6 @@ public class ChartActivity extends Activity implements
profileLength = 0;
lastLocation = null;
startTime = -1;
Cursor cursor = null;
if (selectedTrackId < 0) {
return;
}
@@ -566,55 +560,94 @@ public class ChartActivity extends Activity implements
if (track == null) {
return;
}
long lastLocationRead = track.getStartId();
long totalLocations = track.getStopId() - track.getStartId();
lastSeenLocationId = track.getStartId();
final ArrayList<double[]> theData = readPointsToList(track);
runOnUiThread(new Runnable() {
public void run() {
chartView.setDataPoints(theData);
}
});
}
// Limit the number of chart readings. Ideally we would want around 1024.
int chartSamplingFrequency = Math.max(1, (int) (totalLocations / 1024.0));
int bufferSize = 1024;
/**
* Read all new track points.
*/
private void readNewTrackPoints() {
Log.i(MyTracksConstants.TAG, "MyTracks: Updating chart last seen: " + lastSeenLocationId);
Track track = providerUtils.getTrack(recordingTrackId);
if (track == null) {
Log.w(MyTracksConstants.TAG, "MyTracks: track not found");
return;
}
chartView.addDataPoints(readPointsToList(track));
uiHandler.post(new Runnable() {
public void run() {
chartView.invalidate();
}
});
Log.i(MyTracksConstants.TAG, "MyTracks: Updated chart last seen: " + lastSeenLocationId);
}
/**
* Get the frequency at which points should be displayed.
* Limit the number of chart readings. Ideally we would want around 1024.
* @param track The track which will be displayed.
* @return The inverse of the frequency of points to be displayed.
*/
private int getSamplingFrequency(Track track) {
long totalLocations = track.getStopId() - track.getStartId();
return Math.max(1, (int) (totalLocations / 1024.0));
}
private Cursor getLocationsCursor(long lastLocationRead) {
return providerUtils.getLocationsCursor(selectedTrackId, lastLocationRead, BUFFER_SIZE, false);
}
/**
* Read all of the points to a list.
* @param track The track which will be displayed.
* @return
*/
private ArrayList<double[]> readPointsToList(Track track) {
Cursor cursor = null;
long lastLocationRead = lastSeenLocationId;
int points = 0;
int chartSamplingFrequency = getSamplingFrequency(track);
ArrayList<double[]> result = new ArrayList<double[]>();
// Need two locations so we can keep track of the last location.
Location location = new MyTracksLocation("");
try {
final ArrayList<double[]> theData = new ArrayList<double[]>();
int points = 0;
// Need two locations so we can keep track of the last location.
Location location = new Location("");
while (lastLocationRead < track.getStopId()) {
cursor = providerUtils.getLocationsCursor(
selectedTrackId, lastLocationRead, bufferSize, false);
while (lastSeenLocationId < track.getStopId()) {
cursor = getLocationsCursor(lastLocationRead);
if (cursor != null) {
elevationBuffer.reset();
speedBuffer.reset();
if (cursor.moveToFirst()) {
final int idColumnIdx =
cursor.getColumnIndexOrThrow(TrackPointsColumns._ID);
final int idColumnIdx = cursor.getColumnIndexOrThrow(TrackPointsColumns._ID);
while (cursor.moveToNext()) {
points++;
providerUtils.fillLocation(cursor, location);
if (MyTracksUtils.isValidLocation(location)) {
lastLocationRead = lastSeenLocationId =
cursor.getLong(idColumnIdx);
double[] point = new double[3];
// TODO Can we be smarter about choosing 3 or 6 entries?
double[] point = new double[6];
location = getDataPoint(location, track, point);
if (points % chartSamplingFrequency == 0) {
theData.add(point);
result.add(point);
}
}
}
} else {
lastLocationRead += bufferSize;
lastLocationRead += BUFFER_SIZE;
}
} else {
lastLocationRead += bufferSize;
lastLocationRead += BUFFER_SIZE;
}
cursor.close();
cursor = null;
}
runOnUiThread(new Runnable() {
public void run() {
cv.setDataPoints(theData);
}
});
} catch (RuntimeException e) {
Log.w(MyTracksConstants.TAG, "Caught unexpected exception.", e);
return result;
} finally {
if (cursor != null) {
cursor.close();
@@ -35,8 +35,7 @@ import android.widget.RadioGroup;
*/
public class ChartSettingsDialog extends Dialog {
private RadioButton distance;
private CheckBox elevation;
private CheckBox speed;
private CheckBox[] series;
public ChartSettingsDialog(Context context) {
super(context);
@@ -61,8 +60,18 @@ public class ChartSettingsDialog extends Dialog {
});
distance = (RadioButton) findViewById(R.id.chart_settings_by_distance);
elevation = (CheckBox) findViewById(R.id.chart_settings_elevation);
speed = (CheckBox) findViewById(R.id.chart_settings_speed);
series = new CheckBox[ChartView.NUM_SERIES];
series[ChartView.ELEVATION_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_elevation);
series[ChartView.SPEED_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_speed);
series[ChartView.POWER_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_power);
series[ChartView.CADENCE_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_cadence);
series[ChartView.HEART_RATE_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_heart_rate);
}
public void setup(ChartActivity chart) {
@@ -74,8 +83,9 @@ public class ChartSettingsDialog extends Dialog {
rd.check(chart.getMode() == Mode.BY_DISTANCE
? R.id.chart_settings_by_distance
: R.id.chart_settings_by_time);
elevation.setChecked(chart.isSeriesEnabled(ChartView.ELEVATION_SERIES));
speed.setChecked(chart.isSeriesEnabled(ChartView.SPEED_SERIES));
for (int i = 0; i < ChartView.NUM_SERIES; i++) {
series[i].setChecked(chart.isSeriesEnabled(i));
}
}
private void handleOk() {
@@ -83,8 +93,9 @@ public class ChartSettingsDialog extends Dialog {
chart.setMode(distance.isChecked() ? Mode.BY_DISTANCE : Mode.BY_TIME);
// TODO: check that something is visible.
chart.setSeriesEnabled(ChartView.ELEVATION_SERIES, elevation.isChecked());
chart.setSeriesEnabled(ChartView.SPEED_SERIES, speed.isChecked());
for (int i = 0; i < ChartView.NUM_SERIES; i++) {
chart.setSeriesEnabled(i, series[i].isChecked());
}
dismiss();
}
@@ -21,6 +21,7 @@ import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Paint.Style;
import java.text.DecimalFormat;
@@ -36,15 +37,96 @@ public class ChartValueSeries {
private final Path path = new Path();
private final Paint fillPaint;
private final Paint strokePaint;
private final int rounding;
private final Paint labelPaint;
private final ZoomSettings zoomSettings;
private String title;
private double min = 0;
private double max = 1;
private int effectiveMax = 0;
private int effectiveMin = 0;
private double spread = 0;
private double min;
private double max = 1.0;
private int effectiveMax;
private int effectiveMin;
private double spread;
private int interval;
private boolean enabled = true;
/**
* This class controls how effective min/max values of a {@link ChartValueSeries} are calculated.
*/
public static class ZoomSettings {
private int intervals;
private final int absoluteMin;
private final int absoluteMax;
private final int[] zoomLevels;
public ZoomSettings(int intervals, int[] zoomLevels) {
this.intervals = intervals;
this.absoluteMin = Integer.MAX_VALUE;
this.absoluteMax = Integer.MIN_VALUE;
this.zoomLevels = zoomLevels;
checkArgs();
}
public ZoomSettings(int intervals, int absoluteMin, int absoluteMax, int[] zoomLevels) {
this.intervals = intervals;
this.absoluteMin = absoluteMin;
this.absoluteMax = absoluteMax;
this.zoomLevels = zoomLevels;
checkArgs();
}
private void checkArgs() {
if (intervals <= 0 || zoomLevels == null || zoomLevels.length == 0) {
throw new IllegalArgumentException("Expecing positive intervals and non-empty zoom levels");
}
for (int i = 1; i < zoomLevels.length; ++i) {
if (zoomLevels[i] <= zoomLevels[i - 1]) {
throw new IllegalArgumentException("Expecting zoom levels in ascending order");
}
}
}
public int getIntervals() {
return intervals;
}
public int getAbsoluteMin() {
return absoluteMin;
}
public int getAbsoluteMax() {
return absoluteMax;
}
public int[] getZoomLevels() {
return zoomLevels;
}
/**
* Calculates the interval between markings given the min and max values.
* This function attempts to find the smallest zoom level that fits [min,max] after rounding
* it to the current zoom level.
*
* @param min the minimum value in the series
* @param max the maximum value in the series
* @return the calculated interval for the given range
*/
public int calculateInterval(double min, double max) {
min = Math.min(min, absoluteMin);
max = Math.max(max, absoluteMax);
for (int i = 0; i < zoomLevels.length; ++i) {
int zoomLevel = zoomLevels[i];
int roundedMin = (int)(min / zoomLevel) * zoomLevel;
if (roundedMin > min) {
roundedMin -= zoomLevel;
}
double interval = (max - roundedMin) / intervals;
if (zoomLevel >= interval) {
return zoomLevel;
}
}
return zoomLevels[zoomLevels.length - 1];
}
}
/**
* Constructs a new chart value series.
@@ -53,18 +135,30 @@ public class ChartValueSeries {
* @param formatString The format of the decimal format for this series
* @param fill The paint for filling the chart
* @param stroke The paint for stroking the outside the chart, optional
* @param rounding The factor to round the values by
* @param zoomSettings The settings related to zooming
*
* TODO: Get rid of Context and inject appropriate values instead.
*/
public ChartValueSeries(Context context,
String formatString,
Paint fill,
Paint stroke,
int rounding,
int titleId) {
public ChartValueSeries(Context context, String formatString, int fillColor, int strokeColor,
ZoomSettings zoomSettings, int titleId) {
this.format = new DecimalFormat(formatString);
this.fillPaint = fill;
this.strokePaint = stroke;
this.rounding = rounding;
fillPaint = new Paint();
fillPaint.setStyle(Style.FILL);
fillPaint.setColor(context.getResources().getColor(fillColor));
fillPaint.setAntiAlias(true);
if (strokeColor != -1) {
strokePaint = new Paint();
strokePaint.setStyle(Style.STROKE);
strokePaint.setColor(context.getResources().getColor(strokeColor));
strokePaint.setAntiAlias(true);
// Make a copy of the stroke paint with the default thickness.
labelPaint = new Paint(strokePaint);
strokePaint.setStrokeWidth(2f);
} else {
strokePaint = null;
labelPaint = fillPaint;
}
this.zoomSettings = zoomSettings;
this.title = context.getString(titleId);
}
@@ -96,20 +190,7 @@ public class ChartValueSeries {
* @return The interval between markers
*/
public int getInterval() {
// Try to find 5 even looking intervals.
int interval = (int) (spread / 5);
int minInterval = rounding / 4;
if (interval < minInterval) {
// We won't be able to find 5 even intervals.
return minInterval;
} else if (interval < rounding) {
// The desired interval is less than the rounding value.
// We will have less than 5 intervals.
return rounding;
} else {
// Round the interval.
return (interval / rounding) * rounding;
}
return interval;
}
/**
@@ -124,12 +205,16 @@ public class ChartValueSeries {
min = monitor.getMin();
max = monitor.getMax();
}
min = Math.min(min, zoomSettings.getAbsoluteMin());
max = Math.max(max, zoomSettings.getAbsoluteMax());
this.interval = zoomSettings.calculateInterval(min, max);
// Round it up.
effectiveMax = ((int) (max / rounding)) * rounding + rounding;
effectiveMax = ((int) (max / interval)) * interval + interval;
// Round it down.
effectiveMin = ((int) (min / rounding)) * rounding;
effectiveMin = ((int) (min / interval)) * interval;
if (min < 0) {
effectiveMin -= rounding;
effectiveMin -= interval;
}
spread = effectiveMax - effectiveMin;
}
@@ -139,7 +224,7 @@ public class ChartValueSeries {
*/
public int getMaxLabelLength() {
String minS = format.format(effectiveMin);
String maxS = format.format(effectiveMax);
String maxS = format.format(getMax());
return Math.max(minS.length(), maxS.length());
}
@@ -182,9 +267,11 @@ public class ChartValueSeries {
* @return The paint for this series
*/
Paint getPaint() {
return (strokePaint == null)
? fillPaint
: strokePaint;
return strokePaint == null ? fillPaint : strokePaint;
}
public Paint getLabelPaint() {
return labelPaint;
}
/**
@@ -211,4 +298,8 @@ public class ChartValueSeries {
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean hasData() {
return monitor.hasData();
}
}
@@ -15,6 +15,7 @@
*/
package com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.ChartValueSeries.ZoomSettings;
import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.stats.ExtremityMonitor;
import com.google.android.apps.mytracks.util.StringUtils;
@@ -25,9 +26,11 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Paint.Align;
import android.graphics.Paint.Style;
import android.graphics.drawable.Drawable;
import android.view.MotionEvent;
import android.view.VelocityTracker;
@@ -60,14 +63,35 @@ public class ChartView extends View {
*/
private int zoomLevel = 1;
private final int minZoomLevel = 1;
private int maxZoomLevel = 5;
private int maxZoomLevel = 10;
private static final int MAX_INTERVALS = 5;
/*
* Borders, margins, dimensions (in pixels):
*/
private int leftBorder = -1;
/**
* Unscaled top border of the chart.
*/
private static final int TOP_BORDER = 15;
private static final int BOTTOM_BORDER = 135;
/**
* Device scaled top border of the chart.
*/
private int topBorder;
/**
* Unscaled bottom border of the chart.
*/
private static final float BOTTOM_BORDER = 40;
/**
* Device scaled bottom border of the chart.
*/
private int bottomBorder;
private static final int RIGHT_BORDER = 17;
/** Space to leave for drawing the unit labels */
private static final int UNIT_BORDER = 15;
@@ -87,7 +111,10 @@ public class ChartView extends View {
*/
public static final int ELEVATION_SERIES = 0;
public static final int SPEED_SERIES = 1;
public static final int NUM_SERIES = 2;
public static final int POWER_SERIES = 2;
public static final int CADENCE_SERIES = 3;
public static final int HEART_RATE_SERIES = 4;
public static final int NUM_SERIES = 5;
private ChartValueSeries[] series;
private final ExtremityMonitor xMonitor = new ExtremityMonitor();
@@ -100,6 +127,7 @@ public class ChartView extends View {
private final Paint borderPaint = new Paint();
private final Paint labelPaint = new Paint();
private final Paint gridPaint = new Paint();
private final Paint gridBarPaint = new Paint();
private final Paint clearPaint = new Paint();
private final Drawable pointer;
private final Drawable statsMarker;
@@ -120,8 +148,6 @@ public class ChartView extends View {
private boolean metricUnits = true;
private boolean showPointer = false;
private boolean yLabelMask[] = null;
/** Display chart versus distance or time */
public enum Mode {
BY_DISTANCE, BY_TIME
@@ -146,6 +172,9 @@ public class ChartView extends View {
gridPaint.setColor(context.getResources().getColor(R.color.gray));
gridPaint.setAntiAlias(false);
gridBarPaint.set(gridPaint);
gridBarPaint.setPathEffect(new DashPathEffect(new float[] {3, 2}, 0));
clearPaint.setStyle(Style.FILL);
clearPaint.setColor(context.getResources().getColor(R.color.white));
clearPaint.setAntiAlias(false);
@@ -171,39 +200,47 @@ public class ChartView extends View {
public void setUpChartValueSeries(Context context) {
series = new ChartValueSeries[NUM_SERIES];
// Create the paints
Paint fillPaint1 = new Paint();
fillPaint1.setStyle(Style.FILL);
fillPaint1.setColor(context.getResources().getColor(R.color.green));
fillPaint1.setAntiAlias(true);
Paint fillPaint2 = new Paint();
fillPaint2.setStyle(Style.FILL);
fillPaint2.setColor(
context.getResources().getColor(R.color.blue_transparent));
fillPaint2.setAntiAlias(true);
Paint strokePaint = new Paint();
strokePaint.setStyle(Style.STROKE);
strokePaint.setColor(context.getResources().getColor(R.color.blue));
strokePaint.setAntiAlias(true);
// Create the value series
// Create the value series.
series[ELEVATION_SERIES] =
new ChartValueSeries(context,
"###,###",
fillPaint1,
null,
100,
R.color.elevation_fill,
R.color.elevation_border,
new ZoomSettings(MAX_INTERVALS,
new int[] {5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000}),
R.string.elevation);
series[SPEED_SERIES] =
new ChartValueSeries(context,
"###,###.0",
fillPaint2,
strokePaint,
5,
"###,###",
R.color.speed_fill,
R.color.speed_border,
new ZoomSettings(MAX_INTERVALS, 0, Integer.MIN_VALUE,
new int[] {1, 5, 10, 20, 50}),
R.string.speed);
series[POWER_SERIES] =
new ChartValueSeries(context,
"###,###",
R.color.power_fill,
R.color.power_border,
new ZoomSettings(MAX_INTERVALS, 0, 1000, new int[] {5, 50, 100, 200}),
R.string.power);
series[CADENCE_SERIES] =
new ChartValueSeries(context,
"###,###",
R.color.cadence_fill,
R.color.cadence_border,
new ZoomSettings(MAX_INTERVALS, 0, Integer.MIN_VALUE,
new int[] {5, 10, 25, 50}),
R.string.cadence);
series[HEART_RATE_SERIES] =
new ChartValueSeries(context,
"###,###",
R.color.heartrate_fill,
R.color.heartrate_border,
new ZoomSettings(MAX_INTERVALS, 0, Integer.MIN_VALUE,
new int[] {25, 50}),
R.string.heart_rate);
}
public void clearWaypoints() {
@@ -266,13 +303,25 @@ public class ChartView extends View {
*/
public synchronized void addDataPoint(double[] theData) {
data.add(theData);
addDataPointInternal(theData);
updateDimensions();
setUpPath();
}
private void addDataPointInternal(double[] theData) {
xMonitor.update(theData[0]);
int min = Math.min(series.length, theData.length - 1);
for (int i = 0; i < min; i++) {
series[i].update(theData[i + 1]);
if (!Double.isNaN(theData[i + 1])) {
series[i].update(theData[i + 1]);
}
}
// Fill in the extra's if needed.
for (int i = theData.length; i < series.length; i++) {
if (series[i].hasData()) {
series[i].update(0);
}
}
updateDimensions();
setupPath();
}
/**
@@ -284,14 +333,10 @@ public class ChartView extends View {
data.addAll(theData);
for (int i = 0; i < theData.size(); i++) {
double d[] = theData.get(i);
xMonitor.update(d[0]);
int min = Math.min(series.length, d.length - 1);
for (int j = 0; j < min; j++) {
series[j].update(d[j + 1]);
}
addDataPointInternal(d);
}
updateDimensions();
setupPath();
setUpPath();
}
/**
@@ -325,7 +370,7 @@ public class ChartView extends View {
public void zoomIn() {
if (canZoomIn()) {
zoomLevel++;
setupPath();
setUpPath();
invalidate();
}
}
@@ -342,7 +387,7 @@ public class ChartView extends View {
scrollX = effectiveWidth * (zoomLevel - 1);
scrollTo(scrollX, 0);
}
setupPath();
setUpPath();
invalidate();
}
}
@@ -508,12 +553,12 @@ public class ChartView extends View {
@Override
protected synchronized void onDraw(Canvas c) {
if (w != c.getWidth() || h != c.getHeight()) {
// Dimensions have changed (for example due to orientation change):
// Dimensions have changed (for example due to orientation change).
w = c.getWidth();
h = c.getHeight();
effectiveWidth = Math.max(0, w - leftBorder - RIGHT_BORDER);
effectiveHeight = Math.max(0, h - TOP_BORDER - BOTTOM_BORDER);
setupPath();
effectiveHeight = Math.max(0, h - topBorder - bottomBorder);
setUpPath();
}
c.save();
c.drawColor(Color.WHITE);
@@ -523,16 +568,21 @@ public class ChartView extends View {
c.restore();
return;
}
c.save();
c.clipRect(leftBorder + 1 + getScrollX(), topBorder + 1,
w - RIGHT_BORDER + getScrollX() - 1, h - bottomBorder - 1);
// Draw the data series
drawGrid(c);
// Draw the data series.
for (ChartValueSeries cvs : series) {
if (cvs.isEnabled()) {
if (cvs.isEnabled() && cvs.hasData()) {
cvs.drawPath(c);
}
}
drawGrid(c);
// Draw the waypoints:
// Draw the waypoints.
for (int i = 1; i < waypoints.size(); i++) {
final Waypoint waypoint = waypoints.get(i);
if (waypoint.getLocation() == null) {
@@ -541,8 +591,8 @@ public class ChartView extends View {
c.save();
final float x = getWaypointX(waypoint);
c.drawLine(x, h - BOTTOM_BORDER, x, TOP_BORDER, gridPaint);
c.translate(x - (markerWidth / 2), markerHeight);
c.drawLine(x, h - bottomBorder, x, topBorder, gridPaint);
c.translate(x - markerWidth / 2, markerHeight);
if (waypoints.get(i).getType() == Waypoint.TYPE_STATISTICS) {
statsMarker.draw(c);
} else {
@@ -551,24 +601,28 @@ public class ChartView extends View {
c.restore();
}
// Draw the axis and labels:
c.restore();
// Draw the axis and labels.
drawXLabels(c);
drawXAxis(c);
drawSeriesTitles(c);
yLabelMask = new boolean[effectiveHeight / FONT_HEIGHT + 1];
c.translate(getScrollX(), 0);
drawYAxis(c);
float density = getContext().getResources().getDisplayMetrics().density;
final int spacer = (int) (5 * density);
int x = leftBorder - spacer;
for (ChartValueSeries cvs : series) {
if (cvs.isEnabled()) {
drawYLabels(cvs, c);
if (cvs.isEnabled() && cvs.hasData()) {
x -= drawYLabels(cvs, c, x) + spacer;
}
}
c.restore();
if (showPointer && data.size() > 0) {
if (showPointer && !data.isEmpty()) {
c.translate(getX(maxX) - pointer.getIntrinsicWidth() / 2,
(getY(series[0], data.get(data.size() - 1)[1])
- pointer.getIntrinsicHeight() / 2 - 12));
getY(series[0], data.get(data.size() - 1)[1])
- pointer.getIntrinsicHeight() / 2 - 12);
pointer.draw(c);
}
}
@@ -576,15 +630,15 @@ public class ChartView extends View {
private void drawSeriesTitles(Canvas c) {
int sections = 1;
for (ChartValueSeries cvs : series) {
if (cvs.isEnabled()) {
if (cvs.isEnabled() && cvs.hasData()) {
sections++;
}
}
int j = 0;
for (ChartValueSeries cvs : series) {
if (cvs.isEnabled()) {
int y = (int) (w * zoomLevel * ((double) (++j) / sections));
c.drawText(cvs.getTitle(), y, TOP_BORDER, cvs.getPaint());
if (cvs.isEnabled() && cvs.hasData()) {
int x = (int) (w * (double) ++j / sections) + getScrollX();
c.drawText(cvs.getTitle(), x, topBorder, cvs.getLabelPaint());
}
}
}
@@ -593,40 +647,66 @@ public class ChartView extends View {
* Sets up the path that is used to draw the histogram in onDraw(). The path
* needs to be updated any time after the data or histogram dimensions change.
*/
private synchronized void setupPath() {
private synchronized void setUpPath() {
for (ChartValueSeries cvs : series) {
cvs.getPath().reset();
}
if (data.size() < 1) {
if (data.isEmpty()) {
return;
}
int min = Math.min(series.length, data.get(0).length - 1);
// All of the data points to the respective series.
for (int i = 0; i < data.size(); i++) {
// TODO: Come up with a better sampling than Math.max(1, (maxZoomLevel - zoomLevel + 1) / 2);
int sampling = 1;
for (int i = 0; i < data.size(); i += sampling) {
double[] d = data.get(i);
for (int j = 0; j < min; j++) {
int min = Math.min(series.length, d.length - 1);
for (int j = 0; j < min; ++j) {
ChartValueSeries cvs = series[j];
Path path = cvs.getPath();
path.lineTo(getX(d[0]), getY(cvs, d[j + 1]));
int x = getX(d[0]);
int y = getY(cvs, d[j + 1]);
if (i == 0) {
path.moveTo(x, y);
} else {
path.lineTo(x, y);
}
}
}
// Close the path.
int yCorner = TOP_BORDER + effectiveHeight;
int yCorner = topBorder + effectiveHeight;
int xCorner = getX(data.get(0)[0]);
int min = series.length;
for (int j = 0; j < min; j++) {
ChartValueSeries cvs = series[j];
Path path = cvs.getPath();
// Bottom right corner
path.lineTo(getX(data.get(data.size() - 1)[0]), yCorner);
// Bottom left corner
path.lineTo(xCorner, yCorner);
// Top right corner
path.lineTo(xCorner, getY(cvs, data.get(0)[j + 1]));
int first = getFirstPointPopulatedIndex(j + 1);
if (first != -1) {
// Bottom right corner
path.lineTo(getX(data.get(data.size() - 1)[0]), yCorner);
// Bottom left corner
path.lineTo(xCorner, yCorner);
// Top right corner
path.lineTo(xCorner, getY(cvs, data.get(first)[j + 1]));
}
}
}
/**
* Find the index of the first point which has a series populated.
* @param seriesIndex The index of the value series to search for.
* @return The index in the first data for the point in the series that has series
* index value populated or -1 if none is found.
*/
private int getFirstPointPopulatedIndex(int seriesIndex) {
for (int i = 0; i < data.size(); i++) {
if (data.get(i).length > seriesIndex) {
return i;
}
}
return -1;
}
/**
* Update the histogram dimensions.
@@ -639,14 +719,21 @@ public class ChartView extends View {
for (ChartValueSeries cvs : series) {
cvs.updateDimension();
}
// TODO: This is totally broken. Make sure that we calculate based on measureText for each
// grid line, as the labels may vary across intervals.
int maxLength = 0;
for (ChartValueSeries cvs : series) {
maxLength = Math.max(maxLength,
cvs.getMaxLabelLength());
if (cvs.isEnabled() && cvs.hasData()) {
maxLength += cvs.getMaxLabelLength();
}
}
leftBorder = 4 + 7 * maxLength;
float density = getContext().getResources().getDisplayMetrics().density;
// TODO: This should be function of the number of variables displayed.
leftBorder = (int) (density * (4 + 8 * maxLength));
effectiveWidth = w - leftBorder - RIGHT_BORDER;
effectiveHeight = h - TOP_BORDER - BOTTOM_BORDER;
bottomBorder = (int) (density * BOTTOM_BORDER);
topBorder = (int) (density * TOP_BORDER);
effectiveHeight = h - topBorder - bottomBorder;
}
private int getX(double distance) {
@@ -654,28 +741,26 @@ public class ChartView extends View {
}
private int getY(ChartValueSeries cvs, double y) {
return TOP_BORDER + effectiveHeight
- (int) ((y - cvs.getMin()) * effectiveHeight / cvs.getSpread());
int effectiveSpread = cvs.getInterval() * MAX_INTERVALS;
return topBorder + effectiveHeight
- (int) ((y - cvs.getMin()) * effectiveHeight / effectiveSpread);
}
private void drawXLabels(Canvas c) {
int numLabels = 0;
double interval = (int) (maxX / zoomLevel / 4);
boolean shortFormat = false;
if (interval < 1) {
interval = .5;
shortFormat = true;
} else if (interval < 5) {
interval = 2;
} else if (interval < 10) {
interval = 5;
} else {
if (interval < 5) {
interval = 2;
} else if (interval < 10) {
interval = 5;
} else {
interval = (interval / 10) * 10;
}
interval = (interval / 10) * 10;
}
drawXLabel(c, 0, shortFormat);
numLabels++;
int numLabels = 1;
for (int i = 1; i * interval < maxX; i++) {
drawXLabel(c, i * interval, shortFormat);
numLabels++;
@@ -685,102 +770,78 @@ public class ChartView extends View {
}
}
private void drawYLabels(ChartValueSeries cvs, Canvas c) {
int numLabels = 0;
drawYLabel(cvs, c, 0);
final int y0 = getY(cvs, 0);
numLabels++;
private float drawYLabels(ChartValueSeries cvs, Canvas c, int x) {
int interval = cvs.getInterval();
for (int i = 0; i * interval < cvs.getSpread(); i++) {
final int y = i * interval + cvs.getMin();
final int yi = getY(cvs, y);
if (Math.abs(y0 - yi) > 15) {
drawYLabel(cvs, c, y);
numLabels++;
}
}
if (numLabels < 3) {
drawYLabel(cvs, c, cvs.getMax());
float maxTextWidth = 0;
for (int i = 0; i < MAX_INTERVALS; ++i) {
maxTextWidth = Math.max(maxTextWidth, drawYLabel(cvs, c, x, i * interval + cvs.getMin()));
}
return maxTextWidth;
}
private void drawXLabel(Canvas c, double x, boolean shortFormat) {
if (x < 0) {
return;
}
String s =
(mode == Mode.BY_DISTANCE)
? (shortFormat ? xShortFormat.format(x) : xFormat.format(x))
: StringUtils.formatTime((long) x);
c.drawText(s,
getX(x),
effectiveHeight + UNIT_BORDER + TOP_BORDER,
effectiveHeight + UNIT_BORDER + topBorder,
labelPaint);
}
private void drawYLabel(ChartValueSeries cvs, Canvas c, int y) {
int desiredY =
(int) ((y - cvs.getMin()) * effectiveHeight / cvs.getSpread());
// Make sure we don't write one label on top of another.
int slot = desiredY / FONT_HEIGHT;
if (slot < 0) {
return;
}
if (yLabelMask[slot]) {
desiredY = ++slot * FONT_HEIGHT;
}
desiredY = TOP_BORDER + effectiveHeight + 5 - desiredY;
if (slot < yLabelMask.length) {
yLabelMask[slot] = true;
}
c.drawText(cvs.getFormat().format(y),
2, desiredY,
cvs.getPaint());
private float drawYLabel(ChartValueSeries cvs, Canvas c, int x, int y) {
int desiredY = (int) ((y - cvs.getMin()) * effectiveHeight /
(cvs.getInterval() * MAX_INTERVALS));
desiredY = topBorder + effectiveHeight + FONT_HEIGHT / 2 - desiredY - 1;
Paint p = new Paint(cvs.getLabelPaint());
p.setTextAlign(Align.RIGHT);
String text = cvs.getFormat().format(y);
c.drawText(text, x, desiredY, p);
return p.measureText(text);
}
private void drawXAxis(Canvas canvas) {
float rightEdge = getX(maxX);
canvas.drawLine(leftBorder, effectiveHeight + TOP_BORDER, rightEdge,
effectiveHeight + TOP_BORDER, borderPaint);
final int y = effectiveHeight + topBorder;
canvas.drawLine(leftBorder, y, rightEdge, y, borderPaint);
Context c = getContext();
String s =
(mode == Mode.BY_DISTANCE)
? (metricUnits ? c.getString(R.string.kilometer)
: c.getString(R.string.mile)) : (c.getString(R.string.min));
canvas.drawText(s,
rightEdge,
effectiveHeight + .2f * UNIT_BORDER + TOP_BORDER,
labelPaint);
String s = mode == Mode.BY_DISTANCE
? (metricUnits ? c.getString(R.string.kilometer) : c.getString(R.string.mile))
: c.getString(R.string.min);
canvas.drawText(s, rightEdge, effectiveHeight + .2f * UNIT_BORDER + topBorder, labelPaint);
}
private void drawYAxis(Canvas canvas) {
canvas.drawLine(leftBorder, UNIT_BORDER + TOP_BORDER,
leftBorder, effectiveHeight + TOP_BORDER,
borderPaint);
canvas.drawRect(0, 0,
leftBorder - 1, effectiveHeight + TOP_BORDER + 1,
clearPaint);
leftBorder - 1, effectiveHeight + topBorder + UNIT_BORDER + 1,
clearPaint);
canvas.drawLine(leftBorder, UNIT_BORDER + topBorder,
leftBorder, effectiveHeight + topBorder,
borderPaint);
for (int i = 1; i < MAX_INTERVALS; ++i) {
int y = i * effectiveHeight / MAX_INTERVALS + topBorder;
canvas.drawLine(leftBorder - 5, y, leftBorder, y, gridPaint);
}
Context c = getContext();
// TODO: This should really show units for all series.
String s = metricUnits
? c.getString(R.string.meter)
: c.getString(R.string.feet);
canvas.drawText(s, leftBorder - UNIT_BORDER * .2f,
UNIT_BORDER * .8f + TOP_BORDER, labelPaint);
String s = metricUnits ? c.getString(R.string.meter) : c.getString(R.string.feet);
canvas.drawText(s, leftBorder - UNIT_BORDER * .2f, UNIT_BORDER * .8f + topBorder, labelPaint);
}
private synchronized void drawGrid(Canvas c) {
if (data.size() < 1) {
if (data.isEmpty()) {
return;
}
for (ChartValueSeries cvs : series) {
if (cvs.isEnabled()) {
int interval = cvs.getInterval();
for (int i = 1; i * interval < cvs.getSpread(); i++) {
int y = getY(cvs, i * interval + cvs.getMin());
c.drawLine(getX(data.get(0)[0]), y,
getX(data.get(data.size() - 1)[0]), y,
cvs.getPaint());
}
}
float rightEdge = getX(maxX);
for (int i = 1; i < MAX_INTERVALS; ++i) {
int y = i * effectiveHeight / MAX_INTERVALS + topBorder;
c.drawLine(leftBorder, y, rightEdge, y, gridBarPaint);
}
}
@@ -16,6 +16,7 @@
package com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
@@ -82,7 +83,8 @@ class CheckUnits {
}
private static void recordCheckPerformed(SharedPreferences preferences) {
preferences.edit().putBoolean(PREFERENCE_UNITS_CHECKED, true).commit();
ApiFeatures.getInstance().getApiPlatformAdapter().applyPreferenceChanges(
preferences.edit().putBoolean(PREFERENCE_UNITS_CHECKED, true));
}
private CheckUnits() {
@@ -85,13 +85,16 @@ public class DialogManager {
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton(activity.getString(R.string.ok), null);
builder.setNeutralButton(activity.getString(R.string.share_map),
builder.setNeutralButton(activity.getString(R.string.share_track),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
activity.shareLinkToMyMap(activity.getSendToMyMapsMapId());
dialog.dismiss();
}
});
public void onClick(DialogInterface dialog, int which) {
SendToGoogleDialog sendToGoogleDialog = getSendToGoogleDialog();
final boolean sentToMyMaps = sendToGoogleDialog.getSendToMyMaps();
final boolean sentToFusionTables = sendToGoogleDialog.getSendToFusionTables();
activity.shareLinkToMap(sentToMyMaps, sentToFusionTables);
dialog.dismiss();
}
});
sendToGoogleResultDialog = builder.create();
return sendToGoogleResultDialog;
case DIALOG_WRITE_PROGRESS:
@@ -119,9 +122,11 @@ public class DialogManager {
sendToGoogleResultDialog.setIcon(success
? android.R.drawable.ic_dialog_info
: android.R.drawable.ic_dialog_alert);
sendToGoogleResultDialog.setMessage(activity.getMapsResultMessage());
sendToGoogleResultDialog.setMessage(activity.getSendToGoogleResultMessage());
boolean canShare = activity.getSendToMyMapsMapId() != null;
boolean canShare =
activity.getSendToFusionTablesTableId() != null &&
activity.getSendToMyMapsMapId() != null;
View share =
sendToGoogleResultDialog.findViewById(android.R.id.button3);
if (share != null) {
@@ -15,43 +15,43 @@
*/
package com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.apps.mytracks.util.ResourceUtils;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
/**
* Displays an EULA ("End User License Agreement") that the user has to accept
* before using the application. Your application should call
* {@link Eula#showEula(android.app.Activity)} in the onCreate() method of the
* first activity. If the user accepts the EULA, it will never be shown again.
* If the user refuses, {@link android.app.Activity#finish()} is invoked on your
* activity.
* This class handles display of EULAs ("End User License Agreements") to the
* user.
*/
class Eula {
private static final String PREFERENCE_EULA_ACCEPTED = "eula.accepted";
private static final String PREFERENCES_EULA = "eula";
private Eula() {}
/**
* Displays the EULA if necessary. This method should be called from the
* onCreate() method of your main Activity.
* onCreate() method of your main Activity. If the user accepts, the EULA
* will never be displayed again. If the user refuses, the activity will
* finish (exit).
*
* @param activity The Activity to finish if the user rejects the EULA
*/
static void showEula(final Activity activity) {
static void showEulaRequireAcceptance(final Activity activity) {
final SharedPreferences preferences =
activity.getSharedPreferences(PREFERENCES_EULA, Activity.MODE_PRIVATE);
if (preferences.getBoolean(PREFERENCE_EULA_ACCEPTED, false)) {
return;
}
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.eula_title);
builder.setCancelable(true);
final AlertDialog.Builder builder = initDialog(activity);
builder.setPositiveButton(R.string.accept,
new DialogInterface.OnClickListener() {
@Override
@@ -72,12 +72,31 @@ class Eula {
refuse(activity);
}
});
builder.setMessage(ResourceUtils.readFile(activity, R.raw.eula));
builder.show();
}
/**
* Display the EULA to the user in an informational context. They won't be
* given the choice of accepting or declining the EULA -- we're simply
* displaying it for them to read.
*/
static void showEula(Context context) {
AlertDialog.Builder builder = initDialog(context);
builder.setPositiveButton(R.string.ok, null);
builder.show();
}
private static AlertDialog.Builder initDialog(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(true);
builder.setTitle(R.string.eula_title);
builder.setMessage(ResourceUtils.readFile(context, R.raw.eula));
return builder;
}
private static void accept(Activity activity, SharedPreferences preferences) {
preferences.edit().putBoolean(PREFERENCE_EULA_ACCEPTED, true).commit();
ApiFeatures.getInstance().getApiPlatformAdapter().applyPreferenceChanges(
preferences.edit().putBoolean(PREFERENCE_EULA_ACCEPTED, true));
Intent startIntent = new Intent(activity, WelcomeActivity.class);
activity.startActivityForResult(startIntent, MyTracksConstants.WELCOME);
}
@@ -85,7 +104,4 @@ class Eula {
private static void refuse(Activity activity) {
activity.finish();
}
private Eula() {
}
}
@@ -20,18 +20,17 @@ import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.io.TrackWriter;
import com.google.android.apps.mytracks.io.TrackWriterFactory;
import com.google.android.apps.mytracks.io.TrackWriterFactory.TrackFileFormat;
import com.google.android.apps.mytracks.util.MyTracksUtils;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log;
import android.widget.Toast;
@@ -46,6 +45,7 @@ public class ExportAllTracks {
public static final int GPX_OPTION_INDEX = 0;
public static final int KML_OPTION_INDEX = 1;
public static final int CSV_OPTION_INDEX = 2;
public static final int TCX_OPTION_INDEX = 3;
private final Activity activity;
private WakeLock wakeLock;
@@ -67,6 +67,11 @@ public class ExportAllTracks {
case CSV_OPTION_INDEX:
format = TrackFileFormat.CSV;
break;
case TCX_OPTION_INDEX:
format = TrackFileFormat.TCX;
break;
default:
Log.w(MyTracksConstants.TAG, "Unknown export format: " + which);
}
}
};
@@ -115,7 +120,7 @@ public class ExportAllTracks {
prefs.getLong(activity.getString(R.string.recording_track_key), -1);
}
if (recordingTrackId != -1) {
acquireWakeLock();
wakeLock = MyTracksUtils.acquireWakeLock(activity, wakeLock);
}
// Now we can safely export everything.
@@ -205,40 +210,4 @@ public class ExportAllTracks {
}
}
}
/**
* Tries to acquire a partial wake lock if not already acquired. Logs errors
* and gives up trying in case the wake lock cannot be acquired.
*/
private void acquireWakeLock() {
Log.i(MyTracksConstants.TAG, "ExportAllTracks: Aquiring wake lock.");
try {
PowerManager pm =
(PowerManager) activity.getSystemService(Context.POWER_SERVICE);
if (pm == null) {
Log.e(MyTracksConstants.TAG,
"ExportAllTracks: Power manager not found!");
return;
}
if (wakeLock == null) {
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
MyTracksConstants.TAG);
if (wakeLock == null) {
Log.e(MyTracksConstants.TAG,
"ExportAllTracks: Could not create wake lock (null).");
return;
}
}
if (!wakeLock.isHeld()) {
wakeLock.acquire();
if (!wakeLock.isHeld()) {
Log.e(MyTracksConstants.TAG,
"ExportAllTracks: Could not acquire wake lock.");
}
}
} catch (RuntimeException e) {
Log.e(MyTracksConstants.TAG,
"ExportAllTracks: Caught unexpected exception: " + e.getMessage(), e);
}
}
}
@@ -0,0 +1,217 @@
/*
* Copyright 2011 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;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.io.GpxImporter;
import com.google.android.apps.mytracks.util.FileUtils;
import com.google.android.apps.mytracks.util.MyTracksUtils;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.PowerManager.WakeLock;
import android.util.Log;
import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
/**
* A class that will import all GPX tracks in /sdcard/MyTracks/gpx/
*
* @author David Piggott
*/
public class ImportAllTracks {
private final Activity activity;
private WakeLock wakeLock;
private ProgressDialog progress;
private FileUtils fileUtils;
private String gpxPath;
private int gpxFileCount;
private int importSuccessCount;
public ImportAllTracks(Activity activity) {
this.activity = activity;
Log.i(MyTracksConstants.TAG, "ImportAllTracks: Starting");
fileUtils = new FileUtils();
gpxPath = fileUtils.buildExternalDirectoryPath("gpx");
HandlerThread handlerThread;
Handler handler;
handlerThread = new HandlerThread("ImportAllTracks");
handlerThread.start();
handler = new Handler(handlerThread.getLooper());
handler.post(runner);
}
private final Runnable runner = new Runnable() {
public void run() {
aquireLocksAndImport();
}
};
/**
* Makes sure that we keep the phone from sleeping. See if there is a current
* track. Acquire a wake lock if there is no current track.
*/
private void aquireLocksAndImport() {
SharedPreferences prefs = activity.getSharedPreferences(MyTracksSettings.SETTINGS_NAME, 0);
long recordingTrackId = -1;
if (prefs != null) {
recordingTrackId = prefs.getLong(activity.getString(R.string.recording_track_key), -1);
}
if (recordingTrackId != -1) {
wakeLock = MyTracksUtils.acquireWakeLock(activity, wakeLock);
}
// Now we can safely import everything.
importAll();
// Release the wake lock if we acquired one.
// TODO check what happens if we started recording after getting this lock.
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
Log.i(MyTracksConstants.TAG, "ImportAllTracks: Releasing wake lock.");
}
Log.i(MyTracksConstants.TAG, "ImportAllTracks: Done");
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
if (gpxFileCount == 0) {
builder.setMessage(activity.getString(R.string.import_empty, gpxPath + "/"));
} else {
builder.setMessage(activity.getString(R.string.import_done, importSuccessCount, gpxFileCount,
gpxPath + "/"));
}
builder.setPositiveButton(R.string.ok, null);
builder.show();
}
private void makeProgressDialog(final int trackCount) {
String importMsg = activity.getString(R.string.tracklist_btn_import_all);
progress = new ProgressDialog(activity);
progress.setIcon(android.R.drawable.ic_dialog_info);
progress.setTitle(importMsg);
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setMax(trackCount);
progress.setProgress(0);
progress.show();
}
/**
* Actually import the tracks. This should be called after the wake locks have
* been acquired.
*/
private void importAll() {
MyTracksProviderUtils providerUtils = MyTracksProviderUtils.Factory.get(activity);
if (!fileUtils.isSdCardAvailable()) {
return;
}
List<File> gpxFiles = getGpxFiles();
gpxFileCount = gpxFiles.size();
if (gpxFileCount == 0) {
return;
}
Log.i(MyTracksConstants.TAG, "ImportAllTracks: Importing: " + gpxFileCount + " tracks.");
activity.runOnUiThread(new Runnable() {
public void run() {
makeProgressDialog(gpxFileCount);
}
});
Iterator<File> gpxFilesIterator = gpxFiles.iterator();
for (int currentFileNumber = 0; gpxFilesIterator.hasNext(); currentFileNumber++) {
File currentFile = gpxFilesIterator.next();
final int status = currentFileNumber;
activity.runOnUiThread(new Runnable() {
public void run() {
synchronized (this) {
if (progress == null) {
return;
}
progress.setProgress(status);
}
}
});
if (importFile(currentFile, providerUtils)) {
importSuccessCount++;
}
}
if (progress != null) {
synchronized (this) {
progress.dismiss();
progress = null;
}
}
}
/**
* Attempts to import a GPX file. Returns true on success, issues error
* notifications and returns false on failure.
*/
private boolean importFile(File gpxFile, MyTracksProviderUtils providerUtils) {
Log.i(MyTracksConstants.TAG, "ImportAllTracks: importing: " + gpxFile.getName());
try {
GpxImporter.importGPXFile(new FileInputStream(gpxFile), providerUtils);
return true;
} catch (FileNotFoundException e) {
Log.w(MyTracksConstants.TAG, "GPX file wasn't found/went missing: "
+ gpxFile.getAbsolutePath(), e);
} catch (ParserConfigurationException e) {
Log.w(MyTracksConstants.TAG, "Error parsing file: " + gpxFile.getAbsolutePath(), e);
} catch (SAXException e) {
Log.w(MyTracksConstants.TAG, "Error parsing file: " + gpxFile.getAbsolutePath(), e);
} catch (IOException e) {
Log.w(MyTracksConstants.TAG, "Error reading file: " + gpxFile.getAbsolutePath(), e);
}
Toast.makeText(activity, activity.getString(R.string.import_error, gpxFile.getName()),
Toast.LENGTH_LONG).show();
return false;
}
/**
* Returns a list of the GPX Files found in the GPX directory.
*/
private List<File> getGpxFiles() {
List<File> gpxFiles = new LinkedList<File>();
File[] gpxFileCandidates = new File(gpxPath).listFiles();
if (gpxFileCandidates != null) {
for (File file : gpxFileCandidates) {
if (!file.isDirectory() && file.getName().endsWith(".gpx")) {
gpxFiles.add(file);
}
}
}
return gpxFiles;
}
}
@@ -17,6 +17,7 @@ package com.google.android.apps.mytracks;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
@@ -41,7 +42,7 @@ class MenuManager {
public void onPrepareOptionsMenu(Menu menu, boolean hasRecorded,
boolean isRecording, boolean hasSelectedTrack) {
menu.findItem(R.id.menu_list_tracks).setEnabled(hasRecorded);
menu.findItem(R.id.menu_list_tracks);
menu.findItem(R.id.menu_list_markers)
.setEnabled(hasRecorded && hasSelectedTrack);
menu.findItem(R.id.menu_start_recording)
@@ -63,8 +64,8 @@ class MenuManager {
return true;
}
case R.id.menu_list_tracks: {
Intent startIntent = new Intent(activity, MyTracksList.class);
activity.startActivityForResult(startIntent, MyTracksConstants.SHOW_TRACK);
activity.startActivityForResult(new Intent(activity, MyTracksList.class),
MyTracksConstants.SHOW_TRACK);
return true;
}
case R.id.menu_list_markers: {
@@ -73,20 +74,17 @@ class MenuManager {
activity.startActivityForResult(startIntent, MyTracksConstants.SHOW_WAYPOINT);
return true;
}
case R.id.menu_sensor_state: {
return startActivity(SensorStateActivity.class);
}
case R.id.menu_settings: {
Intent startIntent = new Intent(activity, MyTracksSettings.class);
activity.startActivity(startIntent);
return true;
return startActivity(MyTracksSettings.class);
}
case R.id.menu_aggregated_stats: {
Intent startIntent = new Intent(activity, AggregatedStatsActivity.class);
activity.startActivity(startIntent);
return true;
return startActivity(AggregatedStatsActivity.class);
}
case R.id.menu_help: {
Intent startIntent = new Intent(activity, WelcomeActivity.class);
activity.startActivity(startIntent);
return true;
return startActivity(WelcomeActivity.class);
}
case MyTracksConstants.MENU_CLEAR_MAP: {
activity.setSelectedTrackId(-1);
@@ -95,4 +93,9 @@ class MenuManager {
}
return false;
}
private boolean startActivity(Class<? extends Activity> activityClass) {
activity.startActivity(new Intent(activity, activityClass));
return true;
}
}
@@ -0,0 +1,210 @@
/*
* Copyright 2011 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;
import com.google.android.accounts.Account;
import com.google.android.apps.mytracks.io.AuthManager;
import com.google.android.apps.mytracks.io.AuthManagerFactory;
import com.google.android.apps.mytracks.io.MyMapsFactory;
import com.google.android.apps.mytracks.io.mymaps.MapsFacade;
import com.google.android.apps.mytracks.io.mymaps.MapsService;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
/**
* Activity which displays the list of current My Maps tracks for the user.
* Returns RESULT_OK if the user picked a map, and returns "mapid" as an extra.
*
* @author Rodrigo Damazio
*/
public class MyMapsList extends Activity implements MapsFacade.MapsListCallback {
private static final int MENU_OPEN = 0;
private static final int MENU_SHARE = 2;
private static final int GET_LOGIN = 1;
private MapsFacade mapsClient;
private AuthManager auth;
private MyMapsListAdapter listAdapter;
private int contextPosition;
private final OnCreateContextMenuListener contextMenuListener =
new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) menuInfo;
contextPosition = info.position;
menu.add(0, MENU_OPEN, 0, R.string.open_map);
menu.add(0, MENU_SHARE, 0, R.string.share_map);
}
};
private final OnItemClickListener clickListener =
new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
Intent result = new Intent();
result.putExtra("mapid", (String) listAdapter.getItem(position));
setResult(RESULT_OK, result);
finish();
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
auth = AuthManagerFactory.getAuthManager(this, GET_LOGIN, null, true,
MapsService.getServiceName());
setContentView(R.layout.list);
listAdapter = new MyMapsListAdapter(this);
ListView list = (ListView) findViewById(R.id.maplist);
list.setOnItemClickListener(clickListener);
list.setOnCreateContextMenuListener(contextMenuListener);
list.setAdapter(listAdapter);
startLogin();
}
private void startLogin() {
// Starts in the UI thread.
// TODO fix this for non-froyo devices.
if (AuthManagerFactory.useModernAuthManager()) {
MyTracks.getInstance().getAccountChooser().chooseAccount(
MyMapsList.this,
new AccountChooser.AccountHandler() {
@Override
public void handleAccountSelected(Account account) {
// Account selection happens in the UI thread.
if (account != null) {
// The user did not quit and there was a valid google
// account.
doLogin(account);
}
}
});
} else {
doLogin(null);
}
}
private void doLogin(final Account account) {
// Starts in the UI thread.
auth.doLogin(new Runnable() {
public void run() {
// Runs in UI thread.
mapsClient = MyMapsFactory.newMapsClient(MyMapsList.this, auth);
startLookup();
}
}, account);
}
private void startLookup() {
// Starts in the UI thread.
new Thread() {
@Override
public void run() {
// Communication with Maps happens in its own thread.
// This will call onReceivedMapListing below.
final boolean success = mapsClient.getMapsList(MyMapsList.this);
runOnUiThread(new Runnable() {
@Override
public void run() {
// Updating the UI when done happens in the UI thread.
onLookupDone(success);
}
});
}
}.start();
}
@Override
public void onReceivedMapListing(final String mapId, final String title,
final String description, final boolean isPublic) {
// Starts in the communication thread.
runOnUiThread(new Runnable() {
@Override
public void run() {
// Updating the list with new contents happens in the UI thread.
listAdapter.addMapListing(mapId, title, description, isPublic);
}
});
}
private void onLookupDone(boolean success) {
// Starts in the UI thread.
findViewById(R.id.loading).setVisibility(View.GONE);
if (!success) {
findViewById(R.id.failed).setVisibility(View.VISIBLE);
}
TextView emptyView = (TextView) findViewById(R.id.mapslist_empty);
ListView list = (ListView) findViewById(R.id.maplist);
list.setEmptyView(emptyView);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == GET_LOGIN) {
auth.authResult(resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case MENU_OPEN:
clickListener.onItemClick(null, null, contextPosition, 0);
return true;
case MENU_SHARE:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT,
getText(R.string.share_map_subject));
String[] listItem = (String[]) listAdapter.getMapListingArray(contextPosition);
shareIntent.putExtra(Intent.EXTRA_TEXT, String.format(
getText(R.string.share_map_body_format).toString(),
listItem[1],
MapsService.buildMapUrl(listItem[0])));
startActivity(Intent.createChooser(shareIntent,
getText(R.string.share_map).toString()));
return true;
}
return false;
}
}

Some files were not shown because too many files have changed in this diff Show More