diff --git a/app/src/common/shared/org/mozilla/vrbrowser/browser/PromptDelegate.java b/app/src/common/shared/org/mozilla/vrbrowser/browser/PromptDelegate.java index 78fd34159..429123182 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/browser/PromptDelegate.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/browser/PromptDelegate.java @@ -25,6 +25,7 @@ import org.mozilla.vrbrowser.ui.widgets.prompts.ConfirmPromptWidget; import org.mozilla.vrbrowser.ui.widgets.prompts.PromptWidget; import org.mozilla.vrbrowser.ui.widgets.prompts.TextPromptWidget; +import org.mozilla.vrbrowser.utils.StringUtils; import org.mozilla.vrbrowser.utils.UrlUtils; import java.util.ArrayList; @@ -303,6 +304,41 @@ public void dismiss() { }); } + @Nullable + @Override + public GeckoResult onBeforeUnloadPrompt(@NonNull GeckoSession session, @NonNull BeforeUnloadPrompt prompt) { + final GeckoResult result = new GeckoResult<>(); + + mPrompt = new ConfirmPromptWidget(mContext); + mPrompt.getPlacement().parentHandle = mAttachedWindow.getHandle(); + mPrompt.getPlacement().parentAnchorY = 0.0f; + mPrompt.getPlacement().translationY = WidgetPlacement.unitFromMeters(mContext, R.dimen.js_prompt_y_distance); + String message = mContext.getString(R.string.before_unload_prompt_message); + if (!StringUtils.isEmpty(prompt.title)) { + message = prompt.title; + } + mPrompt.setTitle(mContext.getString(R.string.before_unload_prompt_title)); + mPrompt.setMessage(message); + ((ConfirmPromptWidget)mPrompt).setButtons(new String[] { + mContext.getResources().getText(R.string.before_unload_prompt_leave).toString(), + mContext.getResources().getText(R.string.before_unload_prompt_stay).toString() + }); + mPrompt.setPromptDelegate(new ConfirmPromptWidget.ConfirmPromptDelegate() { + @Override + public void confirm(int index) { + result.complete(prompt.confirm(index == 0 ? AllowOrDeny.ALLOW : AllowOrDeny.DENY)); + } + + @Override + public void dismiss() { + result.complete(prompt.dismiss()); + } + }); + mPrompt.show(UIWidget.REQUEST_FOCUS); + + return result; + } + // WindowWidget.WindowListener @Override diff --git a/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java b/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java index 8d9d2fd12..7c8b65213 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java @@ -1470,6 +1470,16 @@ public GeckoResult onFilePrompt(@NonNull GeckoSession aSession, return GeckoResult.fromValue(filePrompt.dismiss()); } + @Nullable + @Override + public GeckoResult onBeforeUnloadPrompt(@NonNull GeckoSession aSession, @NonNull BeforeUnloadPrompt prompt) { + if (mPromptDelegate != null) { + return mPromptDelegate.onBeforeUnloadPrompt(aSession, prompt); + } + return GeckoResult.fromValue(prompt.dismiss()); + } + + // MediaDelegate @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c22ba2994..b5b8db02d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1375,6 +1375,16 @@ '%1$s' will be replace at runtime with the app's name. --> %1$s does not have permission to run on this device and will now exit. + + + Leave page? + + This page is asking to confirm that you want to leave. Data you have entered may not be saved. + + Stay on Page + + Leave Page + Unblock Page