diff --git a/sentry-android-core/build.gradle.kts b/sentry-android-core/build.gradle.kts index c1ac3e935bf..d111a71ecc3 100644 --- a/sentry-android-core/build.gradle.kts +++ b/sentry-android-core/build.gradle.kts @@ -56,8 +56,6 @@ android { lint { warningsAsErrors = true checkDependencies = true - // TODO: Re-enable once the SDK_INT checks made obsolete by minSdk 24 are removed. - disable += "ObsoleteSdkInt" // We run a full lint analysis as build part in CI, so skip vital checks for assemble tasks. checkReleaseBuilds = false diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidContinuousProfiler.java b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidContinuousProfiler.java index 4f115ca9d7f..23a72b131fc 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidContinuousProfiler.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidContinuousProfiler.java @@ -4,7 +4,6 @@ import static io.sentry.IConnectionStatusProvider.ConnectionStatus.DISCONNECTED; import static java.util.concurrent.TimeUnit.SECONDS; -import android.os.Build; import io.sentry.CompositePerformanceCollector; import io.sentry.DataCategory; import io.sentry.IContinuousProfiler; @@ -176,10 +175,6 @@ private void initScopes() { private void start() { initScopes(); - // Debug.startMethodTracingSampling() is only available since Lollipop, but Android Profiler - // causes crashes on api 21 -> https://github.com/getsentry/sentry-java/issues/3392 - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.LOLLIPOP_MR1) return; - // Let's initialize trace folder and profiling interval init(); // init() didn't create profiler, should never happen @@ -281,12 +276,6 @@ private void stop(final boolean restartProfiler) { return; } - // onTransactionStart() is only available since Lollipop_MR1 - // and SystemClock.elapsedRealtimeNanos() since Jelly Bean - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.LOLLIPOP_MR1) { - return; - } - List performanceCollectionData = null; if (performanceCollector != null) { performanceCollectionData = performanceCollector.stop(chunkId.toString()); diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidTransactionProfiler.java b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidTransactionProfiler.java index e44ed746a08..f6e828de83d 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidTransactionProfiler.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidTransactionProfiler.java @@ -151,10 +151,6 @@ private void init() { @Override public void start() { - // Debug.startMethodTracingSampling() is only available since Lollipop, but Android Profiler - // causes crashes on api 21 -> https://github.com/getsentry/sentry-java/issues/3392 - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.LOLLIPOP_MR1) return; - // When the first transaction is starting, we can start profiling if (!isRunning.getAndSet(true)) { // Let's initialize trace folder and profiling interval @@ -234,11 +230,6 @@ public void bindTransaction(final @NotNull ITransaction transaction) { final @Nullable List performanceCollectionData, final @NotNull SentryOptions options) { - // onTransactionStart() is only available since Lollipop_MR1 - // and SystemClock.elapsedRealtimeNanos() since Jelly Bean - // and SUPPORTED_ABIS since KITKAT - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.LOLLIPOP_MR1) return null; - // check if profiler was created if (profiler == null) { return null; diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/NetworkBreadcrumbsIntegration.java b/sentry-android-core/src/main/java/io/sentry/android/core/NetworkBreadcrumbsIntegration.java index c7f3182b97d..0151c96de67 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/NetworkBreadcrumbsIntegration.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/NetworkBreadcrumbsIntegration.java @@ -64,12 +64,6 @@ public void register(final @NotNull IScopes scopes, final @NotNull SentryOptions if (androidOptions.isEnableNetworkEventBreadcrumbs()) { - // The specific error is logged in the ConnectivityChecker method - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.N) { - options.getLogger().log(SentryLevel.DEBUG, "NetworkCallbacks need Android N+."); - return; - } - try (final @NotNull ISentryLifecycleToken ignored = lock.acquire()) { networkCallback = new NetworkBreadcrumbsNetworkCallback( diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java index e649e9e094c..2e6f1b7c24e 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java @@ -154,11 +154,9 @@ public static void init( // if SentryPerformanceProvider was disabled or removed, // we set the app start / sdk init time here instead final @NotNull AppStartMetrics appStartMetrics = AppStartMetrics.getInstance(); - if (buildInfoProvider.getSdkInfoVersion() >= android.os.Build.VERSION_CODES.N) { - final @NotNull TimeSpan appStartTimeSpan = appStartMetrics.getAppStartTimeSpan(); - if (appStartTimeSpan.hasNotStarted()) { - appStartTimeSpan.setStartedAt(Process.getStartUptimeMillis()); - } + final @NotNull TimeSpan appStartTimeSpan = appStartMetrics.getAppStartTimeSpan(); + if (appStartTimeSpan.hasNotStarted()) { + appStartTimeSpan.setStartedAt(Process.getStartUptimeMillis()); } if (context.getApplicationContext() instanceof Application) { appStartMetrics.registerLifecycleCallbacks( diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/SentryPerformanceProvider.java b/sentry-android-core/src/main/java/io/sentry/android/core/SentryPerformanceProvider.java index 9d1f2e13ec4..4b3a533ae76 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/SentryPerformanceProvider.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/SentryPerformanceProvider.java @@ -258,12 +258,8 @@ private void onAppLaunched( final @NotNull TimeSpan sdkInitTimeSpan = appStartMetrics.getSdkInitTimeSpan(); sdkInitTimeSpan.setStartedAt(sdkInitMillis); - // performance v2: Uses Process.getStartUptimeMillis() - // requires API level 24+ - if (buildInfoProvider.getSdkInfoVersion() >= android.os.Build.VERSION_CODES.N) { - final @NotNull TimeSpan appStartTimespan = appStartMetrics.getAppStartTimeSpan(); - appStartTimespan.setStartedAt(Process.getStartUptimeMillis()); - } + final @NotNull TimeSpan appStartTimespan = appStartMetrics.getAppStartTimeSpan(); + appStartTimespan.setStartedAt(Process.getStartUptimeMillis()); if (context instanceof Application) { app = (Application) context; diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProvider.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProvider.java index 62a212e6dcc..f27873af79f 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProvider.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProvider.java @@ -99,9 +99,7 @@ public AndroidConnectionStatusProvider( new CellularNetworkTechnologyProvider(this.context, options.getLogger(), buildInfoProvider); capabilities[0] = NetworkCapabilities.NET_CAPABILITY_INTERNET; - if (buildInfoProvider.getSdkInfoVersion() >= Build.VERSION_CODES.M) { - capabilities[1] = NetworkCapabilities.NET_CAPABILITY_VALIDATED; - } + capabilities[1] = NetworkCapabilities.NET_CAPABILITY_VALIDATED; // Register network callback immediately for caching //noinspection Convert2MethodRef @@ -123,13 +121,9 @@ private boolean isNetworkEffectivelyConnected( } // Check for general internet capability AND validated status - boolean hasInternetAndValidated = - networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); - if (buildInfoProvider.getSdkInfoVersion() >= Build.VERSION_CODES.M) { - hasInternetAndValidated = - hasInternetAndValidated - && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); - } + final boolean hasInternetAndValidated = + networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); if (!hasInternetAndValidated) { return false; @@ -393,12 +387,6 @@ private void updateCache(@Nullable NetworkCapabilities networkCapabilities) { return; } - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.M) { - cachedNetworkCapabilities = null; - cacheFreshUntil = Deadline.after(ticker, CACHE_TTL_MINUTES, TimeUnit.MINUTES); - return; - } - // Fallback: query current active network final ConnectivityManager connectivityManager = getConnectivityManager(context, options.getLogger()); @@ -630,65 +618,25 @@ public NetworkCapabilities getCachedNetworkCapabilities() { boolean wifi = false; boolean cellular = false; - if (buildInfoProvider.getSdkInfoVersion() >= Build.VERSION_CODES.M) { - - final Network activeNetwork = connectivityManager.getActiveNetwork(); - if (activeNetwork == null) { - logger.log(SentryLevel.INFO, "Network is null and cannot check network status"); - return null; - } - final NetworkCapabilities networkCapabilities = - connectivityManager.getNetworkCapabilities(activeNetwork); - if (networkCapabilities == null) { - logger.log(SentryLevel.INFO, "NetworkCapabilities is null and cannot check network type"); - return null; - } - if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { - ethernet = true; - } - if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { - wifi = true; - } - if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { - cellular = true; - } - } else { - // ideally using connectivityManager.getAllNetworks(), but its >= Android L only - - // for some reason linting didn't allow a single @SuppressWarnings("deprecation") on method - // signature - @SuppressWarnings("deprecation") - final android.net.NetworkInfo activeNetworkInfo = - connectivityManager.getActiveNetworkInfo(); - - if (activeNetworkInfo == null) { - logger.log(SentryLevel.INFO, "NetworkInfo is null, there's no active network."); - return null; - } - - @SuppressWarnings("deprecation") - final int type = activeNetworkInfo.getType(); - - @SuppressWarnings("deprecation") - final int TYPE_ETHERNET = ConnectivityManager.TYPE_ETHERNET; - - @SuppressWarnings("deprecation") - final int TYPE_WIFI = ConnectivityManager.TYPE_WIFI; - - @SuppressWarnings("deprecation") - final int TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE; - - switch (type) { - case TYPE_ETHERNET: - ethernet = true; - break; - case TYPE_WIFI: - wifi = true; - break; - case TYPE_MOBILE: - cellular = true; - break; - } + final Network activeNetwork = connectivityManager.getActiveNetwork(); + if (activeNetwork == null) { + logger.log(SentryLevel.INFO, "Network is null and cannot check network status"); + return null; + } + final NetworkCapabilities networkCapabilities = + connectivityManager.getNetworkCapabilities(activeNetwork); + if (networkCapabilities == null) { + logger.log(SentryLevel.INFO, "NetworkCapabilities is null and cannot check network type"); + return null; + } + if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { + ethernet = true; + } + if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + wifi = true; + } + if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + cellular = true; } // TODO: change the protocol to be a list of transports as a device may have the capability of @@ -758,11 +706,6 @@ public static boolean addNetworkCallback( final @NotNull ILogger logger, final @NotNull BuildInfoProvider buildInfoProvider, final @NotNull NetworkCallback networkCallback) { - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.N) { - logger.log(SentryLevel.DEBUG, "NetworkCallbacks need Android N+."); - return false; - } - if (!Permissions.hasPermission(context, Manifest.permission.ACCESS_NETWORK_STATE)) { logger.log(SentryLevel.INFO, "No permission (ACCESS_NETWORK_STATE) to check network status."); return false; @@ -787,10 +730,6 @@ static boolean registerNetworkCallback( final @NotNull BuildInfoProvider buildInfoProvider, final @Nullable Handler handler, final @NotNull NetworkCallback networkCallback) { - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.N) { - logger.log(SentryLevel.DEBUG, "NetworkCallbacks need Android N+."); - return false; - } final ConnectivityManager connectivityManager = getConnectivityManager(context, logger); if (connectivityManager == null) { return false; diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProvider.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProvider.java index a5468ae913f..5cff72f68fd 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProvider.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProvider.java @@ -144,10 +144,6 @@ public void unregister() { @SuppressLint({"MissingPermission", "InlinedApi", "NewApi"}) private @Nullable String getDataNetworkTechnology() { - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.N) { - // getDataNetworkType was added in API 24. - return null; - } // The SDK doesn't declare these permissions, so the technology is only available to apps that // already request one of them. READ_BASIC_PHONE_STATE only exists from API 31 on, where the // display info listener is used instead, but checking it is harmless. diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollector.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollector.java index 2c0ae246558..af99dd774c7 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollector.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollector.java @@ -12,7 +12,6 @@ import android.view.Choreographer; import android.view.FrameMetrics; import android.view.Window; -import androidx.annotation.RequiresApi; import io.sentry.ILogger; import io.sentry.ISentryLifecycleToken; import io.sentry.SentryLevel; @@ -110,10 +109,6 @@ public SentryFrameMetricsCollector( if (!(appContext instanceof Application)) { return; } - // FrameMetrics api is only available since sdk version N - if (buildInfoProvider.getSdkInfoVersion() < Build.VERSION_CODES.N) { - return; - } isAvailable = true; // The frame metrics HandlerThread is started lazily on the first startCollection() call. @@ -240,7 +235,6 @@ private long getFrameStartTimestamp(final @NotNull FrameMetrics frameMetrics) { * Return time spent on the main thread (cpu) for frame creation. It doesn't consider time spent * on the render thread (gpu). */ - @RequiresApi(api = Build.VERSION_CODES.N) private long getFrameCpuDuration(final @NotNull FrameMetrics frameMetrics) { // Inspired by JankStats // https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:metrics/metrics-performance/src/main/java/androidx/metrics/performance/JankStatsApi24Impl.kt;l=74-79;drc=1de6215c6bd9e887e3d94556e9ac55cfb7b8c797 @@ -512,7 +506,6 @@ void onFrameMetricCollected( @ApiStatus.Internal public interface WindowFrameMetricsManager { - @RequiresApi(api = Build.VERSION_CODES.N) default void addOnFrameMetricsAvailableListener( final @NotNull Window window, final @Nullable Window.OnFrameMetricsAvailableListener frameMetricsAvailableListener, @@ -523,7 +516,6 @@ default void addOnFrameMetricsAvailableListener( window.addOnFrameMetricsAvailableListener(frameMetricsAvailableListener, handler); } - @RequiresApi(api = Build.VERSION_CODES.N) default void removeOnFrameMetricsAvailableListener( final @NotNull Window window, final @Nullable Window.OnFrameMetricsAvailableListener frameMetricsAvailableListener) { diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/performance/AppStartMetrics.java b/sentry-android-core/src/main/java/io/sentry/android/core/performance/AppStartMetrics.java index a23b9a8720b..e49bada831a 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/performance/AppStartMetrics.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/performance/AppStartMetrics.java @@ -550,28 +550,15 @@ private void scheduleHeadlessAppStartCheckOnMain() { if (!headlessAppStartCheckPending.compareAndSet(false, true)) { return; } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - Looper.getMainLooper() - .getQueue() - .addIdleHandler( - () -> { - firstIdle = SystemClock.uptimeMillis(); - headlessAppStartCheckPending.set(false); - handleHeadlessAppStartIfNeededOnMain(); - return false; - }); - } else { - final Handler handler = new Handler(Looper.getMainLooper()); - handler.post( - () -> { - firstIdle = SystemClock.uptimeMillis(); - handler.post( - () -> { - headlessAppStartCheckPending.set(false); - handleHeadlessAppStartIfNeededOnMain(); - }); - }); - } + Looper.getMainLooper() + .getQueue() + .addIdleHandler( + () -> { + firstIdle = SystemClock.uptimeMillis(); + headlessAppStartCheckPending.set(false); + handleHeadlessAppStartIfNeededOnMain(); + return false; + }); } /** diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt index b5b4b76e18a..386bbe04eb6 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt @@ -302,17 +302,6 @@ class AndroidContinuousProfilerTest { assertEquals(0, profiler.rootSpanCounter) } - @Test - fun `profiler works only on api 22+`() { - val buildInfo = - mock { - whenever(it.sdkInfoVersion).thenReturn(Build.VERSION_CODES.LOLLIPOP) - } - val profiler = fixture.getSut(buildInfo) - profiler.startProfiler(ProfileLifecycle.MANUAL, fixture.mockTracesSampler) - assertFalse(profiler.isRunning) - } - @Test fun `profiler evaluates profilingTracesDirPath options only on first start`() { val profiler = fixture.getSut { it.cacheDirPath = null } diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt index 1d2b3a78685..ca9939de84b 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt @@ -240,17 +240,6 @@ class AndroidTransactionProfilerTest { assertEquals(profilingTraceData.transactionId, fixture.transaction1.eventId.toString()) } - @Test - fun `profiler works only on api 22+`() { - val buildInfo = - mock { - whenever(it.sdkInfoVersion).thenReturn(Build.VERSION_CODES.LOLLIPOP) - } - val profiler = fixture.getSut(context, buildInfo) - profiler.start() - assertFalse(profiler.isRunning) - } - @Test fun `profiler on profilesSampleRate=0 false`() { fixture.options.apply { profilesSampleRate = 0.0 } diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/NetworkBreadcrumbsIntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/NetworkBreadcrumbsIntegrationTest.kt index 711f5f7fe0b..8085189b029 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/NetworkBreadcrumbsIntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/NetworkBreadcrumbsIntegrationTest.kt @@ -94,18 +94,6 @@ class NetworkBreadcrumbsIntegrationTest { assertNull(sut.networkCallback) } - @Test - fun `It doesn't register callback if not on Android N+`() { - val buildInfo = mock() - whenever(buildInfo.sdkInfoVersion).thenReturn(Build.VERSION_CODES.M) - val sut = fixture.getSut(buildInfo = buildInfo) - - sut.register(fixture.scopes, fixture.options) - - assertTrue(AndroidConnectionStatusProvider.getChildCallbacks().isEmpty()) - assertNull(sut.networkCallback) - } - @Test fun `When NetworkBreadcrumbsIntegration is closed, it should unregister the callback`() { val sut = fixture.getSut() diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProviderTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProviderTest.kt index 56a2a12928c..d534ba436d3 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProviderTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/AndroidConnectionStatusProviderTest.kt @@ -662,17 +662,6 @@ class AndroidConnectionStatusProviderTest { ) } - @Test - fun `API level below M falls back to legacy method`() { - whenever(buildInfo.sdkInfoVersion).thenReturn(Build.VERSION_CODES.LOLLIPOP) - whenever(networkInfo.isConnected).thenReturn(true) - - assertEquals( - IConnectionStatusProvider.ConnectionStatus.CONNECTED, - connectionStatusProvider.connectionStatus, - ) - } - @Test fun `onCapabilitiesChanged updates cache`() { whenever(buildInfo.sdkInfoVersion).thenReturn(Build.VERSION_CODES.N) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProviderTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProviderTest.kt index 4bf1d7de427..29047ee304e 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProviderTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CellularNetworkTechnologyProviderTest.kt @@ -335,14 +335,6 @@ class CellularNetworkTechnologyProviderTest { assertThat(provider.cellularNetworkTechnology).isNull() } - @Test - fun `below Android 7 the technology is not read because getDataNetworkType is unavailable`() { - val provider = fixture.getSut(sdkVersion = Build.VERSION_CODES.M, hasPermission = true) - - assertThat(provider.cellularNetworkTechnology).isNull() - verify(fixture.telephonyManager, never()).dataNetworkType - } - @Test fun `below Android 12 registering does nothing`() { val provider = fixture.getSut(sdkVersion = Build.VERSION_CODES.R) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollectorTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollectorTest.kt index 334ce229066..fbd944b7dcf 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollectorTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/SentryFrameMetricsCollectorTest.kt @@ -117,15 +117,6 @@ class SentryFrameMetricsCollectorTest { } } - @Test - fun `collector works only on api 24+`() { - val buildInfo = - mock { whenever(it.sdkInfoVersion).thenReturn(Build.VERSION_CODES.M) } - val collector = fixture.getSut(context, buildInfo) - val id = collector.startCollection(mock()) - assertNull(id) - } - @Test fun `collector works only if context is instance of Application`() { val collector = fixture.getSut(mock()) @@ -611,9 +602,7 @@ class SentryFrameMetricsCollectorTest { @Test fun `getFramesDelay returns -1 when not available`() { - val buildInfo = - mock { whenever(it.sdkInfoVersion).thenReturn(Build.VERSION_CODES.M) } - val collector = fixture.getSut(context, buildInfo) + val collector = fixture.getSut(mock()) val result = collector.getFramesDelay(0, TimeUnit.SECONDS.toNanos(1)) assertEquals(-1.0, result.delaySeconds) diff --git a/sentry-android-ndk/build.gradle.kts b/sentry-android-ndk/build.gradle.kts index 9fd7dce011a..dbfeeec5550 100644 --- a/sentry-android-ndk/build.gradle.kts +++ b/sentry-android-ndk/build.gradle.kts @@ -45,8 +45,6 @@ android { lint { warningsAsErrors = true checkDependencies = true - // TODO: Re-enable once the SDK_INT checks made obsolete by minSdk 24 are removed. - disable += "ObsoleteSdkInt" // We run a full lint analysis as build part in CI, so skip vital checks for assemble tasks. checkReleaseBuilds = false diff --git a/sentry-android-replay/build.gradle.kts b/sentry-android-replay/build.gradle.kts index 11e47e113fb..7794e32c55e 100644 --- a/sentry-android-replay/build.gradle.kts +++ b/sentry-android-replay/build.gradle.kts @@ -56,8 +56,6 @@ android { lint { warningsAsErrors = true checkDependencies = true - // TODO: Re-enable once the SDK_INT checks made obsolete by minSdk 24 are removed. - disable += "ObsoleteSdkInt" // We run a full lint analysis as build part in CI, so skip vital checks for assemble tasks. checkReleaseBuilds = false diff --git a/sentry-android-replay/src/main/java/io/sentry/android/replay/util/Views.kt b/sentry-android-replay/src/main/java/io/sentry/android/replay/util/Views.kt index cacd2b1c217..a70dafbc3b9 100644 --- a/sentry-android-replay/src/main/java/io/sentry/android/replay/util/Views.kt +++ b/sentry-android-replay/src/main/java/io/sentry/android/replay/util/Views.kt @@ -1,7 +1,6 @@ package io.sentry.android.replay.util import android.annotation.SuppressLint -import android.annotation.TargetApi import android.graphics.Point import android.graphics.Rect import android.graphics.drawable.BitmapDrawable @@ -105,8 +104,6 @@ internal fun View.isVisibleToUser(): Pair { return false to null } -@SuppressLint("ObsoleteSdkInt", "UseRequiresApi") -@TargetApi(21) internal fun Drawable?.isMaskable(): Boolean { // TODO: maybe find a way how to check if the drawable is coming from the apk or loaded from // network diff --git a/sentry-android-replay/src/main/java/io/sentry/android/replay/video/SimpleVideoEncoder.kt b/sentry-android-replay/src/main/java/io/sentry/android/replay/video/SimpleVideoEncoder.kt index b1e3cd20513..e8b77b0994c 100644 --- a/sentry-android-replay/src/main/java/io/sentry/android/replay/video/SimpleVideoEncoder.kt +++ b/sentry-android-replay/src/main/java/io/sentry/android/replay/video/SimpleVideoEncoder.kt @@ -349,8 +349,6 @@ internal fun shouldUseSoftwareCanvas(): Boolean = Build.HARDWARE.contains("goldfish", ignoreCase = true) || Build.HARDWARE.contains("ranchu", ignoreCase = true) -@SuppressLint("UseRequiresApi") -@TargetApi(24) internal data class MuxerConfig( val file: File, var recordingWidth: Int,