Skip to content

Commit 200f326

Browse files
authored
Merge pull request #5 from t-34400/feature/add_address_bar_support
Feature/add address bar support
2 parents 40cfdc8 + ef73938 commit 200f326

6 files changed

Lines changed: 42 additions & 6 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
*.meta
2-
/SamplePrefabs/
2+
*.unitypackage
3+
/Sample/
34
/Textures/
45

56
# This .gitignore file should be placed at the root of your Unity project directory

Plugins/Android/WebViewManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public class WebViewManager
3535
public interface WebViewBitmapListener {
3636
void onWebViewUpdated(byte[] bytes);
3737
}
38+
public interface WebViewUrlChangeListener {
39+
void onUrlChanged(String url);
40+
}
3841

3942
public final int webViewWidth;
4043
public final int webViewHeight;
@@ -54,7 +57,9 @@ public interface WebViewBitmapListener {
5457
private long downTime = 0;
5558

5659
public WebViewManager(Activity activity, int _webViewWidth, int _webViewHeight, int _outputWidth, int _outputHeight, long intervalMSec,
57-
WebViewBitmapListener listener, WebAppInterface.WebViewDataListener webViewDataListener,
60+
WebViewBitmapListener bitmapListener,
61+
WebViewUrlChangeListener urlListener,
62+
WebAppInterface.WebViewDataListener webViewDataListener,
5863
ViewGroup rootView, View defaultFocusView)
5964
{
6065
webViewWidth = _webViewWidth;
@@ -87,7 +92,7 @@ public WebViewManager(Activity activity, int _webViewWidth, int _webViewHeight,
8792
if(bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream))
8893
{
8994
byte[] bitmapArray = stream.toByteArray();
90-
listener.onWebViewUpdated(bitmapArray);
95+
bitmapListener.onWebViewUpdated(bitmapArray);
9196
}
9297
}, mainHandler);
9398

@@ -131,6 +136,7 @@ public void onLoadResource (WebView view, String url){
131136
public void onPageFinished(WebView view, String url) {
132137
webAppInterface.Reset();
133138
webView.evaluateJavascript(WebViewJavaScriptConstants.SCRIPT__ADD_INPUT_FOCUS_LISTENER, null);
139+
urlListener.onUrlChanged(url);
134140
}
135141
@Override
136142
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {

Plugins/Android/WebViewUnityPlayerActivity.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public WebViewManager generateWebViewTextureProvider(String gameObjectName, int
127127
WebViewManager webViewManager = new WebViewManager(
128128
this, webViewWidth, webViewHeight, outputWidth, outputHeight, intervalMSec,
129129
(bitmapBytes) -> sendUpdateCallbackMessage(gameObjectName, bitmapBytes),
130+
(url) -> sendUrlChangedCallbackMessage(gameObjectName, url),
130131
(dataType, data) -> sendJsonData(gameObjectName, dataType, data),
131132
(ViewGroup)getWindow().getDecorView().getRootView(), mUnityPlayer);
132133
webViewManagers.put(gameObjectName, webViewManager);
@@ -156,6 +157,10 @@ private void sendUpdateCallbackMessage(String gameObjectName, byte[] bitmapBytes
156157
UnityPlayer.UnitySendMessage(gameObjectName, "ReceiveUpdateCallback", "");
157158
}
158159

160+
private void sendUrlChangedCallbackMessage(String gameObjectName, String url) {
161+
UnityPlayer.UnitySendMessage(gameObjectName, "ReceiveNewUrl", url);
162+
}
163+
159164
private void sendJsonData(String gameObjectName, String dataType, String data) {
160165
try {
161166
JSONObject jsonObject = new JSONObject();

Scripts/WebViewBitmapReceiver.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class WebViewBitmapReceiver : WebViewReceivedDataManager
2525
[SerializeField] private Vector2Int webViewSize = new Vector2Int(600, 480);
2626
[SerializeField] private Vector2Int textureSize = new Vector2Int(300, 240);
2727
[SerializeField] private float intervalSec = 0.05f;
28+
[SerializeField] private UnityEvent<string> urlChanged = default!;
2829
[SerializeField] private UnityEvent<string, string> dataReceived = default!;
2930

3031
private IWebViewController? webViewController;
@@ -38,6 +39,9 @@ class WebViewBitmapReceiver : WebViewReceivedDataManager
3839
private object bitmapByteArrayLock = new object();
3940
private byte[]? bitmapByteArray;
4041

42+
private object newUrlLock = new object();
43+
private string? newUrl = null;
44+
4145
private object receivedDataLock = new object();
4246
private List<ReceivedData> receivedDataList = new List<ReceivedData>();
4347

@@ -95,16 +99,24 @@ private void OnApplicationPause(bool paused)
9599

96100
private void Update()
97101
{
98-
lock(receivedDataLock)
102+
lock (receivedDataLock)
99103
{
100-
foreach(var receivedData in receivedDataList)
104+
foreach (var receivedData in receivedDataList)
101105
{
102106
Debug.Log($"Data received: {receivedData.type} {receivedData.data}");
103107
InvokeDataReceivedEvent(receivedData);
104108
dataReceived?.Invoke(receivedData.type, receivedData.data);
105109
}
106110
receivedDataList.Clear();
107111
}
112+
lock (newUrlLock)
113+
{
114+
if (newUrl != null)
115+
{
116+
urlChanged?.Invoke(newUrl);
117+
newUrl = null;
118+
}
119+
}
108120

109121
UpdateTextureIfNeeded();
110122
}
@@ -150,6 +162,14 @@ public void ReceiveUpdateCallback()
150162
IsUpdated = true;
151163
}
152164

165+
public void ReceiveNewUrl(string url)
166+
{
167+
lock (newUrlLock)
168+
{
169+
newUrl = url;
170+
}
171+
}
172+
153173
public void ReceiveJsonData(string json)
154174
{
155175
var data = JsonUtility.FromJson<ReceivedData>(json);

Scripts/WebViewControllerClient.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace WebView
88
public class WebViewControllerClient : MonoBehaviour
99
{
1010
[SerializeField] private WebViewBitmapReceiver webViewBitmapReceiver = default!;
11+
[SerializeField] private bool loadOnFirstFrame = true;
1112
[SerializeField] private string loadUrl = "https://www.google.com/";
1213

1314
private IWebViewController? webViewController;
@@ -31,7 +32,10 @@ private IEnumerator StartUpdateCoroutine()
3132
yield return null;
3233
webViewController = webViewBitmapReceiver.WebViewController;
3334
webViewController?.StartUpdate();
34-
webViewController?.LoadUrl(loadUrl);
35+
if (loadOnFirstFrame)
36+
{
37+
webViewController?.LoadUrl(loadUrl);
38+
}
3539
}
3640
}
3741
}

webview.unitypackage

-855 KB
Binary file not shown.

0 commit comments

Comments
 (0)