* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __decorate = (this && this.__decorate) || function (m10, n10, o10, p10) {
var q10 = arguments.length, r10 = q10 < 3 ? n10 : p10 === null ? p10 = Object.getOwnPropertyDescriptor(n10, o10) : p10, s10;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
r10 = Reflect.decorate(m10, n10, o10, p10);
else
for (var t10 = m10.length - 1; t10 >= 0; t10--)
if (s10 = m10[t10])
r10 = (q10 < 3 ? s10(r10) : q10 > 3 ? s10(n10, o10, r10) : s10(n10, o10)) || r10;
return q10 > 3 && r10 && Object.defineProperty(n10, o10, r10), r10;
};
if (!("finalizeConstruction" in ViewPU.prototype)) {
Reflect.set(ViewPU.prototype, "finalizeConstruction", () => { });
}
const hilog = requireNapi('hilog');
const deviceInfo = requireNapi('deviceInfo');
const display = requireNapi('display');
const mediaquery = requireNapi('mediaquery');
const TAG = 'DeviceHelper';
export class DeviceHelper {
static isPhone() {
return (DeviceHelper.DEVICE_TYPE === DeviceHelper.TYPE_PHONE || DeviceHelper.DEVICE_TYPE === DeviceHelper.TYPE_DEFAULT);
}
static isTablet() {
return DeviceHelper.DEVICE_TYPE === DeviceHelper.TYPE_TABLET;
}
static isFold() {
let k10 = false;
try {
k10 = display.isFoldable();
}
catch (l10) {
hilog.error(0x0000, TAG, 'isFold -> isFoldable try error:', l10);
}
return k10;
}
static isExpanded() {
let i10 = false;
try {
i10 = display.getFoldStatus() === display.FoldStatus.FOLD_STATUS_EXPANDED;
}
catch (j10) {
hilog.error(0x0000, TAG, 'isExpanded -> try error:', j10);
}
return i10;
}
static isColumn() {
let g10 = false;
try {
g10 = display.isFoldable() && (display.getFoldStatus() === display.FoldStatus.FOLD_STATUS_EXPANDED ||
display.getFoldStatus() === display.FoldStatus.FOLD_STATUS_HALF_FOLDED);
}
catch (h10) {
hilog.error(0x0000, TAG, 'isColumn -> try error:', h10);
}
return g10;
}
static isStraightProduct() {
return DeviceHelper.isPhone() && !DeviceHelper.isFold();
}
}
DeviceHelper.TYPE_DEFAULT = 'default';
DeviceHelper.TYPE_PHONE = 'phone';
DeviceHelper.TYPE_TABLET = 'tablet';
DeviceHelper.DEVICE_TYPE = deviceInfo.deviceType;
export class DeviceListenerManager {
constructor() {
this.portraitListener = mediaquery.matchMediaSync('(orientation: portrait)');
this.drawableWidthLargeListener = mediaquery.matchMediaSync('(width >= 600vp)');
this.isPortrait = undefined;
this.onOrientationChange = undefined;
this.isLarge = undefined;
this.onDrawableWidthChange = undefined;
}
static getInstance() {
if (DeviceListenerManager.instance === undefined) {
DeviceListenerManager.instance = new DeviceListenerManager();
}
return DeviceListenerManager.instance;
}
onPortraitChange(e10) {
let f10 = false;
if (DeviceListenerManager.getInstance().isPortrait === undefined) {
DeviceListenerManager.getInstance().isPortrait = e10.matches;
f10 = true;
}
else {
if (e10.matches) {
if (!DeviceListenerManager.getInstance().isPortrait) {
DeviceListenerManager.getInstance().isPortrait = true;
f10 = true;
hilog.debug(0x0000, 'MultiNavigation', 'display portrait');
}
}
else {
if (DeviceListenerManager.getInstance().isPortrait) {
DeviceListenerManager.getInstance().isPortrait = false;
f10 = true;
hilog.debug(0x0000, 'MultiNavigation', 'display landscape');
}
}
}
if (f10) {
DeviceListenerManager.getInstance().notifyOrientationChange();
}
}
notifyOrientationChange() {
this.onOrientationChange && this.onOrientationChange(this.isPortrait);
}
onDrawableWidthLargeChange(c10) {
let d10 = false;
if (DeviceListenerManager.getInstance().isLarge === undefined) {
DeviceListenerManager.getInstance().isLarge = c10.matches;
d10 = true;
}
else {
if (c10.matches) {
if (!DeviceListenerManager.getInstance().isLarge) {
DeviceListenerManager.getInstance().isLarge = true;
d10 = true;
hilog.debug(0x0000, 'MultiNavigation', 'display isLarge');
}
}
else {
if (DeviceListenerManager.getInstance().isLarge) {
DeviceListenerManager.getInstance().isLarge = false;
d10 = true;
hilog.debug(0x0000, 'MultiNavigation', 'display not large');
}
}
}
if (d10) {
DeviceListenerManager.getInstance().notifyWidthChange();
}
}
notifyWidthChange() {
this.onDrawableWidthChange && this.onDrawableWidthChange(this.isLarge);
}
registerOrientationLister(b10) {
this.onOrientationChange = b10;
this.onOrientationChange && this.isPortrait && this.onOrientationChange(this.isPortrait);
}
unregisterOrientationLister() {
this.onOrientationChange = undefined;
}
registerDrawableWidthLister(a10) {
this.onDrawableWidthChange = a10;
this.onDrawableWidthChange && this.isLarge && this.onDrawableWidthChange(this.isLarge);
}
unregisterDrawableWidthLister() {
this.onDrawableWidthChange = undefined;
}
initListener() {
this.portraitListener.on('change', this.onPortraitChange);
this.drawableWidthLargeListener.on('change', this.onDrawableWidthLargeChange);
}
finalizeListener() {
this.portraitListener.off('change', this.onPortraitChange);
this.drawableWidthLargeListener.off('change', this.onDrawableWidthLargeChange);
}
}
let NavWidthRangeAttrModifier = class NavWidthRangeAttrModifier {
constructor() {
this.isApplicationSet = false;
this.minHomeWidth = '50%';
this.maxHomeWidth = '50%';
}
applyNormalAttribute(z9) {
if (this.isApplicationSet) {
z9.navBarWidthRange([this.minHomeWidth, this.maxHomeWidth]);
}
}
};
NavWidthRangeAttrModifier = __decorate([
Observed
], NavWidthRangeAttrModifier);
export { NavWidthRangeAttrModifier };
export class SubNavigation extends ViewPU {
constructor(s9, t9, u9, v9 = -1, w9 = undefined, x9) {
super(s9, u9, v9, x9);
if (typeof w9 === "function") {
this.paramsGenerator_ = w9;
}
this.__isPortrait = new SynchedPropertySimpleTwoWayPU(t9.isPortrait, this, "isPortrait");
this.__displayMode = new ObservedPropertySimplePU(0, this, "displayMode");
this.__multiStack = new SynchedPropertyNesedObjectPU(t9.multiStack, this, "multiStack");
this.navDestination = undefined;
this.primaryStack = new MyNavPathStack();
this.__secondaryStack = new ObservedPropertyObjectPU(new MyNavPathStack(), this, "secondaryStack");
this.__primaryWidth = new ObservedPropertySimplePU('50%', this, "primaryWidth");
this.__needRenderIsFullScreen = new SynchedPropertyNesedObjectPU(t9.needRenderIsFullScreen, this, "needRenderIsFullScreen");
this.__needRenderLeftClickCount = new SynchedPropertyNesedObjectPU(t9.needRenderLeftClickCount, this, "needRenderLeftClickCount");
this.__navWidthRangeModifier = new SynchedPropertyNesedObjectPU(t9.navWidthRangeModifier, this, "navWidthRangeModifier");
this.__needRenderDisplayMode = new SynchedPropertyNesedObjectPU(t9.needRenderDisplayMode, this, "needRenderDisplayMode");
this.onNavigationModeChange = (y9) => { };
this.setInitiallyProvidedValue(t9);
this.finalizeConstruction();
}
setInitiallyProvidedValue(r9) {
if (r9.displayMode !== undefined) {
this.displayMode = r9.displayMode;
}
this.__multiStack.set(r9.multiStack);
if (r9.navDestination !== undefined) {
this.navDestination = r9.navDestination;
}
if (r9.primaryStack !== undefined) {
this.primaryStack = r9.primaryStack;
}
if (r9.secondaryStack !== undefined) {
this.secondaryStack = r9.secondaryStack;
}
if (r9.primaryWidth !== undefined) {
this.primaryWidth = r9.primaryWidth;
}
this.__needRenderIsFullScreen.set(r9.needRenderIsFullScreen);
this.__needRenderLeftClickCount.set(r9.needRenderLeftClickCount);
this.__navWidthRangeModifier.set(r9.navWidthRangeModifier);
this.__needRenderDisplayMode.set(r9.needRenderDisplayMode);
if (r9.onNavigationModeChange !== undefined) {
this.onNavigationModeChange = r9.onNavigationModeChange;
}
}
updateStateVars(q9) {
this.__multiStack.set(q9.multiStack);
this.__needRenderIsFullScreen.set(q9.needRenderIsFullScreen);
this.__needRenderLeftClickCount.set(q9.needRenderLeftClickCount);
this.__navWidthRangeModifier.set(q9.navWidthRangeModifier);
this.__needRenderDisplayMode.set(q9.needRenderDisplayMode);
}
purgeVariableDependenciesOnElmtId(p9) {
this.__isPortrait.purgeDependencyOnElmtId(p9);
this.__displayMode.purgeDependencyOnElmtId(p9);
this.__multiStack.purgeDependencyOnElmtId(p9);
this.__secondaryStack.purgeDependencyOnElmtId(p9);
this.__primaryWidth.purgeDependencyOnElmtId(p9);
this.__needRenderIsFullScreen.purgeDependencyOnElmtId(p9);
this.__needRenderLeftClickCount.purgeDependencyOnElmtId(p9);
this.__navWidthRangeModifier.purgeDependencyOnElmtId(p9);
this.__needRenderDisplayMode.purgeDependencyOnElmtId(p9);
}
aboutToBeDeleted() {
this.__isPortrait.aboutToBeDeleted();
this.__displayMode.aboutToBeDeleted();
this.__multiStack.aboutToBeDeleted();
this.__secondaryStack.aboutToBeDeleted();
this.__primaryWidth.aboutToBeDeleted();
this.__needRenderIsFullScreen.aboutToBeDeleted();
this.__needRenderLeftClickCount.aboutToBeDeleted();
this.__navWidthRangeModifier.aboutToBeDeleted();
this.__needRenderDisplayMode.aboutToBeDeleted();
SubscriberManager.Get().delete(this.id__());
this.aboutToBeDeletedInternal();
}
get isPortrait() {
return this.__isPortrait.get();
}
set isPortrait(o9) {
this.__isPortrait.set(o9);
}
get displayMode() {
return this.__displayMode.get();
}
set displayMode(n9) {
this.__displayMode.set(n9);
}
get multiStack() {
return this.__multiStack.get();
}
get secondaryStack() {
return this.__secondaryStack.get();
}
set secondaryStack(m9) {
this.__secondaryStack.set(m9);
}
get primaryWidth() {
return this.__primaryWidth.get();
}
set primaryWidth(l9) {
this.__primaryWidth.set(l9);
}
get needRenderIsFullScreen() {
return this.__needRenderIsFullScreen.get();
}
get needRenderLeftClickCount() {
return this.__needRenderLeftClickCount.get();
}
get navWidthRangeModifier() {
return this.__navWidthRangeModifier.get();
}
get needRenderDisplayMode() {
return this.__needRenderDisplayMode.get();
}
SubNavDestination(i9, j9, k9 = null) {
this.navDestination.bind(this)(i9, j9);
}
getMode() {
this.displayMode = this.needRenderDisplayMode.displayMode;
if (DeviceHelper.isPhone() && DeviceHelper.isStraightProduct()) {
return NavigationMode.Stack;
}
if (this.displayMode === display.FoldStatus.FOLD_STATUS_UNKNOWN) {
try {
this.displayMode = display.getFoldStatus();
} catch (err) {
hilog.warn(0x0000, 'MultiNavigation', 'Failed to get fold status. error:' + JSON.stringify(err));
}
}
if (DeviceHelper.isTablet() && this.isPortrait) {
hilog.info(0x0000, 'MultiNavigation', 'SubNavigation getMode tablet portrait');
return NavigationMode.Stack;
}
if (this.needRenderIsFullScreen.isFullScreen == undefined) {
if (DeviceHelper.isPhone()) {
return this.secondaryStack.size() > 0 && DeviceHelper.isColumn() ? NavigationMode.Auto : NavigationMode.Stack;
}
return this.secondaryStack.size() > 0 ? NavigationMode.Auto : NavigationMode.Stack;
}
return this.needRenderIsFullScreen.isFullScreen ? NavigationMode.Stack : NavigationMode.Auto;
}
aboutToAppear() {
hilog.debug(0x0000, 'MultiNavigation', 'SubNavigation aboutToAppear param = ' + JSON.stringify(this.primaryStack));
}
initialRender() {
this.observeComponentCreation2((a9, b9) => {
NavDestination.create(() => {
this.observeComponentCreation2((f9, g9) => {
Navigation.create(this.secondaryStack, { moduleName: "MultiNavigation", pagePath: "", isUserCreateStack: true });
Navigation.mode(this.getMode());
Navigation.onNavigationModeChange(this?.onNavigationModeChange);
Navigation.hideBackButton(true);
Navigation.hideTitleBar(true);
Navigation.navDestination({ builder: this.SubNavDestination.bind(this) });
Navigation.navBarWidth(this.primaryWidth);
Navigation.attributeModifier.bind(this)(ObservedObject.GetRawObject(this.navWidthRangeModifier));
Navigation.onTouch((h9) => {
if (h9.type === TouchType.Down) {
hilog.info(0x0000, 'MultiNavigation', 'outer navigation this.outerStack.leftClickCount ' +
this.needRenderLeftClickCount.leftClickCount);
this.needRenderLeftClickCount.leftClickCount--;
}
});
}, Navigation);
this.observeComponentCreation2((c9, d9) => {
Navigation.create(this.primaryStack, { moduleName: "MultiNavigation", pagePath: "", isUserCreateStack: true });
Navigation.hideNavBar(true);
Navigation.mode(NavigationMode.Stack);
Navigation.navDestination({ builder: this.SubNavDestination.bind(this) });
Navigation.hideTitleBar(true);
Navigation.hideToolBar(true);
Navigation.hideBackButton(true);
Navigation.onTouch((e9) => {
if (e9.type === TouchType.Down) {
this.needRenderLeftClickCount.leftClickCount = 2;
}
});
}, Navigation);
Navigation.pop();
Navigation.pop();
}, { moduleName: "MultiNavigation", pagePath: "" });
NavDestination.onBackPressed(() => {
hilog.debug(0x0000, 'MultiNavigation', 'subNavigation NavDestination onBackPressed');
if (this.multiStack && this.secondaryStack.size() === 1) {
hilog.info(0x0000, 'MultiNavigation', 'subNavigation NavDestination onBackPressed multiStack.pop');
this.multiStack.pop();
return true;
}
return false;
});
NavDestination.hideTitleBar(true);
}, NavDestination);
NavDestination.pop();
}
rerender() {
this.updateDirtyElements();
}
}
export var SplitPolicy;
(function (z8) {
z8[z8["HOME_PAGE"] = 0] = "HOME_PAGE";
z8[z8["DETAIL_PAGE"] = 1] = "DETAIL_PAGE";
z8[z8["FULL_PAGE"] = 2] = "FULL_PAGE";
z8[z8["PlACE_HOLDER_PAGE"] = 3] = "PlACE_HOLDER_PAGE";
})(SplitPolicy || (SplitPolicy = {}));
let that;
export class MultiNavigation extends ViewPU {
constructor(q8, r8, s8, t8 = -1, u8 = undefined, v8) {
super(q8, s8, t8, v8);
if (typeof u8 === "function") {
this.paramsGenerator_ = u8;
}
this.foldStatusCallback = (y8) => {
hilog.info(0x0000, 'MultiNavigation', 'foldStatusCallback data.valueOf()=' + y8.valueOf());
this.multiStack.needRenderDisplayMode.displayMode = y8.valueOf();
this.multiStack.handleRefreshPlaceHolderIfNeeded();
};
this.__multiStack = new ObservedPropertyObjectPU(new MultiNavPathStack(), this, "multiStack");
this.navDestination = undefined;
this.mode = undefined;
this.onNavigationModeChangeCallback = (x8) => {
};
this.onHomeShowOnTop = (w8) => { };
this.__isPortrait = new ObservedPropertySimplePU(false, this, "isPortrait");
this.setInitiallyProvidedValue(r8);
this.finalizeConstruction();
}
setInitiallyProvidedValue(p8) {
if (p8.foldStatusCallback !== undefined) {
this.foldStatusCallback = p8.foldStatusCallback;
}
if (p8.multiStack !== undefined) {
this.multiStack = p8.multiStack;
}
if (p8.navDestination !== undefined) {
this.navDestination = p8.navDestination;
}
if (p8.mode !== undefined) {
this.mode = p8.mode;
}
if (p8.onNavigationModeChangeCallback !== undefined) {
this.onNavigationModeChangeCallback = p8.onNavigationModeChangeCallback;
}
if (p8.onHomeShowOnTop !== undefined) {
this.onHomeShowOnTop = p8.onHomeShowOnTop;
}
if (p8.isPortrait !== undefined) {
this.isPortrait = p8.isPortrait;
}
}
updateStateVars(o8) {
}
purgeVariableDependenciesOnElmtId(n8) {
this.__multiStack.purgeDependencyOnElmtId(n8);
this.__isPortrait.purgeDependencyOnElmtId(n8);
}
aboutToBeDeleted() {
this.__multiStack.aboutToBeDeleted();
this.__isPortrait.aboutToBeDeleted();
SubscriberManager.Get().delete(this.id__());
this.aboutToBeDeletedInternal();
}
get multiStack() {
return this.__multiStack.get();
}
set multiStack(m8) {
this.__multiStack.set(m8);
}
get isPortrait() {
return this.__isPortrait.get();
}
set isPortrait(l8) {
this.__isPortrait.set(l8);
}
MultiNavDestination(c8, d8, e8 = null) {
this.observeComponentCreation2((f8, g8) => {
If.create();
if (c8 === 'SubNavigation') {
this.ifElseBranchUpdateFunction(0, () => {
{
this.observeComponentCreation2((h8, i8) => {
if (i8) {
let j8 = new SubNavigation(this, {
isPortrait: this.__isPortrait,
multiStack: this.multiStack,
navDestination: this.navDestination,
primaryStack: d8.primaryStack,
secondaryStack: d8.secondaryStack,
needRenderIsFullScreen: d8.needRenderIsFullScreen,
needRenderLeftClickCount: this.multiStack.needRenderLeftClickCount,
navWidthRangeModifier: this.multiStack.navWidthRangeModifier,
onNavigationModeChange: this?.callback,
needRenderDisplayMode: this.multiStack.needRenderDisplayMode,
}, undefined, h8, () => { }, { page: "MultiNavigation/src/main/ets/components/MultiNavigation.ets", line: 333, col: 7 });
ViewPU.create(j8);
let k8 = () => {
return {
isPortrait: this.isPortrait,
multiStack: this.multiStack,
navDestination: this.navDestination,
primaryStack: d8.primaryStack,
secondaryStack: d8.secondaryStack,
needRenderIsFullScreen: d8.needRenderIsFullScreen,
needRenderLeftClickCount: this.multiStack.needRenderLeftClickCount,
navWidthRangeModifier: this.multiStack.navWidthRangeModifier,
onNavigationModeChange: this?.callback,
needRenderDisplayMode: this.multiStack.needRenderDisplayMode
};
};
j8.paramsGenerator_ = k8;
}
else {
this.updateStateVarsOfChildByElmtId(h8, {
multiStack: this.multiStack,
needRenderIsFullScreen: d8.needRenderIsFullScreen,
needRenderLeftClickCount: this.multiStack.needRenderLeftClickCount,
navWidthRangeModifier: this.multiStack.navWidthRangeModifier,
needRenderDisplayMode: this.multiStack.needRenderDisplayMode
});
}
}, { name: "SubNavigation" });
}
});
}
else {
this.ifElseBranchUpdateFunction(1, () => {
this.navDestination.bind(this)(c8, d8);
});
}
}, If);
If.pop();
}
callback(b8) {
if (that.onNavigationModeChangeCallback !== undefined) {
if (b8 !== that.mode || that.mode === undefined) {
that?.onNavigationModeChangeCallback(b8);
}
that.mode = b8;
}
}
aboutToAppear() {
that = this;
hilog.info(0x0000, 'MultiNavigation', 'MultiNavigation aboutToAppear');
try {
display.on('foldStatusChange', this.foldStatusCallback);
}
catch (a8) {
console.error('Failed to register callback. Code: ' + JSON.stringify(a8));
}
DeviceListenerManager.getInstance().registerOrientationLister((z7) => {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavigation orientation change ' + z7);
this.isPortrait = z7;
this.multiStack.isPortrait = z7;
this.multiStack.handleRefreshPlaceHolderIfNeeded();
});
DeviceListenerManager.getInstance().registerDrawableWidthLister((y7) => {
hilog.debug(0x0000, 'MultiNavigation', 'MultiNavigation Drawable width change ' + y7);
this.multiStack.isLarge = y7;
this.multiStack.handleRefreshPlaceHolderIfNeeded();
});
try {
this.multiStack.needRenderDisplayMode.displayMode = display.getFoldStatus();
} catch (err) {
hilog.warn(0x0000, 'MultiNavigation', 'Failed to get fold status. error:' + JSON.stringify(err));
}
DeviceListenerManager.getInstance().initListener();
this.multiStack.registerHomeChangeListener({
onHomeShowOnTop: (x7) => {
this.onHomeShowOnTop?.(x7);
},
});
}
aboutToDisappear() {
try {
display.off('foldStatusChange');
}
catch (w7) {
console.error('Failed to unregister callback. Code: ' + JSON.stringify(w7));
}
DeviceListenerManager.getInstance().unregisterOrientationLister();
DeviceListenerManager.getInstance().unregisterDrawableWidthLister();
DeviceListenerManager.getInstance().finalizeListener();
this.multiStack.unregisterHomeChangeListener();
}
initialRender() {
this.observeComponentCreation2((u7, v7) => {
Navigation.create(this.multiStack.outerStack, { moduleName: "MultiNavigation", pagePath: "", isUserCreateStack: true });
Navigation.mode(NavigationMode.Stack);
Navigation.navDestination({ builder: this.MultiNavDestination.bind(this) });
Navigation.hideBackButton(true);
Navigation.hideTitleBar(true);
Navigation.hideToolBar(true);
Navigation.hideNavBar(true);
}, Navigation);
Navigation.pop();
}
rerender() {
this.updateDirtyElements();
}
}
let MultiNavPathStack = class MultiNavPathStack extends NavPathStack {
constructor() {
super();
this.outerStack = new MyNavPathStack();
this.totalStack = [];
this.subStackList = new Array();
this.needRenderLeftClickCount = new NeedRenderLeftClickCount();
this.needRenderDisplayMode = new NeedRenderDisplayMode();
this.disableAllAnimation = false;
this.mPolicyMap = new Map();
this.navWidthRangeModifier = new NavWidthRangeAttrModifier();
this.homeWidthPercents = [50, 50];
this.keepBottomPageFlag = false;
this.homeChangeListener = undefined;
this.placeHolderPolicyInfo = undefined;
this.isPortrait = false;
this.isLarge = false;
this.navPathStackOperate = {
onPrimaryPop: () => {
hilog.info(0x0000, 'MultiNavigation', 'MyNavPathStack onPrimaryPop');
this.totalStack.pop();
this.subStackList.pop();
this.outerStack.popInner(false);
},
onSecondaryPop: () => {
hilog.info(0x0000, 'MultiNavigation', 'MyNavPathStack onSecondaryPop');
this.totalStack.pop();
this.checkAndNotifyHomeChange();
}
};
this.outerStackOperate = {
onSystemPop: () => {
hilog.info(0x0000, 'MultiNavigation', 'MyNavPathStack onOuterPop');
this.totalStack.pop();
this.subStackList.pop();
this.checkAndNotifyHomeChange();
}
};
this.outerStack.registerStackOperateCallback(this.outerStackOperate);
}
pushPath(l7, m7, n7) {
hilog.info(0x0000, 'MultiNavigation', 'pushPath policy = ' + n7 + ', info.name = ' + l7.name);
let o7 = true;
if (m7 !== undefined) {
if (typeof m7 === 'boolean') {
o7 = m7;
}
else if (m7.animated !== undefined) {
o7 = m7.animated;
}
else {
}
}
n7 = (n7 === undefined) ? SplitPolicy.DETAIL_PAGE : n7;
const p7 = this.subStackList.length;
const q7 = new MultiNavPolicyInfo(n7, l7);
hilog.info(0x0000, 'MultiNavigation', 'pushPath subStackLength = ' + p7);
if (p7 > 0) {
hilog.info(0x0000, 'MultiNavigation', 'pushPath currentTopPrimaryPolicy = ' +
this.subStackList[p7 - 1].getPrimaryPolicy());
}
if (n7 === SplitPolicy.DETAIL_PAGE && p7 > 0 &&
this.subStackList[p7 - 1].getPrimaryPolicy() === SplitPolicy.HOME_PAGE) {
let s7 = this.subStackList[p7 - 1].getSecondaryInfoList().length;
hilog.info(0x0000, 'MultiNavigation', 'pushPath detailSize = ' + s7);
if (s7 === 0) {
this.subStackList[p7 - 1].pushSecondaryPath(q7, o7);
}
else {
if (this.needRenderLeftClickCount.leftClickCount > 0) {
if (this.placeHolderPolicyInfo === undefined) {
this.subStackList[p7 - 1].clearSecondary(false);
this.totalStack.splice(this.totalStack.length - s7);
this.subStackList[p7 - 1].pushSecondaryPath(q7, false);
}
else {
const t7 = this.subStackList[p7 - 1].getSecondaryInfoList()[0].policy;
if (t7 === SplitPolicy.PlACE_HOLDER_PAGE) {
if (s7 === 1) {
this.subStackList[p7 - 1].pushSecondaryPath(q7, o7);
}
else {
this.subStackList[p7 - 1].clearSecondaryKeepPlaceHolder(false);
this.totalStack.splice(this.totalStack.length - s7 + 1);
this.subStackList[p7 - 1].pushSecondaryPath(q7, false);
}
}
else {
this.subStackList[p7 - 1].clearSecondary(false);
this.totalStack.splice(this.totalStack.length - s7);
this.subStackList[p7 - 1].pushSecondaryPath(q7, false);
}
}
}
else {
this.subStackList[p7 - 1].pushSecondaryPath(q7, o7);
}
}
}
else {
let r7 = new SubNavigationStack();
r7.registerMultiStackOperateCallback(this.navPathStackOperate);
r7.disableAnimation(this.disableAllAnimation);
r7.pushPrimaryPath(q7, false);
this.subStackList.push(r7);
this.outerStack.pushPath({ name: 'SubNavigation', param: r7 }, o7);
}
this.totalStack.push(q7);
if (n7 === SplitPolicy.HOME_PAGE && this.placeHolderPolicyInfo !== undefined &&
this.needShowPlaceHolder()) {
this.pushPlaceHolder(p7);
}
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack pushPath policy = ' + n7 +
' stackSize = ' + this.totalStack.length +
' this.leftClickCount = ' + this.needRenderLeftClickCount.leftClickCount);
this.needRenderLeftClickCount.leftClickCount = 0;
}
pushPathByName(g7, h7, i7, j7, k7) {
if (i7 !== undefined && typeof i7 !== 'boolean') {
this.pushPath({ name: g7, param: h7, onPop: i7 }, j7, k7);
return;
}
if (typeof i7 === 'boolean') {
this.pushPath({ name: g7, param: h7 }, i7, j7);
return;
}
if (j7 !== undefined && typeof j7 !== 'boolean') {
this.pushPath({ name: g7, param: h7 }, undefined, j7);
return;
}
if (typeof j7 === 'boolean') {
this.pushPath({ name: g7, param: h7 }, j7, k7);
return;
}
this.pushPath({ name: g7, param: h7 }, undefined, k7);
}
pushDestination(c7, d7, e7) {
hilog.error(0x0000, 'MultiNavigation', 'pushDestination is not support');
let f7 = Promise.reject({ message: 'not support' });
return f7;
}
pushDestinationByName(w6, x6, y6, z6, a7) {
hilog.error(0x0000, 'MultiNavigation', 'pushDestinationByName is not support');
let b7 = Promise.reject({ message: 'not support' });
return b7;
}
replacePath(p6, q6) {
let r6 = true;
if (q6 !== undefined) {
if (typeof q6 === 'boolean') {
r6 = q6;
}
else if (q6.animated !== undefined) {
r6 = q6.animated;
}
else {
}
}
let s6 = this.totalStack.length;
let t6 = this.subStackList.length;
if (s6 < 1 || t6 < 1) {
hilog.error(0x0000, 'MultiNavigation', 'replacePath fail stack is empty');
return;
}
let u6 = this.totalStack[s6 - 1].policy;
if (u6 === SplitPolicy.PlACE_HOLDER_PAGE) {
hilog.warn(0x0000, 'MultiNavigation', 'replacePath fail, not support replace placeHolder');
return;
}
const v6 = new MultiNavPolicyInfo(u6, p6);
this.subStackList[t6 - 1].replacePath(v6, r6);
this.totalStack.pop();
this.totalStack.push(v6);
}
replacePathByName(m6, n6, o6) {
this.replacePath({ name: m6, param: n6 }, o6);
}
removeByIndexes(x5) {
let y5 = x5.length;
hilog.info(0x0000, 'MultiNavigation', 'removeByIndexes indexesLength=' + y5);
if (y5 <= 0) {
return 0;
}
let z5 = this.totalStack.length;
hilog.info(0x0000, 'MultiNavigation', 'removeByIndexes oriStackSize=' + z5);
x5.sort((k6, l6) => k6 - l6);
let a6 = 0;
let b6 = 0;
let c6 = [];
hilog.info(0x0000, 'MultiNavigation', 'removeByIndexes this.subStackList.length=' + this.subStackList.length +
', oriStackSize=' + z5);
this.subStackList.forEach((g6, h6) => {
let i6 = b6;
b6 += g6.getAllInfoLength();
const j6 = [];
for (; a6 < x5.length;) {
if (x5[a6] < b6) {
j6.push(x5[a6] - i6);
a6++;
}
else {
break;
}
}
g6.removeByIndexes(j6);
if (!g6.hasPrimaryInfo()) {
c6.push(h6);
}
});
hilog.info(0x0000, 'MultiNavigation', 'removeByIndexes outerIndexes.length=' + c6.length);
this.outerStack.removeByIndexes(c6);
this.subStackList = this.subStackList.filter((f6) => {
return f6.hasPrimaryInfo();
});
this.totalStack = [];
this.subStackList.forEach((e6) => {
this.totalStack.push(...e6.getPrimaryInfoList());
this.totalStack.push(...e6.getSecondaryInfoList());
});
this.handleRefreshPlaceHolderIfNeeded();
this.checkAndNotifyHomeChange();
let d6 = z5 - this.totalStack.length;
hilog.info(0x0000, 'MultiNavigation', 'removeByIndexes size=' + d6);
return d6;
}
removeByName(p5) {
let q5 = this.totalStack.length;
hilog.info(0x0000, 'MultiNavigation', 'removeByName name=' + p5 + ', oriStackSize=' + q5);
let r5 = [];
this.subStackList.forEach((v5, w5) => {
v5.removeByName(p5);
if (!v5.hasPrimaryInfo()) {
r5.push(w5);
}
});
this.outerStack.removeByIndexes(r5);
hilog.info(0x0000, 'MultiNavigation', 'removeByName outerIndexes.length=' + r5.length);
this.subStackList = this.subStackList.filter((u5) => {
return u5.hasPrimaryInfo();
});
this.totalStack = [];
this.subStackList.forEach((t5) => {
this.totalStack.push(...t5.getPrimaryInfoList());
this.totalStack.push(...t5.getSecondaryInfoList());
});
this.handleRefreshPlaceHolderIfNeeded();
this.checkAndNotifyHomeChange();
let s5 = q5 - this.totalStack.length;
hilog.info(0x0000, 'MultiNavigation', 'removeByName size=' + s5);
return s5;
}
pop(f5, g5) {
let h5 = this.totalStack.length;
let i5 = this.subStackList.length;
if (h5 < 1 || i5 < 1) {
hilog.error(0x0000, 'MultiNavigation', 'MultiNavPathStack pop fail stack is empty!');
return undefined;
}
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack pop totalSize=' + h5 +
', subStackLength' + i5);
if (this.keepBottomPageFlag && (h5 === 1 ||
(this.placeHolderPolicyInfo !== undefined && h5 === 2 &&
this.totalStack[1].policy === SplitPolicy.PlACE_HOLDER_PAGE))) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack pop fail for keep bottom');
return undefined;
}
let j5 = this.totalStack[h5 - 1].navInfo;
let k5 = this.subStackList[i5 - 1].getAllInfoLength();
if (k5 < 1) {
hilog.error(0x0000, 'MultiNavigation', 'MultiNavPathStack pop fail sub stack is empty');
return undefined;
}
let l5 = undefined;
if (k5 > 1) {
l5 = this.subStackList[i5 - 1].getSecondaryInfoList()[0].policy;
}
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack pop allInfoLength=' + k5 +
', secondaryStackFirstPolice' + l5);
this.totalStack.pop();
if (k5 === 1) {
this.outerStack.popInner(g5);
let o5 = this.subStackList.pop();
setTimeout(() => {
o5?.pop(false);
o5 = undefined;
}, 300);
}
else {
if (k5 === 2) {
if (this.placeHolderPolicyInfo !== undefined) {
if (l5 === SplitPolicy.PlACE_HOLDER_PAGE) {
this.outerStack.popInner(g5);
let n5 = this.subStackList.pop();
setTimeout(() => {
n5?.clear(false);
n5 = undefined;
}, 300);
j5 = this.totalStack.pop()?.navInfo;
}
else {
if (this.needShowPlaceHolder()) {
this.subStackList[i5 - 1].pop(g5);
this.pushPlaceHolder(i5 - 1);
}
else {
this.subStackList[i5 - 1].pop(g5);
}
}
}
else {
this.subStackList[i5 - 1].pop(g5);
}
}
else {
this.subStackList[i5 - 1].pop(g5);
}
}
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack pop currentPath.name = ' + j5?.name);
if (f5 !== undefined && typeof f5 !== 'boolean' &&
j5 !== undefined && j5.onPop !== undefined) {
let m5 = {
info: j5,
result: f5,
};
j5.onPop(m5);
}
this.handleRefreshPlaceHolderIfNeeded();
this.checkAndNotifyHomeChange();
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack pop stackSize = ' + this.totalStack.length);
return j5;
}
popToName(r4, s4, t4) {
let u4 = this.totalStack.findIndex((e5) => {
return e5.navInfo?.name === r4;
});
let v4 = this.totalStack.length;
let w4 = this.subStackList.length;
if (v4 < 1 || w4 < 1) {
hilog.error(0x0000, 'MultiNavigation', 'popToName fail stack is empty!');
return -1;
}
if (u4 !== -1) {
let x4 = this.totalStack[v4 - 1].navInfo;
let y4 = [];
this.subStackList.forEach((c5, d5) => {
y4.push(this.subStackList[d5].secondaryStack.size());
});
let z4 = 0;
for (let b5 = 0; b5 < w4; b5++) {
z4++;
if (u4 === z4 - 1) {
this.subStackList[b5]?.secondaryStack.clear();
this.subStackList[b5].secondaryStack.policyInfoList.splice(0);
this.totalStack.splice(u4 + 1);
this.clearTrashStack(b5 + 1, s4, t4);
break;
}
else if (u4 > z4 - 1 && u4 < z4 + y4[b5]) {
this.subStackList[b5].secondaryStack.popToIndex(u4 - z4);
this.subStackList[b5].secondaryStack.policyInfoList.splice(u4 - z4 + 1);
this.totalStack.splice(u4 + 1);
this.clearTrashStack(b5 + 1, s4, t4);
}
z4 += y4[b5];
}
if (s4 !== undefined && typeof s4 !== 'boolean' &&
x4 !== undefined && x4.onPop !== undefined) {
let a5 = {
info: x4,
result: s4,
};
x4.onPop(a5);
}
}
this.handleRefreshPlaceHolderIfNeeded();
this.checkAndNotifyHomeChange();
return u4;
}
popToIndex(f4, g4, h4) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex index = ' + f4);
if (f4 > this.totalStack.length || f4 < 0) {
hilog.error(0x0000, 'MultiNavigation', 'popToIndex fail wrong index');
return;
}
let i4 = this.totalStack.length;
let j4 = this.subStackList.length;
if (i4 < 1 || j4 < 1) {
hilog.error(0x0000, 'MultiNavigation', 'popToIndex fail stack is empty!');
return;
}
let k4 = this.totalStack[i4 - 1].navInfo;
let l4 = [];
this.subStackList.forEach((p4, q4) => {
l4.push(this.subStackList[q4].secondaryStack.size());
});
let m4 = 0;
for (let o4 = 0; o4 < j4; o4++) {
m4++;
if (f4 === m4 - 1) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex home' + o4);
this.subStackList[o4]?.secondaryStack.clear();
this.subStackList[o4].secondaryStack.policyInfoList.splice(0);
this.totalStack.splice(f4 + 1);
this.clearTrashStack(o4 + 1, g4, h4);
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex totalStack=' + this.totalStack.length);
break;
}
else if (f4 > m4 - 1 && f4 < m4 + l4[o4]) {
this.subStackList[o4].secondaryStack.popToIndex(f4 - m4);
this.subStackList[o4].secondaryStack.policyInfoList.splice(f4 - m4 + 1);
this.totalStack.splice(f4 + 1);
this.clearTrashStack(o4 + 1, g4, h4);
}
m4 += l4[o4];
}
if (g4 !== undefined && typeof g4 !== 'boolean' &&
k4 !== undefined && k4.onPop !== undefined) {
let n4 = {
info: k4,
result: g4,
};
k4.onPop(n4);
}
this.handleRefreshPlaceHolderIfNeeded();
this.checkAndNotifyHomeChange();
}
clearTrashStack(b4, c4, d4) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex clearTrashStack' + b4);
for (let e4 = b4; e4 < this.subStackList.length; e4++) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex subStackList' + b4);
this.subStackList[e4].primaryStack.clear();
this.subStackList[e4].secondaryStack.clear();
this.subStackList[e4].primaryStack.policyInfoList.splice(0);
this.subStackList[e4].secondaryStack.policyInfoList.splice(0);
}
this.subStackList.splice(b4);
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex subStackList.length=' + this.subStackList.length);
this.outerStack.popToIndex(b4 - 1, c4, d4);
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack popToIndex outerStack.size=' + this.outerStack.size());
}
moveToTop(x3, y3) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack moveToTop name=' + x3);
let z3 = this.totalStack.findIndex((a4) => {
return a4.navInfo?.name === x3;
});
if (z3 !== -1) {
this.moveIndexToTop(z3, y3);
}
return z3;
}
moveIndexToTop(m3, n3) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack moveIndexToTop index=' + m3);
if (m3 < 0 || m3 > this.totalStack.length) {
hilog.error(0x0000, 'MultiNavigation', 'MultiNavPathStack moveIndexToTop wrong index');
return;
}
let o3 = this.subStackList.length;
let p3 = 0;
let q3 = -1;
for (let t3 = 0; t3 < o3; t3++) {
let u3 = p3;
p3 += this.subStackList[t3].getAllInfoLength();
if (m3 < p3) {
q3 = t3;
if (this.subStackList[t3].getPrimaryPolicy() === SplitPolicy.HOME_PAGE) {
let v3 = m3 - u3;
if (v3 !== 0) {
this.subStackList[t3].secondaryStack.moveIndexToTop(v3 - 1, n3);
const w3 = this.subStackList[t3].secondaryStack.policyInfoList.splice(v3 - 1, 1);
this.subStackList[t3].secondaryStack.policyInfoList.push(...w3);
}
}
break;
}
}
if (q3 !== -1) {
let s3 = this.subStackList.splice(q3, 1);
this.subStackList.push(...s3);
this.outerStack.moveIndexToTop(q3, n3);
}
this.totalStack = [];
this.subStackList.forEach((r3) => {
this.totalStack.push(...r3.getPrimaryInfoList());
this.totalStack.push(...r3.getSecondaryInfoList());
});
this.handleRefreshPlaceHolderIfNeeded();
this.checkAndNotifyHomeChange();
}
clear(i3) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack clear animated = ' + i3 + ', keepBottomPageFlag=' +
this.keepBottomPageFlag);
if (this.subStackList.length === 0 || this.totalStack.length === 0) {
hilog.info(0x0000, 'MultiNavigation', 'MultiNavPathStack clear return size is 0');
return;
}
if (this.keepBottomPageFlag) {
let k3 = this.subStackList.length;
for (let l3 = 1; l3 < k3; l3++) {
this.subStackList[l3].clear(i3);
}
this.outerStack.popToIndex(0, i3);
this.subStackList.splice(1);
if (this.placeHolderPolicyInfo !== undefined) {
if (this.subStackList[0].getSecondaryInfoList().length > 1 &&
this.subStackList[0].secondaryStack.policyInfoList[0].policy === SplitPolicy.PlACE_HOLDER_PAGE) {
this.subStackList[0].clearSecondaryKeepPlaceHolder(i3);
this.totalStack.splice(2);
}
else {
this.subStackList[0].clearSecondary(i3);
this.totalStack.splice(1);
if (this.needShowPlaceHolder()) {
this.subStackList[0].pushSecondaryPath(this.placeHolderPolicyInfo, i3);
this.totalStack.push(this.placeHolderPolicyInfo);
}
}
}
else {
this.subStackList[0].clearSecondary(i3);
this.totalStack.splice(1);
}
this.checkAndNotifyHomeChange();
return;
}
this.subStackList.forEach((j3) => {
j3.clear(i3);
});
this.outerStack.clear(i3);
this.subStackList.splice(0);
this.totalStack.splice(0);
}
getAllPathName() {
let g3 = [];
this.totalStack.forEach((h3) => {
if (h3.navInfo !== undefined) {
g3.push(h3.navInfo.name);
}
});
return g3;
}
getParamByIndex(e3) {
let f3 = undefined;
if (e3 >= 0 && e3 < this.totalStack.length) {
f3 = this.totalStack[e3].navInfo?.param;
}
return f3;
}
getParamByName(b3) {
let c3 = [];
this.totalStack.forEach((d3) => {
if (d3.navInfo !== undefined && d3.navInfo.name == b3) {
c3.push(d3.navInfo.param);
}
});
return c3;
}
getIndexByName(y2) {
let z2 = [];
for (let a3 = 0; a3 < this.totalStack.length; a3++) {
if (this.totalStack[a3].navInfo?.name === y2) {
z2.push(a3);
}
}
return z2;
}
getParent() {
hilog.error(0x0000, 'MultiNavigation', 'getParent is not support!');
throw new Error('getParent is not support in multi navigation');
}
size() {
return this.totalStack.length;
}
disableAnimation(w2) {
for (const x2 of this.subStackList) {
x2.disableAnimation(w2);
}
this.outerStack.disableAnimation(w2);
this.disableAllAnimation = w2;
}
setInterception(v2) {
hilog.error(0x0000, 'MultiNavigation', 'setInterception is not support!');
throw new Error('setInterception is not support in multi navigation');
}
setPagePolicy(u2) {
this.mPolicyMap = u2;
}
switchFullScreenState(r2) {
let s2 = this.totalStack.length;
let t2 = this.subStackList.length;
if (t2 < 1 || s2 < 1) {
return false;
}
if (this.subStackList[t2 - 1].getPrimaryPolicy() !== SplitPolicy.HOME_PAGE) {
return false;
}
if (this.totalStack[s2 - 1].policy === SplitPolicy.PlACE_HOLDER_PAGE) {
return false;
}
if (this.totalStack[s2 - 1].isFullScreen === r2) {
hilog.info(0x0000, 'MultiNavigation', 'switchFullScreen is same:' + r2);
return true;
}
hilog.info(0x0000, 'MultiNavigation', 'switchFullScreen name=' +
this.totalStack[s2 - 1].navInfo?.name +
', from ' + this.totalStack[s2 - 1].isFullScreen + ' to ' + r2);
this.totalStack[s2 - 1].isFullScreen = r2;
this.subStackList[t2 - 1].refreshFullScreen();
return true;
}
setHomeWidthRange(p2, q2) {
if (!this.checkInputPercent(p2) || !this.checkInputPercent(q2)) {
hilog.error(0x0000, 'MultiNavigation', 'setHomeWidthRange failed, wrong param:' +
', ' + p2 + ', ' + q2);
return;
}
this.homeWidthPercents = [p2, q2];
this.refreshHomeWidth();
}
keepBottomPage(o2) {
this.keepBottomPageFlag = o2;
}
registerHomeChangeListener(n2) {
if (this.homeChangeListener === undefined) {
this.homeChangeListener = n2;
}
}
unregisterHomeChangeListener() {
this.homeChangeListener = undefined;
}
setPlaceholderPage(m2) {
this.placeHolderPolicyInfo = new MultiNavPolicyInfo(SplitPolicy.PlACE_HOLDER_PAGE, m2);
}
handleRefreshPlaceHolderIfNeeded() {
if (this.placeHolderPolicyInfo === undefined) {
return;
}
const i2 = this.subStackList.length;
if (i2 < 1) {
return;
}
const j2 = this.subStackList[i2 - 1].getPrimaryPolicy();
if (j2 !== SplitPolicy.HOME_PAGE) {
return;
}
const k2 = this.subStackList[i2 - 1].getAllInfoLength();
let l2 = undefined;
if (k2 > 1) {
l2 = this.subStackList[i2 - 1].getSecondaryInfoList()[0].policy;
}
if (this.needShowPlaceHolder()) {
if (k2 === 1) {
this.pushPlaceHolder(i2 - 1);
}
}
else {
if (l2 === SplitPolicy.PlACE_HOLDER_PAGE) {
if (k2 === 2) {
this.popPlaceHolder(i2 - 1);
}
else {
this.removeFirstPlaceHolder(i2 - 1);
}
}
}
}
removeFirstPlaceHolder(g2) {
this.subStackList[g2].removeByIndexes([1]);
this.totalStack = [];
this.subStackList.forEach((h2) => {
this.totalStack.push(...h2.getPrimaryInfoList());
this.totalStack.push(...h2.getSecondaryInfoList());
});
}
pushPlaceHolder(f2) {
this.subStackList[f2].pushSecondaryPath(this.placeHolderPolicyInfo, false);
this.totalStack.push(this.placeHolderPolicyInfo);
}
popPlaceHolder(e2) {
this.subStackList[e2].pop(false);
this.totalStack.pop();
this.checkAndNotifyHomeChange();
}
needShowPlaceHolder() {
if (!this.isLarge) {
hilog.info(0x0000, 'MultiNavigation', 'do not show placeHolder for drawable width is less then breakpoint');
return false;
}
if (DeviceHelper.isStraightProduct()) {
hilog.info(0x0000, 'MultiNavigation', 'do not show placeHolder for straight product');
return false;
}
if (DeviceHelper.isPhone() && DeviceHelper.isFold() &&
this.needRenderDisplayMode.displayMode === display.FoldStatus.FOLD_STATUS_FOLDED) {
hilog.info(0x0000, 'MultiNavigation', 'do not show placeHolder for fold status');
return false;
}
if (DeviceHelper.isTablet() && this.isPortrait) {
hilog.info(0x0000, 'MultiNavigation', 'do not show placeHolder for portrait tablet');
return false;
}
return true;
}
checkAndNotifyHomeChange() {
if (this.totalStack.length === 0) {
return;
}
let c2 = this.totalStack[this.totalStack.length - 1];
if (c2 === undefined) {
return;
}
if (c2.policy === SplitPolicy.HOME_PAGE && c2.navInfo !== undefined) {
this.homeChangeListener && this.homeChangeListener.onHomeShowOnTop(c2.navInfo.name);
}
if (this.totalStack.length <= 1) {
return;
}
let d2 = this.totalStack[this.totalStack.length - 2];
if (d2 === undefined) {
return;
}
if (c2.policy === SplitPolicy.PlACE_HOLDER_PAGE &&
d2.policy === SplitPolicy.HOME_PAGE && d2.navInfo !== undefined) {
this.homeChangeListener && this.homeChangeListener.onHomeShowOnTop(d2.navInfo.name);
}
}
refreshHomeWidth() {
this.navWidthRangeModifier.minHomeWidth = `${this.homeWidthPercents[0]}%`;
this.navWidthRangeModifier.maxHomeWidth = `${this.homeWidthPercents[1]}%`;
this.navWidthRangeModifier.isApplicationSet = true;
}
checkInputPercent(b2) {
return (0 <= b2 && b2 <= 100);
}
};
MultiNavPathStack = __decorate([
Observed
], MultiNavPathStack);
export { MultiNavPathStack };
let NeedRenderIsFullScreen = class NeedRenderIsFullScreen {
constructor() {
this.isFullScreen = undefined;
}
};
NeedRenderIsFullScreen = __decorate([
Observed
], NeedRenderIsFullScreen);
export { NeedRenderIsFullScreen };
let NeedRenderLeftClickCount = class NeedRenderLeftClickCount {
constructor() {
this.leftClickCount = 0;
}
};
NeedRenderLeftClickCount = __decorate([
Observed
], NeedRenderLeftClickCount);
export { NeedRenderLeftClickCount };
let NeedRenderDisplayMode = class NeedRenderDisplayMode {
constructor() {
this.displayMode = 0;
}
};
NeedRenderDisplayMode = __decorate([
Observed
], NeedRenderDisplayMode);
export { NeedRenderDisplayMode };
class MultiNavPolicyInfo {
constructor(z1, a2) {
this.policy = SplitPolicy.DETAIL_PAGE;
this.navInfo = undefined;
this.isFullScreen = undefined;
this.policy = z1;
this.navInfo = a2;
}
}
export class MyNavPathStack extends NavPathStack {
constructor() {
super(...arguments);
this.operates = [];
this.type = 'NavPathStack';
this.policyInfoList = [];
}
registerStackOperateCallback(w1) {
let x1 = this.operates.findIndex((y1) => { return y1 === w1; });
if (x1 === -1) {
this.operates.push(w1);
}
}
unregisterStackOperateCallback(t1) {
let u1 = this.operates.findIndex((v1) => { return v1 === t1; });
if (u1 !== -1) {
this.operates.splice(u1, 1);
}
}
popInner(r1, s1) {
hilog.info(0x0000, 'MultiNavigation', 'MyNavPathStack pop from inner:');
return super.pop(r1, s1);
}
pop(n1, o1) {
hilog.info(0x0000, 'MultiNavigation', 'MyNavPathStack pop from system:');
let p1 = undefined;
if (typeof o1 === 'boolean') {
p1 = super.pop(o1);
}
else {
p1 = super.pop(n1, o1);
}
this.policyInfoList.pop();
this.operates.forEach((q1) => {
q1.onSystemPop?.();
});
return p1;
}
}
class SubNavigationStack {
constructor() {
this.primaryStack = new MyNavPathStack();
this.secondaryStack = new MyNavPathStack();
this.needRenderIsFullScreen = new NeedRenderIsFullScreen();
this.multiOperates = [];
this.primaryNavPathStackOperate = {
onSystemPop: () => {
this.multiOperates.forEach((m1) => {
m1.onPrimaryPop?.();
});
}
};
this.secondaryNavPathStackOperate = {
onSystemPop: () => {
this.multiOperates.forEach((l1) => {
l1.onSecondaryPop?.();
});
this.refreshFullScreen();
}
};
this.primaryStack.registerStackOperateCallback(this.primaryNavPathStackOperate);
this.secondaryStack.registerStackOperateCallback(this.secondaryNavPathStackOperate);
}
registerMultiStackOperateCallback(i1) {
let j1 = this.multiOperates.findIndex((k1) => { return k1 === i1; });
if (j1 === -1) {
this.multiOperates.push(i1);
}
}
unregisterMultiStackOperateCallback(f1) {
let g1 = this.multiOperates.findIndex((h1) => { return h1 === f1; });
if (g1 !== -1) {
this.multiOperates.splice(g1, 1);
}
}
getPrimaryPolicy() {
if (this.primaryStack.policyInfoList.length < 1) {
return undefined;
}
return this.primaryStack.policyInfoList[0].policy;
}
getPrimaryInfoList() {
return this.primaryStack.policyInfoList.slice();
}
getSecondaryInfoList() {
return this.secondaryStack.policyInfoList.slice();
}
getAllInfoLength() {
return this.primaryStack.size() + this.secondaryStack.size();
}
hasPrimaryInfo() {
return this.primaryStack.size() !== 0;
}
hasSecondaryInfo() {
return this.secondaryStack.size() !== 0;
}
pushPrimaryPath(d1, e1) {
this.primaryStack.policyInfoList.push(d1);
this.primaryStack.pushPath(d1.navInfo, e1);
this.refreshFullScreen();
}
pushSecondaryPath(b1, c1) {
this.secondaryStack.policyInfoList.push(b1);
this.secondaryStack.pushPath(b1.navInfo, c1);
this.refreshFullScreen();
}
removeByIndexes(w) {
if (w.length < 1) {
return;
}
if (w[0] === 0) {
hilog.info(0x0000, 'MultiNavigation', 'SubNavigationStack removeByIndexes primaryStack');
this.primaryStack.removeByIndexes([0]);
this.primaryStack.policyInfoList.pop();
this.clear(false);
return;
}
if (w.length !== 0) {
let x = [];
w.forEach((a1) => {
x.push(a1 - 1);
});
this.secondaryStack.removeByIndexes(x);
this.secondaryStack.policyInfoList = this.secondaryStack.policyInfoList.filter((y, z) => {
return y && !x.includes(z);
});
}
this.refreshFullScreen();
}
removeByName(t) {
this.primaryStack.removeByName(t);
this.primaryStack.policyInfoList = this.primaryStack.policyInfoList.filter((v) => {
return v.navInfo?.name !== t;
});
if (!this.hasPrimaryInfo()) {
this.clear(false);
return;
}
this.secondaryStack.removeByName(t);
this.secondaryStack.policyInfoList = this.secondaryStack.policyInfoList.filter((u) => {
return u.navInfo?.name !== t;
});
this.refreshFullScreen();
}
pop(q, r) {
let s = undefined;
if (this.secondaryStack.policyInfoList.length > 0) {
s = this.popSecondary(q, r);
}
else {
s = this.popPrimary(q, r);
}
this.refreshFullScreen();
return s;
}
clearSecondary(p) {
this.secondaryStack.clear(p);
this.secondaryStack.policyInfoList.splice(0);
this.refreshFullScreen();
}
clearSecondaryKeepPlaceHolder(o) {
this.secondaryStack.popToIndex(0, o);
this.secondaryStack.policyInfoList.splice(1);
this.refreshFullScreen();
}
clear(n) {
this.secondaryStack.clear(n);
this.primaryStack.clear(n);
this.secondaryStack.policyInfoList.splice(0);
this.primaryStack.policyInfoList.splice(0);
}
disableAnimation(m) {
this.primaryStack.disableAnimation(m);
this.secondaryStack.disableAnimation(m);
}
replacePath(k, l) {
if (this.secondaryStack.policyInfoList.length > 0) {
this.replaceSecond(k, l);
}
else {
this.replacePrimary(k, l);
}
this.refreshFullScreen();
}
refreshFullScreen() {
let i = this.secondaryStack.policyInfoList.length;
if (i > 0) {
this.needRenderIsFullScreen.isFullScreen = this.secondaryStack.policyInfoList[i - 1].isFullScreen;
return;
}
let j = this.primaryStack.policyInfoList.length;
if (j > 0) {
this.needRenderIsFullScreen.isFullScreen = this.primaryStack.policyInfoList[j - 1].isFullScreen;
}
}
replacePrimary(g, h) {
this.primaryStack.policyInfoList.pop();
this.primaryStack.policyInfoList.push(g);
return this.primaryStack.replacePath(g.navInfo, h);
}
replaceSecond(e, f) {
this.secondaryStack.policyInfoList.pop();
this.secondaryStack.policyInfoList.push(e);
return this.secondaryStack.replacePath(e.navInfo, f);
}
popPrimary(c, d) {
this.primaryStack.policyInfoList.pop();
return this.primaryStack.popInner(c, d);
}
popSecondary(a, b) {
this.secondaryStack.policyInfoList.pop();
return this.secondaryStack.popInner(a, b);
}
}
export default { MultiNavigation, MultiNavPathStack, SplitPolicy }