Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DialogModule supports only FragmentActivity #23365

Closed
wants to merge 18 commits into from

Conversation

dulmandakh
Copy link
Contributor

@dulmandakh dulmandakh commented Feb 11, 2019

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 DialogModule 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.

Changelog

[Android] [Changed] - DialogModule supports only FragmentActivity

Test Plan

CI is green, and works as usual.

@facebook-github-bot facebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Contributor A React Native contributor. Partner labels Feb 11, 2019
@dulmandakh
Copy link
Contributor Author

@mdvacca could you please look at test failure?

@hey99xx
Copy link

hey99xx commented Feb 11, 2019

Assuming DialogModule would only be used by new RN apps is a wrong assumption. Casting getCurrentActivity() to ReactActivity would mean that any existing activity that is not a subclass of ReactActivity in brownfield apps would no longer able to use a RN dialog.

@dulmandakh
Copy link
Contributor Author

@hey99xx changed to use AppCompatActivity, but DialogModuleTest is failing. I have very little experience with Java tests. Could you please help with this?

@hey99xx
Copy link

hey99xx commented Feb 11, 2019

I still think this PR is an issue. In my company we have a CompanyReactActivity which displays ReactRootViews in fragments. CompanyReactActivity extends from CompanyActivity that has a bunch of company specific onCreate, onDestroy etc. code, and that extends from FragmentActivity. We have never needed to use AppCompatActivity to host RN, and I don't see why the switch is even necessary.

@dulmandakh
Copy link
Contributor Author

@hey99xx I think that it's safe to drop plain Activity support

@hey99xx
Copy link

hey99xx commented Feb 11, 2019

While you could obviously cast to FragmentActivity and resolve my worry, another brownfield app may be using a plain Activity and this would still be an issue for them.

I think the intention behind allowing multiple fragment types was beneficial to integrating RN with brownfield apps, I don't know why you'd want to drop that now.

@dulmandakh
Copy link
Contributor Author

@hey99xx Google recommends to extend AppCompatActivity for Android apps, and thought that it's better to drop support for plain Activity. Thanks for you suggestions, I don't have experience with brownfield apps. Now, it uses FragmentActivity.

@dulmandakh
Copy link
Contributor Author

@hey99xx I'll be requesting your review when I make such changes. Thank you

@hey99xx
Copy link

hey99xx commented Feb 11, 2019

Btw I think some of RN widgets are not ready to extend from AppCompat classes in couple line changes, they cause runtime issues on old Android versions. I've described what goes wrong in #22885 and made a comment in one of your other PRs.

@dulmandakh
Copy link
Contributor Author

dulmandakh commented Feb 11, 2019

@hey99xx I saw the issue, and though that it would be best to have only FragmentActivity and it's subclasses supported, then remove plain Activity support. Therefore, change how contexts works. Otherwise, we'll have duplicate code to support both FragmentActivity and plain Activity which doubles error surface. Please correct me if wrong.

@dulmandakh dulmandakh changed the title cleanup DialogModule DialogModule supports only FragmentActivity Feb 11, 2019
@dulmandakh
Copy link
Contributor Author

Also found that DialogFragment is deprecated in API 28, and recommends to use DialogFragment from Support Library, which this PR does.

Copy link
Contributor

@facebook-github-bot facebook-github-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mdvacca has imported this pull request. If you are a Facebook employee, you can view this diff on Phabricator.

@mdvacca
Copy link
Contributor

mdvacca commented Feb 11, 2019

The land failed because there is a test that is using activity and can not be casted to FragmentActivity:

java.lang.ClassCastException: android.app.Activity cannot be cast to android.support.v4.app.FragmentActivity
	at com.facebook.react.modules.dialog.DialogModule.getFragmentManagerHelper(DialogModule.java:244)
	at com.facebook.react.modules.dialog.DialogModule.onHostResume(DialogModule.java:176)
	at com.facebook.react.bridge.ReactContext$1.run(ReactContext.java:159)

@mdvacca
Copy link
Contributor

mdvacca commented Feb 11, 2019

This will be a breaking change, should we deprecate? communicate about this change and then change this code?

what do you think @cpojer , @hramos ?

@cpojer
Copy link
Contributor

cpojer commented Feb 11, 2019

@mdvacca how many people do you think this will be breaking for? If the answer is at most ~8%, then I'd say let's ship this change now and ask them to upgrade.

@cpojer
Copy link
Contributor

cpojer commented Feb 12, 2019

@mdvacca if it works at FB, let's land it and move forward. We need to do this eventually anyway.

@cpojer
Copy link
Contributor

cpojer commented Mar 18, 2019

@dulmandakh can you rebase this?

@cpojer
Copy link
Contributor

cpojer commented Mar 19, 2019

@dulmandakh seems like this is failing android CI. Can you fix?

@cpojer
Copy link
Contributor

cpojer commented Apr 8, 2019

Let's see if this works.

Copy link
Contributor

@facebook-github-bot facebook-github-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cpojer is landing this pull request. If you are a Facebook employee, you can view this diff on Phabricator.

