or pace when calling onPrepareDialog.
Change the x_axis.png and y_axis.png to white foreground
so they show up on the black background.
Clean up chart_settings.xml
- no need to specify minWidth by placing the title
inside a TableLayout
- align text to the bottom of the image
first app launch and when changing the display unit.
In ChartActivity, set the default to true to match the default
in ChartView.
When display unit changes, on the UI thread, request a layout so the
axises can be redrawn.
- Clarify that Zephyr, Polar, SRM are company names and should not get
translated.
- Clarify that Bluetooth and ANT+ are radio standards and can be
translated if possible.
- Clarify that bridge is a network bridge.
- use MyTracksProviderUtils to update a track
- define TRACK_ID and SHOW_CANCEL in TrackDetails
- log error if track doesn't exit
- add a scrollview
- add padding
- update version name and version code in AndroidManifest.xml
- delete values-es-rES/strings.xml (locale not supported by translation)
- remove escaped html characters in values/strings.xml
- all strings.xml in other locales are auto-generated. We will not
modify these files directly.
by calling ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges.
The only exception is using commit (synchronous) when resetting all settings.
because when open a GPX file using
the Linda File Manager, three My Tracks
activities show up.
ImportActivity (My Tracks Importer)
MyTracks (My Tracks)
WaypointDetails (Marker details)
mytracks_send_to_google.xml
- remove unused ids.
- rename id variables.
- set textSize to 18dip to fit "Google Fusion Tables".
- set margin in ScrollView because its height is 0dip
and settings margins in its children have no effect.
SendDialog.java
- use ApiFeature.applyPreferenceChanges to commit preference changes.
- set myMapsGroup View to GONE when 'Google My Maps' is not checked.
- use Context.MODE_PRIVATE.
- onStop, call super.onStop first.
- add period when appropriate
- remove capitalization (only capitalize first word)
- add a 'title' suffix to title strings
- for Dynamic thresholds, rename to 'Medium Speed Percentage'
because the value is a percentage.
- tranlstate 'my_tracks_service_name' string.
Convention:
Use "option" to indicate a display string like "sensor_type_option_ant".
Use "value" to indicate a stored value like "sensor_type_value_ant".
Additional proposals not in this changeset:
- rename "Sensor Options" to "Sensor"?
- rename "Track Color Mode" to "Track color"?
DocsHelper_AddTrackRowTest is using a MockContext, which
cannot be used to call DateFormat.getDateFormat(context).
Refactor a getDisplayDate method in DocsHelper and allow the
test to override the method.
Also update .hgignore to AnnotationProcessor.log.
- MyTrack app should export google-common.jar, common-logging-1.1.1.jar,
protobuf-java-2.3.0-lite.jar and the MyTracksLib library.
- A test should only depend on its app. E.g., it should not need to
reference the MyTracksLib library again.
and the negative button on the right to match the alert dialog.
- If an alert dialog only needs one button, assign it as the PostiveButton.
- If an alert dialog needs two buttons, assign one Positive and another
Negative.
- for CheckUnits, change the message to
"Do you want to use metrics as your default units?" so that
"yes" corresponds to the default case of using metrics as
the default units.
Clean up menu items.
- change "Record track" to "Record Track"
- change "Stop recording" to "Stop Recording"
- remove "Delete all tracks", "Please select the track to view",
"Current track", and "Last segment".
- move "Elevation" to the stat label section.
- Fix AntSensorManager.onDestroy, check antReceiver is not null.
- In AntSensorManager.onDestroy, log info rather than log error
for AntServiceNotConnectedException.
- ApiFeatures.isAudioFocusSupported
- ApiFeatures.hasBackup
- ApiFeatures.useNetHttpTransport
into the appropriate ApiLevelAdapter.
Do not plan to move
- ApiFeatures.hasBluetoothDeviceCreateInsecureRfcommSocketToServiceRecord
- ApiFeatures.canReuseSQLiteQueryBuilder
- ApiFeatures.hasTextToSpeech
Rename CupcakePlatformAdapter to ApiLevel3Adapter.
Rename EclairPlatformAdapter to ApiLevel5Adapter.
Rename GingerbreadPlatformAdapter to ApiLevel9Adapter.
Rename ApiPlatformAdapter to ApiLevelAdapter.
- Use DecimalFormatSymbols getInstance for API level 9 or above.
- Use Arrays copyOfRange for API level 9 or above.
- Remove ApiFeatures hasStrictMode.
- Fix comment on MapOverlay to indicate that the two methods should only be
used during testing.
- Use android.text.format.DateFormat to format date and time in DocsHelper.
This DateFormat uses the same locale format as the phone configuration.
Fix DecimalFormat
In MapOverlay, for testing, expose a getter and a setter
for TrackPathDescriptor instead of newPath and getLastPath.
In SingleColorTrackPathPainter, refactor "new Path" to a
newPath method so that tests can override the newPath method
to provide a mockPath.
- in ControlRecordingService, unbind right after handling an intent
to prevent leaking ServiceConnection before handling the next intent.
- update comment in TrackRecordingService
Only sends broadcast notifications if allowed by the settings bit.
Introduces a permission for internal MyTracks communication.
Thus the MyTracks app widget can use this permission to
always receive broadcast notifications when a track starts
and stops.
Move MyTracksProvider to DatabaseProvider and protect the DatabaseProvider
using the AndroidManifest.xml.
Create a MyTracksProviderUtilFactory to create an instance of
MyTracksProviderUtils that accesses the DatabaseProvider.
Recreate MyTracksProvider by extending DatabaseProvider.
The recreated provider checks access, changes the authority,
and invokes the DatabaseProvider methods.
external applications access based on the
sharing settings.
Protect all RPCs calls using the caller's
process id.
When the service is started, we cannot
tell whether the caller is MyTracks or
another app. Thus when the service
is started, we cannot access MyTracks
database or start/stop a recording.
Previsouly, only the MyTracks app
widget is using the service's start method
to start and stop a recording. Thus
create a private service, ControlRecordingService,
that only the MyTracks app widget can access and delegate
starting/stopping a recording to
TrackRecordingService.
Fusion table depends on google-api-client-1.2.2.alpha.jar.
Proguard needs to be set correctly for the google-api-client library.
Tested a release version and is able to send a track to fusion table.
CheckUnits and SettingsActivity classes for use with intents.
* In SettingsActivity split onCreate() code into initActivityCommons() and
initActivitySpecifics() methods for easier maintaining of code required
for all screens and code require for only some screens.
- removing inner class, and recording of heartbeat timestamps
- fixing issue with rollover by replacing % operator with modulo operation
- comparing problematic firmware id against byte[] instead of String
- removing zephyr packet debug loggin
- not reassigning protobuffers Builders
- moving decision to use workaround into setCadence function
- license and javadoc author for testcase class
- proposal: using introspection to access private fields in testcase in order to determine expected availablity of values from getCadence, alternatively modify access to protected.
- modifying rollover test, hopefully more clear now.
- adding asserts during the loop in this test case.
- Cadence before Extensions
- Adding BuildMajor and BuildMinor to Version since it seems to be required by http://connect.garmin.com
- Version Values now only contain integers by splitting mytracks version code at dots, allows correct XML validation.
With this there's no need to manually import the xml files.
Downside is that if we decide to change something, we need import it in all projects (e.g. change in one, save as a template, then select that template on others).
Reverted .classpath. (Oops)
Moved move the old strings from arrays.xml to strings.xml.
Created sensor_type_options string for "None" for language support.
- Not trying to show dialogs if activity is going away
- Properly handling when the user doesn't select an account
- Handling unwritable database (due to memory full?)
- Handling NPE from fusion tables upload
- Not trying to touch dialogs when we're about to restart the whole app
This is a non-trivial step: I decentralized dialog creation (since it made no sense to have a single place creating a lot of completely unrelated dialogs), made invisible activities just for sending/saving, and changed menu handling a bit, all to decentralize those functions from MyTracks.
There's still a TODO to handle GET_LOGIN more nicely instead of returning from the depths of auth management into the current activity.
Addressed all comments. Cleaned up Polar parser mostly.
Added decaying heart rate algo for now.
Tried to reach out to joni to work on merging projects. No response yet.
- new methods to calculate the CRC8 checksum
- in ZephyrMessageParser the CRC8 now is used in isValid() and the cadence and power values are written to the SensorData objects
* Making registration finer-grained so we only listen to the data we really need.
* Moving the system listener registration to an external class (for testability and readability)
* Adding a unit test (not yet complete)
* Adding documention and cleaning up comments
Still many things TODO:
* Allow pausing of registrations
* Add pause/resume to onPause/onResume of activities
* Move sampling logic out of the hub
* Optimize data reloading when display preferences change
* (maybe) move the data hub and related classes to the "content" package
Since this is a first proposal, I'm not yet modifying the xml files to pass validation, except for a small example.
Also keep in mind that the annotations in the XML (rev in a string tag, or KEEP_PARENT) would be inserted automatically by the "translate" module.
This moves all data source connections into the TrackDataHub.
There are still many things to (re)do here:
- Optimizations about when the listeners are registered
- Optimizations about what data each TrackDataListener is interested in
- When activities are restarting, send new data since they were stopped (instead of doing a full reload)
- Proper double-buffering of Location objects (some listeners are interested in double-buffering all points, while others are only interested in double-buffering sampled points)
- etc.
to have a problem with TRS and Context. When it tries to mock either class, it ends up trying
(and failing) to mock DatabaseErrorHandler, which for some reason always fails.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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>.
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>.
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>.
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)
1) Simplify SharedPreferences management
2) Shut down signalManager/splitManager to avoid random crashes
3) Get rid of sharedPreferencesChanged from the service interface
All tests pass.
The issue was most likely related to a race condition (selectedTrackId can change in the UI thread, while the track is being processed in the handler thread).
Simulated slow drawing by adding 50ms, works pretty cool :)
Found in user error reports (3rd top issue):
java.lang.StringIndexOutOfBoundsException
at com.google.android.apps.mytracks.util.ChartsExtendedEncoder.getEncodedValue(ChartsExtendedEncoder.java:45)
at com.google.android.apps.mytracks.util.ChartURLGenerator.getChartUrl(ChartURLGenerator.java:162)
at com.google.android.apps.mytracks.util.ChartURLGenerator.getChartUrl(ChartURLGenerator.java:60)
at com.google.android.apps.mytracks.util.StringUtils.generateTrackDescription(StringUtils.java:366)
at com.google.android.apps.mytracks.io.SendToMyMaps.doUpload(SendToMyMaps.java:581)
at com.google.android.apps.mytracks.io.SendToMyMaps.access$10(SendToMyMaps.java:538)
at com.google.android.apps.mytracks.io.SendToMyMaps$5.run(SendToMyMaps.java:517)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
In particular:
1) Add a workaround to {start/end}Recording to update recordingTrackId to trigger a notification
2) Add a bunch of unit tests for MyTracks
3) Clear minor style issues in a few classes
Allow users to choose the default track name policy. By default, we'll switch
to a new, timestamp-based name. If they change the pref, they'll get the
old-style 'track n' style.
1) Make sure no one but service changes recordingTrackId (which is owned by it)
2) Cache sharedPreferences
3) Clear recordingTrackId if it doesn't correspond to a valid track or the service is not recording
4) More unit tests
Notably:
1) Fixed isRecording to not return false if service is down (for instance, it may be being restarted)
2) Added more checks to prevent from invalid starting/stopping (if in already in progress/not started).
1) Decouple clock from TripStatisticsBuilder.
2) Introduce a new param to constructor to automatically resume at given time
3) Fix various statsbuilder initialization issues in the service (wrong order, missing initialization)
For a track with ~2,500 points, the average drawign would take ~30-50ms, now it takes about 20ms (21ms if software clipping is enabled).
Removed all possible congestion points by introducing a blocking queue.
This change includes many fixes, including:
1) Major refactoring and clean up of the overlay, sped up drawing by a factor of 2x
2) Disable software clipping as it was slower by about 5% than w/o clipping and would trigger a bug related to map view spanning
3) Add waypoints synchronization and fixed a bug related to skipping the first wpt
4) Add a simple unit test
In addition fix the following issues/add functionality:
0) Introduce MyTracksReceiver for listening on broadcast messages
1) Remove unnecessary call to VerifyChecker to avoid 403.
2) Clean up TrackRecordingService by adding private methods for common functionality
3) Fix a bug related to not canceling a timer after service was stopped
4) Add a new preference item to control behavior of new functionality
5) Add a unit test for the service (still need to figure out one issue with mocking content resolver).
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.
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.
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.
<i>My Tracks</i> is an application for your Android powered phone. With <i>My Tracks</i> you can record GPS tracks and visualize your hiking, running, biking or any other activity while watching live performance statistics. <i>My Tracks</i> makes it easy to archive your training history with <i>Google Docs</i> and <i>Google My Maps</i>, and share your activities with friends and the world.<br><br>
<b>How do I see the map, statistics and elevation profile?</b><br>
Touch the map. Left and right arrows will appear. Tap on these arrows to cycle between the map view, the track statistics view, and the elevation profile.<br><br>
<b>Why does the application sometimes display <i>Waiting for a better GPS fix. Make sure the sky is visible</i>?</b><br>
For <i>My Tracks</i> to work, your phone needs to be in line-of-sight contact with the GPS satellites orbiting the earth. If line-of-sight is obstructed by trees, buildings or canyon walls, you may not get an accurate fix. If you see the message Waiting for a better GPS fix, wait a minute or two. If your device does not achieve a fix, move to an area clear of obstructions and try again.
<br><br>
<b>How do I send my tracks to <i>Google My Maps</i> and <i>Google Docs</i>?</b><br>
Tap the <i>Options</i> button located at the bottom right corner of the map and select <i>Send to Google...</i> Then choose to send the track to <i>Google My Maps</i> and/or <i>Google Docs</i>. The first time you do this, you may be prompted to log into your Google account. By default your track will be uploaded to a new <i>My Map</i> that will be created in your account. You can opt to add your track to an existing <i>My Map</i> if you prefer. In that case you will be asked to choose a <i>My Map</i> from your account. You can view and edit all of your <i>My Maps</i> by going to maps.google.com, signing in, and clicking on the <i>My Maps</i> tab.<br><br>
<b>How do I share tracks with friends and the rest of the world? </b><br>
After recording a track, press the <i>Options</i> button on the bottom right of the map and then select <i>Share with friends...</i> Select how you want to share the track: a) as a link to a <i>Google My Map</i> (you will be prompted to upload the track to <i>Google My Maps</i> if you have not already done so), b) as a GPX file in an e-mail attachment, or c) as a KML file in an e-mail attachment. You can also send an e-mail with a link to your <i>My Map</i> by going to maps.google.com on your computer. Select the map and then click <i>Link</i> on the right side of the Google Maps web site.<br><br>
<b>Can I view other people's tracks on my Android phone?</b><br>
Yes. Use the <i>Google My Maps Editor</i> application, available from the <i>Android Market</i>, to view tracks that have been uploaded to <ahref="http://www.google.com/url?sa=D&q=http%3A%2F%2Fmaps.google.com">maps.google.com</a> by you or your friends. If you have received an e-mail invitation to view a map, you can click on the link contained in the e-mail to view the map on your Android phone, assuming that <i>Google My Maps Editor</i> is installed on the phone.<br><br>
<b>What are way point markers?</b><br>
Way point markers are used to annotate a place. For example if you are recording a track and you are close to an interesting place, let's say a mountain top, press <i>MENU | Markers | Insert Way point</i> to insert a way point marker at that location. Type a name and description for the place. Once you send your track to Google a place marker will show up on your map. People who view your maps can read your description and learn about this place.<br><br>
<b>What are statistics markers?</b><br>
Let's say you are recording a bike ride up a hill. You will be able to see the total time and distance for the trip, but wouldn't it be good to know how long the climbing part took and how much altitude has been gained? That's what statistics marker are for. Insert a statistics marker once at the bottom of the hill, and once at the top. Now you will be able to view track statistics for each segment of your ride. Each marker has the statistic for the segment up to the marker. Note: To insert a statistics marker simply press the track ball (while the <i>My Tracks</i> application is in the foreground), or use <i>MENU | Markers | Insert Statistics</i>.<br><br>
<b>Do I need a cell signal and data connection to use <i>My Tracks</i>?</b><br>
A cell signal or data connection is not required to record GPS tracks. However, if there is no data connection, you will not be able to see satellite imagery or a map. Instead, you will see a grey screen or partial map. Tracks, represented as simple lines, can still be recorded even if there is no data connection.<br><br>
<b>How long does the battery last when recording tracks?</b><br>
The GPS receiver draws a relatively high amount of power, so a fully charged battery typically survives less than 5 hours. Battery life depends on many factors, including signal strength, battery freshness, and tasks running in parallel. Switching off some or all of the phone's radios will lengthen battery life. Putting the phone into Airplane mode will yield the best results.<br><br>
<b>What can I do with tracks after saving them as GPX or KML files to the SD card or sharing such files with friends?</b><br> GPX and KML are standard file formats for storing data from GPS receivers. You can use Google Earth or similar applications to visualize and edit GPS tracks. Go to http://earth.google.com to download the latest version of Google Earth for free.<br><br>
<b>How precise are the recorded tracks?</b><br>
Under optimal conditions the location error can be +/- 20 feet (6 meters). However, precision depends on the quality of the GPS signal. Your phone needs to be in line-of-sight contact with the GPS satellites orbiting the earth. The signal will be best in open areas free of trees, buildings, canyon walls and other obstructions. The blue circle around the orange location arrow indicates estimated precision. (You may need to zoom in or out to see the circle.) If the precision is too low, a message at the top of the screen will alert you and tracks will not be recorded. You can change the minimum required precision in the <i>My Tracks</i> Settings (See: <i>MENU | Settings | Pause recording if accuracy drops below</i>).<br><br>
<b> How precise is the elevation measurement?</b><br>
GPS receivers measure elevations much less precisely than latitude and longitude. Elevations can sometimes be off by a few hundred feet, though relative changes are tracked more precisely. To get a good elevation measurement make sure that you have a strong GPS signal (good sky visibility) and wait a few minutes for the elevation to settle to a stable value.<br><br>
<b>Can I edit the tracks and correct them for inaccuracies?</b><br>
Once you upload tracks to <i>Google My Maps</i>, you can move, delete or insert individual track points as desired.<br><br>
<b>Why do very long tracks split into multiple segments upon sending them to <i>Google My Maps</i>? </b><br>
Tracks on maps.google.com are limited to 500 points or less. As a result, long tracks are split into multiple pieces upon upload to <i>Google My Maps</i>.<br><br>
<b>How do I delete all tracks from my phone?</b><br> Press the MENU button and select List tracks. Tap the Delete all tracks button. This permanently deletes the recorded GPS tracks from memory. If you have saved tracks to the SD card, you must delete them separately. Tracks uploaded to <i>Google My Maps</i> and <i>Google Docs</i> must also be deleted separately.<br><br>
<b>Who can see maps I send to maps.google.com?</b><br> By default new maps that you send to maps.google.com will be publicly visible. To prevent newly created maps from being public, go to the <i>My Tracks</i> settings screen and deselect the check box labeled <i>Make maps public on maps.google.com</i>. You can change the visibility of existing maps through the maps.google.com web site or using the <i>Google My Maps Editor</i> application from your Android phone.<br><br><br><br>
By downloading, installing or using this application or any portion thereof ("Application"), you agree to the following terms and conditions (the "Terms and Conditions").
1. USE OF APPLICATION
a. Google grants you the non-exclusive, non-transferable, limited right and license to install and use this Application solely and exclusively for your personal use.
b. You may not use the Application in any manner that could damage, disable, overburden, or impair the Application (or servers or networks connected to the Application), nor may you use the Application in any manner that could interfere with any other party's use and enjoyment of the Application (or servers or networks connected to the Application).
c. You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) your use of the Application, any breach of your obligations under the Terms and Conditions, and for the consequences (including any loss or damage which Google may suffer) of any such breach.
2. PROPRIETARY RIGHTS
You acknowledge that (a) the Application contains proprietary and confidential information that is protected by applicable intellectual property and other laws, and (b) Google and/or third parties own all right, title and interest in and to the Application and content, excluding content provided by you, that may be presented or accessed through the Application, including without limitation all Intellectual Property Rights therein and thereto. "Intellectual Property Rights" means any and all rights existing from time to time under patent law, copyright law, trade secret law, trademark law, unfair competition law, and any and all other proprietary rights, and any and all applications, renewals, extensions and restorations thereof, now or hereafter in force and effect worldwide. You agree that you will not, and will not allow any third party to, (i) copy, sell, license, distribute, transfer, modify, adapt, translate, prepare derivative works from, decompile, reverse engineer, disassemble or otherwise attempt to derive source code from the Application or content that may be presented or accessed through the Application for any purpose, unless otherwise permitted, (ii) take any action to circumvent or defeat the security or content usage rules provided, deployed or enforced by any functionality (including without limitation digital rights management functionality) contained in the Application, (iii) use the Application to access, copy, transfer, transcode or retransmit content in violation of any law or third party rights, or (iv) remove, obscure, or alter Google's or any third party's copyright notices, trademarks, or other proprietary rights notices affixed to or contained within or accessed in conjunction with or through the Application.
3. GOOGLE TERMS OF SERVICE AND PRIVACY POLICY
a. Google’s Privacy Policy (located at http://www.google.com/privacypolicy.html) explains how Google treats your information and protects your privacy when you use the Application. You agree to the use of your data in accordance with Google’s privacy policies.
b. The Application may contain features that are used in conjunction with Google’s search and other services. Accordingly, your use of such features of the Application is also governed by Google’s Terms of Service located at http://www.google.com/terms_of_service.html, Google’s Privacy Policy located at http://www.google.com/privacypolicy.html, as well as any applicable Google Service-specific Terms of Service and Privacy Policy, which may be updated from time to time and without notice.
4. U.S. GOVERNMENT RESTRICTED RIGHTS
This Application, related materials and documentation have been developed entirely with private funds. If the user of the Application is an agency, department, employee, or other entity of the United States Government, the use, duplication, reproduction, release, modification, disclosure, or transfer of the Application, including technical data or manuals, is restricted by the terms, conditions and covenants contained in these Terms and Conditions. In accordance with Federal Acquisition Regulation 12.212 for civilian agencies and Defense Federal Acquisition Regulation Supplement 227.7202 for military agencies, use of the Application is further restricted by these Terms and Conditions.
5. EXPORT RESTRICTIONS
The Application may be subject to export controls or restrictions by the United States or other countries or territories. You agree to comply with all applicable U.S. and international export laws and regulations. These laws include restrictions on destinations, end users, and end use.
6. TERMINATION
These Terms and Conditions will continue to apply until terminated by either you or Google as set forth below. You may terminate these Terms and Conditions at any time by permanently deleting the Application from your mobile device in its entirety. Your rights automatically and immediately terminate without notice from Google or any Third Party if you fail to comply with any provision of these Terms and Conditions. In such event, you must immediately delete the Application.
7. INDEMNITY
To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from your use of the Application, including your downloading, installation, or use of the Application, or your violation of these Terms and Conditions.
8. DISCLAIMER OF WARRANTIES
A. You expressly understand and agree that your use of the application is at your sole discretion and risk and that the application is provided “as is” and “as available” without warranty of any kind.
B. You are solely responsible for any damage to your mobile device, or other device, or loss of data that results from such use.
C. Google further expressly disclaims all warranties and conditions of any kind, whether express or implied, including, but not limited to the implied warranties and conditions of merchantability, fitness for a particular purpose and non-infringement, with respect to the application.
D. The application is not intended for use in the operation of nuclear facilities, life support systems, emergency communications, aircraft navigation or communication systems, air traffic control systems, or any other activities in which the failure of the application could lead to death, personal injury, or severe physical or environmental damage.
9. LIMITATION OF LIABILITY
You expressly understand and agree that google, its subsidiaries and affiliates, and its licensors are not liable to you under any theory of liability for any direct, indirect, incidental, special consequential or exemplary damages that may be incurred by you through your use of the application, including any loss of data or damage to your mobile device, whether or not google or its representatives have been advised of or should have been aware of the possibility of any such losses arising.
10. MISCELLANEOUS
a. These Terms and Conditions constitute the entire Agreement between you and Google relating to the Application and govern your use of the Application, and completely replace any prior or contemporaneous agreements between you and Google regarding the Application.
b. The failure of Google to exercise or enforce any right or provision of these Terms and Conditions does not constitute a waiver of such right or provision, which will still be available to Google.
c. If any court of law, having the jurisdiction to decide on this matter, rules that any provision of these Terms and Conditions is invalid, then that provision will be removed from the Terms and Conditions without affecting the rest of the Terms and Conditions. The remaining provisions of these Terms and Conditions will continue to be valid and enforceable.
d. The rights granted in these Terms and Conditions may not be assigned or transferred by either you or Google without the prior written approval of the other party. Neither you nor Google are permitted to delegate their responsibilities or obligations under these Terms and Conditions without the prior written approval of the other party.
e. These Terms and Conditions and your relationship with Google under these Terms and Conditions will be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from these Terms and Conditions. Notwithstanding this, you agree that Google will still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.