diff --git a/app/src/common/shared/com/igalia/wolvic/ui/viewmodel/WindowViewModel.java b/app/src/common/shared/com/igalia/wolvic/ui/viewmodel/WindowViewModel.java index 7c7c74319da..b19f6e18eb9 100644 --- a/app/src/common/shared/com/igalia/wolvic/ui/viewmodel/WindowViewModel.java +++ b/app/src/common/shared/com/igalia/wolvic/ui/viewmodel/WindowViewModel.java @@ -37,6 +37,7 @@ public class WindowViewModel extends AndroidViewModel { private int mURLWebsiteColor; private MutableLiveData url; + private MutableLiveData urlForwardFromNewTab; private MutableLiveData hint; private MutableLiveData isWindowVisible; private MutableLiveData placement; @@ -55,6 +56,7 @@ public class WindowViewModel extends AndroidViewModel { private MutableLiveData currentContentType; public MutableLiveData lastContentType; private MediatorLiveData isNativeContentVisible; + private MediatorLiveData isInNewTabPage; private MutableLiveData backToNewTabEnabled; private MutableLiveData isLoading; private MutableLiveData isMicrophoneEnabled; @@ -95,6 +97,7 @@ public WindowViewModel(Application application) { mURLWebsiteColor = typedValue.data; url = new MutableLiveData<>(new SpannableString("")); + urlForwardFromNewTab = new MutableLiveData<>(new SpannableString("")); hint = new MutableLiveData<>(""); isWindowVisible = new MutableLiveData<>(new ObservableBoolean(true)); placement = new MutableLiveData<>(Windows.WindowPlacement.FRONT); @@ -138,11 +141,19 @@ public WindowViewModel(Application application) { currentContentType = new MutableLiveData<>(Windows.ContentType.WEB_CONTENT); lastContentType = new MutableLiveData<>(Windows.ContentType.WEB_CONTENT); + isNativeContentVisible = new MediatorLiveData<>(); isNativeContentVisible.addSource(currentContentType, contentType -> isNativeContentVisible.setValue(new ObservableBoolean(contentType != Windows.ContentType.WEB_CONTENT)) ); isNativeContentVisible.setValue(new ObservableBoolean(currentContentType.getValue() != Windows.ContentType.WEB_CONTENT)); + + isInNewTabPage = new MediatorLiveData<>(); + isInNewTabPage.addSource(currentContentType, contentType -> + isInNewTabPage.setValue(new ObservableBoolean(contentType == Windows.ContentType.NEW_TAB)) + ); + isInNewTabPage.setValue(new ObservableBoolean(currentContentType.getValue() == Windows.ContentType.NEW_TAB)); + backToNewTabEnabled = new MutableLiveData<>(new ObservableBoolean(false)); isLoading = new MutableLiveData<>(new ObservableBoolean(false)); @@ -345,6 +356,7 @@ public void onChanged(ObservableBoolean o) { public void refresh() { url.postValue(url.getValue()); + urlForwardFromNewTab.postValue(urlForwardFromNewTab.getValue()); hint.postValue(getHintValue()); isWindowVisible.postValue(isWindowVisible.getValue()); placement.postValue(placement.getValue()); @@ -384,10 +396,18 @@ public MutableLiveData getUrl() { return url; } + public MutableLiveData getUrlForwardFromNewTab() { + if (urlForwardFromNewTab == null) { + urlForwardFromNewTab = new MutableLiveData<>(new SpannableString("")); + } + return urlForwardFromNewTab; + } + public void setUrl(@Nullable String url) { if (url == null) { return; } + setUrl(new SpannableString(url)); } @@ -431,9 +451,15 @@ private void setUrl(@Nullable Spannable url) { spannable.setSpan(color1, 0, index + 3, 0); spannable.setSpan(color2, index + 3, aURL.length(), 0); this.url.postValue(spannable); + if (currentContentType.getValue() == Windows.ContentType.WEB_CONTENT && lastContentType.getValue() == Windows.ContentType.NEW_TAB) { + urlForwardFromNewTab.postValue(spannable); + } } else { this.url.postValue(url); + if (currentContentType.getValue() == Windows.ContentType.WEB_CONTENT && lastContentType.getValue() == Windows.ContentType.NEW_TAB) { + urlForwardFromNewTab.postValue(url); + } } } } @@ -601,6 +627,10 @@ public MutableLiveData getIsNativeContentVisible() { return isNativeContentVisible; } + public MutableLiveData getIsInNewTabPage() { + return isInNewTabPage; + } + public void enableBackToNewTab(boolean backToNewTabEnabled) { this.backToNewTabEnabled.postValue(new ObservableBoolean(backToNewTabEnabled)); } diff --git a/app/src/common/shared/com/igalia/wolvic/ui/widgets/NavigationBarWidget.java b/app/src/common/shared/com/igalia/wolvic/ui/widgets/NavigationBarWidget.java index 45572661f12..528220491de 100644 --- a/app/src/common/shared/com/igalia/wolvic/ui/widgets/NavigationBarWidget.java +++ b/app/src/common/shared/com/igalia/wolvic/ui/widgets/NavigationBarWidget.java @@ -256,10 +256,11 @@ private void updateUI() { mBinding.navigationBarNavigation.forwardButton.setOnClickListener(v -> { v.requestFocusFromTouch(); if (mViewModel.getCanGoForwardFromNewTab().getValue().get()) { - getSession().loadUri(mAttachedWindow.uriForwardFromNewTab); + getSession().loadUri(mViewModel.getUrlForwardFromNewTab().getValue().toString()); mViewModel.setCanGoForwardFromNewTab(false); + } else { + getSession().goForward(); } - getSession().goForward(); if (mAudio != null) { mAudio.playSound(AudioEngine.Sound.CLICK); } @@ -1026,7 +1027,7 @@ public void onLocationChange(@NonNull WSession session, @Nullable String url) { updateTrackingProtection(); } - mBinding.navigationBarNavigation.reloadButton.setEnabled(!UrlUtils.isPrivateAboutPage(getContext(), url)); + mBinding.navigationBarNavigation.reloadButton.setEnabled(!mViewModel.getIsInNewTabPage().getValue().get() && !UrlUtils.isPrivateAboutPage(getContext(), url)); } // Content delegate diff --git a/app/src/common/shared/com/igalia/wolvic/ui/widgets/WindowWidget.java b/app/src/common/shared/com/igalia/wolvic/ui/widgets/WindowWidget.java index 88022f7804d..47378645638 100644 --- a/app/src/common/shared/com/igalia/wolvic/ui/widgets/WindowWidget.java +++ b/app/src/common/shared/com/igalia/wolvic/ui/widgets/WindowWidget.java @@ -155,7 +155,6 @@ public class WindowWidget extends UIWidget implements SessionChangeListener, private SharedPreferences mPrefs; private DownloadsManager mDownloadsManager; private float mBrowserDensity; - public String uriForwardFromNewTab; public interface WindowListener { default void onFocusRequest(@NonNull WindowWidget aWindow) {} @@ -2080,9 +2079,6 @@ WResult onLoadRequest(WSession aSession, @NonNull LoadRequest aReq hideNewTab(); mViewModel.setCurrentContentType(Windows.ContentType.WEB_CONTENT); mViewModel.setUrl(uri.toString()); - if (mViewModel.lastContentType.getValue() == Windows.ContentType.NEW_TAB) { - uriForwardFromNewTab = uri.toString(); - } } if ("file".equalsIgnoreCase(uri.getScheme())) { diff --git a/app/src/main/res/layout/navigation_bar_navigation.xml b/app/src/main/res/layout/navigation_bar_navigation.xml index e154f459f1f..5577ce102f4 100644 --- a/app/src/main/res/layout/navigation_bar_navigation.xml +++ b/app/src/main/res/layout/navigation_bar_navigation.xml @@ -50,6 +50,7 @@ style="?attr/navigationBarButtonStyle" android:src="@{viewmodel.isLoading ? @drawable/ic_icon_exit : @drawable/ic_icon_reload}" android:tooltipText="@{viewmodel.isLoading ? @string/stop_tooltip : @string/refresh_tooltip}" + android:enabled="@{!viewmodel.isInNewTabPage}" app:privateMode="@{viewmodel.isPrivateSession}" />