Skip to content

Commit

Permalink
Set iOS AppState to inactive when app is launching (#37690)
Browse files Browse the repository at this point in the history
Summary:
When an iOS app launches, the current `AppStateStatus` that is returned is `"unknown"`.
However, `RCTSharedApplication().applicationState` returns `UIApplicationStateInactive` - which makes sense since the app is still showing its launch screen.
I suggest to return `"inactive"` instead of `"unknown"`, since it makes more sense and `"unknown"` is not mentioned in the [official documentation](https://reactnative.dev/docs/appstate).

I also edited the annotation for the `"inactive"` status type to make it more accurate.

bypass-github-export-checks

## Changelog:

[IOS] [CHANGED] - Set initial AppState status to "inactive" instead of "unknown"

Pull Request resolved: #37690

Test Plan:
I played a bit with the `rn-tester` app to display the `AppStateExample` [component](https://github.com/facebook/react-native/blob/main/packages/rn-tester/js/examples/AppState/AppStateExample.js). I did not manage to display its content, but I managed to render it and log from [its render function](https://github.com/facebook/react-native/blob/main/packages/rn-tester/js/examples/AppState/AppStateExample.js#L84).
This is what I log in the `render` function:
![image](https://github.com/facebook/react-native/assets/8973379/76212f48-6d2e-4b14-b2a4-72c58e39bf3d)

Here is the log I saw before the change:
![image](https://github.com/facebook/react-native/assets/8973379/f3c56047-dfca-4bad-b676-0fc79b990dd9)

and after the change:
![image](https://github.com/facebook/react-native/assets/8973379/8de84b31-69a7-4547-b251-483ddde68e25)

Reviewed By: cortinico

Differential Revision: D46729548

Pulled By: cipolleschi

fbshipit-source-id: 18d2d606e0b77306811bd898b28858746c713e12
  • Loading branch information
louiszawadzki authored and facebook-github-bot committed Jun 15, 2023
1 parent 09c9541 commit 54a5ff9
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/react-native/Libraries/AppState/AppState.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {NativeEventSubscription} from '../EventEmitter/RCTNativeAppEventEmitter'
* App States
* active - The app is running in the foreground
* background - The app is running in the background. The user is either in another app or on the home screen
* inactive [iOS] - This is a transition state that currently never happens for typical React Native apps.
* inactive [iOS] - This is a transition state that happens when the app launches, is asking for permissions or when a call or SMS message is received.
* unknown [iOS] - Initial value until the current app state is determined
* extension [iOS] - The app is running as an app extension
*
Expand Down
6 changes: 5 additions & 1 deletion packages/react-native/React/CoreModules/RCTAppState.mm
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
static NSDictionary *states;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
states = @{@(UIApplicationStateActive) : @"active", @(UIApplicationStateBackground) : @"background"};
states = @{
@(UIApplicationStateActive) : @"active",
@(UIApplicationStateBackground) : @"background",
@(UIApplicationStateInactive) : @"inactive"
};
});

if (RCTRunningInAppExtension()) {
Expand Down

0 comments on commit 54a5ff9

Please sign in to comment.