diff --git a/src/main/java/de/dennisguse/opentracks/ControllerFragment.java b/src/main/java/de/dennisguse/opentracks/ControllerFragment.java index 3cfb98cfb..782481bf0 100644 --- a/src/main/java/de/dennisguse/opentracks/ControllerFragment.java +++ b/src/main/java/de/dennisguse/opentracks/ControllerFragment.java @@ -17,6 +17,7 @@ package de.dennisguse.opentracks; import android.annotation.SuppressLint; +import android.content.Context; import android.graphics.drawable.TransitionDrawable; import android.os.Bundle; import android.os.Handler; @@ -97,7 +98,10 @@ public class ControllerFragment extends Fragment implements View.OnTouchListener return; } - getCallback().recordStart(); + Callback callback = (Callback) getContext(); + if (callback != null) { + callback.recordStart(); + } }); viewBinding.controllerStop.setOnTouchListener(this); @@ -114,6 +118,12 @@ public class ControllerFragment extends Fragment implements View.OnTouchListener trackRecordingServiceConnection.startConnection(getContext()); } + @Override + public void onPause() { + super.onPause(); + handlerUpdateTotalTime.removeCallbacksAndMessages(null); + } + @Override public void onStop() { super.onStop(); @@ -175,7 +185,10 @@ public class ControllerFragment extends Fragment implements View.OnTouchListener buttonDelay = () -> { view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); view.performClick(); - getCallback().recordPause(); + Callback callback = (Callback) getContext(); + if (callback != null) { + callback.recordPause(); + } transition.resetTransition(); @@ -198,8 +211,12 @@ public class ControllerFragment extends Fragment implements View.OnTouchListener buttonDelay = () -> { view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); - getCallback().recordStop(); - ActivityUtils.vibrate(getContext(), 1000); + Context context = getContext(); + Callback callback = (Callback) context; + if (callback != null) { + callback.recordStop(); + ActivityUtils.vibrate(context, 1000); + } transition.resetTransition(); }; @@ -222,10 +239,6 @@ public class ControllerFragment extends Fragment implements View.OnTouchListener viewBinding.controllerStatus.setText(recordingStatus.isPaused() ? R.string.generic_paused : R.string.generic_recording); } - private Callback getCallback() { - return (Callback) getActivity(); - } - public interface Callback { void recordStart(); diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index eda199175..96ec2a480 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -58,12 +58,12 @@ import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.services.handlers.GpsStatusValue; +import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.util.ActivityUtils; import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.ListItemUtils; -import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -248,6 +248,13 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co trackRecordingServiceConnection.unbind(this); } + @Override + protected void onDestroy() { + super.onDestroy(); + viewBinding = null; + trackRecordingServiceConnection = null; + } + @Override protected View getRootView() { viewBinding = TrackListBinding.inflate(getLayoutInflater()); diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 2749634bc..21f99abef 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -28,10 +28,10 @@ import de.dennisguse.opentracks.fragments.IntervalsFragment; import de.dennisguse.opentracks.fragments.StatisticsRecordingFragment; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; +import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; -import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; @@ -232,6 +232,13 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc trackDataHub.stop(); } + @Override + protected void onDestroy() { + super.onDestroy(); + viewBinding = null; + trackRecordingServiceConnection = null; + } + @Override protected View getRootView() { viewBinding = TrackRecordingBinding.inflate(getLayoutInflater()); diff --git a/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java index c8a259eb1..00b574cad 100644 --- a/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java @@ -1,5 +1,7 @@ package de.dennisguse.opentracks.util; +import static android.content.Context.VIBRATOR_SERVICE; + import android.app.Activity; import android.app.SearchManager; import android.content.Context; @@ -14,6 +16,7 @@ import android.view.MenuItem; import android.widget.AbsListView; import android.widget.ListView; +import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; import java.util.ArrayList; @@ -21,8 +24,6 @@ import java.util.ArrayList; import de.dennisguse.opentracks.ContextualActionModeCallback; import de.dennisguse.opentracks.R; -import static android.content.Context.VIBRATOR_SERVICE; - public class ActivityUtils { private static final String TAG = ActivityUtils.class.getSimpleName(); @@ -75,11 +76,7 @@ public class ActivityUtils { arrayList.add(key); } } - int[] result = new int[arrayList.size()]; - for (int i = 0; i < arrayList.size(); i++) { - result[i] = arrayList.get(i); - } - return result; + return arrayList.stream().mapToInt(i -> i).toArray(); } }); } @@ -97,7 +94,7 @@ public class ActivityUtils { return searchView; } - public static void vibrate(Context context, int milliseconds) { + public static void vibrate(@NonNull Context context, int milliseconds) { final Vibrator vibrator = (Vibrator) context.getSystemService(VIBRATOR_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate(VibrationEffect.createOneShot(milliseconds, VibrationEffect.DEFAULT_AMPLITUDE));