emacs-diffs
[Top][All Lists]
Advanced

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

feature/android 377a3ebbb55: Update Android port


From: Po Lu
Subject: feature/android 377a3ebbb55: Update Android port
Date: Fri, 16 Jun 2023 01:00:28 -0400 (EDT)

branch: feature/android
commit 377a3ebbb55a9b944551394e00d24c445e3ff4a1
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Update Android port
    
    * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity):
    * java/org/gnu/emacs/EmacsApplication.java (findDumpFile):
    * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu)
    (addSubmenu, display):
    * java/org/gnu/emacs/EmacsDocumentsProvider.java
    (getNotificationUri, queryChildDocuments, deleteDocument):
    * java/org/gnu/emacs/EmacsDrawRectangle.java (perform):
    * java/org/gnu/emacs/EmacsFillRectangle.java (perform):
    * java/org/gnu/emacs/EmacsOpenActivity.java (readEmacsClientLog)
    (checkReadableOrCopy):
    * java/org/gnu/emacs/EmacsSdk7FontDriver.java
    (EmacsSdk7FontDriver):
    * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView):
    * java/org/gnu/emacs/EmacsView.java (EmacsView):
    * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow, onKeyUp):
    * java/org/gnu/emacs/EmacsWindowAttachmentManager.java
    (EmacsWindowAttachmentManager): Remove various unused arguments
    and variables, dead stores, and make minor cleanups and
    performance improvements.
    * src/androidmenu.c (FIND_METHOD_STATIC, android_menu_show):
    Adjust accordingly.
---
 java/org/gnu/emacs/EmacsActivity.java              |  2 +-
 java/org/gnu/emacs/EmacsApplication.java           |  3 ++
 java/org/gnu/emacs/EmacsContextMenu.java           |  9 +++--
 java/org/gnu/emacs/EmacsDocumentsProvider.java     | 17 ++++++----
 java/org/gnu/emacs/EmacsDrawRectangle.java         |  2 --
 java/org/gnu/emacs/EmacsFillRectangle.java         |  2 +-
 java/org/gnu/emacs/EmacsOpenActivity.java          | 38 +++++++++++++++++-----
 java/org/gnu/emacs/EmacsSdk7FontDriver.java        |  4 +++
 java/org/gnu/emacs/EmacsSurfaceView.java           |  5 ---
 java/org/gnu/emacs/EmacsView.java                  |  4 ---
 java/org/gnu/emacs/EmacsWindow.java                | 24 ++++++--------
 .../gnu/emacs/EmacsWindowAttachmentManager.java    |  7 +++-
 src/androidmenu.c                                  | 16 +++------
 13 files changed, 73 insertions(+), 60 deletions(-)

diff --git a/java/org/gnu/emacs/EmacsActivity.java 
b/java/org/gnu/emacs/EmacsActivity.java
index 7ba268ba42d..fa9bff39bb0 100644
--- a/java/org/gnu/emacs/EmacsActivity.java
+++ b/java/org/gnu/emacs/EmacsActivity.java
@@ -55,7 +55,7 @@ public class EmacsActivity extends Activity
   private FrameLayout layout;
 
   /* List of activities with focus.  */
-  public static List<EmacsActivity> focusedActivities;
+  public static final List<EmacsActivity> focusedActivities;
 
   /* The last activity to have been focused.  */
   public static EmacsActivity lastFocusedActivity;
diff --git a/java/org/gnu/emacs/EmacsApplication.java 
b/java/org/gnu/emacs/EmacsApplication.java
index 10099721744..d8b77acdf9e 100644
--- a/java/org/gnu/emacs/EmacsApplication.java
+++ b/java/org/gnu/emacs/EmacsApplication.java
@@ -60,6 +60,9 @@ public final class EmacsApplication extends Application
        }
       });
 
+    if (allFiles == null)
+      return;
+
     /* Now try to find the right dump file.  */
     for (i = 0; i < allFiles.length; ++i)
       {
diff --git a/java/org/gnu/emacs/EmacsContextMenu.java 
b/java/org/gnu/emacs/EmacsContextMenu.java
index d69d0263b93..eb83016c849 100644
--- a/java/org/gnu/emacs/EmacsContextMenu.java
+++ b/java/org/gnu/emacs/EmacsContextMenu.java
@@ -131,20 +131,18 @@ public final class EmacsContextMenu
   };
 
   public List<Item> menuItems;
