constexpr int UP_KEY = 111;
constexpr int DOWN_KEY = 116;
+constexpr float doublePressTimeout = 1.0;
constexpr float longPressTimeout = 0.5;
constexpr int ZOOM_LABEL_INDEX = 9;
is_initialized_(false),
is_window_focused_(true),
is_long_pressed_(false),
+ is_double_pressed_(false),
is_return_press_passed_(false),
ime_state_(false),
navigation_mode_(samsung_browser_main::NavigationMode::PointerNavigation),
is_restore_popup_exists_(false),
is_bookamrk_popup_open_(false),
is_exit_popup_open_(false) {
+ if (IsBrowserLite())
+ latest_return_release_time_ = base::TimeTicks::Now();
LOG(INFO) << "";
}
HybridNavigationController::~HybridNavigationController() {
return true;
} else if (!keynameRaiseChannel.compare(key)) {
LOG(INFO) << "Channel up pressed";
- auto browser_scroll =
- samsung_browser_main::SamsungBrowserCore::instance()->BrowserScroll();
- browser_scroll->MoveScroll(
- samsung_utility::DirectionKeyToEnum(keynameArrowUp));
- cursor_controller->SetCursorImage(
- samsung_utility::DirectionKeyToScrollCursorImage(keynameArrowUp));
- return true;
+ if (IsBrowserLite() && IsMobileYoutube()) {
+ auto cursor_controller =
+ samsung_browser_main::SamsungBrowserCore::instance()
+ ->CursorController();
+
+ cursor_controller->GenerateKeyEvent(
+ UP_KEY, samsung_browser_main::FakeKeyEventType::PressPlusRelease);
+ return true;
+
+ } else {
+ auto browser_scroll =
+ samsung_browser_main::SamsungBrowserCore::instance()
+ ->BrowserScroll();
+ browser_scroll->MoveScroll(
+ samsung_utility::DirectionKeyToEnum(keynameArrowUp));
+ cursor_controller->SetCursorImage(
+ samsung_utility::DirectionKeyToScrollCursorImage(keynameArrowUp));
+ return true;
+ }
} else if (!keynameLowerChannel.compare(key)) {
- LOG(INFO) << "Channel down pressed";
- auto browser_scroll =
- samsung_browser_main::SamsungBrowserCore::instance()->BrowserScroll();
- browser_scroll->MoveScroll(
- samsung_utility::DirectionKeyToEnum(keynameArrowDown));
- cursor_controller->SetCursorImage(
- samsung_utility::DirectionKeyToScrollCursorImage(keynameArrowDown));
- return true;
+ if (IsBrowserLite() && IsMobileYoutube()) {
+ auto cursor_controller =
+ samsung_browser_main::SamsungBrowserCore::instance()
+ ->CursorController();
+
+ cursor_controller->GenerateKeyEvent(
+ DOWN_KEY, samsung_browser_main::FakeKeyEventType::PressPlusRelease);
+
+ return true;
+ } else {
+ auto browser_scroll =
+ samsung_browser_main::SamsungBrowserCore::instance()
+ ->BrowserScroll();
+ browser_scroll->MoveScroll(
+ samsung_utility::DirectionKeyToEnum(keynameArrowDown));
+ cursor_controller->SetCursorImage(
+ samsung_utility::DirectionKeyToScrollCursorImage(keynameArrowDown));
+ return true;
+ }
}
if (isDirection) {
return true;
} else if (!keynameReturn.compare(key)) {
LOG(INFO) << "Return key release";
+ if (IsBrowserLite() && IsMobileYoutube()) {
+ base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeDelta duration = now - latest_return_release_time_;
+ latest_return_release_time_ = base::TimeTicks::Now();
+
+ if (is_double_pressed_) {
+ is_double_pressed_ = false;
+
+ cursor_controller->GenerateMouseClick(
+ samsung_browser_main::MouseButtonCode::LEFT_BTN,
+ samsung_browser_main::FakeMouseEventType::Released);
+ } else {
+ if (duration.InSecondsF() <= doublePressTimeout) {
+ is_double_pressed_ = true;
+
+ cursor_controller->GenerateMouseClick(
+ samsung_browser_main::MouseButtonCode::LEFT_BTN,
+ samsung_browser_main::FakeMouseEventType::Pressed);
+ } else {
+ is_double_pressed_ = false;
+ }
+ }
+ }
// check wheather to create left click or right click based on long press
// or pass the event
long_press_timer_.Stop();
return false;
}
+bool HybridNavigationController::IsBrowserLite() {
+ const base::CommandLine* command_line =
+ base::CommandLine::ForCurrentProcess();
+
+ return command_line->HasSwitch(switches::kBrowserLite);
+}
+
+bool HybridNavigationController::IsMobileYoutube() {
+ if (!browser_)
+ return false;
+
+ TabStripModel* tab_strip_model = browser_->tab_strip_model();
+ content::WebContents* web_contents = tab_strip_model->GetActiveWebContents();
+ if (!web_contents)
+ return false;
+
+ GURL gurl = web_contents->GetVisibleURL();
+
+ if (!gurl.DomainIs("m.youtube.com"))
+ return false;
+
+ return true;
+}
+
bool HybridNavigationController::isInternalPage() {
std::u16string url = browser_->location_bar_model()->GetFormattedFullURL();
LOG(INFO) << "Current URL: " << url;
#ifndef CHROME_BROWSER_UI_SAMSUNG_HYBRID_NAVIGATION_CONTROLLER_H_
#define CHROME_BROWSER_UI_SAMSUNG_HYBRID_NAVIGATION_CONTROLLER_H_
+#include "base/command_line.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/strings/string_util.h"
+#include "base/time/time.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/common/chrome_switches.h"
#include "ui/base/metadata/metadata_header_macros.h"
// #include "chrome/browser/ui/views/toolbar/samsung/hybrid_navigation_driver.h"
#include "chrome/browser/ui/samsung/input_manager.h"
void handleToolbarViewArea(std::string key, int x, int y);
void handleTabstripViewArea(std::string key, int x, int y);
bool isInternalPage();
+ bool IsBrowserLite();
+ bool IsMobileYoutube();
// void SetHandler(HybridNavigationDriver* driver);
// void RemoveHandler(HybridNavigationDriver* driver);
bool is_initialized_;
bool is_window_focused_;
bool is_long_pressed_;
+ bool is_double_pressed_;
+ base::TimeTicks latest_return_release_time_;
bool is_return_press_passed_;
bool ime_state_;
bool is_exiting_scroll_mode_;