Files
2025-07-10 15:47:29 -07:00

136 lines
4.5 KiB
TypeScript

/**
* Do not import other files here to avoid circular dependencies.
* Used to define helper functions and variables that are shared between Android and iOS
* without introducing platform-specific code directly.
*/
let nativeApp: UIApplication | android.app.Application;
/**
* Get the current application instance.
* @returns current application instance, UIApplication on iOS or android.app.Application on Android.
*/
export function getNativeApp() {
return nativeApp;
}
/**
* This is called internally to set the native application instance.
* You typically do not need to call this directly.
* However, it's exposed for special case purposes, such as custom application initialization.
* @param app The native application instance to set.
* This should be called once during application startup to set the native app instance.
*/
export function setNativeApp(app: UIApplication | android.app.Application) {
nativeApp = app;
}
let rootView: any;
export function getRootView() {
return rootView;
}
export function setRootView(view: any) {
rootView = view;
}
let _appInBackground: boolean = false;
export function isAppInBackground() {
return _appInBackground;
}
export function setAppInBackground(value: boolean) {
_appInBackground = value;
}
let _iosWindow: UIWindow;
export function getiOSWindow(): UIWindow {
return _iosWindow;
}
export function setiOSWindow(value: UIWindow) {
_iosWindow = value;
}
let _appMainEntry: any /* NavigationEntry */;
export function getAppMainEntry(): any /* NavigationEntry */ {
return _appMainEntry;
}
export function setAppMainEntry(entry: any /* NavigationEntry */) {
_appMainEntry = entry;
}
// Aids avoiding circular dependencies by allowing the application event listeners to be toggled
let _toggleApplicationEventListenersHandler: (toAdd: boolean, callback: (args: any) => void) => void;
export function toggleApplicationEventListeners(toAdd: boolean, callback: (args: any) => void) {
if (_toggleApplicationEventListenersHandler) {
_toggleApplicationEventListenersHandler(toAdd, callback);
}
}
export function setToggleApplicationEventListenersCallback(callback: (toAdd: boolean, callback: (args: any) => void) => void) {
_toggleApplicationEventListenersHandler = callback;
}
// Aids avoiding circular dependencies by allowing the application properties to be retrieved
type ApplicationPropertyValues = { orientation: 'portrait' | 'landscape' | 'unknown'; systemAppearance: 'dark' | 'light' | null };
let _applicationPropertiesCallback: () => ApplicationPropertyValues;
export function getApplicationProperties(): ApplicationPropertyValues {
if (_applicationPropertiesCallback) {
return _applicationPropertiesCallback();
}
return { orientation: 'unknown', systemAppearance: null };
}
export function setApplicationPropertiesCallback(callback: () => ApplicationPropertyValues) {
_applicationPropertiesCallback = callback;
}
let _a11yUpdatePropertiesCallback: (view: any /* View */) => void;
export function setA11yUpdatePropertiesCallback(callback: (view: any /* View */) => void) {
_a11yUpdatePropertiesCallback = callback;
}
export function updateA11yPropertiesCallback(view: any /* View */) {
if (_a11yUpdatePropertiesCallback) {
_a11yUpdatePropertiesCallback(view);
}
}
/**
* Internal Android app helpers
*/
// Circular dependency avoidance for image fetching on android
let _imageFetcher: org.nativescript.widgets.image.Fetcher;
export function getImageFetcher(): org.nativescript.widgets.image.Fetcher {
return _imageFetcher;
}
export function setImageFetcher(fetcher: org.nativescript.widgets.image.Fetcher) {
_imageFetcher = fetcher;
}
export enum CacheMode {
none,
memory,
diskAndMemory,
}
let _currentCacheMode: CacheMode;
export function initImageCache(context: android.content.Context, mode = CacheMode.diskAndMemory, memoryCacheSize = 0.25, diskCacheSize: number = 10 * 1024 * 1024): void {
if (_currentCacheMode === mode) {
return;
}
_currentCacheMode = mode;
if (!getImageFetcher()) {
setImageFetcher(org.nativescript.widgets.image.Fetcher.getInstance(context));
} else {
getImageFetcher().clearCache();
}
const params = new org.nativescript.widgets.image.Cache.CacheParams();
params.memoryCacheEnabled = mode !== CacheMode.none;
params.setMemCacheSizePercent(memoryCacheSize); // Set memory cache to % of app memory
params.diskCacheEnabled = mode === CacheMode.diskAndMemory;
params.diskCacheSize = diskCacheSize;
const imageCache = org.nativescript.widgets.image.Cache.getInstance(params);
getImageFetcher().addImageCache(imageCache);
getImageFetcher().initCache();
}