mirror of
				https://github.com/NativeScript/NativeScript.git
				synced 2025-11-04 04:18:52 +08:00 
			
		
		
		
	feat(utils): dismissKeyboard, copyToClipboard, setWindowBackgroundColor, getCurrentActivity and getResource (#10089)
This commit is contained in:
		
							
								
								
									
										4
									
								
								packages/core/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								packages/core/index.d.ts
									
									
									
									
										vendored
									
									
								
							@ -105,7 +105,7 @@ export type { InstrumentationMode, TimerInfo } from './profiling';
 | 
			
		||||
export { encoding } from './text';
 | 
			
		||||
export * from './trace';
 | 
			
		||||
export * from './ui';
 | 
			
		||||
import { GC, isFontIconURI, isDataURI, isFileOrResourcePath, executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, executeOnUIThread, releaseNativeObject, getModuleName, openFile, openUrl, isRealDevice, layout, ad as androidUtils, iOSNativeHelper as iosUtils, Source, escapeRegexSymbols, convertString, dismissSoftInput, queueMacrotask, queueGC, throttle, debounce, dataSerialize, dataDeserialize } from './utils';
 | 
			
		||||
import { GC, isFontIconURI, isDataURI, isFileOrResourcePath, executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, executeOnUIThread, releaseNativeObject, getModuleName, openFile, openUrl, isRealDevice, layout, ad as androidUtils, iOSNativeHelper as iosUtils, Source, escapeRegexSymbols, convertString, dismissSoftInput, dismissKeyboard, queueMacrotask, queueGC, throttle, debounce, dataSerialize, dataDeserialize, copyToClipboard } from './utils';
 | 
			
		||||
import { ClassInfo, getClass, getBaseClasses, getClassInfo, isBoolean, isDefined, isFunction, isNullOrUndefined, isNumber, isObject, isString, isUndefined, toUIString, verifyCallback, numberHasDecimals, numberIs64Bit } from './utils/types';
 | 
			
		||||
export declare const Utils: {
 | 
			
		||||
	GC: typeof GC;
 | 
			
		||||
@ -158,5 +158,7 @@ export declare const Utils: {
 | 
			
		||||
	toUIString: typeof toUIString;
 | 
			
		||||
	verifyCallback: typeof verifyCallback;
 | 
			
		||||
	dismissSoftInput: typeof dismissSoftInput;
 | 
			
		||||
	dismissKeyboard: typeof dismissKeyboard;
 | 
			
		||||
	copyToClipboard: typeof copyToClipboard;
 | 
			
		||||
};
 | 
			
		||||
export { XmlParser, ParserEventType, ParserEvent } from './xml';
 | 
			
		||||
 | 
			
		||||
@ -137,7 +137,7 @@ export * from './trace';
 | 
			
		||||
 | 
			
		||||
export * from './ui';
 | 
			
		||||
 | 
			
		||||
import { GC, isFontIconURI, isDataURI, isFileOrResourcePath, executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, executeOnUIThread, queueMacrotask, queueGC, debounce, throttle, releaseNativeObject, getModuleName, openFile, openUrl, isRealDevice, layout, ad as androidUtils, iOSNativeHelper as iosUtils, Source, RESOURCE_PREFIX, FILE_PREFIX, escapeRegexSymbols, convertString, dismissSoftInput, dataDeserialize, dataSerialize } from './utils';
 | 
			
		||||
import { GC, isFontIconURI, isDataURI, isFileOrResourcePath, executeOnMainThread, mainThreadify, isMainThread, dispatchToMainThread, executeOnUIThread, queueMacrotask, queueGC, debounce, throttle, releaseNativeObject, getModuleName, openFile, openUrl, isRealDevice, layout, ad as androidUtils, iOSNativeHelper as iosUtils, Source, RESOURCE_PREFIX, FILE_PREFIX, escapeRegexSymbols, convertString, dismissSoftInput, dismissKeyboard, dataDeserialize, dataSerialize, copyToClipboard } from './utils';
 | 
			
		||||
import { ClassInfo, getClass, getBaseClasses, getClassInfo, isBoolean, isDefined, isFunction, isNullOrUndefined, isNumber, isObject, isString, isUndefined, toUIString, verifyCallback, numberHasDecimals, numberIs64Bit } from './utils/types';
 | 
			
		||||
 | 
			
		||||
export const Utils = {
 | 
			
		||||
@ -194,6 +194,8 @@ export const Utils = {
 | 
			
		||||
	toUIString,
 | 
			
		||||
	verifyCallback,
 | 
			
		||||
	dismissSoftInput,
 | 
			
		||||
	dismissKeyboard,
 | 
			
		||||
	copyToClipboard,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export { XmlParser, ParserEventType, ParserEvent } from './xml';
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
import { ad } from './native-helper';
 | 
			
		||||
import { android as androidApp } from '../application';
 | 
			
		||||
import { SDK_VERSION } from '../utils';
 | 
			
		||||
import { FileSystemAccess } from '../file-system/file-system-access';
 | 
			
		||||
import { Trace } from '../trace';
 | 
			
		||||
@ -170,3 +171,26 @@ export function isRealDevice(): boolean {
 | 
			
		||||
export function dismissSoftInput(nativeView?: any): void {
 | 
			
		||||
	ad.dismissSoftInput(nativeView);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function dismissKeyboard() {
 | 
			
		||||
	dismissSoftInput();
 | 
			
		||||
 | 
			
		||||
	const activity = ad.getCurrentActivity();
 | 
			
		||||
	if (activity) {
 | 
			
		||||
		const focus = activity.getCurrentFocus();
 | 
			
		||||
 | 
			
		||||
		if (focus) {
 | 
			
		||||
			focus.clearFocus();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function copyToClipboard(value: string) {
 | 
			
		||||
	try {
 | 
			
		||||
		const clipboard = ad.getApplicationContext().getSystemService(android.content.Context.CLIPBOARD_SERVICE);
 | 
			
		||||
		const clip = android.content.ClipData.newPlainText('Clipboard value', value);
 | 
			
		||||
		clipboard.setPrimaryClip(clip);
 | 
			
		||||
	} catch (err) {
 | 
			
		||||
		console.log(err);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								packages/core/utils/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								packages/core/utils/index.d.ts
									
									
									
									
										vendored
									
									
								
							@ -321,3 +321,13 @@ export function isRealDevice(): boolean;
 | 
			
		||||
 * Hides the soft input method, usually a soft keyboard.
 | 
			
		||||
 */
 | 
			
		||||
export function dismissSoftInput(nativeView?: any): void;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Dismiss any keyboard visible on the screen.
 | 
			
		||||
 */
 | 
			
		||||
export function dismissKeyboard(): void;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Copy value to device clipboard.
 | 
			
		||||
 */
 | 
			
		||||
export function copyToClipboard(value: string): void;
 | 
			
		||||
 | 
			
		||||
@ -55,3 +55,15 @@ export function dismissSoftInput(nativeView?: UIView): void {
 | 
			
		||||
	}
 | 
			
		||||
	UIApplication.sharedApplication.sendActionToFromForEvent('resignFirstResponder', null, null, null);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function dismissKeyboard() {
 | 
			
		||||
	dismissSoftInput();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function copyToClipboard(value: string) {
 | 
			
		||||
	try {
 | 
			
		||||
		UIPasteboard.generalPasteboard.setValueForPasteboardType(value, kUTTypePlainText);
 | 
			
		||||
	} catch (err) {
 | 
			
		||||
		console.log(err);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -152,6 +152,12 @@ export namespace ad {
 | 
			
		||||
 | 
			
		||||
		return applicationContext;
 | 
			
		||||
	}
 | 
			
		||||
	export function getCurrentActivity() {
 | 
			
		||||
		if (!androidApp) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
		return androidApp.foregroundActivity || androidApp.startActivity;
 | 
			
		||||
	}
 | 
			
		||||
	export function getApplication() {
 | 
			
		||||
		if (!application) {
 | 
			
		||||
			application = <android.app.Application>getNativeApplication();
 | 
			
		||||
@ -199,8 +205,8 @@ export namespace ad {
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			windowToken = nativeView.getWindowToken();
 | 
			
		||||
		} else if (androidApp.foregroundActivity instanceof androidx.appcompat.app.AppCompatActivity) {
 | 
			
		||||
			const decorView = androidApp.foregroundActivity.getWindow().getDecorView();
 | 
			
		||||
		} else if (getCurrentActivity() instanceof androidx.appcompat.app.AppCompatActivity) {
 | 
			
		||||
			const decorView = getCurrentActivity().getWindow().getDecorView();
 | 
			
		||||
			if (decorView) {
 | 
			
		||||
				windowToken = decorView.getWindowToken();
 | 
			
		||||
				decorView.requestFocus();
 | 
			
		||||
@ -259,6 +265,9 @@ export namespace ad {
 | 
			
		||||
 | 
			
		||||
			return resources.getIdentifier(uri, null, null);
 | 
			
		||||
		}
 | 
			
		||||
		export function getResource(name: string, type?: string): number {
 | 
			
		||||
			return getResources().getIdentifier(name, type, getPackageName());
 | 
			
		||||
		}
 | 
			
		||||
		export function getPalleteColor(name: string, context: android.content.Context): number {
 | 
			
		||||
			return getPaletteColor(name, context);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								packages/core/utils/native-helper.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								packages/core/utils/native-helper.d.ts
									
									
									
									
										vendored
									
									
								
							@ -18,6 +18,10 @@ export namespace ad {
 | 
			
		||||
	 */
 | 
			
		||||
	export function getApplication(): any; /* android.app.Application */
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get the current native Android activity.
 | 
			
		||||
	 */
 | 
			
		||||
	export function getCurrentActivity(): any; /* android.app.Activity */
 | 
			
		||||
	/**
 | 
			
		||||
	 * Gets the native Android application resources.
 | 
			
		||||
	 */
 | 
			
		||||
@ -82,6 +86,15 @@ export namespace ad {
 | 
			
		||||
		 */
 | 
			
		||||
		export function getId(name: string): number;
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * Gets the id from a given name with optional type.
 | 
			
		||||
		 * This sets an explicit package name.
 | 
			
		||||
		 * https://developer.android.com/reference/android/content/res/Resources#getIdentifier(java.lang.String,%20java.lang.String,%20java.lang.String)
 | 
			
		||||
		 * @param name - Name of the resource.
 | 
			
		||||
		 * @param type - (Optional) type
 | 
			
		||||
		 */
 | 
			
		||||
		export function getResource(name: string, type?: string): number;
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * [Obsolete - please use getPaletteColor] Gets a color from current theme.
 | 
			
		||||
		 * @param name - Name of the color
 | 
			
		||||
@ -137,6 +150,18 @@ export namespace iOSNativeHelper {
 | 
			
		||||
	 */
 | 
			
		||||
	export function getRootViewController(): any; /* UIViewController */
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get the UIWindow of the app
 | 
			
		||||
	 */
 | 
			
		||||
	export function getWindow(): any; /* UIWindow */
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Set the window background color of base view of the app.
 | 
			
		||||
	 * Often this is shown when opening a modal as the view underneath scales down revealing the window color.
 | 
			
		||||
	 * @param value color (hex, rgb, rgba, etc.)
 | 
			
		||||
	 */
 | 
			
		||||
	export function setWindowBackgroundColor(value: string): void;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Data serialize and deserialize helpers
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,4 @@
 | 
			
		||||
import { Color } from '../color';
 | 
			
		||||
import { Trace } from '../trace';
 | 
			
		||||
import { getClass, isNullOrUndefined, numberHasDecimals, numberIs64Bit } from './types';
 | 
			
		||||
 | 
			
		||||
@ -108,7 +109,7 @@ export function dataSerialize(data: any, wrapPrimitives: boolean = false) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export namespace iOSNativeHelper {
 | 
			
		||||
	// TODO: remove for NativeScript 7.0
 | 
			
		||||
	// TODO: remove for NativeScript 9.0
 | 
			
		||||
	export function getter<T>(_this: any, property: T | { (): T }): T {
 | 
			
		||||
		console.log('utils.ios.getter() is deprecated; use the respective native property instead');
 | 
			
		||||
		if (typeof property === 'function') {
 | 
			
		||||
@ -137,15 +138,34 @@ export namespace iOSNativeHelper {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	export function getRootViewController(): UIViewController {
 | 
			
		||||
		const app = UIApplication.sharedApplication;
 | 
			
		||||
		const win = app.keyWindow || (app.windows && app.windows.count > 0 && app.windows.objectAtIndex(0));
 | 
			
		||||
		let vc = win.rootViewController;
 | 
			
		||||
		const win = getWindow();
 | 
			
		||||
		let vc = win && win.rootViewController;
 | 
			
		||||
		while (vc && vc.presentedViewController) {
 | 
			
		||||
			vc = vc.presentedViewController;
 | 
			
		||||
		}
 | 
			
		||||
		return vc;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	export function getWindow(): UIWindow {
 | 
			
		||||
		const app = UIApplication.sharedApplication;
 | 
			
		||||
		if (!app) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		return app.keyWindow || (app.windows && app.windows.count > 0 && app.windows.objectAtIndex(0));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	export function setWindowBackgroundColor(value: string) {
 | 
			
		||||
		const win = getWindow();
 | 
			
		||||
		if (win) {
 | 
			
		||||
			const bgColor = new Color(value);
 | 
			
		||||
			win.backgroundColor = bgColor.ios;
 | 
			
		||||
			const rootVc = getRootViewController();
 | 
			
		||||
			if (rootVc?.view) {
 | 
			
		||||
				rootVc.view.backgroundColor = bgColor.ios;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	export function isLandscape(): boolean {
 | 
			
		||||
		console.log('utils.ios.isLandscape() is deprecated; use application.orientation instead');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user