diff options
| author | Po Lu | 2023-06-01 16:31:50 +0800 |
|---|---|---|
| committer | Po Lu | 2023-06-01 16:31:50 +0800 |
| commit | 0014a10b242bac62b0ba913a5ee4da4cfbe07f41 (patch) | |
| tree | a591fd5903f519f8278e991eb5ea5093d74b60f6 /java | |
| parent | aed0a11147e29fc73405f1815fef91ecf6cca7fb (diff) | |
| download | emacs-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.java | 28 |
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; | |||
| 62 | import android.os.VibratorManager; | 62 | import android.os.VibratorManager; |
| 63 | import android.os.VibrationEffect; | 63 | import android.os.VibrationEffect; |
| 64 | 64 | ||
| 65 | import android.provider.DocumentsContract; | ||
| 66 | |||
| 65 | import android.util.Log; | 67 | import android.util.Log; |
| 66 | import android.util.DisplayMetrics; | 68 | import 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) |