feat: add popup window support and improve external URI handling with intent parsing
This commit is contained in:
+56
-6
@@ -3,6 +3,8 @@ package com.hdrdevs.turnosxpress;
|
|||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -70,11 +72,10 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
webView.setWebViewClient(new WebViewClient() {
|
webView.setWebViewClient(new WebViewClient() {
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldOverrideUrlLoading(WebView vw, WebResourceRequest request) {
|
public boolean shouldOverrideUrlLoading(WebView vw, WebResourceRequest request) {
|
||||||
if (request.getUrl().toString().contains(home.getHost())) {
|
if (shouldLoadInsideApp(request.getUrl(), home)) {
|
||||||
vw.loadUrl(request.getUrl().toString());
|
vw.loadUrl(request.getUrl().toString());
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
|
openExternalUri(request.getUrl());
|
||||||
vw.getContext().startActivity(intent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -112,6 +113,25 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
|
||||||
|
WebView popupWebView = new WebView(MainActivity.this);
|
||||||
|
popupWebView.setWebViewClient(new WebViewClient() {
|
||||||
|
@Override
|
||||||
|
public boolean shouldOverrideUrlLoading(WebView popupView, WebResourceRequest request) {
|
||||||
|
openExternalUri(request.getUrl());
|
||||||
|
popupWebView.destroy();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
|
||||||
|
transport.setWebView(popupWebView);
|
||||||
|
resultMsg.sendToTarget();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
webView.setOnKeyListener((v, keyCode, event) ->
|
webView.setOnKeyListener((v, keyCode, event) ->
|
||||||
@@ -163,10 +183,40 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private void handleURI(String uri) {
|
private void handleURI(String uri) {
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
openExternalUri(Uri.parse(uri.replaceFirst("^blob:", "")));
|
||||||
i.setData(Uri.parse(uri.replaceFirst("^blob:", "")));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
startActivity(i);
|
private boolean shouldLoadInsideApp(Uri uri, Uri home) {
|
||||||
|
return uri != null
|
||||||
|
&& uri.getHost() != null
|
||||||
|
&& uri.getHost().equals(home.getHost())
|
||||||
|
&& ("http".equals(uri.getScheme()) || "https".equals(uri.getScheme()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openExternalUri(Uri uri) {
|
||||||
|
if (uri == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Intent intent;
|
||||||
|
|
||||||
|
if ("intent".equals(uri.getScheme())) {
|
||||||
|
intent = Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME);
|
||||||
|
intent.addCategory(Intent.CATEGORY_BROWSABLE);
|
||||||
|
intent.setComponent(null);
|
||||||
|
} else {
|
||||||
|
intent = new Intent(Intent.ACTION_VIEW, uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
startActivity(intent);
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
Log.w("WEBVIEW", "No app can handle URI: " + uri, e);
|
||||||
|
Toast.makeText(this, "No hay una aplicación disponible para abrir este enlace", Toast.LENGTH_LONG).show();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("WEBVIEW", "Error opening URI: " + uri, e);
|
||||||
|
Toast.makeText(this, "No se pudo abrir el enlace", Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user