Commit 87325a77 authored by Yulun Wu's avatar Yulun Wu Committed by Commit Bot

Hide back gesture nudge when shelf controls are visible.

Enabling shelf controls disables gestures and should hide contextual
nudges related to gestures.
This CL changes the back gesture nudge controller to observe the shelf config and hide/disable the nudge when shelf controls are enabled.

Bug: 1071248
Change-Id: If43f22bb108660f8725b6d660e849d0317ddcd7c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2161734Reviewed-by: default avatarYulun Wu <yulunwu@chromium.org>
Reviewed-by: default avatarXiaoqian Dai <xdai@chromium.org>
Commit-Queue: Yulun Wu <yulunwu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#762067}
parent ccb57bba
...@@ -28,10 +28,13 @@ PrefService* GetActivePrefService() { ...@@ -28,10 +28,13 @@ PrefService* GetActivePrefService() {
BackGestureContextualNudgeControllerImpl:: BackGestureContextualNudgeControllerImpl::
BackGestureContextualNudgeControllerImpl() { BackGestureContextualNudgeControllerImpl() {
tablet_mode_observer_.Add(Shell::Get()->tablet_mode_controller()); tablet_mode_observer_.Add(Shell::Get()->tablet_mode_controller());
shelf_control_visible_ = ShelfConfig::Get()->shelf_controls_shown();
ShelfConfig::Get()->AddObserver(this);
} }
BackGestureContextualNudgeControllerImpl:: BackGestureContextualNudgeControllerImpl::
~BackGestureContextualNudgeControllerImpl() { ~BackGestureContextualNudgeControllerImpl() {
ShelfConfig::Get()->RemoveObserver(this);
DoCleanUp(); DoCleanUp();
} }
...@@ -103,6 +106,17 @@ void BackGestureContextualNudgeControllerImpl::NavigationEntryChanged( ...@@ -103,6 +106,17 @@ void BackGestureContextualNudgeControllerImpl::NavigationEntryChanged(
MaybeShowNudgeUi(window); MaybeShowNudgeUi(window);
} }
void BackGestureContextualNudgeControllerImpl::OnShelfConfigUpdated() {
bool updated_shelf_control_visibility =
ShelfConfig::Get()->shelf_controls_shown();
if (shelf_control_visible_ == updated_shelf_control_visibility)
return;
shelf_control_visible_ = updated_shelf_control_visibility;
if (!nudge_ || !shelf_control_visible_)
return;
nudge_->CancelAnimationOrFadeOutToHide();
}
bool BackGestureContextualNudgeControllerImpl::CanShowNudge( bool BackGestureContextualNudgeControllerImpl::CanShowNudge(
base::TimeDelta* recheck_delay) const { base::TimeDelta* recheck_delay) const {
if (!Shell::Get()->IsInTabletMode()) if (!Shell::Get()->IsInTabletMode())
...@@ -113,6 +127,9 @@ bool BackGestureContextualNudgeControllerImpl::CanShowNudge( ...@@ -113,6 +127,9 @@ bool BackGestureContextualNudgeControllerImpl::CanShowNudge(
return false; return false;
} }
if (shelf_control_visible_)
return false;
return contextual_tooltip::ShouldShowNudge( return contextual_tooltip::ShouldShowNudge(
GetActivePrefService(), contextual_tooltip::TooltipType::kBackGesture, GetActivePrefService(), contextual_tooltip::TooltipType::kBackGesture,
recheck_delay); recheck_delay);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ash/public/cpp/back_gesture_contextual_nudge_controller.h" #include "ash/public/cpp/back_gesture_contextual_nudge_controller.h"
#include "ash/public/cpp/shelf_config.h"
#include "ash/public/cpp/tablet_mode_observer.h" #include "ash/public/cpp/tablet_mode_observer.h"
#include "ash/session/session_observer.h" #include "ash/session/session_observer.h"
#include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h"
...@@ -29,7 +30,8 @@ class ASH_EXPORT BackGestureContextualNudgeControllerImpl ...@@ -29,7 +30,8 @@ class ASH_EXPORT BackGestureContextualNudgeControllerImpl
: public SessionObserver, : public SessionObserver,
public TabletModeObserver, public TabletModeObserver,
public wm::ActivationChangeObserver, public wm::ActivationChangeObserver,
public BackGestureContextualNudgeController { public BackGestureContextualNudgeController,
public ShelfConfig::Observer {
public: public:
BackGestureContextualNudgeControllerImpl(); BackGestureContextualNudgeControllerImpl();
BackGestureContextualNudgeControllerImpl( BackGestureContextualNudgeControllerImpl(
...@@ -60,6 +62,9 @@ class ASH_EXPORT BackGestureContextualNudgeControllerImpl ...@@ -60,6 +62,9 @@ class ASH_EXPORT BackGestureContextualNudgeControllerImpl
// BackGestureContextualNudgeController: // BackGestureContextualNudgeController:
void NavigationEntryChanged(aura::Window* window) override; void NavigationEntryChanged(aura::Window* window) override;
// ShelfConfig::Observer:
void OnShelfConfigUpdated() override;
bool is_monitoring_windows() const { return is_monitoring_windows_; } bool is_monitoring_windows() const { return is_monitoring_windows_; }
BackGestureContextualNudge* nudge() { return nudge_.get(); } BackGestureContextualNudge* nudge() { return nudge_.get(); }
BackGestureContextualNudgeDelegate* nudge_delegate() { BackGestureContextualNudgeDelegate* nudge_delegate() {
...@@ -108,6 +113,9 @@ class ASH_EXPORT BackGestureContextualNudgeControllerImpl ...@@ -108,6 +113,9 @@ class ASH_EXPORT BackGestureContextualNudgeControllerImpl
// True if we're currently monitoring window activation changes. // True if we're currently monitoring window activation changes.
bool is_monitoring_windows_ = false; bool is_monitoring_windows_ = false;
// Tracks the visibility of shelf controls.
bool shelf_control_visible_ = false;
// Timer to automatically show nudge ui in 24 hours. // Timer to automatically show nudge ui in 24 hours.
base::OneShotTimer auto_show_timer_; base::OneShotTimer auto_show_timer_;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.h" #include "ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.h"
#include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/ash_features.h"
#include "ash/public/cpp/ash_pref_names.h"
#include "ash/session/session_controller_impl.h" #include "ash/session/session_controller_impl.h"
#include "ash/shelf/contextual_tooltip.h" #include "ash/shelf/contextual_tooltip.h"
#include "ash/shell.h" #include "ash/shell.h"
...@@ -123,6 +124,17 @@ class BackGestureContextualNudgeControllerTestCantGoBack ...@@ -123,6 +124,17 @@ class BackGestureContextualNudgeControllerTestCantGoBack
: BackGestureContextualNudgeControllerTest(false) {} : BackGestureContextualNudgeControllerTest(false) {}
}; };
class BackGestureContextualNudgeControllerTestA11yPrefs
: public BackGestureContextualNudgeControllerTest,
public ::testing::WithParamInterface<std::string> {};
INSTANTIATE_TEST_SUITE_P(
All,
BackGestureContextualNudgeControllerTestA11yPrefs,
testing::Values(prefs::kAccessibilityAutoclickEnabled,
prefs::kAccessibilitySpokenFeedbackEnabled,
prefs::kAccessibilitySwitchAccessEnabled));
// Tests the timing when BackGestureContextualNudgeControllerImpl should monitor // Tests the timing when BackGestureContextualNudgeControllerImpl should monitor
// window activation changes. // window activation changes.
TEST_F(BackGestureContextualNudgeControllerTest, MonitorWindowsTest) { TEST_F(BackGestureContextualNudgeControllerTest, MonitorWindowsTest) {
...@@ -320,4 +332,33 @@ TEST_F(BackGestureContextualNudgeControllerTest, ...@@ -320,4 +332,33 @@ TEST_F(BackGestureContextualNudgeControllerTest,
EXPECT_TRUE(nudge()); EXPECT_TRUE(nudge());
} }
// Back Gesture Nudge should be hidden when shelf controls are enabled.
TEST_P(BackGestureContextualNudgeControllerTestA11yPrefs,
HideNudgesForShelfControls) {
SCOPED_TRACE(testing::Message() << "Pref=" << GetParam());
std::unique_ptr<aura::Window> window = CreateTestWindow();
EXPECT_TRUE(nudge());
// Turn on accessibility settings to enable shelf controls.
Shell::Get()
->session_controller()
->GetLastActiveUserPrefService()
->SetBoolean(GetParam(), true);
EXPECT_FALSE(nudge());
}
// Back Gesture Nudge should be disabled when shelf controls are enabled.
TEST_P(BackGestureContextualNudgeControllerTestA11yPrefs,
DisableNudgesForShelfControls) {
SCOPED_TRACE(testing::Message() << "Pref=" << GetParam());
// Turn on accessibility settings to enable shelf controls.
Shell::Get()
->session_controller()
->GetLastActiveUserPrefService()
->SetBoolean(GetParam(), true);
std::unique_ptr<aura::Window> window = CreateTestWindow();
EXPECT_FALSE(nudge());
}
} // namespace ash } // namespace ash
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