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; }