]> git.eshelyaron.com Git - emacs.git/commitdiff
Update Android port
authorPo Lu <luangruo@yahoo.com>
Sun, 5 Mar 2023 11:58:28 +0000 (19:58 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 5 Mar 2023 11:58:28 +0000 (19:58 +0800)
* java/org/gnu/emacs/EmacsActivity.java (onCreate):
* java/org/gnu/emacs/EmacsContextMenu.java:
* java/org/gnu/emacs/EmacsDocumentsProvider.java (getMimeType):
* java/org/gnu/emacs/EmacsDrawLine.java (perform):
* java/org/gnu/emacs/EmacsDrawRectangle.java (perform):
* java/org/gnu/emacs/EmacsFillPolygon.java:
* java/org/gnu/emacs/EmacsFontDriver.java:
* java/org/gnu/emacs/EmacsHandleObject.java:
* java/org/gnu/emacs/EmacsInputConnection.java:
* java/org/gnu/emacs/EmacsMultitaskActivity.java
(EmacsMultitaskActivity):
* java/org/gnu/emacs/EmacsNative.java:
* java/org/gnu/emacs/EmacsNoninteractive.java
(EmacsNoninteractive, main):
* java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity)
(startEmacsClient):
* java/org/gnu/emacs/EmacsSdk7FontDriver.java:
* java/org/gnu/emacs/EmacsSdk8Clipboard.java:
* java/org/gnu/emacs/EmacsService.java (EmacsService, onCreate):
* java/org/gnu/emacs/EmacsView.java (EmacsView, onLayout):
* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow):
* java/org/gnu/emacs/EmacsWindowAttachmentManager.java
(EmacsWindowAttachmentManager): Remove redundant includes.
Reorganize some functions around, remove duplicate `getLibDir'
functions, and remove unused local variables.

19 files changed:
java/org/gnu/emacs/EmacsActivity.java
java/org/gnu/emacs/EmacsContextMenu.java
java/org/gnu/emacs/EmacsDocumentsProvider.java
java/org/gnu/emacs/EmacsDrawLine.java
java/org/gnu/emacs/EmacsDrawRectangle.java
java/org/gnu/emacs/EmacsFillPolygon.java
java/org/gnu/emacs/EmacsFontDriver.java
java/org/gnu/emacs/EmacsHandleObject.java
java/org/gnu/emacs/EmacsInputConnection.java
java/org/gnu/emacs/EmacsMultitaskActivity.java
java/org/gnu/emacs/EmacsNative.java
java/org/gnu/emacs/EmacsNoninteractive.java
java/org/gnu/emacs/EmacsOpenActivity.java
java/org/gnu/emacs/EmacsSdk7FontDriver.java
java/org/gnu/emacs/EmacsSdk8Clipboard.java
java/org/gnu/emacs/EmacsService.java
java/org/gnu/emacs/EmacsView.java
java/org/gnu/emacs/EmacsWindow.java
java/org/gnu/emacs/EmacsWindowAttachmentManager.java

index 13002d5d0e5db08670ac7b122fa9b5c9bffbad8a..692d8a14e22e2f937fad705ca92de8b797603b77 100644 (file)
@@ -24,18 +24,22 @@ import java.util.List;
 import java.util.ArrayList;
 
 import android.app.Activity;
+
 import android.content.Context;
 import android.content.Intent;
+
 import android.os.Build;
 import android.os.Bundle;
+
 import android.util.Log;
+
 import android.view.Menu;
 import android.view.View;
 import android.view.ViewTreeObserver;
 import android.view.Window;
 import android.view.WindowInsets;
 import android.view.WindowInsetsController;
-import android.widget.FrameLayout.LayoutParams;
+
 import android.widget.FrameLayout;
 
 public class EmacsActivity extends Activity
@@ -187,6 +191,7 @@ public class EmacsActivity extends Activity
     Intent intent;
     View decorView;
     ViewTreeObserver observer;
+    int matchParent;
 
     /* See if Emacs should be started with -Q.  */
     intent = getIntent ();
@@ -194,8 +199,10 @@ public class EmacsActivity extends Activity
       = intent.getBooleanExtra ("org.gnu.emacs.START_DASH_Q",
                                false);
 
-    params = new FrameLayout.LayoutParams (LayoutParams.MATCH_PARENT,
-                                          LayoutParams.MATCH_PARENT);
+    matchParent = FrameLayout.LayoutParams.MATCH_PARENT;
+    params
+      = new FrameLayout.LayoutParams (matchParent,
+                                     matchParent);
 
     /* Make the frame layout.  */
     layout = new FrameLayout (this);
index d1a624e68d9d451af5f07a07b3cb6361c31ab630..dec5e148a8e8013e803042b57831b6bfd05dca2f 100644 (file)
@@ -25,7 +25,6 @@ import java.util.ArrayList;
 import android.content.Context;
 import android.content.Intent;
 
-import android.os.Bundle;
 import android.os.Build;
 
 import android.view.Menu;
@@ -35,8 +34,6 @@ import android.view.SubMenu;
 
 import android.util.Log;
 
-import android.widget.PopupMenu;
-
 /* Context menu implementation.  This object is built from JNI and
    describes a menu hiearchy.  Then, `inflate' can turn it into an
    Android menu, which can be turned into a popup (or other kind of)
