[Android] NewTabPage modifications

Fixes crash on opening new tab after closing all
Fixes NTP image on changing phone layout

Related to chromium change:
https://chromium.googlesource.com/chromium/src/+/c0a930a52910bb56bf68925d9f233c29281c516b

commit c0a930a52910bb56bf68925d9f233c29281c516b
Author: Theresa Wellington <twellington@chromium.org>
Date:   Fri May 1 20:33:45 2020 +0000

    Combine FeedNewTabPage with NewTabPage, delete dead code

    Fold FeedNewTabPage into NewTabPage and start cleaning-up Java code
    that is no longer needed. Obviously dead code has been removed;
    subsequent CLs will be needed to clean-up more Java code and C++
    classes.

    Bug: 1069183
This commit is contained in:
samartnik
2020-07-01 18:12:04 -04:00
committed by mkarolin
parent e40fb972cf
commit df83444d45
9 changed files with 115 additions and 23 deletions
+1
View File
@@ -48,6 +48,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/BraveUphold.java",
"../../brave/android/java/org/chromium/chrome/browser/notifications/channels/BraveChannelDefinitions.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/BraveDuckDuckGoOfferView.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/IncognitoNewTabPageView.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/model/NTPImage.java",
@@ -0,0 +1,61 @@
/* Copyright (c) 2020 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 http://mozilla.org/MPL/2.0/. */
package org.chromium.chrome.browser.ntp;
import android.app.Activity;
import androidx.annotation.Nullable;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.feed.BraveFeedSurfaceCoordinator;
import org.chromium.chrome.browser.feed.FeedProcessScopeFactory;
import org.chromium.chrome.browser.feed.shared.FeedSurfaceProvider;
import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ui.native_page.NativePageHost;
public class BraveNewTabPage extends NewTabPage {
private NewTabPageLayout mNewTabPageLayout;
private FeedSurfaceProvider mFeedSurfaceProvider;
public BraveNewTabPage(Activity activity,
BrowserControlsStateProvider browserControlsStateProvider,
Supplier<Tab> activityTabProvider, @Nullable OverviewModeBehavior overviewModeBehavior,
SnackbarManager snackbarManager, ActivityLifecycleDispatcher lifecycleDispatcher,
TabModelSelector tabModelSelector, boolean isTablet, NewTabPageUma uma,
boolean isInNightMode, NativePageHost nativePageHost, Tab tab) {
super(activity, browserControlsStateProvider, activityTabProvider, overviewModeBehavior,
snackbarManager, lifecycleDispatcher, tabModelSelector, isTablet, uma,
isInNightMode, nativePageHost, tab);
assert mNewTabPageLayout instanceof BraveNewTabPageLayout;
if (mNewTabPageLayout instanceof BraveNewTabPageLayout) {
((BraveNewTabPageLayout) mNewTabPageLayout).setTab(tab);
}
}
@Override
protected void initializeMainView(Activity activity, Supplier<Tab> tabProvider,
SnackbarManager snackbarManager, TabModelSelector tabModelSelector, NewTabPageUma uma,
boolean isInNightMode) {
super.initializeMainView(
activity, tabProvider, snackbarManager, tabModelSelector, uma, isInNightMode);
// Override surface provider
Profile profile = Profile.fromWebContents(mTab.getWebContents());
assert !FeedProcessScopeFactory.isFeedProcessEnabled();
mFeedSurfaceProvider =
new BraveFeedSurfaceCoordinator(activity, snackbarManager, tabModelSelector,
tabProvider, new SnapScrollHelper(mNewTabPageManager, mNewTabPageLayout),
mNewTabPageLayout, null, null, isInNightMode, this,
mNewTabPageManager.getNavigationDelegate(), profile);
}
}
@@ -105,7 +105,7 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
private ViewGroup mSiteSectionView;
private Supplier<Tab> mTabProvider;
private Tab mTab;
private Activity mActivity;
public BraveNewTabPageLayout(Context context, AttributeSet attrs) {
@@ -204,6 +204,10 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (sponsoredTab != null && NTPUtil.shouldEnableNTPFeature(sponsoredTab.isMoreTabs())) {
if (bgImageView != null) {
// We need to redraw image to fit parent properly
bgImageView.setImageResource(android.R.color.transparent);
}
NTPImage ntpImage = sponsoredTab.getTabNTPImage(false);
if (ntpImage == null) {
sponsoredTab.setNTPImage(SponsoredImageUtil.getBackgroundImage());
@@ -234,7 +238,6 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
assert (activity instanceof BraveActivity);
mActivity = activity;
mTabProvider = tabProvider;
}
@Override
@@ -636,14 +639,13 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
return view != null && view.getParent() != null;
}
public void setTab(Tab tab) {
mTab = tab;
}
private Tab getTab() {
Tab tab = mTabProvider.get();
if (tab == null && mActivity instanceof ChromeTabbedActivity) {
ChromeTabbedActivity chromeActivity = ((ChromeTabbedActivity) mActivity);
tab = chromeActivity.getActivityTab();
}
assert tab != null;
return tab;
assert mTab != null;
return mTab;
}
private TabImpl getTabImpl() {
@@ -33,6 +33,7 @@ public class BytecodeTest {
Assert.assertTrue(classExists("org/chromium/chrome/browser/LaunchIntentDispatcher"));
Assert.assertTrue(classExists("org/chromium/chrome/browser/ntp/NewTabPageLayout"));
Assert.assertTrue(classExists("org/chromium/chrome/browser/feed/FeedSurfaceCoordinator"));
Assert.assertTrue(classExists("org/chromium/chrome/browser/ntp/NewTabPage"));
}
@Test
@@ -65,6 +66,8 @@ public class BytecodeTest {
Assert.assertTrue(fieldExists("org/chromium/chrome/browser/feed/FeedSurfaceCoordinator", "mScrollViewForPolicy"));
Assert.assertTrue(fieldExists("org/chromium/chrome/browser/feed/FeedSurfaceCoordinator", "mNtpHeader"));
Assert.assertTrue(fieldExists("org/chromium/chrome/browser/feed/FeedSurfaceCoordinator", "mRootView"));
Assert.assertTrue(fieldExists("org/chromium/chrome/browser/ntp/NewTabPage", "mNewTabPageLayout"));
Assert.assertTrue(fieldExists("org/chromium/chrome/browser/ntp/NewTabPage", "mFeedSurfaceProvider"));
}
private boolean classExists(String className) {
@@ -17,6 +17,7 @@ public class BraveClassAdapter {
chain = new BraveManageSyncSettingsClassAdapter(chain);
chain = new BraveNewTabPageLayoutClassAdapter(chain);
chain = new BraveFeedSurfaceCoordinatorClassAdapter(chain);
chain = new BraveNewTabPageClassAdapter(chain);
return chain;
}
}
@@ -0,0 +1,23 @@
/* Copyright (c) 2020 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 http://mozilla.org/MPL/2.0/. */
package org.brave.bytecode;
import org.objectweb.asm.ClassVisitor;
public class BraveNewTabPageClassAdapter extends BraveClassVisitor {
static String sNewTabPageClassName = "org/chromium/chrome/browser/ntp/NewTabPage";
static String sBraveNewTabPageClassName = "org/chromium/chrome/browser/ntp/BraveNewTabPage";
public BraveNewTabPageClassAdapter(ClassVisitor visitor) {
super(visitor);
deleteField(sBraveNewTabPageClassName, "mNewTabPageLayout");
makeProtectedField(sNewTabPageClassName, "mNewTabPageLayout");
deleteField(sBraveNewTabPageClassName, "mFeedSurfaceProvider");
makeProtectedField(sNewTabPageClassName, "mFeedSurfaceProvider");
}
}
+2 -1
View File
@@ -8,5 +8,6 @@ brave_java_bytecode_files = [
"../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveFeedSurfaceCoordinatorClassAdapter.java",
"../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveMainPreferenceBaseClassAdapter.java",
"../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveManageSyncSettingsClassAdapter.java",
"../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageLayoutClassAdapter.java"
"../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageClassAdapter.java",
"../../../brave/build/android/bytecode/java/org/brave/bytecode/BraveNewTabPageLayoutClassAdapter.java",
]
@@ -0,0 +1,13 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
index 7fc28ad0d47a3a9cabf5631aad19d469d5d05e11..e7d64854f03e54e602119982685b0a9503c3e1eb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
@@ -82,7 +82,7 @@ public class NativePageFactory {
NativePageHost nativePageHost = new TabShim(tab, mActivity);
if (tab.isIncognito()) return new IncognitoNewTabPage(mActivity, nativePageHost);
- return new NewTabPage(mActivity, mActivity.getFullscreenManager(),
+ return new org.chromium.chrome.browser.ntp.BraveNewTabPage(mActivity, mActivity.getFullscreenManager(),
mActivity.getActivityTabProvider(), mActivity.getOverviewModeBehavior(),
mActivity.getSnackbarManager(), mActivity.getLifecycleDispatcher(),
mActivity.getTabModelSelector(), mActivity.isTablet(), mUma.get(),
@@ -1,13 +0,0 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
index 83657d3a9d528cc51e69be8dad61eb67f6e652a4..703764e66938d7427fb4341ab42a5ba52d2b19db 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -440,7 +440,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide
}
mFeedSurfaceProvider =
- new FeedSurfaceCoordinator(activity, snackbarManager, tabModelSelector, tabProvider,
+ new org.chromium.chrome.browser.feed.BraveFeedSurfaceCoordinator(activity, snackbarManager, tabModelSelector, tabProvider,
new SnapScrollHelper(mNewTabPageManager, mNewTabPageLayout),
mNewTabPageLayout, sectionHeaderView, actionApi, isInNightMode, this,
mNewTabPageManager.getNavigationDelegate(), profile);