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
13 changes: 7 additions & 6 deletions api-reports/NativeScript.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -1947,7 +1947,7 @@ export class Span extends ViewBase {

public textDecoration: TextDecoration;
//@endprivate
}
}

// @public
export class StackLayout extends LayoutBase {
Expand Down Expand Up @@ -2428,8 +2428,7 @@ export interface TapGestureEventData extends GestureEventData {
getPointerCount(): number;
getX(): number;
getY(): number;

}
}

// @public
export interface Template {
Expand Down Expand Up @@ -2623,6 +2622,7 @@ export const Utils: {
getModuleName: typeof getModuleName;
openFile: typeof openFile;
openUrl: typeof openUrl;
isRealDevice: typeof isRealDevice;
layout: typeof layout;
android: typeof ad;
ios: typeof ios;
Expand Down Expand Up @@ -3116,9 +3116,10 @@ export class XmlParser {
// nativescript-core/index.d.ts:114:5 - (ae-forgotten-export) The symbol "getModuleName" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:115:5 - (ae-forgotten-export) The symbol "openFile" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:116:5 - (ae-forgotten-export) The symbol "openUrl" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:117:5 - (ae-forgotten-export) The symbol "layout" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:118:5 - (ae-forgotten-export) The symbol "ad" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:119:5 - (ae-forgotten-export) The symbol "ios" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:117:5 - (ae-forgotten-export) The symbol "isRealDevice" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:118:5 - (ae-forgotten-export) The symbol "layout" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:119:5 - (ae-forgotten-export) The symbol "ad" needs to be exported by the entry point index.d.ts
// nativescript-core/index.d.ts:120:5 - (ae-forgotten-export) The symbol "ios" needs to be exported by the entry point index.d.ts
// nativescript-core/ui/core/view-base/view-base.d.ts:179:26 - (ae-forgotten-export) The symbol "Property" needs to be exported by the entry point index.d.ts
// nativescript-core/ui/core/view-base/view-base.d.ts:179:26 - (ae-forgotten-export) The symbol "CssProperty" needs to be exported by the entry point index.d.ts
// nativescript-core/ui/core/view-base/view-base.d.ts:179:26 - (ae-forgotten-export) The symbol "CssAnimationProperty" needs to be exported by the entry point index.d.ts
Expand Down
3 changes: 2 additions & 1 deletion nativescript-core/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export declare const Trace: {
isEnabled: typeof isEnabled;
};
export * from "./ui";
import { GC, isFontIconURI, isDataURI, isFileOrResourcePath, executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, releaseNativeObject, getModuleName, openFile, openUrl, layout, ad as androidUtils, ios as iosUtils } from "./utils/utils";
import { GC, isFontIconURI, isDataURI, isFileOrResourcePath, executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, releaseNativeObject, getModuleName, openFile, openUrl, isRealDevice, layout, ad as androidUtils, ios as iosUtils } from "./utils/utils";
export declare const Utils: {
GC: typeof GC;
isFontIconURI: typeof isFontIconURI;
Expand All @@ -114,6 +114,7 @@ export declare const Utils: {
getModuleName: typeof getModuleName;
openFile: typeof openFile;
openUrl: typeof openUrl;
isRealDevice: typeof isRealDevice;
layout: typeof layout;
android: typeof androidUtils;
ios: typeof iosUtils;
Expand Down
4 changes: 2 additions & 2 deletions nativescript-core/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ import {
GC, isFontIconURI, isDataURI, isFileOrResourcePath,
executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, releaseNativeObject,
getModuleName,
openFile, openUrl,
openFile, openUrl, isRealDevice,
layout, ad as androidUtils, ios as iosUtils
} from "./utils/utils";

Expand All @@ -107,7 +107,7 @@ export const Utils = {
executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, releaseNativeObject,

getModuleName,
openFile, openUrl,
openFile, openUrl, isRealDevice,

layout, android: androidUtils, ios: iosUtils
};
Expand Down
61 changes: 30 additions & 31 deletions nativescript-core/ui/gestures/gestures.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
*/
touch
}

/**
* Defines an enum with supported gesture states.
*/
Expand All @@ -64,7 +64,7 @@
*/
ended
}

/**
* Defines an enum for swipe gesture direction.
*/
Expand All @@ -86,7 +86,7 @@
*/
down
}

/**
* Defines a touch action
*/
Expand All @@ -95,23 +95,23 @@
* Down action.
*/
export const down: string;

/**
* Up action.
*/
export const up: string;

/**
* Move action.
*/
export const move: string;

/**
* Cancel action.
*/
export const cancel: string;
}

/**
* Provides gesture event data.
*/
Expand All @@ -137,7 +137,7 @@
/**
* Provides gesture event data.
*/
export interface TapGestureEventData extends GestureEventData {
export interface TapGestureEventData extends GestureEventData {
/**
* Gets the number of pointers in the event.
*/
Expand All @@ -152,27 +152,27 @@
getY(): number;

}

/**
* Provides gesture event data.
*/
export interface TouchGestureEventData extends TapGestureEventData {
/**
* Gets action of the touch. Possible values: 'up', 'move', 'down', 'cancel'
*/
action: "up" | "move" | "down" | "cancel";
action: "up" | "move" | "down" | "cancel";
/**
* Gets the pointers that triggered the event.
* Note: In Android there is aways only one active pointer.
*/
getActivePointers(): Array<Pointer>;

/**
* Gets all pointers.
*/
getAllPointers(): Array<Pointer>;
}

/**
* Pointer is an object representing a finger (or other object) that is touching the screen.
*/
Expand All @@ -181,12 +181,12 @@
* The id of the pointer.
*/
android: any;

/**
* The UITouch object associated to the touch
*/
ios: any;

/**
* Gets the X coordinate of the pointer inside the view that triggered the event.
*/
Expand Down Expand Up @@ -221,46 +221,46 @@
*/
getYDIP(): number
}

/**
* Provides gesture event data.
*/
export interface GestureEventDataWithState extends GestureEventData {
state: number;
}

/**
* Provides gesture event data for pinch gesture.
*/
export interface PinchGestureEventData extends GestureEventDataWithState {
scale: number;

getFocusX(): number;
getFocusY(): number;
}

/**
* Provides gesture event data for swipe gesture.
*/
export interface SwipeGestureEventData extends GestureEventData {
direction: SwipeDirection;
}

/**
* Provides gesture event data for pan gesture.
*/
export interface PanGestureEventData extends GestureEventDataWithState {
deltaX: number;
deltaY: number;
}

/**
* Provides gesture event data for rotation gesture.
*/
export interface RotationGestureEventData extends GestureEventDataWithState {
rotation: number;
}

/**
* Provides options for the GesturesObserver.
*/
Expand All @@ -272,39 +272,39 @@
* @param context - default this argument for the callbacks.
*/
constructor(target: View, callback: (args: GestureEventData) => void, context: any);

/**
* Registers a gesture observer to a view and gesture.
* @param type - Type of the gesture.
*/
observe(type: GestureTypes);

/**
* Disconnects the gesture observer.
*/
disconnect();

/**
* Gesture type attached to the observer.
*/
type: GestureTypes;

/**
* A function that will be executed when a gesture is received.
*/
callback: (args: GestureEventData) => void;

/**
* A context which will be used as `this` in callback execution.
*/
context: any;

/**
* An internal Android specific method used to pass the motion event to the correct gesture observer.
*/
androidOnTouchEvent: (motionEvent: any /* android.view.MotionEvent */) => void;
}

