From 576ea43c2102d83f56612d0564877d2ff680cb66 Mon Sep 17 00:00:00 2001 From: y20k Date: Wed, 31 May 2017 10:30:29 +0200 Subject: [PATCH] fixes a bug where the app could get stuck in a loop after a crash during recording (the latter should not occur in the first place ^o^). --- app/build.gradle | 6 ++--- .../java/org/y20k/trackbook/MainActivity.java | 22 +++++++++++++++++++ .../org/y20k/trackbook/TrackerService.java | 8 +++++-- .../y20k/trackbook/helpers/StorageHelper.java | 16 +++++++------- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6809a07..deedca2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "org.y20k.trackbook" minSdkVersion 22 targetSdkVersion 25 - versionCode 9 - versionName "1.0.2 (Astronomy Domine)" + versionCode 10 + versionName "1.0.3 (Astronomy Domine)" vectorDrawables.useSupportLibrary = true } buildTypes { @@ -26,5 +26,5 @@ dependencies { compile 'com.android.support:design:25.3.1' compile 'com.android.support:cardview-v7:25.3.1' compile 'org.osmdroid:osmdroid-android:5.6.4' - compile 'com.google.code.gson:gson:2.8.0' + compile 'com.google.code.gson:gson:2.8.1' } diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.java b/app/src/main/java/org/y20k/trackbook/MainActivity.java index ea40512..6a7be77 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.java @@ -28,6 +28,7 @@ import android.content.pm.PackageManager; import android.location.Location; import android.os.Build; import android.os.Bundle; +import android.os.Environment; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -92,6 +93,9 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // check state of External Storage + checkExternalStorageState(); + // load saved state of app loadFloatingActionButtonState(this); @@ -655,6 +659,24 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { } + /* Checks the state of External Storage */ + private void checkExternalStorageState() { + + String state = Environment.getExternalStorageState(); + if (!state.equals(Environment.MEDIA_MOUNTED)) { + LogHelper.e(LOG_TAG, "Error: Unable to mount External Storage. Current state: " + state); + + // move MainActivity to back + moveTaskToBack(true); + + // shutting down app + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(1); + } + } + + + /** * Inner class: SectionsPagerAdapter that returns a fragment corresponding to one of the tabs. * see also: https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.java b/app/src/main/java/org/y20k/trackbook/TrackerService.java index d73a0a4..a074a90 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.java +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.java @@ -129,7 +129,9 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven // ACTION STOP else if (intent.getAction().equals(ACTION_STOP) || !mLocationSystemSetting) { - stopTracking(); + if (mTrack != null) { + stopTracking(); + } // save changed state of Floating Action Button SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()); @@ -413,7 +415,9 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven mLocationSystemSetting = LocationHelper.checkLocationSystemSetting(getApplicationContext()); if (previousLocationSystemSetting != mLocationSystemSetting && !mLocationSystemSetting && mTrackerServiceRunning) { LogHelper.v(LOG_TAG, "Location Setting turned off while tracking service running."); - stopTracking(); + if (mTrack != null) { + stopTracking(); + } stopForeground(true); } } diff --git a/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java b/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java index d489fe2..d54c082 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java @@ -51,18 +51,18 @@ public class StorageHelper implements TrackbookKeys { private static final String LOG_TAG = StorageHelper.class.getSimpleName(); /* Main class variables */ - private final Context mActivity; + private final Context mContext; private File mFolder; private final File mTempFile; /* Constructor */ - public StorageHelper(Context activity) { + public StorageHelper(Context context) { // store activity - mActivity = activity; + mContext = context; // get "tracks" folder - mFolder = mActivity.getExternalFilesDir(TRACKS_DIRECTORY_NAME); + mFolder = mContext.getExternalFilesDir(TRACKS_DIRECTORY_NAME); // mFolder = getTracksDirectory(); // create "tracks" folder if necessary @@ -129,7 +129,7 @@ public class StorageHelper implements TrackbookKeys { // if write was successful delete old track files - only if not a temp file if (fileType != FILE_TEMP_TRACK) { - // include temp file if it exists + // include temp file if it exists deleteOldTracks(true); } @@ -340,9 +340,9 @@ public class StorageHelper implements TrackbookKeys { } - /* Return a write-able sub-directory from external storage */ + /* Return a write-able sub-directory from external storage */ private File getTracksDirectory() { - File[] storage = mActivity.getExternalFilesDirs(TRACKS_DIRECTORY_NAME); + File[] storage = mContext.getExternalFilesDirs(TRACKS_DIRECTORY_NAME); for (File file : storage) { if (file != null) { String state = EnvironmentCompat.getStorageState(file); @@ -352,7 +352,7 @@ public class StorageHelper implements TrackbookKeys { } } } - Toast.makeText(mActivity, R.string.toast_message_no_external_storage, Toast.LENGTH_LONG).show(); + Toast.makeText(mContext, R.string.toast_message_no_external_storage, Toast.LENGTH_LONG).show(); LogHelper.e(LOG_TAG, "Unable to access external storage."); return null;