diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java index a7f0a4f463..4be4e8870f 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java @@ -147,7 +147,7 @@ static void init( readDefaultOptionValues(options, context); options.addEventProcessor( - new DefaultAndroidEventProcessor(context, logger, buildInfoProvider, options)); + new DefaultAndroidEventProcessor(context, buildInfoProvider, options)); options.addEventProcessor(new PerformanceAndroidEventProcessor(options, activityFramesTracker)); options.setTransportGate(new AndroidTransportGate(context, options.getLogger())); diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java b/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java index fdf5ec03c5..25a6424f54 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java @@ -23,7 +23,6 @@ import io.sentry.DateUtils; import io.sentry.EventProcessor; import io.sentry.Hint; -import io.sentry.ILogger; import io.sentry.SentryBaseEvent; import io.sentry.SentryEvent; import io.sentry.SentryLevel; @@ -71,29 +70,23 @@ final class DefaultAndroidEventProcessor implements EventProcessor { private final @NotNull RootChecker rootChecker; private final @NotNull SentryAndroidOptions options; - private final @NotNull ILogger logger; - public DefaultAndroidEventProcessor( final @NotNull Context context, - final @NotNull ILogger logger, final @NotNull BuildInfoProvider buildInfoProvider, final @NotNull SentryAndroidOptions options) { this( context, - logger, buildInfoProvider, - new RootChecker(context, buildInfoProvider, logger), + new RootChecker(context, buildInfoProvider, options.getLogger()), options); } DefaultAndroidEventProcessor( final @NotNull Context context, - final @NotNull ILogger logger, final @NotNull BuildInfoProvider buildInfoProvider, final @NotNull RootChecker rootChecker, final @NotNull SentryAndroidOptions options) { this.context = Objects.requireNonNull(context, "The application context is required."); - this.logger = Objects.requireNonNull(logger, "The Logger is required."); this.buildInfoProvider = Objects.requireNonNull(buildInfoProvider, "The BuildInfoProvider is required."); this.rootChecker = Objects.requireNonNull(rootChecker, "The RootChecker is required."); @@ -158,10 +151,12 @@ private boolean shouldApplyScopeData( if (HintUtils.shouldApplyScopeData(hint)) { return true; } else { - logger.log( - SentryLevel.DEBUG, - "Event was cached so not applying data relevant to the current app execution/version: %s", - event.getEventId()); + options + .getLogger() + .log( + SentryLevel.DEBUG, + "Event was cached so not applying data relevant to the current app execution/version: %s", + event.getEventId()); return false; } } @@ -229,7 +224,7 @@ private void setThreads(final @NotNull SentryEvent event) { private void setPackageInfo(final @NotNull SentryBaseEvent event, final @NotNull App app) { final PackageInfo packageInfo = - ContextUtils.getPackageInfo(context, PackageManager.GET_PERMISSIONS, logger); + ContextUtils.getPackageInfo(context, PackageManager.GET_PERMISSIONS, options.getLogger()); if (packageInfo != null) { String versionCode = ContextUtils.getVersionCode(packageInfo); @@ -307,7 +302,7 @@ private void setArchitectures(final @NotNull Device device) { device.setSimulator((Boolean) emulator); } } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting emulator.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting emulator.", e); } DisplayMetrics displayMetrics = getDisplayMetrics(); @@ -348,7 +343,7 @@ private void setDeviceIO(final @NotNull Device device, final boolean applyScopeD if (options.isCollectIpcDeviceInfo()) { Boolean connected; - switch (ConnectivityChecker.getConnectionStatus(context, logger)) { + switch (ConnectivityChecker.getConnectionStatus(context, options.getLogger())) { case NOT_CONNECTED: connected = false; break; @@ -393,7 +388,7 @@ private void setDeviceIO(final @NotNull Device device, final boolean applyScopeD if (device.getConnectionType() == null) { // wifi, ethernet or cellular, null if none device.setConnectionType( - ConnectivityChecker.getConnectionType(context, logger, buildInfoProvider)); + ConnectivityChecker.getConnectionType(context, options.getLogger(), buildInfoProvider)); } } @@ -424,7 +419,7 @@ private TimeZone getTimeZone() { // currentTimeMillis returns UTC already return DateUtils.getDateTime(System.currentTimeMillis() - SystemClock.elapsedRealtime()); } catch (IllegalArgumentException e) { - logger.log(SentryLevel.ERROR, e, "Error getting the device's boot time."); + options.getLogger().log(SentryLevel.ERROR, e, "Error getting the device's boot time."); } return null; } @@ -442,10 +437,10 @@ private TimeZone getTimeZone() { actManager.getMemoryInfo(memInfo); return memInfo; } - logger.log(SentryLevel.INFO, "Error getting MemoryInfo."); + options.getLogger().log(SentryLevel.INFO, "Error getting MemoryInfo."); return null; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting MemoryInfo.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting MemoryInfo.", e); return null; } } @@ -464,7 +459,7 @@ private TimeZone getTimeZone() { try { return Build.MODEL.split(" ", -1)[0]; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting device family.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting device family.", e); return null; } } @@ -487,7 +482,7 @@ private TimeZone getTimeZone() { return ((float) level / (float) scale) * percentMultiplier; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting device battery level.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting device battery level.", e); return null; } } @@ -503,7 +498,7 @@ private TimeZone getTimeZone() { return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting device charging state.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting device charging state.", e); return null; } } @@ -515,7 +510,7 @@ private TimeZone getTimeZone() { return ((float) temperature) / 10; // celsius } } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting battery temperature.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting battery temperature.", e); } return null; } @@ -532,13 +527,15 @@ private TimeZone getTimeZone() { deviceOrientation = DeviceOrientations.getOrientation(context.getResources().getConfiguration().orientation); if (deviceOrientation == null) { - logger.log( - SentryLevel.INFO, - "No device orientation available (ORIENTATION_SQUARE|ORIENTATION_UNDEFINED)"); + options + .getLogger() + .log( + SentryLevel.INFO, + "No device orientation available (ORIENTATION_SQUARE|ORIENTATION_UNDEFINED)"); return null; } } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting device orientation.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting device orientation.", e); } return deviceOrientation; } @@ -554,7 +551,7 @@ private TimeZone getTimeZone() { long totalBlocks = getBlockCountLong(stat); return totalBlocks * blockSize; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting total internal storage amount.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting total internal storage amount.", e); return null; } } @@ -609,7 +606,9 @@ private int getAvailableBlocksDep(final @NotNull StatFs stat) { long availableBlocks = getAvailableBlocksLong(stat); return availableBlocks * blockSize; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting unused internal storage amount.", e); + options + .getLogger() + .log(SentryLevel.ERROR, "Error getting unused internal storage amount.", e); return null; } } @@ -620,10 +619,10 @@ private int getAvailableBlocksDep(final @NotNull StatFs stat) { if (path != null) { // && path.canRead()) { canRead() will read return false return new StatFs(path.getPath()); } - logger.log(SentryLevel.INFO, "Not possible to read external files directory"); + options.getLogger().log(SentryLevel.INFO, "Not possible to read external files directory"); return null; } - logger.log(SentryLevel.INFO, "External storage is not mounted or emulated."); + options.getLogger().log(SentryLevel.INFO, "External storage is not mounted or emulated."); return null; } @@ -664,7 +663,7 @@ private int getAvailableBlocksDep(final @NotNull StatFs stat) { return file; } } else { - logger.log(SentryLevel.INFO, "Not possible to read getExternalFilesDirs"); + options.getLogger().log(SentryLevel.INFO, "Not possible to read getExternalFilesDirs"); } return null; } @@ -681,7 +680,7 @@ private int getAvailableBlocksDep(final @NotNull StatFs stat) { long totalBlocks = getBlockCountLong(stat); return totalBlocks * blockSize; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting total external storage amount.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting total external storage amount.", e); return null; } } @@ -705,7 +704,9 @@ private boolean isExternalStorageMounted() { long availableBlocks = getAvailableBlocksLong(stat); return availableBlocks * blockSize; } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting unused external storage amount.", e); + options + .getLogger() + .log(SentryLevel.ERROR, "Error getting unused external storage amount.", e); return null; } } @@ -719,7 +720,7 @@ private boolean isExternalStorageMounted() { try { return context.getResources().getDisplayMetrics(); } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting DisplayMetrics.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting DisplayMetrics.", e); return null; } } @@ -741,7 +742,7 @@ private boolean isExternalStorageMounted() { os.setRooted((Boolean) rooted); } } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting OperatingSystem.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting OperatingSystem.", e); } return os; @@ -796,7 +797,7 @@ private void setAppPackageInfo(final @NotNull App app, final @NotNull PackageInf try (BufferedReader br = new BufferedReader(new FileReader(file))) { return br.readLine(); } catch (IOException e) { - logger.log(SentryLevel.ERROR, errorMsg, e); + options.getLogger().log(SentryLevel.ERROR, errorMsg, e); } return defaultVersion; @@ -820,7 +821,7 @@ private void setAppPackageInfo(final @NotNull App app, final @NotNull PackageInf return context.getString(stringId); } } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting application name.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting application name.", e); } return null; @@ -842,7 +843,7 @@ private void setAppPackageInfo(final @NotNull App app, final @NotNull PackageInf try { return Installation.id(context); } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting installationId.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting installationId.", e); } return null; } @@ -851,7 +852,7 @@ private void setAppPackageInfo(final @NotNull App app, final @NotNull PackageInf private @Nullable Map getSideLoadedInfo() { String packageName = null; try { - final PackageInfo packageInfo = ContextUtils.getPackageInfo(context, logger); + final PackageInfo packageInfo = ContextUtils.getPackageInfo(context, options.getLogger()); final PackageManager packageManager = context.getPackageManager(); if (packageInfo != null && packageManager != null) { @@ -876,7 +877,7 @@ private void setAppPackageInfo(final @NotNull App app, final @NotNull PackageInf } } catch (IllegalArgumentException e) { // it'll never be thrown as we are querying its own App's package. - logger.log(SentryLevel.DEBUG, "%s package isn't installed.", packageName); + options.getLogger().log(SentryLevel.DEBUG, "%s package isn't installed.", packageName); } return null; @@ -894,7 +895,7 @@ private void setSideLoadedInfo(final @NotNull SentryBaseEvent event) { } } } catch (Throwable e) { - logger.log(SentryLevel.ERROR, "Error getting side loaded info.", e); + options.getLogger().log(SentryLevel.ERROR, "Error getting side loaded info.", e); } } diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/DefaultAndroidEventProcessorTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/DefaultAndroidEventProcessorTest.kt index 4202c97d46..4de18edb3c 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/DefaultAndroidEventProcessorTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/DefaultAndroidEventProcessorTest.kt @@ -13,7 +13,6 @@ import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever import io.sentry.DiagnosticLogger import io.sentry.Hint -import io.sentry.ILogger import io.sentry.SentryEvent import io.sentry.SentryLevel import io.sentry.SentryTracer @@ -47,7 +46,7 @@ class DefaultAndroidEventProcessorTest { private val className = "io.sentry.android.core.DefaultAndroidEventProcessor" private val ctorTypes = - arrayOf(Context::class.java, ILogger::class.java, BuildInfoProvider::class.java, SentryAndroidOptions::class.java) + arrayOf(Context::class.java, BuildInfoProvider::class.java, SentryAndroidOptions::class.java) init { Locale.setDefault(Locale.US) @@ -63,7 +62,7 @@ class DefaultAndroidEventProcessorTest { val sentryTracer = SentryTracer(TransactionContext("", ""), mock()) fun getSut(context: Context): DefaultAndroidEventProcessor { - return DefaultAndroidEventProcessor(context, options.logger, buildInfo, options) + return DefaultAndroidEventProcessor(context, buildInfo, options) } } @@ -85,7 +84,7 @@ class DefaultAndroidEventProcessorTest { fun `when null context is provided, invalid argument is thrown`() { val ctor = className.getCtor(ctorTypes) - val params = arrayOf(null, mock(), null, mock()) + val params = arrayOf(null, null, mock()) assertFailsWith { ctor.newInstance(params) } } @@ -93,7 +92,7 @@ class DefaultAndroidEventProcessorTest { fun `when null logger is provided, invalid argument is thrown`() { val ctor = className.getCtor(ctorTypes) - val params = arrayOf(mock(), null, null, mock()) + val params = arrayOf(mock(), null, mock()) assertFailsWith { ctor.newInstance(params) } } @@ -101,7 +100,7 @@ class DefaultAndroidEventProcessorTest { fun `when null options is provided, invalid argument is thrown`() { val ctor = className.getCtor(ctorTypes) - val params = arrayOf(mock(), mock(), mock(), null) + val params = arrayOf(mock(), mock(), null) assertFailsWith { ctor.newInstance(params) } } @@ -109,7 +108,7 @@ class DefaultAndroidEventProcessorTest { fun `when null buildInfo is provided, invalid argument is thrown`() { val ctor = className.getCtor(ctorTypes) - val params = arrayOf(null, null, mock(), mock()) + val params = arrayOf(null, mock(), mock()) assertFailsWith { ctor.newInstance(params) } } @@ -313,7 +312,7 @@ class DefaultAndroidEventProcessorTest { @Test fun `Processor won't throw exception when theres a hint`() { val processor = - DefaultAndroidEventProcessor(context, fixture.options.logger, fixture.buildInfo, mock()) + DefaultAndroidEventProcessor(context, fixture.buildInfo, mock(), fixture.options) val hints = HintUtils.createWithTypeCheckHint(CachedEvent()) processor.process(SentryEvent(), hints)