index 901c3b909e06fcf31b16f73f1afd9de9fe9c9acd..f70da6040ff84ff88924473acd2d8e3afd5a2c1f 100644 (file)
@@ -160,6 +160,7 @@ public final class EmacsDocumentsProvider extends DocumentsProvider
   {
     String name, extension, mime;
     int extensionSeparator;
+    MimeTypeMap singleton;
 
     if (file.isDirectory ())
       return Document.MIME_TYPE_DIR;
@@ -170,8 +171,9 @@ public final class EmacsDocumentsProvider extends DocumentsProvider
 
     if (extensionSeparator > 0)
       {
+       singleton = MimeTypeMap.getSingleton ();
        extension = name.substring (extensionSeparator + 1);
-       mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension (extension);
+       mime = singleton.getMimeTypeFromExtension (extension);
 
        if (mime != null)
          return mime;
index 0b23138a36c5fa53479681cb00dc8ea1441b91ae..92e03c48e2617f61c054f35a01f8d93e401c9fd4 100644 (file)
@@ -21,13 +21,9 @@ package org.gnu.emacs;
 
 import java.lang.Math;
 
-import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Paint;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffXfermode;
 import android.graphics.Rect;
-import android.graphics.Xfermode;
 
 public final class EmacsDrawLine
 {
@@ -38,7 +34,6 @@ public final class EmacsDrawLine
     Rect rect;
     Canvas canvas;
     Paint paint;
-    int i;
 
     /* TODO implement stippling.  */
     if (gc.fill_style == EmacsGC.GC_FILL_OPAQUE_STIPPLED)
index ce5e94e4a766b0e47c57d8032f489edd071e984a..3bd5779c54e552ef01789035ebfa97ed6a920c9d 100644 (file)
@@ -33,7 +33,6 @@ public final class EmacsDrawRectangle
   perform (EmacsDrawable drawable, EmacsGC gc,
           int x, int y, int width, int height)
   {
-    int i;
     Paint maskPaint, paint;
     Canvas maskCanvas;
     Bitmap maskBitmap;
index d55a0b3aca8a15fc0ba8fcc2665cf5414ac85770..ea8324c543c0bf27c02f1797314f7965c478750f 100644 (file)
@@ -21,7 +21,6 @@ package org.gnu.emacs;
 
 import java.lang.Math;
 
-import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Path;
index e142a3121d31b81882dd1af484f6865a5a0e2649..ff52899a89759af13650a33915f24996f110ec2c 100644 (file)
@@ -19,8 +19,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 package org.gnu.emacs;
 
-import java.util.List;
-
 import android.os.Build;
 
 /* This code is mostly unused.  See sfntfont-android.c for the code
index a57a3bbdfa9f008c77dd90c5c43905b258feabfa..5b88989533764a15812b9691307b50473e11ed94 100644 (file)
@@ -19,9 +19,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 package org.gnu.emacs;
 
-import java.util.List;
-import java.util.ArrayList;
-import java.lang.Object;
 import java.lang.IllegalStateException;
 
 /* This defines something that is a so-called ``handle''.  Handles
index ed64c368857e31c0b4568a8379f985d2a0eb3fd4..7b40fcff99eb6d9972be07c170db9d4611dd8f10 100644 (file)
@@ -23,18 +23,13 @@ import android.view.inputmethod.BaseInputConnection;
 import android.view.inputmethod.CompletionInfo;
 import android.view.inputmethod.ExtractedText;
 import android.view.inputmethod.ExtractedTextRequest;
-import android.view.inputmethod.InputMethodManager;
-import android.view.inputmethod.SurroundingText;
 import android.view.inputmethod.TextSnapshot;
 import android.view.KeyEvent;
 
-import android.text.Editable;
-
 import android.util.Log;
 
-/* Android input methods, take number six.
-
-   See EmacsEditable for more details.  */
+/* Android input methods, take number six.  See textconv.c for more
+   details; this is more-or-less a thin wrapper around that file.  */
 
 public final class EmacsInputConnection extends BaseInputConnection
 {
index dbdc99a3559cfdcce9805d6cbc1b6533bfd18985..b1c48f03fba62ffbadceb524aabaef42c584bb53 100644 (file)
@@ -19,7 +19,11 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 package org.gnu.emacs;
 
-public class EmacsMultitaskActivity extends EmacsActivity
+/* This class only exists because EmacsActivity is already defined as
+   an activity, and the system wants a new class in order to define a
+   new activity.  */
+
+public final class EmacsMultitaskActivity extends EmacsActivity
 {
 
 }
index b12053530905dd55423ce854f6b8f966c3d4a7e2..38370d607270a59668c520c13b718d4019e840bc 100644 (file)
@@ -19,8 +19,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 package org.gnu.emacs;
 
-import java.lang.System;
-
 import android.content.res.AssetManager;
 import android.view.inputmethod.ExtractedText;
 import android.view.inputmethod.ExtractedTextRequest;
index f365037b311aff8c38f910c28f1623033b5490c3..aaba74d877cf9c08dd803efc23eb15e8bfbca33e 100644 (file)
@@ -46,21 +46,6 @@ import java.lang.reflect.Method;
 @SuppressWarnings ("unchecked")
 public final class EmacsNoninteractive
 {
-  private static String
-  getLibraryDirectory (Context context)
-  {
-    int apiLevel;
-
-    apiLevel = Build.VERSION.SDK_INT;
-
-    if (apiLevel >= Build.VERSION_CODES.GINGERBREAD)
-      return context.getApplicationInfo().nativeLibraryDir;
-    else if (apiLevel >= Build.VERSION_CODES.DONUT)
-      return context.getApplicationInfo().dataDir + "/lib";
-
-    return "/data/data/" + context.getPackageName() + "/lib";
-  }
-
   public static void
   main (String[] args)
   {
@@ -188,7 +173,7 @@ public final class EmacsNoninteractive
        /* Now configure Emacs.  The class path should already be set.  */
 
        filesDir = context.getFilesDir ().getCanonicalPath ();
-       libDir = getLibraryDirectory (context);
+       libDir = EmacsService.getLibraryDirectory (context);
        cacheDir = context.getCacheDir ().getCanonicalPath ();
       }
     catch (Exception e)
@@ -198,6 +183,7 @@ public final class EmacsNoninteractive
        System.err.println ("and that Emacs needs adjustments in order to");
        System.err.println ("obtain required system internal resources.");
        System.err.println ("Please report this bug to bug-gnu-emacs@gnu.org.");
+       e.printStackTrace ();
 
        System.exit (1);
       }
index ac643ae8a13937c14b35fdf8080785efba2fe727..51335ddb2dd344f0ba5131ca6907948ef9fdf513 100644 (file)
@@ -46,7 +46,6 @@ package org.gnu.emacs;
 import android.app.AlertDialog;
 import android.app.Activity;
 
-import android.content.Context;
 import android.content.ContentResolver;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -301,23 +300,6 @@ public final class EmacsOpenActivity extends Activity
       });
   }
 
-  public String
-  getLibraryDirectory ()
-  {
-    int apiLevel;
-    Context context;
-
-    context = getApplicationContext ();
-    apiLevel = Build.VERSION.SDK_INT;
-
-    if (apiLevel >= Build.VERSION_CODES.GINGERBREAD)
-      return context.getApplicationInfo().nativeLibraryDir;
-    else if (apiLevel >= Build.VERSION_CODES.DONUT)
-      return context.getApplicationInfo().dataDir + "/lib";
-
-    return "/data/data/" + context.getPackageName() + "/lib";
-  }
-
   public void
   startEmacsClient (String fileName)
   {
@@ -327,7 +309,7 @@ public final class EmacsOpenActivity extends Activity
     EmacsClientThread thread;
     File file;
 
-    libDir = getLibraryDirectory ();
+    libDir = EmacsService.getLibraryDirectory (this);
     builder = new ProcessBuilder (libDir + "/libemacsclient.so",
                                  fileName, "--reuse-frame",
                                  "--timeout=10", "--no-wait");
index ae91c299de81be35406583cd7257c6111e94af3f..6df102f18a20869b47330ab0ded5010783b82aa7 100644 (file)
@@ -20,7 +20,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 package org.gnu.emacs;
 
 import java.io.File;
-import java.io.IOException;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -32,8 +31,6 @@ import android.graphics.Canvas;
 
 import android.util.Log;
 
-import android.os.Build;
-
 public class EmacsSdk7FontDriver extends EmacsFontDriver
 {
   private static final String TOFU_STRING = "\uDB3F\uDFFD";
index 818a722a908a9ebee5ce630c643873a94d15384d..5a40128b0acc5ff1817365d1d2a70cb113e1cb0a 100644 (file)
@@ -19,7 +19,9 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 package org.gnu.emacs;
 
-/* Importing the entire package avoids the deprecation warning.  */
+/* Importing the entire package instead of just the legacy
+   ClipboardManager class avoids the deprecation warning.  */
+
 import android.text.*;
 
 import android.content.Context;
index d9cb25f3e9c039fb68887934929a364cbaa24279..d05ebce75dc3b350df5e267e491529e91eb487ff 100644 (file)
@@ -24,22 +24,15 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 
 import java.util.List;
-import java.util.ArrayList;
 
-import android.graphics.Canvas;
-import android.graphics.Bitmap;
 import android.graphics.Point;
 
-import android.view.View;
 import android.view.InputDevice;
 import android.view.KeyEvent;
 
-import android.annotation.TargetApi;
-
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.NotificationChannel;
-import android.app.PendingIntent;
 import android.app.Service;
 
 import android.content.ClipboardManager;
@@ -51,9 +44,6 @@ import android.content.pm.PackageManager.ApplicationInfoFlags;
 import android.content.pm.PackageManager;
 import android.content.res.AssetManager;
 
-import android.database.Cursor;
-import android.database.MatrixCursor;
-
 import android.hardware.input.InputManager;
 
 import android.net.Uri;
@@ -68,9 +58,6 @@ import android.os.Vibrator;
 import android.os.VibratorManager;
 import android.os.VibrationEffect;
 
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-
 import android.util.Log;
 import android.util.DisplayMetrics;
 
@@ -87,7 +74,6 @@ class Holder<T>
 public final class EmacsService extends Service
 {
   public static final String TAG = "EmacsService";
-  public static final int MAX_PENDING_REQUESTS = 256;
   public static volatile EmacsService SERVICE;
   public static boolean needDashQ;
 
@@ -107,6 +93,22 @@ public final class EmacsService extends Service
      information.  */
   public static final boolean DEBUG_IC = false;
 
+  /* Return the directory leading to the directory in which native
+     library files are stored on behalf of CONTEXT.  */
+
+  public static String
+  getLibraryDirectory (Context context)
+  {
+    int apiLevel;
+
+    apiLevel = Build.VERSION.SDK_INT;
+
+    if (apiLevel >= Build.VERSION_CODES.GINGERBREAD)
+      return context.getApplicationInfo ().nativeLibraryDir;
+
+    return context.getApplicationInfo ().dataDir + "/lib";
+  }
+
   @Override
   public int
   onStartCommand (Intent intent, int flags, int startId)
@@ -178,23 +180,6 @@ public final class EmacsService extends Service
       }
   }
 
-  private String
-  getLibraryDirectory ()
-  {
-    int apiLevel;
-    Context context;
-
-    context = getApplicationContext ();
-    apiLevel = Build.VERSION.SDK_INT;
-
-    if (apiLevel >= Build.VERSION_CODES.GINGERBREAD)
-      return context.getApplicationInfo().nativeLibraryDir;
-    else if (apiLevel >= Build.VERSION_CODES.DONUT)
-      return context.getApplicationInfo().dataDir + "/lib";
-
-    return "/data/data/" + context.getPackageName() + "/lib";
-  }
-
   @Override
   public void
   onCreate ()
@@ -219,7 +204,7 @@ public final class EmacsService extends Service
        /* Configure Emacs with the asset manager and other necessary
           parameters.  */
        filesDir = app_context.getFilesDir ().getCanonicalPath ();
-       libDir = getLibraryDirectory ();
+       libDir = getLibraryDirectory (this);
        cacheDir = app_context.getCacheDir ().getCanonicalPath ();
 
        /* Now provide this application's apk file, so a recursive
index 617836d88118eca9ec8c438c492b5d4d5b977076..aefc79c4fb793bdfde490680df81b94490b6b3a9 100644 (file)
@@ -20,7 +20,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 package org.gnu.emacs;
 
 import android.content.Context;
-import android.content.res.ColorStateList;
 
 import android.text.InputType;
 
@@ -116,6 +115,7 @@ public final class EmacsView extends ViewGroup
     super (EmacsService.SERVICE);
 
     Object tem;
+    Context context;
 
     this.window = window;
     this.damageRegion = new Region ();
@@ -133,7 +133,8 @@ public final class EmacsView extends ViewGroup
       setDefaultFocusHighlightEnabled (false);
 
     /* Obtain the input method manager.  */
-    tem = getContext ().getSystemService (Context.INPUT_METHOD_SERVICE);
+    context = getContext ();
+    tem = context.getSystemService (Context.INPUT_METHOD_SERVICE);
     imManager = (InputMethodManager) tem;
   }
 
@@ -281,7 +282,6 @@ public final class EmacsView extends ViewGroup
     int count, i;
     View child;
     Rect windowRect;
-    int wantedWidth, wantedHeight;
 
     count = getChildCount ();
 
@@ -422,7 +422,6 @@ public final class EmacsView extends ViewGroup
       }
   }
 
