Skip to content

Commit 1fd4f5b

Browse files
antonisclaude
andcommitted
ref(feedback): address review feedback from lucas-zimerman
- Rename ShakeDetectionIntegration to FeedbackShakeIntegration to clarify its purpose is feedback-specific (#1) - Avoid Math.sqrt by comparing squared gForce values (#3) - Null out listener before unregistering sensor to prevent in-flight callbacks during stop (#4) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d77d60d commit 1fd4f5b

File tree

7 files changed

+30
-36
lines changed

7 files changed

+30
-36
lines changed

sentry-android-core/api/sentry-android-core.api

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,19 @@ public abstract class io/sentry/android/core/EnvelopeFileObserverIntegration : i
269269
public final fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V
270270
}
271271

272+
public final class io/sentry/android/core/FeedbackShakeIntegration : android/app/Application$ActivityLifecycleCallbacks, io/sentry/Integration, java/io/Closeable {
273+
public fun <init> (Landroid/app/Application;)V
274+
public fun close ()V
275+
public fun onActivityCreated (Landroid/app/Activity;Landroid/os/Bundle;)V
276+
public fun onActivityDestroyed (Landroid/app/Activity;)V
277+
public fun onActivityPaused (Landroid/app/Activity;)V
278+
public fun onActivityResumed (Landroid/app/Activity;)V
279+
public fun onActivitySaveInstanceState (Landroid/app/Activity;Landroid/os/Bundle;)V
280+
public fun onActivityStarted (Landroid/app/Activity;)V
281+
public fun onActivityStopped (Landroid/app/Activity;)V
282+
public fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V
283+
}
284+
272285
public abstract interface class io/sentry/android/core/IDebugImagesLoader {
273286
public abstract fun clearDebugImages ()V
274287
public abstract fun loadDebugImages ()Ljava/util/List;
@@ -497,19 +510,6 @@ public abstract interface class io/sentry/android/core/SentryUserFeedbackDialog$
497510
public abstract fun configure (Landroid/content/Context;Lio/sentry/SentryFeedbackOptions;)V
498511
}
499512

500-
public final class io/sentry/android/core/ShakeDetectionIntegration : android/app/Application$ActivityLifecycleCallbacks, io/sentry/Integration, java/io/Closeable {
501-
public fun <init> (Landroid/app/Application;)V
502-
public fun close ()V
503-
public fun onActivityCreated (Landroid/app/Activity;Landroid/os/Bundle;)V
504-
public fun onActivityDestroyed (Landroid/app/Activity;)V
505-
public fun onActivityPaused (Landroid/app/Activity;)V
506-
public fun onActivityResumed (Landroid/app/Activity;)V
507-
public fun onActivitySaveInstanceState (Landroid/app/Activity;Landroid/os/Bundle;)V
508-
public fun onActivityStarted (Landroid/app/Activity;)V
509-
public fun onActivityStopped (Landroid/app/Activity;)V
510-
public fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V
511-
}
512-
513513
public class io/sentry/android/core/SpanFrameMetricsCollector : io/sentry/IPerformanceContinuousCollector, io/sentry/android/core/internal/util/SentryFrameMetricsCollector$FrameMetricsCollectorListener {
514514
protected final field lock Lio/sentry/util/AutoClosableReentrantLock;
515515
public fun <init> (Lio/sentry/android/core/SentryAndroidOptions;Lio/sentry/android/core/internal/util/SentryFrameMetricsCollector;)V

sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ static void installDefaultIntegrations(
404404
(Application) context, buildInfoProvider, activityFramesTracker));
405405
options.addIntegration(new ActivityBreadcrumbsIntegration((Application) context));
406406
options.addIntegration(new UserInteractionIntegration((Application) context, loadClass));
407-
options.addIntegration(new ShakeDetectionIntegration((Application) context));
407+
options.addIntegration(new FeedbackShakeIntegration((Application) context));
408408
if (isFragmentAvailable) {
409409
options.addIntegration(new FragmentLifecycleIntegration((Application) context, true, true));
410410
}

