diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index 3f4705003e9..f857d515e69 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -54,6 +54,7 @@ *** getLogoMargin(...); *** calculateTabletMvtWidth(...); *** updateMvtOnTablet(...); + *** isInNarrowWindowOnTablet(...); } -keep class org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesMediator { diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java index 13c3ac3990d..d75e0b7f326 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java @@ -1231,6 +1231,13 @@ public class BraveNewTabPageLayout extends NewTabPageLayout } } + // Replace this static method to avoid leftMargin override to 0 at + // NewTabPageLayout.updateMvtOnTablet on tablets and avoid + // misalign of MVT area. + public static boolean isInNarrowWindowOnTablet(boolean isTablet, UiConfig uiConfig) { + return isTablet; + } + protected boolean useFixedMVTLayout() { return !UserPrefs.get(ProfileManager.getLastUsedRegularProfile()) .getBoolean(BravePref.NEW_TAB_PAGE_SHOW_BACKGROUND_IMAGE); diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 9b1be147dad..475deb3e1f5 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -481,6 +481,14 @@ public class BytecodeTest { "updateMvtOnTablet", MethodModifier.REGULAR, void.class)); + Assert.assertTrue( + methodExists( + "org/chromium/chrome/browser/ntp/NewTabPageLayout", + "isInNarrowWindowOnTablet", + MethodModifier.STATIC, + boolean.class, + boolean.class, + UiConfig.class)); Assert.assertTrue( methodExists( diff --git a/android/junit/BUILD.gn b/android/junit/BUILD.gn index db467d1f695..0f7148046f0 100644 --- a/android/junit/BUILD.gn +++ b/android/junit/BUILD.gn @@ -109,4 +109,13 @@ if (is_android) { "//chrome/android/junit:chrome_junit_tests_helper", ] } + + robolectric_library("brave_junit_tests_org.chromium.chrome.browser.ntp") { + resources_package = "org.chromium.chrome.browser.ntp" + sources = [ + "src/org/chromium/chrome/browser/ntp/BraveNewTabPageUtilUnitTest.java", + ] + + deps = [ "//chrome/android/junit:chrome_junit_tests_helper" ] + } } diff --git a/android/junit/src/org/chromium/chrome/browser/ntp/BraveNewTabPageUtilUnitTest.java b/android/junit/src/org/chromium/chrome/browser/ntp/BraveNewTabPageUtilUnitTest.java new file mode 100644 index 00000000000..3144f7a04ec --- /dev/null +++ b/android/junit/src/org/chromium/chrome/browser/ntp/BraveNewTabPageUtilUnitTest.java @@ -0,0 +1,44 @@ +/* Copyright (c) 2025 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package org.chromium.chrome.browser.ntp; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.annotation.Config; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.components.browser_ui.widget.displaystyle.HorizontalDisplayStyle; +import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; +import org.chromium.components.browser_ui.widget.displaystyle.UiConfig.DisplayStyle; +import org.chromium.components.browser_ui.widget.displaystyle.VerticalDisplayStyle; + +/** Unit tests for helper function in {@link BraveNewTabPage} class. */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class BraveNewTabPageUtilUnitTest { + @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + + @Test + public void testIsInNarrowWindowOnTablet() { + UiConfig uiConfig = Mockito.mock(UiConfig.class); + + UiConfig.DisplayStyle displayStyleWide = + new DisplayStyle(HorizontalDisplayStyle.WIDE, VerticalDisplayStyle.REGULAR); + when(uiConfig.getCurrentDisplayStyle()).thenReturn(displayStyleWide); + + assertTrue( + "Brave overridden isInNarrowWindowOnTablet on tablet when displayStyleWide ==" + + " HorizontalDisplayStyle.WIDE.", + BraveNewTabPageLayout.isInNarrowWindowOnTablet(true, uiConfig)); + } +} diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageLayoutClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageLayoutClassAdapter.java index 9b44a912e59..d8ef56575a3 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageLayoutClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageLayoutClassAdapter.java @@ -54,5 +54,10 @@ public class BraveNewTabPageLayoutClassAdapter extends BraveClassVisitor { makePublicMethod(sNewTabPageLayoutClassName, "updateMvtOnTablet"); changeSuperName(sNewTabPageLayoutClassName, sNewTabPageLayoutSuperClassName); + + changeMethodOwner( + sNewTabPageLayoutClassName, + "isInNarrowWindowOnTablet", + sBraveNewTabPageLayoutClassName); } } diff --git a/test/BUILD.gn b/test/BUILD.gn index 56a007e3c58..c8d3baf8e10 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -1471,6 +1471,7 @@ if (is_android) { deps = [ "//brave/android/junit:brave_junit_tests_org.chromium.chrome.browser.app", "//brave/android/junit:brave_junit_tests_org.chromium.chrome.browser.homepage", + "//brave/android/junit:brave_junit_tests_org.chromium.chrome.browser.ntp", "//brave/android/junit:brave_junit_tests_org.chromium.chrome.browser.rate", "//brave/android/junit:brave_junit_tests_org.chromium.chrome.browser.referrer", "//brave/android/junit:brave_junit_tests_org.chromium.chrome.browser.settings",