diff --git a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt
index bc2b42d88..3e1dc4eb4 100644
--- a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt
+++ b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt
@@ -79,6 +79,8 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
hideKeyboard()
onCommit(binding.toolbarEditText.text.toString())
+ binding.toolbarEditText.clearFocus()
+ selectedTab().webview.requestFocus()
true
} else {
false
@@ -163,6 +165,18 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) {
}
fullscreenView = null
}
+
+ override fun onUriChanged(view: WPEView, uri: String) {
+ super.onUriChanged(view, uri)
+ binding.toolbarEditText.setText(uri)
+ }
+ }
+ }
+
+ selectedTab.webview.wpeViewClient = object : WPEViewClient() {
+ override fun onPageStarted(view: WPEView, url: String) {
+ super.onPageStarted(view, url)
+ binding.toolbarEditText.setText(url)
}
}
}
@@ -204,7 +218,7 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) {
private fun onCommit(text: String) {
val url: String = if ((text.contains(".") || text.contains(":")) && !text.contains(" ")) {
- Utils.normalizeAddress(text)
+ normalizeAddress(text)
} else {
SEARCH_URI_BASE + text
}
@@ -217,7 +231,7 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) {
manager.hideSoftInputFromWindow(requireView().windowToken, 0)
}
- private fun selectedTab() : Tab {
+ internal fun selectedTab() : Tab {
// For now assume we always have at least one tab
val selectedTabId = browserViewModel.browserState.value.selectedTabId
return browserViewModel.findTab(selectedTabId!!)
diff --git a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt
index d8298b49e..0edab2ab7 100644
--- a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt
+++ b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt
@@ -53,4 +53,17 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) {
super.onConfigurationChanged(newConfig)
Log.d(TAG, "onConfigurationChanged")
}
+
+ @Deprecated("Deprecated in superclass")
+ override fun onBackPressed() {
+ val currentFragment = navHost.childFragmentManager.fragments.firstOrNull()
+ if (currentFragment is BrowserFragment) {
+ val webView = currentFragment.selectedTab().webview
+ if (webView.canGoBack()) {
+ webView.goBack()
+ return
+ }
+ }
+ super.onBackPressed()
+ }
}
diff --git a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt
index 60ccb0535..637a0ec8d 100644
--- a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt
+++ b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt
@@ -34,19 +34,14 @@ fun View.requestApplyStandardInsets() {
requestApplyInsetsWhenAttached()
}
-object Utils {
- private fun addressHasWebScheme(address: String) : Boolean {
+// If a string may be parsed as an URI that has an scheme, use it as-is.
+// Otherwise fall-back to adding http://.
+fun normalizeAddress(address: String): String {
+ val hasScheme = try {
val uri = URI(address)
- return uri.scheme?.let {
- it == "http"
- } ?: false
- }
-
- fun normalizeAddress(address: String) : String {
- return if (!addressHasWebScheme(address)) {
- return "http://$address"
- } else {
- address
- }
+ uri.scheme != null
+ } catch (_: Exception) {
+ false
}
+ return if (hasScheme) address else "http://$address"
}
diff --git a/tools/minibrowser/src/main/res/drawable/address_view_background.xml b/tools/minibrowser/src/main/res/drawable/address_view_background.xml
index 8f878dad5..4efab6270 100644
--- a/tools/minibrowser/src/main/res/drawable/address_view_background.xml
+++ b/tools/minibrowser/src/main/res/drawable/address_view_background.xml
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml b/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml
index 39fbab5f7..b93355a59 100644
--- a/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml
+++ b/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml
@@ -1,4 +1,4 @@
-
diff --git a/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml b/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml
index c624d1973..0bd63eb72 100644
--- a/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml
+++ b/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml
@@ -1,4 +1,4 @@
-
diff --git a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml
index 509d0e8a1..cec5fa096 100644
--- a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml
+++ b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml
@@ -1,5 +1,5 @@
diff --git a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml
index bdd7da8c2..c5bec9a07 100644
--- a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml
+++ b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml
@@ -1,5 +1,5 @@
diff --git a/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml b/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml
index f4359556f..af083ca36 100644
--- a/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml
+++ b/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml
@@ -1,4 +1,4 @@
-
diff --git a/tools/minibrowser/src/main/res/layout/fragment_browser.xml b/tools/minibrowser/src/main/res/layout/fragment_browser.xml
index d0d2151de..00473d51c 100644
--- a/tools/minibrowser/src/main/res/layout/fragment_browser.xml
+++ b/tools/minibrowser/src/main/res/layout/fragment_browser.xml
@@ -12,13 +12,13 @@
android:id="@+id/tab_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_above="@id/page_progress" />
+ android:layout_above="@id/toolbar" />
@@ -27,29 +27,30 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
- android:layout_alignParentBottom="true"
- android:background="?android:statusBarColor">
+ android:layout_alignParentBottom="true">
+ android:focusable="true">
+
diff --git a/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java b/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java
index 14ff6830b..ec6fa0a68 100644
--- a/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java
+++ b/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java
@@ -483,6 +483,8 @@ private void onEstimatedLoadProgress(double progress) {
@Keep
private void onUriChanged(@NonNull String uri) {
this.uri = uri;
+ if (wpeChromeClient != null)
+ wpeChromeClient.onUriChanged(wpeView, uri);
}
@Keep
diff --git a/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java b/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java
index 31fcbf5b4..c696e04dd 100644
--- a/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java
+++ b/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java
@@ -53,6 +53,13 @@ default void onProgressChanged(@NonNull WPEView view, int progress) {}
*/
default void onReceivedTitle(@NonNull WPEView view, @NonNull String title) {}
+ /**
+ * Notify the host application that the URI has changed.
+ * @param view the WPEView that initiated the callback.
+ * @param uri the new URI.
+ */
+ default void onUriChanged(@NonNull WPEView view, @NonNull String uri) {}
+
/**
* A callback interface used by the host application to notify
* the current page that its custom view has been dismissed.