@cpojer
Copy link
Contributor

cpojer commented Apr 26, 2019

@dulmandakh we are getting Summary: No build file at third-party/android/support/v7/appcompat-orig/BUCK when resolving target //third-party/android/support/v7/appcompat-orig:appcompat., so it seems we don't have that target.

@dulmandakh
Copy link
Contributor Author

yep, it's AndroidX now. I'll rebase and fix the issue. Almost forgot this PR 😄

Copy link
Contributor

@facebook-github-bot facebook-github-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cpojer is landing this pull request. If you are a Facebook employee, you can view this diff on Phabricator.

@react-native-bot
Copy link
Collaborator

This pull request was successfully merged by @dulmandakh in 243070a.

When will my fix make it into a release? | Upcoming Releases

@react-native-bot react-native-bot added Merged This PR has been merged. and removed Blocked on FB labels Apr 26, 2019
@dulmandakh dulmandakh deleted the dialog-cleanup branch October 15, 2019 05:14
facebook-github-bot pushed a commit that referenced this pull request Jun 6, 2022
Summary:
This sync includes the following changes:
- **[dd4950c90](facebook/react@dd4950c90 )**: [Flight] Implement useId hook ([#24172](facebook/react#24172)) //<Josh Story>//
- **[26a5b3c7f](facebook/react@26a5b3c7f )**: Explicitly set `highWaterMark` to 0 for `ReadableStream` ([#24641](facebook/react#24641)) //<Josh Larson>//
- **[aec575914](facebook/react@aec575914 )**: [Fizz] Send errors down to client ([#24551](facebook/react#24551)) //<Josh Story>//
- **[a2766387e](facebook/react@a2766387e )**: [Fizz] Improve text separator byte efficiency ([#24630](facebook/react#24630)) //<Josh Story>//
- **[f7860538a](facebook/react@f7860538a )**: Fix typo in useSyncExternalStore main entry point error ([#24631](facebook/react#24631)) //<François Chalifour>//
- **[1bed20731](facebook/react@1bed20731 )**: Add a module map option to the Webpack Flight Client ([#24629](facebook/react#24629)) //<Sebastian Markbåge>//
- **[b2763d3ea](facebook/react@b2763d3ea )**: Move hydration code out of normal Suspense path ([#24532](facebook/react#24532)) //<Andrew Clark>//
- **[357a61324](facebook/react@357a61324 )**: [DevTools][Transition Tracing] Added support for Suspense Boundaries ([#23365](facebook/react#23365)) //<Luna Ruan>//
- **[2c8a1452b](facebook/react@2c8a1452b )**: Fix ignored setState in Safari when iframe is touched ([#24459](facebook/react#24459)) //<dan>//
- **[62662633d](facebook/react@62662633d )**: Remove enableFlipOffscreenUnhideOrder ([#24545](facebook/react#24545)) //<Ricky>//
- **[34da5aa69](facebook/react@34da5aa69 )**: Only treat updates to lazy as a new mount in legacy mode ([#24530](facebook/react#24530)) //<Ricky>//
- **[46a6d77e3](facebook/react@46a6d77e3 )**: Unify JSResourceReference Interfaces ([#24507](facebook/react#24507)) //<Timothy Yung>//
- **[6cbf0f7fa](facebook/react@6cbf0f7fa )**: Fork ReactSymbols ([#24484](facebook/react#24484)) //<Ricky>//
- **[a10a9a6b5](facebook/react@a10a9a6b5 )**: Add test for hiding children after layout destroy ([#24483](facebook/react#24483)) //<Ricky>//
- **[b4eb0ad71](facebook/react@b4eb0ad71 )**: Do not replay erroring beginWork with invokeGuardedCallback when suspended or previously errored ([#24480](facebook/react#24480)) //<Josh Story>//
- **[99eef9e2d](facebook/react@99eef9e2d )**: Hide children of Offscreen after destroy effects ([#24446](facebook/react#24446)) //<Ricky>//
- **[ce1386028](facebook/react@ce1386028 )**: Remove enablePersistentOffscreenHostContainer flag ([#24460](facebook/react#24460)) //<Andrew Clark>//
- **[72b7462fe](facebook/react@72b7462fe )**: Bump local package.json versions for 18.1 release ([#24447](facebook/react#24447)) //<Andrew Clark>//
- **[22edb9f77](facebook/react@22edb9f77 )**: React `version` field should match package.json ([#24445](facebook/react#24445)) //<Andrew Clark>//
- **[6bf3deef5](facebook/react@6bf3deef5 )**: Upgrade react-shallow-renderer to support react 18 ([#24442](facebook/react#24442)) //<Michael サイトー 中村 Bashurov>//

Changelog:
[General][Changed] - React Native sync for revisions bd4784c...d300ceb

jest_e2e[run_all_tests]

Reviewed By: cortinico, kacieb

Differential Revision: D36874368

fbshipit-source-id: c0ee015f4ef2fa56e57f7a1f6bc37dd05c949877
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Contributor A React Native contributor. Merged This PR has been merged. Platform: Android Android applications.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants