Skip to content

Commit 39a1a61

Browse files
chaits98Chaitanya Anand
and
Chaitanya Anand
authored
fix: call lifecycle addObserver on main thread (#347)
* addObserver crash fix * addObserver crash fix Co-authored-by: Chaitanya Anand <[email protected]>
1 parent 45fd7bf commit 39a1a61

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

android/src/main/java/com/reactcommunity/rndatetimepicker/RNDatePickerDialogModule.java

+18-13
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,16 @@ public void dismiss(Promise promise) {
117117
* dismiss, year, month and date are undefined.
118118
*/
119119
@ReactMethod
120-
public void open(@Nullable final ReadableMap options, Promise promise) {
120+
public void open(@Nullable final ReadableMap options, final Promise promise) {
121121
FragmentActivity activity = (FragmentActivity) getCurrentActivity();
122122
if (activity == null) {
123123
promise.reject(
124-
RNConstants.ERROR_NO_ACTIVITY,
125-
"Tried to open a DatePicker dialog while not attached to an Activity");
124+
RNConstants.ERROR_NO_ACTIVITY,
125+
"Tried to open a DatePicker dialog while not attached to an Activity");
126126
return;
127127
}
128128

129-
FragmentManager fragmentManager = activity.getSupportFragmentManager();
129+
final FragmentManager fragmentManager = activity.getSupportFragmentManager();
130130
final RNDatePickerDialogFragment oldFragment = (RNDatePickerDialogFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
131131

132132
if (oldFragment != null && options != null) {
@@ -140,17 +140,22 @@ public void run() {
140140
return;
141141
}
142142

143-
RNDatePickerDialogFragment fragment = new RNDatePickerDialogFragment();
143+
UiThreadUtil.runOnUiThread(new Runnable() {
144+
@Override
145+
public void run() {
146+
RNDatePickerDialogFragment fragment = new RNDatePickerDialogFragment();
144147

145-
if (options != null) {
146-
fragment.setArguments(createFragmentArguments(options));
147-
}
148+
if (options != null) {
149+
fragment.setArguments(createFragmentArguments(options));
150+
}
148151

149-
final DatePickerDialogListener listener = new DatePickerDialogListener(promise);
150-
fragment.setOnDismissListener(listener);
151-
fragment.setOnDateSetListener(listener);
152-
fragment.setOnNeutralButtonActionListener(listener);
153-
fragment.show(fragmentManager, FRAGMENT_TAG);
152+
final DatePickerDialogListener listener = new DatePickerDialogListener(promise);
153+
fragment.setOnDismissListener(listener);
154+
fragment.setOnDateSetListener(listener);
155+
fragment.setOnNeutralButtonActionListener(listener);
156+
fragment.show(fragmentManager, FRAGMENT_TAG);
157+
}
158+
});
154159
}
155160

156161
private Bundle createFragmentArguments(ReadableMap options) {

android/src/main/java/com/reactcommunity/rndatetimepicker/RNTimePickerDialogModule.java

+16-11
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void dismiss(Promise promise) {
9292
}
9393

9494
@ReactMethod
95-
public void open(@Nullable final ReadableMap options, Promise promise) {
95+
public void open(@Nullable final ReadableMap options, final Promise promise) {
9696

9797
FragmentActivity activity = (FragmentActivity) getCurrentActivity();
9898
if (activity == null) {
@@ -103,7 +103,7 @@ public void open(@Nullable final ReadableMap options, Promise promise) {
103103
}
104104
// We want to support both android.app.Activity and the pre-Honeycomb FragmentActivity
105105
// (for apps that use it for legacy reasons). This unfortunately leads to some code duplication.
106-
FragmentManager fragmentManager = activity.getSupportFragmentManager();
106+
final FragmentManager fragmentManager = activity.getSupportFragmentManager();
107107
final RNTimePickerDialogFragment oldFragment = (RNTimePickerDialogFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
108108

109109
if (oldFragment != null && options != null) {
@@ -117,17 +117,22 @@ public void run() {
117117
return;
118118
}
119119

120-
RNTimePickerDialogFragment fragment = new RNTimePickerDialogFragment();
120+
UiThreadUtil.runOnUiThread(new Runnable() {
121+
@Override
122+
public void run() {
123+
RNTimePickerDialogFragment fragment = new RNTimePickerDialogFragment();
121124

122-
if (options != null) {
123-
fragment.setArguments(createFragmentArguments(options));
124-
}
125+
if (options != null) {
126+
fragment.setArguments(createFragmentArguments(options));
127+
}
125128

126-
final TimePickerDialogListener listener = new TimePickerDialogListener(promise);
127-
fragment.setOnDismissListener(listener);
128-
fragment.setOnTimeSetListener(listener);
129-
fragment.setOnNeutralButtonActionListener(listener);
130-
fragment.show(fragmentManager, FRAGMENT_TAG);
129+
final TimePickerDialogListener listener = new TimePickerDialogListener(promise);
130+
fragment.setOnDismissListener(listener);
131+
fragment.setOnTimeSetListener(listener);
132+
fragment.setOnNeutralButtonActionListener(listener);
133+
fragment.show(fragmentManager, FRAGMENT_TAG);
134+
}
135+
});
131136
}
132137

133138
private Bundle createFragmentArguments(ReadableMap options) {

0 commit comments

Comments
 (0)