/**
* A short-hand function that is used to create a gesture observer for a view and gesture.
* @param target - View which will be watched for originating a specific gesture.
Expand All @@ -313,17 +313,16 @@
* @param context - this argument for the callback.
*/
export function observe(target: View, type: GestureTypes, callback: (args: GestureEventData) => void, context?: any): GesturesObserver;

/**
* Returns a string representation of a gesture type.
* @param type - Type of the gesture.
* @param separator(optional) - Text separator between gesture type strings.
*/
export function toString(type: GestureTypes, separator?: string): string;

/**
* Returns a gesture type enum value from a string (case insensitive).
* @param type - A string representation of a gesture type (e.g. Tap).
*/
export function fromString(type: string): GestureTypes;

6 changes: 6 additions & 0 deletions nativescript-core/utils/native-helper.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,4 +153,10 @@ export module ad {
return result;
}
}

export function isRealDevice(): boolean {
const fingerprint = android.os.Build.FINGERPRINT;

return fingerprint != null && (fingerprint.indexOf("vbox") > -1 || fingerprint.indexOf("generic") > -1);
}
}
12 changes: 11 additions & 1 deletion nativescript-core/utils/native-helper.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ export module ad {
*/
export function getPaletteColor(name: string, context: any /* android.content.Context */): number;
}

/**
* Checks whether the application is running on real device and not on emulator.
*/
export function isRealDevice(): boolean;
}
/**
* Module with ios specific utilities.
Expand Down Expand Up @@ -156,7 +161,7 @@ export module ios {
export function getVisibleViewController(rootViewController: any/* UIViewController*/): any/* UIViewController*/;

/**
*
*
* @param transform Applies a rotation transform over X,Y and Z axis
* @param x Rotation over X axis in degrees
* @param y Rotation over Y axis in degrees
Expand All @@ -165,4 +170,9 @@ export module ios {
export function applyRotateTransform(transform: any /* CATransform3D*/, x: number, y: number, z: number): any /* CATransform3D*/;

export class UIDocumentInteractionControllerDelegateImpl { }

/**
* Checks whether the application is running on real device and not on simulator.
*/
export function isRealDevice(): boolean;
}
16 changes: 15 additions & 1 deletion nativescript-core/utils/native-helper.ios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import {
write as traceWrite
} from "../trace";

declare var UIImagePickerControllerSourceType: any;

const radToDeg = Math.PI / 180;

function isOrientationLandscape(orientation: number) {
Expand All @@ -14,7 +16,7 @@ function isOrientationLandscape(orientation: number) {
function openFileAtRootModule(filePath: string): boolean {
try {
const appPath = ios.getCurrentAppPath();
const path = filePath.replace("~", appPath);
let path = ios.isRealDevice() ? filePath.replace("~", appPath) : filePath;

const controller = UIDocumentInteractionController.interactionControllerWithURL(NSURL.fileURLWithPath(path));
controller.delegate = new ios.UIDocumentInteractionControllerDelegateImpl();
Expand Down Expand Up @@ -153,4 +155,16 @@ export module ios {
return this.getViewController().view.frame;
}
}

export function isRealDevice() {
try {
// https://stackoverflow.com/a/5093092/4936697
const sourceType = UIImagePickerControllerSourceType.UIImagePickerControllerSourceTypeCamera;
const mediaTypes = UIImagePickerController.availableMediaTypesForSourceType(sourceType);

return mediaTypes;
} catch (e) {
return true;
}
}
}
4 changes: 4 additions & 0 deletions nativescript-core/utils/utils.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,7 @@ Please ensure you have your manifest correctly configured with the FileProvider.
return false;
}
}

export function isRealDevice(): boolean {
return ad.isRealDevice();
}
Loading