-  public String title;
   private EmacsContextMenu parent;
 
   /* Create a context menu with no items inside and the title TITLE,
      which may be NULL.  */
 
   public static EmacsContextMenu
-  createContextMenu (String title)
+  createContextMenu ()
   {
     EmacsContextMenu menu;
 
     menu = new EmacsContextMenu ();
     menu.menuItems = new ArrayList<Item> ();
-    menu.title = title;
 
     return menu;
   }
@@ -197,7 +195,7 @@ public final class EmacsContextMenu
      item name.  */
 
   public EmacsContextMenu
-  addSubmenu (String itemName, String title, String tooltip)
+  addSubmenu (String itemName, String tooltip)
   {
     EmacsContextMenu submenu;
     Item item;
@@ -206,7 +204,7 @@ public final class EmacsContextMenu
     item.itemID = 0;
     item.itemName = itemName;
     item.tooltip = tooltip;
-    item.subMenu = createContextMenu (title);
+    item.subMenu = createContextMenu ();
     item.subMenu.parent = this;
 
     menuItems.add (item);
@@ -334,6 +332,7 @@ public final class EmacsContextMenu
     final EmacsHolder<Boolean> rc;
 
     rc = new EmacsHolder<Boolean> ();
+    rc.thing = false;
 
     runnable = new Runnable () {
        @Override
diff --git a/java/org/gnu/emacs/EmacsDocumentsProvider.java 
b/java/org/gnu/emacs/EmacsDocumentsProvider.java
index b4ac4624829..96dc2bc6e14 100644
--- a/java/org/gnu/emacs/EmacsDocumentsProvider.java
+++ b/java/org/gnu/emacs/EmacsDocumentsProvider.java
@@ -131,9 +131,7 @@ public final class EmacsDocumentsProvider extends 
DocumentsProvider
   getNotificationUri (File file)
   {
     Uri updatedUri;
-    Context context;
 
-    context = getContext ();
     updatedUri
       = buildChildDocumentsUri ("org.gnu.emacs",
                                file.getAbsolutePath ());
@@ -294,6 +292,7 @@ public final class EmacsDocumentsProvider extends 
DocumentsProvider
   {
     MatrixCursor result;
     File directory;
+    File[] files;
     Context context;
 
     if (projection == null)
@@ -305,9 +304,15 @@ public final class EmacsDocumentsProvider extends 
DocumentsProvider
        requested.  */
     directory = new File (parentDocumentId);
 
-    /* Now add each child.  */
-    for (File child : directory.listFiles ())
-      queryDocument1 (result, child);
+    /* Look up each child.  */
+    files = directory.listFiles ();
+
+    if (files != null)
+      {
+       /* Now add each child.  */
+       for (File child : files)
+         queryDocument1 (result, child);
+      }
 
     context = getContext ();
 
@@ -406,12 +411,10 @@ public final class EmacsDocumentsProvider extends 
DocumentsProvider
   {
     File file, parent;
     File[] children;
-    Context context;
 
     /* Java makes recursively deleting a file hard.  File name
        encoding issues also prevent easily calling into C...  */
 
-    context = getContext ();
     file = new File (documentId);
     parent = file.getParentFile ();
 
diff --git a/java/org/gnu/emacs/EmacsDrawRectangle.java 
b/java/org/gnu/emacs/EmacsDrawRectangle.java
index 3bd5779c54e..b54b031b56b 100644
--- a/java/org/gnu/emacs/EmacsDrawRectangle.java
+++ b/java/org/gnu/emacs/EmacsDrawRectangle.java
@@ -36,7 +36,6 @@ public final class EmacsDrawRectangle
     Paint maskPaint, paint;
     Canvas maskCanvas;
     Bitmap maskBitmap;
-    Rect rect;
     Rect maskRect, dstRect;
     Canvas canvas;
     Bitmap clipBitmap;
@@ -52,7 +51,6 @@ public final class EmacsDrawRectangle
 
     paint = gc.gcPaint;
     paint.setStyle (Paint.Style.STROKE);
-    rect = new Rect (x, y, x + width, y + height);
 
     if (gc.clip_mask == null)
       /* Use canvas.drawRect with a RectF.  That seems to reliably
diff --git a/java/org/gnu/emacs/EmacsFillRectangle.java 
b/java/org/gnu/emacs/EmacsFillRectangle.java
index 4a0478b446f..461fd3c639c 100644
--- a/java/org/gnu/emacs/EmacsFillRectangle.java
+++ b/java/org/gnu/emacs/EmacsFillRectangle.java
@@ -61,6 +61,7 @@ public final class EmacsFillRectangle
        /* Drawing with a clip mask involves calculating the
           intersection of the clip mask with the dst rect, and
           extrapolating the corresponding part of the src rect.  */
+
        clipBitmap = gc.clip_mask.bitmap;
        dstRect = new Rect (x, y, x + width, y + height);
        maskRect = new Rect (gc.clip_x_origin,
@@ -69,7 +70,6 @@ public final class EmacsFillRectangle
                              + clipBitmap.getWidth ()),
                             (gc.clip_y_origin
                              + clipBitmap.getHeight ()));
-       clipBitmap = gc.clip_mask.bitmap;
 
        if (!maskRect.setIntersect (dstRect, maskRect))
          /* There is no intersection between the clip mask and the
diff --git a/java/org/gnu/emacs/EmacsOpenActivity.java 
b/java/org/gnu/emacs/EmacsOpenActivity.java
index 6af2b2d2e94..9411f85d434 100644
--- a/java/org/gnu/emacs/EmacsOpenActivity.java
+++ b/java/org/gnu/emacs/EmacsOpenActivity.java
@@ -146,7 +146,7 @@ public final class EmacsOpenActivity extends Activity
     FileReader reader;
     char[] buffer;
     int rc;
-    String what;
+    StringBuilder builder;
 
     /* Because the ProcessBuilder functions necessary to redirect
        process output are not implemented on Android 7 and earlier,
@@ -160,7 +160,8 @@ public final class EmacsOpenActivity extends Activity
 
     cache = getCacheDir ();
     file = new File (cache, "emacsclient.log");
-    what = "";
+    builder = new StringBuilder ();
+    reader = null;
 
     try
       {
@@ -168,13 +169,25 @@ public final class EmacsOpenActivity extends Activity
        buffer = new char[2048];
 
        while ((rc = reader.read (buffer, 0, 2048)) != -1)
-         what += String.valueOf (buffer, 0, 2048);
+         builder.append (buffer, 0, rc);
 
        reader.close ();
-       return what;
+       return builder.toString ();
       }
     catch (IOException exception)
       {
+       /* Close the reader if it's already been opened.  */
+
+       try
+         {
+           if (reader != null)
+             reader.close ();
+         }
+       catch (IOException e)
+         {
+           /* Not sure what to do here.  */
+         }
+
        return ("Couldn't read emacsclient.log: "
                + exception.toString ());
       }
@@ -248,11 +261,16 @@ public final class EmacsOpenActivity extends Activity
     /* inFile is now the file being written to.  */
     inFile = new File (getCacheDir (), inFile.getName ());
     buffer = new byte[4098];
-    outStream = new FileOutputStream (inFile);
-    stream = new FileInputStream (fd.getFileDescriptor ());
+
+    /* Initialize both streams to NULL.  */
+    outStream = null;
+    stream = null;
 
     try
       {
+       outStream = new FileOutputStream (inFile);
+       stream = new FileInputStream (fd.getFileDescriptor ());
+
        while ((read = stream.read (buffer)) >= 0)
          outStream.write (buffer, 0, read);
       }
@@ -263,8 +281,12 @@ public final class EmacsOpenActivity extends Activity
           Keep in mind that execution is transferred to ``finally''
           even if an exception happens inside the while loop
           above.  */
-       stream.close ();
-       outStream.close ();
+
+       if (stream != null)
+         stream.close ();
+
+       if (outStream != null)
+         outStream.close ();
       }
 
     return inFile.getCanonicalPath ();
diff --git a/java/org/gnu/emacs/EmacsSdk7FontDriver.java 
b/java/org/gnu/emacs/EmacsSdk7FontDriver.java
index 6df102f18a2..9122b46458a 100644
--- a/java/org/gnu/emacs/EmacsSdk7FontDriver.java
+++ b/java/org/gnu/emacs/EmacsSdk7FontDriver.java
@@ -252,6 +252,10 @@ public class EmacsSdk7FontDriver extends EmacsFontDriver
     systemFontsDirectory = new File ("/system/fonts");
 
     fontFamilyList = systemFontsDirectory.list ();
+
+    /* If that returned null, replace it with an empty array.  */
+    fontFamilyList = new String[0];
+
     typefaceList = new Sdk7Typeface[fontFamilyList.length + 3];
 
     /* It would be nice to avoid opening each and every font upon
diff --git a/java/org/gnu/emacs/EmacsSurfaceView.java 
b/java/org/gnu/emacs/EmacsSurfaceView.java
index 738b1a99eef..5b3e05eb9f4 100644
--- a/java/org/gnu/emacs/EmacsSurfaceView.java
+++ b/java/org/gnu/emacs/EmacsSurfaceView.java
@@ -39,10 +39,6 @@ public final class EmacsSurfaceView extends View
 {
   private static final String TAG = "EmacsSurfaceView";
 
-  /* The EmacsView representing the window that this surface is
-     displaying.  */
-  private EmacsView view;
-
   /* The complete buffer contents at the time of the last draw.  */
   private Bitmap frontBuffer;
 
@@ -71,7 +67,6 @@ public final class EmacsSurfaceView extends View
   {
     super (view.getContext ());
 
-    this.view = view;
     this.bitmap = new WeakReference<Bitmap> (null);
   }
 
diff --git a/java/org/gnu/emacs/EmacsView.java 
b/java/org/gnu/emacs/EmacsView.java
index aba1184b0c2..0cabefdf385 100644
--- a/java/org/gnu/emacs/EmacsView.java
+++ b/java/org/gnu/emacs/EmacsView.java
@@ -68,9 +68,6 @@ public final class EmacsView extends ViewGroup
   /* The damage region.  */
   public Region damageRegion;
 
-  /* The paint.  */
-  public Paint paint;
-
   /* The associated surface view.  */
   private EmacsSurfaceView surfaceView;
 
@@ -128,7 +125,6 @@ public final class EmacsView extends ViewGroup
 
     this.window = window;
     this.damageRegion = new Region ();
-    this.paint = new Paint ();
 
     setFocusable (true);
     setFocusableInTouchMode (true);
diff --git a/java/org/gnu/emacs/EmacsWindow.java 
b/java/org/gnu/emacs/EmacsWindow.java
index 68a18ec2aa7..739a1f43b7d 100644
--- a/java/org/gnu/emacs/EmacsWindow.java
+++ b/java/org/gnu/emacs/EmacsWindow.java
@@ -103,11 +103,10 @@ public final class EmacsWindow extends EmacsHandleObject
   public int lastButtonState, lastModifiers;
 
   /* Whether or not the window is mapped.  */
-  private boolean isMapped;
+  private volatile boolean isMapped;
 
-  /* Whether or not to ask for focus upon being mapped, and whether or
-     not the window should be focusable.  */
-  private boolean dontFocusOnMap, dontAcceptFocus;
+  /* Whether or not to ask for focus upon being mapped.  */
+  private boolean dontFocusOnMap;
 
   /* Whether or not the window is override-redirect.  An
      override-redirect window always has its own system window.  */
@@ -464,7 +463,7 @@ public final class EmacsWindow extends EmacsHandleObject
       }
   }
 
