From 21c71ffcc894ee3413f2cb49ce259c62150c570e Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 28 Jun 2023 08:31:24 +0200 Subject: [PATCH] Updated Bugsnag to v5.30.0 --- .../android/ActivityBreadcrumbCollector.kt | 33 ++++++++----- .../main/java/com/bugsnag/android/Client.java | 4 +- .../com/bugsnag/android/Configuration.java | 19 ++++---- .../bugsnag/android/DataCollectionModule.kt | 1 + .../com/bugsnag/android/DeliveryDelegate.java | 2 + .../bugsnag/android/DeviceDataCollector.kt | 2 + .../com/bugsnag/android/EventStorageModule.kt | 1 + .../java/com/bugsnag/android/EventStore.java | 2 + .../android/InternalReportDelegate.java | 2 + .../com/bugsnag/android/LibraryLoader.java | 2 + .../com/bugsnag/android/NativeInterface.java | 8 ++++ .../main/java/com/bugsnag/android/Notifier.kt | 2 +- .../java/com/bugsnag/android/PluginClient.kt | 13 ++--- .../java/com/bugsnag/android/RootDetector.kt | 25 ++++++---- .../com/bugsnag/android/SessionTracker.java | 48 +++++++++---------- .../java/com/bugsnag/android/TrackerModule.kt | 1 + .../{ => internal}/BackgroundTaskService.kt | 6 +-- .../android/internal/dag/DependencyModule.kt | 4 +- build.gradle | 2 +- 19 files changed, 108 insertions(+), 69 deletions(-) rename app/src/main/java/com/bugsnag/android/{ => internal}/BackgroundTaskService.kt (98%) diff --git a/app/src/main/java/com/bugsnag/android/ActivityBreadcrumbCollector.kt b/app/src/main/java/com/bugsnag/android/ActivityBreadcrumbCollector.kt index 27f9d9b47b..35330356d4 100644 --- a/app/src/main/java/com/bugsnag/android/ActivityBreadcrumbCollector.kt +++ b/app/src/main/java/com/bugsnag/android/ActivityBreadcrumbCollector.kt @@ -3,47 +3,56 @@ package com.bugsnag.android import android.app.Activity import android.app.Application import android.os.Bundle +import java.util.WeakHashMap internal class ActivityBreadcrumbCollector( private val cb: (message: String, method: Map) -> Unit ) : Application.ActivityLifecycleCallbacks { - var prevState: String? = null + private val prevState = WeakHashMap() override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) = - leaveBreadcrumb(getActivityName(activity), "onCreate()", savedInstanceState != null) + leaveBreadcrumb(activity, "onCreate()", savedInstanceState != null) override fun onActivityStarted(activity: Activity) = - leaveBreadcrumb(getActivityName(activity), "onStart()") + leaveBreadcrumb(activity, "onStart()") override fun onActivityResumed(activity: Activity) = - leaveBreadcrumb(getActivityName(activity), "onResume()") + leaveBreadcrumb(activity, "onResume()") override fun onActivityPaused(activity: Activity) = - leaveBreadcrumb(getActivityName(activity), "onPause()") + leaveBreadcrumb(activity, "onPause()") override fun onActivityStopped(activity: Activity) = - leaveBreadcrumb(getActivityName(activity), "onStop()") + leaveBreadcrumb(activity, "onStop()") override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = - leaveBreadcrumb(getActivityName(activity), "onSaveInstanceState()") + leaveBreadcrumb(activity, "onSaveInstanceState()") - override fun onActivityDestroyed(activity: Activity) = - leaveBreadcrumb(getActivityName(activity), "onDestroy()") + override fun onActivityDestroyed(activity: Activity) { + leaveBreadcrumb(activity, "onDestroy()") + prevState.remove(activity) + } private fun getActivityName(activity: Activity) = activity.javaClass.simpleName - private fun leaveBreadcrumb(activityName: String, lifecycleCallback: String, hasBundle: Boolean? = null) { + private fun leaveBreadcrumb( + activity: Activity, + lifecycleCallback: String, + hasBundle: Boolean? = null + ) { val metadata = mutableMapOf() if (hasBundle != null) { metadata["hasBundle"] = hasBundle } - val previousVal = prevState + val previousVal = prevState[activity] if (previousVal != null) { metadata["previous"] = previousVal } + + val activityName = getActivityName(activity) cb("$activityName#$lifecycleCallback", metadata) - prevState = lifecycleCallback + prevState[activity] = lifecycleCallback } } diff --git a/app/src/main/java/com/bugsnag/android/Client.java b/app/src/main/java/com/bugsnag/android/Client.java index bd532bc4d3..c62c784cf4 100644 --- a/app/src/main/java/com/bugsnag/android/Client.java +++ b/app/src/main/java/com/bugsnag/android/Client.java @@ -2,11 +2,13 @@ package com.bugsnag.android; import static com.bugsnag.android.SeverityReason.REASON_HANDLED_EXCEPTION; +import com.bugsnag.android.internal.BackgroundTaskService; import com.bugsnag.android.internal.ImmutableConfig; import com.bugsnag.android.internal.InternalMetrics; import com.bugsnag.android.internal.InternalMetricsImpl; import com.bugsnag.android.internal.InternalMetricsNoop; import com.bugsnag.android.internal.StateObserver; +import com.bugsnag.android.internal.TaskType; import com.bugsnag.android.internal.dag.ConfigModule; import com.bugsnag.android.internal.dag.ContextModule; import com.bugsnag.android.internal.dag.SystemServiceModule; @@ -303,7 +305,7 @@ public class Client implements MetadataAware, CallbackAware, UserAware, FeatureF registerListenersInBackground(); // Leave auto breadcrumb - Map data = Collections.emptyMap(); + Map data = new HashMap<>(); leaveAutoBreadcrumb("Bugsnag loaded", BreadcrumbType.STATE, data); logger.d("Bugsnag loaded"); diff --git a/app/src/main/java/com/bugsnag/android/Configuration.java b/app/src/main/java/com/bugsnag/android/Configuration.java index 56f987d4cc..f949147306 100644 --- a/app/src/main/java/com/bugsnag/android/Configuration.java +++ b/app/src/main/java/com/bugsnag/android/Configuration.java @@ -2,6 +2,7 @@ package com.bugsnag.android; import android.content.Context; +import androidx.annotation.IntRange; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -305,7 +306,7 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * By default, this value is set at 5,000ms. Setting the value to 0 will count all crashes * as launch crashes until markLaunchCompleted() is called. */ - public void setLaunchDurationMillis(long launchDurationMillis) { + public void setLaunchDurationMillis(@IntRange(from = 0) long launchDurationMillis) { if (launchDurationMillis >= MIN_LAUNCH_CRASH_THRESHOLD_MS) { impl.setLaunchDurationMillis(launchDurationMillis); } else { @@ -524,12 +525,12 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * * By default, 100 breadcrumbs are stored: this can be amended up to a maximum of 500. */ - public void setMaxBreadcrumbs(int maxBreadcrumbs) { + public void setMaxBreadcrumbs(@IntRange(from = 0, to = 500) int maxBreadcrumbs) { if (maxBreadcrumbs >= MIN_BREADCRUMBS && maxBreadcrumbs <= MAX_BREADCRUMBS) { impl.setMaxBreadcrumbs(maxBreadcrumbs); } else { getLogger().e("Invalid configuration value detected. " - + "Option maxBreadcrumbs should be an integer between 0-100. " + + "Option maxBreadcrumbs should be an integer between 0-500. " + "Supplied value is " + maxBreadcrumbs); } } @@ -540,8 +541,8 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * * By default, 32 events are persisted. */ - public int getMaxPersistedEvents() { - return impl.getMaxPersistedEvents(); + public int getMaxPersistedEvents() { + return impl.getMaxPersistedEvents(); } /** @@ -550,7 +551,7 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * * By default, 32 events are persisted. */ - public void setMaxPersistedEvents(int maxPersistedEvents) { + public void setMaxPersistedEvents(@IntRange(from = 0) int maxPersistedEvents) { if (maxPersistedEvents >= 0) { impl.setMaxPersistedEvents(maxPersistedEvents); } else { @@ -576,7 +577,7 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * * By default, up to 200 threads are reported. */ - public void setMaxReportedThreads(int maxReportedThreads) { + public void setMaxReportedThreads(@IntRange(from = 0) int maxReportedThreads) { if (maxReportedThreads >= 0) { impl.setMaxReportedThreads(maxReportedThreads); } else { @@ -602,7 +603,7 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * * By default, 128 sessions are persisted. */ - public void setMaxPersistedSessions(int maxPersistedSessions) { + public void setMaxPersistedSessions(@IntRange(from = 0) int maxPersistedSessions) { if (maxPersistedSessions >= 0) { impl.setMaxPersistedSessions(maxPersistedSessions); } else { @@ -628,7 +629,7 @@ public class Configuration implements CallbackAware, MetadataAware, UserAware, F * * By default, the limit is 10,000. */ - public void setMaxStringValueLength(int maxStringValueLength) { + public void setMaxStringValueLength(@IntRange(from = 0) int maxStringValueLength) { if (maxStringValueLength >= 0) { impl.setMaxStringValueLength(maxStringValueLength); } else { diff --git a/app/src/main/java/com/bugsnag/android/DataCollectionModule.kt b/app/src/main/java/com/bugsnag/android/DataCollectionModule.kt index 20bf61229c..70e9bd78f1 100644 --- a/app/src/main/java/com/bugsnag/android/DataCollectionModule.kt +++ b/app/src/main/java/com/bugsnag/android/DataCollectionModule.kt @@ -1,6 +1,7 @@ package com.bugsnag.android import android.os.Environment +import com.bugsnag.android.internal.BackgroundTaskService import com.bugsnag.android.internal.dag.ConfigModule import com.bugsnag.android.internal.dag.ContextModule import com.bugsnag.android.internal.dag.DependencyModule diff --git a/app/src/main/java/com/bugsnag/android/DeliveryDelegate.java b/app/src/main/java/com/bugsnag/android/DeliveryDelegate.java index 7e4d1b207b..5c4ef01616 100644 --- a/app/src/main/java/com/bugsnag/android/DeliveryDelegate.java +++ b/app/src/main/java/com/bugsnag/android/DeliveryDelegate.java @@ -2,7 +2,9 @@ package com.bugsnag.android; import static com.bugsnag.android.SeverityReason.REASON_PROMISE_REJECTION; +import com.bugsnag.android.internal.BackgroundTaskService; import com.bugsnag.android.internal.ImmutableConfig; +import com.bugsnag.android.internal.TaskType; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; diff --git a/app/src/main/java/com/bugsnag/android/DeviceDataCollector.kt b/app/src/main/java/com/bugsnag/android/DeviceDataCollector.kt index ed3573f3fe..a7755a2edc 100644 --- a/app/src/main/java/com/bugsnag/android/DeviceDataCollector.kt +++ b/app/src/main/java/com/bugsnag/android/DeviceDataCollector.kt @@ -11,6 +11,8 @@ import android.content.res.Resources import android.os.BatteryManager import android.os.Build import android.provider.Settings +import com.bugsnag.android.internal.BackgroundTaskService +import com.bugsnag.android.internal.TaskType import java.io.File import java.util.Date import java.util.Locale diff --git a/app/src/main/java/com/bugsnag/android/EventStorageModule.kt b/app/src/main/java/com/bugsnag/android/EventStorageModule.kt index 03f01f0a3e..c0573d6a3e 100644 --- a/app/src/main/java/com/bugsnag/android/EventStorageModule.kt +++ b/app/src/main/java/com/bugsnag/android/EventStorageModule.kt @@ -1,5 +1,6 @@ package com.bugsnag.android +import com.bugsnag.android.internal.BackgroundTaskService import com.bugsnag.android.internal.dag.ConfigModule import com.bugsnag.android.internal.dag.ContextModule import com.bugsnag.android.internal.dag.DependencyModule diff --git a/app/src/main/java/com/bugsnag/android/EventStore.java b/app/src/main/java/com/bugsnag/android/EventStore.java index 593003ce99..6d1f1ab574 100644 --- a/app/src/main/java/com/bugsnag/android/EventStore.java +++ b/app/src/main/java/com/bugsnag/android/EventStore.java @@ -1,6 +1,8 @@ package com.bugsnag.android; +import com.bugsnag.android.internal.BackgroundTaskService; import com.bugsnag.android.internal.ImmutableConfig; +import com.bugsnag.android.internal.TaskType; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/java/com/bugsnag/android/InternalReportDelegate.java b/app/src/main/java/com/bugsnag/android/InternalReportDelegate.java index d4001aa3e5..0bf0d49a05 100644 --- a/app/src/main/java/com/bugsnag/android/InternalReportDelegate.java +++ b/app/src/main/java/com/bugsnag/android/InternalReportDelegate.java @@ -3,8 +3,10 @@ package com.bugsnag.android; import static com.bugsnag.android.DeliveryHeadersKt.HEADER_INTERNAL_ERROR; import static com.bugsnag.android.SeverityReason.REASON_UNHANDLED_EXCEPTION; +import com.bugsnag.android.internal.BackgroundTaskService; import com.bugsnag.android.internal.ImmutableConfig; import com.bugsnag.android.internal.JsonHelper; +import com.bugsnag.android.internal.TaskType; import android.annotation.SuppressLint; import android.content.Context; diff --git a/app/src/main/java/com/bugsnag/android/LibraryLoader.java b/app/src/main/java/com/bugsnag/android/LibraryLoader.java index 6d8f216b71..1a5e8caf77 100644 --- a/app/src/main/java/com/bugsnag/android/LibraryLoader.java +++ b/app/src/main/java/com/bugsnag/android/LibraryLoader.java @@ -1,5 +1,7 @@ package com.bugsnag.android; +import com.bugsnag.android.internal.TaskType; + import java.util.concurrent.atomic.AtomicBoolean; class LibraryLoader { diff --git a/app/src/main/java/com/bugsnag/android/NativeInterface.java b/app/src/main/java/com/bugsnag/android/NativeInterface.java index 610c9d6a19..bd81195584 100644 --- a/app/src/main/java/com/bugsnag/android/NativeInterface.java +++ b/app/src/main/java/com/bugsnag/android/NativeInterface.java @@ -265,6 +265,14 @@ public class NativeInterface { getClient().addMetadata(tab, key, value); } + /** + * Add metadata to subsequent exception reports with a Hashmap + */ + public static void addMetadata(@NonNull final String tab, + @NonNull final Map metadata) { + getClient().addMetadata(tab, metadata); + } + /** * Return the client report release stage */ diff --git a/app/src/main/java/com/bugsnag/android/Notifier.kt b/app/src/main/java/com/bugsnag/android/Notifier.kt index 8341ec00b9..d7321a88c0 100644 --- a/app/src/main/java/com/bugsnag/android/Notifier.kt +++ b/app/src/main/java/com/bugsnag/android/Notifier.kt @@ -7,7 +7,7 @@ import java.io.IOException */ class Notifier @JvmOverloads constructor( var name: String = "Android Bugsnag Notifier", - var version: String = "5.28.2", + var version: String = "5.30.0", var url: String = "https://bugsnag.com" ) : JsonStream.Streamable { diff --git a/app/src/main/java/com/bugsnag/android/PluginClient.kt b/app/src/main/java/com/bugsnag/android/PluginClient.kt index 3764cf180c..46abba1da9 100644 --- a/app/src/main/java/com/bugsnag/android/PluginClient.kt +++ b/app/src/main/java/com/bugsnag/android/PluginClient.kt @@ -15,10 +15,9 @@ internal class PluginClient( } private val plugins: Set - - private val ndkPlugin = instantiatePlugin(NDK_PLUGIN) - private val anrPlugin = instantiatePlugin(ANR_PLUGIN) - private val rnPlugin = instantiatePlugin(RN_PLUGIN) + private val ndkPlugin = instantiatePlugin(NDK_PLUGIN, immutableConfig.enabledErrorTypes.ndkCrashes) + private val anrPlugin = instantiatePlugin(ANR_PLUGIN, immutableConfig.enabledErrorTypes.anrs) + private val rnPlugin = instantiatePlugin(RN_PLUGIN, immutableConfig.enabledErrorTypes.unhandledRejections) init { val set = mutableSetOf() @@ -32,12 +31,14 @@ internal class PluginClient( plugins = set.toSet() } - private fun instantiatePlugin(clz: String): Plugin? { + private fun instantiatePlugin(clz: String, isWarningEnabled: Boolean): Plugin? { return try { val pluginClz = Class.forName(clz) pluginClz.newInstance() as Plugin } catch (exc: ClassNotFoundException) { - logger.d("Plugin '$clz' is not on the classpath - functionality will not be enabled.") + if (isWarningEnabled) { + logger.d("Plugin '$clz' is not on the classpath - functionality will not be enabled.") + } null } catch (exc: Throwable) { logger.e("Failed to load plugin '$clz'", exc) diff --git a/app/src/main/java/com/bugsnag/android/RootDetector.kt b/app/src/main/java/com/bugsnag/android/RootDetector.kt index 5e9c7a7563..c187121d5e 100644 --- a/app/src/main/java/com/bugsnag/android/RootDetector.kt +++ b/app/src/main/java/com/bugsnag/android/RootDetector.kt @@ -1,10 +1,9 @@ package com.bugsnag.android import androidx.annotation.VisibleForTesting -import java.io.BufferedReader import java.io.File import java.io.IOException -import java.util.concurrent.atomic.AtomicBoolean +import java.io.Reader /** * Attempts to detect whether the device is rooted. Root detection errs on the side of false @@ -41,12 +40,13 @@ internal class RootDetector @JvmOverloads constructor( ) } - private val libraryLoaded = AtomicBoolean(false) + @Volatile + private var libraryLoaded = false init { try { System.loadLibrary("bugsnag-root-detection") - libraryLoaded.set(true) + libraryLoaded = true } catch (ignored: UnsatisfiedLinkError) { // library couldn't load. This could be due to root detection countermeasures, // or down to genuine OS level bugs with library loading - in either case @@ -107,7 +107,7 @@ internal class RootDetector @JvmOverloads constructor( line.replace("\\s".toRegex(), "") }.filter { line -> line.startsWith("ro.debuggable=[1]") || line.startsWith("ro.secure=[0]") - }.count() > 0 + }.any() } } return false @@ -120,8 +120,7 @@ internal class RootDetector @JvmOverloads constructor( var process: Process? = null return try { process = processBuilder.start() - val output = process.inputStream.bufferedReader().use(BufferedReader::readText) - output.isNotBlank() + process.inputStream.bufferedReader().use { it.isNotBlank() } } catch (ignored: IOException) { false } finally { @@ -131,11 +130,21 @@ internal class RootDetector @JvmOverloads constructor( private external fun performNativeRootChecks(): Boolean + private fun Reader.isNotBlank(): Boolean { + while (true) { + val ch = read() + when { + ch == -1 -> return false + !ch.toChar().isWhitespace() -> return true + } + } + } + /** * Performs root checks which require native code. */ private fun nativeCheckRoot(): Boolean = when { - libraryLoaded.get() -> performNativeRootChecks() + libraryLoaded -> performNativeRootChecks() else -> false } } diff --git a/app/src/main/java/com/bugsnag/android/SessionTracker.java b/app/src/main/java/com/bugsnag/android/SessionTracker.java index ddb2f052d5..f620b32416 100644 --- a/app/src/main/java/com/bugsnag/android/SessionTracker.java +++ b/app/src/main/java/com/bugsnag/android/SessionTracker.java @@ -1,7 +1,9 @@ package com.bugsnag.android; +import com.bugsnag.android.internal.BackgroundTaskService; import com.bugsnag.android.internal.DateUtils; import com.bugsnag.android.internal.ImmutableConfig; +import com.bugsnag.android.internal.TaskType; import android.os.SystemClock; @@ -10,22 +12,21 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import java.io.File; -import java.util.Collection; +import java.util.ArrayDeque; import java.util.Collections; import java.util.Date; +import java.util.Deque; import java.util.List; import java.util.UUID; -import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; class SessionTracker extends BaseObservable { private static final int DEFAULT_TIMEOUT_MS = 30000; - private final Collection - foregroundActivities = new ConcurrentLinkedQueue<>(); + private final Deque + foregroundActivities = new ArrayDeque<>(); private final long timeoutMs; private final ImmutableConfig configuration; @@ -132,7 +133,7 @@ class SessionTracker extends BaseObservable { private void notifySessionStartObserver(final Session session) { final String startedAt = DateUtils.toIso8601(session.getStartedAt()); updateState(new StateEvent.StartSession(session.getId(), startedAt, - session.getHandledCount(), session.getUnhandledCount())); + session.getHandledCount(), session.getUnhandledCount())); } /** @@ -358,22 +359,23 @@ class SessionTracker extends BaseObservable { void updateForegroundTracker(String activityName, boolean activityStarting, long nowMs) { if (activityStarting) { long noActivityRunningForMs = nowMs - lastExitedForegroundMs.get(); + synchronized (foregroundActivities) { + if (foregroundActivities.isEmpty()) { + lastEnteredForegroundMs.set(nowMs); - //FUTURE:SM Race condition between isEmpty and put - if (foregroundActivities.isEmpty()) { - lastEnteredForegroundMs.set(nowMs); - - if (noActivityRunningForMs >= timeoutMs - && configuration.getAutoTrackSessions()) { - startNewSession(new Date(), client.getUser(), true); + if (noActivityRunningForMs >= timeoutMs + && configuration.getAutoTrackSessions()) { + startNewSession(new Date(), client.getUser(), true); + } } + foregroundActivities.add(activityName); } - foregroundActivities.add(activityName); } else { - foregroundActivities.remove(activityName); - - if (foregroundActivities.isEmpty()) { - lastExitedForegroundMs.set(nowMs); + synchronized (foregroundActivities) { + foregroundActivities.removeLastOccurrence(activityName); + if (foregroundActivities.isEmpty()) { + lastExitedForegroundMs.set(nowMs); + } } } client.getContextState().setAutomaticContext(getContextActivity()); @@ -397,14 +399,8 @@ class SessionTracker extends BaseObservable { @Nullable String getContextActivity() { - if (foregroundActivities.isEmpty()) { - return null; - } else { - // linked hash set retains order of added activity and ensures uniqueness - // therefore obtain the most recently added - int size = foregroundActivities.size(); - String[] activities = foregroundActivities.toArray(new String[size]); - return activities[size - 1]; + synchronized (foregroundActivities) { + return foregroundActivities.peekLast(); } } } diff --git a/app/src/main/java/com/bugsnag/android/TrackerModule.kt b/app/src/main/java/com/bugsnag/android/TrackerModule.kt index a293539f28..ae1db31f2a 100644 --- a/app/src/main/java/com/bugsnag/android/TrackerModule.kt +++ b/app/src/main/java/com/bugsnag/android/TrackerModule.kt @@ -1,5 +1,6 @@ package com.bugsnag.android +import com.bugsnag.android.internal.BackgroundTaskService import com.bugsnag.android.internal.dag.ConfigModule import com.bugsnag.android.internal.dag.DependencyModule diff --git a/app/src/main/java/com/bugsnag/android/BackgroundTaskService.kt b/app/src/main/java/com/bugsnag/android/internal/BackgroundTaskService.kt similarity index 98% rename from app/src/main/java/com/bugsnag/android/BackgroundTaskService.kt rename to app/src/main/java/com/bugsnag/android/internal/BackgroundTaskService.kt index 76a92312a6..ef3394fd52 100644 --- a/app/src/main/java/com/bugsnag/android/BackgroundTaskService.kt +++ b/app/src/main/java/com/bugsnag/android/internal/BackgroundTaskService.kt @@ -1,4 +1,4 @@ -package com.bugsnag.android +package com.bugsnag.android.internal import androidx.annotation.VisibleForTesting import java.util.concurrent.BlockingQueue @@ -18,7 +18,7 @@ import java.lang.Thread as JThread * The type of task which is being submitted. This determines which execution queue * the task will be added to. */ -internal enum class TaskType { +enum class TaskType { /** * A task that sends an error request. Any filesystem operations @@ -91,7 +91,7 @@ internal fun createExecutor(name: String, type: TaskType, keepAlive: Boolean): E * It also avoids short-running operations being held up by long-running operations submitted * to the same executor. */ -internal class BackgroundTaskService( +class BackgroundTaskService( // these executors must remain single-threaded - the SDK makes assumptions // about synchronization based on this. @get:VisibleForTesting diff --git a/app/src/main/java/com/bugsnag/android/internal/dag/DependencyModule.kt b/app/src/main/java/com/bugsnag/android/internal/dag/DependencyModule.kt index f766b0dd2c..731e5adfc5 100644 --- a/app/src/main/java/com/bugsnag/android/internal/dag/DependencyModule.kt +++ b/app/src/main/java/com/bugsnag/android/internal/dag/DependencyModule.kt @@ -1,7 +1,7 @@ package com.bugsnag.android.internal.dag -import com.bugsnag.android.BackgroundTaskService -import com.bugsnag.android.TaskType +import com.bugsnag.android.internal.BackgroundTaskService +import com.bugsnag.android.internal.TaskType internal abstract class DependencyModule { diff --git a/build.gradle b/build.gradle index 2052a166bd..610be82668 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { classpath 'com.android.tools.build:gradle:8.0.1' // https://github.com/bugsnag/bugsnag-android-gradle-plugin // https://mvnrepository.com/artifact/com.bugsnag/bugsnag-android-gradle-plugin - classpath "com.bugsnag:bugsnag-android-gradle-plugin:7.3.1" + classpath "com.bugsnag:bugsnag-android-gradle-plugin:8.0.1" // https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20" classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.8.20"