Skip to content

Commit 612a197

Browse files
feat(android): ✨ enables theme overlays for material 3 date pickers (#961)
* feat: ✨ enables theme overlays for material 3 date pickers * fix: remove force unwrap --------- Co-authored-by: Vojtech Novak <[email protected]>
1 parent d0ca9e0 commit 612a197

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.reactcommunity.rndatetimepicker
22

33
import android.content.DialogInterface
44
import android.os.Bundle
5+
import android.util.TypedValue
56
import androidx.fragment.app.FragmentManager
67
import com.facebook.react.bridge.Promise
78
import com.facebook.react.bridge.ReactApplicationContext
@@ -13,6 +14,7 @@ import com.google.android.material.datepicker.DateValidatorPointBackward
1314
import com.google.android.material.datepicker.DateValidatorPointForward
1415
import com.google.android.material.datepicker.MaterialDatePicker
1516
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener
17+
import com.google.android.material.R
1618
import java.util.Calendar
1719

1820
class RNMaterialDatePicker(
@@ -97,14 +99,25 @@ class RNMaterialDatePicker(
9799

98100
private fun setFullscreen() {
99101
val isFullscreen = args.getBoolean(RNConstants.ARG_FULLSCREEN)
100-
101102
if (isFullscreen) {
102-
builder.setTheme(com.google.android.material.R.style.ThemeOverlay_Material3_MaterialCalendar_Fullscreen)
103+
val themeId = obtainMaterialThemeOverlayId(R.attr.materialCalendarFullscreenTheme)
104+
builder.setTheme(themeId)
103105
} else {
104-
builder.setTheme(com.google.android.material.R.style.ThemeOverlay_Material3_MaterialCalendar)
106+
val themeId = obtainMaterialThemeOverlayId(R.attr.materialCalendarTheme)
107+
builder.setTheme(themeId)
105108
}
106109
}
107110

111+
private fun obtainMaterialThemeOverlayId(resId: Int): Int {
112+
val theme = reactContext.currentActivity?.theme ?: run {
113+
return resId
114+
}
115+
116+
val typedValue = TypedValue()
117+
theme.resolveAttribute(resId, typedValue, true)
118+
return typedValue.resourceId
119+
}
120+
108121
private fun addListeners() {
109122
val listeners = Listeners()
110123
datePicker!!.addOnPositiveButtonClickListener(listeners)

0 commit comments

Comments
 (0)