sentry-android-core/src/main/java/io/sentry/android/core/ShakeDetectionIntegration.java renamed to sentry-android-core/src/main/java/io/sentry/android/core/FeedbackShakeIntegration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* Detects shake gestures and shows the user feedback dialog when a shake is detected. Only active
2020
* when {@link io.sentry.SentryFeedbackOptions#isUseShakeGesture()} returns {@code true}.
2121
*/
22-
public final class ShakeDetectionIntegration
22+
public final class FeedbackShakeIntegration
2323
implements Integration, Closeable, Application.ActivityLifecycleCallbacks {
2424

2525
private final @NotNull Application application;
@@ -30,7 +30,7 @@ public final class ShakeDetectionIntegration
3030
private volatile @Nullable Activity dialogActivity;
3131
private @Nullable Runnable originalOnFormClose;
3232

33-
public ShakeDetectionIntegration(final @NotNull Application application) {
33+
public FeedbackShakeIntegration(final @NotNull Application application) {
3434
this.application = Objects.requireNonNull(application, "Application is required");
3535
}
3636

@@ -42,10 +42,10 @@ public void register(final @NotNull IScopes scopes, final @NotNull SentryOptions
4242
return;
4343
}
4444

45-
addIntegrationToSdkVersion("ShakeDetection");
45+
addIntegrationToSdkVersion("FeedbackShake");
4646
originalOnFormClose = this.options.getFeedbackOptions().getOnFormClose();
4747
application.registerActivityLifecycleCallbacks(this);
48-
options.getLogger().log(SentryLevel.DEBUG, "ShakeDetectionIntegration installed.");
48+
options.getLogger().log(SentryLevel.DEBUG, "FeedbackShakeIntegration installed.");
4949

5050
// In case of a deferred init, hook into any already-resumed activity
5151
final @Nullable Activity activity = CurrentActivityHolder.getInstance().getActivity();

sentry-android-core/src/main/java/io/sentry/android/core/SentryShakeDetector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ public void start(final @NotNull Context context, final @NotNull Listener shakeL
6363
}
6464

6565
public void stop() {
66+
listener = null;
6667
if (sensorManager != null) {
6768
sensorManager.unregisterListener(this);
6869
sensorManager = null;
6970
}
70-
listener = null;
7171
}
7272

7373
@Override

sentry-android-core/src/test/java/io/sentry/android/core/ShakeDetectionIntegrationTest.kt renamed to sentry-android-core/src/test/java/io/sentry/android/core/FeedbackShakeIntegrationTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import org.mockito.kotlin.verify
1515
import org.mockito.kotlin.whenever
1616

1717
@RunWith(AndroidJUnit4::class)
18-
class ShakeDetectionIntegrationTest {
18+
class FeedbackShakeIntegrationTest {
1919

2020
private class Fixture {
2121
val application = mock<Application>()
@@ -28,9 +28,9 @@ class ShakeDetectionIntegrationTest {
2828
options.feedbackOptions.setDialogHandler(dialogHandler)
2929
}
3030

31-
fun getSut(useShakeGesture: Boolean = true): ShakeDetectionIntegration {
31+
fun getSut(useShakeGesture: Boolean = true): FeedbackShakeIntegration {
3232
options.feedbackOptions.isUseShakeGesture = useShakeGesture
33-
return ShakeDetectionIntegration(application)
33+
return FeedbackShakeIntegration(application)
3434
}
3535
}
3636

sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ class SentryAndroidTest {
488488
it is ActivityLifecycleIntegration ||
489489
it is ActivityBreadcrumbsIntegration ||
490490
it is UserInteractionIntegration ||
491-
it is ShakeDetectionIntegration ||
491+
it is FeedbackShakeIntegration ||
492492
it is FragmentLifecycleIntegration ||
493493
it is SentryTimberIntegration ||
494494
it is AppComponentsBreadcrumbsIntegration ||

sentry-samples/sentry-samples-android/src/main/java/io/sentry/samples/android/MyApplication.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Application;
44
import android.os.StrictMode;
55
import io.sentry.Sentry;
6+
import io.sentry.android.core.SentryAndroid;
67

78
/** Apps. main Application. */
89
public class MyApplication extends Application {
@@ -13,19 +14,12 @@ public void onCreate() {
1314
strictMode();
1415
super.onCreate();
1516

16-
// Example how to initialize the SDK manually which allows access to SentryOptions callbacks.
17-
// Make sure you disable the auto init via manifest meta-data: io.sentry.auto-init=false
18-
// SentryAndroid.init(
19-
// this,
20-
// options -> {
21-
// /*
22-
// use options, for example, to add a beforeSend callback:
23-
//
24-
// options.setBeforeSend((event, hint) -> {
25-
// process event
26-
// });
27-
// */
28-
// });
17+
// Enable shake gesture to open feedback form (for testing)
18+
SentryAndroid.init(
19+
this,
20+
options -> {
21+
options.getFeedbackOptions().setUseShakeGesture(true);
22+
});
2923
}
3024

3125
private void strictMode() {

0 commit comments

Comments
 (0)