[NextBrowser] Youtube support for Browserlite 82/324782/6
authorjmroman <jm.roman@samsung.com>
Thu, 15 May 2025 11:29:36 +0000 (19:29 +0800)
committerBot Blink <blinkbot@samsung.com>
Mon, 2 Jun 2025 14:06:42 +0000 (14:06 +0000)
- added double press to skim through timeline
- added channel up and down to move through shorts

Change-Id: I23aea41194f5889ed6a9e387668191e155a48a5f
Signed-off-by: jmroman <jm.roman@samsung.com>
chrome/browser/ui/samsung/hybrid_navigation_controller.cc
chrome/browser/ui/samsung/hybrid_navigation_controller.h

index 0326fbe170d88c5af715db4dcaefbcb98f6a8749..2ae63ff38c99b5c912de0dacff7086c63c8445a1 100644 (file)
@@ -44,6 +44,7 @@ constexpr int closeButtonX = 1898;
 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;
 
@@ -54,6 +55,7 @@ HybridNavigationController::HybridNavigationController(Browser* browser)
       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),
@@ -63,6 +65,8 @@ HybridNavigationController::HybridNavigationController(Browser* browser)
       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() {
@@ -396,22 +400,45 @@ bool HybridNavigationController::KeyEvent(
       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) {
@@ -485,6 +512,29 @@ bool HybridNavigationController::KeyEvent(
       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();
@@ -781,6 +831,30 @@ bool HybridNavigationController::IsKeyboardDevice(int deviceId,
   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;
index 39cb4c0df5746ec333ae3f42eb381903af5f11b4..6ba0e477475b458e629dc8d0115692af2db0749e 100644 (file)
@@ -5,13 +5,16 @@
 #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"
@@ -45,6 +48,8 @@ class HybridNavigationController
   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);
@@ -121,6 +126,8 @@ class HybridNavigationController
   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_;