-  public void
+  public synchronized void
   unmapWindow ()
   {
     if (!isMapped)
@@ -618,7 +617,7 @@ public final class EmacsWindow extends EmacsHandleObject
   onKeyUp (int keyCode, KeyEvent event)
   {
     int state, state_1;
-    long time, serial;
+    long time;
 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
       state = event.getModifiers ();
@@ -645,12 +644,11 @@ public final class EmacsWindow extends EmacsHandleObject
     state_1
       = state & ~(KeyEvent.META_ALT_MASK | KeyEvent.META_CTRL_MASK);
 
-    serial
-      = EmacsNative.sendKeyRelease (this.handle,
-                                   event.getEventTime (),
-                                   state, keyCode,
-                                   getEventUnicodeChar (event,
-                                                        state_1));
+    EmacsNative.sendKeyRelease (this.handle,
+                               event.getEventTime (),
+                               state, keyCode,
+                               getEventUnicodeChar (event,
+                                                    state_1));
     lastModifiers = state;
 
     if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
@@ -1155,8 +1153,6 @@ public final class EmacsWindow extends EmacsHandleObject
   public synchronized void
   setDontAcceptFocus (final boolean dontAcceptFocus)
   {
-    this.dontAcceptFocus = dontAcceptFocus;
-
     /* Update the view's focus state.  */
     EmacsService.SERVICE.runOnUiThread (new Runnable () {
        @Override
diff --git a/java/org/gnu/emacs/EmacsWindowAttachmentManager.java 
b/java/org/gnu/emacs/EmacsWindowAttachmentManager.java
index 4fda48616f0..bc96de7fe1a 100644
--- a/java/org/gnu/emacs/EmacsWindowAttachmentManager.java
+++ b/java/org/gnu/emacs/EmacsWindowAttachmentManager.java
@@ -53,9 +53,11 @@ import android.util.Log;
 
 public final class EmacsWindowAttachmentManager
 {
-  public static EmacsWindowAttachmentManager MANAGER;
   private final static String TAG = "EmacsWindowAttachmentManager";
 
+  /* The single window attachment manager ``object''.  */
+  public static final EmacsWindowAttachmentManager MANAGER;
+
   static
   {
     MANAGER = new EmacsWindowAttachmentManager ();
@@ -69,7 +71,10 @@ public final class EmacsWindowAttachmentManager
     public void destroy ();
   };
 
+  /* List of currently attached window consumers.  */
   public List<WindowConsumer> consumers;
+
+  /* List of currently attached windows.  */
   public List<EmacsWindow> windows;
 
   public
diff --git a/src/androidmenu.c b/src/androidmenu.c
index f74e7ca6d99..75710486c75 100644
--- a/src/androidmenu.c
+++ b/src/androidmenu.c
@@ -101,13 +101,12 @@ android_init_emacs_context_menu (void)
   eassert (menu_class.c_name);
 
   FIND_METHOD_STATIC (create_context_menu, "createContextMenu",
-                     "(Ljava/lang/String;)"
-                     "Lorg/gnu/emacs/EmacsContextMenu;");
+                     "()Lorg/gnu/emacs/EmacsContextMenu;");
 
   FIND_METHOD (add_item, "addItem", "(ILjava/lang/String;ZZZ"
               "Ljava/lang/String;Z)V");
   FIND_METHOD (add_submenu, "addSubmenu", "(Ljava/lang/String;"
-              "Ljava/lang/String;Ljava/lang/String;)"
+              "Ljava/lang/String;)"
               "Lorg/gnu/emacs/EmacsContextMenu;");
   FIND_METHOD (add_pane, "addPane", "(Ljava/lang/String;)V");
   FIND_METHOD (parent, "parent", "()Lorg/gnu/emacs/EmacsContextMenu;");
@@ -271,18 +270,11 @@ android_menu_show (struct frame *f, int x, int y, int 
menuflags,
   android_push_local_frame ();
 
   /* Push the first local frame for the context menu.  */
-  title_string = (!NILP (title)
-                 ? (jobject) android_build_string (title)
-                 : NULL);
   method = menu_class.create_context_menu;
   current_context_menu = context_menu
     = (*android_java_env)->CallStaticObjectMethod (android_java_env,
                                                   menu_class.class,
-                                                  method,
-                                                  title_string);
-
-  if (title_string)
-    ANDROID_DELETE_LOCAL_REF (title_string);
+                                                  method);
 
   /* Push the second local frame for temporaries.  */
   count1 = SPECPDL_INDEX ();
@@ -391,7 +383,7 @@ android_menu_show (struct frame *f, int x, int y, int 
menuflags,
                = (*android_java_env)->CallObjectMethod (android_java_env,
                                                         current_context_menu,
                                                         menu_class.add_submenu,
-                                                        title_string, NULL,
+                                                        title_string,
                                                         help_string);
              android_exception_check ();
 



reply via email to

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