Skip to content

Commit c6c5a17

Browse files
dulmandakhfacebook-github-bot
authored andcommitted
DatePickerDialogModule supports only FragmentActivity (#23371)
Summary: Now RN has only ReactActivity which extends AppCompatActivity, subclass of FragmentActivity, therefore no need to check if activity is FragmentActivity or not. This PR changes DatePickerDialogModule to work only with FragmentActivity. Also DialogFragment from Android is deprecated in API 28, and recommends to use DialogFragment from Support Library. Excerpt from DialogFragment documentation. > **This class was deprecated in API level 28.** > Use the Support Library DialogFragment for consistent behavior across all devices and access to Lifecycle. **BREAKING CHANGE**: Brown field apps must extend FragmentActivity or its subclasses [Android] [Changed] - DatePickerDialogModule supports only FragmentActivity Pull Request resolved: #23371 Differential Revision: D14030765 Pulled By: cpojer fbshipit-source-id: 3a1811102cf68b82c139f0e20b2fc8dab5d98b69
1 parent be361d0 commit c6c5a17

File tree

3 files changed

+22
-89
lines changed

3 files changed

+22
-89
lines changed

ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogFragment.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
import android.app.DatePickerDialog;
1717
import android.app.DatePickerDialog.OnDateSetListener;
1818
import android.app.Dialog;
19-
import android.app.DialogFragment;
2019
import android.content.Context;
2120
import android.content.DialogInterface;
2221
import android.content.DialogInterface.OnDismissListener;
2322
import android.os.Build;
2423
import android.os.Bundle;
24+
import android.support.v4.app.DialogFragment;
2525
import android.widget.DatePicker;
2626

2727
@SuppressLint("ValidFragment")

ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogModule.java

+21-39
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,20 @@
77

88
package com.facebook.react.modules.datepicker;
99

10-
import android.app.Activity;
10+
1111
import android.app.DatePickerDialog.OnDateSetListener;
12-
import android.app.DialogFragment;
13-
import android.app.FragmentManager;
1412
import android.content.DialogInterface;
1513
import android.content.DialogInterface.OnDismissListener;
1614
import android.os.Bundle;
15+
import android.support.v4.app.DialogFragment;
16+
import android.support.v4.app.FragmentActivity;
17+
import android.support.v4.app.FragmentManager;
1718
import android.widget.DatePicker;
1819
import com.facebook.react.bridge.*;
1920
import com.facebook.react.common.annotations.VisibleForTesting;
2021
import com.facebook.react.module.annotations.ReactModule;
2122

23+
import javax.annotation.Nonnull;
2224
import javax.annotation.Nullable;
2325

2426
/**
@@ -46,7 +48,7 @@ public DatePickerDialogModule(ReactApplicationContext reactContext) {
4648
}
4749

4850
@Override
49-
public String getName() {
51+
public @Nonnull String getName() {
5052
return DatePickerDialogModule.FRAGMENT_TAG;
5153
}
5254

@@ -110,48 +112,28 @@ public void onDismiss(DialogInterface dialog) {
110112
*/
111113
@ReactMethod
112114
public void open(@Nullable final ReadableMap options, Promise promise) {
113-
Activity activity = getCurrentActivity();
115+
FragmentActivity activity = (FragmentActivity) getCurrentActivity();
114116
if (activity == null) {
115117
promise.reject(
116118
ERROR_NO_ACTIVITY,
117119
"Tried to open a DatePicker dialog while not attached to an Activity");
118120
return;
119121
}
120-
// We want to support both android.app.Activity and the pre-Honeycomb FragmentActivity
121-
// (for apps that use it for legacy reasons). This unfortunately leads to some code duplication.
122-
if (activity instanceof android.support.v4.app.FragmentActivity) {
123-
android.support.v4.app.FragmentManager fragmentManager =
124-
((android.support.v4.app.FragmentActivity) activity).getSupportFragmentManager();
125-
android.support.v4.app.DialogFragment oldFragment =
126-
(android.support.v4.app.DialogFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
127-
if (oldFragment != null) {
128-
oldFragment.dismiss();
129-
}
130-
SupportDatePickerDialogFragment fragment = new SupportDatePickerDialogFragment();
131-
if (options != null) {
132-
final Bundle args = createFragmentArguments(options);
133-
fragment.setArguments(args);
134-
}
135-
final DatePickerDialogListener listener = new DatePickerDialogListener(promise);
136-
fragment.setOnDismissListener(listener);
137-
fragment.setOnDateSetListener(listener);
138-
fragment.show(fragmentManager, FRAGMENT_TAG);
139-
} else {
140-
FragmentManager fragmentManager = activity.getFragmentManager();
141-
DialogFragment oldFragment = (DialogFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
142-
if (oldFragment != null) {
143-
oldFragment.dismiss();
144-
}
145-
DatePickerDialogFragment fragment = new DatePickerDialogFragment();
146-
if (options != null) {
147-
final Bundle args = createFragmentArguments(options);
148-
fragment.setArguments(args);
149-
}
150-
final DatePickerDialogListener listener = new DatePickerDialogListener(promise);
151-
fragment.setOnDismissListener(listener);
152-
fragment.setOnDateSetListener(listener);
153-
fragment.show(fragmentManager, FRAGMENT_TAG);
122+
123+
FragmentManager fragmentManager = activity.getSupportFragmentManager();
124+
DialogFragment oldFragment = (DialogFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
125+
if (oldFragment != null) {
126+
oldFragment.dismiss();
127+
}
128+
DatePickerDialogFragment fragment = new DatePickerDialogFragment();
129+
if (options != null) {
130+
final Bundle args = createFragmentArguments(options);
131+
fragment.setArguments(args);
154132
}
133+
final DatePickerDialogListener listener = new DatePickerDialogListener(promise);
134+
fragment.setOnDismissListener(listener);
135+
fragment.setOnDateSetListener(listener);
136+
fragment.show(fragmentManager, FRAGMENT_TAG);
155137
}
156138

157139
private Bundle createFragmentArguments(ReadableMap options) {

ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/SupportDatePickerDialogFragment.java

-49
This file was deleted.

0 commit comments

Comments
 (0)