Commit 977e6525 authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Commit Bot

Made tablet mode switch shortcut and test API work on the device

* Introduced TabletModeBehavior struct that controls how
 TabletModeController controls tablet mode.
* Separate Forced mode, test mode and Dev mode (shortcut) as
 they requires slightly different behaviors.

* Remove the debug code from accelerometer reader and
move the test handling code to TabletModeController.

Bug: 963990
Test: manual. enable debug shortcut and ctrl-alt-shit-t on the device.
Change-Id: I4aeeb8f5c20991c9f46e855538e4d1970ca4cc02
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1655039
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Reviewed-by: default avatarXiaoqian Dai <xdai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#672773}
parent b5fcddf7
......@@ -168,7 +168,7 @@ void HandleToggleTouchscreen() {
void HandleToggleTabletMode() {
TabletModeController* controller = Shell::Get()->tablet_mode_controller();
controller->SetEnabledForTest(!controller->InTabletMode());
controller->SetEnabledForDev(!controller->InTabletMode());
}
void HandleTriggerCrash() {
......
......@@ -724,23 +724,19 @@ void AccelerometerReader::Initialize(
}
void AccelerometerReader::AddObserver(Observer* observer) {
if (accelerometer_file_reader_)
accelerometer_file_reader_->AddObserver(observer);
accelerometer_file_reader_->AddObserver(observer);
}
void AccelerometerReader::RemoveObserver(Observer* observer) {
if (accelerometer_file_reader_)
accelerometer_file_reader_->RemoveObserver(observer);
accelerometer_file_reader_->RemoveObserver(observer);
}
void AccelerometerReader::StartListenToTabletModeController() {
if (accelerometer_file_reader_)
accelerometer_file_reader_->StartListenToTabletModeController();
accelerometer_file_reader_->StartListenToTabletModeController();
}
void AccelerometerReader::StopListenToTabletModeController() {
if (accelerometer_file_reader_)
accelerometer_file_reader_->StopListenToTabletModeController();
accelerometer_file_reader_->StopListenToTabletModeController();
}
AccelerometerReader::AccelerometerReader()
......@@ -748,11 +744,4 @@ AccelerometerReader::AccelerometerReader()
AccelerometerReader::~AccelerometerReader() = default;
void AccelerometerReader::DisableForTest() {
if (accelerometer_file_reader_) {
accelerometer_file_reader_->StopListenToTabletModeController();
accelerometer_file_reader_.reset();
}
}
} // namespace ash
......@@ -49,10 +49,6 @@ class ASH_EXPORT AccelerometerReader {
void StartListenToTabletModeController();
void StopListenToTabletModeController();
void DisableForTest();
bool is_disabled() const { return !accelerometer_file_reader_; }
protected:
AccelerometerReader();
virtual ~AccelerometerReader();
......
......@@ -69,7 +69,6 @@ const char kAshPowerButtonPosition[] = "ash-power-button-position";
const char kAshUiMode[] = "force-tablet-mode";
// Values for the kAshUiMode flag.
const char kAshUiModeAuto[] = "auto";
const char kAshUiModeClamshell[] = "clamshell";
const char kAshUiModeTablet[] = "touch_view";
......
......@@ -29,7 +29,6 @@ ASH_PUBLIC_EXPORT extern const char kAshEnableWaylandServer[];
ASH_PUBLIC_EXPORT extern const char kAshForceEnableStylusTools[];
ASH_PUBLIC_EXPORT extern const char kAshPowerButtonPosition[];
ASH_PUBLIC_EXPORT extern const char kAshUiMode[];
ASH_PUBLIC_EXPORT extern const char kAshUiModeAuto[];
ASH_PUBLIC_EXPORT extern const char kAshUiModeClamshell[];
ASH_PUBLIC_EXPORT extern const char kAshUiModeTablet[];
ASH_PUBLIC_EXPORT extern const char kAshHideNotificationsForFactory[];
......
......@@ -187,7 +187,6 @@ bool ShellTestApi::IsSystemModalWindowOpen() {
}
void ShellTestApi::SetTabletModeEnabledForTest(bool enable) {
AccelerometerReader::GetInstance()->DisableForTest();
shell_->tablet_mode_controller()->SetEnabledForTest(enable);
}
......
......@@ -77,16 +77,15 @@ void OverviewButtonTray::UpdateIconVisibility() {
// a modal dialog is present.
SessionControllerImpl* session_controller =
Shell::Get()->session_controller();
bool kiosk_next = Shell::Get()->kiosk_next_shell_controller()->IsEnabled();
bool events_blocked = Shell::Get()
->tablet_mode_controller()
->AreInternalInputDeviceEventsBlocked();
bool active_session = session_controller->GetSessionState() ==
session_manager::SessionState::ACTIVE;
bool app_mode = session_controller->IsRunningInAppMode();
SetVisible(!kiosk_next && events_blocked && active_session && !app_mode);
bool kiosk_next = Shell::Get()->kiosk_next_shell_controller()->IsEnabled();
bool should_show =
Shell::Get()->tablet_mode_controller()->ShouldShowOverviewButton();
SetVisible(should_show && active_session && !app_mode && !kiosk_next);
}
void OverviewButtonTray::OnGestureEvent(ui::GestureEvent* event) {
......
......@@ -30,6 +30,7 @@
#include "ash/test_shell_delegate.h"
#include "ash/utility/screenshot_controller.h"
#include "ash/window_factory.h"
#include "ash/wm/tablet_mode/tablet_mode_controller.h"
#include "ash/wm/window_positioner.h"
#include "ash/wm/work_area_insets.h"
#include "base/memory/ptr_util.h"
......@@ -157,6 +158,8 @@ void AshTestBase::SetUp() {
void AshTestBase::TearDown() {
teardown_called_ = true;
// Make sure that we can exit tablet mode before shutdown correctly.
Shell::Get()->tablet_mode_controller()->SetEnabledForTest(false);
Shell::Get()->session_controller()->NotifyChromeTerminating();
// Flush the message loop to finish pending release tasks.
......
......@@ -172,6 +172,24 @@ class ASH_EXPORT TabletModeController
++tab_drag_in_splitview_count_;
}
// Enable/disable the tablet mode for development. Please see cc file
// for more details.
void SetEnabledForDev(bool enabled);
// Returns true if the system tray should have a overview button.
bool ShouldShowOverviewButton() const;
// Defines how the tablet mode controller controls the
// tablet mode and its transition between clamshell mode.
// This is defined as a public to define constexpr in cc.
struct TabletModeBehavior {
bool use_sensor = true;
bool observe_display_events = true;
bool observe_external_pointer_device_events = true;
bool block_internal_input_device = false;
bool always_show_overview_button_in_tablet_mode = false;
};
private:
class TabletModeTransitionFpsCounter;
friend class TabletModeControllerTestApi;
......@@ -242,11 +260,6 @@ class ASH_EXPORT TabletModeController
// otherwise returns TABLET_MODE_INTERNAL_INACTIVE.
TabletModeIntervalType CurrentTabletModeIntervalType();
// Checks whether we want to allow change the current ui mode to tablet mode
// or clamshell mode. This returns false if the user set a flag for the
// software to behave in a certain way regardless of configuration.
bool AllowUiModeChange() const;
// Called when a pointing device config is changed, or when a device list is
// sent from device manager. This will exit tablet mode if needed.
void HandlePointingDeviceAddedOrRemoved();
......@@ -364,9 +377,6 @@ class ASH_EXPORT TabletModeController
// mode.
TabletModeToggleObserver* toggle_observer_ = nullptr;
// Tracks whether a flag is used to force ui mode.
UiMode force_ui_mode_ = UiMode::kNone;
State state_ = State::kInClamshellMode;
// Calls RecordLidAngle() periodically.
......@@ -404,6 +414,8 @@ class ASH_EXPORT TabletModeController
base::ObserverList<TabletModeObserver>::Unchecked tablet_mode_observers_;
TabletModeBehavior tablet_mode_behavior_;
base::WeakPtrFactory<TabletModeController> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(TabletModeController);
......
......@@ -18,11 +18,11 @@ TabletModeControllerTestApi::TabletModeControllerTestApi()
TabletModeControllerTestApi::~TabletModeControllerTestApi() = default;
void TabletModeControllerTestApi::EnterTabletMode() {
tablet_mode_controller_->AttemptEnterTabletMode();
tablet_mode_controller_->SetEnabledForTest(true);
}
void TabletModeControllerTestApi::LeaveTabletMode() {
tablet_mode_controller_->AttemptLeaveTabletMode();
tablet_mode_controller_->SetEnabledForTest(false);
}
void TabletModeControllerTestApi::AttachExternalMouse() {
......
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