mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-11 13:33:07 +02:00
Move Google Earth helper methods in GoogleEarthUtils.java
This commit is contained in:
@@ -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.services.TrackRecordingServiceConnection;
|
||||||
import com.google.android.apps.mytracks.settings.SettingsActivity;
|
import com.google.android.apps.mytracks.settings.SettingsActivity;
|
||||||
import com.google.android.apps.mytracks.util.AnalyticsUtils;
|
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.GoogleFeedbackUtils;
|
||||||
import com.google.android.apps.mytracks.util.IntentUtils;
|
import com.google.android.apps.mytracks.util.IntentUtils;
|
||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||||
@@ -49,8 +50,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.content.pm.ResolveInfo;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.support.v4.app.TaskStackBuilder;
|
import android.support.v4.app.TaskStackBuilder;
|
||||||
@@ -64,7 +63,6 @@ import android.view.View.OnClickListener;
|
|||||||
import android.widget.TabHost;
|
import android.widget.TabHost;
|
||||||
import android.widget.TabHost.TabSpec;
|
import android.widget.TabHost.TabSpec;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -319,7 +317,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
|
|||||||
splitFrequencyMenuItem = menu.findItem(R.id.track_detail_split_frequency);
|
splitFrequencyMenuItem = menu.findItem(R.id.track_detail_split_frequency);
|
||||||
feedbackMenuItem = menu.findItem(R.id.track_detail_split_frequency);
|
feedbackMenuItem = menu.findItem(R.id.track_detail_split_frequency);
|
||||||
feedbackMenuItem.setVisible(GoogleFeedbackUtils.isAvailable(this));
|
feedbackMenuItem.setVisible(GoogleFeedbackUtils.isAvailable(this));
|
||||||
|
|
||||||
updateMenuItems(trackId == recordingTrackId, recordingTrackPaused);
|
updateMenuItems(trackId == recordingTrackId, recordingTrackPaused);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -344,7 +342,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
case R.id.track_detail_play:
|
case R.id.track_detail_play:
|
||||||
if (isEarthInstalled()) {
|
if (GoogleEarthUtils.isEarthInstalled(this)) {
|
||||||
ConfirmDialogFragment.newInstance(R.string.confirm_play_earth_key,
|
ConfirmDialogFragment.newInstance(R.string.confirm_play_earth_key,
|
||||||
PreferencesUtils.CONFIRM_PLAY_EARTH_DEFAULT,
|
PreferencesUtils.CONFIRM_PLAY_EARTH_DEFAULT,
|
||||||
getString(R.string.track_detail_play_confirm_message), trackId)
|
getString(R.string.track_detail_play_confirm_message), trackId)
|
||||||
@@ -355,7 +353,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case R.id.track_detail_share:
|
case R.id.track_detail_share:
|
||||||
confirmShare(trackId);
|
confirmShare(trackId);
|
||||||
return true;
|
return true;
|
||||||
case R.id.track_detail_markers:
|
case R.id.track_detail_markers:
|
||||||
intent = IntentUtils.newIntent(this, MarkerListActivity.class)
|
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,
|
FileTypeDialogFragment.newInstance(R.id.track_detail_save, R.string.save_selection_title,
|
||||||
R.string.save_selection_option, 4)
|
R.string.save_selection_option, 4)
|
||||||
.show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG);
|
.show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG);
|
||||||
return true;
|
return true;
|
||||||
case R.id.track_detail_edit:
|
case R.id.track_detail_edit:
|
||||||
intent = IntentUtils.newIntent(this, TrackEditActivity.class)
|
intent = IntentUtils.newIntent(this, TrackEditActivity.class)
|
||||||
.putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackId);
|
.putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackId);
|
||||||
@@ -480,7 +478,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFileTypeDone(int menuId, TrackFileFormat trackFileFormat) {
|
public void onFileTypeDone(int menuId, TrackFileFormat trackFileFormat) {
|
||||||
switch (menuId) {
|
switch (menuId) {
|
||||||
@@ -590,20 +588,4 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
|
|||||||
}
|
}
|
||||||
setTitle(title);
|
setTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if Google Earth app is installed.
|
|
||||||
*/
|
|
||||||
private boolean isEarthInstalled() {
|
|
||||||
List<ResolveInfo> 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+9
-11
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.google.android.apps.mytracks.fragments;
|
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 com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@@ -32,7 +32,7 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A DialogFragment to install Google Earth.
|
* A DialogFragment to install Google Earth.
|
||||||
*
|
*
|
||||||
* @author Jimmy Shih
|
* @author Jimmy Shih
|
||||||
*/
|
*/
|
||||||
public class InstallEarthDialogFragment extends DialogFragment {
|
public class InstallEarthDialogFragment extends DialogFragment {
|
||||||
@@ -40,17 +40,17 @@ public class InstallEarthDialogFragment extends DialogFragment {
|
|||||||
public static final String INSTALL_EARTH_DIALOG_TAG = "installEarthDialog";
|
public static final String INSTALL_EARTH_DIALOG_TAG = "installEarthDialog";
|
||||||
|
|
||||||
private FragmentActivity fragmentActivity;
|
private FragmentActivity fragmentActivity;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
fragmentActivity = getActivity();
|
fragmentActivity = getActivity();
|
||||||
return new AlertDialog.Builder(fragmentActivity)
|
return new AlertDialog.Builder(fragmentActivity).setMessage(
|
||||||
.setMessage(R.string.track_detail_install_earth_message)
|
R.string.track_detail_install_earth_message).setNegativeButton(R.string.generic_no, null)
|
||||||
.setNegativeButton(R.string.generic_no, null)
|
|
||||||
.setPositiveButton(R.string.generic_yes, new DialogInterface.OnClickListener() {
|
.setPositiveButton(R.string.generic_yes, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
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 {
|
try {
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
@@ -59,8 +59,6 @@ public class InstallEarthDialogFragment extends DialogFragment {
|
|||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
}).setTitle(R.string.generic_confirm_title).create();
|
||||||
.setTitle(R.string.generic_confirm_title)
|
|
||||||
.create();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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.Track;
|
||||||
import com.google.android.apps.mytracks.content.Waypoint;
|
import com.google.android.apps.mytracks.content.Waypoint;
|
||||||
import com.google.android.apps.mytracks.content.Waypoint.WaypointType;
|
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.apps.mytracks.util.StringUtils;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
@@ -42,11 +43,6 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
public class KmlTrackWriter implements TrackFormatWriter {
|
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 WAYPOINT_STYLE = "waypoint";
|
||||||
private static final String STATISTICS_STYLE = "statistics";
|
private static final String STATISTICS_STYLE = "statistics";
|
||||||
private static final String START_STYLE = "start";
|
private static final String START_STYLE = "start";
|
||||||
@@ -112,7 +108,7 @@ public class KmlTrackWriter implements TrackFormatWriter {
|
|||||||
printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
|
printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
|
||||||
printWriter.println("<kml xmlns=\"http://www.opengis.net/kml/2.2\"");
|
printWriter.println("<kml xmlns=\"http://www.opengis.net/kml/2.2\"");
|
||||||
printWriter.println("xmlns:gx=\"http://www.google.com/kml/ext/2.2\"");
|
printWriter.println("xmlns:gx=\"http://www.google.com/kml/ext/2.2\"");
|
||||||
printWriter.println("xmlns:atom=\"http://www.w3.org/2005/Atom\">");
|
printWriter.println("xmlns:atom=\"http://www.w3.org/2005/Atom\">");
|
||||||
printWriter.println("<Document>");
|
printWriter.println("<Document>");
|
||||||
printWriter.println("<open>1</open>");
|
printWriter.println("<open>1</open>");
|
||||||
printWriter.println("<visibility>1</visibility>");
|
printWriter.println("<visibility>1</visibility>");
|
||||||
@@ -172,7 +168,7 @@ public class KmlTrackWriter implements TrackFormatWriter {
|
|||||||
if (printWriter != null) {
|
if (printWriter != null) {
|
||||||
String name = context.getString(R.string.marker_label_start, track.getName());
|
String name = context.getString(R.string.marker_label_start, track.getName());
|
||||||
writePlacemark(name, "", "", START_STYLE, firstLocation);
|
writePlacemark(name, "", "", START_STYLE, firstLocation);
|
||||||
printWriter.println("<Placemark id=\"" + TOUR_FEATURE_ID + "\">");
|
printWriter.println("<Placemark id=\"" + GoogleEarthUtils.TOUR_FEATURE_ID_VALUE + "\">");
|
||||||
printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>");
|
printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>");
|
||||||
printWriter.println(
|
printWriter.println(
|
||||||
"<description>" + StringUtils.formatCData(track.getDescription()) + "</description>");
|
"<description>" + StringUtils.formatCData(track.getDescription()) + "</description>");
|
||||||
|
|||||||
@@ -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.DialogUtils;
|
||||||
import com.google.android.apps.mytracks.util.FileUtils;
|
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.apps.mytracks.util.IntentUtils;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
@@ -27,7 +28,6 @@ import android.app.Dialog;
|
|||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.Toast;
|
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_PLAY_TRACK = "play_track";
|
||||||
public static final String EXTRA_SHARE_TRACK = "share_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_PROGRESS_ID = 0;
|
||||||
private static final int DIALOG_RESULT_ID = 1;
|
private static final int DIALOG_RESULT_ID = 1;
|
||||||
|
|
||||||
@@ -175,23 +167,17 @@ public class SaveActivity extends Activity {
|
|||||||
removeDialog(DIALOG_PROGRESS_ID);
|
removeDialog(DIALOG_PROGRESS_ID);
|
||||||
if (successCount == 1 && totalCount == 1 && savedPath != null) {
|
if (successCount == 1 && totalCount == 1 && savedPath != null) {
|
||||||
if (playTrack) {
|
if (playTrack) {
|
||||||
Intent intent = new Intent().addFlags(
|
startActivity(GoogleEarthUtils.getPlayInEarthIntent(savedPath));
|
||||||
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);
|
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
} else if (shareTrack) {
|
} else if (shareTrack) {
|
||||||
Intent intent = IntentUtils.newShareFileIntent(this, trackId, savedPath, trackFileFormat);
|
Intent intent = IntentUtils.newShareFileIntent(this, trackId, savedPath, trackFileFormat);
|
||||||
startActivity(
|
startActivity(Intent.createChooser(intent, getString(R.string.share_track_picker_title)));
|
||||||
Intent.createChooser(intent, getString(R.string.share_track_picker_title)));
|
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
showDialog(DIALOG_RESULT_ID);
|
showDialog(DIALOG_RESULT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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<ResolveInfo> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user