-
   /* The following two functions must not be called if the view has no
      parent, or is parented to an activity.  */
 
index ea4cf48090d3a291cb5f6d73274373884f65c940..ffc7476f0104da2b7a9764d731d4ec1808fb300f 100644 (file)
@@ -31,19 +31,16 @@ import android.content.Context;
 import android.graphics.Rect;
 import android.graphics.Canvas;
 import android.graphics.Bitmap;
-import android.graphics.Point;
 import android.graphics.PixelFormat;
 
 import android.view.View;
 import android.view.ViewManager;
-import android.view.ViewGroup;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.InputDevice;
 import android.view.WindowManager;
 
-import android.content.Intent;
 import android.util.Log;
 
 import android.os.Build;
@@ -87,7 +84,7 @@ public final class EmacsWindow extends EmacsHandleObject
   public EmacsWindow parent;
 
   /* List of all children in stacking order.  This must be kept
-     consistent!  */
+     consistent with their Z order!  */
   public ArrayList<EmacsWindow> children;
 
   /* Map between pointer identifiers and last known position.  Used to
@@ -105,9 +102,8 @@ public final class EmacsWindow extends EmacsHandleObject
      last button press or release event.  */
   public int lastButtonState, lastModifiers;
 
-  /* Whether or not the window is mapped, and whether or not it is
-     deiconified.  */
-  private boolean isMapped, isIconified;
+  /* Whether or not the window is mapped.  */
+  private boolean isMapped;
 
   /* Whether or not to ask for focus upon being mapped, and whether or
      not the window should be focusable.  */
