Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/android/AccessibilityUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import React = require('react');
import RN = require('react-native');

import Accessibility from '../native-common/Accessibility';
import { AccessibilityUtil as CommonAccessibilityUtil } from '../native-common/AccessibilityUtil';
import { AccessibilityPlatformUtil as CommonAccessibilityNativeUtil } from '../common/AccessibilityUtil';

export class AccessibilityUtil extends CommonAccessibilityUtil {
export class AccessibilityUtil extends CommonAccessibilityNativeUtil {
private _sendAccessibilityEvent(component: React.Component<any, any>, eventId: number) {
// See list of events here:
// https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
Expand Down
19 changes: 0 additions & 19 deletions src/android/Button.tsx

This file was deleted.

12 changes: 10 additions & 2 deletions src/android/ReactXP.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { default as AccessibilityImpl, Accessibility as AccessibilityType } from
import { default as ActivityIndicatorImpl, ActivityIndicator as ActivityIndicatorType } from '../native-common/ActivityIndicator';
import { default as AlertImpl, Alert as AlertType } from '../native-common/Alert';
import { default as AppImpl, App as AppType } from '../native-common/App';
import { default as ButtonImpl, Button as ButtonType } from './Button';
import { default as ButtonImpl, Button as ButtonType } from '../native-common/Button';
import { default as PickerImpl, Picker as PickerType } from '../native-common/Picker';
import { default as ImageImpl, Image as ImageType } from './Image';
import { default as ClipboardImpl, Clipboard as ClipboardType } from '../native-common/Clipboard';
Expand All @@ -43,7 +43,7 @@ import { default as TextInputImpl, TextInput as TextInputType } from '../native-
import { default as ProfilingImpl, Profiling as ProfilingType } from '../native-common/Profiling';
import { default as UserInterfaceImpl, UserInterface as UserInterfaceType } from '../native-common/UserInterface';
import { default as UserPresenceImpl, UserPresence as UserPresenceType } from '../native-common/UserPresence';
import { default as ViewImpl, View as ViewType } from './View';
import { default as ViewImpl, View as ViewType } from '../native-common/View';
import { default as WebViewImpl, WebView as WebViewType } from '../native-common/WebView';
import ViewBase from '../native-common/ViewBase';

Expand All @@ -55,6 +55,14 @@ const _defaultViewStyle = StylesImpl.createViewStyle({
});
ViewBase.setDefaultViewStyle(_defaultViewStyle);

// Initialize Android implementation of platform accessibility helpers inside the singleton
// instance of native-common AccessibilityUtil. This is to let native-common components access
// platform specific APIs through native-common implementation itself.
import AccessibilityUtil from '../native-common/AccessibilityUtil';
import AccessibilityPlatformUtil from './AccessibilityUtil';

AccessibilityUtil.setAccessibilityPlatformUtil(AccessibilityPlatformUtil);

// -- STRANGE THINGS GOING ON HERE --
// See web/ReactXP.tsx for more details.

Expand Down
6 changes: 1 addition & 5 deletions src/android/Text.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import React = require('react');
import RN = require('react-native');

import AccessibilityUtil from './AccessibilityUtil';
import AccessibilityUtil from '../native-common/AccessibilityUtil';
import { Text as CommonText } from '../native-common/Text';
import Types = require('../common/Types');
import Styles from '../native-common/Styles';
Expand Down Expand Up @@ -48,10 +48,6 @@ export class Text extends CommonText {
</RN.Text>
);
}

focus() {
AccessibilityUtil.setAccessibilityFocus(this);
}
}

export default Text;
19 changes: 0 additions & 19 deletions src/android/View.tsx

This file was deleted.

8 changes: 8 additions & 0 deletions src/common/AccessibilityUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
* Common accessibility interface for platform-specific accessibility utilities.
*/

import React = require('react');

import Types = require('../common/Types');

export const ImportantForAccessibilityMap = {
Expand All @@ -16,6 +18,12 @@ export const ImportantForAccessibilityMap = {
[Types.ImportantForAccessibility.NoHideDescendants]: 'no-hide-descendants'
};


// Platform specific helpers exposed through Native-Common AccessibilityUtil.
export abstract class AccessibilityPlatformUtil {
abstract setAccessibilityFocus(component: React.Component<any, any>): void;
}

export abstract class AccessibilityUtil {
isHidden(importantForAccessibility: Types.ImportantForAccessibility): boolean {
if (importantForAccessibility) {
Expand Down
22 changes: 22 additions & 0 deletions src/ios/AccessibilityUtil.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* AccessibilityUtil.ts
*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT license.
*
* iOS-specific accessibility utils.
*/

import React = require('react');
import RN = require('react-native');

import Accessibility from '../native-common/Accessibility';
import { AccessibilityPlatformUtil } from '../common/AccessibilityUtil';

export class AccessibilityUtil extends AccessibilityPlatformUtil {
setAccessibilityFocus(component: React.Component<any, any>): void {
// NO-OP
}
}

export default new AccessibilityUtil();
8 changes: 8 additions & 0 deletions src/ios/ReactXP.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,14 @@ const _defaultViewStyle = StylesImpl.createViewStyle({
});
ViewBase.setDefaultViewStyle(_defaultViewStyle);

// Initialize iOS implementation of platform accessibility helpers inside the singleton
// instance of native-common AccessibilityUtil. This is to let native-common components access
// platform specific APIs through native-common implementation itself.
import AccessibilityUtil from '../native-common/AccessibilityUtil';
import AccessibilityPlatformUtil from './AccessibilityUtil';

AccessibilityUtil.setAccessibilityPlatformUtil(AccessibilityPlatformUtil);

// -- STRANGE THINGS GOING ON HERE --
// See web/ReactXP.tsx for more details.

Expand Down
18 changes: 17 additions & 1 deletion src/native-common/AccessibilityUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@
*/

import _ = require('./lodashMini');
import assert = require('assert');
import React = require('react');
import RN = require('react-native');

import { AccessibilityUtil as CommonAccessibilityUtil, AccessibilityPlatformUtil } from '../common/AccessibilityUtil';

import { AccessibilityUtil as CommonAccessibilityUtil } from '../common/AccessibilityUtil';
import Types = require('../common/Types');

const liveRegionMap = {
Expand Down Expand Up @@ -54,6 +58,13 @@ const componentTypeMap = {
};

export class AccessibilityUtil extends CommonAccessibilityUtil {
// Handle to accessibility platform helper instance that gets initialized during ReactXP initialization using the setter.
private _instance: AccessibilityPlatformUtil;

setAccessibilityPlatformUtil(instance: AccessibilityPlatformUtil) {
this._instance = instance;
}

// Converts an AccessibilityTrait to a string, but the returned value is only needed for iOS. Other platforms ignore it. Presence
// of an AccessibilityTrait.None can make an element non-accessible on Android. We use the override traits if they are present, else
// use the deafult trait.
Expand Down Expand Up @@ -89,6 +100,11 @@ export class AccessibilityUtil extends CommonAccessibilityUtil {
}
return undefined;
}

// Platform specific accessibility APIs.
setAccessibilityFocus(component: React.Component<any, any>): void {
this._instance.setAccessibilityFocus(component);
}
}

export default new AccessibilityUtil();
2 changes: 1 addition & 1 deletion src/native-common/Text.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export class Text extends RX.Text<{}> {
}

focus() {
// No-op
AccessibilityUtil.setAccessibilityFocus(this);
}

blur() {
Expand Down
2 changes: 2 additions & 0 deletions src/native-common/TextInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import _ = require('./lodashMini');
import React = require('react');
import RN = require('react-native');

import AccessibilityUtil from './AccessibilityUtil';
import RX = require('../common/Interfaces');
import Styles from './Styles';
import Types = require('../common/Types');
Expand Down Expand Up @@ -188,6 +189,7 @@ export class TextInput extends RX.TextInput<TextInputState> {

focus() {
(this.refs['nativeTextInput'] as any).focus();
AccessibilityUtil.setAccessibilityFocus(this);
}

isFocused() {
Expand Down
4 changes: 4 additions & 0 deletions src/native-common/View.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,10 @@ export class View extends ViewBase<Types.ViewProps, {}> {
);
}
}

focus() {
AccessibilityUtil.setAccessibilityFocus(this);
}
}

export default View;
20 changes: 20 additions & 0 deletions src/windows/AccessibilityUtil.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* AccessibilityUtil.ts
*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT license.
*
* Windows-specific accessibility utils.
*/

import React = require('react');

import { AccessibilityPlatformUtil } from '../common/AccessibilityUtil';

export class AccessibilityUtil extends AccessibilityPlatformUtil {
setAccessibilityFocus(component: React.Component<any, any>) {
// No-Op
}
}

export default new AccessibilityUtil();
9 changes: 9 additions & 0 deletions src/windows/ReactXP.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,15 @@ const _defaultViewStyle = StylesImpl.createViewStyle({
});
ViewBase.setDefaultViewStyle(_defaultViewStyle);


// Initialize Windows implementation of platform accessibility helpers inside the singleton
// instance of native-common AccessibilityUtil. This is to let native-common components access
// platform specific APIs through native-common implementation itself.
import AccessibilityUtil from '../native-common/Accessibilityutil';
import AccessibilityPlatformUtil from './AccessibilityUtil';

AccessibilityUtil.setAccessibilityPlatformUtil(AccessibilityPlatformUtil);

// -- STRANGE THINGS GOING ON HERE --
// See web/ReactXP.tsx for more details.

Expand Down