Commit d3b57e48 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Download home : Show/hide prefetch tab correctly

This CL fixes the prefetch tab visibility on download home.
The prefetch tab is visible only when prefetching is enabled
which requires the feature and the settings to be enabled.
Also adds an observer to the user setting pref, so that the
tab shows/hides as soon as the setting is toggled.

Bug: 951821
Change-Id: I85bc2d0f346d01b1a0f7f9d8b42430f3614ed373
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1564902Reviewed-by: default avatarCarlos Knippschild <carlosk@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652425}
parent cb019fe8
...@@ -12,6 +12,8 @@ import org.chromium.base.ObserverList; ...@@ -12,6 +12,8 @@ import org.chromium.base.ObserverList;
import org.chromium.chrome.browser.download.home.filter.Filters.FilterType; import org.chromium.chrome.browser.download.home.filter.Filters.FilterType;
import org.chromium.chrome.browser.download.home.filter.chips.ChipsCoordinator; import org.chromium.chrome.browser.download.home.filter.chips.ChipsCoordinator;
import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchConfiguration; import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchConfiguration;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefChangeRegistrar;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
...@@ -33,6 +35,8 @@ public class FilterCoordinator { ...@@ -33,6 +35,8 @@ public class FilterCoordinator {
void onFilterChanged(@FilterType int selectedTab); void onFilterChanged(@FilterType int selectedTab);
} }
private static Boolean sPrefetchUserSettingValueForTesting;
private final ObserverList<Observer> mObserverList = new ObserverList<>(); private final ObserverList<Observer> mObserverList = new ObserverList<>();
private final PropertyModel mModel = new PropertyModel(FilterProperties.ALL_KEYS); private final PropertyModel mModel = new PropertyModel(FilterProperties.ALL_KEYS);
private final FilterView mView; private final FilterView mView;
...@@ -40,6 +44,8 @@ public class FilterCoordinator { ...@@ -40,6 +44,8 @@ public class FilterCoordinator {
private final ChipsCoordinator mChipsCoordinator; private final ChipsCoordinator mChipsCoordinator;
private final FilterChipsProvider mChipsProvider; private final FilterChipsProvider mChipsProvider;
private PrefChangeRegistrar mPrefChangeRegistrar;
/** /**
* Builds a new FilterCoordinator. * Builds a new FilterCoordinator.
* @param context The context to build the views and pull parameters from. * @param context The context to build the views and pull parameters from.
...@@ -55,7 +61,30 @@ public class FilterCoordinator { ...@@ -55,7 +61,30 @@ public class FilterCoordinator {
mModel.set(FilterProperties.CHANGE_LISTENER, this::handleTabSelected); mModel.set(FilterProperties.CHANGE_LISTENER, this::handleTabSelected);
selectTab(TabType.FILES); selectTab(TabType.FILES);
mModel.set(FilterProperties.SHOW_TABS, PrefetchConfiguration.isPrefetchingFlagEnabled()); mModel.set(FilterProperties.SHOW_TABS, isPrefetchTabEnabled());
addPrefetchUserSettingsObserver();
}
private void addPrefetchUserSettingsObserver() {
if (sPrefetchUserSettingValueForTesting != null) return;
mPrefChangeRegistrar = new PrefChangeRegistrar();
mPrefChangeRegistrar.addObserver(
Pref.OFFLINE_PREFETCH_USER_SETTING_ENABLED, new PrefChangeRegistrar.PrefObserver() {
@Override
public void onPreferenceChange() {
mModel.set(FilterProperties.SHOW_TABS, isPrefetchTabEnabled());
int selectedTab = mModel.get(FilterProperties.SELECTED_TAB);
if (!isPrefetchTabEnabled()) selectedTab = TabType.FILES;
handleTabSelected(selectedTab);
}
});
}
/** Tears down this coordinator. */
public void destroy() {
if (mPrefChangeRegistrar != null) mPrefChangeRegistrar.destroy();
} }
/** @return The {@link View} representing this widget. */ /** @return The {@link View} representing this widget. */
...@@ -73,6 +102,11 @@ public class FilterCoordinator { ...@@ -73,6 +102,11 @@ public class FilterCoordinator {
mObserverList.removeObserver(observer); mObserverList.removeObserver(observer);
} }
/** For testing only. */
public static void setPrefetchUserSettingValueForTesting(boolean enabled) {
sPrefetchUserSettingValueForTesting = enabled;
}
/** /**
* Pushes a selected filter onto this {@link FilterCoordinator}. This is used when external * Pushes a selected filter onto this {@link FilterCoordinator}. This is used when external
* components might need to update the UI state. * components might need to update the UI state.
...@@ -80,8 +114,7 @@ public class FilterCoordinator { ...@@ -80,8 +114,7 @@ public class FilterCoordinator {
public void setSelectedFilter(@FilterType int filter) { public void setSelectedFilter(@FilterType int filter) {
@TabType @TabType
int tabSelected; int tabSelected;
if (filter == Filters.FilterType.PREFETCHED if (filter == Filters.FilterType.PREFETCHED && isPrefetchTabEnabled()) {
&& PrefetchConfiguration.isPrefetchingFlagEnabled()) {
tabSelected = TabType.PREFETCH; tabSelected = TabType.PREFETCH;
} else { } else {
mChipsProvider.setFilterSelected(filter); mChipsProvider.setFilterSelected(filter);
...@@ -122,4 +155,11 @@ public class FilterCoordinator { ...@@ -122,4 +155,11 @@ public class FilterCoordinator {
private void handleChipSelected() { private void handleChipSelected() {
handleTabSelected(mModel.get(FilterProperties.SELECTED_TAB)); handleTabSelected(mModel.get(FilterProperties.SELECTED_TAB));
} }
}
\ No newline at end of file private static boolean isPrefetchTabEnabled() {
return sPrefetchUserSettingValueForTesting == null
? PrefetchConfiguration.isPrefetchingFlagEnabled()
&& PrefetchConfiguration.isPrefetchingEnabledInSettings()
: sPrefetchUserSettingValueForTesting;
}
}
...@@ -152,6 +152,7 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis ...@@ -152,6 +152,7 @@ public class DateOrderedListCoordinator implements ToolbarCoordinator.ToolbarLis
/** Tears down this coordinator. */ /** Tears down this coordinator. */
public void destroy() { public void destroy() {
mFilterCoordinator.destroy();
mMediator.destroy(); mMediator.destroy();
mRenameDialogManager.destroy(); mRenameDialogManager.destroy();
} }
......
...@@ -20,6 +20,7 @@ import org.mockito.MockitoAnnotations; ...@@ -20,6 +20,7 @@ import org.mockito.MockitoAnnotations;
import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.download.home.filter.FilterCoordinator;
import org.chromium.chrome.browser.download.home.list.UiUtils; import org.chromium.chrome.browser.download.home.list.UiUtils;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory; import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
import org.chromium.chrome.browser.download.ui.StubbedProvider; import org.chromium.chrome.browser.download.ui.StubbedProvider;
...@@ -94,6 +95,7 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase { ...@@ -94,6 +95,7 @@ public class DownloadActivityV2Test extends DummyUiActivityTestCase {
} }
private void setUpUi() { private void setUpUi() {
FilterCoordinator.setPrefetchUserSettingValueForTesting(true);
DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder() DownloadManagerUiConfig config = new DownloadManagerUiConfig.Builder()
.setIsOffTheRecord(false) .setIsOffTheRecord(false)
.setIsSeparateActivity(true) .setIsSeparateActivity(true)
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "components/feed/core/pref_names.h" #include "components/feed/core/pref_names.h"
#endif // BUILDFLAG(ENABLE_FEED_IN_CHROME) #endif // BUILDFLAG(ENABLE_FEED_IN_CHROME)
#include "components/ntp_snippets/pref_names.h" #include "components/ntp_snippets/pref_names.h"
#include "components/offline_pages/core/prefetch/prefetch_prefs.h"
#include "components/payments/core/payment_prefs.h" #include "components/payments/core/payment_prefs.h"
// A preference exposed to Java. // A preference exposed to Java.
...@@ -36,6 +37,7 @@ enum Pref { ...@@ -36,6 +37,7 @@ enum Pref {
AUTOFILL_PROFILE_ENABLED, AUTOFILL_PROFILE_ENABLED,
AUTOFILL_CREDIT_CARD_ENABLED, AUTOFILL_CREDIT_CARD_ENABLED,
USAGE_STATS_ENABLED, USAGE_STATS_ENABLED,
OFFLINE_PREFETCH_USER_SETTING_ENABLED,
// PREF_NUM_PREFS must be the last entry. // PREF_NUM_PREFS must be the last entry.
PREF_NUM_PREFS PREF_NUM_PREFS
}; };
...@@ -63,6 +65,7 @@ const char* const kPrefsExposedToJava[] = { ...@@ -63,6 +65,7 @@ const char* const kPrefsExposedToJava[] = {
autofill::prefs::kAutofillProfileEnabled, autofill::prefs::kAutofillProfileEnabled,
autofill::prefs::kAutofillCreditCardEnabled, autofill::prefs::kAutofillCreditCardEnabled,
prefs::kUsageStatsEnabled, prefs::kUsageStatsEnabled,
offline_pages::prefetch_prefs::kUserSettingEnabled,
}; };
#endif // CHROME_BROWSER_ANDROID_PREFERENCES_PREFS_H_ #endif // CHROME_BROWSER_ANDROID_PREFERENCES_PREFS_H_
...@@ -62,6 +62,8 @@ TEST_F(PrefsTest, TestIndex) { ...@@ -62,6 +62,8 @@ TEST_F(PrefsTest, TestIndex) {
EXPECT_EQ(autofill::prefs::kAutofillCreditCardEnabled, EXPECT_EQ(autofill::prefs::kAutofillCreditCardEnabled,
GetPrefName(AUTOFILL_CREDIT_CARD_ENABLED)); GetPrefName(AUTOFILL_CREDIT_CARD_ENABLED));
EXPECT_EQ(prefs::kUsageStatsEnabled, GetPrefName(USAGE_STATS_ENABLED)); EXPECT_EQ(prefs::kUsageStatsEnabled, GetPrefName(USAGE_STATS_ENABLED));
EXPECT_EQ(offline_pages::prefetch_prefs::kUserSettingEnabled,
GetPrefName(OFFLINE_PREFETCH_USER_SETTING_ENABLED));
// If this check fails, a pref is missing a test case above. // If this check fails, a pref is missing a test case above.
EXPECT_EQ(Pref::PREF_NUM_PREFS, pref_count_); EXPECT_EQ(Pref::PREF_NUM_PREFS, pref_count_);
......
...@@ -13,7 +13,6 @@ namespace offline_pages { ...@@ -13,7 +13,6 @@ namespace offline_pages {
namespace prefetch_prefs { namespace prefetch_prefs {
namespace { namespace {
// Prefs only accessed in this file // Prefs only accessed in this file
const char kEnabled[] = "offline_prefetch.enabled";
const char kLimitlessPrefetchingEnabledTimePref[] = const char kLimitlessPrefetchingEnabledTimePref[] =
"offline_prefetch.limitless_prefetching_enabled_time"; "offline_prefetch.limitless_prefetching_enabled_time";
const char kPrefetchTestingHeaderPref[] = const char kPrefetchTestingHeaderPref[] =
...@@ -24,11 +23,12 @@ const base::TimeDelta kForbiddenCheckDelay = base::TimeDelta::FromDays(7); ...@@ -24,11 +23,12 @@ const base::TimeDelta kForbiddenCheckDelay = base::TimeDelta::FromDays(7);
} // namespace } // namespace
const char kUserSettingEnabled[] = "offline_prefetch.enabled";
const char kBackoff[] = "offline_prefetch.backoff"; const char kBackoff[] = "offline_prefetch.backoff";
void RegisterPrefs(PrefRegistrySimple* registry) { void RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterListPref(kBackoff); registry->RegisterListPref(kBackoff);
registry->RegisterBooleanPref(kEnabled, true); registry->RegisterBooleanPref(kUserSettingEnabled, true);
registry->RegisterTimePref(kLimitlessPrefetchingEnabledTimePref, registry->RegisterTimePref(kLimitlessPrefetchingEnabledTimePref,
base::Time()); base::Time());
registry->RegisterStringPref(kPrefetchTestingHeaderPref, std::string()); registry->RegisterStringPref(kPrefetchTestingHeaderPref, std::string());
...@@ -37,16 +37,16 @@ void RegisterPrefs(PrefRegistrySimple* registry) { ...@@ -37,16 +37,16 @@ void RegisterPrefs(PrefRegistrySimple* registry) {
} }
void SetPrefetchingEnabledInSettings(PrefService* prefs, bool enabled) { void SetPrefetchingEnabledInSettings(PrefService* prefs, bool enabled) {
prefs->SetBoolean(kEnabled, enabled); prefs->SetBoolean(kUserSettingEnabled, enabled);
} }
bool IsPrefetchingEnabledInSettings(PrefService* prefs) { bool IsPrefetchingEnabledInSettings(PrefService* prefs) {
return prefs->GetBoolean(kEnabled); return prefs->GetBoolean(kUserSettingEnabled);
} }
bool IsEnabled(PrefService* prefs) { bool IsEnabled(PrefService* prefs) {
return IsPrefetchingOfflinePagesEnabled() && prefs->GetBoolean(kEnabled) && return IsPrefetchingOfflinePagesEnabled() &&
IsEnabledByServer(prefs); prefs->GetBoolean(kUserSettingEnabled) && IsEnabledByServer(prefs);
} }
void SetLimitlessPrefetchingEnabled(PrefService* prefs, bool enabled) { void SetLimitlessPrefetchingEnabled(PrefService* prefs, bool enabled) {
...@@ -85,8 +85,8 @@ std::string GetPrefetchTestingHeader(PrefService* prefs) { ...@@ -85,8 +85,8 @@ std::string GetPrefetchTestingHeader(PrefService* prefs) {
bool IsForbiddenCheckDue(PrefService* prefs) { bool IsForbiddenCheckDue(PrefService* prefs) {
DCHECK(prefs); DCHECK(prefs);
base::Time checkTime = prefs->GetTime(kNextForbiddenCheckTimePref); base::Time checkTime = prefs->GetTime(kNextForbiddenCheckTimePref);
return IsPrefetchingOfflinePagesEnabled() && prefs->GetBoolean(kEnabled) && return IsPrefetchingOfflinePagesEnabled() &&
!IsEnabledByServer(prefs) && prefs->GetBoolean(kUserSettingEnabled) && !IsEnabledByServer(prefs) &&
(checkTime < OfflineTimeNow() || // did the delay expire? (checkTime < OfflineTimeNow() || // did the delay expire?
checkTime > checkTime >
OfflineTimeNow() + OfflineTimeNow() +
......
...@@ -17,6 +17,7 @@ namespace offline_pages { ...@@ -17,6 +17,7 @@ namespace offline_pages {
namespace prefetch_prefs { namespace prefetch_prefs {
extern const char kBackoff[]; extern const char kBackoff[];
extern const char kUserSettingEnabled[];
void RegisterPrefs(PrefRegistrySimple* registry); void RegisterPrefs(PrefRegistrySimple* registry);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment