diff --git a/MyTracks/res/drawable-hdpi/menu_feedback.png b/MyTracks/res/drawable-hdpi/menu_feedback.png
new file mode 100644
index 000000000..6725a933c
Binary files /dev/null and b/MyTracks/res/drawable-hdpi/menu_feedback.png differ
diff --git a/MyTracks/res/drawable-mdpi/menu_feedback.png b/MyTracks/res/drawable-mdpi/menu_feedback.png
new file mode 100644
index 000000000..6c701eec6
Binary files /dev/null and b/MyTracks/res/drawable-mdpi/menu_feedback.png differ
diff --git a/MyTracks/res/drawable-xhdpi/menu_feedback.png b/MyTracks/res/drawable-xhdpi/menu_feedback.png
new file mode 100644
index 000000000..8d2248e50
Binary files /dev/null and b/MyTracks/res/drawable-xhdpi/menu_feedback.png differ
diff --git a/MyTracks/res/menu/track_list.xml b/MyTracks/res/menu/track_list.xml
index 9f8034117..b95646da5 100644
--- a/MyTracks/res/menu/track_list.xml
+++ b/MyTracks/res/menu/track_list.xml
@@ -74,6 +74,10 @@ limitations under the License.
android:icon="@drawable/menu_settings"
android:id="@+id/track_list_settings"
android:title="@string/menu_settings"/>
+
-
External storage not available.
-
- External storage not writeable.
+
+ External storage not writable.
@@ -974,6 +974,12 @@ limitations under the License.
Character limit: ~20 (1 line)">
Edit
+
+ Feedback
+
+ translation_description="When backing up to the external storage, the error message.">
Unable to backup.
Top medium speed
-
+
- Resume a recording after reboot if the last recorded loation was within the last %1$s
+ Resume a recording after reboot if the last recorded location was within the last %1$s
Date (local)
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
index 2b461a545..733c6a201 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
@@ -55,17 +55,27 @@ import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtil
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.maps.mytracks.R;
+import com.google.userfeedback.android.api.UserFeedback;
+import com.google.userfeedback.android.api.UserFeedbackSpec;
import android.app.Dialog;
+import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.location.Location;
+import android.os.Binder;
import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
import android.os.Parcelable;
+import android.os.RemoteException;
import android.provider.Settings;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
@@ -87,6 +97,7 @@ import android.widget.ListView;
import android.widget.Toast;
import java.util.EnumSet;
+import java.util.List;
import java.util.Locale;
/**
@@ -607,6 +618,32 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
intent = IntentUtils.newIntent(this, SettingsActivity.class);
startActivity(intent);
return true;
+ case R.id.track_list_feedback:
+ if (isFeedbackAvailable()) {
+ intent = new Intent(Intent.ACTION_BUG_REPORT);
+ ServiceConnection conn = new ServiceConnection() {
+
+ public void onServiceDisconnected(ComponentName name) {}
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ try {
+ service.transact(Binder.FIRST_CALL_TRANSACTION, Parcel.obtain(), null, 0);
+ } catch (RemoteException e) {
+ // TODO(jshih): Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ };
+ // Bind to the service after creating it if necessary
+ bindService(intent, conn, BIND_AUTO_CREATE);
+ } else {
+ UserFeedbackSpec spec = new UserFeedbackSpec(this, "com.google.android.maps.mytracks:V *:S",
+ "com.google.android.maps.mytracks.USER_INITIATED_FEEDBACK_REPORT");
+ UserFeedback userFeedback = new UserFeedback();
+ userFeedback.startFeedback(spec);
+ }
+ return true;
case R.id.track_list_help:
intent = IntentUtils.newIntent(this, HelpActivity.class);
startActivity(intent);
@@ -616,6 +653,18 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
}
}
+ private boolean isFeedbackAvailable() {
+ List infos = getPackageManager().queryIntentServices(
+ new Intent(Intent.ACTION_BUG_REPORT), PackageManager.MATCH_DEFAULT_ONLY);
+ for (ResolveInfo info : infos) {
+ if (info.serviceInfo != null && info.serviceInfo.packageName != null
+ && info.serviceInfo.packageName.equals("com.google.android.feedback")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupAsyncTask.java
index 99b11bbcc..ce985a607 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupAsyncTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/backup/BackupAsyncTask.java
@@ -81,12 +81,12 @@ public class BackupAsyncTask extends AsyncTask {
@Override
protected Boolean doInBackground(Void... params) {
if (!FileUtils.isExternalStorageWriteable()) {
- messageId = R.string.external_storage_not_writeable;
+ messageId = R.string.external_storage_not_writable;
return false;
}
if (!externalFileBackup.isBackupsDirectoryAvailable(true)) {
- messageId = R.string.external_storage_not_writeable;
+ messageId = R.string.external_storage_not_writable;
return false;
}
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 dd4336e7e..1b0d96140 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
@@ -83,7 +83,7 @@ public class SaveActivity extends Activity {
playTrack = intent.getBooleanExtra(EXTRA_PLAY_TRACK, false);
if (!FileUtils.isExternalStorageWriteable()) {
- Toast.makeText(this, R.string.external_storage_not_writeable, Toast.LENGTH_LONG).show();
+ Toast.makeText(this, R.string.external_storage_not_writable, Toast.LENGTH_LONG).show();
finish();
return;
}
@@ -94,7 +94,7 @@ public class SaveActivity extends Activity {
File directory = new File(directoryName);
if (!FileUtils.ensureDirectoryExists(directory)) {
- Toast.makeText(this, R.string.external_storage_not_writeable, Toast.LENGTH_LONG).show();
+ Toast.makeText(this, R.string.external_storage_not_writable, Toast.LENGTH_LONG).show();
finish();
return;
}