diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java index 01e282023bf..dc28b8ca95b 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java @@ -17,7 +17,6 @@ import org.chromium.build.annotations.EnsuresNonNull; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; import org.chromium.chrome.R; -import org.chromium.chrome.browser.app.BraveActivity; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.feed.BraveFeedSurfaceCoordinator; import org.chromium.chrome.browser.feed.FeedActionDelegate; @@ -33,8 +32,6 @@ import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImp import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; import org.chromium.chrome.browser.share.ShareDelegate; -import org.chromium.chrome.browser.suggestions.tile.Tile; -import org.chromium.chrome.browser.suggestions.tile.TileSource; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModelSelector; @@ -47,7 +44,6 @@ import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.search_engines.TemplateUrlService; import org.chromium.content_public.browser.LoadUrlParams; -import org.chromium.misc_metrics.mojom.MiscAndroidMetrics; import org.chromium.ui.base.ActivityResultTracker; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; @@ -55,7 +51,7 @@ import org.chromium.ui.modaldialog.ModalDialogManager; import java.util.function.Supplier; @NullMarked -public class BraveNewTabPage extends NewTabPage implements NewTabPage.MostVisitedTileClickObserver { +public class BraveNewTabPage extends NewTabPage { // To delete in bytecode, members from parent class will be used instead. private @Nullable BrowserControlsStateProvider mBrowserControlsStateProvider; private @Nullable NewTabPageLayout mNewTabPageLayout; @@ -68,8 +64,6 @@ public class BraveNewTabPage extends NewTabPage implements NewTabPage.MostVisite private final BottomSheetController mBottomSheetController; private final NonNullObservableSupplier mTabStripHeightSupplier; - private final Activity mActivity; - public BraveNewTabPage( Activity activity, BrowserControlsStateProvider browserControlsStateProvider, @@ -121,7 +115,6 @@ public class BraveNewTabPage extends NewTabPage implements NewTabPage.MostVisite topInsetProvider, startupMetricsTracker); - mActivity = activity; mBottomSheetController = bottomSheetController; mTabStripHeightSupplier = tabStripHeightSupplier; @@ -149,22 +142,6 @@ public class BraveNewTabPage extends NewTabPage implements NewTabPage.MostVisite TemplateUrlServiceFactory.getForProfile( Profile.fromWebContents(assertNonNull(mTab.getWebContents()))); templateUrlService.addObserver(this); - - addMostVisitedTileClickObserver(this); - } - - @Override - public void destroy() { - removeMostVisitedTileClickObserver(this); - super.destroy(); - } - - @Override - public void onMostVisitedTileClicked(Tile tile, Tab tab) { - if (!(mActivity instanceof BraveActivity braveActivity)) return; - MiscAndroidMetrics miscAndroidMetrics = braveActivity.getMiscAndroidMetrics(); - if (miscAndroidMetrics == null) return; - miscAndroidMetrics.recordTopSiteNavigation(tile.getSource() == TileSource.CUSTOM_LINKS); } @Override diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageCoordinator.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageCoordinator.java index 8172715d790..dd556e09888 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageCoordinator.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageCoordinator.java @@ -15,8 +15,13 @@ import org.chromium.chrome.browser.app.BraveActivity; import org.chromium.chrome.browser.feed.FeedSurfaceScrollDelegate; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.magic_stack.ModuleRegistry; +import org.chromium.chrome.browser.preloading.AndroidPrerenderManager; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.suggestions.mostvisited.MostVisitedSites; +import org.chromium.chrome.browser.suggestions.tile.Tile; import org.chromium.chrome.browser.suggestions.tile.TileGroup; +import org.chromium.chrome.browser.suggestions.tile.TileSource; +import org.chromium.chrome.browser.suggestions.tile.tile_edit_dialog.CustomTileEditCoordinator; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tasks.HomeSurfaceTracker; @@ -24,11 +29,13 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.TouchEnabledDelegate; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; +import org.chromium.misc_metrics.mojom.MiscAndroidMetrics; import org.chromium.ui.base.ActivityResultTracker; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; +import java.util.List; import java.util.function.Supplier; @NullMarked @@ -100,7 +107,7 @@ public class BraveNewTabPageCoordinator extends NewTabPageCoordinator { ActivityLifecycleDispatcher lifecycleDispatcher, Supplier composeplateUrlSupplier) { super.initialize( - tileGroupDelegate, + new BraveTileGroupDelegate(tileGroupDelegate, mActivity), searchProviderHasLogo, searchProviderIsGoogle, scrollDelegate, @@ -111,4 +118,97 @@ public class BraveNewTabPageCoordinator extends NewTabPageCoordinator { mBraveNewTabPageLayout.initialize(mNewTabPageManager, mActivity, mProfile, mWindowAndroid); } + + private static class BraveTileGroupDelegate implements TileGroup.Delegate { + private final TileGroup.Delegate mDelegate; + private final Activity mActivity; + + BraveTileGroupDelegate(TileGroup.Delegate delegate, Activity activity) { + mDelegate = delegate; + mActivity = activity; + } + + @Override + public void openMostVisitedItem(int windowDisposition, Tile tile) { + if (mActivity instanceof BraveActivity braveActivity) { + MiscAndroidMetrics metrics = braveActivity.getMiscAndroidMetrics(); + if (metrics != null) { + metrics.recordTopSiteNavigation(tile.getSource() == TileSource.CUSTOM_LINKS); + } + } + mDelegate.openMostVisitedItem(windowDisposition, tile); + } + + @Override + public void openMostVisitedItemInGroup(int windowDisposition, Tile tile) { + mDelegate.openMostVisitedItemInGroup(windowDisposition, tile); + } + + @Override + public void removeMostVisitedItem(Tile tile) { + mDelegate.removeMostVisitedItem(tile); + } + + @Override + public void setMostVisitedSitesObserver( + MostVisitedSites.Observer observer, int maxResults) { + mDelegate.setMostVisitedSitesObserver(observer, maxResults); + } + + @Override + public void onLoadingComplete(List tiles) { + mDelegate.onLoadingComplete(tiles); + } + + @Override + public void initAndroidPrerenderManager(AndroidPrerenderManager androidPrerenderManager) { + mDelegate.initAndroidPrerenderManager(androidPrerenderManager); + } + + @Override + public CustomTileEditCoordinator createCustomTileEditCoordinator( + @Nullable Tile originalTile) { + return mDelegate.createCustomTileEditCoordinator(originalTile); + } + + @Override + public void showTileUnpinSnackbar(Runnable undoHandler) { + mDelegate.showTileUnpinSnackbar(undoHandler); + } + + @Override + public double getSuggestionScore(GURL url) { + return mDelegate.getSuggestionScore(url); + } + + @Override + public void destroy() { + mDelegate.destroy(); + } + + @Override + public boolean addCustomLink(String name, @Nullable GURL url, @Nullable Integer pos) { + return mDelegate.addCustomLink(name, url, pos); + } + + @Override + public boolean assignCustomLink(GURL keyUrl, String name, @Nullable GURL url) { + return mDelegate.assignCustomLink(keyUrl, name, url); + } + + @Override + public boolean deleteCustomLink(GURL keyUrl) { + return mDelegate.deleteCustomLink(keyUrl); + } + + @Override + public boolean hasCustomLink(GURL keyUrl) { + return mDelegate.hasCustomLink(keyUrl); + } + + @Override + public boolean reorderCustomLink(GURL keyUrl, int newPos) { + return mDelegate.reorderCustomLink(keyUrl, newPos); + } + } }