mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00
fix(modals): application activityBackPressed event not fired for modals (#6261)
This commit is contained in:

committed by
vakrilov

parent
8a5f73055e
commit
8575c60b13
@ -0,0 +1,32 @@
|
|||||||
|
import { android as androidApp, AndroidActivityBackPressedEventData } from "tns-core-modules/application";
|
||||||
|
import { fromObject, Observable } from "tns-core-modules/data/observable"
|
||||||
|
|
||||||
|
let context: Observable;
|
||||||
|
function activityBackPressedCallback(args: AndroidActivityBackPressedEventData) {
|
||||||
|
if (context && context.get("shouldCancel")) {
|
||||||
|
context.set("shouldCancel", false);
|
||||||
|
context.set("message", "Back-pressed canceled!");
|
||||||
|
args.cancel = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function onLoaded(args) {
|
||||||
|
console.log("back-button modal test loaded");
|
||||||
|
context = fromObject({
|
||||||
|
message: "First back-press will be canceled",
|
||||||
|
shouldCancel: true
|
||||||
|
});
|
||||||
|
|
||||||
|
args.object.bindingContext = context;
|
||||||
|
|
||||||
|
if (androidApp) {
|
||||||
|
androidApp.on("activityBackPressed", activityBackPressedCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function onUnloaded(args) {
|
||||||
|
console.log("back-button modal test unloaded");
|
||||||
|
|
||||||
|
if (androidApp) {
|
||||||
|
androidApp.off("activityBackPressed", activityBackPressedCallback);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
<StackLayout loaded="onLoaded" unloaded="onUnloaded">
|
||||||
|
<Label text="{{ message }}" />
|
||||||
|
<Label text="{{ 'will cancel next back press: ' + shouldCancel }}" />
|
||||||
|
</StackLayout>
|
@ -57,6 +57,15 @@ export function onModalLayout(args: EventData) {
|
|||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function onAndroidBackEvents(args: EventData) {
|
||||||
|
const view = args.object as View;
|
||||||
|
view.showModal(
|
||||||
|
"android-back-button/android-back-button-page",
|
||||||
|
null,
|
||||||
|
() => console.log("android-back-button modal page layout closed"),
|
||||||
|
true, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
export function onModalTabView(args: EventData) {
|
export function onModalTabView(args: EventData) {
|
||||||
const fullscreen = false;
|
const fullscreen = false;
|
||||||
const animated = false;
|
const animated = false;
|
||||||
|
@ -19,5 +19,6 @@
|
|||||||
<Button text="Reset Frame Root View" tap="onFrameRootViewReset" />
|
<Button text="Reset Frame Root View" tap="onFrameRootViewReset" />
|
||||||
<Button text="Reset Tab Root View" tap="onTabRootViewReset" />
|
<Button text="Reset Tab Root View" tap="onTabRootViewReset" />
|
||||||
<Button text="Reset Layout Root View" tap="onLayoutRootViewReset" />
|
<Button text="Reset Layout Root View" tap="onLayoutRootViewReset" />
|
||||||
|
<Button text="Android Back Btn Events" tap="onAndroidBackEvents" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Page>
|
</Page>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// Definitions.
|
// Definitions.
|
||||||
import { Point, CustomLayoutView as CustomLayoutViewDefinition, dip } from ".";
|
import { Point, CustomLayoutView as CustomLayoutViewDefinition, dip } from ".";
|
||||||
import { GestureTypes, GestureEventData } from "../../gestures";
|
import { GestureTypes, GestureEventData } from "../../gestures";
|
||||||
import { AndroidActivityBackPressedEventData } from "../../../application";
|
|
||||||
// Types.
|
// Types.
|
||||||
import {
|
import {
|
||||||
ViewCommon, layout, isEnabledProperty, originXProperty, originYProperty, automationTextProperty, isUserInteractionEnabledProperty,
|
ViewCommon, layout, isEnabledProperty, originXProperty, originYProperty, automationTextProperty, isUserInteractionEnabledProperty,
|
||||||
@ -22,6 +21,7 @@ import {
|
|||||||
import { Background, ad as androidBackground } from "../../styling/background";
|
import { Background, ad as androidBackground } from "../../styling/background";
|
||||||
import { profile } from "../../../profiling";
|
import { profile } from "../../../profiling";
|
||||||
import { topmost } from "../../frame/frame-stack";
|
import { topmost } from "../../frame/frame-stack";
|
||||||
|
import { AndroidActivityBackPressedEventData, android as androidApp } from "../../../application";
|
||||||
|
|
||||||
export * from "./view-common";
|
export * from "./view-common";
|
||||||
|
|
||||||
@ -107,6 +107,13 @@ function initializeDialogFragment() {
|
|||||||
activity: view._context,
|
activity: view._context,
|
||||||
cancel: false,
|
cancel: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Fist fire application.android global event
|
||||||
|
androidApp.notify(args);
|
||||||
|
if (args.cancel) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
view.notify(args);
|
view.notify(args);
|
||||||
|
|
||||||
if (!args.cancel && !view.onBackPressed()) {
|
if (!args.cancel && !view.onBackPressed()) {
|
||||||
|
Reference in New Issue
Block a user