diff --git a/build.gradle b/build.gradle index 8dbd139ea..f1058291e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,20 +17,6 @@ allprojects { } } -def getVersionCode = { -> - try { - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'rev-list', 'HEAD', '--count' - standardOutput = stdout - } - return Integer.parseInt(stdout.toString().trim()) - } - catch (ignored) { - return -1 - } -} - def getVersionName = { -> try { def stdout = new ByteArrayOutputStream() diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java index 93ba7826e..2e6006807 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java @@ -206,7 +206,7 @@ public class CustomContentProviderUtilsTest { public void testDeleteAllTracks() { // Insert track, points and waypoint at first. long trackId = System.currentTimeMillis(); - Track track = TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10); + TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10); Waypoint waypoint = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId)); contentProviderUtils.insertWaypoint(waypoint); diff --git a/src/androidTest/java/de/dennisguse/opentracks/viewmodels/AggregatedStatisticsTest.java b/src/androidTest/java/de/dennisguse/opentracks/viewmodels/AggregatedStatisticsTest.java index ad6ad369e..9b78b7652 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/viewmodels/AggregatedStatisticsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/viewmodels/AggregatedStatisticsTest.java @@ -60,7 +60,7 @@ public class AggregatedStatisticsTest { // then Assert.assertEquals(1, aggregatedStatistics.getCount()); - Assert.assertTrue(aggregatedStatistics.get(biking) != null); + Assert.assertNotNull(aggregatedStatistics.get(biking)); Assert.assertEquals(1, aggregatedStatistics.get(biking).getCountTracks()); TrackStatistics statistics2 = aggregatedStatistics.get(biking).getTrackStatistics(); @@ -82,7 +82,7 @@ public class AggregatedStatisticsTest { aggregatedStatistics.aggregate(track); // then - Assert.assertTrue(aggregatedStatistics.get(mountainBiking) != null); + Assert.assertNotNull(aggregatedStatistics.get(mountainBiking)); } @Test @@ -99,7 +99,7 @@ public class AggregatedStatisticsTest { aggregatedStatistics.aggregate(track); // then - Assert.assertTrue(aggregatedStatistics.get(trailRunning) != null); + Assert.assertNotNull(aggregatedStatistics.get(trailRunning)); } @Test @@ -121,7 +121,7 @@ public class AggregatedStatisticsTest { // then Assert.assertEquals(1, aggregatedStatistics.getCount()); - Assert.assertTrue(aggregatedStatistics.get(biking) != null); + Assert.assertNotNull(aggregatedStatistics.get(biking)); Assert.assertEquals(2, aggregatedStatistics.get(biking).getCountTracks()); TrackStatistics statistics2 = aggregatedStatistics.get(biking).getTrackStatistics(); @@ -153,9 +153,9 @@ public class AggregatedStatisticsTest { // then Assert.assertEquals(3, aggregatedStatistics.getCount()); - Assert.assertTrue(aggregatedStatistics.get(biking) != null); - Assert.assertTrue(aggregatedStatistics.get(running) != null); - Assert.assertTrue(aggregatedStatistics.get(walking) != null); + Assert.assertNotNull(aggregatedStatistics.get(biking)); + Assert.assertNotNull(aggregatedStatistics.get(running)); + Assert.assertNotNull(aggregatedStatistics.get(walking)); Assert.assertEquals(1, aggregatedStatistics.get(biking).getCountTracks()); Assert.assertEquals(1, aggregatedStatistics.get(running).getCountTracks()); Assert.assertEquals(1, aggregatedStatistics.get(walking).getCountTracks()); @@ -215,10 +215,10 @@ public class AggregatedStatisticsTest { Assert.assertEquals(4, aggregatedStatistics.getCount()); // There is a map for every sport. - Assert.assertTrue(aggregatedStatistics.get(biking) != null); - Assert.assertTrue(aggregatedStatistics.get(running) != null); - Assert.assertTrue(aggregatedStatistics.get(walking) != null); - Assert.assertTrue(aggregatedStatistics.get(driving) != null); + Assert.assertNotNull(aggregatedStatistics.get(biking)); + Assert.assertNotNull(aggregatedStatistics.get(running)); + Assert.assertNotNull(aggregatedStatistics.get(walking)); + Assert.assertNotNull(aggregatedStatistics.get(driving)); // Number of tracks by sport. Assert.assertEquals(5, aggregatedStatistics.get(biking).getCountTracks()); // Biking. diff --git a/src/main/java/de/dennisguse/opentracks/AggregatedStatisticsActivity.java b/src/main/java/de/dennisguse/opentracks/AggregatedStatisticsActivity.java index 849e8817d..6a17466c6 100644 --- a/src/main/java/de/dennisguse/opentracks/AggregatedStatisticsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/AggregatedStatisticsActivity.java @@ -3,11 +3,9 @@ package de.dennisguse.opentracks; import android.os.Bundle; import android.widget.ListView; -import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import de.dennisguse.opentracks.adapters.AggregatedStatisticsAdapter; -import de.dennisguse.opentracks.viewmodels.AggregatedStatistics; import de.dennisguse.opentracks.viewmodels.AggregatedStatisticsModel; public class AggregatedStatisticsActivity extends AbstractActivity { diff --git a/src/main/java/de/dennisguse/opentracks/MarkerDetailActivity.java b/src/main/java/de/dennisguse/opentracks/MarkerDetailActivity.java index 155aab707..bb24dce9e 100644 --- a/src/main/java/de/dennisguse/opentracks/MarkerDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/MarkerDetailActivity.java @@ -120,7 +120,7 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark private class MarkerDetailPagerAdapter extends FragmentStatePagerAdapter { MarkerDetailPagerAdapter(FragmentManager fragmentManager) { - super(fragmentManager); + super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java index b585e5fc5..8992e91ba 100644 --- a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java @@ -26,8 +26,6 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import androidx.annotation.NonNull; @@ -82,7 +80,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker recordingTrackPaused = PreferencesUtils.isRecordingTrackPaused(MarkerListActivity.this); } if (key != null) { - runOnUiThread(() -> MarkerListActivity.this.invalidateOptionsMenu()); + runOnUiThread(MarkerListActivity.this::invalidateOptionsMenu); } } }; @@ -129,13 +127,10 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker listView = findViewById(R.id.marker_list); listView.setEmptyView(findViewById(R.id.marker_list_empty)); - listView.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent intent = IntentUtils.newIntent(MarkerListActivity.this, MarkerDetailActivity.class) - .putExtra(MarkerDetailActivity.EXTRA_MARKER_ID, id); - startActivity(intent); - } + listView.setOnItemClickListener((parent, view, position, id) -> { + Intent intent = IntentUtils.newIntent(MarkerListActivity.this, MarkerDetailActivity.class) + .putExtra(MarkerDetailActivity.EXTRA_MARKER_ID, id); + startActivity(intent); }); resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) { @Override @@ -272,8 +267,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker DeleteMarkerDialogFragment.showDialog(getSupportFragmentManager(), markerIds); return true; case R.id.list_context_menu_select_all: - int size = listView.getCount(); - for (int i = 0; i < size; i++) { + for (int i = 0; i < listView.getCount(); i++) { listView.setItemChecked(i, true); } return false; diff --git a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java index 6b0b8a2c9..6a8d798ab 100644 --- a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java @@ -26,8 +26,6 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; @@ -203,20 +201,17 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa ListView listView = findViewById(R.id.search_list); listView.setAdapter(arrayAdapter); listView.setEmptyView(findViewById(R.id.search_list_empty)); - listView.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Map item = arrayAdapter.getItem(position); - Long trackId = (Long) item.get(TRACK_ID_FIELD); - Long markerId = (Long) item.get(MARKER_ID_FIELD); - Intent intent = IntentUtils.newIntent(SearchListActivity.this, TrackRecordedActivity.class); - if (markerId != null) { - intent = intent.putExtra(TrackRecordedActivity.EXTRA_MARKER_ID, markerId); - } else { - intent = intent.putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, trackId); - } - startActivity(intent); + listView.setOnItemClickListener((parent, view, position, id) -> { + Map item = arrayAdapter.getItem(position); + Long trackId = (Long) item.get(TRACK_ID_FIELD); + Long markerId = (Long) item.get(MARKER_ID_FIELD); + Intent intent = IntentUtils.newIntent(SearchListActivity.this, TrackRecordedActivity.class); + if (markerId != null) { + intent = intent.putExtra(TrackRecordedActivity.EXTRA_MARKER_ID, markerId); + } else { + intent = intent.putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, trackId); } + startActivity(intent); }); ActivityUtils.configureListViewContextualMenu(listView, contextualActionModeCallback); handleIntent(getIntent()); diff --git a/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java b/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java index 2037960bc..7b92ab6b4 100644 --- a/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java +++ b/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java @@ -18,7 +18,7 @@ import de.dennisguse.opentracks.util.IntentDashboardUtils; */ public abstract class ShowOnMapProxyActivity extends AppCompatActivity { - private TrackFileFormat trackFileFormat; + private final TrackFileFormat trackFileFormat; protected ShowOnMapProxyActivity(TrackFileFormat trackFileFormat) { this.trackFileFormat = trackFileFormat; diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index 4b49a086f..00588303d 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -21,7 +21,6 @@ import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; @@ -89,20 +88,12 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.activity_types, android.R.layout.simple_dropdown_item_1line); activityType.setAdapter(adapter); - activityType.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { + activityType.setOnItemClickListener((parent, view, position, id) -> setActivityTypeIcon(TrackIconUtils.getIconValue( + TrackEditActivity.this, (String) activityType.getAdapter().getItem(position)))); + activityType.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { setActivityTypeIcon(TrackIconUtils.getIconValue( - TrackEditActivity.this, (String) activityType.getAdapter().getItem(position))); - } - }); - activityType.setOnFocusChangeListener(new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (!hasFocus) { - setActivityTypeIcon(TrackIconUtils.getIconValue( - TrackEditActivity.this, activityType.getText().toString())); - } + TrackEditActivity.this, activityType.getText().toString())); } }); @@ -116,37 +107,28 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit activityTypeIcon = findViewById(R.id.track_edit_activity_type_icon); activityTypeIcon.setAdapter(TrackIconUtils.getIconSpinnerAdapter(this, iconValue)); - activityTypeIcon.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), activityType.getText().toString()); - } - return true; + activityTypeIcon.setOnTouchListener((v, event) -> { + if (event.getAction() == MotionEvent.ACTION_UP) { + ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), activityType.getText().toString()); } + return true; }); - activityTypeIcon.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { - ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), activityType.getText().toString()); - } - return true; + activityTypeIcon.setOnKeyListener((v, keyCode, event) -> { + if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { + ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), activityType.getText().toString()); } + return true; }); description = findViewById(R.id.track_edit_description); description.setText(track.getDescription()); Button saveButton = findViewById(R.id.track_edit_save); - saveButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - TrackUtils.updateTrack(TrackEditActivity.this, track, nameEditText.getText().toString(), - activityType.getText().toString(), description.getText().toString(), - contentProviderUtils); - finish(); - } + saveButton.setOnClickListener(v -> { + TrackUtils.updateTrack(TrackEditActivity.this, track, nameEditText.getText().toString(), + activityType.getText().toString(), description.getText().toString(), + contentProviderUtils); + finish(); }); Button cancel = findViewById(R.id.track_edit_cancel); @@ -155,12 +137,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit cancel.setVisibility(View.GONE); } else { setTitle(R.string.menu_edit); - cancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); + cancel.setOnClickListener(v -> finish()); cancel.setVisibility(View.VISIBLE); } } diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index c8df7a818..cb505093e 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -33,8 +33,6 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.Toast; @@ -229,31 +227,23 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe // Show trackController when search dialog is dismissed SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); if (searchManager != null) { - searchManager.setOnDismissListener(new SearchManager.OnDismissListener() { - @Override - public void onDismiss() { - trackController.show(); - } - }); + searchManager.setOnDismissListener(() -> trackController.show()); } listView = findViewById(R.id.track_list); listView.setEmptyView(findViewById(R.id.track_list_empty_view)); - listView.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long trackId) { - Intent newIntent; - if (trackId == recordingTrackId) { - // Is recording -> open record activity. - newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class) - .putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, trackId); - } else { - // Not recording -> open detail activity. - newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordedActivity.class) - .putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, trackId); - } - startActivity(newIntent); + listView.setOnItemClickListener((parent, view, position, trackId) -> { + Intent newIntent; + if (trackId == recordingTrackId) { + // Is recording -> open record activity. + newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordingActivity.class) + .putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, trackId); + } else { + // Not recording -> open detail activity. + newIntent = IntentUtils.newIntent(TrackListActivity.this, TrackRecordedActivity.class) + .putExtra(TrackRecordedActivity.EXTRA_TRACK_ID, trackId); } + startActivity(newIntent); }); resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) { diff --git a/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java index 05edd1f74..b15a9980c 100644 --- a/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java @@ -17,8 +17,8 @@ import de.dennisguse.opentracks.viewmodels.AggregatedStatistics; public class AggregatedStatisticsAdapter extends BaseAdapter { - private AggregatedStatistics aggregatedStatistics; - private Context context; + private final AggregatedStatistics aggregatedStatistics; + private final Context context; public AggregatedStatisticsAdapter(Context context, AggregatedStatistics aggregatedStatistics) { this.context = context; @@ -85,12 +85,9 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { protected boolean metricsUnits; protected boolean reportSpeed; - public ViewHolder() { - metricsUnits = PreferencesUtils.isMetricUnits(context); - } - public void setValues(View view, int iconDrawable, String name, AggregatedStatistics.AggregatedStatistic aggregatedStats) { reportSpeed = PreferencesUtils.isReportSpeed(context, name); + metricsUnits = PreferencesUtils.isMetricUnits(context); sportIcon = view.findViewById(R.id.aggregated_stats_sport_icon); typeLabel = view.findViewById(R.id.aggregated_stats_type_label); diff --git a/src/main/java/de/dennisguse/opentracks/content/SearchEngine.java b/src/main/java/de/dennisguse/opentracks/content/SearchEngine.java index 0d9969e55..54c91bdab 100644 --- a/src/main/java/de/dennisguse/opentracks/content/SearchEngine.java +++ b/src/main/java/de/dennisguse/opentracks/content/SearchEngine.java @@ -108,28 +108,25 @@ public class SearchEngine { /** * Comparator for scored results. */ - private static final Comparator SCORED_RESULT_COMPARATOR = new Comparator() { - @Override - public int compare(ScoredResult r1, ScoredResult r2) { - // Score ordering. - int scoreDiff = Double.compare(r2.score, r1.score); - if (scoreDiff != 0) { - return scoreDiff; - } - - // Make tracks come before waypoints. - if (r1.waypoint != null && r2.track != null) { - return 1; - } else if (r1.track != null && r2.waypoint != null) { - return -1; - } - - // Finally, use arbitrary ordering, by ID. - long id1 = r1.track != null ? r1.track.getId() : r1.waypoint.getId(); - long id2 = r2.track != null ? r2.track.getId() : r2.waypoint.getId(); - long idDiff = id2 - id1; - return Long.signum(idDiff); + private static final Comparator SCORED_RESULT_COMPARATOR = (r1, r2) -> { + // Score ordering. + int scoreDiff = Double.compare(r2.score, r1.score); + if (scoreDiff != 0) { + return scoreDiff; } + + // Make tracks come before waypoints. + if (r1.waypoint != null && r2.track != null) { + return 1; + } else if (r1.track != null && r2.waypoint != null) { + return -1; + } + + // Finally, use arbitrary ordering, by ID. + long id1 = r1.track != null ? r1.track.getId() : r1.waypoint.getId(); + long id2 = r2.track != null ? r2.track.getId() : r2.waypoint.getId(); + long idDiff = id2 - id1; + return Long.signum(idDiff); }; private final ContentProviderUtils providerUtils; diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/ShareContentProvider.java b/src/main/java/de/dennisguse/opentracks/content/provider/ShareContentProvider.java index 62031c508..5e8bdb842 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/ShareContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/ShareContentProvider.java @@ -6,7 +6,6 @@ import android.content.pm.ProviderInfo; import android.database.Cursor; import android.database.MatrixCursor; import android.net.Uri; -import android.os.Bundle; import android.os.ParcelFileDescriptor; import android.provider.OpenableColumns; import android.util.Log; @@ -211,14 +210,11 @@ public class ShareContentProvider extends CustomContentProvider implements ICont final TrackExporter trackExporter = getTrackFileFormat(uri).newTrackExporter(getContext(), tracks); - PipeDataWriter pipeDataWriter = new PipeDataWriter() { - @Override - public void writeDataToPipe(@NonNull ParcelFileDescriptor output, @NonNull Uri uri, @NonNull String mimeType, @Nullable Bundle opts, @Nullable String args) { - try (FileOutputStream fileOutputStream = new FileOutputStream(output.getFileDescriptor())) { - trackExporter.writeTrack(getContext(), fileOutputStream); - } catch (IOException e) { - Log.w(TAG, "there occurred an error while sharing a file: " + e); - } + PipeDataWriter pipeDataWriter = (PipeDataWriter) (output, uri1, mimeType, opts, args) -> { + try (FileOutputStream fileOutputStream = new FileOutputStream(output.getFileDescriptor())) { + trackExporter.writeTrack(getContext(), fileOutputStream); + } catch (IOException e) { + Log.w(TAG, "there occurred an error while sharing a file: " + e); } }; diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/TrackPointIterator.java b/src/main/java/de/dennisguse/opentracks/content/provider/TrackPointIterator.java index d944ae6ce..dfd7cea09 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/TrackPointIterator.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/TrackPointIterator.java @@ -100,13 +100,4 @@ public class TrackPointIterator implements Iterator, AutoCloseable { public void remove() { throw new UnsupportedOperationException(); } - - public int getCount() { - if (cursor == null) { - return -1; - } - - return cursor.getCount(); - } - } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java index b073df96e..494414355 100644 --- a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java +++ b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java @@ -6,10 +6,10 @@ import de.dennisguse.opentracks.services.sensors.BluetoothRemoteSensorManager; public class SensorData { - private String sensorAddress; - private String sensorName; + private final String sensorAddress; + private final String sensorName; - private long timestamp_ms; + private final long timestamp_ms; SensorData(String sensorAddress, String sensorName) { this(sensorAddress, sensorName, System.currentTimeMillis()); diff --git a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java index dd3560e1f..b1a57e018 100644 --- a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java +++ b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataCycling.java @@ -25,8 +25,8 @@ public final class SensorDataCycling { public static class Cadence extends SensorData { - private long crankRevolutionsCount; // UINT32 - private int crankRevolutionsTime; // UINT16; 1/1024s + private final long crankRevolutionsCount; // UINT32 + private final int crankRevolutionsTime; // UINT16; 1/1024s private float cadence_rpm = INVALID_VALUE_FLOAT; public Cadence(String sensorAddress, String sensorName, long crankRevolutionsCount, int crankRevolutionsTime) { @@ -93,8 +93,8 @@ public final class SensorDataCycling { public static class Speed extends SensorData { - private int wheelRevolutionsCount; // UINT16 - private int wheelRevolutionsTime; // UINT16; 1/1024s + private final int wheelRevolutionsCount; // UINT16 + private final int wheelRevolutionsTime; // UINT16; 1/1024s private float speed_mps = INVALID_VALUE_FLOAT; public Speed(String sensorAddress, String sensorName, int wheelRevolutionsCount, int wheelRevolutionsTime) { @@ -154,8 +154,8 @@ public final class SensorDataCycling { public static class CadenceAndSpeed extends SensorData { - private Cadence cadence; - private Speed speed; + private final Cadence cadence; + private final Speed speed; public CadenceAndSpeed(String sensorAddress, String sensorName, @NonNull Cadence cadence, @NonNull Speed speed) { super(sensorAddress, sensorName); diff --git a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataHeartRate.java b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataHeartRate.java index c42c13f39..0ba0232d4 100644 --- a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataHeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataHeartRate.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; public class SensorDataHeartRate extends SensorData { - private float heartRate_bpm; + private final float heartRate_bpm; public SensorDataHeartRate(String name, String address, float heartRate_bpm) { super(name, address); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/DeleteMarkerDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/DeleteMarkerDialogFragment.java index f0e19dad7..47c352a3b 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/DeleteMarkerDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/DeleteMarkerDialogFragment.java @@ -18,7 +18,6 @@ package de.dennisguse.opentracks.fragments; import android.app.Dialog; import android.content.Context; -import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.NonNull; @@ -77,18 +76,13 @@ public class DeleteMarkerDialogFragment extends DialogFragment { messageId = markerIds.length > 1 ? R.string.marker_delete_multiple_confirm_message : R.string.marker_delete_one_confirm_message; } return DialogUtils.createConfirmationDialog( - fragmentActivity, titleId, getString(messageId), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - new Thread(() -> { - ContentProviderUtils contentProviderUtils = new ContentProviderUtils(fragmentActivity); - for (long markerId : markerIds) { - contentProviderUtils.deleteWaypoint(getContext(), markerId); - } - caller.onDeleteMarkerDone(); - }).start(); + fragmentActivity, titleId, getString(messageId), (dialog, which) -> new Thread(() -> { + ContentProviderUtils contentProviderUtils = new ContentProviderUtils(fragmentActivity); + for (long markerId : markerIds) { + contentProviderUtils.deleteWaypoint(getContext(), markerId); } - }); + caller.onDeleteMarkerDone(); + }).start()); } /** diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ExportProgressDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ExportProgressDialogFragment.java index ddaf9bde5..e2a79ac3d 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ExportProgressDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ExportProgressDialogFragment.java @@ -166,9 +166,9 @@ public class ExportProgressDialogFragment extends DialogFragment { private class ExportThread extends Thread { - private TrackFileFormat trackFileFormat; + private final TrackFileFormat trackFileFormat; - private DocumentFile directory; + private final DocumentFile directory; ExportThread(TrackFileFormat trackFileFormat, DocumentFile directory) { this.directory = directory; diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ImportProgressDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ImportProgressDialogFragment.java index 9f0dbf7cf..346c6f15a 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ImportProgressDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ImportProgressDialogFragment.java @@ -166,7 +166,7 @@ public class ImportProgressDialogFragment extends DialogFragment { private class ImportThread extends Thread { - private DocumentFile file; + private final DocumentFile file; ImportThread(DocumentFile file) { this.file = file; diff --git a/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java index 67edea9ee..941f000bb 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java @@ -109,7 +109,7 @@ public class MarkerDetailFragment extends Fragment { long markerId = getArguments().getLong(KEY_MARKER_ID); if (markerId == -1L) { Log.d(TAG, "invalid marker id"); - getFragmentManager().popBackStack(); + getParentFragmentManager().popBackStack(); return; } contentProviderUtils = new ContentProviderUtils(getActivity()); @@ -125,16 +125,13 @@ public class MarkerDetailFragment extends Fragment { textGradient = view.findViewById(R.id.marker_detail_waypoint_text_gradient); waypointInfo = view.findViewById(R.id.marker_detail_waypoint_info); - photoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - handler.removeCallbacks(hideText); - int visibility = waypointInfo.getVisibility() == View.GONE ? View.VISIBLE : View.GONE; - textGradient.setVisibility(visibility); - waypointInfo.setVisibility(visibility); - if (visibility == View.VISIBLE) { - handler.postDelayed(hideText, HIDE_TEXT_DELAY); - } + photoView.setOnClickListener(v -> { + handler.removeCallbacks(hideText); + int visibility = waypointInfo.getVisibility() == View.GONE ? View.VISIBLE : View.GONE; + textGradient.setVisibility(visibility); + waypointInfo.setVisibility(visibility); + if (visibility == View.VISIBLE) { + handler.postDelayed(hideText, HIDE_TEXT_DELAY); } }); return view; @@ -222,7 +219,7 @@ public class MarkerDetailFragment extends Fragment { waypoint = contentProviderUtils.getWaypoint(getArguments().getLong(KEY_MARKER_ID)); if (waypoint == null) { Log.d(TAG, "waypoint is null"); - getFragmentManager().popBackStack(); + getParentFragmentManager().popBackStack(); } } } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index 4d11df999..334b102a2 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -54,17 +54,14 @@ public class StatisticsRecordedFragment extends Fragment implements TrackDataLis private TrackStatistics trackStatistics = null; private String category = ""; - private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { - if (isResumed()) { - getActivity().runOnUiThread(() -> { - if (isResumed()) { - updateUI(); - } - }); - } + private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (preferences, key) -> { + if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { + if (isResumed()) { + getActivity().runOnUiThread(() -> { + if (isResumed()) { + updateUI(); + } + }); } } }; @@ -124,23 +121,17 @@ public class StatisticsRecordedFragment extends Fragment implements TrackDataLis Spinner activityTypeIcon = getView().findViewById(R.id.stats_activity_type_icon); activityTypeIcon.setAdapter(TrackIconUtils.getIconSpinnerAdapter(getActivity(), "")); - activityTypeIcon.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - ((TrackRecordedActivity) getActivity()).chooseActivityType(category); - } - return true; + activityTypeIcon.setOnTouchListener((v, event) -> { + if (event.getAction() == MotionEvent.ACTION_UP) { + ((TrackRecordedActivity) getActivity()).chooseActivityType(category); } + return true; }); - activityTypeIcon.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { - ((TrackRecordedActivity) getActivity()).chooseActivityType(category); - } - return true; + activityTypeIcon.setOnKeyListener((v, keyCode, event) -> { + if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { + ((TrackRecordedActivity) getActivity()).chooseActivityType(category); } + return true; }); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index 5cdcc55b7..4294f9ff5 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -203,23 +203,17 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi Spinner activityTypeIcon = getView().findViewById(R.id.stats_activity_type_icon); activityTypeIcon.setAdapter(TrackIconUtils.getIconSpinnerAdapter(getActivity(), "")); - activityTypeIcon.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - ((TrackRecordingActivity) getActivity()).chooseActivityType(category); - } - return true; + activityTypeIcon.setOnTouchListener((v, event) -> { + if (event.getAction() == MotionEvent.ACTION_UP) { + ((TrackRecordingActivity) getActivity()).chooseActivityType(category); } + return true; }); - activityTypeIcon.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { - ((TrackRecordingActivity) getActivity()).chooseActivityType(category); - } - return true; + activityTypeIcon.setOnKeyListener((v, keyCode, event) -> { + if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { + ((TrackRecordingActivity) getActivity()).chooseActivityType(category); } + return true; }); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java index 67386e03f..e8e143414 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java @@ -63,9 +63,7 @@ public class ExportActivity extends FragmentActivity implements ExportProgressDi @Override public void onExportFinished(final String directoryDisplayName, final int successCount, final int fileCount) { - runOnUiThread(() -> { - ExportFinishedDialogFragment.showDialog(getSupportFragmentManager(), directoryDisplayName, successCount, fileCount); - }); + runOnUiThread(() -> ExportFinishedDialogFragment.showDialog(getSupportFragmentManager(), directoryDisplayName, successCount, fileCount)); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java index 46f82ee34..002037283 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java @@ -449,7 +449,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track float speedValue; if (speed != null) { try { - speedValue = Float.valueOf(speed); + speedValue = Float.parseFloat(speed); trackPoint.setSpeed(speedValue); } catch (Exception e) { throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse speed: %s", speed)), e); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java index 4663845d2..e43e1d133 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java @@ -64,9 +64,7 @@ public class ImportActivity extends FragmentActivity implements ImportProgressDi @Override public void onImportFinished(final String directoryDisplayName, final int successCount, final int fileCount) { - runOnUiThread(() -> { - ImportFinishedDialogFragment.showDialog(getSupportFragmentManager(), directoryDisplayName, successCount, fileCount); - }); + runOnUiThread(() -> ImportFinishedDialogFragment.showDialog(getSupportFragmentManager(), directoryDisplayName, successCount, fileCount)); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmzTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmzTrackImporter.java index c400e4eab..3d8e8545a 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmzTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmzTrackImporter.java @@ -53,7 +53,7 @@ public class KmzTrackImporter implements TrackImporter { private final Context context; private final long importTrackId; - private Uri uriKmzFile; + private final Uri uriKmzFile; /** * @param context the context diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java b/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java index 34839cc59..65b9212ab 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java @@ -8,8 +8,8 @@ import de.dennisguse.opentracks.content.data.TrackPoint; public class HandlerServer { private String TAG = HandlerServer.class.getSimpleName(); - private LocationHandler locationHandler; - private HandlerServerInterface service; + private final LocationHandler locationHandler; + private final HandlerServerInterface service; public HandlerServer(HandlerServerInterface service) { this.locationHandler = new LocationHandler(this); diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java index 25153990d..583ee066f 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java @@ -19,10 +19,10 @@ import de.dennisguse.opentracks.util.UnitConversions; class LocationHandler implements HandlerServer.Handler, LocationListener { - private String TAG = LocationHandler.class.getSimpleName(); + private final String TAG = LocationHandler.class.getSimpleName(); private LocationManager locationManager; - private HandlerServer handlerServer; + private final HandlerServer handlerServer; private LocationListenerPolicy locationListenerPolicy; private long currentRecordingInterval; private int recordingGpsAccuracy; diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java index 695948c98..75b2f2c91 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java @@ -19,7 +19,6 @@ package de.dennisguse.opentracks.services.tasks; import android.content.Context; import android.media.AudioManager; import android.speech.tts.TextToSpeech; -import android.speech.tts.TextToSpeech.OnInitListener; import android.speech.tts.UtteranceProgressListener; import android.util.Log; @@ -50,7 +49,7 @@ public class AnnouncementPeriodicTask implements PeriodicTask { private final AudioManager audioManager; - private ContentProviderUtils contentProviderUtils; + private final ContentProviderUtils contentProviderUtils; private final AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() { @Override @@ -116,12 +115,9 @@ public class AnnouncementPeriodicTask implements PeriodicTask { Log.d(TAG, "Start"); if (tts == null) { - tts = new TextToSpeech(context, new OnInitListener() { - @Override - public void onInit(int status) { - Log.i(TAG, "TextToSpeech initialized with status " + status); - ttsInitStatus = status; - } + tts = new TextToSpeech(context, status -> { + Log.i(TAG, "TextToSpeech initialized with status " + status); + ttsInitStatus = status; }); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index 918d9972c..e1e0f46a6 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -22,7 +22,6 @@ import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Spinner; @@ -51,12 +50,7 @@ public class ActivityTypePreference extends DialogPreference { setDialogIcon(null); setPersistent(true); - SummaryProvider summaryProvider = new SummaryProvider() { - @Override - public CharSequence provideSummary(DialogPreference preference) { - return PreferencesUtils.getDefaultActivity(ActivityTypePreference.this.getContext()); - } - }; + SummaryProvider summaryProvider = preference -> PreferencesUtils.getDefaultActivity(ActivityTypePreference.this.getContext()); setSummaryProvider(summaryProvider); } @@ -90,43 +84,31 @@ public class ActivityTypePreference extends DialogPreference { textView.setText(category); ArrayAdapter adapter = ArrayAdapter.createFromResource(context, R.array.activity_types, android.R.layout.simple_dropdown_item_1line); textView.setAdapter(adapter); - textView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View v, int position, long id) { - String iconValue = TrackIconUtils.getIconValue(context, (String) textView.getAdapter().getItem(position)); - TrackIconUtils.setIconSpinner(spinner, iconValue); - } + textView.setOnItemClickListener((parent, v, position, id) -> { + String iconValue = TrackIconUtils.getIconValue(context, (String) textView.getAdapter().getItem(position)); + TrackIconUtils.setIconSpinner(spinner, iconValue); }); - textView.setOnFocusChangeListener(new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (!hasFocus) { - String iconValue = TrackIconUtils.getIconValue(context, textView.getText().toString()); - TrackIconUtils.setIconSpinner(spinner, iconValue); - } + textView.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { + String iconValue = TrackIconUtils.getIconValue(context, textView.getText().toString()); + TrackIconUtils.setIconSpinner(spinner, iconValue); } }); String iconValue = TrackIconUtils.getIconValue(context, category); spinner = view.findViewById(R.id.activity_type_preference_spinner); spinner.setAdapter(TrackIconUtils.getIconSpinnerAdapter(context, iconValue)); - spinner.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - showIconSelectDialog(); - } - return true; + spinner.setOnTouchListener((v, event) -> { + if (event.getAction() == MotionEvent.ACTION_UP) { + showIconSelectDialog(); } + return true; }); - spinner.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { - showIconSelectDialog(); - } - return true; + spinner.setOnKeyListener((v, keyCode, event) -> { + if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { + showIconSelectDialog(); } + return true; }); } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index d17245e22..17b9786f1 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -56,15 +56,12 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit public static class PrefsFragment extends PreferenceFragmentCompat { - private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (PreferencesUtils.isKey(getActivity(), R.string.recording_track_id_key, key)) { - getActivity().runOnUiThread(() -> updateReset()); - } - if (PreferencesUtils.isKey(getActivity(), R.string.stats_units_key, key)) { - getActivity().runOnUiThread(() -> updateUnits()); - } + private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (preferences, key) -> { + if (PreferencesUtils.isKey(getActivity(), R.string.recording_track_id_key, key)) { + getActivity().runOnUiThread(this::updateReset); + } + if (PreferencesUtils.isKey(getActivity(), R.string.stats_units_key, key)) { + getActivity().runOnUiThread(this::updateUnits); } }; @@ -117,7 +114,7 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit if (dialogFragment != null) { dialogFragment.setTargetFragment(this, 0); - dialogFragment.show(getFragmentManager(), getClass().getSimpleName()); + dialogFragment.show(getParentFragmentManager(), getClass().getSimpleName()); return; } diff --git a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java index 99a5eeed8..3a34d8eaa 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java @@ -183,14 +183,11 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { super.onPrepareDialogBuilder(builder); builder.setSingleChoiceItems(listAdapter, selectedEntryIndex, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - selectedEntryIndex = which; + (dialog, which) -> { + selectedEntryIndex = which; - BluetoothLeSensorPreferenceDialog.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE); - dialog.dismiss(); - } + BluetoothLeSensorPreferenceDialog.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE); + dialog.dismiss(); }); builder.setIcon(android.R.drawable.stat_sys_data_bluetooth); builder.setPositiveButton(null, null); diff --git a/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java index 4fa6b080c..21d015ee4 100644 --- a/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java @@ -9,7 +9,6 @@ import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.widget.AbsListView; import android.widget.ListView; @@ -94,17 +93,13 @@ public class ActivityUtils { } searchView.setQueryRefinementEnabled(true); searchView.setSubmitButtonEnabled(true); - searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { - - @Override - public void onFocusChange(View v, boolean hasFocus) { - // Hide and show trackController when searchable widget has focus/no focus - if (trackController != null) { - if (hasFocus) { - trackController.hide(); - } else { - trackController.show(); - } + searchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> { + // Hide and show trackController when searchable widget has focus/no focus + if (trackController != null) { + if (hasFocus) { + trackController.hide(); + } else { + trackController.show(); } } }); diff --git a/src/main/java/de/dennisguse/opentracks/util/FileUtils.java b/src/main/java/de/dennisguse/opentracks/util/FileUtils.java index e6d63e0b1..56edf48dd 100644 --- a/src/main/java/de/dennisguse/opentracks/util/FileUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/FileUtils.java @@ -48,8 +48,6 @@ public class FileUtils { */ static final String FILEPROVIDER = BuildConfig.APPLICATION_ID + ".fileprovider"; - public static final String EXPORT_DIR = "OpenTracks"; - private static final String JPEG_EXTENSION = "jpeg"; /** diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java index e63b212ac..65378c8a7 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java @@ -27,9 +27,9 @@ public class IntentDashboardUtils { private static final String EXTRAS_SHOULD_KEEP_SCREEN_ON = "EXTRAS_SHOULD_KEEP_SCREEN_ON"; private static final String EXTRAS_SHOW_WHEN_LOCKED = "EXTRAS_SHOULD_KEEP_SCREEN_ON"; - private static int TRACK_URI_INDEX = 0; - private static int TRACKPOINTS_URI_INDEX = 1; - private static int WAYPOINTS_URI_INDEX = 2; + private static final int TRACK_URI_INDEX = 0; + private static final int TRACKPOINTS_URI_INDEX = 1; + private static final int WAYPOINTS_URI_INDEX = 2; private IntentDashboardUtils() { } diff --git a/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java b/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java index 0af626957..bcb9fc0ba 100644 --- a/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java @@ -16,13 +16,6 @@ package de.dennisguse.opentracks.util; import android.location.Location; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; -import java.util.Stack; - -import de.dennisguse.opentracks.content.data.TrackPoint; /** * Utility class for decimating tracks at a given level of precision. @@ -39,112 +32,6 @@ public class LocationUtils { private LocationUtils() { } - /** - * Computes the distance on the two sphere between the point c0 and the line segment c1 to c2. - * - * @param c0 the first coordinate - * @param c1 the beginning of the line segment - * @param c2 the end of the lone segment - * @return the distance in m (assuming spherical earth) - */ - private static double distance(final Location c0, final Location c1, final Location c2) { - if (c1.equals(c2)) { - return c2.distanceTo(c0); - } - - final double s0lat = c0.getLatitude() * UnitConversions.DEG_TO_RAD; - final double s0lng = c0.getLongitude() * UnitConversions.DEG_TO_RAD; - final double s1lat = c1.getLatitude() * UnitConversions.DEG_TO_RAD; - final double s1lng = c1.getLongitude() * UnitConversions.DEG_TO_RAD; - final double s2lat = c2.getLatitude() * UnitConversions.DEG_TO_RAD; - final double s2lng = c2.getLongitude() * UnitConversions.DEG_TO_RAD; - - double s2s1lat = s2lat - s1lat; - double s2s1lng = s2lng - s1lng; - final double u = ((s0lat - s1lat) * s2s1lat + (s0lng - s1lng) * s2s1lng) - / (s2s1lat * s2s1lat + s2s1lng * s2s1lng); - - if (u <= 0) { - return c0.distanceTo(c1); - } - - if (u >= 1) { - return c0.distanceTo(c2); - } - - Location sa = new Location(""); - sa.setLatitude(c0.getLatitude() - c1.getLatitude()); - sa.setLongitude(c0.getLongitude() - c1.getLongitude()); - - Location sb = new Location(""); - sb.setLatitude(u * (c2.getLatitude() - c1.getLatitude())); - sb.setLongitude(u * (c2.getLongitude() - c1.getLongitude())); - - return sa.distanceTo(sb); - } - - /** - * Decimates the given trackPoints for a given zoom level. - * This uses a Douglas-Peucker decimation algorithm. - * - * @param tolerance in meters - * @param trackPoints input - */ - //TODO What was it used for? Sharing data with other apps? - private static List decimate(double tolerance, List trackPoints) { - List decimated = new ArrayList<>(); - final int n = trackPoints.size(); - if (n < 1) { - return null; - } - int idx; - int maxIdx = 0; - Stack stack = new Stack<>(); - double[] dists = new double[n]; - dists[0] = 1; - dists[n - 1] = 1; - double maxDist; - double dist; - int[] current; - - if (n > 2) { - int[] stackVal = new int[]{0, (n - 1)}; - stack.push(stackVal); - while (stack.size() > 0) { - current = stack.pop(); - maxDist = 0; - for (idx = current[0] + 1; idx < current[1]; ++idx) { - dist = LocationUtils.distance(trackPoints.get(idx).getLocation(), trackPoints.get(current[0]).getLocation(), trackPoints.get(current[1]).getLocation()); - if (dist > maxDist) { - maxDist = dist; - maxIdx = idx; - } - } - if (maxDist > tolerance) { - dists[maxIdx] = maxDist; - int[] stackValCurMax = {current[0], maxIdx}; - stack.push(stackValCurMax); - int[] stackValMaxCur = {maxIdx, current[1]}; - stack.push(stackValMaxCur); - } - } - } - - int i = 0; - idx = 0; - decimated.clear(); - for (TrackPoint l : trackPoints) { - if (dists[idx] != 0) { - decimated.add(l); - i++; - } - idx++; - } - Log.d(TAG, "Decimating " + n + " points to " + i + " w/ tolerance = " + tolerance); - - return decimated; - } - /** * Checks if a given location is a valid (i.e. physically possible) location on Earth. * Note: The special separator locations (which have latitude = 100) will not qualify as valid. diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index f88914259..819fdc852 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -53,6 +53,7 @@ public class PreferencesUtils { //NOTE: This was also used to recover from a service restart, but this data should not be exposed to the whole application. public static final long RECORDING_TRACK_ID_DEFAULT = -1L; + @Deprecated //Use the TrackRecordingService public static long getRecordingTrackId(Context context) { SharedPreferences sharedPreferences = getSharedPreferences(context); return sharedPreferences.getLong(getKey(context, R.string.recording_track_id_key), RECORDING_TRACK_ID_DEFAULT); @@ -208,14 +209,17 @@ public class PreferencesUtils { return currentStatsRate.equals(context.getString(R.string.stats_rate_speed)); } + @Deprecated //Use TrackRecordingService public static boolean isRecordingTrackPaused(Context context) { return getBoolean(context, R.string.recording_track_paused_key, isRecordingTrackPausedDefault(context)); } + @Deprecated //Use TrackRecordingService public static boolean isRecordingTrackPausedDefault(Context context) { return context.getResources().getBoolean(R.bool.recording_track_paused_default); } + @Deprecated //Use TrackRecordingService public static void defaultRecordingTrackPaused(Context context) { final boolean RECORDING_TRACK_PAUSED = context.getResources().getBoolean(R.bool.recording_track_paused_default); setBoolean(context, R.string.recording_track_paused_key, RECORDING_TRACK_PAUSED); @@ -331,6 +335,7 @@ public class PreferencesUtils { } } + @Deprecated //Use TrackRecordingService public static boolean isRecording(Context context) { long recordingTrackId = getRecordingTrackId(context); return isRecording(recordingTrackId); diff --git a/src/main/java/de/dennisguse/opentracks/util/UintUtils.java b/src/main/java/de/dennisguse/opentracks/util/UintUtils.java index 7e9e7346a..be579f19e 100644 --- a/src/main/java/de/dennisguse/opentracks/util/UintUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/UintUtils.java @@ -2,8 +2,8 @@ package de.dennisguse.opentracks.util; public class UintUtils { - public static int UINT16_MAX = 0xFFFF; - public static long UINT32_MAX = 0xFFFFFFFFL; + public static final int UINT16_MAX = 0xFFFF; + public static final long UINT32_MAX = 0xFFFFFFFFL; private UintUtils() { } diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/AggregatedStatistics.java b/src/main/java/de/dennisguse/opentracks/viewmodels/AggregatedStatistics.java index bae885266..9fe2cc52e 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/AggregatedStatistics.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/AggregatedStatistics.java @@ -1,18 +1,16 @@ package de.dennisguse.opentracks.viewmodels; -import android.content.Context; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.stats.TrackStatistics; -import de.dennisguse.opentracks.util.TrackIconUtils; public class AggregatedStatistics { - private HashMap aggregatedStatistics = new HashMap<>(); + private final Map aggregatedStatistics = new HashMap<>(); public void aggregate(List tracks) { for (Track track : tracks) { @@ -50,7 +48,7 @@ public class AggregatedStatistics { } public static class AggregatedStatistic { - private TrackStatistics trackStatistics; + private final TrackStatistics trackStatistics; private int countTracks; public AggregatedStatistic(TrackStatistics trackStatistics) { diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 83a896c28..776eda51f 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -69,7 +69,7 @@ Si está parado o en el interior, no se registrarán los datos del sensor (pero OpenTracks no está grabando las localizaciones? -Lo que puedes hacer... +Lo que puedes hacer… a) Comprobar si el GPS está activado. b) mejorar la recepción del GPS (por ejemplo, ir al exterior),\n c) comprueba si con GPSTest app, y\n @@ -79,7 +79,7 @@ Si todo no ayuda, por favor informe de un error. ¿Cómo puedo apoyar OpenTracks? -Puedes... +Puedes… a) difundir la palabra sobre OpenTracks,... b) proponer características,\n c) report bugs,\n diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index b3e48457c..5a022ff0e 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -25,7 +25,7 @@ limitations under the License. OpenTracks heeft de volgende kenmerken: * creëer GPS tracks -* gebruik een hartslagsensor (alleen Bluetooth LE)... +* gebruik een hartslagsensor (alleen Bluetooth LE)… * spraakaankondigingen (op tijd of afstand)... * creëer markers (incl. fotos) * werkt volledig offline @@ -79,7 +79,7 @@ Als alles niet helpt, meldt u dan alstublieft een bug. Hoe kan ik OpenTracks ondersteunen? -Je kunt... +Je kunt… a) het woord verspreiden over OpenTracks, en... b) voorstellen van functies,\n c) melding van bugs,\n