Commit ad8815d3 authored by Wenyu Fu's avatar Wenyu Fu Committed by Commit Bot

[HomepageConversion] Change HomepageSettings UI

Update the HomepageSettings UI to the radio group style when homepage
conversion flag is enabled.

Change-Id: Ic5d707de0a32bb0715518953bbc6286c0ec0a2da
Bug: 1036470
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2015552Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarNatalie Chouinard <chouinard@chromium.org>
Commit-Queue: Wenyu Fu <wenyufu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738605}
parent d36e16ae
...@@ -1402,6 +1402,7 @@ chrome_java_sources = [ ...@@ -1402,6 +1402,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/settings/download/DownloadSettings.java", "java/src/org/chromium/chrome/browser/settings/download/DownloadSettings.java",
"java/src/org/chromium/chrome/browser/settings/homepage/HomepageEditor.java", "java/src/org/chromium/chrome/browser/settings/homepage/HomepageEditor.java",
"java/src/org/chromium/chrome/browser/settings/homepage/HomepageSettings.java", "java/src/org/chromium/chrome/browser/settings/homepage/HomepageSettings.java",
"java/src/org/chromium/chrome/browser/settings/homepage/RadioButtonGroupHomepagePreference.java",
"java/src/org/chromium/chrome/browser/settings/languages/AddLanguageFragment.java", "java/src/org/chromium/chrome/browser/settings/languages/AddLanguageFragment.java",
"java/src/org/chromium/chrome/browser/settings/languages/LanguageItem.java", "java/src/org/chromium/chrome/browser/settings/languages/LanguageItem.java",
"java/src/org/chromium/chrome/browser/settings/languages/LanguageListBaseAdapter.java", "java/src/org/chromium/chrome/browser/settings/languages/LanguageListBaseAdapter.java",
......
...@@ -413,6 +413,7 @@ chrome_test_java_sources = [ ...@@ -413,6 +413,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragmentTest.java", "javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillTestRule.java", "javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillTestRule.java",
"javatests/src/org/chromium/chrome/browser/settings/developer/TracingSettingsTest.java", "javatests/src/org/chromium/chrome/browser/settings/developer/TracingSettingsTest.java",
"javatests/src/org/chromium/chrome/browser/settings/homepage/HomepageSettingsFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/settings/notifications/NotificationsSettingsTest.java", "javatests/src/org/chromium/chrome/browser/settings/notifications/NotificationsSettingsTest.java",
"javatests/src/org/chromium/chrome/browser/settings/password/PasswordSettingsTest.java", "javatests/src/org/chromium/chrome/browser/settings/password/PasswordSettingsTest.java",
"javatests/src/org/chromium/chrome/browser/settings/privacy/BrowsingDataBridgeTest.java", "javatests/src/org/chromium/chrome/browser/settings/privacy/BrowsingDataBridgeTest.java",
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2020 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. -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<!-- TODO(crbug.com/1048859): Change to the exact style TextMessagePreference is using. -->
<TextView
android:id="@+id/title"
style="@style/PreferenceTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/homepage_preference_title_lateral_padding"
android:paddingTop="@dimen/homepage_preference_title_vertical_padding"
android:paddingEnd="@dimen/homepage_preference_title_lateral_padding"
android:paddingBottom="@dimen/homepage_preference_title_vertical_padding"
android:text="@string/options_homepage_edit_label" />
<org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout
android:id="@+id/radio_button_group"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- TODO(crbug.com/1048863): Remove android:background for radio buttons here and below after enhancement. -->
<org.chromium.components.browser_ui.widget.RadioButtonWithDescription
android:id="@+id/radio_button_chrome_ntp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
app:primaryText="@string/options_homepage_chrome_homepage" />
<org.chromium.components.browser_ui.widget.RadioButtonWithEditText
android:id="@+id/radio_button_uri_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:hint="@string/options_homepage_edit_hint"
android:inputType="textUri" />
</org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout>
</LinearLayout>
\ No newline at end of file
...@@ -660,6 +660,8 @@ ...@@ -660,6 +660,8 @@
<dimen name="theme_preferences_checkbox_margin_end">8dp</dimen> <dimen name="theme_preferences_checkbox_margin_end">8dp</dimen>
<dimen name="theme_preferences_checkbox_container_padding_start">60dp</dimen> <dimen name="theme_preferences_checkbox_container_padding_start">60dp</dimen>
<dimen name="theme_preferences_checkbox_container_padding_end">16dp</dimen> <dimen name="theme_preferences_checkbox_container_padding_end">16dp</dimen>
<dimen name="homepage_preference_title_lateral_padding">16dp</dimen>
<dimen name="homepage_preference_title_vertical_padding">10dp</dimen>
<!-- Dimens of tab indicator --> <!-- Dimens of tab indicator -->
<dimen name="tab_indicator_height">3dp</dimen> <dimen name="tab_indicator_height">3dp</dimen>
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
found in the LICENSE file. --> found in the LICENSE file. -->
<PreferenceScreen <PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<org.chromium.chrome.browser.settings.ChromeSwitchPreference <org.chromium.chrome.browser.settings.ChromeSwitchPreference
android:key="homepage_switch" android:key="homepage_switch"
...@@ -14,6 +15,19 @@ ...@@ -14,6 +15,19 @@
<Preference <Preference
android:key="homepage_edit" android:key="homepage_edit"
android:title="@string/options_homepage_edit_label" android:title="@string/options_homepage_edit_label"
android:visibility="gone"
android:fragment="org.chromium.chrome.browser.settings.homepage.HomepageEditor" /> android:fragment="org.chromium.chrome.browser.settings.homepage.HomepageEditor" />
<org.chromium.chrome.browser.settings.homepage.RadioButtonGroupHomepagePreference
android:key="homepage_radio_group"
android:visibility="gone"
app:allowDividerBelow="false" />
<org.chromium.chrome.browser.settings.TextMessagePreference
android:key="text_managed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:allowDividerAbove="false"
app:allowDividerBelow="false" />
</PreferenceScreen> </PreferenceScreen>
...@@ -93,7 +93,7 @@ public class HomepagePolicyManager implements PrefObserver { ...@@ -93,7 +93,7 @@ public class HomepagePolicyManager implements PrefObserver {
} }
@VisibleForTesting @VisibleForTesting
static void setInstanceForTests(HomepagePolicyManager instance) { public static void setInstanceForTests(HomepagePolicyManager instance) {
assert instance != null; assert instance != null;
sInstance = instance; sInstance = instance;
} }
...@@ -197,13 +197,13 @@ public class HomepagePolicyManager implements PrefObserver { ...@@ -197,13 +197,13 @@ public class HomepagePolicyManager implements PrefObserver {
} }
@VisibleForTesting @VisibleForTesting
boolean isHomepageLocationPolicyEnabled() { public boolean isHomepageLocationPolicyEnabled() {
return mIsHomepageLocationPolicyEnabled; return mIsHomepageLocationPolicyEnabled;
} }
@VisibleForTesting @VisibleForTesting
@NonNull @NonNull
String getHomepagePreference() { public String getHomepagePreference() {
assert mIsHomepageLocationPolicyEnabled; assert mIsHomepageLocationPolicyEnabled;
return mHomepage; return mHomepage;
} }
......
...@@ -126,7 +126,18 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat ...@@ -126,7 +126,18 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
} }
/** /**
* Get the current homepage URI string, if it's enabled. Null otherwise or uninitialized.
*
* This function checks different source to get the current homepage, which listed below
* according to their priority:
*
* <b>isManagedByPolicy > useChromeNTP > useDefaultUri > useCustomUri</b>
*
* @return Homepage URI string, if it's enabled. Null otherwise or uninitialized. * @return Homepage URI string, if it's enabled. Null otherwise or uninitialized.
*
* @see HomepagePolicyManager#isHomepageManagedByPolicy()
* @see #getPrefHomepageUseChromeNTP()
* @see #getPrefHomepageUseDefaultUri()
*/ */
public static String getHomepageUri() { public static String getHomepageUri() {
if (!isHomepageEnabled()) return null; if (!isHomepageEnabled()) return null;
...@@ -135,6 +146,8 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat ...@@ -135,6 +146,8 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
String homepageUri; String homepageUri;
if (HomepagePolicyManager.isHomepageManagedByPolicy()) { if (HomepagePolicyManager.isHomepageManagedByPolicy()) {
homepageUri = HomepagePolicyManager.getHomepageUrl(); homepageUri = HomepagePolicyManager.getHomepageUrl();
} else if (manager.getPrefHomepageUseChromeNTP()) {
homepageUri = UrlConstants.NTP_NON_NATIVE_URL;
} else if (manager.getPrefHomepageUseDefaultUri()) { } else if (manager.getPrefHomepageUseDefaultUri()) {
homepageUri = getDefaultHomepageUri(); homepageUri = getDefaultHomepageUri();
} else { } else {
...@@ -147,7 +160,7 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat ...@@ -147,7 +160,7 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
* @return The default homepage URI if the homepage is partner provided or the new tab page * @return The default homepage URI if the homepage is partner provided or the new tab page
* if the homepage button is force enabled via flag. * if the homepage button is force enabled via flag.
*/ */
private static String getDefaultHomepageUri() { public static String getDefaultHomepageUri() {
if (PartnerBrowserCustomizations.isHomepageProviderAvailableAndEnabled()) { if (PartnerBrowserCustomizations.isHomepageProviderAvailableAndEnabled()) {
return PartnerBrowserCustomizations.getHomePageUrl(); return PartnerBrowserCustomizations.getHomePageUrl();
} }
...@@ -183,29 +196,54 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat ...@@ -183,29 +196,54 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
} }
/** /**
* Sets custom homepage URI * True if the homepage URL is the default value. False means the homepage URL is using
* the user customized URL. Note that this method does not take enterprise policy into account.
* Use {@link HomepagePolicyManager#isHomepageManagedByPolicy} if policy information is needed.
*
* @return Whether if the homepage URL is the default value.
*/ */
public void setPrefHomepageCustomUri(String customUri) { public boolean getPrefHomepageUseDefaultUri() {
mSharedPreferencesManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, customUri); return mSharedPreferencesManager.readBoolean(
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, true);
} }
/** /**
* @return Whether the homepage URL is the default value. * @return Whether the homepage is set to Chrome NTP in Homepage settings
*/ */
public boolean getPrefHomepageUseDefaultUri() { public boolean getPrefHomepageUseChromeNTP() {
return mSharedPreferencesManager.readBoolean( return mSharedPreferencesManager.readBoolean(
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, true); ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, false);
} }
/** /**
* Sets whether the homepage URL is the default value. * Set homepage related shared preferences, and notify listeners for the homepage status change.
* These shared preference values will reflect what homepage we are using.
*
* The priority of the input pref values during value checking:
* useChromeNTP > useDefaultUri > customUri
*
* @param useChromeNtp True if homepage is set as Chrome's New tab page.
* @param useDefaultUri True if homepage is using default URI.
* @param customUri String value for user customized homepage URI.
*
* @see #getHomepageUri()
*/ */
public void setPrefHomepageUseDefaultUri(boolean useDefaultUri) { public void setHomepagePreferences(
assert !HomepagePolicyManager.isHomepageManagedByPolicy(); boolean useChromeNtp, boolean useDefaultUri, String customUri) {
// TODO(wenyufu): Add metrics for how ofter user checks this option.
recordHomepageIsCustomized(!useDefaultUri);
mSharedPreferencesManager.writeBoolean( mSharedPreferencesManager.writeBoolean(
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, useDefaultUri); ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, useChromeNtp);
boolean wasUseDefaultUri = getPrefHomepageUseDefaultUri();
if (wasUseDefaultUri != useDefaultUri) {
recordHomepageIsCustomized(!useDefaultUri);
mSharedPreferencesManager.writeBoolean(
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, useDefaultUri);
}
mSharedPreferencesManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, customUri);
notifyHomepageUpdated();
} }
/** /**
......
...@@ -365,4 +365,9 @@ public class PartnerBrowserCustomizations { ...@@ -365,4 +365,9 @@ public class PartnerBrowserCustomizations {
} }
return true; return true;
} }
@VisibleForTesting
public static void setHomepageForTests(String homepage) {
sHomepage = homepage;
}
} }
...@@ -65,7 +65,7 @@ public class HomepageEditor extends Fragment implements TextWatcher { ...@@ -65,7 +65,7 @@ public class HomepageEditor extends Fragment implements TextWatcher {
mResetButton.setOnClickListener(new View.OnClickListener() { mResetButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, "");
getActivity().finish(); getActivity().finish();
} }
}); });
...@@ -79,8 +79,7 @@ public class HomepageEditor extends Fragment implements TextWatcher { ...@@ -79,8 +79,7 @@ public class HomepageEditor extends Fragment implements TextWatcher {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
GURL url = UrlFormatter.fixupUrl(mHomepageUrlEdit.getText().toString()); GURL url = UrlFormatter.fixupUrl(mHomepageUrlEdit.getText().toString());
mHomepageManager.setPrefHomepageCustomUri(url.getValidSpecOrEmpty()); mHomepageManager.setHomepagePreferences(false, false, url.getValidSpecOrEmpty());
mHomepageManager.setPrefHomepageUseDefaultUri(false);
getActivity().finish(); getActivity().finish();
} }
}); });
......
...@@ -11,12 +11,18 @@ import android.support.v7.preference.PreferenceFragmentCompat; ...@@ -11,12 +11,18 @@ import android.support.v7.preference.PreferenceFragmentCompat;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.flags.CachedFeatureFlags; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.homepage.HomepagePolicyManager; import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.partnercustomizations.HomepageManager; import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
import org.chromium.chrome.browser.settings.ChromeSwitchPreference; import org.chromium.chrome.browser.settings.ChromeSwitchPreference;
import org.chromium.chrome.browser.settings.ManagedPreferenceDelegate; import org.chromium.chrome.browser.settings.ManagedPreferenceDelegate;
import org.chromium.chrome.browser.settings.SettingsUtils; import org.chromium.chrome.browser.settings.SettingsUtils;
import org.chromium.chrome.browser.settings.TextMessagePreference;
import org.chromium.chrome.browser.settings.homepage.RadioButtonGroupHomepagePreference.HomepageOption;
import org.chromium.chrome.browser.settings.homepage.RadioButtonGroupHomepagePreference.PreferenceValues;
import org.chromium.chrome.browser.toolbar.bottom.BottomToolbarVariationManager;
import org.chromium.components.url_formatter.UrlFormatter;
/** /**
* Fragment that allows the user to configure homepage related preferences. * Fragment that allows the user to configure homepage related preferences.
...@@ -26,6 +32,10 @@ public class HomepageSettings extends PreferenceFragmentCompat { ...@@ -26,6 +32,10 @@ public class HomepageSettings extends PreferenceFragmentCompat {
public static final String PREF_HOMEPAGE_SWITCH = "homepage_switch"; public static final String PREF_HOMEPAGE_SWITCH = "homepage_switch";
@VisibleForTesting @VisibleForTesting
public static final String PREF_HOMEPAGE_EDIT = "homepage_edit"; public static final String PREF_HOMEPAGE_EDIT = "homepage_edit";
@VisibleForTesting
public static final String PREF_HOMEPAGE_RADIO_GROUP = "homepage_radio_group";
@VisibleForTesting
public static final String PREF_TEXT_MANAGED = "text_managed";
/** /**
* Delegate used to mark that the homepage is being managed. * Delegate used to mark that the homepage is being managed.
...@@ -40,6 +50,8 @@ public class HomepageSettings extends PreferenceFragmentCompat { ...@@ -40,6 +50,8 @@ public class HomepageSettings extends PreferenceFragmentCompat {
private HomepageManager mHomepageManager; private HomepageManager mHomepageManager;
private Preference mHomepageEdit; private Preference mHomepageEdit;
private RadioButtonGroupHomepagePreference mRadioButtons;
private TextMessagePreference mTextManaged;
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
...@@ -48,34 +60,159 @@ public class HomepageSettings extends PreferenceFragmentCompat { ...@@ -48,34 +60,159 @@ public class HomepageSettings extends PreferenceFragmentCompat {
getActivity().setTitle(R.string.options_homepage_title); getActivity().setTitle(R.string.options_homepage_title);
SettingsUtils.addPreferencesFromResource(this, R.xml.homepage_preferences); SettingsUtils.addPreferencesFromResource(this, R.xml.homepage_preferences);
HomepageManagedPreferenceDelegate managedDelegate = new HomepageManagedPreferenceDelegate();
// Set up preferences inside the activity.
ChromeSwitchPreference homepageSwitch = ChromeSwitchPreference homepageSwitch =
(ChromeSwitchPreference) findPreference(PREF_HOMEPAGE_SWITCH); (ChromeSwitchPreference) findPreference(PREF_HOMEPAGE_SWITCH);
homepageSwitch.setManagedPreferenceDelegate(new HomepageManagedPreferenceDelegate()); homepageSwitch.setManagedPreferenceDelegate(managedDelegate);
mHomepageEdit = findPreference(PREF_HOMEPAGE_EDIT);
mTextManaged = (TextMessagePreference) findPreference(PREF_TEXT_MANAGED);
mRadioButtons =
(RadioButtonGroupHomepagePreference) findPreference(PREF_HOMEPAGE_RADIO_GROUP);
if (CachedFeatureFlags.isBottomToolbarEnabled()) { mTextManaged.setManagedPreferenceDelegate(managedDelegate);
setupPreferenceVisibility();
// Set up listeners and update the page.
if (BottomToolbarVariationManager.isHomeButtonOnBottom()) {
homepageSwitch.setVisible(false); homepageSwitch.setVisible(false);
} else { } else {
boolean isHomepageEnabled = HomepageManager.isHomepageEnabled(); boolean isHomepageEnabled = HomepageManager.isHomepageEnabled();
homepageSwitch.setChecked(isHomepageEnabled); homepageSwitch.setChecked(isHomepageEnabled);
homepageSwitch.setOnPreferenceChangeListener((preference, newValue) -> { homepageSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
mHomepageManager.setPrefHomepageEnabled((boolean) newValue); onSwitchPreferenceChange((boolean) newValue);
return true; return true;
}); });
} }
mHomepageEdit = findPreference(PREF_HOMEPAGE_EDIT); if (isHomepageSettingsUIConversionEnabled()) {
updateCurrentHomepageUrl(); mRadioButtons.setOnPreferenceChangeListener((preference, newValue) -> {
assert newValue instanceof PreferenceValues;
onRadioGroupPreferenceChange((PreferenceValues) newValue);
return true;
});
}
// Update preference views and state.
updatePreferenceState();
} }
private void updateCurrentHomepageUrl() { /**
if (HomepagePolicyManager.isHomepageManagedByPolicy()) mHomepageEdit.setEnabled(false); * Set up the visibility for HomepageSettings based on {@link
* ChromeFeatureList#HOMEPAGE_SETTINGS_UI_CONVERSION}.
* TODO(wenyufu): If the feature flag is removed in the future, remove the unused component and
* delete this function.
*/
private void setupPreferenceVisibility() {
boolean useNewUI = isHomepageSettingsUIConversionEnabled();
mHomepageEdit.setSummary(HomepageManager.getHomepageUri()); mHomepageEdit.setVisible(!useNewUI);
mRadioButtons.setVisible(useNewUI);
mTextManaged.setVisible(useNewUI && BottomToolbarVariationManager.isHomeButtonOnBottom()
&& HomepagePolicyManager.isHomepageManagedByPolicy());
}
/**
* Update the visibility when pref values or policy state changes.
*/
private void updatePreferenceState() {
boolean isManagedByPolicy = HomepagePolicyManager.isHomepageManagedByPolicy();
if (isHomepageSettingsUIConversionEnabled()) {
mTextManaged.setVisible(
isManagedByPolicy && BottomToolbarVariationManager.isHomeButtonOnBottom());
if (mRadioButtons != null) {
mRadioButtons.setupPreferenceValues(createPreferenceValuesForRadioGroup());
}
} else {
mHomepageEdit.setEnabled(!isManagedByPolicy && HomepageManager.isHomepageEnabled());
mHomepageEdit.setSummary(HomepageManager.getHomepageUri());
}
}
private boolean isHomepageSettingsUIConversionEnabled() {
return ChromeFeatureList.isEnabled(ChromeFeatureList.HOMEPAGE_SETTINGS_UI_CONVERSION);
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
updateCurrentHomepageUrl(); updatePreferenceState();
}
/**
* Handle the preference changes when we toggled the homepage switch.
* @param isChecked Whether switch is turned on.
*/
private void onSwitchPreferenceChange(boolean isChecked) {
mHomepageManager.setPrefHomepageEnabled(isChecked);
updatePreferenceState();
}
/**
* Will be called when the status of {@link #mRadioButtons} is changed.
* @param newValue The {@link PreferenceValues} that the {@link
* RadioButtonGroupHomepagePreference} is holding.
*/
private void onRadioGroupPreferenceChange(PreferenceValues newValue) {
// When the preference is changed by code during initialization due to policy, ignore the
// changes of the preference.
if (HomepagePolicyManager.isHomepageManagedByPolicy()) return;
boolean setToUseNTP = newValue.getCheckedOption() == HomepageOption.ENTRY_CHROME_NTP;
String newHomepage = UrlFormatter.fixupUrl(newValue.getCustomURI()).getValidSpecOrEmpty();
boolean useDefaultUri = HomepageManager.getDefaultHomepageUri().equals(newHomepage);
mHomepageManager.setHomepagePreferences(setToUseNTP, useDefaultUri, newHomepage);
}
/**
* @return The user customized homepage setting.
*/
private String getHomepageForEditText() {
if (HomepagePolicyManager.isHomepageManagedByPolicy()) {
return HomepagePolicyManager.getHomepageUrl();
}
if (mHomepageManager.getPrefHomepageUseDefaultUri()) {
String defaultUrl = HomepageManager.getDefaultHomepageUri();
return NewTabPage.isNTPUrl(defaultUrl) ? "" : defaultUrl;
}
return mHomepageManager.getPrefHomepageCustomUri();
}
private PreferenceValues createPreferenceValuesForRadioGroup() {
boolean isPolicyEnabled = HomepagePolicyManager.isHomepageManagedByPolicy();
// Check if the NTP button should be checked.
// Note it is not always checked when homepage is NTP. When user customized homepage is NTP
// URL, we don't check Chrome's Homepage radio button.
boolean shouldCheckNTP;
if (isPolicyEnabled) {
shouldCheckNTP = NewTabPage.isNTPUrl(HomepagePolicyManager.getHomepageUrl());
} else {
shouldCheckNTP = mHomepageManager.getPrefHomepageUseChromeNTP()
|| (mHomepageManager.getPrefHomepageUseDefaultUri()
&& NewTabPage.isNTPUrl(HomepageManager.getDefaultHomepageUri()));
}
@HomepageOption
int checkedOption =
shouldCheckNTP ? HomepageOption.ENTRY_CHROME_NTP : HomepageOption.ENTRY_CUSTOM_URI;
boolean isRadioButtonPreferenceEnabled =
!isPolicyEnabled && HomepageManager.isHomepageEnabled();
// NTP should be visible when policy is not enforced or the option is checked.
boolean isNTPOptionVisible = !isPolicyEnabled || shouldCheckNTP;
// Customized option should be visible when policy is not enforced or the option is checked.
boolean isCustomizedOptionVisible = !isPolicyEnabled || !shouldCheckNTP;
return new PreferenceValues(checkedOption, getHomepageForEditText(),
isRadioButtonPreferenceEnabled, isNTPOptionVisible, isCustomizedOptionVisible);
} }
} }
// Copyright 2020 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.
package org.chromium.chrome.browser.settings.homepage;
import android.content.Context;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.R;
import org.chromium.components.browser_ui.widget.RadioButtonWithDescription;
import org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout;
import org.chromium.components.browser_ui.widget.RadioButtonWithEditText;
import org.chromium.components.browser_ui.widget.RadioButtonWithEditText.OnTextChangeListener;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* A radio button group Preference used for Homepage Preference. It contains 2 options:
* a {@link RadioButtonWithDescription} that represent Chrome NTP, and a
* {@link RadioButtonWithEditText} that represents customized URL set by partner or user.
*/
public final class RadioButtonGroupHomepagePreference
extends Preference implements RadioGroup.OnCheckedChangeListener, OnTextChangeListener {
/**
* A data structure which holds the displayed value and the status for this preference.
*/
static class PreferenceValues {
/**
* The option that is checked in {@link RadioButtonGroupHomepagePreference}.
*/
private @HomepageOption int mCheckedOption;
/**
* The string that displayed on the edit text box.
*/
private String mCustomizedText;
/**
* Whether the RadioButtonGroup is enabled.
*/
private boolean mIsEnabled;
/**
* Whether the option for to {@link HomepageOption#ENTRY_CHROME_NTP} is visible.
*/
private boolean mIsNTPOptionVisible;
/**
* Whether the option for to {@link HomepageOption#ENTRY_CUSTOM_URI} is visible.
*/
private boolean mIsCustomizedOptionVisible;
/**
* Created the data structure for {@link RadioButtonGroupHomepagePreference} to communicate
* the preference status to outside fragment.
* @param checkedOption The option that is checked in {@link
* RadioButtonGroupHomepagePreference}
* @param customizedText The string that displayed on the edit text box.
* @param isEnabled Whether the RadioButtonGroup is enabled.
* @param isNTPButtonVisible Whether the option for to {@link
* HomepageOption#ENTRY_CHROME_NTP} is visible.
* @param isCustomizedOptionVisible Whether the option for to {@link
* HomepageOption#ENTRY_CUSTOM_URI} is visible.
*/
PreferenceValues(@HomepageOption int checkedOption, String customizedText,
boolean isEnabled, boolean isNTPButtonVisible, boolean isCustomizedOptionVisible) {
mCheckedOption = checkedOption;
mCustomizedText = customizedText;
mIsEnabled = isEnabled;
mIsNTPOptionVisible = isNTPButtonVisible;
mIsCustomizedOptionVisible = isCustomizedOptionVisible;
}
/**
* @return The option that is checked in {@link RadioButtonGroupHomepagePreference}.
*/
@HomepageOption
int getCheckedOption() {
return mCheckedOption;
}
/**
* @return The string that displayed on the edit text box.
*/
String getCustomURI() {
return mCustomizedText;
}
}
/**
* Enums that represent the status of radio buttons inside this Preference.
*/
@IntDef({HomepageOption.ENTRY_CHROME_NTP, HomepageOption.ENTRY_CUSTOM_URI})
@Retention(RetentionPolicy.SOURCE)
@interface HomepageOption {
int ENTRY_CHROME_NTP = 0;
int ENTRY_CUSTOM_URI = 1;
int NUM_ENTRIES = 2;
}
private boolean mIsBoundToViewHolder;
private RadioButtonWithEditText mCustomUri;
private RadioButtonWithDescription mChromeNTP;
private RadioButtonWithDescriptionLayout mGroup;
private TextView mTitle;
private PreferenceValues mPreferenceValues;
public RadioButtonGroupHomepagePreference(Context context, AttributeSet attrs) {
super(context, attrs);
// Inflating from XML.
setLayoutResource(R.layout.radio_button_group_homepage_preference);
}
/**
* Called when the checked radio button has changed. When the selection is cleared, checkedId is
* -1.
*
* @param group The group in which the checked radio button has changed
* @param checkedId The unique identifier of the newly checked radio button
*/
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
assert mCustomUri.isChecked() != mChromeNTP.isChecked();
@HomepageOption
int checkedOption = mChromeNTP.isChecked() ? HomepageOption.ENTRY_CHROME_NTP
: HomepageOption.ENTRY_CUSTOM_URI;
mPreferenceValues.mCheckedOption = checkedOption;
callChangeListener(mPreferenceValues);
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
mChromeNTP = (RadioButtonWithDescription) holder.findViewById(R.id.radio_button_chrome_ntp);
mCustomUri = (RadioButtonWithEditText) holder.findViewById(R.id.radio_button_uri_edit);
assert mChromeNTP != null : "Chrome NTP button missing in the layout";
assert mCustomUri != null : "Custom URI button missing in the layout";
mGroup = (RadioButtonWithDescriptionLayout) holder.findViewById(R.id.radio_button_group);
mGroup.setOnCheckedChangeListener(this);
mTitle = (TextView) holder.findViewById(R.id.title);
mIsBoundToViewHolder = true;
// Set up views with data provided by the delegate.
if (mPreferenceValues != null) {
setupPreferenceValues(mPreferenceValues);
}
// Set up text listeners after initial value are set.
mCustomUri.addTextChangeListener(this);
}
/**
* Will be called when the text edit has a value change.
*/
@Override
public void onTextChanged(CharSequence newText) {
assert mPreferenceValues != null;
// If the text change is triggered by the preference fragment (ex. setting up when toggle
// the switch), ignore this update.
if (mPreferenceValues.mCustomizedText.equals(newText.toString())) return;
if (mChromeNTP.isChecked()) {
// TODO(crbug.com/1048863): Remove after enhancing RadioButtonWithDescription#setChecked
mChromeNTP.setChecked(false);
mCustomUri.setChecked(true);
}
mPreferenceValues.mCheckedOption = HomepageOption.ENTRY_CUSTOM_URI;
mPreferenceValues.mCustomizedText = newText.toString();
callChangeListener(mPreferenceValues);
}
/**
* Update the current view with the latest data from the {@link PreferenceValues}. If the
* preference is not bounded with view holder yet, the values will be stored and populated at
* the end of {@link #onBindViewHolder(PreferenceViewHolder)}.
*
* @param value The {@link PreferenceValues} that should be presents by this preference.
*/
void setupPreferenceValues(@NonNull PreferenceValues value) {
if (mIsBoundToViewHolder) {
mGroup.setEnabled(value.mIsEnabled);
mTitle.setEnabled(value.mIsEnabled);
// Change the text first so that #onTextChanged will not mess up radio buttons that
// should be checked.
mCustomUri.setPrimaryText(value.mCustomizedText);
mChromeNTP.setChecked(value.mCheckedOption == HomepageOption.ENTRY_CHROME_NTP);
mCustomUri.setChecked(value.mCheckedOption == HomepageOption.ENTRY_CUSTOM_URI);
mChromeNTP.setVisibility(value.mIsNTPOptionVisible ? View.VISIBLE : View.GONE);
mCustomUri.setVisibility(value.mIsCustomizedOptionVisible ? View.VISIBLE : View.GONE);
}
// Lastly, store the value as current value the preference is displaying.
// Doing it last to keep the previous value for necessary comparing in #onTextChanged.
mPreferenceValues = value;
}
@VisibleForTesting
RadioButtonWithEditText getCustomUriRadioButton() {
return mCustomUri;
}
@VisibleForTesting
RadioButtonWithDescription getChromeNTPRadioButton() {
return mChromeNTP;
}
@VisibleForTesting
TextView getTitleTextView() {
return mTitle;
}
}
...@@ -18,6 +18,7 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager; ...@@ -18,6 +18,7 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
*/ */
public class HomepageTestRule implements TestRule { public class HomepageTestRule implements TestRule {
private boolean mIsHomepageEnabled; private boolean mIsHomepageEnabled;
private boolean mIsUsingChromeNTP;
private boolean mIsUsingDefaultHomepage; private boolean mIsUsingDefaultHomepage;
private String mCustomizedHomepage; private String mCustomizedHomepage;
...@@ -44,6 +45,8 @@ public class HomepageTestRule implements TestRule { ...@@ -44,6 +45,8 @@ public class HomepageTestRule implements TestRule {
private void copyInitialValueBeforeTest() { private void copyInitialValueBeforeTest() {
mIsHomepageEnabled = mManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true); mIsHomepageEnabled = mManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true);
mIsUsingChromeNTP =
mManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, false);
mIsUsingDefaultHomepage = mIsUsingDefaultHomepage =
mManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, true); mManager.readBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, true);
mCustomizedHomepage = mManager.readString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, ""); mCustomizedHomepage = mManager.readString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, "");
...@@ -53,6 +56,7 @@ public class HomepageTestRule implements TestRule { ...@@ -53,6 +56,7 @@ public class HomepageTestRule implements TestRule {
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, mIsHomepageEnabled); mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, mIsHomepageEnabled);
mManager.writeBoolean( mManager.writeBoolean(
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, mIsUsingDefaultHomepage); ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, mIsUsingDefaultHomepage);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, mIsUsingChromeNTP);
mManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, mCustomizedHomepage); mManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, mCustomizedHomepage);
} }
...@@ -72,10 +76,26 @@ public class HomepageTestRule implements TestRule { ...@@ -72,10 +76,26 @@ public class HomepageTestRule implements TestRule {
* *
* HOMEPAGE_ENABLED -> true; * HOMEPAGE_ENABLED -> true;
* HOMEPAGE_USE_DEFAULT_URI -> true; * HOMEPAGE_USE_DEFAULT_URI -> true;
* HOMEPAGE_USE_CHROME_NTP -> false;
*/ */
public void useDefaultHomepageForTest() { public void useDefaultHomepageForTest() {
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true); mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, true); mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, true);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, false);
}
/**
* Set up shared preferences to use Chrome NTP as homepage. This is to select chrome NTP in the
* home settings page, rather than setting the address of Chrome NTP as customized homepage.
*
* HOMEPAGE_ENABLED -> true;
* HOMEPAGE_USE_DEFAULT_URI -> false;
* HOMEPAGE_USE_CHROME_NTP -> true;
*/
public void useChromeNTPForTest() {
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, false);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, true);
} }
/** /**
...@@ -83,6 +103,7 @@ public class HomepageTestRule implements TestRule { ...@@ -83,6 +103,7 @@ public class HomepageTestRule implements TestRule {
* *
* HOMEPAGE_ENABLED -> true; * HOMEPAGE_ENABLED -> true;
* HOMEPAGE_USE_DEFAULT_URI -> false; * HOMEPAGE_USE_DEFAULT_URI -> false;
* HOMEPAGE_USE_CHROME_NTP -> false;
* HOMEPAGE_CUSTOM_URI -> <b>homepage</b> * HOMEPAGE_CUSTOM_URI -> <b>homepage</b>
* *
* @param homepage The customized homepage that will be used in this testcase. * @param homepage The customized homepage that will be used in this testcase.
...@@ -90,6 +111,7 @@ public class HomepageTestRule implements TestRule { ...@@ -90,6 +111,7 @@ public class HomepageTestRule implements TestRule {
public void useCustomizedHomepageForTest(String homepage) { public void useCustomizedHomepageForTest(String homepage) {
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true); mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_ENABLED, true);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, false); mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, false);
mManager.writeBoolean(ChromePreferenceKeys.HOMEPAGE_USE_CHROME_NTP, false);
mManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, homepage); mManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, homepage);
} }
} }
...@@ -23,6 +23,7 @@ import org.chromium.base.metrics.RecordHistogram; ...@@ -23,6 +23,7 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.RetryOnFailure; import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.chrome.browser.homepage.HomepageTestRule;
import org.chromium.chrome.browser.util.UrlConstants; import org.chromium.chrome.browser.util.UrlConstants;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.partnercustomizations.TestPartnerBrowserCustomizationsDelayedProvider; import org.chromium.chrome.test.partnercustomizations.TestPartnerBrowserCustomizationsDelayedProvider;
...@@ -42,6 +43,9 @@ public class PartnerHomepageUnitTest { ...@@ -42,6 +43,9 @@ public class PartnerHomepageUnitTest {
public BasePartnerBrowserCustomizationUnitTestRule mTestRule = public BasePartnerBrowserCustomizationUnitTestRule mTestRule =
new BasePartnerBrowserCustomizationUnitTestRule(); new BasePartnerBrowserCustomizationUnitTestRule();
@Rule
public HomepageTestRule mHomepageTestRule = new HomepageTestRule();
public static final String TAG = "PartnerHomepageUnitTest"; public static final String TAG = "PartnerHomepageUnitTest";
private static final String TEST_CUSTOM_HOMEPAGE_URI = "http://chrome.com"; private static final String TEST_CUSTOM_HOMEPAGE_URI = "http://chrome.com";
...@@ -82,8 +86,7 @@ public class PartnerHomepageUnitTest { ...@@ -82,8 +86,7 @@ public class PartnerHomepageUnitTest {
@DisabledTest(message = "crbug.com/836700") @DisabledTest(message = "crbug.com/836700")
public void testProviderNotFromSystemPackage() throws InterruptedException { public void testProviderNotFromSystemPackage() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(true); mHomepageManager.setPrefHomepageEnabled(true);
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
// Note that unlike other tests in this file, we test if Chrome ignores a customizations // Note that unlike other tests in this file, we test if Chrome ignores a customizations
// provider that is not from a system package. // provider that is not from a system package.
...@@ -115,8 +118,7 @@ public class PartnerHomepageUnitTest { ...@@ -115,8 +118,7 @@ public class PartnerHomepageUnitTest {
@DisabledTest(message = "crbug.com/836110") @DisabledTest(message = "crbug.com/836110")
public void testNoProvider() throws InterruptedException { public void testNoProvider() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(true); mHomepageManager.setPrefHomepageEnabled(true);
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
PartnerBrowserCustomizations.setProviderAuthorityForTests( PartnerBrowserCustomizations.setProviderAuthorityForTests(
PARTNER_BROWSER_CUSTOMIZATIONS_NO_PROVIDER); PARTNER_BROWSER_CUSTOMIZATIONS_NO_PROVIDER);
...@@ -144,8 +146,7 @@ public class PartnerHomepageUnitTest { ...@@ -144,8 +146,7 @@ public class PartnerHomepageUnitTest {
@RetryOnFailure @RetryOnFailure
public void testHomepageDisabled() throws InterruptedException { public void testHomepageDisabled() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(false); mHomepageManager.setPrefHomepageEnabled(false);
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
PartnerBrowserCustomizations.setProviderAuthorityForTests( PartnerBrowserCustomizations.setProviderAuthorityForTests(
PARTNER_BROWSER_CUSTOMIZATIONS_PROVIDER); PARTNER_BROWSER_CUSTOMIZATIONS_PROVIDER);
...@@ -176,8 +177,7 @@ public class PartnerHomepageUnitTest { ...@@ -176,8 +177,7 @@ public class PartnerHomepageUnitTest {
@RetryOnFailure @RetryOnFailure
public void testCustomHomepage() throws InterruptedException { public void testCustomHomepage() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(true); mHomepageManager.setPrefHomepageEnabled(true);
mHomepageManager.setPrefHomepageUseDefaultUri(false); mHomepageManager.setHomepagePreferences(false, false, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
PartnerBrowserCustomizations.setProviderAuthorityForTests( PartnerBrowserCustomizations.setProviderAuthorityForTests(
PARTNER_BROWSER_CUSTOMIZATIONS_PROVIDER); PARTNER_BROWSER_CUSTOMIZATIONS_PROVIDER);
...@@ -208,8 +208,7 @@ public class PartnerHomepageUnitTest { ...@@ -208,8 +208,7 @@ public class PartnerHomepageUnitTest {
@Feature({"Homepage"}) @Feature({"Homepage"})
public void testHomepageProviderTimeout() throws InterruptedException { public void testHomepageProviderTimeout() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(true); mHomepageManager.setPrefHomepageEnabled(true);
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
PartnerBrowserCustomizations.setProviderAuthorityForTests( PartnerBrowserCustomizations.setProviderAuthorityForTests(
PARTNER_BROWSER_CUSTOMIZATIONS_DELAYED_PROVIDER); PARTNER_BROWSER_CUSTOMIZATIONS_DELAYED_PROVIDER);
...@@ -248,8 +247,7 @@ public class PartnerHomepageUnitTest { ...@@ -248,8 +247,7 @@ public class PartnerHomepageUnitTest {
@DisabledTest(message = "crbug.com/837130") @DisabledTest(message = "crbug.com/837130")
public void testHomepageProviderDelayed() throws InterruptedException { public void testHomepageProviderDelayed() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(true); mHomepageManager.setPrefHomepageEnabled(true);
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
PartnerBrowserCustomizations.setProviderAuthorityForTests( PartnerBrowserCustomizations.setProviderAuthorityForTests(
PARTNER_BROWSER_CUSTOMIZATIONS_DELAYED_PROVIDER); PARTNER_BROWSER_CUSTOMIZATIONS_DELAYED_PROVIDER);
...@@ -291,8 +289,7 @@ public class PartnerHomepageUnitTest { ...@@ -291,8 +289,7 @@ public class PartnerHomepageUnitTest {
@RetryOnFailure @RetryOnFailure
public void testReadHomepageProvider() throws InterruptedException { public void testReadHomepageProvider() throws InterruptedException {
mHomepageManager.setPrefHomepageEnabled(true); mHomepageManager.setPrefHomepageEnabled(true);
mHomepageManager.setPrefHomepageUseDefaultUri(true); mHomepageManager.setHomepagePreferences(false, true, TEST_CUSTOM_HOMEPAGE_URI);
mHomepageManager.setPrefHomepageCustomUri(TEST_CUSTOM_HOMEPAGE_URI);
PartnerBrowserCustomizations.setProviderAuthorityForTests( PartnerBrowserCustomizations.setProviderAuthorityForTests(
PARTNER_BROWSER_CUSTOMIZATIONS_PROVIDER); PARTNER_BROWSER_CUSTOMIZATIONS_PROVIDER);
......
...@@ -401,6 +401,7 @@ public final class ChromePreferenceKeys { ...@@ -401,6 +401,7 @@ public final class ChromePreferenceKeys {
/** Keys used to save settings related to homepage. */ /** Keys used to save settings related to homepage. */
public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri"; public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri";
public static final String HOMEPAGE_ENABLED = "homepage"; public static final String HOMEPAGE_ENABLED = "homepage";
public static final String HOMEPAGE_USE_CHROME_NTP = "Chrome.Homepage.UseNTP";
public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled"; public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled";
/** /**
...@@ -682,7 +683,8 @@ public final class ChromePreferenceKeys { ...@@ -682,7 +683,8 @@ public final class ChromePreferenceKeys {
FLAGS_CACHED_DUET_TABSTRIP_INTEGRATION_ANDROID_ENABLED, FLAGS_CACHED_DUET_TABSTRIP_INTEGRATION_ANDROID_ENABLED,
FLAGS_CACHED_PAINT_PREVIEW_TEST_ENABLED_KEY, FLAGS_CACHED_PAINT_PREVIEW_TEST_ENABLED_KEY,
FLAGS_FIELD_TRIAL_PARAM_CACHED.pattern(), FLAGS_FIELD_TRIAL_PARAM_CACHED.pattern(),
HOMEPAGE_LOCATION_POLICY HOMEPAGE_LOCATION_POLICY,
HOMEPAGE_USE_CHROME_NTP
); );
// clang-format on // clang-format on
} }
......
...@@ -600,6 +600,9 @@ CHAR-LIMIT guidelines: ...@@ -600,6 +600,9 @@ CHAR-LIMIT guidelines:
</message> </message>
<!-- Homepage preferences --> <!-- Homepage preferences -->
<message name="IDS_OPTIONS_HOMEPAGE_EDIT_HINT" desc="Hint for the text edit on Homepage Preference setting, guiding user to enter their customized homepage setting">
Enter custom web address
</message>
<message name="IDS_OPTIONS_HOMEPAGE_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that opens when they tap on the home page button in the omnibox."> <message name="IDS_OPTIONS_HOMEPAGE_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that opens when they tap on the home page button in the omnibox.">
Edit home page Edit home page
</message> </message>
...@@ -609,6 +612,9 @@ CHAR-LIMIT guidelines: ...@@ -609,6 +612,9 @@ CHAR-LIMIT guidelines:
<message name="IDS_HOMEBUTTON_CONTEXT_MENU_SETTINGS" desc="The label displayed on home button context menu item, which navigate the user to the homepage settings."> <message name="IDS_HOMEBUTTON_CONTEXT_MENU_SETTINGS" desc="The label displayed on home button context menu item, which navigate the user to the homepage settings.">
Edit homepage Edit homepage
</message> </message>
<message name="IDS_OPTIONS_HOMEPAGE_CHROME_HOMEPAGE" desc="The option that allows user to set Chrome's new tab page as the homepage." >
Chrome’s homepage
</message>
<!-- Notifications preferences --> <!-- Notifications preferences -->
<message name="IDS_PREFS_NOTIFICATIONS" desc="Title for Notification preferences."> <message name="IDS_PREFS_NOTIFICATIONS" desc="Title for Notification preferences.">
......
29f7414c2b689b7204157ae967c88b96d995fc1c
\ No newline at end of file
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