From 52f8bd8565e10c88d55a36919e618bab9db769df Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Wed, 8 May 2013 12:44:19 -0700 Subject: [PATCH] Move Google Earth helper methods in GoogleEarthUtils.java --- .../apps/mytracks/TrackDetailActivity.java | 30 ++------ .../fragments/InstallEarthDialogFragment.java | 20 +++-- .../apps/mytracks/io/file/KmlTrackWriter.java | 10 +-- .../apps/mytracks/io/file/SaveActivity.java | 24 ++---- .../apps/mytracks/util/GoogleEarthUtils.java | 75 +++++++++++++++++++ 5 files changed, 98 insertions(+), 61 deletions(-) create mode 100644 MyTracks/src/com/google/android/apps/mytracks/util/GoogleEarthUtils.java diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index 720af7bbe..e2fc0620e 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -39,6 +39,7 @@ import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.settings.SettingsActivity; import com.google.android.apps.mytracks.util.AnalyticsUtils; +import com.google.android.apps.mytracks.util.GoogleEarthUtils; import com.google.android.apps.mytracks.util.GoogleFeedbackUtils; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; @@ -49,8 +50,6 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.app.TaskStackBuilder; @@ -64,7 +63,6 @@ import android.view.View.OnClickListener; import android.widget.TabHost; import android.widget.TabHost.TabSpec; -import java.util.List; import java.util.Locale; /** @@ -319,7 +317,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity splitFrequencyMenuItem = menu.findItem(R.id.track_detail_split_frequency); feedbackMenuItem = menu.findItem(R.id.track_detail_split_frequency); feedbackMenuItem.setVisible(GoogleFeedbackUtils.isAvailable(this)); - + updateMenuItems(trackId == recordingTrackId, recordingTrackPaused); return true; } @@ -344,7 +342,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity startActivity(intent); return true; case R.id.track_detail_play: - if (isEarthInstalled()) { + if (GoogleEarthUtils.isEarthInstalled(this)) { ConfirmDialogFragment.newInstance(R.string.confirm_play_earth_key, PreferencesUtils.CONFIRM_PLAY_EARTH_DEFAULT, getString(R.string.track_detail_play_confirm_message), trackId) @@ -355,7 +353,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity } return true; case R.id.track_detail_share: - confirmShare(trackId); + confirmShare(trackId); return true; case R.id.track_detail_markers: intent = IntentUtils.newIntent(this, MarkerListActivity.class) @@ -384,7 +382,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity FileTypeDialogFragment.newInstance(R.id.track_detail_save, R.string.save_selection_title, R.string.save_selection_option, 4) .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); - return true; + return true; case R.id.track_detail_edit: intent = IntentUtils.newIntent(this, TrackEditActivity.class) .putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackId); @@ -480,7 +478,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity } }); } - + @Override public void onFileTypeDone(int menuId, TrackFileFormat trackFileFormat) { switch (menuId) { @@ -590,20 +588,4 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity } setTitle(title); } - - /** - * Returns true if Google Earth app is installed. - */ - private boolean isEarthInstalled() { - List infos = getPackageManager().queryIntentActivities( - new Intent().setType(SaveActivity.GOOGLE_EARTH_KML_MIME_TYPE), - PackageManager.MATCH_DEFAULT_ONLY); - for (ResolveInfo info : infos) { - if (info.activityInfo != null && info.activityInfo.packageName != null - && info.activityInfo.packageName.equals(SaveActivity.GOOGLE_EARTH_PACKAGE)) { - return true; - } - } - return false; - } } \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/InstallEarthDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/InstallEarthDialogFragment.java index 801d1eb83..4d1c086e5 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/InstallEarthDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/InstallEarthDialogFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.mytracks.fragments; -import com.google.android.apps.mytracks.io.file.SaveActivity; +import com.google.android.apps.mytracks.util.GoogleEarthUtils; import com.google.android.maps.mytracks.R; import android.app.AlertDialog; @@ -32,7 +32,7 @@ import android.widget.Toast; /** * A DialogFragment to install Google Earth. - * + * * @author Jimmy Shih */ public class InstallEarthDialogFragment extends DialogFragment { @@ -40,17 +40,17 @@ public class InstallEarthDialogFragment extends DialogFragment { public static final String INSTALL_EARTH_DIALOG_TAG = "installEarthDialog"; private FragmentActivity fragmentActivity; - + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { fragmentActivity = getActivity(); - return new AlertDialog.Builder(fragmentActivity) - .setMessage(R.string.track_detail_install_earth_message) - .setNegativeButton(R.string.generic_no, null) + return new AlertDialog.Builder(fragmentActivity).setMessage( + R.string.track_detail_install_earth_message).setNegativeButton(R.string.generic_no, null) .setPositiveButton(R.string.generic_yes, new DialogInterface.OnClickListener() { - @Override + @Override public void onClick(DialogInterface dialog, int which) { - Intent intent = new Intent().setData(Uri.parse(SaveActivity.GOOGLE_EARTH_MARKET_URL)); + Intent intent = new Intent().setData( + Uri.parse(GoogleEarthUtils.GOOGLE_EARTH_MARKET_URL)); try { startActivity(intent); } catch (ActivityNotFoundException e) { @@ -59,8 +59,6 @@ public class InstallEarthDialogFragment extends DialogFragment { .show(); } } - }) - .setTitle(R.string.generic_confirm_title) - .create(); + }).setTitle(R.string.generic_confirm_title).create(); } } \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java index d3307fee6..7c7f275e1 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java @@ -24,6 +24,7 @@ import com.google.android.apps.mytracks.content.Sensor.SensorDataSet; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint.WaypointType; +import com.google.android.apps.mytracks.util.GoogleEarthUtils; import com.google.android.apps.mytracks.util.StringUtils; import com.google.android.maps.mytracks.R; import com.google.common.annotations.VisibleForTesting; @@ -42,11 +43,6 @@ import java.util.ArrayList; */ public class KmlTrackWriter implements TrackFormatWriter { - /** - * ID of the KML feature to play a tour. - */ - public static final String TOUR_FEATURE_ID = "tour"; - private static final String WAYPOINT_STYLE = "waypoint"; private static final String STATISTICS_STYLE = "statistics"; private static final String START_STYLE = "start"; @@ -112,7 +108,7 @@ public class KmlTrackWriter implements TrackFormatWriter { printWriter.println(""); printWriter.println(""); + printWriter.println("xmlns:atom=\"http://www.w3.org/2005/Atom\">"); printWriter.println(""); printWriter.println("1"); printWriter.println("1"); @@ -172,7 +168,7 @@ public class KmlTrackWriter implements TrackFormatWriter { if (printWriter != null) { String name = context.getString(R.string.marker_label_start, track.getName()); writePlacemark(name, "", "", START_STYLE, firstLocation); - printWriter.println(""); + printWriter.println(""); printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); printWriter.println( "" + StringUtils.formatCData(track.getDescription()) + ""); diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java index 4cf693e2b..4522142e0 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java @@ -18,6 +18,7 @@ package com.google.android.apps.mytracks.io.file; import com.google.android.apps.mytracks.util.DialogUtils; import com.google.android.apps.mytracks.util.FileUtils; +import com.google.android.apps.mytracks.util.GoogleEarthUtils; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.maps.mytracks.R; @@ -27,7 +28,6 @@ import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.widget.Toast; @@ -46,14 +46,6 @@ public class SaveActivity extends Activity { public static final String EXTRA_PLAY_TRACK = "play_track"; public static final String EXTRA_SHARE_TRACK = "share_track"; - public static final String GOOGLE_EARTH_KML_MIME_TYPE = "application/vnd.google-earth.kml+xml"; - public static final String GOOGLE_EARTH_PACKAGE = "com.google.earth"; - public static final String GOOGLE_EARTH_MARKET_URL = "market://details?id=" - + GOOGLE_EARTH_PACKAGE; - private static final String - GOOGLE_EARTH_TOUR_FEATURE_ID = "com.google.earth.EXTRA.tour_feature_id"; - private static final String GOOGLE_EARTH_CLASS = "com.google.earth.EarthActivity"; - private static final int DIALOG_PROGRESS_ID = 0; private static final int DIALOG_RESULT_ID = 1; @@ -175,23 +167,17 @@ public class SaveActivity extends Activity { removeDialog(DIALOG_PROGRESS_ID); if (successCount == 1 && totalCount == 1 && savedPath != null) { if (playTrack) { - Intent intent = new Intent().addFlags( - Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) - .putExtra(GOOGLE_EARTH_TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID) - .setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS) - .setDataAndType(Uri.fromFile(new File(savedPath)), GOOGLE_EARTH_KML_MIME_TYPE); - startActivity(intent); + startActivity(GoogleEarthUtils.getPlayInEarthIntent(savedPath)); finish(); return; } else if (shareTrack) { Intent intent = IntentUtils.newShareFileIntent(this, trackId, savedPath, trackFileFormat); - startActivity( - Intent.createChooser(intent, getString(R.string.share_track_picker_title))); + startActivity(Intent.createChooser(intent, getString(R.string.share_track_picker_title))); finish(); return; - } + } } - showDialog(DIALOG_RESULT_ID); + showDialog(DIALOG_RESULT_ID); } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/GoogleEarthUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/GoogleEarthUtils.java new file mode 100644 index 000000000..d8af4215c --- /dev/null +++ b/MyTracks/src/com/google/android/apps/mytracks/util/GoogleEarthUtils.java @@ -0,0 +1,75 @@ +/* + * Copyright 2013 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.util; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; + +import java.io.File; +import java.util.List; + +/** + * Utilities for Google Earth. + * + * @author Jimmy Shih + */ +public class GoogleEarthUtils { + + private static final String GOOGLE_EARTH_CLASS = "com.google.earth.EarthActivity"; + private static final String GOOGLE_EARTH_KML_MIME_TYPE = "application/vnd.google-earth.kml+xml"; + private static final String GOOGLE_EARTH_PACKAGE = "com.google.earth"; + private static final String + GOOGLE_EARTH_TOUR_FEATURE_ID = "com.google.earth.EXTRA.tour_feature_id"; + + public static final String GOOGLE_EARTH_MARKET_URL = "market://details?id=" + + GOOGLE_EARTH_PACKAGE; + public static final String TOUR_FEATURE_ID_VALUE = "tour"; + + private GoogleEarthUtils() {} + + /** + * Returns true if Google Earth is installed. + * + * @param context the context + */ + public static boolean isEarthInstalled(Context context) { + List infos = context.getPackageManager().queryIntentActivities( + new Intent().setType(GOOGLE_EARTH_KML_MIME_TYPE), PackageManager.MATCH_DEFAULT_ONLY); + for (ResolveInfo info : infos) { + if (info.activityInfo != null && info.activityInfo.packageName != null + && info.activityInfo.packageName.equals(GOOGLE_EARTH_PACKAGE)) { + return true; + } + } + return false; + } + + /** + * Gets an intent to play a kml file in Google Earth. + * + * @param kmlFilePath the kml file path + */ + public static Intent getPlayInEarthIntent(String kmlFilePath) { + return new Intent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) + .putExtra(GOOGLE_EARTH_TOUR_FEATURE_ID, TOUR_FEATURE_ID_VALUE) + .setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS) + .setDataAndType(Uri.fromFile(new File(kmlFilePath)), GOOGLE_EARTH_KML_MIME_TYPE); + } +}