Skip to content

Commit 499a607

Browse files
committed
Address PR review
1 parent 15794c6 commit 499a607

File tree

2 files changed

+32
-43
lines changed

2 files changed

+32
-43
lines changed

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

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ public final class SystemEventsBreadcrumbsIntegration implements Integration, Cl
7171
private volatile boolean isStopped = false;
7272
private volatile IntentFilter filter = null;
7373
private final @NotNull AutoClosableReentrantLock receiverLock = new AutoClosableReentrantLock();
74+
// Track previous battery state to avoid duplicate breadcrumbs when values haven't changed
75+
private @Nullable BatteryState previousBatteryState;
7476

7577
public SystemEventsBreadcrumbsIntegration(final @NotNull Context context) {
7678
this(context, getDefaultActionsInternal());
@@ -331,51 +333,14 @@ public void onStop(@NonNull LifecycleOwner owner) {
331333
}
332334
}
333335

334-
static final class SystemEventsBroadcastReceiver extends BroadcastReceiver {
336+
final class SystemEventsBroadcastReceiver extends BroadcastReceiver {
335337

336338
private static final long DEBOUNCE_WAIT_TIME_MS = 60 * 1000;
337339
private final @NotNull IScopes scopes;
338340
private final @NotNull SentryAndroidOptions options;
339341
private final @NotNull Debouncer batteryChangedDebouncer =
340342
new Debouncer(AndroidCurrentDateProvider.getInstance(), DEBOUNCE_WAIT_TIME_MS, 0);
341343

342-
// Track previous battery state to avoid duplicate breadcrumbs when values haven't changed
343-
private @Nullable BatteryState previousBatteryState;
344-
345-
static final class BatteryState {
346-
private final @Nullable Float level;
347-
private final @Nullable Boolean charging;
348-
349-
BatteryState(final @Nullable Float level, final @Nullable Boolean charging) {
350-
this.level = level;
351-
this.charging = charging;
352-
}
353-
354-
@Override
355-
public boolean equals(final @Nullable Object other) {
356-
if (!(other instanceof BatteryState)) return false;
357-
BatteryState that = (BatteryState) other;
358-
return isSimilarLevel(level, that.level) && Objects.equals(charging, that.charging);
359-
}
360-
361-
@Override
362-
public int hashCode() {
363-
// Use rounded level for hash consistency
364-
Float roundedLevel = level != null ? Math.round(level * 100f) / 100f : null;
365-
return Objects.hash(roundedLevel, charging);
366-
}
367-
368-
private boolean isSimilarLevel(final @Nullable Float level1, final @Nullable Float level2) {
369-
if (level1 == null && level2 == null) return true;
370-
if (level1 == null || level2 == null) return false;
371-
372-
// Round both levels to 2 decimal places and compare
373-
float rounded1 = Math.round(level1 * 100f) / 100f;
374-
float rounded2 = Math.round(level2 * 100f) / 100f;
375-
return rounded1 == rounded2;
376-
}
377-
}
378-
379344
SystemEventsBroadcastReceiver(
380345
final @NotNull IScopes scopes, final @NotNull SentryAndroidOptions options) {
381346
this.scopes = scopes;
@@ -395,7 +360,9 @@ public void onReceive(final Context context, final @NotNull Intent intent) {
395360
}
396361

397362
// For battery changes, check if the actual values have changed
398-
final @Nullable Float currentBatteryLevel = DeviceInfoUtil.getBatteryLevel(intent, options);
363+
final @Nullable Float batteryLevel = DeviceInfoUtil.getBatteryLevel(intent, options);
364+
final @Nullable Integer currentBatteryLevel =
365+
batteryLevel != null ? batteryLevel.intValue() : null;
399366
final @Nullable Boolean currentChargingState = DeviceInfoUtil.isCharging(intent, options);
400367
batteryState = new BatteryState(currentBatteryLevel, currentChargingState);
401368

@@ -508,4 +475,26 @@ String getStringAfterDotFast(final @Nullable String str) {
508475
return breadcrumb;
509476
}
510477
}
478+
479+
static final class BatteryState {
480+
private final @Nullable Integer level;
481+
private final @Nullable Boolean charging;
482+
483+
BatteryState(final @Nullable Integer level, final @Nullable Boolean charging) {
484+
this.level = level;
485+
this.charging = charging;
486+
}
487+
488+
@Override
489+
public boolean equals(final @Nullable Object other) {
490+
if (!(other instanceof BatteryState)) return false;
491+
BatteryState that = (BatteryState) other;
492+
return Objects.equals(level, that.level) && Objects.equals(charging, that.charging);
493+
}
494+
495+
@Override
496+
public int hashCode() {
497+
return Objects.hash(level, charging);
498+
}
499+
}
511500
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
157157
assertEquals("device.event", it.category)
158158
assertEquals("system", it.type)
159159
assertEquals(SentryLevel.INFO, it.level)
160-
assertEquals(it.data["level"], 75f)
160+
assertEquals(it.data["level"], 75)
161161
assertEquals(it.data["charging"], true)
162162
},
163163
anyOrNull(),
@@ -189,7 +189,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
189189
verify(fixture.scopes)
190190
.addBreadcrumb(
191191
check<Breadcrumb> {
192-
assertEquals(it.data["level"], 80f)
192+
assertEquals(it.data["level"], 80)
193193
assertEquals(it.data["charging"], false)
194194
},
195195
anyOrNull(),
@@ -227,7 +227,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
227227
verify(fixture.scopes)
228228
.addBreadcrumb(
229229
check<Breadcrumb> {
230-
assertEquals(it.data["level"], 80f)
230+
assertEquals(it.data["level"], 80)
231231
assertEquals(it.data["charging"], true)
232232
},
233233
anyOrNull(),
@@ -266,7 +266,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
266266
verify(fixture.scopes)
267267
.addBreadcrumb(
268268
check<Breadcrumb> {
269-
assertEquals(it.data["level"], 80.001f)
269+
assertEquals(it.data["level"], 80)
270270
assertEquals(it.data["charging"], true)
271271
},
272272
anyOrNull(),

0 commit comments

Comments
 (0)