Chromium Code Reviews| Index: ui/base/material_design/material_design_controller.cc |
| diff --git a/ui/base/material_design/material_design_controller.cc b/ui/base/material_design/material_design_controller.cc |
| index 0ac15448fe3f56e17e181c6c71ccf9eb07155172..726d31369d423da92ec73416d680d15cf13a893c 100644 |
| --- a/ui/base/material_design/material_design_controller.cc |
| +++ b/ui/base/material_design/material_design_controller.cc |
| @@ -7,11 +7,15 @@ |
| #include "base/command_line.h" |
| #include "base/logging.h" |
| #include "ui/base/material_design/material_design_controller.h" |
| +#include "ui/base/touch/touch_device.h" |
| #include "ui/base/ui_base_switches.h" |
| #if defined(OS_CHROMEOS) |
| -#include "base/strings/string_util.h" |
| -#include "base/sys_info.h" |
| +#include <fcntl.h> |
| + |
| +#include "base/files/file_enumerator.h" |
| +#include "ui/events/devices/device_data_manager.h" |
| +#include "ui/events/ozone/evdev/event_device_info.h" |
| #endif // defined(OS_CHROMEOS) |
| namespace ui { |
| @@ -29,26 +33,13 @@ MaterialDesignController::Mode MaterialDesignController::GetMode() { |
| } |
| bool MaterialDesignController::IsModeMaterial() { |
| + if (!is_mode_initialized_) |
| + return UseMaterialOrMaterialHybridByDefault(); |
| + |
| return GetMode() == Mode::MATERIAL_NORMAL || |
| GetMode() == Mode::MATERIAL_HYBRID; |
| } |
| -MaterialDesignController::Mode MaterialDesignController::DefaultMode() { |
| -#if defined(OS_CHROMEOS) |
| - // TODO(tdanderson): Enable hybrid by default for touchscreen devices. |
| - // See crbug.com/588880. |
| - const std::string board = base::SysInfo::GetLsbReleaseBoard(); |
| - if (base::StartsWith(board, "link", base::CompareCase::SENSITIVE) || |
| - base::StartsWith(board, "veyron_minnie", base::CompareCase::SENSITIVE) || |
| - base::StartsWith(board, "samus", base::CompareCase::SENSITIVE)) { |
| - return Mode::MATERIAL_HYBRID; |
| - } |
| - return Mode::MATERIAL_NORMAL; |
| -#else |
| - return Mode::NON_MATERIAL; |
| -#endif // defined(OS_CHROMEOS) |
| -} |
| - |
| void MaterialDesignController::InitializeMode() { |
| #if !defined(ENABLE_TOPCHROME_MD) |
| SetMode(Mode::NON_MATERIAL); |
| @@ -85,4 +76,37 @@ void MaterialDesignController::SetMode(MaterialDesignController::Mode mode) { |
| is_mode_initialized_ = true; |
| } |
| +MaterialDesignController::Mode MaterialDesignController::DefaultMode() { |
| + if (!UseMaterialOrMaterialHybridByDefault()) |
| + return Mode::NON_MATERIAL; |
| + |
| +#if defined(OS_CHROMEOS) |
| + if (!DeviceDataManager::GetInstance()->device_lists_complete()) { |
| + base::FileEnumerator file_enum( |
| + base::FilePath(FILE_PATH_LITERAL("/dev/input")), false, |
| + base::FileEnumerator::FILES, FILE_PATH_LITERAL("event*[0-9]")); |
| + for (base::FilePath path = file_enum.Next(); !path.empty(); |
| + path = file_enum.Next()) { |
| + EventDeviceInfo devinfo; |
| + int fd = open(path.value().c_str(), O_RDWR | O_NONBLOCK); |
|
vapier
2016/03/02 21:51:54
you should use O_CLOEXEC all the time unless you h
tdanderson
2016/03/04 19:45:53
Done.
|
| + if (fd >= 0 && devinfo.Initialize(fd, path) && devinfo.HasTouchscreen()) |
|
vapier
2016/03/02 21:51:54
doesn't this leak fd ?
tdanderson
2016/03/04 19:45:53
Done.
|
| + return Mode::MATERIAL_HYBRID; |
| + } |
| + } else if (GetTouchScreensAvailability() == |
| + TouchScreensAvailablity::ENABLED) { |
| + return Mode::MATERIAL_HYBRID; |
| + } |
| +#endif // defined(OS_CHROMEOS) |
| + |
| + return Mode::MATERIAL_NORMAL; |
| +} |
| + |
| +bool MaterialDesignController::UseMaterialOrMaterialHybridByDefault() { |
| +#if defined(OS_CHROMEOS) |
| + return true; |
| +#else |
| + return false; |
| +#endif // defined(OS_CHROMEOS) |
| +} |
| + |
| } // namespace ui |