Merge heads

This commit is contained in:
youtaol
2013-02-21 14:32:04 +08:00
parent c88e67abe1
commit e0084f6652
41 changed files with 150 additions and 376 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+3 -113
View File
@@ -19,120 +19,10 @@ limitations under the License.
android:layout_width="match_parent"
android:orientation="vertical" >
<ScrollView style="@style/ScrollView.WithBottomButtons" >
<LinearLayout
<WebView
android:id="@+id/help_webview"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="8dp" >
<ImageView
android:contentDescription="@string/my_tracks_app_name"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scaleType="fitStart"
android:src="@drawable/my_tracks_icon" />
<TextView
android:text="@string/help_my_tracks_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_my_tracks_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_location_precision_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_location_precision_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_gps_signal_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_gps_signal_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_data_connection_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_data_connection_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_elevation_precision_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_elevation_precision_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_battery_life_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_battery_life_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_share_friends_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_share_friends_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_send_track_question"
style="@style/HelpQuestion" />
<TextView
android:id="@+id/help_send_track_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_maps_public_unlisted_question"
style="@style/HelpQuestion" />
<TextView
android:id="@+id/help_maps_public_unlisted_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_share_visibility_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_share_visibility_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_split_track_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_split_track_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_saved_files_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_saved_files_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_external_storage_access_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_external_storage_access_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_marker_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_marker_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_split_marker_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_split_marker_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_delete_tracks_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_delete_tracks_answer"
style="@style/HelpAnswer" />
<TextView
android:text="@string/help_edit_tracks_question"
style="@style/HelpQuestion" />
<TextView
android:text="@string/help_edit_tracks_answer"
style="@style/HelpAnswer" />
</LinearLayout>
android:layout_width="match_parent" />
</ScrollView>
<LinearLayout style="@style/BottomButtonBar" >
<include layout="@layout/help_buttons" />
+43 -51
View File
@@ -14,81 +14,73 @@ 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.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="top"
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
android:paddingBottom="12dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="8dp" >
<ImageView
android:contentDescription="@string/icon_track"
android:id="@+id/list_item_icon"
android:paddingTop="8dp"
android:shrinkColumns="1"
android:stretchColumns="1" >
<TableRow
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingTop="4dp" />
<LinearLayout
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_width="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent" >
<ImageView
android:contentDescription="@string/icon_track"
android:id="@+id/list_item_icon"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_width="wrap_content" />
<TableLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="0dp"
android:orientation="vertical" >
android:shrinkColumns="0"
android:stretchColumns="0" >
<TableRow>
<TextView
android:id="@+id/list_item_name"
android:layout_gravity="bottom"
android:layout_width="fill_parent"
android:singleLine="true"
style="@style/TextLarge" />
</LinearLayout>
<TextView
android:id="@+id/list_item_date"
android:layout_gravity="bottom"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColor="@android:color/secondary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="0dp"
android:orientation="vertical" >
<TextView
android:id="@+id/list_item_date"
style="@style/ListItemDate" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/list_item_time_distance"
android:layout_gravity="bottom"
android:layout_width="fill_parent"
android:singleLine="true"
android:textColor="@android:color/primary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
<TextView
android:id="@+id/list_item_time"
android:layout_gravity="bottom"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColor="@android:color/secondary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
<TextView
android:id="@+id/list_item_time"
style="@style/ListItemDate" />
</TableRow>
</TableLayout>
</TableRow>
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent" >
<TextView
android:id="@+id/list_item_recording"
android:layout_column="1"
android:singleLine="true"
style="@style/TextSmall" />
</TableRow>
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent" >
<TextView
android:id="@+id/list_item_description"
android:layout_column="1"
android:singleLine="false"
android:textColor="@android:color/secondary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
</LinearLayout>
</TableRow>
</TableLayout>
+2 -2
View File
@@ -69,11 +69,11 @@ Google은 이용자에 대한 위치정보의 이용∙제공사실을 위치정
구글코리아 유한회사\n
대표자: 염동훈\n
주소 : 서울 강남구 역삼동 737 강남파이낸스센터 22층\n
전화번호 : (02) 531-9000\n
</string>
전화번호 : (02) 531-9000\n</string>
<string name="maps_public_unlisted_url">support.google.com/maps/bin/answer.py?answer=144365</string>
<string name="marker_statistics_icon_url">http://maps.google.com/mapfiles/ms/micons/ylw-pushpin.png</string>
<string name="marker_waypoint_icon_url">http://maps.google.com/mapfiles/ms/micons/blue-pushpin.png</string>
<string name="my_tracks_help_url">http://support.google.com/gmm/bin/topic.py?topic=2391064</string>
<string name="my_tracks_privacy_url">www.google.com/policies/privacy/</string>
<string name="my_tracks_recording_service_name">My Tracks Recording Service</string>
<string name="my_tracks_support_url">groups.google.com/a/googleproductforums.com/forum/#!categories/maps/mytracks</string>
+6 -183
View File
@@ -562,14 +562,14 @@ limitations under the License.
Google Drive.">
Do you want to sync your tracks with Google Drive? This will allow you to view your tracks in
Google Drive, share tracks via Google Drive, and view tracks shared with you. All tracks synced
to Google Drive will be private by default.
to Google Drive will be private by default.
</string>
<string name="enable_sync_title"
translation_description="The dialog title asking the user if he wants to enable sync with Google
Drive.">
Sync with Google Drive
</string>
<!-- Eula -->
<string name="eula_accept"
translation_description="In the 'Terms of Service' dialog, the button to accept.">
@@ -780,183 +780,6 @@ limitations under the License.
Tracks' dialog.">
About My Tracks
</string>
<string name="help_battery_life_answer"
translation_description="In the 'Help' page, the answer on battery life.">
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 device\'s
radios will lengthen battery life. Putting the device into Airplane mode will yield the best
results.
</string>
<string name="help_battery_life_question"
translation_description="In the 'Help' page, the question on battery life.">
How long does the battery last when recording tracks?
</string>
<string name="help_data_connection_answer"
translation_description="In the 'Help' page, the answer on data connection.">
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 a map. Instead, you will see a grey screen or a
partial map. Tracks, represented as simple lines, can still be recorded even if there is no data
connection.
</string>
<string name="help_data_connection_question"
translation_description="In the 'Help' page, the question on data connection.">
Do I need cell signal and data connection to use My Tracks?
</string>
<string name="help_delete_tracks_answer"
translation_description="In the 'Help' page, the answer on delete tracks.">
From the track list, select &#8220;Delete all&#8221; when not recording. This permanently
deletes the recorded tracks from the device memory. If you have saved tracks or backups on the
external storage, you must delete them separately. You can access the external storage using
any file manager app from the Play Store or using a USB cable to connect your device to your
computer. Tracks uploaded to Google Maps, Google Fusion Tables, and Google Spreadsheets must
also be deleted separately.
</string>
<string name="help_delete_tracks_question"
translation_description="In the 'Help' page, the question on delete tracks.">
How do I delete all the tracks from the device?
</string>
<string name="help_edit_tracks_answer"
translation_description="In the 'Help' page, the answer on edit tracks.">
Currently, you can\'t with My Tracks. But you can upload your tracks to Google or save them to
the external storage to modify them there.
</string>
<string name="help_edit_tracks_question"
translation_description="In the 'Help' page, the question on edit tracks.">
How can I edit or correct tracks for accuracy?
</string>
<string name="help_elevation_precision_answer"
translation_description="In the 'Help' page, the help content answer on elevation precision.">
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 and wait a few
minutes for the elevation to settle to a stable value.
</string>
<string name="help_elevation_precision_question"
translation_description="In the 'Help' page, the question on elevation precision.">
How precise is the elevation measurement?
</string>
<string name="help_external_storage_access_answer"
translation_description="In the 'Help' page, the answer on external storage access.">
Tracks saved on the external storage are not encrypted. Any application on the device can access
them.
</string>
<string name="help_external_storage_access_question"
translation_description="In the 'Help' page, the question on external storage access.">
Who can access the tracks saved on the external storage?
</string>
<string name="help_gps_signal_answer"
translation_description="In the 'Help' page, the answer on the GPS signal message.">
For My Tracks to work, your device needs to be in line-of-sight contact with the GPS satellites.
If the line-of-sight is obstructed by trees, buildings or canyon walls, you may not get an
accurate signal. If you see the message, wait a minute or two. If your device still does not
find a signal, move to an area clear of obstructions and try again.
</string>
<string name="help_gps_signal_question"
translation_description="In the 'Help' page, the question on the GPS signal message.">
Why does the application sometimes display &#8220;Waiting for GPS signal.&#8221;?
</string>
<string name="help_location_precision_answer"
translation_description="In the 'Help' page, the answer on location precision.">
Under optimal conditions, the location error can be +/- 20 feet (6 meters). However, precision
depends on the quality of the GPS signal. The blue circle around the orange location arrow
indicates estimated precision. (You may need to zoom in or zoom out to see the circle.) You can
change the GPS precision at Settings -> Recording -> GPS accuracy.
</string>
<string name="help_location_precision_question"
translation_description="In the 'Help' page, the question on location precision.">
How precise are the recorded tracks?
</string>
<string name="help_maps_public_unlisted_answer"
translation_description="In the 'Help' page, the answer on public versus unlisted maps.
%1$s url. E.g., 'support.google.com/maps/bin/answer.py?answer=144365'.">
See %1$s.
</string>
<string name="help_maps_public_unlisted_question"
translation_description="In the 'Help' page, the question on public versus unlisted maps.">
What is the difference between public and unlisted when sending a track to Google Maps?
</string>
<string name="help_marker_answer"
translation_description="In the 'Help' page, the answer on markers.">
Markers are used to annotate a location.
</string>
<string name="help_marker_question"
translation_description="In the 'Help' page, the question on markers.">
What are markers?
</string>
<string name="help_my_tracks_answer"
translation_description="In the 'Help' page, the answer on what is My Tracks.">
My Tracks allows you to record GPS tracks and visualize your walking, running, biking or any
other activity while watching live performance statistics. My Tracks makes it easy to archive
your training history with Google Maps, Google Fusion Tables, and Google Spreadsheets, and share
your activities with friends and the world.
</string>
<string name="help_my_tracks_question"
translation_description="In the 'Help' page, the question on what is My Tracks.">
What is My Tracks?
</string>
<string name="help_saved_files_answer"
translation_description="In the 'Help' page, the answer on saved files.">
You can use Google Earth or similar applications to visualize and edit GPS tracks.
</string>
<string name="help_saved_files_question"
translation_description="In the 'Help' page, the question on saved files.">
What can I do with tracks after saving them to the external storage or sharing such files with
friends?
</string>
<string name="help_send_track_answer"
translation_description="In the 'Help' page, the answer on sending a track.
%1$s url. E.g., 'maps.google.com'.
%2$s url. E.g., 'google.com/fusiontables'.
%3$s url. E.g., 'drive.google.com'.">
You can send a track to Google Maps, Google Fusion Tables, and Google Spreadsheets. Tracks sent
to Google Maps are at %1$s, &#8220;My Places&#8221;. Tracks sent to Google Fusion Tables are at
%2$s. Tracks sent to Google Spreadsheets are at %3$s.
</string>
<string name="help_send_track_question"
translation_description="In the 'Help' page, the question on sending a track.">
Where can I send a track?
</string>
<string name="help_share_friends_answer"
translation_description="In the 'Help' page, the answer on sharing with friends.">
You can share a track as a link to Google Maps. Your track will first get uploaded to Google
Maps.
</string>
<string name="help_share_friends_question"
translation_description="In the 'Help' page, the question on sharing with friends.">
How do I share a track with friends?
</string>
<string name="help_share_visibility_answer"
translation_description="In the 'Help' page, the answer on share visibility.">
By default, tracks sent to Google Maps are unlisted, tracks sent to Google Fusion Tables are
private, and tracks sent to Google Spreadsheets are private. For Google Maps, you can change the
default between public and unlisted via Settings -> Google. After uploading tracks, you can
change their visibility in Google Maps, Google Fusion Tables, and Google Spreadsheets.
</string>
<string name="help_share_visibility_question"
translation_description="In the 'Help' page, the question on share visibility.">
Who can see the tracks I send to Google Maps, Google Fusion Tables, and Google Spreadsheets?
</string>
<string name="help_split_marker_answer"
translation_description="In the 'Help' page, the answer on split markers.">
Split markers are used to segment a track to calculate statistics for each segment. Split
markers are inserted by setting the split frequency from the menu.
</string>
<string name="help_split_marker_question"
translation_description="In the 'Help' page, the question on split markers.">
What are split markers?
</string>
<string name="help_split_track_answer"
translation_description="In the 'Help' page, the answer on splitting long tracks.">
Tracks on Google Maps and Google Fusion Tables are limited to certain sizes.
</string>
<string name="help_split_track_question"
translation_description="In the 'Help' page, the question on splitting long tracks.">
Why do very long tracks split into multiple segments upon sending them to Google Maps and
Google Fusion Tables?
</string>
<!-- Icon -->
<string name="icon_application"
@@ -1388,7 +1211,7 @@ limitations under the License.
installation when the app wants to write data to My Tracks.">
write data to Google My Tracks and start/stop Google My Tracks recording
</string>
<!-- Save -->
<string name="save_error"
translation_description="When saving to the external storage, the error message indicating that
@@ -2237,11 +2060,11 @@ limitations under the License.
<string name="share_track_add_emails_title"
translation_description="The dialog title for adding emails to share a track with.">
Add emails
</string>
</string>
<string name="share_track_add_emails_hint"
translation_description="The hint in the auto complete text box for entering email addresses.">
Enter email addresses
</string>
</string>
<string name="share_track_drive_confirm_message"
translation_description="The confirmation message when sharing a track via Google Drive with
friends.">
@@ -2466,7 +2289,7 @@ limitations under the License.
Drive.">
Shared with me
</string>
<!-- Track Widget -->
<string name="track_widget_config_title"
translation_description="Title of the page to configure the My Tracks widget items.">
+8
View File
@@ -106,6 +106,14 @@ limitations under the License.
<item name="android:layout_gravity">center</item>
<item name="android:padding">8dp</item>
</style>
<!-- list item date -->
<style name="ListItemDate" parent="@style/TextSmall">
<item name="android:gravity">right</item>
<item name="android:layout_gravity">bottom</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:singleLine">true</item>
<item name="android:textColor">@android:color/secondary_text_dark</item>
</style>
<!-- scroll view -->
<style name="ScrollView">
<item name="android:layout_height">match_parent</item>
@@ -20,13 +20,13 @@ import com.google.android.apps.mytracks.fragments.AboutDialogFragment;
import com.google.android.apps.mytracks.fragments.AboutDialogFragment.AboutCaller;
import com.google.android.apps.mytracks.fragments.EulaDialogFragment;
import com.google.android.apps.mytracks.fragments.EulaDialogFragment.EulaCaller;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.webkit.WebView;
import android.webkit.WebViewClient;
/**
* An activity that displays the help page.
@@ -39,14 +39,10 @@ public class HelpActivity extends AbstractMyTracksActivity implements AboutCalle
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView mapsPublicUnlisted = (TextView) findViewById(R.id.help_maps_public_unlisted_answer);
mapsPublicUnlisted.setText(StringUtils.getHtml(
this, R.string.help_maps_public_unlisted_answer, R.string.maps_public_unlisted_url));
TextView sendTrack = (TextView) findViewById(R.id.help_send_track_answer);
sendTrack.setText(StringUtils.getHtml(
this, R.string.help_send_track_answer, R.string.send_google_maps_url,
R.string.send_google_fusion_tables_url, R.string.send_google_spreadsheets_url));
WebView webView = (WebView) findViewById(R.id.help_webview);
webView.loadUrl(getString(R.string.my_tracks_help_url));
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
findViewById(R.id.help_ok).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
@@ -74,6 +70,6 @@ public class HelpActivity extends AbstractMyTracksActivity implements AboutCalle
@Override
public void onEulaDone() {
// Do nothing
// Do nothing
}
}
@@ -16,6 +16,7 @@
package com.google.android.apps.mytracks.fragments;
import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
@@ -64,20 +65,31 @@ public class EnableSyncDialogFragment extends DialogFragment {
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragmentActivity = getActivity();
return new AlertDialog.Builder(fragmentActivity).setNegativeButton(
R.string.generic_cancel, new OnClickListener() {
if (PreferencesUtils.getBoolean(
fragmentActivity, R.string.drive_sync_key, PreferencesUtils.DRIVE_SYNC_DEFAULT)) {
dismiss();
caller.onEnableSyncDone(false);
return;
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(fragmentActivity).setMessage(R.string.enable_sync_message)
.setNegativeButton(R.string.generic_cancel, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
caller.onEnableSyncDone(false);
}
}).setPositiveButton(R.string.generic_ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
caller.onEnableSyncDone(true);
}
}).setTitle(R.string.enable_sync_title).setMessage(R.string.enable_sync_message).create();
@Override
public void onClick(DialogInterface dialog, int which) {
caller.onEnableSyncDone(true);
}
}).setTitle(R.string.enable_sync_title).create();
}
@Override
@@ -51,8 +51,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
@@ -158,6 +160,12 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter {
.list().setQ(String.format(Locale.US, SyncUtils.MY_TRACKS_FOLDER_FILES_QUERY, folderId));
Map<String, File> myTracksFolderMap = getFiles(myTracksFolderRequest, true);
// Handle tracks that are already uploaded to Google Drive
Set<String> syncedDriveIds = updateSyncedTracks(folderId);
for (String driveId : syncedDriveIds) {
myTracksFolderMap.remove(driveId);
}
// Get all the KML files in the "Shared with me:/" folder
Files.List sharedWithMeRequest = drive.files()
.list().setQ(SyncUtils.SHARED_WITH_ME_FILES_QUERY);
@@ -176,7 +184,9 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter {
if (cursor != null && cursor.moveToFirst()) {
do {
Track track = myTracksProviderUtils.createTrack(cursor);
myTracksProviderUtils.deleteTrack(track.getId());
if (!syncedDriveIds.contains(track.getDriveId())) {
myTracksProviderUtils.deleteTrack(track.getId());
}
} while (cursor.moveToNext());
}
} finally {
@@ -188,6 +198,47 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter {
}
}
/**
* Updates synced tracks.
*
* @param folderId the folder id
* @return drive ids of the synced tracks
*/
private Set<String> updateSyncedTracks(String folderId) throws IOException {
Set<String> result = new HashSet<String>();
Cursor cursor = null;
try {
cursor = myTracksProviderUtils.getTrackCursor(SyncUtils.DRIVE_ID_TRACKS_QUERY, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
Track track = myTracksProviderUtils.createTrack(cursor);
String driveId = track.getDriveId();
if (driveId != null && !driveId.equals("")) {
if (!track.isSharedWithMe()) {
File driveFile = drive.files().get(driveId).execute();
if (SyncUtils.isValid(driveFile, folderId)) {
merge(track, driveFile);
result.add(driveId);
} else {
/*
* Track has a drive id, but the drive id is no longer valid.
* E.g., the file is moved to another folder. Clear the drive
* id.
*/
SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, null);
}
}
}
} while (cursor.moveToNext());
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return result;
}
/**
* Performs incremental sync.
*
@@ -241,9 +292,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter {
* E.g., the file is moved to another folder. Clear the drive
* id.
*/
track.setDriveId("");
track.setModifiedTime(-1L);
myTracksProviderUtils.updateTrack(track);
SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, null);
}
}
}
@@ -119,7 +119,7 @@ public class ListItemUtils {
if (buffer.length() != 0) {
buffer.append(" ");
}
buffer.append("(" + totalDistance + ")");
buffer.append(" / " + totalDistance);
}
return buffer.toString();
}
@@ -138,10 +138,14 @@ public class ListItemUtils {
if (category == null || category.length() == 0) {
return description;
}
if (description == null || description.length() == 0) {
return category;
StringBuffer buffer = new StringBuffer();
buffer.append("[" + category + "]");
if (description != null && description.length() != 0) {
buffer.append(" " + description);
}
return "[" + category + "] " + description;
return buffer.toString();
}
/**