From 8f112812c8cd643524da6cb1e2508f85c3728355 Mon Sep 17 00:00:00 2001 From: Felipe Erias Date: Fri, 25 Apr 2025 19:15:55 +0900 Subject: [PATCH 1/2] Clean up some issues when changing the homepage in the Settings Clean up the code and fix some edge cases where the homepage was being incorreclty updated. Use the current homepage value for the URL edit field, because otherwise it was far too confusing. Do not assume that our home webpage will be the default (for example, the default might be to show the native New Tab UI). --- .../widgets/settings/DisplayOptionsView.java | 76 +++++++++++-------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/app/src/common/shared/com/igalia/wolvic/ui/widgets/settings/DisplayOptionsView.java b/app/src/common/shared/com/igalia/wolvic/ui/widgets/settings/DisplayOptionsView.java index e11a4e2c1f..682fb920d2 100644 --- a/app/src/common/shared/com/igalia/wolvic/ui/widgets/settings/DisplayOptionsView.java +++ b/app/src/common/shared/com/igalia/wolvic/ui/widgets/settings/DisplayOptionsView.java @@ -10,6 +10,7 @@ import android.view.LayoutInflater; import android.view.View; +import androidx.annotation.IntDef; import androidx.databinding.DataBindingUtil; import com.igalia.wolvic.R; @@ -21,16 +22,23 @@ import com.igalia.wolvic.ui.widgets.WidgetPlacement; import com.igalia.wolvic.utils.UrlUtils; -import java.util.Objects; - import java.util.ArrayList; import java.util.List; +import java.util.Objects; class DisplayOptionsView extends SettingsView { private OptionsDisplayBinding mBinding; private String mDefaultHomepageUrl; + @IntDef(value = {CHOICE_NEW_TAB, CHOICE_HOMEPAGE_URL, CHOICE_CUSTOM}) + public @interface HomepageChoiceValues { + } + + public static final int CHOICE_NEW_TAB = 0; + public static final int CHOICE_HOMEPAGE_URL = 1; + public static final int CHOICE_CUSTOM = 2; + public DisplayOptionsView(Context aContext, WidgetManagerDelegate aWidgetManager) { super(aContext, aWidgetManager); initialize(aContext); @@ -83,9 +91,10 @@ protected void updateUI() { SettingsStore.WindowSizePreset windowSizePreset = SettingsStore.WindowSizePreset.fromValues(windowWidth, windowHeight); setWindowsSizePreset(windowSizePreset.ordinal(), false); - int homepageId = getHomepageId(SettingsStore.getInstance(getContext()).getHomepage()); + mDefaultHomepageUrl = getContext().getString(R.string.HOMEPAGE_URL); + @HomepageChoiceValues int initialHomepageChoice = getHomepageChoice(SettingsStore.getInstance(getContext()).getHomepage()); mBinding.homepage.setOnCheckedChangeListener(mHomepageChangeListener); - setHomepage(homepageId, false); + setHomepageChoice(initialHomepageChoice, false); mBinding.autoplaySwitch.setOnCheckedChangeListener(mAutoplayListener); setAutoplay(SettingsStore.getInstance(getContext()).isAutoplayEnabled(), false); @@ -112,13 +121,12 @@ protected void updateUI() { mBinding.tabsLocationRadio.setOnCheckedChangeListener(mTabsLocationChangeListener); setTabsLocation(mBinding.tabsLocationRadio.getIdForValue(tabsLocation), false); - mDefaultHomepageUrl = getContext().getString(R.string.HOMEPAGE_URL); - - mBinding.homepageEdit.setHint1(getContext().getString(R.string.homepage_hint, getContext().getString(R.string.app_name))); - mBinding.homepageEdit.setDefaultFirstValue(mDefaultHomepageUrl); + // For clarity, we use the current homepage for the edit field. + mBinding.homepageEdit.setHint1(SettingsStore.getInstance(getContext()).getHomepage()); + mBinding.homepageEdit.setDefaultFirstValue(SettingsStore.getInstance(getContext()).getHomepage()); mBinding.homepageEdit.setFirstText(SettingsStore.getInstance(getContext()).getHomepage()); mBinding.homepageEdit.setOnSaveClickedListener(mHomepageListener); - setHomepage(SettingsStore.getInstance(getContext()).getHomepage()); + setHomepageValue(SettingsStore.getInstance(getContext()).getHomepage()); mBinding.densityEdit.setHint1(String.valueOf(SettingsStore.DISPLAY_DENSITY_DEFAULT)); mBinding.densityEdit.setDefaultFirstValue(String.valueOf(SettingsStore.DISPLAY_DENSITY_DEFAULT)); @@ -182,7 +190,7 @@ public boolean isEditing() { }; private RadioGroupSetting.OnCheckedChangeListener mHomepageChangeListener = (radioGroup, checkedId, doApply) -> { - setHomepage(checkedId, true); + setHomepageChoice(checkedId, true); }; private SwitchSetting.OnCheckedChangeListener mAutoplayListener = (compoundButton, enabled, apply) -> { @@ -211,10 +219,11 @@ public boolean isEditing() { private OnClickListener mHomepageListener = (view) -> { if (!mBinding.homepageEdit.getFirstText().isEmpty()) { - setHomepage(mBinding.homepageEdit.getFirstText()); + setHomepageValue(mBinding.homepageEdit.getFirstText()); } else { - setHomepage(mDefaultHomepageUrl); + // Reset the edit field to the current value. + setHomepageValue(SettingsStore.getInstance(getContext()).getHomepage()); } }; @@ -275,10 +284,10 @@ public boolean isEditing() { if (mBinding.windowsSize.getCheckedRadioButtonId() != SettingsStore.WINDOW_SIZE_PRESET_DEFAULT.ordinal()) { setWindowsSizePreset(SettingsStore.WINDOW_SIZE_PRESET_DEFAULT.ordinal(), true); } - - int defaultHomepageId = getHomepageId(mDefaultHomepageUrl); + + @HomepageChoiceValues int defaultHomepageId = getHomepageChoice(mDefaultHomepageUrl); if (mBinding.homepage.getCheckedRadioButtonId() != defaultHomepageId) { - setHomepage(defaultHomepageId, true); + setHomepageChoice(defaultHomepageId, true); } float prevDensity = SettingsStore.getInstance(getContext()).getDisplayDensity(); @@ -287,7 +296,7 @@ public boolean isEditing() { restart = restart | setDisplayDpi(SettingsStore.DISPLAY_DPI_DEFAULT); - setHomepage(mDefaultHomepageUrl); + setHomepageValue(mDefaultHomepageUrl); setAutoplay(SettingsStore.AUTOPLAY_ENABLED, true); setCurvedDisplay(false, true); setHeadLock(SettingsStore.HEAD_LOCK_DEFAULT, true); @@ -391,39 +400,40 @@ private void setTabsLocation(int checkedId, boolean doApply) { } } - private void setHomepage(int checkedId, boolean doApply) { + private void setHomepageChoice(@HomepageChoiceValues int checkedId, boolean doApply) { mBinding.homepage.setOnCheckedChangeListener(null); mBinding.homepage.setChecked(checkedId, doApply); mBinding.homepage.setOnCheckedChangeListener(mHomepageChangeListener); - if (checkedId == 0) { - mBinding.homepageEdit.setVisibility(View.GONE); - SettingsStore.getInstance(getContext()).setHomepage(UrlUtils.ABOUT_NEWTAB); - } else if (checkedId == 1) { - mBinding.homepageEdit.setVisibility(View.GONE); - SettingsStore.getInstance(getContext()).setHomepage(mDefaultHomepageUrl); - } else if (checkedId == 2) { - mBinding.homepageEdit.setVisibility(View.VISIBLE); + mBinding.homepageEdit.setVisibility(checkedId == CHOICE_CUSTOM ? View.VISIBLE : View.GONE); + + if (doApply && checkedId != CHOICE_CUSTOM) { + if (checkedId == CHOICE_NEW_TAB) { + setHomepageValue(UrlUtils.ABOUT_NEWTAB); + } else if (checkedId == CHOICE_HOMEPAGE_URL) { + setHomepageValue(mDefaultHomepageUrl); + } } } - private int getHomepageId(String homepage) { + private @HomepageChoiceValues int getHomepageChoice(String homepage) { if (Objects.equals(homepage, UrlUtils.ABOUT_NEWTAB)) { - return 0; + return CHOICE_NEW_TAB; } else if (Objects.equals(homepage, getContext().getString(R.string.HOMEPAGE_URL))) { - return 1; + return CHOICE_HOMEPAGE_URL; } else { - return 2; + return CHOICE_CUSTOM; } } - private void setHomepage(String newHomepage) { - if (mBinding.homepageEdit.getVisibility() != VISIBLE) { - return; - } + private void setHomepageValue(String newHomepage) { mBinding.homepageEdit.setOnSaveClickedListener(null); + mBinding.homepageEdit.setHint1(newHomepage); + mBinding.homepageEdit.setDefaultFirstValue(newHomepage); mBinding.homepageEdit.setFirstText(newHomepage); + SettingsStore.getInstance(getContext()).setHomepage(newHomepage); + mBinding.homepageEdit.setOnSaveClickedListener(mHomepageListener); } From a635a1632230386ccb2a1f03bbd0daf5a1fb2481 Mon Sep 17 00:00:00 2001 From: Felipe Erias Date: Fri, 25 Apr 2025 19:16:15 +0900 Subject: [PATCH 2/2] Use the native New Tab as the default --- app/build.gradle | 24 +++++++++++++++---- .../igalia/wolvic/browser/SettingsStore.java | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0a24247625..bc5c579cc6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -104,6 +104,15 @@ def isWebKitAvailable = { def GECKO_RELEASE_VERSION_NAME = '1.8.1' def CHROMIUM_RELEASE_VERSION_NAME = '1.2.1' +// Homepage and new tab URLs. HOMEPAGE_URL points at a website +// and NEW_TAB_DEFAULT_URL determines the default content of a new tab. +def localNewTabUrl = "about://newtab" +def homepageDefaultUrl = "https://wolvic.com/start" +def homepageChinaUrl = "https://wolvic.com/zh/start/index.html" +def homepageChinaHvgUrl = "https://wolvic.com/zh/start/hvg.html" +def homepageChinaPicoUrl = "https://wolvic.com/zh/start/pico.html" +def homepageChinaPfdmUrl = "https://wolvic.com/zh/start/pfdm.html" + android { namespace 'com.igalia.wolvic' compileSdkVersion 35 @@ -131,7 +140,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resValue 'string', 'app_name', 'Wolvic' - resValue 'string', 'HOMEPAGE_URL', "https://wolvic.com/start" + resValue 'string', 'HOMEPAGE_URL', homepageDefaultUrl + resValue 'string', 'NEW_TAB_DEFAULT_URL', localNewTabUrl externalNativeBuild { cmake { cppFlags "-std=c++14 -fexceptions -frtti -Werror" + @@ -759,16 +769,20 @@ android.applicationVariants.configureEach { variant -> // HVR packages for mainland china must only use HVR speech recognition system. if (store == "mainlandChina") { if (platform.toLowerCase().startsWith('hvr')) { - variant.resValue 'string', 'HOMEPAGE_URL', '"https://wolvic.com/zh/start/index.html"' + variant.resValue 'string', 'HOMEPAGE_URL', homepageChinaUrl + variant.resValue 'string', 'NEW_TAB_DEFAULT_URL', homepageChinaUrl variant.buildConfigField "String[]", "SPEECH_SERVICES", "{ com.igalia.wolvic.speech.SpeechServices.HUAWEI_ASR }" } else if (platform.toLowerCase().startsWith('visionglass')) { - variant.resValue 'string', 'HOMEPAGE_URL', '"https://wolvic.com/zh/start/hvg.html"' + variant.resValue 'string', 'HOMEPAGE_URL', homepageChinaHvgUrl + variant.resValue 'string', 'NEW_TAB_DEFAULT_URL', homepageChinaHvgUrl variant.buildConfigField "String[]", "SPEECH_SERVICES", "{ com.igalia.wolvic.speech.SpeechServices.HUAWEI_ASR }" } else if (platform.toLowerCase().startsWith('picoxr')) { - variant.resValue 'string', 'HOMEPAGE_URL', '"https://wolvic.com/zh/start/pico.html"' + variant.resValue 'string', 'HOMEPAGE_URL', homepageChinaPicoUrl + variant.resValue 'string', 'NEW_TAB_DEFAULT_URL', homepageChinaPicoUrl variant.buildConfigField "String[]", "SPEECH_SERVICES", "{ com.igalia.wolvic.speech.SpeechServices.MEETKAI }" } else if (platform.toLowerCase().startsWith('pfdmxr')) { - variant.resValue 'string', 'HOMEPAGE_URL', '"https://wolvic.com/zh/start/pfdm.html"' + variant.resValue 'string', 'HOMEPAGE_URL', homepageChinaPfdmUrl + variant.resValue 'string', 'NEW_TAB_DEFAULT_URL', homepageChinaPfdmUrl variant.buildConfigField "String[]", "SPEECH_SERVICES", "{ com.igalia.wolvic.speech.SpeechServices.MEETKAI }" } } diff --git a/app/src/common/shared/com/igalia/wolvic/browser/SettingsStore.java b/app/src/common/shared/com/igalia/wolvic/browser/SettingsStore.java index 0c8b933fb8..f911ee1692 100644 --- a/app/src/common/shared/com/igalia/wolvic/browser/SettingsStore.java +++ b/app/src/common/shared/com/igalia/wolvic/browser/SettingsStore.java @@ -561,7 +561,7 @@ public void setInputMode(int aTouchMode) { public String getHomepage() { return mPrefs.getString( mContext.getString(R.string.settings_key_homepage), - mContext.getString(R.string.HOMEPAGE_URL)); + mContext.getString(R.string.NEW_TAB_DEFAULT_URL)); } public void setHomepage(String aHomepage) {