@@ -122,7 +118,8 @@ public final class EmacsWindow extends EmacsHandleObject
   private WindowManager windowManager;
 
   /* The time of the last KEYCODE_VOLUME_DOWN release.  This is used
-     to quit Emacs.  */
+     to quit Emacs upon two rapid clicks of the volume down
+     button.  */
   private long lastVolumeButtonRelease;
 
   /* Linked list of character strings which were recently sent as
@@ -1103,14 +1100,12 @@ public final class EmacsWindow extends EmacsHandleObject
   public void
   noticeIconified ()
   {
-    isIconified = true;
     EmacsNative.sendIconified (this.handle);
   }
 
   public void
   noticeDeiconified ()
   {
-    isIconified = false;
     EmacsNative.sendDeiconified (this.handle);
   }
 
index 1548bf2808753e6c1edaac2fd9ba0e04fc6e2ec0..30f29250970700500ad63d2edc01c05a231bf436 100644 (file)
@@ -20,7 +20,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 package org.gnu.emacs;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 
 import android.content.Intent;
@@ -74,8 +73,8 @@ public final class EmacsWindowAttachmentManager
   public
   EmacsWindowAttachmentManager ()
   {
-    consumers = new LinkedList<WindowConsumer> ();
-    windows = new LinkedList<EmacsWindow> ();
+    consumers = new ArrayList<WindowConsumer> ();
+    windows = new ArrayList<EmacsWindow> ();
   }
 
   public void