From f571164dd63e16f26637f2ad3714fe92b75a4a10 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Wed, 15 May 2019 21:54:29 -0400 Subject: [PATCH 1/5] [TM] Add spec for Linking --- Libraries/Linking/Linking.js | 14 ++++++------- Libraries/Linking/NativeLinking.js | 33 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 Libraries/Linking/NativeLinking.js diff --git a/Libraries/Linking/Linking.js b/Libraries/Linking/Linking.js index 933e23706084..eea6b207457b 100644 --- a/Libraries/Linking/Linking.js +++ b/Libraries/Linking/Linking.js @@ -12,15 +12,11 @@ const InteractionManager = require('../Interaction/InteractionManager'); const NativeEventEmitter = require('../EventEmitter/NativeEventEmitter'); -const NativeModules = require('../BatchedBridge/NativeModules'); const Platform = require('../Utilities/Platform'); const invariant = require('invariant'); -const LinkingManager = - Platform.OS === 'android' - ? NativeModules.IntentAndroid - : NativeModules.LinkingManager; +const LinkingManager = require('./NativeLinking').default; /** * `Linking` gives you a general interface to interact with both incoming @@ -103,10 +99,12 @@ class Linking extends NativeEventEmitter { * See https://facebook.github.io/react-native/docs/linking.html#sendintent */ sendIntent( - action: String, - extras?: [{key: string, value: string | number | boolean}], + action: string, + extras?: Array<{key: string, value: string | number | boolean}>, ) { - return LinkingManager.sendIntent(action, extras); + if (Platform.OS === 'android') { + return LinkingManager.sendIntent(action, extras); + } } _validateURL(url: string) { diff --git a/Libraries/Linking/NativeLinking.js b/Libraries/Linking/NativeLinking.js new file mode 100644 index 000000000000..53475a9f8b41 --- /dev/null +++ b/Libraries/Linking/NativeLinking.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + * @format + */ + +'use strict'; + +import type {TurboModule} from 'RCTExport'; +import * as TurboModuleRegistry from 'TurboModuleRegistry'; +import Platform from 'Platform'; + +export interface Spec extends TurboModule { + // Common interface + +getInitialURL: () => Promise; + +canOpenURL: (url: string) => Promise; + +openURL: (url: string) => Promise; + +openSettings: () => Promise; + + // Android only + +sendIntent: ( + action: string, + extras: ?Array<{key: string, value: string | number | boolean}>, + ) => Promise; +} + +const moduleName = + Platform.OS === 'ios' ? 'NativeLinkingManager' : 'NativeIntentAndroid'; +export default TurboModuleRegistry.getEnforcing(moduleName); From 6f7110f25b7f79213b16540569172daeb68fdd99 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Wed, 15 May 2019 22:13:24 -0400 Subject: [PATCH 2/5] Handle event emitters --- Libraries/Linking/NativeLinking.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Libraries/Linking/NativeLinking.js b/Libraries/Linking/NativeLinking.js index 53475a9f8b41..e441bd6402c4 100644 --- a/Libraries/Linking/NativeLinking.js +++ b/Libraries/Linking/NativeLinking.js @@ -26,8 +26,11 @@ export interface Spec extends TurboModule { action: string, extras: ?Array<{key: string, value: string | number | boolean}>, ) => Promise; + + // RCTEventEmitter + +addListener: (eventName: string) => void; + +removeListeners: (count: number) => void; } -const moduleName = - Platform.OS === 'ios' ? 'NativeLinkingManager' : 'NativeIntentAndroid'; +const moduleName = Platform.OS === 'ios' ? 'LinkingManager' : 'IntentAndroid'; export default TurboModuleRegistry.getEnforcing(moduleName); From a36f4aa2f7e9da79eed8cdc6b7cbf1ad270fcdf9 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Wed, 15 May 2019 22:31:53 -0400 Subject: [PATCH 3/5] Change export strategy --- Libraries/Linking/NativeLinking.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Libraries/Linking/NativeLinking.js b/Libraries/Linking/NativeLinking.js index e441bd6402c4..a2e2c123dd20 100644 --- a/Libraries/Linking/NativeLinking.js +++ b/Libraries/Linking/NativeLinking.js @@ -32,5 +32,6 @@ export interface Spec extends TurboModule { +removeListeners: (count: number) => void; } -const moduleName = Platform.OS === 'ios' ? 'LinkingManager' : 'IntentAndroid'; -export default TurboModuleRegistry.getEnforcing(moduleName); +export default (Platform.OS === 'ios' + ? TurboModuleRegistry.getEnforcing('LinkingManager') + : TurboModuleRegistry.getEnforcing('IntentAndroid')); From fae64b3f30db9141e321cb4c4f5f3e9385b81015 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Wed, 15 May 2019 22:32:21 -0400 Subject: [PATCH 4/5] use import + NativeLinking naming --- Libraries/Linking/Linking.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Libraries/Linking/Linking.js b/Libraries/Linking/Linking.js index eea6b207457b..65bbb226d20a 100644 --- a/Libraries/Linking/Linking.js +++ b/Libraries/Linking/Linking.js @@ -16,7 +16,7 @@ const Platform = require('../Utilities/Platform'); const invariant = require('invariant'); -const LinkingManager = require('./NativeLinking').default; +import NativeLinking from './NativeLinking'; /** * `Linking` gives you a general interface to interact with both incoming @@ -26,7 +26,7 @@ const LinkingManager = require('./NativeLinking').default; */ class Linking extends NativeEventEmitter { constructor() { - super(LinkingManager); + super(NativeLinking); } /** @@ -55,7 +55,7 @@ class Linking extends NativeEventEmitter { */ openURL(url: string): Promise { this._validateURL(url); - return LinkingManager.openURL(url); + return NativeLinking.openURL(url); } /** @@ -65,7 +65,7 @@ class Linking extends NativeEventEmitter { */ canOpenURL(url: string): Promise { this._validateURL(url); - return LinkingManager.canOpenURL(url); + return NativeLinking.canOpenURL(url); } /** @@ -74,7 +74,7 @@ class Linking extends NativeEventEmitter { * See https://facebook.github.io/react-native/docs/linking.html#opensettings */ openSettings(): Promise { - return LinkingManager.openSettings(); + return NativeLinking.openSettings(); } /** @@ -86,9 +86,9 @@ class Linking extends NativeEventEmitter { getInitialURL(): Promise { return Platform.OS === 'android' ? InteractionManager.runAfterInteractions().then(() => - LinkingManager.getInitialURL(), + NativeLinking.getInitialURL(), ) - : LinkingManager.getInitialURL(); + : NativeLinking.getInitialURL(); } /* @@ -103,7 +103,7 @@ class Linking extends NativeEventEmitter { extras?: Array<{key: string, value: string | number | boolean}>, ) { if (Platform.OS === 'android') { - return LinkingManager.sendIntent(action, extras); + return NativeLinking.sendIntent(action, extras); } } From d5993f71a39453934cee4b39f7569f90e6c7a5ed Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Thu, 16 May 2019 09:15:16 -0400 Subject: [PATCH 5/5] Change comments --- Libraries/Linking/NativeLinking.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libraries/Linking/NativeLinking.js b/Libraries/Linking/NativeLinking.js index a2e2c123dd20..2fa0d78d349b 100644 --- a/Libraries/Linking/NativeLinking.js +++ b/Libraries/Linking/NativeLinking.js @@ -27,7 +27,7 @@ export interface Spec extends TurboModule { extras: ?Array<{key: string, value: string | number | boolean}>, ) => Promise; - // RCTEventEmitter + // Events +addListener: (eventName: string) => void; +removeListeners: (count: number) => void; }