Skip to content
Open
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
16 changes: 16 additions & 0 deletions apps/automated/src/file-system/file-system-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -785,3 +785,19 @@ export function test_FileAppendText(done) {
.then(() => done())
.catch(done);
}

export function test_FileReadTextKeepsLineBreaks(done) {
const content = '\nfirst\r\nsecond\rthird\n\n' + 'more than one read chunk\r\n'.repeat(5000);
const file = fs.File.fromPath(fs.path.join(fs.knownFolders.temp().path, `${Date.now()}-line-breaks.txt`));
file.writeTextSync(content);
TKUnit.assertEqual(file.readTextSync(), content, 'readTextSync should return the file content unchanged');
file
.readText()
.then((value) => {
TKUnit.assertEqual(value, content, 'readText should return the file content unchanged');

return Promise.allSettled([file.remove()]);
})
.then(() => done())
.catch(done);
}
4 changes: 0 additions & 4 deletions packages/core/application/application.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,6 @@ const BroadcastReceiver = lazy(() => {
constructor(onReceiveCallback: (context: android.content.Context, intent: android.content.Intent) => void) {
super();
this._onReceiveCallback = onReceiveCallback;

return global.__native(this);
}

public onReceive(context: android.content.Context, intent: android.content.Intent) {
Expand Down Expand Up @@ -1327,8 +1325,6 @@ function ensureNativeClasses() {
class TNSAccessibilityDelegateImpl extends AccessibilityDelegate {
constructor() {
super();

return global.__native(this);
}

private getTnsView(androidView: android.view.View) {
Expand Down
44 changes: 19 additions & 25 deletions packages/core/file-system/file-system-access.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -551,42 +551,18 @@ export class FileSystemAccess implements IFileSystemAccess {

public readTextSync(path: string, onError?: (error: any) => any, encoding?: any) {
try {
const javaFile = new java.io.File(path);
const stream = new java.io.FileInputStream(javaFile);

let actualEncoding = encoding;
if (!actualEncoding) {
actualEncoding = textModule.encoding.UTF_8;
}
const reader = new java.io.InputStreamReader(stream, actualEncoding);
const bufferedReader = new java.io.BufferedReader(reader);

// TODO: We will need to read the entire file to a CharBuffer instead of reading it line by line
// TODO: bufferedReader.read(CharBuffer) does not currently work
let line = undefined;
let result = '';
while (line !== null) {
line = bufferedReader.readLine();
if (line === null) {
break;
}

if (result.length > 0) {
// add the new line manually to the result
// TODO: Try with CharBuffer at a later stage, when the Bridge allows it
result += '\n';
}

result += line;
}
let result = FileSystemAccess._readAllBytes(path).toString(actualEncoding);

if (actualEncoding === textModule.encoding.UTF_8) {
// Remove UTF8 BOM if present. http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html
result = FileSystemAccess._removeUtf8Bom(result);
}

bufferedReader.close();

return result;
} catch (exception) {
if (onError) {
Expand All @@ -595,6 +571,24 @@ export class FileSystemAccess implements IFileSystemAccess {
}
}

private static _readAllBytes(path: string): java.io.ByteArrayOutputStream {
const javaFile = new java.io.File(path);
const stream = new java.io.FileInputStream(javaFile);
try {
// length() is only a hint: special files such as /proc entries report 0.
const output = new java.io.ByteArrayOutputStream(Math.max(javaFile.length(), 32));
const chunk = (<any>Array).create('byte', 65536);
let count: number;
while ((count = stream.read(chunk)) !== -1) {
output.write(chunk, 0, count);
}

return output;
} finally {
stream.close();
}
}

private static _removeUtf8Bom(s: string): string {
if (s.charCodeAt(0) === 0xfeff) {
s = s.slice(1);
Expand Down
3 changes: 2 additions & 1 deletion packages/core/http/http-request-internal/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { Headers, HttpResponse, HttpRequestOptions } from '../../http';
import { Screen } from '../../platform/screen';
import * as domainDebugger from '../../debugger';
import { isObject } from '../../utils';
import { runtimeCopiesTypedArraysToByteArrays } from '../../utils/android-runtime-version';
import { HttpResponseEncoding } from '../http-interfaces';
import { addHeader, getDebugRequestMethodAndBody } from './http-request-internal-common';
export { addHeader } from './http-request-internal-common';
Expand Down Expand Up @@ -163,7 +164,7 @@ function buildJavaOptions(options: HttpRequestOptions) {
javaOptions.content = nativeBuffer;
} else if (options.content instanceof ArrayBuffer) {
const typedArray = new Uint8Array(options.content as ArrayBuffer);
const nativeBuffer = java.nio.ByteBuffer.wrap(Array.from(typedArray));
const nativeBuffer = java.nio.ByteBuffer.wrap(runtimeCopiesTypedArraysToByteArrays() ? (typedArray as any) : Array.from(typedArray));
javaOptions.content = nativeBuffer;
}
if (typeof options.timeout === 'number') {
Expand Down
7 changes: 6 additions & 1 deletion packages/core/http/http-request/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@ import { getFilenameFromUrl, parseJSON } from './http-request-common';

const contentHandler: HttpContentHandler = {
toArrayBuffer(this: BaseHttpContent) {
return Uint8Array.from((this.raw as java.io.ByteArrayOutputStream).toByteArray()).buffer;
const bytes = (this.raw as java.io.ByteArrayOutputStream).toByteArray();
const buffer: ArrayBuffer = (ArrayBuffer as any).from(java.nio.ByteBuffer.wrap(bytes));
// Unlink the drained source ByteBuffer: it pins the byte[] and misleads FileSystemAccess.getBuffer.
delete (buffer as any).nativeObject;

return buffer;
},
toString(this: BaseHttpContent, encoding?: HttpResponseEncoding) {
let str: string;
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/action-bar/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ function initializeMenuItemClickListener(): void {
class MenuItemClickListenerImpl extends java.lang.Object implements androidx.appcompat.widget.Toolbar.OnMenuItemClickListener {
constructor(public owner: ActionBar) {
super();

return global.__native(this);
}

onMenuItemClick(item: android.view.MenuItem): boolean {
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/button/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ function initializeClickListener(): void {
class ClickListenerImpl extends java.lang.Object implements android.view.View.OnClickListener {
constructor(public owner: Button) {
super();

return global.__native(this);
}

public onClick(v: android.view.View): void {
Expand Down
6 changes: 0 additions & 6 deletions packages/core/ui/core/view/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,6 @@ function initializeTouchListener(): void {
constructor(owner: View) {
super();
this.owner = new WeakRef(owner);

return global.__native(this);
}

onTouch(view: android.view.View, event: android.view.MotionEvent): boolean {
Expand Down Expand Up @@ -182,8 +180,6 @@ function initializeDialogFragment() {

this.getOnBackPressedDispatcher().addCallback(this, callback);
}

return global.__native(this);
}

public onDetachedFromWindow(): void {
Expand Down Expand Up @@ -233,8 +229,6 @@ function initializeDialogFragment() {

constructor() {
super();

return global.__native(this);
}
public onCreate(savedInstanceState: android.os.Bundle) {
super.onCreate(savedInstanceState);
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/date-picker/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ function initializeDateChangedListener(): void {
class DateChangedListenerImpl extends java.lang.Object implements android.widget.DatePicker.OnDateChangedListener {
constructor(public owner: DatePicker) {
super();

return global.__native(this);
}

onDateChanged(picker: android.widget.DatePicker, year: number, month: number, day: number) {
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/editable-text-base/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@ function initializeEditTextListeners(): void {
class EditTextListenersImpl extends java.lang.Object implements android.text.TextWatcher, android.view.View.OnFocusChangeListener, android.widget.TextView.OnEditorActionListener {
constructor(private owner: WeakRef<EditableTextBase>) {
super();

return global.__native(this);
}

public beforeTextChanged(text: string, start: number, count: number, after: number): void {
Expand Down
4 changes: 0 additions & 4 deletions packages/core/ui/frame/fragment.transitions.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,6 @@ function getAnimationListener(): android.animation.Animator.AnimatorListener {
class AnimationListenerImpl extends java.lang.Object implements android.animation.Animator.AnimatorListener {
constructor() {
super();

return global.__native(this);
}

onAnimationStart(animator: ExpandedAnimator): void {
Expand Down Expand Up @@ -371,8 +369,6 @@ function getTransitionListener(entry: ExpandedEntry, transition: androidx.transi
public transition: androidx.transition.Transition,
) {
super();

return global.__native(this);
}

public onTransitionStart(transition: androidx.transition.Transition): void {
Expand Down
6 changes: 0 additions & 6 deletions packages/core/ui/gestures/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ function initializeTapAndDoubleTapGestureListener() {
this._observer = observer;
this._target = target;
this._type = type;

return global.__native(this);
}

public onSingleTapUp(motionEvent: android.view.MotionEvent): boolean {
Expand Down Expand Up @@ -129,8 +127,6 @@ function initializePinchGestureListener() {

this._observer = observer;
this._target = target;

return global.__native(this);
}

public onScaleBegin(detector: android.view.ScaleGestureDetector): boolean {
Expand Down Expand Up @@ -182,8 +178,6 @@ function initializeSwipeGestureListener() {

this._observer = observer;
this._target = target;

return global.__native(this);
}

public onDown(motionEvent: android.view.MotionEvent): boolean {
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/image-cache/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ function ensureLruBitmapCacheClass() {
class LruBitmapCache extends android.util.LruCache<string, android.graphics.Bitmap> {
constructor(cacheSize: number) {
super(cacheSize);

return global.__native(this);
}

public sizeOf(key: string, bitmap: android.graphics.Bitmap): number {
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/image/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ function initializeImageLoadedListener() {
class ImageLoadedListenerImpl extends java.lang.Object implements org.nativescript.widgets.image.Worker.OnImageLoadedListener {
constructor(public owner: Image) {
super();

return global.__native(this);
}

public handlesImageUpdate(): boolean {
Expand Down
4 changes: 0 additions & 4 deletions packages/core/ui/list-picker/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ function initializeNativeClasses(): void {
class FormatterImpl extends java.lang.Object implements android.widget.NumberPicker.Formatter {
constructor(private owner: ListPicker) {
super();

return global.__native(this);
}

format(index: number): string {
Expand All @@ -40,8 +38,6 @@ function initializeNativeClasses(): void {
class ValueChangeListenerImpl extends java.lang.Object implements android.widget.NumberPicker.OnValueChangeListener {
constructor(private owner: ListPicker) {
super();

return global.__native(this);
}

onValueChange(picker: android.widget.NumberPicker, oldValue: number, newValue: number): void {
Expand Down
4 changes: 0 additions & 4 deletions packages/core/ui/list-view/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,6 @@ function initializeItemClickListener(): void {
class ItemClickListenerImpl extends java.lang.Object implements android.widget.AdapterView.OnItemClickListener {
constructor(public owner: ListView) {
super();

return global.__native(this);
}

onItemClick<T extends android.widget.Adapter>(parent: android.widget.AdapterView<T>, convertView: android.view.View, index: number, id: number) {
Expand Down Expand Up @@ -846,8 +844,6 @@ function ensureListViewAdapterClass() {
class ListViewAdapter extends android.widget.BaseAdapter {
constructor(public owner: ListView) {
super();

return global.__native(this);
}

public getCount() {
Expand Down
6 changes: 0 additions & 6 deletions packages/core/ui/search-bar/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ function initializeNativeClasses(): void {
class CompatQueryTextListenerImpl extends java.lang.Object implements androidx.appcompat.widget.SearchView.OnQueryTextListener {
constructor(private owner: SearchBar) {
super();

// @ts-ignore
return global.__native(this);
}

onQueryTextChange(newText: string): boolean {
Expand Down Expand Up @@ -70,9 +67,6 @@ function initializeNativeClasses(): void {
class CompatCloseListenerImpl extends java.lang.Object implements androidx.appcompat.widget.SearchView.OnCloseListener {
constructor(private owner: SearchBar) {
super();

// @ts-ignore
return global.__native(this);
}

onClose(): boolean {
Expand Down
6 changes: 0 additions & 6 deletions packages/core/ui/segmented-bar/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ function initializeNativeClasses(): void {
class TabChangeListenerImpl extends java.lang.Object implements android.widget.TabHost.OnTabChangeListener {
constructor(public owner: SegmentedBar) {
super();

return global.__native(this);
}

onTabChanged(id: string): void {
Expand All @@ -69,8 +67,6 @@ function initializeNativeClasses(): void {
class TabContentFactoryImpl extends java.lang.Object implements android.widget.TabHost.TabContentFactory {
constructor(public owner: SegmentedBar) {
super();

return global.__native(this);
}

createTabContent(tag: string): android.view.View {
Expand All @@ -92,8 +88,6 @@ function initializeNativeClasses(): void {
class TabHostImpl extends android.widget.TabHost {
constructor(context: android.content.Context, attrs: android.util.AttributeSet) {
super(context, attrs);

return global.__native(this);
}

public onAttachedToWindow(): void {
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/slider/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ function initializeListenerClass(): void {
class SeekBarChangeListenerImpl extends java.lang.Object implements android.widget.SeekBar.OnSeekBarChangeListener {
constructor() {
super();

return global.__native(this);
}

onProgressChanged(seekBar: OwnerSeekBar, progress: number, fromUser: boolean): void {
Expand Down
2 changes: 0 additions & 2 deletions packages/core/ui/switch/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ function initializeCheckedChangeListener(): void {
class CheckedChangeListenerImpl extends java.lang.Object implements android.widget.CompoundButton.OnCheckedChangeListener {
constructor(private owner: Switch) {
super();

return global.__native(this);
}

onCheckedChanged(buttonView: android.widget.CompoundButton, isChecked: boolean): void {
Expand Down
4 changes: 0 additions & 4 deletions packages/core/ui/tab-view/index.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ function initializeNativeClasses() {

constructor() {
super();

return global.__native(this);
}

static newInstance(tabId: number, index: number): TabFragmentImplementation {
Expand Down Expand Up @@ -158,8 +156,6 @@ function initializeNativeClasses() {

constructor(private owner: WeakRef<TabView>) {
super();

return global.__native(this);
}

getCount() {
Expand Down
Loading
Loading