Skip to content

Commit 2a58846

Browse files
authored
fix(Android): fix build deprecations (#2116)
## Description This PR intents to fix some "Deprecated in Java" warnings when building on android. I decided not to suppress warnings manually when it is inescapable to avoid the warning. Fixes #2018 ## Changes - replaced deprecated targetElavation with elevation - adjusted usage of porter duff color filter - calculating header top inset using recent method if android API >= 30 (the warning persists as the previous APIs still require deprecated method) - fixed guarded runnable deprecated warning - removed unused import ## Screenshots / GIFs ### Before ``` > Task :react-native-screens:compileDebugKotlin 'compileDebugJavaWithJavac' task (current target is 11) and 'compileDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt:83:22 'constructor GuardedRunnable(ReactContext!)' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt:65:27 'setter for targetElevation: Float' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt:128:27 'setter for targetElevation: Float' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt:86:34 'getter for systemWindowInsetTop: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt:231:37 'setColorFilter(Int, PorterDuff.Mode): Unit' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:63:22 'constructor GuardedRunnable(ReactContext!)' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:108:22 'constructor GuardedRunnable(ReactContext!)' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:135:47 'replaceSystemWindowInsets(Int, Int, Int, Int): WindowInsetsCompat' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:136:51 'getter for systemWindowInsetLeft: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:138:51 'getter for systemWindowInsetRight: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:139:51 'getter for systemWindowInsetBottom: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt:100:22 Parameter 'view' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt:100:43 Parameter 'placeholder' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt:147:43 Parameter 'flag' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt:6:44 'RCTEventEmitter' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt:11:42 Parameter 'width' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt:11:54 Parameter 'height' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt:11:67 Parameter 'headerHeight' is never used ``` ### After ``` > Task :react-native-screens:compileDebugKotlin 'compileDebugJavaWithJavac' task (current target is 11) and 'compileDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt:90:34 'getter for systemWindowInsetTop: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:135:47 'replaceSystemWindowInsets(Int, Int, Int, Int): WindowInsetsCompat' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:136:51 'getter for systemWindowInsetLeft: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:138:51 'getter for systemWindowInsetRight: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt:139:51 'getter for systemWindowInsetBottom: Int' is deprecated. Deprecated in Java w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt:100:22 Parameter 'view' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt:100:43 Parameter 'placeholder' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt:147:43 Parameter 'flag' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt:11:42 Parameter 'width' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt:11:54 Parameter 'height' is never used w: file:///Users/alexduzy/Projects/react-native-screens/Example/node_modules/react-native-screens/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt:11:67 Parameter 'headerHeight' is never used ``` ## Test code and steps to reproduce - build android app to compare deprecation warnings quantity - run the example app and see wether the header shadow, backButton color and top inset behave correctly ## Checklist - [ ] Ensured that CI passes
1 parent 6274fb7 commit 2a58846

File tree

5 files changed

+12
-8
lines changed

5 files changed

+12
-8
lines changed

android/src/main/java/com/swmansion/rnscreens/Screen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class Screen(context: ReactContext?) : FabricEnabledViewGroup(context) {
8080
private fun updateScreenSizePaper(width: Int, height: Int) {
8181
val reactContext = context as ReactContext
8282
reactContext.runOnNativeModulesQueueThread(
83-
object : GuardedRunnable(reactContext) {
83+
object : GuardedRunnable(reactContext.exceptionHandler) {
8484
override fun runGuarded() {
8585
reactContext
8686
.getNativeModule(UIManagerModule::class.java)

android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
6262

6363
override fun setToolbarShadowHidden(hidden: Boolean) {
6464
if (isToolbarShadowHidden != hidden) {
65-
appBarLayout?.targetElevation = if (hidden) 0f else PixelUtil.toPixelFromDIP(4f)
65+
appBarLayout?.elevation = if (hidden) 0f else PixelUtil.toPixelFromDIP(4f)
66+
appBarLayout?.stateListAnimator = null
6667
isToolbarShadowHidden = hidden
6768
}
6869
}
@@ -125,7 +126,7 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
125126

126127
view?.addView(appBarLayout)
127128
if (isToolbarShadowHidden) {
128-
appBarLayout?.targetElevation = 0f
129+
appBarLayout?.elevation = 0f
129130
}
130131
toolbar?.let { appBarLayout?.addView(recycleView(it)) }
131132
setHasOptionsMenu(true)

android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package com.swmansion.rnscreens
22

33
import android.content.Context
44
import android.graphics.PorterDuff
5+
import android.graphics.PorterDuffColorFilter
56
import android.os.Build
67
import android.text.TextUtils
78
import android.util.TypedValue
89
import android.view.Gravity
910
import android.view.View.OnClickListener
1011
import android.view.ViewGroup
12+
import android.view.WindowInsets
1113
import android.widget.ImageView
1214
import android.widget.TextView
1315
import androidx.appcompat.app.AppCompatActivity
@@ -82,7 +84,9 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
8284
// we want to save the top inset before the status bar can be hidden, which would resolve in
8385
// inset being 0
8486
if (headerTopInset == null) {
85-
headerTopInset = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
87+
headerTopInset = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
88+
rootWindowInsets.getInsets(WindowInsets.Type.systemBars()).top
89+
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
8690
rootWindowInsets.systemWindowInsetTop
8791
else
8892
// Hacky fallback for old android. Before Marshmallow, the status bar height was always 25
@@ -228,7 +232,7 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
228232

229233
// color
230234
if (tintColor != 0) {
231-
toolbar.navigationIcon?.setColorFilter(tintColor, PorterDuff.Mode.SRC_ATOP)
235+
toolbar.navigationIcon?.colorFilter = PorterDuffColorFilter(tintColor, PorterDuff.Mode.SRC_ATOP)
232236
}
233237

234238
// subviews

android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ object ScreenWindowTraits {
6060
val animated = screenForAnimated?.isStatusBarAnimated ?: false
6161

6262
UiThreadUtil.runOnUiThread(
63-
object : GuardedRunnable(context) {
63+
object : GuardedRunnable(context.exceptionHandler) {
6464
override fun runGuarded() {
6565
val window = activity.window
6666
val curColor: Int = window.statusBarColor
@@ -105,7 +105,7 @@ object ScreenWindowTraits {
105105
val screenForTranslucent = findScreenForTrait(screen, WindowTraits.TRANSLUCENT)
106106
val translucent = screenForTranslucent?.isStatusBarTranslucent ?: false
107107
UiThreadUtil.runOnUiThread(
108-
object : GuardedRunnable(context) {
108+
object : GuardedRunnable(context.exceptionHandler) {
109109
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
110110
override fun runGuarded() {
111111
// If the status bar is translucent hook into the window insets calculations

android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.swmansion.rnscreens.events
33
import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
55
import com.facebook.react.uimanager.events.Event
6-
import com.facebook.react.uimanager.events.RCTEventEmitter
76

87
class HeaderHeightChangeEvent(
98
surfaceId: Int,

0 commit comments

Comments
 (0)