Commit 663ec5be authored by Wei Lee's avatar Wei Lee Committed by Chromium LUCI CQ

[CCA] Tweak logic when using Mojo window controller

We should:
1. When calling window operations from tests, we should be able to wait
for the operation done

2. If calling window.maximize() while the window is already maximized,
trigger the callback immediately. Same for other operations.

3. For devices under tablet mode, since no change will happen when
calling restore() while the window is maximized, handle it more
properly.

Bug: b/172780736
Test: tast run [DUT] camera.CCAUIRecordVideo.swa
Change-Id: I91f47e98c5857eb59775045849233d7541d2c603
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2574117Reviewed-by: default avatarInker Kuo <inker@chromium.org>
Commit-Queue: Wei Lee <wtlee@chromium.org>
Auto-Submit: Wei Lee <wtlee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#834615}
parent 58c98cff
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chromeos/components/camera_app_ui/camera_app_window_state_controller.h" #include "chromeos/components/camera_app_ui/camera_app_window_state_controller.h"
#include "ash/public/cpp/tablet_mode.h"
namespace chromeos { namespace chromeos {
CameraAppWindowStateController::CameraAppWindowStateController( CameraAppWindowStateController::CameraAppWindowStateController(
...@@ -37,26 +39,54 @@ void CameraAppWindowStateController::GetWindowState( ...@@ -37,26 +39,54 @@ void CameraAppWindowStateController::GetWindowState(
} }
void CameraAppWindowStateController::Minimize(MinimizeCallback callback) { void CameraAppWindowStateController::Minimize(MinimizeCallback callback) {
if (GetCurrentWindowState() == WindowStateType::MINIMIZED) {
std::move(callback).Run();
return;
}
minimize_callbacks_.push(std::move(callback)); minimize_callbacks_.push(std::move(callback));
widget_->Minimize(); widget_->Minimize();
} }
void CameraAppWindowStateController::Restore(RestoreCallback callback) { void CameraAppWindowStateController::Restore(RestoreCallback callback) {
auto current_state = GetCurrentWindowState();
// In tablet mode, it won't do anything when calling restore() for windows
// which are already maximized. Therefore, for maximized windows, trigger the
// callback immediately.
if (current_state == WindowStateType::REGULAR ||
(ash::TabletMode::Get()->InTabletMode() &&
(current_state == WindowStateType::MAXIMIZED ||
current_state == WindowStateType::FULLSCREEN))) {
std::move(callback).Run();
return;
}
restore_callbacks_.push(std::move(callback)); restore_callbacks_.push(std::move(callback));
widget_->Restore(); widget_->Restore();
} }
void CameraAppWindowStateController::Maximize(MaximizeCallback callback) { void CameraAppWindowStateController::Maximize(MaximizeCallback callback) {
if (GetCurrentWindowState() == WindowStateType::MAXIMIZED) {
std::move(callback).Run();
return;
}
maximize_callbacks_.push(std::move(callback)); maximize_callbacks_.push(std::move(callback));
widget_->Maximize(); widget_->Maximize();
} }
void CameraAppWindowStateController::Fullscreen(FullscreenCallback callback) { void CameraAppWindowStateController::Fullscreen(FullscreenCallback callback) {
if (GetCurrentWindowState() == WindowStateType::FULLSCREEN) {
std::move(callback).Run();
return;
}
fullscreen_callbacks_.push(std::move(callback)); fullscreen_callbacks_.push(std::move(callback));
widget_->SetFullscreen(true); widget_->SetFullscreen(true);
} }
void CameraAppWindowStateController::Focus(FocusCallback callback) { void CameraAppWindowStateController::Focus(FocusCallback callback) {
if (widget_->IsActive()) {
std::move(callback).Run();
return;
}
focus_callbacks_.push(std::move(callback)); focus_callbacks_.push(std::move(callback));
widget_->Activate(); widget_->Activate();
} }
......
...@@ -45,41 +45,41 @@ export class MojoWindowController { ...@@ -45,41 +45,41 @@ export class MojoWindowController {
/** @override */ /** @override */
async minimize() { async minimize() {
assertInstanceof( return assertInstanceof(
this.windowStateController_, this.windowStateController_,
chromeosCamera.mojom.WindowStateControllerRemote) chromeosCamera.mojom.WindowStateControllerRemote)
.minimize(); .minimize();
} }
/** @override */ /** @override */
async maximize() { async maximize() {
assertInstanceof( return assertInstanceof(
this.windowStateController_, this.windowStateController_,
chromeosCamera.mojom.WindowStateControllerRemote) chromeosCamera.mojom.WindowStateControllerRemote)
.maximize(); .maximize();
} }
/** @override */ /** @override */
async restore() { async restore() {
assertInstanceof( return assertInstanceof(
this.windowStateController_, this.windowStateController_,
chromeosCamera.mojom.WindowStateControllerRemote) chromeosCamera.mojom.WindowStateControllerRemote)
.restore(); .restore();
} }
/** @override */ /** @override */
async fullscreen() { async fullscreen() {
assertInstanceof( return assertInstanceof(
this.windowStateController_, this.windowStateController_,
chromeosCamera.mojom.WindowStateControllerRemote) chromeosCamera.mojom.WindowStateControllerRemote)
.fullscreen(); .fullscreen();
} }
/** @override */ /** @override */
async focus() { async focus() {
assertInstanceof( return assertInstanceof(
this.windowStateController_, this.windowStateController_,
chromeosCamera.mojom.WindowStateControllerRemote) chromeosCamera.mojom.WindowStateControllerRemote)
.focus(); .focus();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment