diff --git a/.hgignore b/.hgignore index 8372fdde3..7220e4cb0 100644 --- a/.hgignore +++ b/.hgignore @@ -3,3 +3,4 @@ syntax:glob */bin */gen/** .metadata +MyTracksTest/annotations.log diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml index c3a1c4874..3f9c8689a 100755 --- a/MyTracks/AndroidManifest.xml +++ b/MyTracks/AndroidManifest.xml @@ -12,7 +12,7 @@ android:value="AEdPqrEAAAAIi-_QiwoRSc9_bAC9cmuNXTQyU8ajJmGtKdhskQ" /> + + + authMap = new HashMap(); @@ -277,7 +280,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); layout.setLayoutParams(params); navControls = - new NavControls(this, layout, leftIcons, rightIcons, changeTab); + new NavControls(this, layout, leftIcons, rightIcons, changeTab); navControls.show(); tabHost.addView(layout); layout.setOnTouchListener(this); @@ -345,7 +348,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, @Override protected void onStop() { Log.d(MyTracksConstants.TAG, "MyTracks.onStop"); - // Clean up any temporary GPX and KML files. + // Clean up any temporary track files. (new TempFileCleaner()).clean(); super.onStop(); } @@ -381,8 +384,8 @@ public class MyTracks extends TabActivity implements OnTouchListener, */ @Override - protected Dialog onCreateDialog(int id) { - return dialogManager.onCreateDialog(id); + protected Dialog onCreateDialog(int id, Bundle args) { + return dialogManager.onCreateDialog(id, args); } @Override @@ -423,17 +426,17 @@ public class MyTracks extends TabActivity implements OnTouchListener, authenticate(results, MyTracksConstants.SEND_TO_GOOGLE, MyMapsConstants.MAPSHOP_SERVICE); } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } break; } case MyTracksConstants.GET_LOGIN: { if (resultCode == RESULT_OK && auth != null) { if (!auth.authResult(resultCode, results)) { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } break; } @@ -489,7 +492,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, authenticate(results, MyTracksConstants.AUTHENTICATE_TO_TRIX, "writely"); } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } break; } @@ -500,7 +503,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, R.string.progress_message_authenticating_docs); authenticate(results, MyTracksConstants.SEND_TO_DOCS, "wise"); } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } break; } @@ -515,7 +518,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, Runnable onCompletion = new Runnable() { public void run() { setProgressValue(100); - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); runOnUiThread(new Runnable() { public void run() { sendToDocsMessage = sender.getStatusMessage(); @@ -528,13 +531,13 @@ public class MyTracks extends TabActivity implements OnTouchListener, sender.setOnCompletion(onCompletion); sender.run(); } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } break; } case MyTracksConstants.SEND_TO_GOOGLE_DIALOG: { shareRequested = false; - showDialogSafely(DialogManager.DIALOG_SEND_TO_GOOGLE); + showDialogSafely(DIALOG_SEND_TO_GOOGLE); break; } case MyTracksConstants.SEND_TO_GOOGLE: { @@ -575,7 +578,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, onActivityResult(MyTracksConstants.AUTHENTICATE_TO_DOCS, RESULT_OK, new Intent()); } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); runOnUiThread(new Runnable() { public void run() { handleMapsFinish(); @@ -592,7 +595,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, Handler handler = new Handler(handlerThread.getLooper()); handler.post(sender); } else { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); } break; } @@ -622,7 +625,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, shareLinkToMyMap(selectedTrack.getMapId()); } else { shareRequested = true; - showDialogSafely(DialogManager.DIALOG_SEND_TO_GOOGLE); + showDialogSafely(DIALOG_SEND_TO_GOOGLE); } } break; @@ -736,7 +739,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, } private void importGpxFile(final String fileName) { - showDialogSafely(DialogManager.DIALOG_IMPORT_PROGRESS); + showDialogSafely(DIALOG_IMPORT_PROGRESS); Thread t = new Thread() { @Override public void run() { @@ -773,7 +776,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, } finally { runOnUiThread(new Runnable() { public void run() { - dismissDialog(DialogManager.DIALOG_IMPORT_PROGRESS); + dismissDialog(DIALOG_IMPORT_PROGRESS); } }); } @@ -1048,7 +1051,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, @Override public void handleAccountSelected(Account account) { if (account == null) { - dismissDialogSafely(DialogManager.DIALOG_PROGRESS); + dismissDialogSafely(DIALOG_PROGRESS); return; } doLogin(results, requestCode, service, account); @@ -1141,7 +1144,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, } setProgressValue(0); clearProgressMessage(); - showDialogSafely(DialogManager.DIALOG_PROGRESS); + showDialogSafely(DIALOG_PROGRESS); if (sendToGoogleDialog.getSendToMyMaps()) { if (!sendToGoogleDialog.getCreateNewMap()) { Intent listIntent = new Intent(this, MyMapsList.class); @@ -1282,12 +1285,12 @@ public class MyTracks extends TabActivity implements OnTouchListener, * @param trackId The id of the track to be sent */ public void saveTrack(long trackId, TrackFileFormat format) { - showDialogSafely(DialogManager.DIALOG_WRITE_PROGRESS); + showDialogSafely(DIALOG_WRITE_PROGRESS); final TrackWriter writer = TrackWriterFactory.newWriter(this, providerUtils, trackId, format); writer.setOnCompletion(new Runnable() { public void run() { - dismissDialogSafely(DialogManager.DIALOG_WRITE_PROGRESS); + dismissDialogSafely(DIALOG_WRITE_PROGRESS); showMessageDialog(writer.getErrorMessage(), writer.wasSuccess()); } }); @@ -1302,7 +1305,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, * @param trackId The id of the track to be sent */ public void sendTrack(long trackId, final TrackFileFormat format) { - showDialogSafely(DialogManager.DIALOG_WRITE_PROGRESS); + showDialogSafely(DIALOG_WRITE_PROGRESS); final TrackWriter writer = TrackWriterFactory.newWriter(this, providerUtils, trackId, format); @@ -1314,7 +1317,7 @@ public class MyTracks extends TabActivity implements OnTouchListener, writer.setDirectory(dir); writer.setOnCompletion(new Runnable() { public void run() { - dismissDialogSafely(DialogManager.DIALOG_WRITE_PROGRESS); + dismissDialogSafely(DIALOG_WRITE_PROGRESS); if (!writer.wasSuccess()) { showMessageDialog(writer.getErrorMessage(), writer.wasSuccess()); } else { @@ -1372,9 +1375,6 @@ public class MyTracks extends TabActivity implements OnTouchListener, return accountChooser; } - /** - * @return the sendToMyMapsMapId - */ public String getSendToMyMapsMapId() { return sendToMyMapsMapId; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java b/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java index 138984430..eb7f9b2ea 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java @@ -29,6 +29,10 @@ public class TempFileCleaner { } public void clean() { + if (!Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + return; // Can't do anything now. + } cleanTmpDirectory("csv"); cleanTmpDirectory("gpx"); cleanTmpDirectory("kml"); @@ -36,13 +40,14 @@ public class TempFileCleaner { } private void cleanTmpDirectory(String name) { - if (!Environment.getExternalStorageState().equals( - Environment.MEDIA_MOUNTED)) { - return; // Can't do anything now. - } String sep = System.getProperty("file.separator"); - File dir = new File( - Environment.getExternalStorageDirectory() + sep + name + sep + "tmp"); + cleanTmpDirectory( + new File( + Environment.getExternalStorageDirectory() + sep + name + sep + + "tmp")); + } + + private void cleanTmpDirectory(File dir) { if (!dir.exists()) { return; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/StatusAnnouncerTask.java b/MyTracks/src/com/google/android/apps/mytracks/services/StatusAnnouncerTask.java index 158a978ae..537586f87 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/StatusAnnouncerTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/StatusAnnouncerTask.java @@ -27,6 +27,8 @@ import android.content.Context; import android.content.SharedPreferences; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; +import android.telephony.PhoneStateListener; +import android.telephony.TelephonyManager; import android.util.Log; import java.util.Locale; @@ -63,6 +65,26 @@ public class StatusAnnouncerTask implements PeriodicTask { */ private boolean ready = false; + /** + * Whether we're allowed to speak right now. + */ + private boolean speechAllowed; + + /** + * Listener which updates {@link #speechAllowed} when the phone state changes. + */ + private final PhoneStateListener phoneListener = new PhoneStateListener() { + @Override + public void onCallStateChanged(int state, String incomingNumber) { + speechAllowed = state == TelephonyManager.CALL_STATE_IDLE; + + if (!speechAllowed && tts.isSpeaking()) { + // If we're already speaking, stop it. + tts.stop(); + } + } + }; + /** * Constructs the announcer and start the TTS engine. */ @@ -94,8 +116,8 @@ public class StatusAnnouncerTask implements PeriodicTask { int languageAvailability = tts.isLanguageAvailable(speechLanguage); if (languageAvailability == TextToSpeech.LANG_MISSING_DATA || languageAvailability == TextToSpeech.LANG_NOT_SUPPORTED) { - // English is probably supported - // TODO: Somehow use announcement strings from English too + // English is probably supported. + // TODO: Somehow use announcement strings from English too. Log.w(MyTracksConstants.TAG, "Default language not available, using English."); speechLanguage = Locale.ENGLISH; } @@ -116,6 +138,12 @@ public class StatusAnnouncerTask implements PeriodicTask { return; } + if (!speechAllowed) { + Log.i(MyTracksConstants.TAG, + "Not making announcement - not allowed at this time"); + return; + } + if (service == null || service.getTripStatistics() == null) { Log.e(MyTracksConstants.TAG, "StatusAnnouncer stats not initialized."); return; @@ -193,12 +221,23 @@ public class StatusAnnouncerTask implements PeriodicTask { context.getString(speedLabel)); } - public void shutdown() { - tts.shutdown(); + @Override + public void start() { + // Register ourselves as a listener so we won't speak during a call. + speechAllowed = true; + TelephonyManager telephony = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); } @Override - public void start() { + public void shutdown() { + // Stop listening to phone state. + TelephonyManager telephony = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + telephony.listen(phoneListener, PhoneStateListener.LISTEN_NONE); + + tts.shutdown(); } public static int getVolumeStream() { diff --git a/MyTracksTest/.factorypath b/MyTracksTest/.factorypath index 25bd193ed..fefa9e647 100644 --- a/MyTracksTest/.factorypath +++ b/MyTracksTest/.factorypath @@ -1,4 +1,7 @@ + + + diff --git a/MyTracksTest/.settings/org.eclipse.jdt.apt.core.prefs b/MyTracksTest/.settings/org.eclipse.jdt.apt.core.prefs index 357ffd6b8..ac3541cd4 100644 --- a/MyTracksTest/.settings/org.eclipse.jdt.apt.core.prefs +++ b/MyTracksTest/.settings/org.eclipse.jdt.apt.core.prefs @@ -1,7 +1,7 @@ -#Thu Aug 12 19:30:48 BRT 2010 +#Mon Nov 01 02:42:03 BRST 2010 eclipse.preferences.version=1 org.eclipse.jdt.apt.aptEnabled=true org.eclipse.jdt.apt.genSrcDir=.apt_generated -org.eclipse.jdt.apt.processorOptions/bin_dir=MyTracksTest/bin -org.eclipse.jdt.apt.processorOptions/logfile=MyTracksTest/annotations.log +org.eclipse.jdt.apt.processorOptions/bin_dir=%PROJECT.DIR%/bin +org.eclipse.jdt.apt.processorOptions/logfile=%PROJECT.DIR%/annotations.log org.eclipse.jdt.apt.reconcileEnabled=false