Address PR comment

This commit is contained in:
Deep
2020-03-09 16:19:36 -04:00
parent e01e335667
commit 7cd237bc99
19 changed files with 447 additions and 242 deletions
+3 -2
View File
@@ -49,7 +49,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/ntp/sponsored/NTPUtil.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/sponsored/SponsoredLogo.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/sponsored/SponsoredTab.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/sponsored/NewTabListener.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/sponsored/NewTabPageListener.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/sponsored/RewardsBottomSheetDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/BraveRewardsOnboardingFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/BraveRewardsService.java",
@@ -118,7 +118,8 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/util/ConfigurationUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/util/LocaleUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/util/ImageUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/widget/tile/BraveTileWithTextView.java"
"../../brave/android/java/org/chromium/chrome/browser/widget/tile/BraveTileWithTextView.java",
"../../brave/android/java/org/chromium/chrome/browser/tabmodel/BraveTabCreator.java"
]
if (brave_rewards_enabled) {
@@ -5,7 +5,6 @@
package org.chromium.chrome.browser.ntp;
import android.os.Build;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
@@ -13,9 +12,15 @@ import android.view.ViewGroup;
import android.content.SharedPreferences;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.suggestions.tile.SiteSection;
import org.chromium.chrome.browser.explore_sites.ExploreSitesBridge;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredImageUtil;
import org.chromium.chrome.browser.ntp.sponsored.NTPUtil;
import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
public class BraveNewTabPageLayout extends NewTabPageLayout {
@@ -40,11 +45,39 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
mBraveStatsView = (ViewGroup) findViewById(R.id.brave_stats);
}
@Override
public void insertSiteSectionView() {
ViewGroup mainLayout = findViewById(R.id.ntp_main_layout);
mSiteSectionView = SiteSection.inflateSiteSection(mainLayout);
ViewGroup.LayoutParams layoutParams = mSiteSectionView.getLayoutParams();
layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
// If the explore sites section exists as its own section, then space it more closely.
int variation = ExploreSitesBridge.getVariation();
if (ExploreSitesBridge.isEnabled(variation)
&& !ExploreSitesBridge.isIntegratedWithMostLikely(variation)) {
((MarginLayoutParams) layoutParams).bottomMargin =
getResources().getDimensionPixelOffset(
R.dimen.tile_grid_layout_vertical_spacing);
}
mSiteSectionView.setLayoutParams(layoutParams);
ViewGroup mBraveStatsView = (ViewGroup) findViewById(R.id.brave_stats_layout);
int insertionPoint = mainLayout.indexOfChild(mBraveStatsView) + 1;
mainLayout.addView(mSiteSectionView, insertionPoint);
}
@Override
public int getMaxTileRows() {
SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences();
if(sharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)
&& (Build.VERSION.SDK_INT > Build.VERSION_CODES.M || (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP))) {
SharedPreferences mSharedPreferences = ContextUtils.getAppSharedPreferences();
boolean isMoreTabs = false;
ChromeTabbedActivity chromeTabbedActivity = BraveRewardsHelper.getChromeTabbedActivity();
if(chromeTabbedActivity != null) {
TabModel tabModel = chromeTabbedActivity.getCurrentTabModel();
isMoreTabs = tabModel.getCount() >= SponsoredImageUtil.MAX_TABS ? true : false;
}
if(mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)
&& NTPUtil.shouldEnableNTPFeature(isMoreTabs)) {
return 1;
} else {
return 2;
@@ -5,38 +5,19 @@
package org.chromium.chrome.browser.ntp;
import android.os.Bundle;
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.View;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.FrameLayout;
import android.widget.Button;
import android.view.ViewTreeObserver;
import java.util.Calendar;
import android.widget.Toast;
import android.content.res.Configuration;
import android.graphics.drawable.GradientDrawable;
import android.graphics.Color;
import android.app.Activity;
import android.os.Build;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ClickableSpan;
@@ -44,56 +25,35 @@ import android.text.style.ForegroundColorSpan;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.TextPaint;
import android.content.Intent;
import android.support.annotation.NonNull;
import java.io.File;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import android.net.Uri;
import android.os.Handler;
import org.chromium.base.TraceEvent;
import org.chromium.chrome.R;
import org.chromium.base.Log;
import org.chromium.base.PathUtils;
import org.chromium.base.ContextUtils;
import org.chromium.base.ApplicationStatus;
import org.chromium.chrome.browser.ntp.NewTabPageView;
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.suggestions.tile.TileGroup;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tabmodel.TabLaunchType;
import org.chromium.chrome.browser.ui.widget.displaystyle.UiConfig;
import org.chromium.chrome.browser.ui.widget.displaystyle.ViewResizer;
import org.chromium.chrome.browser.util.ViewUtils;
import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
import org.chromium.chrome.browser.ntp.sponsored.NTPImage;
import org.chromium.chrome.browser.ntp.sponsored.BackgroundImage;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredImage;
import org.chromium.chrome.browser.ntp.sponsored.NewTabListener;
import org.chromium.chrome.browser.ntp.sponsored.NewTabPageListener;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredImageUtil;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.chrome.browser.ntp.sponsored.RewardsBottomSheetDialogFragment;
import org.chromium.chrome.browser.BraveAdsNativeHelper;
import org.chromium.chrome.browser.BraveRewardsPanelPopup;
import org.chromium.chrome.browser.BraveRewardsObserver;
import org.chromium.chrome.browser.BraveRewardsNativeWorker;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tabmodel.TabSelectionType;
import org.chromium.chrome.browser.download.DownloadUtils;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.util.LocaleUtils;
import org.chromium.chrome.browser.util.ConfigurationUtils;
import org.chromium.chrome.browser.util.ImageUtils;
import org.chromium.chrome.browser.ntp.sponsored.NTPUtil;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredTab;
import org.chromium.chrome.browser.tab.TabAttributes;
import static org.chromium.chrome.browser.util.ViewUtils.dpToPx;
@@ -132,7 +92,7 @@ public class BraveNewTabPageView extends NewTabPageView {
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M || (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !sponsoredTab.isMoreTabs())) {
if (NTPUtil.shouldEnableNTPFeature(sponsoredTab.isMoreTabs())) {
NTPImage ntpImage = sponsoredTab.getTabNTPImage();
if(ntpImage == null) {
sponsoredTab.setNTPImage(SponsoredImageUtil.getBackgroundImage());
@@ -161,7 +121,11 @@ public class BraveNewTabPageView extends NewTabPageView {
constructedTimeNs);
mTab = (TabImpl) tab;
sponsoredTab = mTab.getSponsoredTab();
if (TabAttributes.from(tab).get(String.valueOf(((org.chromium.chrome.browser.tab.TabImpl)tab).getId())) == null) {
SponsoredTab mSponsoredTab = new SponsoredTab();
TabAttributes.from(tab).set(String.valueOf(((org.chromium.chrome.browser.tab.TabImpl)tab).getId()), mSponsoredTab);
}
sponsoredTab = TabAttributes.from(tab).get(String.valueOf(((org.chromium.chrome.browser.tab.TabImpl)tab).getId()));
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
NTPImage ntpImage = sponsoredTab.getTabNTPImage();
@@ -210,7 +174,7 @@ public class BraveNewTabPageView extends NewTabPageView {
mEstTimeSavedCountTextView.setText(getBraveStatsStringFromTime(estimatedMillisecondsSaved / 1000));
if(mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)
&& (Build.VERSION.SDK_INT > Build.VERSION_CODES.M || (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !sponsoredTab.isMoreTabs()))) {
&& NTPUtil.shouldEnableNTPFeature(sponsoredTab.isMoreTabs())) {
mAdsBlockedTextView.setTextColor(mNewTabPageLayout.getResources().getColor(android.R.color.white));
mHttpsUpgradesTextView.setTextColor(mNewTabPageLayout.getResources().getColor(android.R.color.white));
mEstTimeSavedTextView.setTextColor(mNewTabPageLayout.getResources().getColor(android.R.color.white));
@@ -283,7 +247,7 @@ public class BraveNewTabPageView extends NewTabPageView {
NTPUtil.updateOrientedUI(mTab.getActivity(), mNewTabPageLayout);
if(mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)
&& (Build.VERSION.SDK_INT > Build.VERSION_CODES.M || (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !sponsoredTab.isMoreTabs()))) {
&& NTPUtil.shouldEnableNTPFeature(sponsoredTab.isMoreTabs())) {
ViewTreeObserver observer = mNewTabPageLayout.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
@@ -445,7 +409,7 @@ public class BraveNewTabPageView extends NewTabPageView {
private void checkForNonDistruptiveBanner(NTPImage ntpImage) {
int brOption = NTPUtil.checkForNonDistruptiveBanner(ntpImage, sponsoredTab);
if (SponsoredImageUtil.BR_INVALID_OPTION != brOption) {
NTPUtil.showNonDistruptiveBanner(mTab.getActivity(), mNewTabPageLayout, brOption, sponsoredTab, newTabListener);
NTPUtil.showNonDistruptiveBanner(mTab.getActivity(), mNewTabPageLayout, brOption, sponsoredTab, newTabPageListener);
}
}
@@ -483,7 +447,7 @@ public class BraveNewTabPageView extends NewTabPageView {
}
};
private NewTabListener newTabListener = new NewTabListener() {
private NewTabPageListener newTabPageListener = new NewTabPageListener() {
@Override
public void updateInteractableFlag(boolean isBottomSheet) {
isFromBottomSheet = isBottomSheet;
@@ -6,6 +6,7 @@
package org.chromium.chrome.browser.ntp.sponsored;
import android.os.Bundle;
import android.os.Build;
import android.content.Context;
import android.content.SharedPreferences;
import android.view.ViewGroup;
@@ -153,7 +154,7 @@ public class NTPUtil {
return SponsoredImageUtil.BR_INVALID_OPTION;
}
public static void showNonDistruptiveBanner(ChromeActivity chromeActivity, View view, int ntpType, SponsoredTab sponsoredTab, NewTabListener newTabListener) {
public static void showNonDistruptiveBanner(ChromeActivity chromeActivity, View view, int ntpType, SponsoredTab sponsoredTab, NewTabPageListener newTabPageListener) {
ViewGroup nonDistruptiveBannerLayout = (ViewGroup) view.findViewById(R.id.non_distruptive_banner);
nonDistruptiveBannerLayout.setVisibility(View.GONE);
@@ -197,7 +198,7 @@ public class NTPUtil {
Bundle bundle = new Bundle();
bundle.putInt(SponsoredImageUtil.NTP_TYPE, ntpType);
rewardsBottomSheetDialogFragment.setArguments(bundle);
rewardsBottomSheetDialogFragment.setNewTabListener(newTabListener);
rewardsBottomSheetDialogFragment.setNewTabPageListener(newTabPageListener);
rewardsBottomSheetDialogFragment.show(chromeActivity.getSupportFragmentManager(), "rewards_bottom_sheet_dialog_fragment");
rewardsBottomSheetDialogFragment.setCancelable(false);
@@ -237,28 +238,27 @@ public class NTPUtil {
}, 1500);
}
public static NTPImage getNTPImage() {
SharedPreferences mSharedPreferences = ContextUtils.getAppSharedPreferences();
public static boolean shouldEnableNTPFeature(boolean isMoreTabs) {
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.M
|| (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !isMoreTabs)) {
return true;
}
return false;
}
if (mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_SPONSORED_IMAGES, true)
&& SponsoredImageUtil.getSponsoredImages().size() > 0
public static NTPImage getNTPImage() {
SharedPreferences mSharedPreferences = ContextUtils.getAppSharedPreferences();
if (shouldShowSponsoredImage()
&& mSharedPreferences.getInt(BackgroundImagesPreferences.PREF_APP_OPEN_COUNT, 0) == 1
&& SponsoredImageUtil.getTabIndex() == 2
&& BraveAdsNativeHelper.nativeIsLocaleValid(Profile.getLastUsedProfile())
&& !BravePrefServiceBridge.getInstance().getSafetynetCheckFailed()
&& ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) {
&& SponsoredImageUtil.getTabIndex() == 2) {
SponsoredImage sponsoredImage = SponsoredImageUtil.getSponsoredImage();
SponsoredImageUtil.incrementTabIndex(3);
return sponsoredImage;
}
if (mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_SPONSORED_IMAGES, true)
&& SponsoredImageUtil.getSponsoredImages().size() > 0
if (shouldShowSponsoredImage()
&& SponsoredImageUtil.getTabIndex() != 1
&& SponsoredImageUtil.getTabIndex() % 4 == 0
&& BraveAdsNativeHelper.nativeIsLocaleValid(Profile.getLastUsedProfile())
&& !BravePrefServiceBridge.getInstance().getSafetynetCheckFailed()
&& ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) {
&& SponsoredImageUtil.getTabIndex() % 4 == 0) {
SponsoredImageUtil.incrementTabIndex(1);
return SponsoredImageUtil.getSponsoredImage();
} else {
@@ -266,4 +266,23 @@ public class NTPUtil {
return SponsoredImageUtil.getBackgroundImage();
}
}
private static boolean shouldShowSponsoredImage() {
SharedPreferences mSharedPreferences = ContextUtils.getAppSharedPreferences();
if(mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_SPONSORED_IMAGES, true)
&& SponsoredImageUtil.getSponsoredImages().size() > 0
&& shouldShowImageForRewards()) {
return true;
}
return false;
}
private static boolean shouldShowImageForRewards() {
if(BraveAdsNativeHelper.nativeIsLocaleValid(Profile.getLastUsedProfile())
&& !BravePrefServiceBridge.getInstance().getSafetynetCheckFailed()
&& ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) {
return true;
}
return false;
}
}
@@ -5,7 +5,7 @@
package org.chromium.chrome.browser.ntp.sponsored;
public interface NewTabListener {
public interface NewTabPageListener {
void updateInteractableFlag(boolean isFromBottomSheet);
void updateNTPImage();
}
@@ -46,6 +46,7 @@ import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tab.TabAttributes;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.chrome.R;
@@ -56,7 +57,7 @@ public class RewardsBottomSheetDialogFragment extends BottomSheetDialogFragment{
private static final String BRAVE_REWARDS_LEARN_MORE = "https://brave.com/faq-rewards";
private int ntpType;
private NewTabListener newTabListener;
private NewTabPageListener newTabPageListener;
public static RewardsBottomSheetDialogFragment newInstance() {
return new RewardsBottomSheetDialogFragment();
@@ -75,7 +76,7 @@ public class RewardsBottomSheetDialogFragment extends BottomSheetDialogFragment{
@Override
public void onPause() {
newTabListener.updateInteractableFlag(true);
newTabPageListener.updateInteractableFlag(true);
super.onPause();
}
@@ -95,7 +96,7 @@ public class RewardsBottomSheetDialogFragment extends BottomSheetDialogFragment{
public void onResume() {
super.onResume();
newTabListener.updateInteractableFlag(false);
newTabPageListener.updateInteractableFlag(false);
boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(getActivity());
if(isTablet || (!isTablet && ConfigurationUtils.isLandscape(getActivity()))) {
@@ -105,8 +106,8 @@ public class RewardsBottomSheetDialogFragment extends BottomSheetDialogFragment{
}
}
public void setNewTabListener(NewTabListener newTabListener) {
this.newTabListener = newTabListener;
public void setNewTabPageListener(NewTabPageListener newTabPageListener) {
this.newTabPageListener = newTabPageListener;
}
@Override
@@ -304,9 +305,11 @@ public class RewardsBottomSheetDialogFragment extends BottomSheetDialogFragment{
private void reloadTab() {
ChromeTabbedActivity chromeTabbedActivity = BraveRewardsHelper.getChromeTabbedActivity();
if(chromeTabbedActivity != null) {
TabImpl currentTab = (TabImpl) chromeTabbedActivity.getActivityTab();
currentTab.getSponsoredTab().setNTPImage(SponsoredImageUtil.getBackgroundImage());
newTabListener.updateNTPImage();
Tab currentTab = chromeTabbedActivity.getActivityTab();
SponsoredTab sponsoredTab = TabAttributes.from(currentTab).get(String.valueOf(((TabImpl)currentTab).getId()));
sponsoredTab.setNTPImage(SponsoredImageUtil.getBackgroundImage());
TabAttributes.from(currentTab).set(String.valueOf(((TabImpl)currentTab).getId()), sponsoredTab);
newTabPageListener.updateNTPImage();
}
}
@@ -5,12 +5,10 @@
package org.chromium.chrome.browser.ntp.sponsored;
import android.os.Build;
import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
import org.chromium.chrome.browser.ntp.sponsored.NTPImage;
import org.chromium.chrome.browser.ntp.sponsored.NTPUtil;
import org.chromium.chrome.browser.ntp.sponsored.NewTabListener;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredImageUtil;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.ChromeTabbedActivity;
@@ -21,7 +19,6 @@ public class SponsoredTab{
private int tabIndex;
private boolean mShouldShowBanner;
private boolean isMoreTabs;
private NewTabListener newTabListener;
public SponsoredTab() {
ChromeTabbedActivity chromeTabbedActivity = BraveRewardsHelper.getChromeTabbedActivity();
@@ -30,7 +27,7 @@ public class SponsoredTab{
isMoreTabs = tabModel.getCount() > SponsoredImageUtil.MAX_TABS ? true : false;
}
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M || (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !isMoreTabs)){
if (NTPUtil.shouldEnableNTPFeature(isMoreTabs)){
ntpImage = NTPUtil.getNTPImage();
tabIndex = SponsoredImageUtil.getTabIndex();
updateBannerPref();
@@ -49,10 +46,6 @@ public class SponsoredTab{
this.ntpImage = ntpImage;
}
public void setNewTabListener(NewTabListener newTabListener) {
this.newTabListener = newTabListener;
}
public int getTabIndex() {
return tabIndex;
}
@@ -72,8 +65,4 @@ public class SponsoredTab{
public boolean isMoreTabs() {
return isMoreTabs;
}
public void setMoreTabs(boolean isMoreTabs) {
this.isMoreTabs = isMoreTabs;
}
}
@@ -0,0 +1,57 @@
/* 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.tabmodel;
import android.os.Build;
import android.content.SharedPreferences;
import org.chromium.base.ContextUtils;
import org.chromium.base.Supplier;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabDelegateFactory;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.init.StartupTabPreloader;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.util.UrlConstants;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredImageUtil;
import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
public class BraveTabCreator extends ChromeTabCreator {
public BraveTabCreator(ChromeActivity activity, WindowAndroid nativeWindow,
StartupTabPreloader startupTabPreloader,
Supplier<TabDelegateFactory> tabDelegateFactory, boolean incognito) {
super(activity, nativeWindow, startupTabPreloader, tabDelegateFactory, incognito);
}
@Override
public Tab launchUrl(String url, @TabLaunchType int type) {
SharedPreferences mSharedPreferences = ContextUtils.getAppSharedPreferences();
ChromeTabbedActivity chromeTabbedActivity = BraveRewardsHelper.getChromeTabbedActivity();
if(chromeTabbedActivity != null && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
TabModel tabModel = chromeTabbedActivity.getCurrentTabModel();
if (tabModel.getCount() >= SponsoredImageUtil.MAX_TABS && mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)) {
if(chromeTabbedActivity.getActivityTab() != null && NewTabPage.isNTPUrl(chromeTabbedActivity.getActivityTab().getUrl())) {
chromeTabbedActivity.hideOverview();
} else {
chromeTabbedActivity.openNewOrSelectExistingTab(UrlConstants.NTP_URL);
chromeTabbedActivity.hideOverview();
}
} else {
return launchUrl(url, type, null, 0);
}
} else {
return launchUrl(url, type, null, 0);
}
return null;
}
}
@@ -5,7 +5,6 @@
package org.chromium.chrome.browser.widget.tile;
import android.os.Build;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
@@ -14,6 +13,7 @@ import android.content.SharedPreferences;
import org.chromium.chrome.R;
import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.ntp.sponsored.SponsoredImageUtil;
import org.chromium.chrome.browser.ntp.sponsored.NTPUtil;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.tabmodel.TabModel;
@@ -40,7 +40,7 @@ public class BraveTileWithTextView extends TileWithTextView {
}
if(mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)
&& (Build.VERSION.SDK_INT > Build.VERSION_CODES.M || (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !isMoreTabs))) {
&& NTPUtil.shouldEnableNTPFeature(isMoreTabs)) {
mTitleView.setTextColor(getResources().getColor(android.R.color.white));
}
}
@@ -0,0 +1,185 @@
diff --git a/chrome/android/java/res/layout/new_tab_page_layout.xml b/chrome/android/java/res/layout/new_tab_page_layout.xml
index 522b6b1bfb35b83e758995459e00847bfad1ada8..c027e6d869bf7246f30d2eb090cd181d4ae0ad7f 100644
--- a/chrome/android/java/res/layout/new_tab_page_layout.xml
+++ b/chrome/android/java/res/layout/new_tab_page_layout.xml
@@ -2,73 +2,122 @@
<!-- Copyright 2016 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
-<org.chromium.chrome.browser.ntp.NewTabPageLayout
+<org.chromium.chrome.browser.ntp.BraveNewTabPageLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ntp_content"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
android:gravity="center"
android:paddingTop="@dimen/toolbar_height_no_shadow"
android:visibility="gone" >
- <!-- Search provider logo -->
- <org.chromium.chrome.browser.ntp.LogoView
- android:id="@+id/search_provider_logo"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/ntp_logo_height"
- android:layout_marginStart="16dp"
- android:layout_marginEnd="16dp"
- android:layout_marginTop="@dimen/ntp_logo_margin_top"
- android:layout_marginBottom="23dp" />
-
- <!-- Search box -->
- <include layout="@layout/fake_search_box_layout"/>
-
- <!-- Explore offline card -->
- <ViewStub
- android:id="@+id/explore_offline_card_stub"
+ <LinearLayout
+ android:id="@+id/parent_layout"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:layout="@layout/new_tab_page_offline_card"
- android:inflatedId="@+id/explore_offline_card" />
-
- <!-- Middle spacer -->
- <View
- android:id="@+id/ntp_middle_spacer"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="0"
- android:visibility="invisible" />
-
- <!-- Insertion point of the SiteSectionView, see NewTabPageLayout#insertSiteSection() -->
-
- <ViewStub
- android:id="@+id/explore_sites_stub"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:inflatedId="@+id/explore_sites"
- android:layout_marginBottom="16dp"
- android:layout="@layout/explore_sites_section" />
-
- <!-- Site suggestion tile grid placeholder -->
- <ViewStub
- android:id="@+id/tile_grid_placeholder_stub"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inflatedId="@+id/tile_grid_placeholder"
- android:layout="@layout/new_tab_page_tile_grid_placeholder" />
-
- <!-- Spacer for when there is no search provider logo. -->
- <View
- android:id="@+id/no_search_logo_spacer"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:visibility="gone" />
-</org.chromium.chrome.browser.ntp.NewTabPageLayout>
+ android:layout_height="match_parent"
+ android:layout_gravity="center_horizontal"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:id="@+id/ntp_main_layout"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+ <!-- Brave stats -->
+ <include layout="@layout/brave_stats_layout"/>
+
+ <!-- Explore offline card -->
+ <ViewStub
+ android:id="@+id/explore_offline_card_stub"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout="@layout/new_tab_page_offline_card"
+ android:inflatedId="@+id/explore_offline_card" />
+
+ <!-- Search provider logo -->
+ <org.chromium.chrome.browser.ntp.LogoView
+ android:id="@+id/search_provider_logo"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/ntp_logo_height"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginTop="@dimen/ntp_logo_margin_top"
+ android:layout_marginBottom="23dp" />
+
+ <!-- Search box -->
+ <include layout="@layout/fake_search_box_layout"/>
+
+ <!-- Middle spacer -->
+ <View
+ android:id="@+id/ntp_middle_spacer"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="0"
+ android:visibility="invisible" />
+
+ <!-- Insertion point of the SiteSectionView, see NewTabPageLayout#insertSiteSection() -->
+
+ <ViewStub
+ android:id="@+id/explore_sites_stub"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:inflatedId="@+id/explore_sites"
+ android:layout_marginBottom="16dp"
+ android:layout="@layout/explore_sites_section" />
+
+ <!-- Site suggestion tile grid placeholder -->
+ <ViewStub
+ android:id="@+id/tile_grid_placeholder_stub"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:inflatedId="@+id/tile_grid_placeholder"
+ android:layout="@layout/new_tab_page_tile_grid_placeholder" />
+
+ <!-- Spacer for when there is no search provider logo. -->
+ <View
+ android:id="@+id/no_search_logo_spacer"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:visibility="gone" />
+
+ </LinearLayout>
+
+ <FrameLayout
+ android:id="@+id/image_credit_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/credit_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="start|bottom"
+ android:background="@drawable/image_credit_rounded_shape"
+ android:padding="5dp"
+ android:layout_margin="10dp"
+ android:textSize="12sp"
+ android:visibility="gone"
+ android:textColor = "@android:color/white"/>
+
+ <ImageView
+ android:id="@+id/sponsored_logo"
+ android:layout_width="170dp"
+ android:layout_height="170dp"
+ android:contentDescription="@null"
+ android:visibility="gone"/>
+
+ </FrameLayout>
+
+ </LinearLayout>
+
+ <include layout="@layout/ntp_non_distruptive_banner"/>
+
+</org.chromium.chrome.browser.ntp.BraveNewTabPageLayout>
@@ -1,5 +1,5 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index be8466ad87791880f1f3c4ea61db11c466eb3356..ca47ea5f050a7e41d48e9d32851ae28d83910941 100644
index be8466ad87791880f1f3c4ea61db11c466eb3356..b59176c958e2f26cc2d33fe89e48ed9322c05c14 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -172,7 +172,7 @@ import java.util.Locale;
@@ -11,6 +11,41 @@ index be8466ad87791880f1f3c4ea61db11c466eb3356..ca47ea5f050a7e41d48e9d32851ae28d
/**
* The results of a system back press action.
*/
@@ -965,13 +965,13 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
}
@Override
- public ChromeTabCreator getTabCreator(boolean incognito) {
- return (ChromeTabCreator) super.getTabCreator(incognito);
+ public org.chromium.chrome.browser.tabmodel.BraveTabCreator getTabCreator(boolean incognito) {
+ return (org.chromium.chrome.browser.tabmodel.BraveTabCreator) super.getTabCreator(incognito);
}
@Override
- public ChromeTabCreator getCurrentTabCreator() {
- return (ChromeTabCreator) super.getCurrentTabCreator();
+ public org.chromium.chrome.browser.tabmodel.BraveTabCreator getCurrentTabCreator() {
+ return (org.chromium.chrome.browser.tabmodel.BraveTabCreator) super.getCurrentTabCreator();
}
@Override
@@ -1659,13 +1659,13 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
}
@Override
- protected Pair<ChromeTabCreator, ChromeTabCreator> createTabCreators() {
+ protected Pair<org.chromium.chrome.browser.tabmodel.BraveTabCreator, org.chromium.chrome.browser.tabmodel.BraveTabCreator> createTabCreators() {
Supplier<TabDelegateFactory> tabDelegateFactorySupplier = () -> {
return new TabbedModeTabDelegateFactory(this);
};
- return Pair.create(new ChromeTabCreator(this, getWindowAndroid(), getStartupTabPreloader(),
+ return Pair.create(new org.chromium.chrome.browser.tabmodel.BraveTabCreator(this, getWindowAndroid(), getStartupTabPreloader(),
tabDelegateFactorySupplier, false),
- new ChromeTabCreator(this, getWindowAndroid(), getStartupTabPreloader(),
+ new org.chromium.chrome.browser.tabmodel.BraveTabCreator(this, getWindowAndroid(), getStartupTabPreloader(),
tabDelegateFactorySupplier, true));
}
@@ -2091,7 +2091,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
}
}
@@ -0,0 +1,13 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
index 31bfebf2e1faf4620a3f943f5212918fb91b6ec1..d679f39d3d2eda0476d4b248ef6063f32b1ab1b1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -195,7 +195,7 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
}
@Override
- protected Pair<ChromeTabCreator, ChromeTabCreator> createTabCreators() {
+ protected Pair<org.chromium.chrome.browser.tabmodel.BraveTabCreator, org.chromium.chrome.browser.tabmodel.BraveTabCreator> createTabCreators() {
return mTabFactory.createTabCreators();
}
@@ -0,0 +1,31 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabFactory.java
index 157946aad58b6efcba212da92effb3dc9e7b30d2..db7638335f72755418c6437894742836b73ca219 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabFactory.java
@@ -32,7 +32,7 @@ import javax.inject.Inject;
import dagger.Lazy;
/**
- * Creates {@link Tab}, {@link TabModelSelector}, and {@link ChromeTabCreator}s in the context of a
+ * Creates {@link Tab}, {@link TabModelSelector}, and {@link org.chromium.chrome.browser.tabmodel.BraveTabCreator}s in the context of a
* Custom Tab activity.
*/
@ActivityScope
@@ -78,13 +78,13 @@ public class CustomTabActivityTabFactory {
return mTabModelSelector;
}
- /** Creates a {@link ChromeTabCreator}s for the custom tab. */
- public Pair<ChromeTabCreator, ChromeTabCreator> createTabCreators() {
+ /** Creates a {@link org.chromium.chrome.browser.tabmodel.BraveTabCreator}s for the custom tab. */
+ public Pair<org.chromium.chrome.browser.tabmodel.BraveTabCreator, org.chromium.chrome.browser.tabmodel.BraveTabCreator> createTabCreators() {
return Pair.create(createTabCreator(false), createTabCreator(true));
}
- private ChromeTabCreator createTabCreator(boolean incognito) {
- return new ChromeTabCreator(mActivity, mActivityWindowAndroid.get(), mStartupTabPreloader,
+ private org.chromium.chrome.browser.tabmodel.BraveTabCreator createTabCreator(boolean incognito) {
+ return new org.chromium.chrome.browser.tabmodel.BraveTabCreator(mActivity, mActivityWindowAndroid.get(), mStartupTabPreloader,
mCustomTabDelegateFactory::get, incognito) {
@Override
public TabDelegateFactory createDefaultTabDelegateFactory() {
@@ -1,5 +1,5 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
index db1db4f0b941c6cea83f2ca28ddc70b8e7916a90..01939137e47c16389c1ffedbc626c75868d7bec7 100644
index db1db4f0b941c6cea83f2ca28ddc70b8e7916a90..29b95ee943646c9556533850585b904300ad918d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -20,6 +20,7 @@ import android.view.ViewGroup;
@@ -19,31 +19,25 @@ index db1db4f0b941c6cea83f2ca28ddc70b8e7916a90..01939137e47c16389c1ffedbc626c758
private static final String TAG = "NewTabPageLayout";
// Used to signify the cached resource value is unset.
private static final int UNSET_RESOURCE_FLAG = -1;
@@ -415,8 +416,9 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
@@ -74,7 +75,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
private LogoView mSearchProviderLogoView;
private View mSearchBoxView;
- private ViewGroup mSiteSectionView;
+ protected ViewGroup mSiteSectionView;
private SiteSectionViewHolder mSiteSectionViewHolder;
private ImageView mVoiceSearchButton;
private View mTileGridPlaceholder;
@@ -415,7 +416,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
1f);
}
- private void insertSiteSectionView() {
- mSiteSectionView = SiteSection.inflateSiteSection(this);
+ public void insertSiteSectionView() {
+ ViewGroup mainLayout = findViewById(R.id.ntp_main_layout);
+ mSiteSectionView = SiteSection.inflateSiteSection(mainLayout);
mSiteSectionView = SiteSection.inflateSiteSection(this);
ViewGroup.LayoutParams layoutParams = mSiteSectionView.getLayoutParams();
layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
// If the explore sites section exists as its own section, then space it more closely.
@@ -429,8 +431,9 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
}
mSiteSectionView.setLayoutParams(layoutParams);
- int insertionPoint = indexOfChild(mMiddleSpacer) + 1;
- addView(mSiteSectionView, insertionPoint);
+ ViewGroup mBraveStatsView = (ViewGroup) findViewById(R.id.brave_stats_layout);
+ int insertionPoint = mainLayout.indexOfChild(mBraveStatsView) + 1;
+ mainLayout.addView(mSiteSectionView, insertionPoint);
}
/**
@@ -786,7 +789,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
@@ -786,7 +787,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
}
}
@@ -1,31 +1,12 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java
index d1ca3eb54eaa4988d2d347804152eae9d2381e00..c015ff58dd15669b3e6f26f8c95e57d5997dc3f8 100644
index d1ca3eb54eaa4988d2d347804152eae9d2381e00..f9de6a42bc85271e4c05883e9cb675ad2403e6e1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java
@@ -99,7 +99,7 @@ public class NewTabPageView extends HistoryNavigationLayout {
// Don't attach now, the recyclerView itself will determine when to do it.
mNewTabPageLayout = (NewTabPageLayout) LayoutInflater.from(getContext())
- .inflate(R.layout.new_tab_page_layout, mRecyclerView, false);
+ .inflate(R.layout.brave_new_tab_page_layout, mRecyclerView, false);
}
/**
@@ -199,11 +199,12 @@ public class NewTabPageView extends HistoryNavigationLayout {
@@ -199,6 +199,7 @@ public class NewTabPageView extends HistoryNavigationLayout {
mRecyclerView.setAdapter(newTabPageAdapter);
mRecyclerView.getLinearLayoutManager().scrollToPosition(scrollPosition);
- mRecyclerViewResizer = ViewResizer.createAndAttach(mRecyclerView, mUiConfig,
- mRecyclerView.getResources().getDimensionPixelSize(
- R.dimen.content_suggestions_card_modern_margin),
- mRecyclerView.getResources().getDimensionPixelSize(
- R.dimen.ntp_wide_card_lateral_margins));
+ if (false)
+ mRecyclerViewResizer = ViewResizer.createAndAttach(mRecyclerView, mUiConfig,
+ mRecyclerView.getResources().getDimensionPixelSize(
+ R.dimen.content_suggestions_card_modern_margin),
+ mRecyclerView.getResources().getDimensionPixelSize(
+ R.dimen.ntp_wide_card_lateral_margins));
setupScrollHandling();
mRecyclerViewResizer = ViewResizer.createAndAttach(mRecyclerView, mUiConfig,
mRecyclerView.getResources().getDimensionPixelSize(
R.dimen.content_suggestions_card_modern_margin),
@@ -1,19 +1,13 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SuggestionsTileView.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SuggestionsTileView.java
index a00bb6ece2d6af0c4fa83c9e86e47578cf7aefa7..f994f6e1892047979d7c70a64e8f1e377333b508 100644
index a00bb6ece2d6af0c4fa83c9e86e47578cf7aefa7..b20838f10d3f216f878f406ba129d5a98fb4bead 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SuggestionsTileView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/SuggestionsTileView.java
@@ -12,12 +12,13 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.TitleUtil;
import org.chromium.chrome.browser.suggestions.SiteSuggestion;
import org.chromium.chrome.browser.widget.tile.TileWithTextView;
+import org.chromium.chrome.browser.widget.tile.BraveTileWithTextView;
/**
@@ -17,7 +17,7 @@ import org.chromium.chrome.browser.widget.tile.TileWithTextView;
* The view for a site suggestion tile. Displays the title of the site beneath a large icon. If a
* large icon isn't available, displays a rounded rectangle with a single letter in its place.
*/
-public class SuggestionsTileView extends TileWithTextView {
+public class SuggestionsTileView extends BraveTileWithTextView {
+public class SuggestionsTileView extends org.chromium.chrome.browser.widget.tile.BraveTileWithTextView {
/** The data currently associated to this tile. */
private SiteSuggestion mData;
@@ -1,42 +0,0 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
index 5a3b49ec9effaec8a4ad6d99f48d98d3c5028e52..8049a4ceec7920c8e6d3e3f4a09e173953f3cc53 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -61,6 +61,7 @@ import org.chromium.content_public.browser.WebContentsAccessibility;
import org.chromium.content_public.common.ResourceRequestBody;
import org.chromium.ui.base.PageTransition;
import org.chromium.ui.base.WindowAndroid;
+import org.chromium.chrome.browser.ntp.sponsored.SponsoredTab;
/**
* Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}.
@@ -224,6 +225,8 @@ public class TabImpl implements Tab {
private final UserDataHost mUserDataHost = new UserDataHost();
+ private SponsoredTab sponsoredTab;
+
/**
* Creates an instance of a {@link TabImpl}.
*
@@ -275,6 +278,9 @@ public class TabImpl implements Tab {
updateInteractableState();
}
};
+
+ if(sponsoredTab == null)
+ sponsoredTab = new SponsoredTab();
}
@Override
@@ -1564,6 +1570,10 @@ public class TabImpl implements Tab {
}
}
+ public SponsoredTab getSponsoredTab() {
+ return sponsoredTab;
+ }
+
@NativeMethods
interface Natives {
void init(TabImpl caller);
@@ -1,52 +0,0 @@
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
index de7adb86f85b72ad82b8d994c59d164394cbdfdb..3d9e50f76211b4e00c8984121933119b52def2ef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreatorManager.java
@@ -6,12 +6,21 @@ package org.chromium.chrome.browser.tabmodel;
import androidx.annotation.Nullable;
+import android.os.Build;
+import android.content.SharedPreferences;
+
import org.chromium.base.TraceEvent;
+import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.util.UrlConstants;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
+import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.chrome.browser.ntp.NewTabPage;
+import org.chromium.chrome.browser.BraveRewardsHelper;
+import org.chromium.chrome.browser.ntp.sponsored.SponsoredImageUtil;
+import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
/**
* An interface to return a {@link TabCreator} either for regular or incognito tabs.
@@ -90,7 +99,24 @@ public interface TabCreatorManager {
public final void launchNTP() {
try {
TraceEvent.begin("TabCreator.launchNTP");
- launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI);
+ SharedPreferences mSharedPreferences = ContextUtils.getAppSharedPreferences();
+
+ ChromeTabbedActivity chromeTabbedActivity = BraveRewardsHelper.getChromeTabbedActivity();
+ if(chromeTabbedActivity != null && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
+ TabModel tabModel = chromeTabbedActivity.getCurrentTabModel();
+ if (tabModel.getCount() >= SponsoredImageUtil.MAX_TABS && mSharedPreferences.getBoolean(BackgroundImagesPreferences.PREF_SHOW_BACKGROUND_IMAGES, true)) {
+ if(chromeTabbedActivity.getActivityTab() != null && NewTabPage.isNTPUrl(chromeTabbedActivity.getActivityTab().getUrl())) {
+ chromeTabbedActivity.hideOverview();
+ } else {
+ chromeTabbedActivity.openNewOrSelectExistingTab(UrlConstants.NTP_URL);
+ chromeTabbedActivity.hideOverview();
+ }
+ } else {
+ launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI);
+ }
+ } else {
+ launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI);
+ }
} finally {
TraceEvent.end("TabCreator.launchNTP");
}