mirror of
https://github.com/openharmony/windowmanager.git
synced 2026-07-21 04:25:28 -04:00
add startingwindow and remoteanimation to async queue
Signed-off-by: chyyy0213 <chenhaiying3@huawei.com> Change-Id: I0cf9ace1f8de29439641a8916d506776e16fcc74 Signed-off-by: chyyy0213 <chenhaiying3@huawei.com>
This commit is contained in:
@@ -255,7 +255,7 @@ WMError WindowAdapter::NotifyWindowTransition(sptr<WindowTransitionInfo> from, s
|
||||
{
|
||||
INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
|
||||
|
||||
return windowManagerServiceProxy_->NotifyWindowTransition(from, to);
|
||||
return windowManagerServiceProxy_->NotifyWindowTransition(from, to, true);
|
||||
}
|
||||
} // namespace Rosen
|
||||
} // namespace OHOS
|
||||
@@ -69,7 +69,8 @@ public:
|
||||
uint32_t& windowId, sptr<IRemoteObject> token) override;
|
||||
WMError AddWindow(sptr<WindowProperty>& property) override;
|
||||
WMError RemoveWindow(uint32_t windowId) override;
|
||||
WMError NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to) override;
|
||||
WMError NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to,
|
||||
bool isFromClient = false) override;
|
||||
WMError DestroyWindow(uint32_t windowId, bool onlySelf = false) override;
|
||||
WMError RequestFocus(uint32_t windowId) override;
|
||||
WMError SetWindowBackgroundBlur(uint32_t windowId, WindowBlurLevel level) override;
|
||||
|
||||
@@ -84,7 +84,8 @@ public:
|
||||
virtual WMError GetAccessibilityWindowInfo(sptr<AccessibilityWindowInfo>& windowInfo) = 0;
|
||||
virtual WMError SetWindowAnimationController(const sptr<RSIWindowAnimationController>& controller) = 0;
|
||||
virtual WMError GetSystemConfig(SystemConfig& systemConfig) = 0;
|
||||
virtual WMError NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to) = 0;
|
||||
virtual WMError NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to,
|
||||
bool isFromClient = false) = 0;
|
||||
virtual WMError GetModeChangeHotZones(DisplayId displayId, ModeChangeHotZones& hotZones) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -32,7 +32,8 @@ public:
|
||||
uint32_t& windowId, sptr<IRemoteObject> token) override;
|
||||
WMError AddWindow(sptr<WindowProperty>& property) override;
|
||||
WMError RemoveWindow(uint32_t windowId) override;
|
||||
WMError NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to) override;
|
||||
WMError NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to,
|
||||
bool isFromClient = false) override;
|
||||
WMError DestroyWindow(uint32_t windowId, bool onlySelf = false) override;
|
||||
WMError RequestFocus(uint32_t windowId) override;
|
||||
WMError SetWindowBackgroundBlur(uint32_t windowId, WindowBlurLevel level) override;
|
||||
|
||||
@@ -136,7 +136,7 @@ void WindowManagerServiceHandler::NotifyWindowTransition(
|
||||
{
|
||||
sptr<WindowTransitionInfo> fromInfo = new WindowTransitionInfo(from);
|
||||
sptr<WindowTransitionInfo> toInfo = new WindowTransitionInfo(to);
|
||||
WindowManagerService::GetInstance().NotifyWindowTransition(fromInfo, toInfo);
|
||||
WindowManagerService::GetInstance().NotifyWindowTransition(fromInfo, toInfo, false);
|
||||
}
|
||||
|
||||
int32_t WindowManagerServiceHandler::GetFocusWindow(sptr<IRemoteObject>& abilityToken)
|
||||
@@ -259,11 +259,20 @@ void WindowManagerService::OnStop()
|
||||
}
|
||||
|
||||
WMError WindowManagerService::NotifyWindowTransition(
|
||||
sptr<WindowTransitionInfo>& fromInfo, sptr<WindowTransitionInfo>& toInfo)
|
||||
sptr<WindowTransitionInfo>& fromInfo, sptr<WindowTransitionInfo>& toInfo, bool isFromClient)
|
||||
{
|
||||
return wmsTaskLooper_->ScheduleTask([this, &fromInfo, &toInfo]() {
|
||||
return windowController_->NotifyWindowTransition(fromInfo, toInfo);
|
||||
}).get();
|
||||
if (!isFromClient) {
|
||||
WLOGFI("NotifyWindowTransition asynchronously.");
|
||||
wmsTaskLooper_->PostTask([this, fromInfo, toInfo]() mutable {
|
||||
return windowController_->NotifyWindowTransition(fromInfo, toInfo);
|
||||
});
|
||||
return WMError::WM_OK;
|
||||
} else {
|
||||
WLOGFI("NotifyWindowTransition synchronously.");
|
||||
return wmsTaskLooper_->ScheduleTask([this, &fromInfo, &toInfo]() {
|
||||
return windowController_->NotifyWindowTransition(fromInfo, toInfo);
|
||||
}).get();
|
||||
}
|
||||
}
|
||||
|
||||
WMError WindowManagerService::GetFocusWindowInfo(sptr<IRemoteObject>& abilityToken)
|
||||
@@ -280,9 +289,9 @@ void WindowManagerService::StartingWindow(sptr<WindowTransitionInfo> info, sptr<
|
||||
WLOGFI("startingWindow not open!");
|
||||
return;
|
||||
}
|
||||
return wmsTaskLooper_->ScheduleTask([this, &info, &pixelMap, isColdStart, bkgColor]() {
|
||||
return wmsTaskLooper_->PostTask([this, info, pixelMap, isColdStart, bkgColor]() {
|
||||
return windowController_->StartingWindow(info, pixelMap, bkgColor, isColdStart);
|
||||
}).wait();
|
||||
});
|
||||
}
|
||||
|
||||
void WindowManagerService::CancelStartingWindow(sptr<IRemoteObject> abilityToken)
|
||||
@@ -292,9 +301,9 @@ void WindowManagerService::CancelStartingWindow(sptr<IRemoteObject> abilityToken
|
||||
WLOGFI("startingWindow not open!");
|
||||
return;
|
||||
}
|
||||
return wmsTaskLooper_->ScheduleTask([this, &abilityToken]() {
|
||||
return wmsTaskLooper_->PostTask([this, abilityToken]() {
|
||||
return windowController_->CancelStartingWindow(abilityToken);
|
||||
}).wait();
|
||||
});
|
||||
}
|
||||
|
||||
WMError WindowManagerService::CreateWindow(sptr<IWindow>& window, sptr<WindowProperty>& property,
|
||||
|
||||
@@ -570,7 +570,8 @@ WMError WindowManagerProxy::GetSystemConfig(SystemConfig& systemConfig)
|
||||
return static_cast<WMError>(ret);
|
||||
}
|
||||
|
||||
WMError WindowManagerProxy::NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to)
|
||||
WMError WindowManagerProxy::NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to,
|
||||
bool isFromClient)
|
||||
{
|
||||
MessageParcel data;
|
||||
MessageParcel reply;
|
||||
@@ -591,6 +592,10 @@ WMError WindowManagerProxy::NotifyWindowTransition(sptr<WindowTransitionInfo>& f
|
||||
return WMError::WM_ERROR_IPC_FAILED;
|
||||
}
|
||||
|
||||
if (!data.WriteBool(isFromClient)) {
|
||||
WLOGFE("Failed to write to isFromClient!");
|
||||
return WMError::WM_ERROR_IPC_FAILED;
|
||||
}
|
||||
auto error = Remote()->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_NOTIFY_WINDOW_TRANSITION),
|
||||
data, reply, option);
|
||||
if (error != ERR_NONE) {
|
||||
|
||||
@@ -190,7 +190,8 @@ int32_t WindowManagerStub::OnRemoteRequest(uint32_t code, MessageParcel &data, M
|
||||
case WindowManagerMessage::TRANS_ID_NOTIFY_WINDOW_TRANSITION: {
|
||||
sptr<WindowTransitionInfo> from = data.ReadParcelable<WindowTransitionInfo>();
|
||||
sptr<WindowTransitionInfo> to = data.ReadParcelable<WindowTransitionInfo>();
|
||||
WMError errCode = NotifyWindowTransition(from, to);
|
||||
bool isFromClient = data.ReadBool();
|
||||
WMError errCode = NotifyWindowTransition(from, to, isFromClient);
|
||||
reply.WriteInt32(static_cast<int32_t>(errCode));
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user