emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master d286f6889cf: Open org-protocol:// links on Android


From: Po Lu
Subject: master d286f6889cf: Open org-protocol:// links on Android
Date: Fri, 1 Sep 2023 22:06:17 -0400 (EDT)

branch: master
commit d286f6889cf7877d79bbc2604d18819b72e9c97b
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Open org-protocol:// links on Android
    
    * doc/emacs/android.texi (Android Startup): Revise to reflect
    changes in the set of files registered for Emacsclient and
    mention org-protocol support.
    
    * java/AndroidManifest.xml.in: Open all files, not just a
    particular subset of image and data files.  Register an
    org-protocol scheme handler.
    
    * java/org/gnu/emacs/EmacsOpenActivity.java (onCreate): Provide
    URI to Emacs verbatim if its scheme is `org-protocol'.
---
 doc/emacs/android.texi                    |  8 +++-
 java/AndroidManifest.xml.in               | 75 +++++--------------------------
 java/org/gnu/emacs/EmacsOpenActivity.java |  4 ++
 3 files changed, 20 insertions(+), 67 deletions(-)

diff --git a/doc/emacs/android.texi b/doc/emacs/android.texi
index 383555a87c9..d831a7a1884 100644
--- a/doc/emacs/android.texi
+++ b/doc/emacs/android.texi
@@ -129,8 +129,7 @@ buffer.
   Since there is no other way to start the @command{emacsclient}
 program (@pxref{Emacs Server}) from another Android program, Emacs
 provides a wrapper around the @command{emacsclient} program, which is
-registered with the system as an application that can open all text
-files.
+registered with the system as an application that can open any file.
 
   When that wrapper is selected as the program with which to open a
 file, it invokes @command{emacsclient} with the options
@@ -154,6 +153,11 @@ directory, or try to open files in it yourself.
 case such files are copied to a temporary directory before being
 opened.
 
+@cindex ``org-protocol'' links, android
+  In addition to opening ordinary text files, Emacs also registers its
+@command{emacsclient} wrapper as a program capable of opening
+``org-protocol'' links (@pxref{Protocols,,,org, The Org Manual}).
+
 @node Android File System
 @section What Files Emacs Can Access on Android
 @cindex /assets directory, android
diff --git a/java/AndroidManifest.xml.in b/java/AndroidManifest.xml.in
index 2cbcdbc3e5b..21bb2af2530 100644
--- a/java/AndroidManifest.xml.in
+++ b/java/AndroidManifest.xml.in
@@ -107,73 +107,18 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>. -->
         <action android:name="android.intent.action.VIEW"/>
        <action android:name="android.intent.action.EDIT"/>
        <action android:name="android.intent.action.PICK"/>
-
         <category android:name="android.intent.category.DEFAULT"/>
+       <data android:mimeType="*/*"/>
+      </intent-filter>
+
+      <!-- Facilitate opening org-protocol:// URLs as well, the same
+           way emacsclient.desktop does.  -->
 
-       <data android:mimeType="image/aces"/>
-       <data android:mimeType="image/avci"/>
-       <data android:mimeType="image/avcs"/>
-       <data android:mimeType="image/avif"/>
-       <data android:mimeType="image/bmp"/>
-       <data android:mimeType="image/cgm"/>
-       <data android:mimeType="image/dicom-rle"/>
-       <data android:mimeType="image/dpx"/>
-       <data android:mimeType="image/emf"/>
-       <data android:mimeType="image/example"/>
-       <data android:mimeType="image/fits"/>
-       <data android:mimeType="image/g3fax"/>
-       <data android:mimeType="image/heic"/>
-       <data android:mimeType="image/heic-sequence"/>
-       <data android:mimeType="image/heif"/>
-       <data android:mimeType="image/heif-sequence"/>
-       <data android:mimeType="image/hej2k"/>
-       <data android:mimeType="image/hsj2"/>
-       <data android:mimeType="image/jls"/>
-       <data android:mimeType="image/jp2"/>
-       <data android:mimeType="image/jph"/>
-       <data android:mimeType="image/jphc"/>
-       <data android:mimeType="image/jpm"/>
-       <data android:mimeType="image/jpx"/>
-       <data android:mimeType="image/jxr"/>
-       <data android:mimeType="image/jxrA"/>
-       <data android:mimeType="image/jxrS"/>
-       <data android:mimeType="image/jxs"/>
-       <data android:mimeType="image/jxsc"/>
-       <data android:mimeType="image/jxsi"/>
-       <data android:mimeType="image/jxss"/>
-       <data android:mimeType="image/ktx"/>
-       <data android:mimeType="image/ktx2"/>
-       <data android:mimeType="image/naplps"/>
-       <data android:mimeType="image/png"/>
-       <data android:mimeType="image/prs.btif"/>
-       <data android:mimeType="image/prs.pti"/>
-       <data android:mimeType="image/pwg-raster"/>
-       <data android:mimeType="image/svg+xml"/>
-       <data android:mimeType="image/t38"/>
-       <data android:mimeType="image/tiff"/>
-       <data android:mimeType="image/tiff-fx"/>
-       <data android:mimeType="image/xpm"/>
-       <data android:mimeType="text/*"/>
-        <data android:mimeType="application/*xml"/>
-        <data android:mimeType="application/atom+xml"/>
-        <data android:mimeType="application/dxf"/>
-        <data android:mimeType="application/ecmascript"/>
-        <data android:mimeType="application/javascript"/>
-        <data android:mimeType="application/json"/>
-        <data android:mimeType="application/*log*"/>
-        <data android:mimeType="application/octet-stream"/>
-        <data android:mimeType="application/soap+xm"/>
-        <data android:mimeType="application/x-caramel"/>
-        <data android:mimeType="application/x-klaunch"/>
-        <data android:mimeType="application/x-latex"/>
-        <data android:mimeType="application/x-sh"/>
-        <data android:mimeType="application/x-tcl"/>
-        <data android:mimeType="application/x-tex*"/>
-        <data android:mimeType="application/x-troff*"/>
-        <data android:mimeType="application/xhtml+xml"/>
-        <data android:mimeType="application/xml*"/>
-        <data android:mimeType="application/zip"/>
-        <data android:mimeType="application/x-zip-compressed"/>
+      <intent-filter>
+        <action android:name="android.intent.action.VIEW"/>
+        <category android:name="android.intent.category.DEFAULT"/>
+        <category android:name="android.intent.category.BROWSABLE"/>
+        <data android:scheme="org-protocol"/>
       </intent-filter>
     </activity>
 
diff --git a/java/org/gnu/emacs/EmacsOpenActivity.java 
b/java/org/gnu/emacs/EmacsOpenActivity.java
index ea503ebd120..ca6d99e20b7 100644
--- a/java/org/gnu/emacs/EmacsOpenActivity.java
+++ b/java/org/gnu/emacs/EmacsOpenActivity.java
@@ -477,6 +477,10 @@ public final class EmacsOpenActivity extends Activity
                      }
                  }
              }
+           else if (uri.getScheme ().equals ("org-protocol"))
+             /* URL is an org-protocol:// link, which is meant to be
+                directly relayed to emacsclient.  */
+             fileName = uri.toString ();
 
            if (fileName == null)
              {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]