// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ash/shelf/in_app_to_home_nudge_controller.h" #include "ash/session/session_controller_impl.h" #include "ash/shelf/drag_handle.h" #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" namespace ash { InAppToHomeNudgeController::InAppToHomeNudgeController( ShelfWidget* shelf_widget) : shelf_widget_(shelf_widget) {} InAppToHomeNudgeController::~InAppToHomeNudgeController() = default; void InAppToHomeNudgeController::SetNudgeAllowedForCurrentShelf( bool in_tablet_mode, bool in_app_shelf, bool shelf_controls_visible) { // HideDragHandleNudge should hide the in app to home nudge if shelf controls // are enabled. We need the in_tablet_mode check to prevent misreporting the // hide cause when exiting tablet mode. if (shelf_controls_visible && in_tablet_mode) { shelf_widget_->HideDragHandleNudge( contextual_tooltip::DismissNudgeReason::kOther); return; } if (in_tablet_mode && in_app_shelf) { if (contextual_tooltip::ShouldShowNudge( Shell::Get()->session_controller()->GetLastActiveUserPrefService(), contextual_tooltip::TooltipType::kInAppToHome, /*recheck_delay*/ nullptr)) { shelf_widget_->ScheduleShowDragHandleNudge(); } else if (!shelf_widget_->GetDragHandle() ->gesture_nudge_target_visibility()) { // If the drag handle is not yet shown, HideDragHandleNudge() should // cancel any scheduled show requests. shelf_widget_->HideDragHandleNudge( contextual_tooltip::DismissNudgeReason::kOther); } } else { shelf_widget_->HideDragHandleNudge( in_tablet_mode ? contextual_tooltip::DismissNudgeReason::kExitToHomeScreen : contextual_tooltip::DismissNudgeReason::kSwitchToClamshell); } } } // namespace ash