aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPo Lu2023-06-01 16:31:50 +0800
committerPo Lu2023-06-01 16:31:50 +0800
commit0014a10b242bac62b0ba913a5ee4da4cfbe07f41 (patch)
treea591fd5903f519f8278e991eb5ea5093d74b60f6 /java
parentaed0a11147e29fc73405f1815fef91ecf6cca7fb (diff)
downloademacs-0014a10b242bac62b0ba913a5ee4da4cfbe07f41.tar.gz
emacs-0014a10b242bac62b0ba913a5ee4da4cfbe07f41.zip
Correctly export file:// URIs on Android
* java/org/gnu/emacs/EmacsService.java (browseUrl): If uri's scheme is `file', rewrite it into a content URI.
Diffstat (limited to 'java')
-rw-r--r--java/org/gnu/emacs/EmacsService.java28
1 files changed, 26 insertions, 2 deletions
diff --git a/java/org/gnu/emacs/EmacsService.java b/java/org/gnu/emacs/EmacsService.java
index 2f35933a7d1..dde60e1c5af 100644
--- a/java/org/gnu/emacs/EmacsService.java
+++ b/java/org/gnu/emacs/EmacsService.java
@@ -62,6 +62,8 @@ import android.os.Vibrator;
62import android.os.VibratorManager; 62import android.os.VibratorManager;
63import android.os.VibrationEffect; 63import android.os.VibrationEffect;
64 64
65import android.provider.DocumentsContract;
66
65import android.util.Log; 67import android.util.Log;
66import android.util.DisplayMetrics; 68import android.util.DisplayMetrics;
67 69
@@ -546,11 +548,33 @@ public final class EmacsService extends Service
546 browseUrl (String url) 548 browseUrl (String url)
547 { 549 {
548 Intent intent; 550 Intent intent;
551 Uri uri;
549 552
550 try 553 try
551 { 554 {
552 intent = new Intent (Intent.ACTION_VIEW, Uri.parse (url)); 555 /* Parse the URI. */
553 intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); 556 uri = Uri.parse (url);
557
558 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
559 {
560 /* On Android 4.4 and later, check if URI is actually a
561 file name. If so, rewrite it into a content provider
562 URI, so that it can be accessed by other programs. */
563
564 if (uri.getScheme ().equals ("file")
565 && uri.getPath () != null)
566 uri
567 = DocumentsContract.buildDocumentUri ("org.gnu.emacs",
568 uri.getPath ());
569 }
570
571 Log.d (TAG, ("browseUri: browsing " + url
572 + " --> " + uri.getPath ()
573 + " --> " + uri));
574
575 intent = new Intent (Intent.ACTION_VIEW, uri);
576 intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK
577 | Intent.FLAG_GRANT_READ_URI_PERMISSION);
554 startActivity (intent); 578 startActivity (intent);
555 } 579 }
556 catch (Exception e) 580 catch (Exception e)