fix(application): wrap native classes in initialisers (#10335)

fixes: #10334
This commit is contained in:
Igor Randjelovic
2023-07-10 09:44:45 +02:00
committed by GitHub
parent a7d99be025
commit 5359153a11

View File

@ -13,8 +13,18 @@ declare namespace com {
}
}
@NativeClass
class BroadcastReceiver extends android.content.BroadcastReceiver {
declare class BroadcastReceiver extends android.content.BroadcastReceiver {
constructor(onReceiveCallback: (context: android.content.Context, intent: android.content.Intent) => void);
}
let BroadcastReceiver_: typeof BroadcastReceiver;
function initBroadcastReceiver() {
if (BroadcastReceiver_) {
return BroadcastReceiver_;
}
@NativeClass
class BroadcastReceiverImpl extends android.content.BroadcastReceiver {
private _onReceiveCallback: (context: android.content.Context, intent: android.content.Intent) => void;
constructor(onReceiveCallback: (context: android.content.Context, intent: android.content.Intent) => void) {
@ -29,11 +39,23 @@ class BroadcastReceiver extends android.content.BroadcastReceiver {
this._onReceiveCallback(context, intent);
}
}
}
BroadcastReceiver_ = BroadcastReceiverImpl;
return BroadcastReceiver_;
}
@NativeClass
@JavaProxy('org.nativescript.NativeScriptLifecycleCallbacks')
class NativeScriptLifecycleCallbacks extends android.app.Application.ActivityLifecycleCallbacks {
declare class NativeScriptLifecycleCallbacks extends android.app.Application.ActivityLifecycleCallbacks {}
let NativeScriptLifecycleCallbacks_: typeof NativeScriptLifecycleCallbacks;
function initNativeScriptLifecycleCallbacks() {
if (NativeScriptLifecycleCallbacks_) {
return NativeScriptLifecycleCallbacks_;
}
@NativeClass
@JavaProxy('org.nativescript.NativeScriptLifecycleCallbacks')
class NativeScriptLifecycleCallbacksImpl extends android.app.Application.ActivityLifecycleCallbacks {
private activitiesCount: number = 0;
private nativescriptActivity: androidx.appcompat.app.AppCompatActivity;
@ -211,11 +233,23 @@ class NativeScriptLifecycleCallbacks extends android.app.Application.ActivityLif
});
rootView.getViewTreeObserver().addOnGlobalLayoutListener(global.onGlobalLayoutListener);
}
}
NativeScriptLifecycleCallbacks_ = NativeScriptLifecycleCallbacksImpl;
return NativeScriptLifecycleCallbacks_;
}
@NativeClass
@JavaProxy('org.nativescript.NativeScriptComponentCallbacks')
class NativeScriptComponentCallbacks extends android.content.ComponentCallbacks2 {
declare class NativeScriptComponentCallbacks extends android.content.ComponentCallbacks2 {}
let NativeScriptComponentCallbacks_: typeof NativeScriptComponentCallbacks;
function initNativeScriptComponentCallbacks() {
if (NativeScriptComponentCallbacks_) {
return NativeScriptComponentCallbacks_;
}
@NativeClass
@JavaProxy('org.nativescript.NativeScriptComponentCallbacks')
class NativeScriptComponentCallbacksImpl extends android.content.ComponentCallbacks2 {
@profile
public onLowMemory(): void {
gc();
@ -237,6 +271,10 @@ class NativeScriptComponentCallbacks extends android.content.ComponentCallbacks2
public onConfigurationChanged(newConfiguration: android.content.res.Configuration): void {
Application.android.onConfigurationChanged(newConfiguration);
}
}
NativeScriptComponentCallbacks_ = NativeScriptComponentCallbacksImpl;
return NativeScriptComponentCallbacks_;
}
export class AndroidApplication extends ApplicationCommon implements IAndroidApplication {
@ -286,10 +324,10 @@ export class AndroidApplication extends ApplicationCommon implements IAndroidApp
this._packageName = nativeApp.getPackageName();
// we store those callbacks and add a function for clearing them later so that the objects will be eligable for GC
this.lifecycleCallbacks = new NativeScriptLifecycleCallbacks();
this.lifecycleCallbacks = new (initNativeScriptLifecycleCallbacks())();
this.nativeApp.registerActivityLifecycleCallbacks(this.lifecycleCallbacks);
this.componentCallbacks = new NativeScriptComponentCallbacks();
this.componentCallbacks = new (initNativeScriptComponentCallbacks())();
this.nativeApp.registerComponentCallbacks(this.componentCallbacks);
this._registerPendingReceivers();
@ -395,7 +433,7 @@ export class AndroidApplication extends ApplicationCommon implements IAndroidApp
public registerBroadcastReceiver(intentFilter: string, onReceiveCallback: (context: android.content.Context, intent: android.content.Intent) => void): void {
const registerFunc = (context: android.content.Context) => {
const receiver: android.content.BroadcastReceiver = new BroadcastReceiver(onReceiveCallback);
const receiver: android.content.BroadcastReceiver = new (initBroadcastReceiver())(onReceiveCallback);
context.registerReceiver(receiver, new android.content.IntentFilter(intentFilter));
this._registeredReceivers[intentFilter] = receiver;
};