From b6d935cf3446b438da6153abea34665e85ffac0e Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 24 Nov 2021 19:11:36 +0100 Subject: [PATCH] Bugfix: prevent NPE as handler should not be executed anymore. Fixes #1035. --- .../opentracks/ControllerFragment.java | 29 ++++++++++++++----- .../opentracks/util/ActivityUtils.java | 7 +++-- 2 files changed, 25 insertions(+), 11 deletions(-) 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/util/ActivityUtils.java b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java index c8a259eb1..6479b9f6b 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(); @@ -97,7 +98,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));