2023-08-07  Po Lu  <luangruo@yahoo.com>

	* nt/mingw-cfg.site: Remove additions for Gnulib printf.

	* m4, lib: Update from Gnulib.

	* msdos/sedlibmk.inp: Remove variables deleted as part of previous
	change.

	* admin/merge-gnulib (GNULIB_MODULES): Remove vasprintf and
	printf-posix.

2023-08-06  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (readDirectoryEntry): Fix
	potential NULL dereference.

	* java/org/gnu/emacs/EmacsSafThread.java (openDocument1): If
	initially opening with rwt, verify the file descriptor is really
	writable; if not, resort to rw and truncating the file descriptor
	by hand instead.

	* src/androidvfs.c (NATIVE_NAME (ftruncate)): New function.
	Truncate file descriptor and return whether that was successful.

	* src/androidvfs.c (android_saf_tree_chmod): Repair file access
	permissions allowed within FLAGS.

2023-08-05  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/commands.texi (Touchscreen Events): Fix typo.

	* lisp/subr.el (y-or-n-p): Don't call set-text-conversion-style
	when not present.

2023-08-04  Po Lu  <luangruo@yahoo.com>

	* ChangeLog.android: New file.

2023-08-04  Po Lu  <luangruo@yahoo.com>

	* src/androidvfs.c (android_verify_jni_string): Move to
	android.c.

	* src/android.c (android_verify_jni_string): New function.
	(android_build_string): Forgo encoding menu text if TEXT is a
	multibyte string that's also a valid JNI string.

	* src/android.h: Update prototypes.

	* java/org/gnu/emacs/EmacsService.java (getDocumentTrees): Don't
	encode some characters that need not be escaped within file
	names.

2023-08-03  Po Lu  <luangruo@yahoo.com>

	* src/fileio.c (check_vfs_filename): Revert earlier change.

	* src/android.h: Update prototypes.

	* src/androidvfs.c (unix_vfs_ops, android_unix_chmod, afs_vfs_ops)
	(android_afs_chmod, content_vfs_ops, android_content_chmod)
	(authority_vfs_ops, android_authority_chmod, saf_root_vfs_ops)
	(android_saf_root_chmod, saf_tree_vfs_ops, android_saf_tree_chmod)
	(saf_file_vfs_ops, saf_new_vfs_ops, android_saf_new_chmod)
	(root_vfs_ops): Add `chmod' to the list of functions implemented
	by each vnode.
	(android_fchmodat): New function.

	* src/fileio.c (Fset_file_modes): Use `emacs_fchmodat'.

	* src/lisp.h:
	* src/sysdep.c (emacs_fchmodat): Delegate to android_fchmodat on
	Android.

	* java/org/gnu/emacs/EmacsSafThread.java (CacheToplevel)
	(EmacsSafThread, DocIdEntry, getCache, pruneCache)
	(cacheDirectoryFromCursor, run, documentIdFromName1)
	(statDocument1, openDocumentDirectory1, openDocument1): Introduce
	a file status cache and populate it with files within directories
	as they are opened.

	* java/org/gnu/emacs/EmacsService.java (createDocument)
	(createDirectory, moveDocument): Invalidate the file status cache
	wherever needed.

	* src/fileio.c (check_vfs_filename):
	(Fset_file_modes): Permit `set-file-modes' to silently fail
	on asset and content files.

2023-08-02  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android, What is Android?)
	(Android Startup, Android File System, Android Environment)
	(Android Windowing, Android Fonts, Android Troubleshooting):
	Improve section titles.
	(Android Windowing): Describe the relation between keyboard
	modifiers reported by Android and those in key events.

	* java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp):
	Clear META_SYM_ON and META_META_MASK when retrieving ASCII
	characters.

	* src/androidgui.h: Add ANDROID_META_MASK.

	* src/androidterm.c (android_android_to_emacs_modifiers)
	(android_emacs_to_android_modifiers): Transform META to Alt, and
	vice versa.

2023-08-01  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android File System): Describe how to
	access real files named /assets or /contents if so required.

	* java/org/gnu/emacs/EmacsService.java (validAuthority):
	* src/android.c (android_init_emacs_service):
	* src/android.h: New function.

	* src/androidvfs.c (android_saf_valid_authority_p): New
	function.  Wrap the Java function.
	(android_saf_root_stat, android_saf_root_access): Don't return
	success if no authority by vp->authority's name exists.
	(android_saf_tree_from_name): Check validity of string data
	before giving it to JNI.

	* src/sfnt.c (CHECK_STACK_AVAILABLE): New macro.
	(PUSH, PUSH_UNCHECKED): Always define to unchecked versions,
	even if TEST.
	(PUSH2_UNCHECKED): New macro.
	(NPUSHB, NPUSHW, PUSHB, PUSHW): Check the number of remaining
	stack elements once.
	(stack_overflow_test_args): Expect zero stack arguments.

	* src/android.c (ANDROID_THROW): Remove unused macro.

2023-07-31  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (ISECT): Micro-optimize this instruction.

	* src/sfntfont.c (sfnt_parse_style): Avoid GC safety problem.
	(sfnt_parse_style): Fix misworded commentary.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative):
	* java/org/gnu/emacs/EmacsNoninteractive.java (main):
	* java/org/gnu/emacs/EmacsService.java (run):
	* java/org/gnu/emacs/EmacsThread.java (run):
	* src/android.c (initEmacs, setEmacsParams): Set
	`android_api_level' within setEmacsParams, not in initEmacs.

	* src/androidvfs.c: Pacify compiler warnings.

	* java/org/gnu/emacs/EmacsService.java (renameDocument): Don't
	catch UnsupportedOperationException; handle ENOSYS in
	android_saf_rename_document instead.
	(moveDocument): New function.

	* lisp/subr.el (y-or-n-p): Always change the text conversion
	style.

	* src/android.c (android_init_emacs_service)
	(android_exception_check_4): New function.

	* src/android.h: Update Java function table.

	* src/androidvfs.c (android_saf_rename_document): Handle ENOSYS
	here by setting errno to EXDEV.
	(android_saf_move_document): New function.
	(android_document_id_from_name): Take const `dir_name'.
	(android_saf_tree_rename): Use delete-move-rename to implement
	cross-directory renames.

2023-07-30  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsSafThread.java
	(postInvalidateCacheDir):
	* java/org/gnu/emacs/EmacsService.java (renameDocument): New
	functions.

	* src/android.c (android_init_emacs_service):
	* src/android.h (struct android_emacs_service): Link to new JNI
	function.

	* src/androidvfs.c (android_saf_rename_document): New function.
	(android_saf_tree_rename): Implement in terms of that function
	if possible.

2023-07-29  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsSafThread.java (statDocument1):

	* src/androidvfs.c (android_afs_stat, android_content_stat)
	(android_saf_root_stat): Report search permissions for files.

	* src/androidvfs.c: Improve commentary.

2023-07-29  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsSafThread.java (postInvalidateCache):
	New argument cacheName.  Remove that file from the cache.
	(accessDocument1): Consult the storage cache as well.

	* java/org/gnu/emacs/EmacsService.java (deleteDocument): New
	argument NAME.

	* src/android.c (android_init_emacs_service): Add new argument.

	* src/androidvfs.c (android_saf_delete_document)
	(android_saf_tree_rmdir, android_saf_file_unlink): Pass name of
	file being deleted to `deleteDocument'.

2023-07-29  Po Lu  <luangruo@yahoo.com>

	* src/androidvfs.c (android_saf_exception_check): Describe
	exceptions earlier.

	* java/org/gnu/emacs/EmacsSafThread.java (DocIdEntry)
	(getCacheEntry, CacheEntry, documentIdFromName1): Fix earlier
	change.

	* java/org/gnu/emacs/EmacsSafThread.java (DocIdEntry)
	(getCacheEntry, CacheEntry): Use `uptimeMillis' as the basis for
	cache expiration.

	* java/org/gnu/emacs/EmacsSafThread.java (EmacsSafThread, getCache)
	(pruneCache1, pruneCache, cacheChild, cacheDirectoryFromCursor)
	(documentIdFromName1, openDocumentDirectory1): Implement the
	cache referred to by the commentary.

	* java/org/gnu/emacs/EmacsService.java (deleteDocument):
	Invalidate the cache upon document removal.

	* src/androidvfs.c (android_saf_exception_check)
	(android_document_id_from_name): Correctly preserve or set errno
	in error cases.

2023-07-28  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsSafThread.java (documentIdFromName1):
	Fix query argument placeholder string.

	* src/androidvfs.c (android_document_id_from_name): Don't return
	0 if an SAF exception occurs.

	* src/androidselect.c (Fandroid_get_clipboard): Don't return
	data if clipboard is empty.  Reported by Johan Widén
	<j.e.widen@gmail.com>.

2023-07-28  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Document Providers): Say that
	quitting is now possible.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
	functions `safSyncAndReadInput', `safync' and `safPostRequest'.

	* java/org/gnu/emacs/EmacsSafThread.java: New file.  Move
	cancel-able SAF operations here.

	* java/org/gnu/emacs/EmacsService.java (EmacsService): Allow
	quitting from most SAF operations.

	* src/androidvfs.c (android_saf_exception_check): Return EINTR if
	OperationCanceledException is received.
	(android_saf_stat, android_saf_access)
	(android_document_id_from_name, android_saf_tree_opendir_1)
	(android_saf_file_open): Don't allow reentrant calls from async
	input handlers.
	(NATIVE_NAME): Implement new synchronization primitives for JNI.
	(android_vfs_init): Initialize new class.

	* src/dired.c (open_directory): Handle EINTR from opendir.

	* src/sysdep.c: Describe which operations may return EINTR on
	Android.

2023-07-28  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsDirectoryEntry.java
	(EmacsDirectoryEntry): Make class final.

	* java/org/gnu/emacs/EmacsService.java (accessDocument)
	(openDocumentDirectory, openDocument, createDocument): Throw
	access and IO error exceptions instead of catching them.
	(createDirectory, deleteDocument): New functions.

	* src/android.c (android_init_emacs_service): Add new functions.

	* src/android.h (struct android_emacs_service): Likewise.

	* src/androidvfs.c (android_saf_exception_check): New function.
	Translate between Java exceptions and errno values.
	(android_saf_stat, android_saf_access, android_saf_delete_document)
	(struct android_saf_tree_vnode, android_document_id_from_name)
	(android_saf_tree_name, android_saf_tree_rmdir)
	(android_saf_tree_opendir_1, android_saf_tree_opendir)
	(android_saf_file_open, android_saf_file_unlink)
	(android_saf_new_open, android_saf_new_mkdir): Implement missing
	VFS operations and derive errno values from the type of any
	exceptions thrown.
	(android_vfs_init): Initialize exception classes.
	(android_mkdir, android_fstat): Remove trailing whitespace.

2023-07-27  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Document Providers): Improve
	wording of paragraph clarifying limits on subprocesses.

	* java/org/gnu/emacs/EmacsService.java (getDocumentTrees): Use
	Java standard US-ASCII coding standard instead of the
	undocumented ``ASCII'' alias.
	(decodeFileName): Remove unused function.
	(documentIdFromName):
	* src/android.c (android_init_emacs_service): Take a String for
	NAME instead of a byte array.

	* src/androidvfs.c (android_verify_jni_string): New function.
	(android_document_id_from_name): Verify that STRING is a valid
	Modified UTF-8 string.

	* src/androidvfs.c (android_afs_initial)
	(android_content_get_directory_name, android_saf_tree_name)
	(android_saf_tree_from_name, android_vfs_init): Silence compiler
	warnings.

	* src/android.c (android_run_in_emacs_thread): Behave more
	robustly if SIGIO arrives too late Emacs for Emacs to check for
	signals, but too early to preempt a long running syscall.

	* java/org/gnu/emacs/EmacsActivity.java (onActivityResult):

	* src/androidvfs.c (android_renameat_noreplace, android_rename):
	Free vdst using vdst->ops, not vp->ops.

2023-07-27  Po Lu  <luangruo@yahoo.com>

	* configure.ac (ANDROID_STUBIFY): Add androidvfs.o when building
	libemacs.so.

	* doc/emacs/android.texi (Android): Add `Android Document
	Providers'.
	(Android Startup): Update the location of the content identifier
	directory.
	(Android File System): Describe access to document provider
	directories.
	(Android Document Providers): New node.

	* doc/emacs/emacs.texi (Top): Update the menu for the Android
	appendix.

	* java/Makefile.in (filename, install_temp/assets/build_info):
	Make directory-tree depend on build_info.

	* java/org/gnu/emacs/EmacsActivity.java (onActivityResult): New
	function.  When a document tree is accepted, persist access to it.

	* java/org/gnu/emacs/EmacsDirectoryEntry.java
	(EmacsDirectoryEntry): New struct.

	* java/org/gnu/emacs/EmacsOpenActivity.java (checkReadableOrCopy):
	Use EmacsService.buildContentName.

	* java/org/gnu/emacs/EmacsService.java (getEmacsView)
	(openContentUri)
	(checkContentUri): Remove excessive debug logging.
	(buildContentName, getDocumentAuthorities, requestDirectoryAccess)
	(getDocumentTrees, decodeFileName, documentIdFromName, getTreeUri)
	(statDocument, accessDocument, openDocumentDirectory)
	(readDirectoryEntry)
	(openDocument, createDocument): New functions.

	* lib-src/asset-directory-tool.c: Improve commentary by
	illustrating the difference between directory and ordinary files.

	* src/android.c (ANDROID_THROW, enum android_fd_table_entry_flags)
	(struct android_emacs_service, android_extract_long)
	(android_scan_directory_tree, android_is_directory)
	(android_get_asset_name, android_url_encode)
	(android_content_name_p)
	(android_get_content_name, android_check_content_access)
	(android_fstat)
	(android_fstatat, android_file_access_p)
	(android_hack_asset_fd_fallback)
	(android_detect_ashmem, android_hack_asset_fd)
	(android_close_on_exec)
	(android_open, android_close, android_fclose)
	(android_create_lib_link)
	(android_faccessat, struct android_dir, android_opendir)
	(android_dirfd)
	(android_readdir, android_closedir)
	(android_lookup_asset_directory_fd)
	(android_exception_check_3, android_get_current_api_level)
	(android_open_asset, android_close_asset, android_asset_read_quit)
	(android_asset_read, android_asset_lseek, android_asset_fstat):
	Move content and asset related functions to androidvfs.c.
	(android_init_emacs_service): Obtain handles for new JNI
	functions.
	(initEmacsParams): Initialize the VFS layer.
	(android_request_directory_access): New function.
	(android_display_toast): Remove unused function.

	* src/android.h (android_get_current_api_level): Assume that
	this function never returns less than __ANDROID_API__.
	(struct android_emacs_service): Move `struct
	android_emacs_service' here.

	* src/androidfns.c (Fandroid_request_directory_access): New
	interactive function.
	(syms_of_androidfns): Register new subr.

	* src/androidvfs.c (struct android_vdir, struct android_vops)
	(struct android_vnode, struct android_special_vnode)
	(enum android_vnode_type, struct android_cursor_class)
	(struct emacs_directory_entry_class)
	(struct android_parcel_file_descriptor_class)
	(android_init_cursor_class, android_init_entry_class)
	(android_init_fd_class, android_vfs_canonicalize_name)
	(struct android_unix_vnode, struct android_unix_vdir)
	(unix_vfs_ops)
	(android_unix_name, android_unix_vnode, android_unix_open)
	(android_unix_close, android_unix_unlink, android_unix_symlink)
	(android_unix_rmdir, android_unix_rename, android_unix_stat)
	(android_unix_access, android_unix_mkdir, android_unix_readdir)
	(android_unix_closedir, android_unix_dirfd, android_unix_opendir)
	(android_extract_long, android_scan_directory_tree)
	(android_is_directory, android_init_assets)
	(android_hack_asset_fd_fallback, android_detect_ashmem)
	(android_hack_asset_fd, struct android_afs_vnode)
	(struct android_afs_vdir, struct android_afs_open_fd, afs_vfs_ops)
	(android_afs_name, android_afs_initial, android_close_on_exec)
	(android_afs_open, android_afs_close, android_afs_unlink)
	(android_afs_symlink, android_afs_rmdir, android_afs_rename)
	(android_afs_stat, android_afs_access, android_afs_mkdir)
	(android_afs_readdir, android_afs_closedir, android_afs_dirfd)
	(android_afs_opendir, android_afs_get_directory_name)
	(struct android_content_vdir, content_vfs_ops)
	(content_directory_contents, android_content_name)
	(android_content_open, android_content_close)
	(android_content_unlink, android_content_symlink)
	(android_content_rmdir, android_content_rename)
	(android_content_stat, android_content_access)
	(android_content_mkdir, android_content_readdir)
	(android_content_closedir, android_content_dirfd)
	(android_content_opendir, android_content_get_directory_name)
	(android_content_initial, android_get_content_name)
	(android_check_content_access, struct android_authority_vnode)
	(authority_vfs_ops, android_authority_name)
	(android_authority_open)
	(android_authority_close, android_authority_unlink)
	(android_authority_symlink, android_authority_rmdir)
	(android_authority_rename, android_authority_stat)
	(android_authority_access, android_authority_mkdir)
	(android_authority_opendir, android_authority_initial)
	(struct android_saf_root_vnode, struct android_saf_root_vdir)
	(saf_root_vfs_ops, android_saf_root_name, android_saf_root_open)
	(android_saf_root_close, android_saf_root_unlink)
	(android_saf_root_symlink, android_saf_root_rmdir)
	(android_saf_root_rename, android_saf_root_stat)
	(androqid_saf_root_access, android_saf_root_mkdir)
	(android_saf_root_readdir, android_saf_root_closedir)
	(android_saf_root_dirfd, android_saf_root_opendir)
	(android_saf_root_initial, android_saf_root_get_directory)
	(android_saf_stat, android_saf_access)
	(struct android_saf_tree_vnode, struct android_saf_tree_vdir)
	(saf_tree_vfs_ops, android_document_id_from_name)
	(android_saf_tree_name, android_saf_tree_open)
	(android_saf_tree_close, android_saf_tree_unlink)
	(android_saf_tree_symlink, android_saf_tree_rmdir)
	(android_saf_tree_rename, android_saf_tree_stat)
	(android_saf_tree_access, android_saf_tree_mkdir)
	(android_saf_tree_opendir_1, android_saf_tree_readdir)
	(android_saf_tree_closedir, android_saf_tree_dirfd)
	(android_saf_tree_opendir, android_saf_tree_from_name)
	(android_saf_tree_get_directory, android_saf_file_vnode)
	(saf_file_vfs_ops, android_saf_file_name, android_saf_file_open)
	(android_saf_file_unlink, android_saf_file_rmdir)
	(android_saf_file_opendir, android_close_parcel_fd)
	(android_saf_new_vnode, android_saf_new_name)
	(android_saf_new_open)
	(android_saf_new_unlink, android_saf_new_symlink)
	(android_saf_new_rmdir, android_saf_new_rename)
	(android_saf_new_stat, android_saf_new_access)
	(android_saf_new_mkdir, android_saf_new_opendir, root_vfs_ops)
	(special_vnodes, android_root_name, android_name_file)
	(android_vfs_init, android_open, android_unlink, android_symlink)
	(android_rmdir, android_mkdir, android_renameat_noreplace)
	(android_rename, android_fstat, android_fstatat_1)
	(android_fstatat)
	(android_faccessat, android_fdopen, android_close, android_fclose)
	(android_open_asset, android_close_asset, android_asset_read_quit)
	(android_asset_read, android_asset_lseek, android_asset_fstat)
	(android_opendir, android_dirfd, android_readdir)
	(android_closedir): Move file system emulation routines here.
	Introduce a new ``VFS'' layer for translating between
	Emacs-specific file names and the various disparate interfaces
	for accessing files on Android.

	* src/callproc.c (delete_temp_file):
	* src/charset.c (load_charset_map_from_file):
	* src/dired.c:
	* src/emacs.c (Fkill_emacs):
	* src/fileio.c (check_mutable_filename, Fcopy_file)
	(Fmake_directory_internal, Fdelete_directory_internal)
	(Fdelete_file, Frename_file, Fadd_name_to_file)
	(Fmake_symbolic_link, file_accessible_directory_p)
	(Fset_file_modes)
	(Fset_file_times, write_region):
	* src/filelock.c (get_boot_time, rename_lock_file)
	(create_lock_file, current_lock_owner, unlock_file):
	* src/image.c (slurp_file, png_load_body, jpeg_load_body):
	* src/keyboard.c (Fopen_dribble_file):
	* src/lisp.h:
	* src/lread.c (Fload):
	* src/process.c (handle_child_signal):
	* src/sysdep.c (init_standard_fds, emacs_fopen, emacs_fdopen)
	(emacs_unlink, emacs_symlink, emacs_rmdir, emacs_mkdir)
	(emacs_renameat_noreplace, emacs_rename):
	* src/term.c (Fresume_tty, init_tty): Use and add new wrappers
	for fopen, fdopen, unlink, symlink, rmdir, mkdir,
	renameat_norepalce and rename.

2023-07-23  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android File System): Document where the
	app library directory can probably be found.

	* src/android.c (android_create_lib_link): New function.  Try to
	symlink `lib' in the directory holding the files directory to the
	app library directory.
	(setEmacsParams): Call that function if Emacs is being initialized
	from an application context.

2023-07-22  Po Lu  <luangruo@yahoo.com>

	* lisp/touch-screen.el (touch-screen-drag): If
	touch-screen-word-select, also keep the initial word within the
	region while scrolling.

	* src/window.h (WINDOW_MENU_BAR_P): Check for external menu bars
	using HAVE_WINDOW_SYSTEM && HAVE_EXT_MENU_BAR instead of hard
	coding X without Xt or GTK.

	* doc/lispref/commands.texi (Key Sequence Input): Describe which
	events receive imaginary prefix keys.
	* lisp/touch-screen.el (touch-screen-translate-touch): Consider
	`vertical-line' a virtual function key.
	(function-key-map): Translate events on vertical window borders.

	* etc/NEWS: Announce `current-key-remap-sequence'.

	* src/androidfns.c (Fx_create_frame): Default
	Qvertical_scroll_bars to Qnil, but set scroll-bar-width and
	scroll-bar-height.

2023-07-21  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/commands.texi (Key Sequence Input): Document new
	argument to `read-key-sequence' etc.

	* lisp/help-macro.el (make-help-screen):
	* lisp/subr.el (read-key, read-char-choice-with-read-key): Disable
	text conversion and display the OSK before reading a key sequence.

	* lisp/touch-screen.el (touch-screen-window-selection-changed):
	Only cancel the minibuffer OSK timer.
	(touch-screen-handle-point-up): Update comment accordingly.

	* src/keyboard.c (command_loop_1, read_menu_command)
	(read_key_sequence, read_key_sequence_vs, Fread_key_sequence)
	(Fread_key_sequence_vector): New arg DISABLE_TEXT_CONVERSION.
	All callers changed.

	* lisp/touch-screen.el (touch-screen-translate-touch): Check if a
	prefix is specified separately from prefix being non-nil.  Accept
	`nil' as an imaginary prefix key.
	(function-key-map): Register translation functions on the tab bar,
	tab lines and internal border.

	* lisp/touch-screen.el (touch-screen-preview-select): Avoid
	unnecessary redisplays.
	(touch-screen-drag): Scroll at window margins using window
	scrolling functions instead of relying on redisplay to recenter
	the window around point.

	* doc/emacs/input.texi (Touchscreens): Document
	`touch-screen-preview-select'.

	* doc/lispref/commands.texi (Touchscreen Events): Fix typo in the
	descriptions of two touch screen events.

	* lisp/dired.el (dired-insert-set-properties): Adjust for changes
	to file end computation.

	* lisp/minibuffer.el (clear-minibuffer-message): Don't clear
	minibuffer message if dragging.

	* lisp/touch-screen.el (touch-screen-current-tool): Fix doc
	string.
	(touch-screen-preview-select): New function.
	(touch-screen-drag): Call it if point changes.

2023-07-20  Po Lu  <luangruo@yahoo.com>

	* exec/trace.c (handle_readlinkat): Adjust commentary to match
	behavior.

	* src/android.c (android_get_keysym_name): NULL terminate
	*NAME_RETURN.

	* lisp/international/mule-cmds.el (set-coding-system-map): Don't
	display `set-terminal-coding-system' on Android.

	* lisp/cus-edit.el (custom-display): Add `android' display type.

	* src/android.c (struct android_event_queue): Don't make
	unnecessarily volatile.

	* lisp/touch-screen.el (touch-screen-handle-touch): Don't restart
	dragging if point is at ZV and the tap falls on a different row.

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): New
	field `title'.
	(addSubmenu): New arg TITLE.  Set that field.
	(expandTo): Set MENU's header title if it's a context menu.

	* src/androidmenu.c (android_init_emacs_context_menu): Adjust
	signature of `createContextMenu'.
	(android_menu_show): Use TITLE instead of pane titles if there's
	only one pane.

	* doc/emacs/dired.texi (Marks vs Flags): Document command bound
	to `touchscreen-hold'.

	* doc/lispref/commands.texi (Touchscreen Events): Describe
	`touch-screen-inhibit-drag'.

	* etc/NEWS: Improve description of changes to touch screen
	support.

	* lisp/dired-aux.el (dired-do-chxxx, dired-do-chmod)
	(dired-do-print, dired-do-shell-command, dired-do-compress-to)
	(dired-do-create-files, dired-do-rename, dired-do-isearch)
	(dired-do-isearch-regexp, dired-do-search)
	(dired-do-query-replace-regexp, dired-do-find-regexp)
	(dired-vc-next-action): Disable ``click to select'' after
	running this command.

	* lisp/dired.el (dired-insert-set-properties): Attach
	click-to-select keymap to file names if necessary.
	(dired-mode-map): Bind `touchscreen-hold' to click to select
	mode.
	(dired-post-do-command): New function.
	(dired-do-delete): Call it.
	(dired-mark-for-click, dired-enable-click-to-select-mode): New
	functions.
	(dired-click-to-select-mode): New minor mode.

	* lisp/touch-screen.el (touch-screen-current-tool): Fix doc
	string.
	(touch-screen-inhibit-drag): New function.

2023-07-19  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_infer_deltas): Improve commentary.

	* lisp/touch-screen.el (touch-screen-handle-point-up): If what is
	`restart-drag' (meaning that a drag has been restarted but the
	touchpoint has not moved), translate the release into a regular
	mouse click to deactivate the region.

	* build-aux/makecounter.sh (curcount): Rename `counter' to
	`emacs_shortlisp_counter'.

	* doc/emacs/input.texi (Touchscreens): Document
	`touch-screen-extend-selection'.

	* doc/lispref/commands.texi (Touchscreen Events): Document
	`touchscreen-restart-drag'.

	* lisp/touch-screen.el (touch-screen-extend-selection): New user
	option.
	(touch-screen-restart-drag): New function.
	(touch-screen-handle-point-update): Handle `restart-drag'
	gestures.
	(touch-screen-handle-touch): Check if the prerequisites for
	extending a previous drag gesture are met, and generate such
	events if so.
	(touch-screen-translate-touch): Update doc string.

	* src/Makefile.in (otherobj): Remove BUILD_COUNTER_OBJ.
	($(lispsource)/international/charprop.el):
	(%.elc): Don't depend on bootstrap-emacs if cross configuring for
	Android.
	(libemacs.so): Directly depend on and link with BUILD_COUNTER_OBJ.

	* build-aux/makecounter.sh: New script.

	* src/Makefile.in (abs_top_builddir): New variable.
	(BUILD_COUNTER_OBJ): Define to build-counter.o
	if compiling for Android.
	(build-counter.c): New target.  Generate this file using
	makecounter.sh upon changes to lisp.mk or shortlisp.
	(lisp.mk): Make and load relative to abs_top_builddir.
	(emacs$(EXEEXT)): Adjust accordingly.
	(mostlyclean): Remove build-counter.c.

2023-07-18  Po Lu  <luangruo@yahoo.com>

	* lisp/touch-screen.el (touch-screen-handle-point-update)
	(touch-screen-handle-point-up): Fix typos.

	* lisp/touch-screen.el (touch-screen-handle-point-update): Fix
	typo.

	* src/keyboard.c (make_lispy_event): Return nil if no menu item
	is found.

	* lisp/touch-screen.el (touch-screen-hold)
	(touch-screen-handle-point-up): Don't select inactive minibuffer
	windows.
	(touch-screen-handle-point-update): Improve detection of left
	and right edges.

	* lisp/touch-screen.el (touch-screen-handle-touch): Fix treatment
	of stray update events.

	* src/frame.c (syms_of_frame): Default to nil if HAVE_ANDROID.

	* src/keyboard.c (make_lispy_event): Fix botched merge.

	* doc/lispref/commands.texi (Touchscreen Events): Describe
	treatment of canceled touch sequences during touch event
	translation.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): Update JNI
	prototypes.

	* java/org/gnu/emacs/EmacsWindow.java (motionEvent): Set
	cancellation flag in events sent where appropriate.

	* lisp/touch-screen.el (touch-screen-handle-point-update):
	Improve treatment of horizontal scrolling near window edges.
	(touch-screen-handle-touch): Don't handle point up if the touch
	sequence has been canceled.

	* src/android.c (sendTouchDown, sendTouchUp, sendTouchMove): New
	argument `flags'.

	* src/androidgui.h (enum android_touch_event_flags): New enum.
	(struct android_touch_event): New field `flags'.

	* src/androidterm.c (handle_one_android_event): Report
	cancellation in TOUCHSCREEN_END_EVENTs.

	* src/keyboard.c (make_lispy_event): Fix botched merge.

2023-07-17  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/commands.texi (Touchscreen Events): Document meaning
	of `mouse-1-menu-command'.

	* lisp/mouse.el (minor-mode-menu-from-indicator): New arg EVENT.
	Give it to popup-menu.
	(mouse-minor-mode-menu): Use posn specified within EVENT.

	* lisp/touch-screen.el (touch-screen-handle-touch): Fix
	interactive translation.  Treat commands labeled
	`mouse-1-menu-command' like ordinary keymaps.

	* doc/lispref/commands.texi (Touchscreen Events): Document
	changes to simple translation.

	* lisp/touch-screen.el (touch-screen-handle-point-up): Generate
	`down-mouse-1' if the current gesture is `mouse-1-menu'.
	(touch-screen-handle-touch): If binding is a keymap, set state to
	`mouse-1-menu' and wait for point to be released before generating
	down-mouse-1.

	* lisp/tab-bar.el (tab-bar-map): Don't bind touch-screen-drag.

	* lisp/touch-screen.el (touch-screen-drag): Extend the region
	based on the position of the mark, not the position of point
	relative to EVENT.
	(touch-screen-translate-touch): Don't generate virtual function
	keys for non-mouse events.
	(function-key-map): Remove redundant definitions.

	* src/keyboard.c (read_key_sequence): Don't generate *-bar prefix
	keys for mock input (such as input from function key translation.)

	* doc/emacs/input.texi (Touchscreens): Document the new feature
	for people who have trouble dragging to word boundaries.

	* lisp/touch-screen.el (touch-screen-word-select): New defcustom.
	(touch-screen-word-select-bounds)
	(touch-screen-word-select-initial-word): New variable
	definitions.
	(touch-screen-hold): If `touch-screen-word-select', select the
	word around EVENT.
	(touch-screen-drag): If `touch-screen-word-select', extend the
	region to the next word boundary if the character under point
	constitutes a word.
	(touch-screen-handle-point-update, touch-screen-handle-touch)
	(touch-screen-translate-touch): Fix doc strings and fill
	comments.

2023-07-16  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (displayToast):
	* src/android.c (android_init_emacs_service): Remove unused
	function.

	* lisp/touch-screen.el (touch-screen-handle-point-up): Correctly
	compute posn point.
	(touch-screen-translate-touch): Update doc string.
	(function-key-map): Define touch screen translation functions
	within the internal border.

	* doc/lispref/commands.texi (Touchscreen Events): Improve
	documentation.

	* lisp/tab-bar.el (tab-bar-map): Bind `[tab-bar
	touchscreen-hold]'.

	* lisp/touch-screen.el (touch-screen-hold, touch-screen-drag):
	New functions.
	(touch-screen-handle-timeout): Generate a `touchscreen-hold'
	event instead.
	(touch-screen-handle-point-update): Generate a
	`touchscreen-drag' event upon dragging.
	(touch-screen-translate-touch): Cancel touch screen timer upon
	exit.

	* src/keyboard.c (access_keymap_keyremap): Take unsigned int
	start and end instead.

	* doc/emacs/emacs.texi (Top):
	* doc/emacs/input.texi (Other Input Devices): Correctly
	capitalize subsection name.
	(Touchscreens): Document additional translation.

	* doc/lispref/commands.texi (Touchscreen Events): Document that
	`touchscreen-end' events now have prefix keys.  Also, describe
	mouse emulation and `touchscreen-scroll' events.

	* doc/lispref/keymaps.texi (Translation Keymaps): Document
	`current-key-remap-sequence'.

	* lisp/touch-screen.el (touch-screen-translate-prompt): New
	function.
	(touch-screen-scroll): New command.  Bind to `touchscreen-scroll'.
	(touch-screen-handle-point-update, touch-screen-handle-point-up)
	(touch-screen-handle-touch): Refactor to actually translate touch
	screen event sequences, as opposed to looking up commands and
	executing them.
	(touch-screen-translate-touch): New function.  Bind in
	function-key-map to all touch screen events.
	(touch-screen-drag-mode-line-1, touch-screen-drag-mode-line)
	(touch-screen-tap-header-line): Remove special commands for
	dragging the mode line and clicking on the header line.

	* lisp/wid-edit.el (widget-button-click): Adjust accordingly.

	* src/keyboard.c (access_keymap_keyremap): Bind
	`current-key-remap-sequence' to the key sequence being remapped.
	(keyremap_step): Give fkey->start and fkey->end to
	access_keymap_keyremap.
	(head_table): Add imaginary prefix to touchscreen-end events as
	well.
	(syms_of_keyboard): New variable Vcurrent_key_remap_sequence.

2023-07-15  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android): Add new node to menu.
	(Android Environment): Add footnote pointing to new node.
	(Android Software): New node.

	* doc/emacs/emacs.texi (Top): Add new node to menu.

	* java/AndroidManifest.xml.in (manifest): Fix location of
	sharedUserId property.

	* java/INSTALL: Improve documentation of shared user ID
	support.

2023-07-14  Po Lu  <luangruo@yahoo.com>

	* configure.ac (ANDROID_SHARED_USER_NAME): New variable.
	Substitute it.

	* java/AndroidManifest.xml.in: Set `sharedUserLabel' if a shared
	user ID is enabled.

	* java/res/values/strings.xml (shared_user_name): New string
	resource.

	* src/android.c (android_blit_copy): Don't check for overflow
	where not required.

	* java/org/gnu/emacs/EmacsInputConnection.java
	(getSurroundingText): Don't print debug information if DEBUG_IC is
	off.

	* lisp/calc/calc.el (calc): Fix typo.

2023-07-13  Po Lu  <luangruo@yahoo.com>

	* etc/NEWS: Announce the new tool bar.

	* etc/images/last-page.xpm:
	* etc/images/last-page.pbm: New images.  Mirrored from
	next-page.xpm.

	* lisp/doc-view.el (doc-view-menu): Use `doc-view-new-search'
	instead of an anonymous function.
	(doc-view-tool-bar-map): New keymap.
	(doc-view-search): Update the tool bar after initiating a search.
	(doc-view-new-search): New command.
	(doc-view-mode): Set the tool bar map appropriately.

	Restore hardware acceleration, as a small degree of tearing is
	preferable towards large slowdowns on some specific devices.  The
	slight tearing remains, but a workaround for the GPU texture
	remaining partially updated has been introduced.

	* java/AndroidManifest.xml.in:
	* java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Don't
	change hardware acceleration state.

	* java/org/gnu/emacs/EmacsNative.java (notifyPixelsChanged): New
	function.

	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView):
	New field `bitmapChanged'.
	(copyToFrontBuffer): Signal that the bitmap has changed.
	(onDraw): If the bitmap has changed, increment the generation ID.

	* src/android.c (JNICALL): Implement new function.

2023-07-13  Po Lu  <luangruo@yahoo.com>

	Disable hardware acceleration on Android.  It serves no purpose
	and causes tearing.  Uploading the bitmap to the GPU takes about
	as long as it does to incrementally update the surface in
	software.

	* java/AndroidManifest.xml.in: Disable hardware acceleration.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): Make
	lastClosedMenu static.

	* java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Enable
	hardware acceleration within alert dialogs.

	* java/org/gnu/emacs/EmacsSurfaceView.java (onDraw): Describe
	why hardware acceleration is disabled.

	* java/org/gnu/emacs/EmacsWindow.java (run): Remove redundant
	call.

2023-07-12  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_run_select_thread): Fix typo.

	* src/android.c (android_run_select_thread): Correctly return the
	set of ready read and write descriptors on __ANDROID_API__ < 16
	systems.
	(android_select): Clear the set of ready file descriptors if
	events from the event queue are present despite pselect failing.

	* src/androidterm.c (android_android_to_emacs_modifiers)
	(android_emacs_to_android_modifiers): Fix statement precedence
	bugs.

	* src/doc.c (doc_close): Remove unused macro.

	* java/org/gnu/emacs/EmacsWindow.java (whatButtonWasIt): Handle
	back and forward buttons along with styluses.

	* src/doc.c (close_file_unwind_android_fd): New function.
	(get_doc_string, Fsnarf_documentation): Don't create a temporary
	fd if it can be avoided.

2023-07-11  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Ignore cross/etc/DOC.

	* configure.ac: Make the directory `cross/etc'.

	* cross/Makefile.in (CLEAN_SUBDIRS): Clean files inside `etc' as
	well.

	* java/Makefile.in (install_temp): Copy cross/etc/DOC to the
	package if it is available.

	* src/Makefile.in (SOME_MACHINE_OBJECTS): Add androidselect.c,
	sfntfont-android.c and sfntfont.c.
	(libemacs.so): Depend on $(etc)/DOC.

	* src/sfnt.c (sfnt_fill_span): Correctly clip span to raster
	width, ensuring that the last pixel is filled.
	(main): Adjust test sizes.

	* java/org/gnu/emacs/EmacsView.java (onGenericMotionEvent): Call
	onGenericMotionEvent.

	* java/org/gnu/emacs/EmacsWindow.java (Coordinate): New fields
	`button' and `id'.
	(<init>): Add new arguments to the constructor.
	(whatButtonWasIt): Return 0 if the button state has not changed.
	(buttonForEvent): New function.
	(figureChange): Return the Coordinate object associated to EVENT.
	Determine whether or not EVENT was accompanied by a change to the
	button state, and ascertain which button that was.
	(motionEvent): New function.
	(onGenericMotionEvent, onTouchEvent): Factor out touch and mouse
	event delivery to motionEvent.

2023-07-10  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (browseUrl): New argument
	SEND.  Choose from a list of applications that want to share the
	URL if true.

	* lisp/net/browse-url.el (browse-url-android-share): New user
	option.
	(browse-url-default-android-browser): Respect said user option.

	* src/android.c (android_init_emacs_service, android_browse_url):
	Expose new option.

	* src/android.h: Update prototypes.

	* src/androidselect.c (Fandroid_browse_url): Likewise.

	* lib/vasnprintf.c:
	* m4/printf.m4:
	* m4/vasnprintf.m4: Update from Gnulib.

2023-07-09  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsWindow.java (eventModifiers)
	(motionEventModifiers): New functions.
	(onKeyDown, onKeyUp, onFocusChanged, onSomeKindOfMotionEvent):
	Don't record the previous modifier mask; instead, always use the
	modifier state specified in the event.

	* src/androidterm.c (handle_one_android_event): Don't dispatch
	button release events when a popup is active.

	* java/org/gnu/emacs/EmacsService.java (onStartCommand): Fix typo
	in notification message.
	* java/org/gnu/emacs/EmacsWindow.java (onFocusChanged): Reset the
	recorded modifier state upon a change to the window focus.

	* java/org/gnu/emacs/EmacsService.java (onCreate): Fix typo.

	* java/org/gnu/emacs/EmacsDrawPoint.java (perform): Don't fill an
	extra pixel.
	* java/org/gnu/emacs/EmacsService.java (onCreate): Make sure
	scaledDensity is always at least 160 dpi.

2023-07-08  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsDrawLine.java (perform): Symmetrically
	adjust coordinates to cover the last pixel.  Then, fill the left
	most pixel of the line.

	* java/org/gnu/emacs/EmacsService.java (DEBUG_IC)
	(DEBUG_THREADS): Improve commentary.

	* src/androidterm.c (handle_one_android_event): Signal completion
	of IME events that have lost their frames.
	(requestCursorUpdates): Don't set an edit counter as this event
	won't be passed to the text conversion machinery.

	* src/android.c (android_blit_xor, android_check_query_urgent)
	(android_run_in_emacs_thread, android_update_extracted_text): Fix
	whitespace.

2023-07-07  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsSurfaceView.java (copyToFrontBuffer):
	Use fallback bit blit function on Android 7.0 as well, as crashes
	have been observed in drawBitmap.

2023-07-07  Po Lu  <luangruo@yahoo.com>

	* lisp/tool-bar.el (modifier-bar-modifier-list): New variable.
	(modifier-bar-button): New function.
	(tool-bar-event-apply-alt-modifier)
	(tool-bar-event-apply-super-modifier)
	(tool-bar-event-apply-hyper-modifier)
	(tool-bar-event-apply-shift-modifier)
	(tool-bar-event-apply-control-modifier)
	(tool-bar-event-apply-meta-modifier): Factor out modifier bar
	logic to that function, and redisplay the tool bar where
	necessary.
	(modifier-bar-available-p): New function.
	(modifier-bar-mode): Disable tool bar items corresponding to
	modifier keys that've already been pressed.

	* etc/images/shift.pbm: Regenerate using the same font as the
	other modifier button bitmaps.

2023-07-06  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsNative.java (scaledDensity): Announce
	new argument `scaledDensity'.

	* java/org/gnu/emacs/EmacsNoninteractive.java (main): Specify new
	argument.

	* java/org/gnu/emacs/EmacsService.java (onCreate): Compute an
	adjusted DPI for the font size based on the ratio between density
	and scaledDensity.
	(run): Specify that adjusted density.

	* src/android.c (setEmacsParams): Set
	`android_scaled_pixel_density'.

	* src/android.h (android_scaled_pixel_density) New variable.

	* src/androidterm.c (android_term_init): Set `font_resolution'.

	* src/androidterm.h (struct android_display_info): New field.

	* src/font.c (font_pixel_size, font_find_for_lface)
	(font_open_for_lface, Ffont_face_attributes, Fopen_font): Use
	FRAME_RES instead of FRAME_RES_Y.

	* src/frame.h (FRAME_RES): New macro.  Use this to convert between
	font point and pixel sizes as opposed to FRAME_RES_Y.

	* src/w32font.c (fill_in_logfont):
	* src/xfaces.c (Fx_family_fonts, set_lface_from_font): Use
	FRAME_RES instead of FRAME_RES_Y.  (bug#64444)

2023-07-05  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Environment): Document that
	Emacs also receives READ_EXTERNAL_STORAGE by default on old
	versions of Android.
	* java/AndroidManifest.xml.in: Request READ_EXTERNAL_STORAGE.
	(bug#64445)

	* doc/emacs/emacs.texi (Emacs and Android): Fix menu.

	* doc/emacs/android.texi (Android): Fix discrepancies between menu
	and sectioning.

	* java/org/gnu/emacs/EmacsService.java (detectMouse): Don't use
	function that is not present on Android 4.0.

	* doc/lispref/commands.texi (Misc Events): Correctly index
	`set-text-conversion-style'.

	* lisp/tool-bar.el (tool-bar-event-apply-alt-modifier)
	(tool-bar-event-apply-super-modifier)
	(tool-bar-event-apply-hyper-modifier)
	(tool-bar-event-apply-shift-modifier)
	(tool-bar-event-apply-control-modifier)
	(tool-bar-event-apply-meta-modifier): Pass t when restoring text
	conversion style.

	* src/keyboard.c (restore_reading_key_sequence): New function.
	(read_key_sequence): Set `reading_key_sequence' where necessary.

	* src/keyboard.h: Declare variable.

	* src/textconv.c (check_postponed_buffers): New function.
	(Fset_text_conversion_style): New argument.  If set, and a key
	sequence is being read, postpone resetting the IME until the key
	sequence is read.
	(syms_of_textconv): Clear new variable and add staticpro.

	* src/textconv.h: Update prototypes.

2023-07-04  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/frames.texi (Tool Bars): Describe modifier bars.

	* doc/lispref/keymaps.texi (Extended Menu Items, Tool Bar):
	Document changes to tool bar menu item handling and secondary tool
	bars.

	* etc/NEWS: Announce changes.

	* lisp/simple.el (event-apply-modifier): Correctly apply Ctrl and
	Shift modifiers to lower case ASCII key events that already have
	other modifiers applied.

	* lisp/tool-bar.el (tool-bar--cache-key)
	(tool-bar--secondary-cache-key): New defsubsts.
	(tool-bar--flush-cache): Flush secondary tool bar cache.
	(tool-bar-make-keymap): Include secondary tool bar if necessary.
	(tool-bar-make-keymap-1): New arg MAP.  Generate a keymap for that
	map if specified, else default to tool-bar-map.
	(set-text-conversion-style, tool-bar-apply-modifiers)
	(overriding-text-conversion-style)
	(tool-bar-event-apply-alt-modifier)
	(tool-bar-event-apply-super-modifier)
	(tool-bar-event-apply-hyper-modifier)
	(tool-bar-event-apply-shift-modifier)
	(tool-bar-event-apply-control-modifier)
	(tool-bar-event-apply-meta-modifier, modifier-bar-mode): New
	functions.

	* src/dispextern.h (enum tool_bar_item_idx): Add
	TOOL_BAR_ITEM_WRAP.

	* src/frame.c (make_frame): Clear new field `tool_bar_wraps_p'.

	* src/frame.h (struct frame): New field `tool_bar_wraps_p'.

	* src/keyboard.c (parse_tool_bar_item): Handle QCwrap properties
	in tool bar menu items.
	(syms_of_keyboard): New defsym QCwrap.

	* src/xdisp.c (build_desired_tool_bar_string): Clear
	f->tool_bar_wraps_p and set it appropriately.  Insert new line
	characters in the tool bar string upon encountering a wrap
	character.
	(display_tool_bar_line): Stop at EOB, not line end.  Reseat on the
	next line upon encountering EOL characters.
	(redisplay_tool_bar): Allow rows to be different heights if
	explicit new lines are present upon the tool bar string.

	* src/sfnt.c (sfnt_decompose_compound_glyph): Pacify warning.

2023-06-30  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_query_tree): Correctly return children.

2023-06-27  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Environment): Improve wording.

	* doc/emacs/android.texi (Android Environment): Fix typos.

	* src/android.c (android_exception_check)
	(android_exception_check_1)
	(android_exception_check_2)
	(android_exception_check_nonnull)
	(android_exception_check_nonnull_1): Tell the compiler to expect
	that the object is non-NULL, or that no exception has been thrown.

	* exec/loader-mips64el.s (rest_of_exec): Fix typo in comment.

2023-06-26  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/commands.texi (Touchscreen Events): Fix typo.

2023-06-26  Po Lu  <luangruo@yahoo.com>

	* lisp/calc/calc.el (calc-mode, calc): Make sure the on-screen
	keyboard is not hidden when a Calc buffer is created or a Calc
	Trail window is being created for the first time.

	* lisp/touch-screen.el (touch-screen-window-selection-changed):
	Take touch-screen-display-keyboard in to account.

	* src/sfnt.c (sfnt_decompose_compound_glyph)
	(sfnt_interpret_compound_glyph_1): Reset `defer_offsets' before
	processing each component.
	(sfnt_lerp_half): Avoid undefined shift of negative value.
	(sfnt_compute_tuple_scale): Pacify compiler warning.

2023-06-23  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsDrawRectangle.java (perform):
	* java/org/gnu/emacs/EmacsSdk7FontDriver.java (Sdk7FontEntity):
	(hasChar): Clean up dead stores.

	* src/android.c (android_wc_lookup_string): Fix typo.
	(android_wc_lookup_string): Check that GetStringChars returns
	non-NULL, not if it throws an exception.

2023-06-21  Po Lu  <luangruo@yahoo.com>

	* src/androidfns.c (android_set_tool_bar_position)
	(frame_geometry):
	* src/androidterm.c (android_flash)
	(android_clear_under_internal_border): Synchronize with X.

2023-06-20  Po Lu  <luangruo@yahoo.com>

	* src/androidfns.c (android_frame_parm_handlers): Fix typo.
	(android_set_tool_bar_position): New function.
	(android_frame_parm_handlers): Add new frame param handler.

2023-06-19  Po Lu  <luangruo@yahoo.com>

	* lib-src/Makefile.in (seccomp-filter$(EXEEXT)): Link with Gnulib.

	* java/org/gnu/emacs/EmacsView.java (EmacsView, dimensionsLock):
	New field.
	(<init>): Create new lock object.
	(handleDirtyBitmap, onLayout, onAttachedToWindow): Make sure
	measuredWidth and measuredHeight are extracted and set atomically.
	Send Expose upon layout changes if the view has grown.

	* exec/Makefile.in (clean): Add `exec1'.

2023-06-18  Po Lu  <luangruo@yahoo.com>

	* src/window.h (struct window): Improve documentation of
	`last_mark'.

	* src/xdisp.c (mark_window_display_accurate_1): Don't set
	`last_mark' to -1 if the mark is inactive.

	* lisp/textmodes/conf-mode.el (conf-mode-initialize): Set
	text-conversion-style.

2023-06-17  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (onCreate, run): Don't
	initialize signal mask here.

	* java/org/gnu/emacs/EmacsApplication.java (onCreate): Do it
	here instead.

	* src/android.c (JNICALL): Restore previous signal masks.

	* java/README: More documentation.

2023-06-16  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_write_event, JNICALL)
	(android_run_in_emacs_thread): Don't rely on raise to call
	deliver_process_signal.

	* 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.

2023-06-15  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection, beginBatchEdit, reset, endBatchEdit): Keep
	track of the number of batch edits and return an appropriate
	value.
	(takeSnapshot): Implement function.

	* java/org/gnu/emacs/EmacsNative.java (takeSnapshot): New
	function.

	* java/org/gnu/emacs/EmacsService.java (resetIC): Improve
	debugging output.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
	Call `reset' to clear the UI side batch edit count.

	* src/androidterm.c (struct android_get_surrounding_text_context):
	New fields `conversion_start' and `conversion_end'.
	(android_get_surrounding_text): Return the conversion region.
	(android_get_surrounding_text_internal, NATIVE_NAME): Factor out
	`getSurroundingText'.
	(takeSnapshot): New function.

2023-06-14  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection): Reimplement as an InputConnection, not
	BaseInputConnection.

	* src/androidterm.c (performEditorAction): Sync prior to sending
	keyboard events.

2023-06-13  Po Lu  <luangruo@yahoo.com>

	* etc/NEWS: Fix typo.

	* lisp/gnus/gnus-score.el (gnus-read-char): New function.
	(gnus-summary-increase-score): Use it to display a dialog box on
	Android, where input methods have trouble with plain old
	read-char.

2023-06-12  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Resolve
	dialog button style and use it instead.

	* java/org/gnu/emacs/EmacsView.java (EmacsView)
	(showOnScreenKeyboard, hideOnScreenKeyboard): Don't synchronize.

	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow)
	(toggleOnScreenKeyboard): Revert to calling IMM functions from the
	main thread.

	* src/android.c (struct android_event_container)
	(android_pselect_nfds, android_pselect_readfds)
	(android_pselect_writefds, android_pselect_exceptfds)
	(android_pselect_timeout): Don't make volatile.
	(android_wait_event): Run queries if necessary.

2023-06-11  Po Lu  <luangruo@yahoo.com>

	* lisp/net/tramp.el (tramp-encoding-shell):
	* lisp/obsolete/terminal.el (terminal-emulator):
	* lisp/term.el (term-exec-1):
	* lisp/textmodes/artist.el (artist-figlet-get-font-list):
	* src/android.c (JNICALL): Where /bin/sh was previously used, use
	/system/bin/sh on Android.

	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView):
	Document member variables.
	(onDraw): Use separate Paint object on the UI thread.

	* src/textconv.c (really_commit_text, really_set_composing_text)
	(really_delete_surrounding_text): Run modification hooks when
	deleting text.

	* java/org/gnu/emacs/EmacsView.java (EmacsView)
	(showOnScreenKeyboard, hideOnScreenKeyboard)
	(onCheckIsTextEditor): Make synchronized.

	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow)
	(toggleOnScreenKeyboard): Don't post to the main thread.

2023-06-10  Po Lu  <luangruo@yahoo.com>

	* src/keyboard.c (handle_input_available_signal): Don't generate
	instructions not available in arm mode.

	* src/android.c (android_select, android_check_query)
	(android_check_query_urgent, android_answer_query)
	(android_answer_query_spin, android_begin_query)
	(android_end_query)
	(android_run_in_emacs_thread): Use finer grained memory
	synchronization semantics.

	* src/androidterm.c (android_get_selection): Use the current
	selection, not its value at the time of the last redisplay.

	* src/keyboard.c (handle_input_available_signal): Place memory
	barrier.

	* src/textconv.c (really_commit_text)
	(really_set_composing_text): Improve behavior of certain
	fontification mechanisms by inheriting text properties from
	surrounding text.

	* src/android.c (android_select): Clear `android_urgent_query'.
	(android_check_query): Make static.  Clear `android_urgent_query'.
	(android_check_query_urgent): New function; work like
	`android_check_query', but only answer urgent queries.
	(android_answer_query, android_end_query): Clear urgent query
	flag.
	(android_run_in_emacs_thread): Initially wait two seconds for the
	query to run from the keyboard loop; upon a timeout, set
	`android_urgent_query' to true and wait for it to run while
	reading async input.

	* src/android.h: Update prototypes.

	* src/keyboard.c (handle_async_input): Call
	`android_check_query_urgent'.

2023-06-09  Po Lu  <luangruo@yahoo.com>

	* src/textconv.c (really_commit_text)
	(handle_pending_conversion_events): Fix minor typos.

	* src/androidterm.c (handle_one_android_event): Don't answer
	queries here; just rely on the event interrupting android_select.
	This avoids exposing buffer contents to input methods while a
	command is being executed.

	* src/textconv.c (TEXTCONV_DEBUG, really_commit_text)
	(really_finish_composing_text, really_set_composing_text)
	(really_set_composing_region, really_delete_surrounding_text)
	(really_set_point_and_mark, get_extracted_text): Add debugging
	printouts.

	* lisp/progmodes/cc-mode.el (c-initialize-cc-mode): Always add
	text conversion hooks.

	* src/android.c (android_get_gc_values): Remove redundancy.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
	function `setupSystemThread'.

	* java/org/gnu/emacs/EmacsService.java (onCreate): Block all
	signals except for SIGBUS and SIGSEGV in the UI thread.

	* src/android.c (setupSystemThread): New function.

	* java/org/gnu/emacs/EmacsThread.java (run): Correct check
	against extraStartupArgument when an initial file is specified.

2023-06-08  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu):
	Make subclasses final.

	* java/org/gnu/emacs/EmacsDialog.java (display1): Check if an
	instance of EmacsOpenActivity is open; if it is, try using it to
	display the pop up dialog.

	* java/org/gnu/emacs/EmacsDialogButtonLayout.java
	(EmacsDialogButtonLayout): Make final.

	* java/org/gnu/emacs/EmacsHolder.java (EmacsHolder<T>): Likewise.

	* java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity):
	New field `currentActivity'.
	(onCreate, onDestroy, onWindowFocusChanged, onPause): Set that
	field as appropriate.

	* src/android.c (android_is_special_directory): New function.
	(android_get_asset_name, android_content_name_p)
	(android_get_content_name):
	* src/android.h (android_is_special_directory)
	(JNI_STACK_ALIGNMENT_PROLOGUE):
	* src/fileio.c (check_mutable_filename):
	* src/filelock.c (WTMP_FILE, make_lock_file_name):
	* src/inotify.c (IN_ONLYDIR, Finotify_add_watch): Factor out
	checks against asset and content directories to that function.

2023-06-07  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Startup): Fix reference to non
	existent node.

	* java/org/gnu/emacs/EmacsInputConnection.java (beginBatchEdit)
	(endBatchEdit, commitCompletion, commitText)
	(deleteSurroundingText)
	(finishComposingText, getSelectedText, getTextAfterCursor)
	(getTextBeforeCursor, setComposingText, setComposingRegion)
	(performEditorAction, performContextMenuAction, getExtractedText)
	(setSelection, sendKeyEvent, deleteSurroundingTextInCodePoints)
	(requestCursorUpdates): Ensure that the input connection is up to
	date.
	(getSurroundingText): New function.

	* java/org/gnu/emacs/EmacsNative.java (getSurroundingText): Export
	new C function.

	* java/org/gnu/emacs/EmacsService.java (resetIC): Invalidate
	previously created input connections.

	* java/org/gnu/emacs/EmacsView.java (EmacsView)
	(onCreateInputConnection): Signify that input connections are
	now up to date.

	* src/androidterm.c (struct android_get_surrounding_text_context):
	New structure.
	(android_get_surrounding_text, NATIVE_NAME):
	* src/textconv.c (get_surrounding_text):
	* src/textconv.h: New functions.

2023-06-06  Po Lu  <luangruo@yahoo.com>

	* lisp/simple.el (analyze-text-conversion): Remove old workaround.

2023-06-06  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsContextMenu.java (display): Use
	`EmacsHolder' instead of `Holder'.

	* java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Use
	`EmacsDialogButtonLayout' to ensure that buttons are wrapped
	properly.
	(display): Adjust for new holder class.

	* java/org/gnu/emacs/EmacsDialogButtonLayout.java
	(EmacsDialogButtonLayout, onMeasure, onLayout): New functions.

	* java/org/gnu/emacs/EmacsDrawLine.java:
	* java/org/gnu/emacs/EmacsFillPolygon.java: Remove redundant
	imports.

	* java/org/gnu/emacs/EmacsHolder.java (EmacsHolder<T>):
	* java/org/gnu/emacs/EmacsService.java (class Holder<T>)
	(getEmacsView, EmacsService): Rename `Holder' to `EmacsHolder'
	and make it public.

2023-06-06  Po Lu  <luangruo@yahoo.com>

	* lisp/simple.el (undo-auto-amalgamate): Update doc string to
	describe new amalgamating commands.
	(analyze-text-conversion): Make this an amalgamating command by
	default, unless a new line has been inserted.  Also, shorten the
	undo boundary timer.

	* src/textconv.c (really_commit_text)
	(really_set_composing_text): Correctly report ephemeral deletions.
	(syms_of_textconv): Fix doc strings.

2023-06-05  Po Lu  <luangruo@yahoo.com>

	* src/androidterm.c (android_handle_ime_event): Clear batch edit
	state, in case the previous input method forgot to do so.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
	function clearInputFlags.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
	Stop reporting changes after a new input method connection is
	established.

	* src/androidterm.c (android_handle_ime_event): Implement that
	change.
	(JNICALL): New function.

2023-06-04  Po Lu  <luangruo@yahoo.com>

	* src/keyboard.c: Fix build without window system

	* configure.ac: Tune pty detection for Android.

	* java/debug.sh (gdbserver_cmd, is_root): Prefer TCP again.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function
	`queryAndSpin'.

	* java/org/gnu/emacs/EmacsService.java (EmacsService)
	(icBeginSynchronous, icEndSynchronous, viewGetSelection): New
	synchronization functions.
	(resetIC, updateCursorAnchorInfo): Call those instead.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
	Call viewGetSelection.

	* src/android.c (JNICALL, android_answer_query_spin): New
	functions.

2023-06-03  Po Lu  <luangruo@yahoo.com>

	* lisp/bindings.el (global-map): Bind cut, copy and paste.

	* src/androidterm.c (JNICALL): Use key.

	* src/textconv.c (really_commit_text)
	(really_set_composing_text): Delete text between mark and point if
	the mark is active.  Don't record changes if the text is empty.

	* src/androidterm.c (struct android_get_extracted_text_context):
	New field `mark_active'.
	(android_get_extracted_text): Set that field.
	(struct android_extracted_text_class): New field `flags'.
	(android_build_extracted_text): New argument `mark_active'.  Set
	flags appropriately.
	(NATIVE_NAME, android_update_selection): Likewise.

	* src/textconv.c (get_extracted_text): New argument
	`mark_active'.  Set it if the mark is active.

	* src/textconv.h: Update prototypes.

	* etc/MACHINES: Fix reference to obsolete file.

2023-06-02  Po Lu  <luangruo@yahoo.com>

	* lisp/emacs-lisp/eldoc.el ("back-to-indentation"): Register touch
	screen and text conversion commands.

	* lisp/progmodes/cc-cmds.el (c-post-text-conversion): New
	function.

	* lisp/progmodes/cc-mode.el (c-initialize-cc-mode): Add it as the
	`post-texxt-conversion-hook'.

	* lisp/simple.el (post-text-conversion-hook): New hook.
	(analyze-text-conversion): Run it until success before trying post
	insert functions.

	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection): Apply workarounds on Vivo devices as well.

	* src/android.c (sendKeyPress, sendKeyRelease): Clear counter.

	* src/androidgui.h (struct android_key_event): New field
	`counter'.

	* src/androidterm.c (handle_one_android_event): Generate barriers
	as appropriate.
	(JNICALL): Set `counter'.

	* src/frame.h (enum text_conversion_operation):
	* src/textconv.c (detect_conversion_events)
	(really_set_composing_text, handle_pending_conversion_events_1)
	(handle_pending_conversion_events, textconv_barrier):
	* src/textconv.h: Implement text conversion barriers and fix
	various typos.

2023-06-01  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (browseUrl): If uri's
	scheme is `file', rewrite it into a content URI.

	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection, performContextMenuAction): New function.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative)
	(performContextMenuAction): New function.

	* src/android.c (android_get_gc_values): Implement more
	efficiently.

	* src/androidterm.c (android_handle_ime_event): Pass through
	`update' argument to `finish_composing_text'.  Fix thinko.

	* src/textconv.c (really_finish_composing_text)
	(really_set_composing_text, really_set_composing_region)
	(handle_pending_conversion_events_1, finish_composing_text): New
	argument `update'.  Notify IME of conversion region changes if
	set.

	* src/textconv.h: Update structs and prototypes.

	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection): Add compatibility adjustments for Samsung
	devices.

	* src/androidterm.c (struct android_get_extracted_text_context):
	New field `start_offset' and `end_offset'.  Delete `offset'.
	(android_get_extracted_text, android_build_extracted_text):
	Replace `offset' with new args `start_offset' and `end_offset'.
	(NATIVE_NAME): Set `start_offset' and `end_offset'.
	(android_update_selection): Likewise.

	* src/textconv.c (get_extracted_text): Likewise.

	* src/textconv.h: Update prototypes.

2023-05-31  Po Lu  <luangruo@yahoo.com>

	* configure.ac: Pass through `--enable-check-lisp-object-type' on
	Android.

	* src/alloc.c (android_make_lisp_symbol):
	* src/android.c:
	* src/androidfns.c (android_set_no_focus_on_map)
	(android_set_no_accept_focus):
	* src/androidfont.c (androidfont_match, androidfont_open_font):
	* src/androidselect.c (Fandroid_get_clipboard)
	(Fandroid_get_clipboard_targets):
	* src/keyboard.c (make_lispy_event, syms_of_keyboard):
	* src/sfntfont.c (sfnt_enum_font_1, sfntfont_list_1):
	* src/textconv.c (really_set_point_and_mark): Fix Lisp_Object and
	integer screw-ups.

	* doc/emacs/input.texi (Other Input Devices, Touchscreens)
	(On-Screen Keyboards):
	* doc/lispref/commands.texi (Misc Events):
	* src/android.c (android_faccessat): Improve word choices and
	commentary.

	* lisp/touch-screen.el (touch-screen-handle-scroll): Make
	precision scrolling work better with horizontal movement.

	* src/android.c (android_copy_area): Pacify compiler warning.

	* exec/exec.c (insert_args): New argument `arg3'.  Replace argv[1]
	with that argument.
	(exec_0): Pass file name of script to `insert_args'.

	* doc/emacs/android.texi (What is Android?, Android Startup)
	(Android File System, Android Environment, Android Windowing)
	(Android Troubleshooting): Improve wording and various other
	issues.

	* java/debug.sh (is_root): Go back to using unix sockets; allow
	adb to forward them correctly.

	* java/org/gnu/emacs/EmacsInputConnection.java
	(getExtractedText): Don't print text if NULL.

	* java/org/gnu/emacs/EmacsService.java (EmacsService): New field
	`imSyncInProgress'.
	(updateIC): If an IM sync might be in progress, avoid deadlocks.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
	Set `imSyncInProgress' across synchronization point.

	* src/android.c (android_check_query): Use __atomic_store_n.
	(android_answer_query): New function.
	(android_begin_query): Set `android_servicing_query' to 2.  Check
	once, and don't spin waiting for query to complete.
	(android_end_query): Use __atomic_store_n.
	(android_run_in_emacs_thread): Compare-and-exchange flag.  If
	originally 1, fail.

	* src/textconv.c (really_set_composing_text): Clear conversion
	region if text is empty.

2023-05-29  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_blit_copy, android_blit_xor): Fix typos.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function
	`blitRect'.

	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): Use
	it on Android 8.x.

	* src/android.c (blitRect): Implement new function.
	(android_neon_mask_line): Fix iteration over remainder.
	(android_blit_copy): Be more paranoid.

	* java/org/gnu/emacs/EmacsCopyArea.java: Remove file.

	* java/org/gnu/emacs/EmacsService.java (copyArea): Delete
	function.

	* src/android.c (struct android_emacs_service)
	(android_init_emacs_service): Remove `copy_area'.
	(android_create_gc, android_change_gc, android_get_gc_values):
	Record new GC values.
	(android_neon_mask_line): New function.
	(android_blit_copy, android_blit_xor): New functions.
	(android_copy_area): Implement in C.
	(android_lock_bitmap): Accept drawables instead of windows.

	* src/android.h: Adjust prototype for `android_lock_bitmap'.

	* src/androidgui.h (struct android_gc): Record last known GC
	values.

2023-05-27  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (EmacsService)
	(checkEmacsThread): New function.
	(fillPolygon, drawRectangle, drawLine, drawPoint, copyArea)
	(clearArea):
	* java/org/gnu/emacs/EmacsThread.java (EmacsThread):
	* java/org/gnu/emacs/EmacsView.java (EmacsView, swapBuffers): Call
	where appropriate.

	* java/org/gnu/emacs/EmacsView.java (EmacsView, swapBuffers):
	Remove unnecessary documentation.  `damageRegion' is only changed
	from the Emacs thread.

2023-05-26  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Troubleshooting): Document
	`debug-init' option.

	* java/AndroidManifest.xml.in
	(EmacsLauncherPreferencesActivity): New activity.  Export on
	systems older than Android 7.0.

	* java/org/gnu/emacs/EmacsActivity.java (onCreate): Adjust for
	string startup argument.

	* java/org/gnu/emacs/EmacsLauncherPreferencesActivity.java: New
	file.

	* java/org/gnu/emacs/EmacsPreferencesActivity.java
	(EmacsPreferencesActivity): Don't make final.
	(startEmacsQ): Give start-up argument as an argument, not as a
	boolean.
	(startEmacsDebugInit): New function.
	(onCreate): Register new listener; make final.

	* java/org/gnu/emacs/EmacsService.java (onCreate): Pass
	extraStartupArgument.

	* java/org/gnu/emacs/EmacsThread.java (EmacsThread): Rename
	startDashQ to extraStartupArgument.
	(run): Adjust accordingly.

	* java/res/values-v24/bool.xml:
	* java/res/values/bool.xml:
	* java/res/values/strings.xml: New files.

	* java/res/xml/preferences.xml: Add new option.  Move string
	resources around.

2023-05-24  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_decompose_compound_glyph): Allow decomposing up
	to 16 nested components.
	(CALL, LOOPCALL): Correctly error if no fdef storage exists.
	(sfnt_interpret_run): New label `next_instruction', for CALL.
	(sfnt_interpret_compound_glyph_1): Allow decomposing up to 16
	nested components.  Prevent crash if there are no end points or
	points.
	(sfnt_read_cvar_table): Prevent assigning uninitialized values.
	(sfnt_vary_simple_glyph): Update commentary.

2023-05-23  Po Lu  <luangruo@yahoo.com>

	* exec/exec.c (exec_0): Use strcpy.

2023-05-20  Po Lu  <luangruo@yahoo.com>

	* exec/trace.c (handle_clone_prepare, handle_clone): When
	!REENTRANT, use malloc to allocate tracees after running out of
	static ones.

	* java/org/gnu/emacs/EmacsView.java (swapBuffers): Restore missing
	damage rect code.
	(onDetachedFromWindow): Remove redundant synchronization.

2023-05-19  Po Lu  <luangruo@yahoo.com>

	* lisp/touch-screen.el (touch-screen-tap-header-line): New
	function.
	([header-line touchscreen-begin]): Define to
	`touch-screen-tap-header-line'.

2023-05-18  Po Lu  <luangruo@yahoo.com>

	* make-dist (possibly_non_vc_files): Add Android-specific files.

	* doc/emacs/frames.texi (Tab Bars): Explain how to interact with
	the tab bar from a touch screen.

	* doc/emacs/input.texi (Touchscreens): Document exactly what a
	``long press'' is.

	* doc/emacs/windows.texi (Tab Line): Likewise.

	* lisp/tab-line.el (tab-line-tab-map, tab-line-add-map)
	(tab-line-tab-close-map, tab-line-left-map, tab-line-right-map):
	Bind `touchscreen-begin' to each command.
	(tab-line-track-tap, tab-line-event-start): New functions.
	(tab-line-hscroll-right, tab-line-hscroll-left, tab-line-new-tab)
	(tab-line-select-tab, tab-line-close-tab): Use them.

2023-05-16  Po Lu  <luangruo@yahoo.com>

	* lisp/menu-bar.el (popup-menu-normalize-position): Normalize
	`touchscreen-begin' events correctly.

	* lisp/tab-bar.el (tab-bar-mouse-context-menu): New argument POSN.
	Use it if specified.
	(touch-screen-track-tap, tab-bar-handle-timeout)
	(tab-bar-touchscreen-begin): New functions.
	(tab-bar-map): Bind [tab-bar touchscreen-begin].

	* lisp/touch-screen.el (touch-screen-track-drag): Fix doc
	string.

	* src/dispextern.h: Export `get_tab_bar_item_kbd'.

	* src/keyboard.c (coords_in_tab_bar_window): New function.
	(make_lispy_event): Adjust touchscreen begin event mouse
	position list for tab bar.

	* src/xdisp.c (tab_bar_item_info): Allow CLOSE_P to be NULL.
	(get_tab_bar_item): Adjust doc string.
	(get_tab_bar_item_kbd): New function.

2023-05-15  Po Lu  <luangruo@yahoo.com>

	* configure.ac: Also disable enable_year2038.

	* msdos/sed1v2.inp: Fix removal of ANDROID_BUILD_CFLAGS.
	* msdos/sedlibmk.inp: Clear DIR_HAS_FD_MEMBER and LOCALE_FR_UTF8.

2023-05-14  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsDocumentsProvider.java
	(notifyChangeByName): New function.
	(queryDocument1): Set FLAG_SUPPORTS_MOVE where necessary.
	(moveDocument): Implement new function.

2023-05-08  Po Lu  <luangruo@yahoo.com>

	* java/Makefile.in (install_temp/assets/version): Fix generation
	in out of tree builds.

2023-05-07  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsInputConnection.java
	(requestCursorUpdates):
	* java/org/gnu/emacs/EmacsNative.java (requestCursorUpdates):
	* java/org/gnu/emacs/EmacsService.java (updateCursorAnchorInfo):
	New functions.

	* src/android.c (struct android_emacs_service)
	(android_init_emacs_service): Add new method.
	(android_update_cursor_anchor_info): New function.

	* src/androidfns.c (android_set_preeditarea): New function.

	* src/androidgui.h (enum android_ime_operation): New operation
	`REQUEST_CURSOR_UPDATES'.
	(struct android_ime_event): Document new meaning of `length'.

	* src/androidterm.c (android_request_cursor_updates): New
	function.
	(android_handle_ime_event): Handle new operations.
	(handle_one_android_event, android_draw_window_cursor): Update
	the preedit area if needed, like on X.
	(requestCursorUpdates): New function.

	* src/androidterm.h (struct android_output): New field
	`need_cursor_updates'.

2023-05-06  Po Lu  <luangruo@yahoo.com>

	* configure.ac (LIBGMP_CFLAGS): Avoid non portable test
	expression.

	* cross/verbose.mk.android (AM_V_CC): Get rid of badly aligned
	ANDROID_CC messages.

	* java/org/gnu/emacs/EmacsInputConnection.java (syncAfterCommit)
	(extractAbsoluteOffsets): Add workarounds for several kinds of
	machines.
	(commitText, getExtractedText): Likewise.

	* src/textconv.c (really_commit_text): Improve definition of
	POSITION.
	(get_extracted_text): Default to providing at least 4 characters.

2023-05-05  Po Lu  <luangruo@yahoo.com>

	* exec/exec.h (struct exec_tracee): New field `new_child'.  Also
	make `waiting_for_syscall' a bitfield.

	* exec/trace.c (PTRACE_GETEVENTMSG): New declaration.
	(MAX_TRACEES): Bump to 4096.
	(handle_clone_prepare): New function.
	(handle_clone): If required, set `new_child' and wait for a ptrace
	event describing the parent to arrive.
	(after_fork): Clear new field.
	(exec_waitpid): Upon a ptrace event describing a clone, create the
	child's tracee if it doesn't already exist.  Otherwise, copy over
	the parent's cmdline and start running it.

	* doc/emacs/android.texi (Android Environment): Document lossage
	with SIGSTOP.

	* exec/exec.c (exec_0): Check X_OK on file being opened.  Also
	handle /proc/self/exe.

	* exec/trace.c (SYS_SECCOMP): Define when not present.

2023-05-04  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Environment): Describe how to
	turn off process killing.

	* exec/trace.c (check_signal): New function.
	(handle_exec, process_system_call): Handle signal-delivery-stop
	while waiting synchronously for syscall completion.

2023-05-03  Po Lu  <luangruo@yahoo.com>

	* exec/config.h.in: Update from new automatically generated
	headers.

	* exec/configure.ac: Check for siginfo_t.si_syscall.

	* exec/trace.c (exec_waitpid): If SIGSYS is received, and caused
	by seccomp, drop it should the call number be the invalid system
	call used by Emacs.

	* exec/configure.ac: Use system extensions.
	(HAVE_PROCESS_VM): Define if process_vm_readv and
	process_vm_writev are available.

	* exec/trace.c (read_memory, user_copy): Implement in terms of
	process_vm if possible.

	* exec/loader-mipsel.s (__start): Remove extraneous debugging
	code.

	* exec/Makefile.in: (.PHONY): Add `bootstrap-clean' and
	`extraclean'.
	(bootstrap-clean): New rule.

	* java/Makefile.in (FIND_DELETE): New substitution.
	(clean): Use FIND_DELETE.

2023-05-02  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Environment): Improve doc.

	* exec/config.h.in (__bool_true_false_are_defined):
	* exec/configure.ac (REENTRANT): New definitions.
	(READLINKAT_SYSCALL, READLINK_SYSCALL): New defines.  Set on all
	hosts.

	* exec/exec.c (MIN, MAX): Remove redundant declarations.  Move to
	config.h.
	(exec_0): Copy name of executable into NAME when !REENTRANT.

	* exec/exec.h (struct exec_tracee): New struct `exec_file'.

	* exec/trace.c (remove_tracee, handle_exec, handle_readlinkat)
	(process_system_call, after_fork): Handle readlinkat system calls.

	* exec/Makefile.in (.SUFFIXES): Include ., then `srcdir'.

	* exec/loader-aarch64.s (_start):
	* exec/loader-armeabi.s (_start):
	* exec/loader-mips64el.s (__start):
	* exec/loader-mipsel.s (__start):
	* exec/loader-x86.s (_start):
	* exec/loader-x86_64.s (_start): Get basename of opened exec file
	and make it the command name.  Fix envp skipping on x86 and
	various leaks.

	* exec/configure.ac: Check for declarations of stpcpy and stpncpy.

	* exec/exec.c (stpcpy, stpncpy): Use replacements if declarations
	are not present; this happens when a new Android NDK is building
	for an old version of Android.

2023-05-01  Po Lu  <luangruo@yahoo.com>

	* exec/config.h.in: Update config.h.in.

	* exec/configure.ac: Check for stpcpy and stpncpy.

	* exec/exec.c (rpl_stpcpy, rpl_stpncpy): Define replacements when
	they are not present on the system.
	(process_program_header): Fill comment.

	* src/term.c (syms_of_term): Pretend Android uses TERMINFO.

	* exec/exec.c (format_pid): New function.
	(exec_0): Make cwd relative file names relative to /proc/pid/cwd.

	* exec/trace.c (handle_exec): Handle EINTR.

	(process_system_call): Report failure without clobbering x0.

	* README: Describe `exec' directory.

	* lisp/subr.el (use-dialog-box-p): Always prefer dialog boxes.

	* src/android.c (android_write_event, JNICALL): Raise SIGIO on key
	press and window action events.

	* exec/trace.c (process_system_call): Save and restore x0, x1 and
	x2 regs after replacing them with an invalid file descriptor.

	* Makefile.in (extraclean): Clean in exec as well.

	* configure.ac: Fix detection of absolute srcdir.  Also, pass
	CFLAGS.

	* exec/Makefile.in: (.c.o): Add -I. so config.h can be found.
	(.s.o): Don't create m4 temporary in srcdir.

	* exec/config-mips.m4.in (DADDI2, DADDI3): New macros.  Define to
	substitute if as cannot assemble daddi.

	* exec/configure.ac (user_h): Look for user.h in asm/ as well.
	Use new user.h.  Also look in ptrace.h on arm systems.  Check if
	as supports daddi on mips64.

	* exec/exec.c (check_interpreter): Fix char signedness bug.

	* exec/loader-mips64el.s (__start): Use DADDI2 and DADDI3 for two-
	and 3-operand daddi.

	* exec/mipsel-user.h: Don't include sgidefs.h.

	* java/INSTALL: Document that m4 is now required.

	* src/android.c (android_rewrite_spawn_argv): Add missing NULL.

	* doc/emacs/android.texi (Android Environment): Document
	`android-use-exec-loader'.

	* exec/exec1.c (main): Set program group of child process.

	* src/android.c (android_rewrite_spawn_argv): New function.

	* src/android.h: Update prototypes.

	* src/androidfns.c (syms_of_androidfns): New variable
	`android_use_exec_loader'.

	* src/callproc.c (emacs_spawn): Rewrite the argument vector to use
	exec1 if necessary.

	* .gitignore: Add exec/configure.

2023-04-30  Po Lu  <luangruo@yahoo.com>

	* .gitignore: New files.

	* Makefile.in (mostlyclean_dirs): Add libexec, if its Makefile
	exists.

	* autogen.sh (do_git): Autoreconf in exec as well.

	* configure.ac: Configure libexec on Android.

	* exec/Makefile.in:
	* exec/README:
	* exec/config-mips.m4.in:
	* exec/config.guess:
	* exec/config.h.in:
	* exec/config.sub:
	* exec/configure:
	* exec/configure.ac:
	* exec/deps.mk:
	* exec/exec.c (MIN, struct exec_open_command)
	(struct exec_map_command, struct exec_jump_command)
	(write_open_command, write_load_command, process_interpreter_1)
	(process_interpreter, process_program_header, insert_args)
	(exec_0):
	* exec/exec.h (_EXEC_H_, struct elf_header_32)
	(struct program_header_32, struct dt_entry_32)
	(struct elf_header_64, struct program_header_64)
	(struct dt_entry_64, struct exec_tracee):
	* exec/exec1.c (main):
	* exec/install-sh (scriptversion):
	* exec/loader-aarch64.s (_start):
	* exec/loader-armeabi.s (_start):
	* exec/loader-mips64el.s (__start):
	* exec/loader-mipsel.s (__start):
	* exec/loader-x86.s (_start):
	* exec/loader-x86_64.s (_start):
	* exec/mipsel-user.h (_MIPSEL_USER_H_):
	* exec/mipsfpu.c (MIPS_ABI_FP_ANY, fpu_reqs, valid_abi_p)
	(fp_mode_for_abi, cpu_supports_fr0_p, determine_fpu_mode):
	* exec/mipsfpu.h (_MIPSFPU_H_, FP_FR0):
	* exec/test.c (print_usage, main):
	* exec/trace.c (MAX_TRACEES, aarch64_set_regs, read_memory)
	(user_alloca, user_copy, remove_tracee, handle_clone)
	(syscall_trap_p, handle_exec, process_system_call, tracing_execve)
	(after_fork, find_tracee, exec_waitpid, exec_init): New files.
	* java/Makefile.in (CROSS_EXEC_BINS): Add exec1 and loader.
	($(CROSS_EXEC_BINS) &): New target.

2023-04-29  Po Lu  <luangruo@yahoo.com>

	* build-aux/ndk-build-helper.mk (TARGET_ARCH): Define variable.

	* configure.ac (ENABLE_CHECKING, CHECK_STRUCTS)
	(GC_CHECK_STRING_OVERRUN, GC_CHECK_STRING_FREE_LIST, GLYPH_DEBUG)
	(GC_CHECK_STRING_BYTES): Enable checking correctly on Android.

	* java/README: Fix typos.

	* m4/ndk-build.m4 (ndk_run_test): Pass target arch.

	* src/android.c (android_get_content_name, android_close)
	(android_fclose, android_check_string): Fix various typos caught
	by checking.

	* src/charset.c (load_charset_map_from_file): Call emacs_fclose,
	not fclose.

	* src/image.c (image_set_transform): Fix thinko.
	(png_load_body, jpeg_load_body, gif_load): Call emacs_fclose, not
	fclose.  Use open instead of fdopen.

	* src/xfaces.c (Fx_load_color_file): Likewise.

2023-04-27  Po Lu  <luangruo@yahoo.com>

	* src/image.c (image_create_bitmap_from_data): Fix typo in
	preprocessor conditionals.

	* doc/emacs/android.texi (Android File System, Android Windowing):
	Make Emacs manual more portable.

	* doc/lispref/commands.texi (Misc Events):
	* doc/lispref/frames.texi (Accessing Selections, X Selections):
	Fix pieces of the Info manual.

2023-04-26  Po Lu  <luangruo@yahoo.com>

	* lisp/play/doctor.el (text-conversion-style, doctor-mode):
	* lisp/play/dunnet.el (text-conversion-style, dun-mode): Set
	`text-conversion-style' to `action'.

2023-04-13  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Fonts): Update documentation.

	* doc/lispref/frames.texi (Accessing Selections, X Selections):
	Fix typos.

	* src/sfntfont-android.c (system_font_directories)
	(init_sfntfont_android): Add `/product/fonts'.

2023-04-08  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/elisp.texi (Top):
	* doc/lispref/frames.texi (Frames): Add ``Accessing Selections''
	to menu.
	(Accessing Selections, X Selections, Other Selections): New nodes.

2023-04-06  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Windowing): Update selection
	restrictions.

	* java/org/gnu/emacs/EmacsClipboard.java (EmacsClipboard): New
	functions `getClipboardTargets' and `getClipboardData'.

	* java/org/gnu/emacs/EmacsSdk11Clipboard.java
	(EmacsSdk11Clipboard, getClipboardTargets, getClipboardData):
	Implement these virtual functions defined in EmacsClipboard.

	* java/org/gnu/emacs/EmacsSdk8Clipboard.java: Stub out new
	functions.

	* lisp/term/android-win.el (android-get-clipboard-1): Implement
	MIME type targets.

	* src/android.c (android_exception_check)
	(android_exception_check_1, android_exception_check_2): Fix
	punctuation in warning message.
	(android_exception_check_nonnull_1): New function.

	* src/android.h: Update prototypes.

	* src/androidselect.c (struct android_emacs_clipboard): New
	methods.
	(android_init_emacs_clipboard): Initialize new methods.
	(Fandroid_get_clipboard_targets, android_xfree_inside)
	(Fandroid_get_clipboard_data): New functions.
	(syms_of_androidselect): Define new subrs.

2023-04-04  Po Lu  <luangruo@yahoo.com>

	* lisp/subr.el (read-char-from-minibuffer): Don't use undefined
	variable.  Reported by Robert Pluim.

2023-04-03  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_normalize_vector): Don't rely on undefined
	sign extension semantics.

2023-03-30  Po Lu  <luangruo@yahoo.com>

	* src/sfntfont.c: Adjust font cache size constants.

	* src/sfnt.c (GETINFO): Fix typo.

	* src/sfnt.h: Fix typo.

	* src/sfnt.c (sfnt_make_interpreter): New argument `fvar'.  Set
	axis count.
	(SCANCTRL): Implement selector bit 8.
	(GXAXIS): New instruction.
	(SFVTPV): Validate graphics state after changing freedom vector.
	(sfnt_line_to_vector): Implement `original'.
	(sfnt_move): Remove redundant division.
	(sfnt_interpret_run): Implement distortable font related GXAXIS
	instruction (0x91).
	(sfnt_vary_interpreter): Set naxis and norm_coords.
	(sfnt_make_test_interpreter, pushb_test_args, pushw_test_args)
	(sfnt_name_instruction, main): Adjust accordingly.

	* src/sfnt.h (struct sfnt_interpreter):
	* src/sfntfont.c (sfntfont_setup_interpreter, sfntfont_open): Set
	up distortion information.

2023-03-29  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Fonts): Document distortable
	font replacement rules.

	* src/sfntfont.c (sfnt_replace_fonts_p): New function.
	(sfnt_enum_font_1): Call it.

	* src/sfnt.c (sfnt_move_x, sfnt_move_y, sfnt_move): Set N flags
	and don't forget to set N points too.
	(sfnt_read_avar_table): Fix sequencing problem.

	* src/sfntfont.c (sfntfont_setup_interpreter): Don't create
	interpreter for blatantly broken fonts.
	(sfntfont_open): Avoid specifying redundant blends.

	* src/sfnt.c (sfnt_validate_gs): Fix validation of projection
	vector.

2023-03-28  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_vary_compound_glyph):
	* src/sfntfont.c (sfntfont_get_glyph)
	(sfntfont_get_glyph_outline): Avoid clobbering offset size flag
	when varying compound glyph.

	* src/sfnt.c (sfnt_vary_simple_glyph, sfnt_vary_compound_glyph):
	Fix application of intermediate tuples.
	* src/sfntfont.c (sfntfont_open): Set xlfd name after applying
	distortion.

	* src/sfnt.h (SFNT_ROUND_FIXED):
	* src/sfntfont.c (sfntfont_probe_widths):
	(sfntfont_measure_pcm): Round lbearing properly.
	(sfnt_open_tables): Fix typos in non-HarfBuzz code.

	* src/androidterm.c (android_draw_image_glyph_string): Restore
	potentially clobbered GC clipping.

	* src/sfnt.c (sfnt_large_integer_add, sfnt_multiply_divide_round)
	(sfnt_mul_fixed_round): New functions.
	(sfnt_build_glyph_outline): Take unscaled glyph metrics.
	(sfnt_prepare_raster, sfnt_vary_simple_glyph)
	(sfnt_vary_compound_glyph, sfnt_vary_interpreter): Use rounding
	multiplication to scale deltas.
	(main): Adjust tests.

	* src/sfntfont.c (sfntfont_get_glyph_outline)
	(sfntfont_probe_widths, sfntfont_open, sfntfont_measure_pcm)
	(sfntfont_draw): More minor fixes to variable fonts.

2023-03-27  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_normalize_blend): Don't crash when axis
	variations are not present.

	* configure.ac (HAVE_OTF_GET_VARIATION_GLYPHS): Check for
	`hb_font_set_var_named_instance'.

	* src/sfnt.c (main): Update tests.

	* src/sfntfont-android.c (Fandroid_enumerate_fonts): Blacklist
	bad font.

	* src/sfntfont.c (struct sfnt_font_tables, struct sfnt_font_desc)
	(sfnt_decode_instance_name, sfnt_weight_descriptions)
	(sfnt_enum_font_1, sfntfont_list_1, sfntfont_desc_to_entity)
	(sfntfont_list, struct sfntfont_get_glyph_outline_dcontext)
	(sfntfont_get_glyph, sfntfont_get_glyph_outline)
	(struct sfnt_font_info, sfnt_close_tables, sfnt_open_tables)
	(sfntfont_open, sfntfont_measure_pcm, sfntfont_close)
	(sfntfont_draw, sfntfont_begin_hb_font, syms_of_sfntfont)
	(mark_sfntfont): Handle variable fonts correctly.

	* src/sfnt.c (sfnt_build_glyph_outline): Take scale, not head
	and pixel size.
	(sfnt_scale_metrics_to_pixel_size): Delete function.
	(sfnt_get_scale): New function.
	(main): Update tests.

	* src/sfnt.h: Update prototypes.

	* src/sfntfont.c (struct sfnt_outline_cache)
	(sfntfont_get_glyph_outline, struct sfnt_font_info)
	(sfntfont_open): Save scale in font information and use it.
	(sfntfont_measure_instructed_pcm): Delete function.
	(sfntfont_measure_pcm): Make this the only ``measure pcm''
	function.
	(sfntfont_draw): Rely on sfntfont_get_glyph_outline for the scale.
	(struct sfnt_font_tables): New structure.
	(struct sfnt_font_desc): New field `tables'.
	(struct sfnt_font_info): New field `desc'.
	(sfntfont_setup_interpreter): Drop fd arguments and don't try to
	load interpreter tables.
	(sfnt_open_tables, sfnt_close_tables): New functions.
	(sfnt_reference_font_tables, sfnt_dereference_font_tables): New
	functions.
	(sfntfont_open, sfntfont_close): Implement in terms of those
	functions in order to share tables.

2023-03-26  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_table_names): Add avar.
	(sfnt_read_glyph): Clear distortion fields.
	(sfnt_build_glyph_outline): Calculate the outline origin point.
	(sfnt_prepare_raster): Apply the origin point to the X axis
	offset.
	(sfnt_scale_metrics_to_pixel_size): New function.
	(sfnt_build_instructed_outline): Use instructed origin phantom
	point to determine the outline origin.
	(sfnt_compute_phantom_points): Apply origin and advance
	distortion.
	(struct sfnt_variation_axis, struct sfnt_instance)
	(struct sfnt_fvar_table, sfnt_read_fvar_table)
	(struct sfnt_gvar_table, sfnt_read_gvar_table)
	(sfnt_read_avar_table, struct sfnt_blend, sfnt_init_blend)
	(sfnt_free_blend, sfnt_normalize_blend, struct sfnt_tuple_header)
	(struct sfnt_gvar_glyph_header, sfnt_read_packed_deltas)
	(sfnt_compute_tuple_scale, sfnt_read_cvar_table)
	(sfnt_infer_deltas_1, sfnt_vary_simple_glyph, sfnt_infer_deltas)
	(sfnt_vary_glyph, sfnt_vary_compound_glyph)
	(sfnt_vary_interpreter): New functions.  Add structs to
	sfntfont.h.
	(struct sfnt_test_dcontext, sfnt_test_get_glyph, main): Test
	distortable font handling.

	* src/sfnt.h (SFNT_ENABLE_HINTING, enum sfnt_table)
	(struct sfnt_glyph, struct sfnt_glyph_outline, struct sfnt_raster)
	(struct sfnt_default_uvs_table, struct sfnt_unicode_value_range)
	(struct sfnt_nondefault_uvs_table, struct sfnt_uvs_mapping)
	(struct sfnt_mapped_variation_selector_record)
	(struct sfnt_table_offset_rec, struct sfnt_uvs_context)
	(struct sfnt_mapped_table, struct sfnt_variation_axis)
	(struct sfnt_instance, struct sfnt_fvar_table)
	(struct sfnt_short_frac_correspondence)
	(struct sfnt_short_frac_segment, struct sfnt_avar_table)
	(struct sfnt_tuple_variation, struct sfnt_cvar_table)
	(struct sfnt_gvar_table, struct sfnt_blend)
	(struct sfnt_metrics_distortion): Update prototypes.

	* src/sfntfont.c (sfntfont_get_glyph_outline)
	(sfntfont_measure_pcm): Adjust calls.

2023-03-24  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_table_names): Add fvar, gvar, cvar.
	(sfnt_read_maxp_table): Call xmalloc, not malloc.
	(sfnt_read_simple_glyph): Avoid use-after-free if simple is
	invalid.
	(sfnt_fill_span): Fix max coverage.
	(sfnt_normalize_vector): Fail if magnitude is zero.
	(sfnt_measure_distance): Fix opcode order.
	(sfnt_dot_fix_14): Fix implementation.
	(struct sfnt_variation_axis, struct sfnt_instance)
	(struct sfnt_fvar_table, struct sfnt_gvar_table)
	(sfnt_read_fvar_table, sfnt_read_gvar_table, struct sfnt_blend)
	(sfnt_init_blend, sfnt_free_blend, sfnt_normalize_blend)
	(struct sfnt_tuple_header, struct sfnt_gvar_glyph_header)
	(sfnt_read_packed_points, sfnt_read_packed_deltas)
	(sfnt_compute_tuple_scale, sfnt_infer_deltas_1, sfnt_infer_deltas)
	(sfnt_vary_glyph): Add WIP variation glyph implementation.

	* src/sfnt.h (enum sfnt_table, struct sfnt_simple_glyph):
	Likewise.

2023-03-20  Po Lu  <luangruo@yahoo.com>

	* java/INSTALL: Fix typo.

	* configure.ac: Add support for HarfBuzz on Android.

	* java/INSTALL: Document where to get Emacs with HarfBuzz.

	* lisp/subr.el (overriding-text-conversion-style, y-or-n-p):
	Correctly set text conversion style if y-or-n-p is called inside
	the minibuffer.

	* src/sfnt.c (sfnt_read_cmap_format_8)
	(sfnt_read_cmap_format_12): Fix typos.
	(sfnt_read_24, sfnt_read_cmap_format_14): New function.
	(sfnt_read_cmap_table_1, sfnt_read_cmap_table): Handle format 14
	cmap tables.
	(sfnt_read_default_uvs_table, sfnt_read_nondefault_uvs_table)
	(sfnt_compare_table_offsets, sfnt_create_uvs_context)
	(sfnt_free_uvs_context, sfnt_compare_uvs_mapping)
	(sfnt_variation_glyph_for_char, sfnt_map_table, sfnt_unmap_table)
	(sfnt_read_table, sfnt_test_uvs): New functions.
	(main): Add UVS tests.

	* src/sfnt.h (struct sfnt_cmap_format_14)
	(struct sfnt_variation_selector_record)
	(struct sfnt_default_uvs_table, struct sfnt_unicode_value_range)
	(struct sfnt_nondefault_uvs_table, struct sfnt_uvs_mapping)
	(struct sfnt_mapped_variation_selector_record)
	(struct sfnt_table_offset_rec, struct sfnt_uvs_context)
	(struct sfnt_mapped_table): New structures.  Update prototypes.

	* src/sfntfont-android.c (android_sfntfont_driver): Register
	HarfBuzz callbacks where required.

	* src/sfntfont.c (sfntfont_select_cmap): Look for a format 14
	table.  Save it in new arg FORMAT14.
	(sfntfont_read_cmap): Adjust accordingly.
	(struct sfnt_font_info): New field `uvs'.  New fields `hb_font',
	`fd' and `directory'.
	(sfntfont_open): Open uvs context.  Under HarfBuzz, don't close
	the fd or subtable, but save them in the font info instead.
	(sfntfont_close): Free UVS context.  Close font fd and table
	directory and HarfBuzz font.
	(sfntfont_draw): Handle case where s->padding_p.
	(sfntfont_get_variation_glyphs): New function.
	(sfntfont_unmap_blob, sfntfont_get_font_table)
	(sfntfont_begin_hb_font): New functions.

	* src/sfntfont.h: Update prototypes.

	* src/textconv.c (Fset_text_conversion_style): Fix doc string.

2023-03-18  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsView.java (onAttachedToWindow): Send
	measured width and height in exposures again.

	* src/androidterm.c (handle_one_android_event): Don't log expose
	events.

	* src/android.c (android_run_select_thread): New flag.  Use it
	rather than the rc of pselect and errno to determine whether or
	not it has been interrupted.
	(android_handle_sigusr1): Set said flag.

	* java/org/gnu/emacs/EmacsView.java (prepareForLayout): New
	function.  Call this prior to mapping the view.
	(onGlobalLayout): New function.  Register as global layout
	listener.

	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow)
	(notifyContentRectPosition): New function.  Use specified
	xPosition and yPosition when reporting the offsets of children of
	the root window.

	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java
	(registerWindow): Specify activity launch bounds if necessary.

	* src/androidterm.c (handle_one_android_event): Send
	MOVE_FRAME_EVENT where necessary.

2023-03-17  Po Lu  <luangruo@yahoo.com>

	* src/androidfns.c (Fx_server_vendor, Fx_server_version): New
	functions.
	(syms_of_androidfns): Define new functions.

	* src/androidterm.c (android_set_build_fingerprint)
	(syms_of_androidterm): Set new variable
	Vandroid_build_manufacturer.

	* src/xfns.c (Fx_server_vendor, Fx_server_version): Update doc
	strings.

	* src/fileio.c (emacs_fd_to_int): Don't define on WINDOWSNT.

	* src/image.c (image_create_bitmap_from_data): Don't abort if
	!defined HAVE_ANDROID.

	* configure.ac:
	* m4/ndk-build.m4 (ndk_INIT, ndk_LATE): Avoid AC_REQUIRE magic.

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): New
	field `lastGroupId'.
	(Item): New field `isRadio'.
	(addItem): New arg `isRadio'.
	(inflateMenuItems): Apply an empty radio button group if required.

	* src/androidmenu.c (android_init_emacs_context_menu): Adjust
	accordingly.
	(android_menu_show): Likewise.

	* java/org/gnu/emacs/EmacsView.java (cancelPopupMenu): Dismiss
	context menu correctly.
	(isOpaque): New function.

	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java: Make
	consumer list public.

	* configure.ac: Add missing precious variable.

2023-03-16  Po Lu  <luangruo@yahoo.com>

	* lisp/frame.el (android-detect-mouse):
	* lisp/term/android-win.el (android-get-connection): Add function
	declarations.

	* configure.ac: Remove unnecessary escape.

	* configure.ac (AUTO_DEPEND, ANDROID_STUBIFY, ANDROID_LDFLAGS):
	* lib/Makefile.in (ANDROID_CFLAGS, ANDROID_BUILD_CFLAGS)
	(ALL_CFLAGS):
	* lib/gnulib.mk.in (AM_DEFAULT_VERBOSITY):
	* msdos/sed1v2.inp:
	* msdos/sedlibmk.inp:
	* src/Makefile.in (ANDROID_OBJ, EMACS_CFLAGS): Make those
	variables precious.  Rename ANDROID_CFLAGS substitution to
	ANDROID_BUILD_CFLAGS.

	* nt/mingw-cfg.site: Suppress build of Gnulib printf.

	* java/org/gnu/emacs/EmacsDocumentsProvider.java (queryRoots): Add
	icon to document root.

	* lisp/loadup.el (current-load-list): Set to empty load list after
	startup.

	* src/lread.c (build_load_history): Revert earlier changes.

2023-03-15  Po Lu  <luangruo@yahoo.com>

	* configure.ac: Improve portability.

2023-03-15  Robert Pluim  <rpluim@gmail.com>

	* src/fileio.c (Finsert_file_contents):
	* src/window.c (replace_buffer_in_windows): Call Fboundp, not
	boundp.

2023-03-15  Po Lu  <luangruo@yahoo.com>

	* cross/Makefile.in (lib/gnulib.mk): Edit out build-aux stuff.
	* m4/ndk-build.m4: Also look for cross ranlib.

	* src/sfntfont.c (sfntfont_close): Fix warning w/o mmap.

	* lib-src/asset-directory-tool.c (main_2): Port to systems without
	htole32.

2023-03-15  Po Lu  <luangruo@yahoo.com>

	* configure.ac (XCONFIGURE): Disable NS.

	* cross/Makefile.in (lib-src/config.h, lib/libgnu.a)
	(src/android-emacs): Port sed invocation to Mac OS without GNU
	sed.

2023-03-15  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/commands.texi (Misc Events): Document variable
	`disable-inhibit-text-conversion'.

	* java/org/gnu/emacs/EmacsDialog.java (display1): Try an activity
	that is certain to be focused first.

	* lisp/touch-screen.el (touch-screen-track-tap)
	(touch-screen-track-drag): Bind `disable-inhibit-text-conversion'.

	* src/keyboard.c (read_key_sequence): Only disable text conversion
	if an actual function or numeric key is found in the key sequence.
	(syms_of_keyboard): New variable
	`disable-inhibit-text-conversion'.

	* src/lread.c (read_filtered_event): Check new variable.

	* src/textconv.c (textconv_query): Remove unused label.

	* nt/gnulib-cfg.mk: Omit new gnulib modules.

2023-03-14  Po Lu  <luangruo@yahoo.com>

	* lisp/minibuffer.el (minibuffer-setup-on-screen-keyboard): Handle
	cases where last-event-frame is a kbd macro.
	* src/keyboard.c (lispy_function_keys): Remove duplicates.

	* msdos/sed1v2.inp:
	* msdos/sed3v2.inp:
	* msdos/sedlibcf.inp:
	* msdos/sedlibmk.inp: Update for Android port and new Gnulib
	modules.

	* java/org/gnu/emacs/EmacsWindow.java (figureChange): Detect mice
	on up events as well.
	(onSomeKindOfMotionEvent): Work past framework bug.

	* src/androidterm.c (android_perform_conversion_query):
	* src/textconv.c (textconv_query):
	* src/textconv.h (TEXTCONV_SKIP_ACTIVE_REGION): Remove unused
	code.

	* doc/emacs/android.texi (Android Windowing): Document how to
	display dialogs when Emacs is in the background.

	* java/org/gnu/emacs/EmacsDialog.java (display1): Use system
	dialogs if possible.

2023-03-13  Po Lu  <luangruo@yahoo.com>

	* etc/NEWS: Announce new option.

	* lisp/menu-bar.el (menu-bar-close-window): New option.
	(kill-this-buffer, kill-this-buffer-enabled-p): Adjust
	accordingly.

	* src/keyboard.c (lispy_function_keys): Add more silly keys.

	* src/android.c (android_check_string, android_build_string):
	Reduce consing when building menu bar strings.

	* etc/MACHINES (Android): Update with more recent information.

	* doc/emacs/android.texi (Android Startup): Document changes to
	emacsclient wrapper.

	* java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity)
	(startEmacsClient): Open EmacsActivity if the service is not
	running.

	* java/org/gnu/emacs/EmacsService.java (onCreate):
	* java/org/gnu/emacs/EmacsThread.java (run): Pass any file to open
	to Emacs.

	* lisp/term/android-win.el (handle-args-function): Implement.

	* src/image.c (image_create_bitmap_from_file, image_find_image_fd)
	(close_android_fd, slurp_file): Return and use `struct
	android_fd_or_asset' on Android.
	(xbm_load, xpm_load, pbm_load, png_load_body, jpeg_load_body)
	(webp_load, svg_load): Adjust accordingly.

2023-03-12  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_get_screen_width)
	(android_get_screen_height, android_get_mm_width)
	(android_get_mm_height, android_detect_mouse): Correctly handle
	Java exceptions.

	* src/android.c (android_check_if_event): New function.

	* src/androidgui.h: Update prototypes.

	* src/androidterm.c (android_event_is_for_frame): New function.
	(android_reset_conversion): Free and unqueue all text conversion
	events for the given frame.

	* src/androidterm.c (NATIVE_NAME, JNICALL)
	(android_build_extracted_text, android_update_selection): Use
	0-based indices for Android buffer positions.  Also, report
	surrounding text relative to the region, not to the cursor.

	* src/textconv.c (textconv_query): Accept new values of position.
	(really_set_composing_text): Use ephemeral last point.

	* java/org/gnu/emacs/EmacsOpenActivity.java (onCancel): New
	function.
	(displayFailureDialog): Handle dialog cancellation.

	* src/sfntfont.c (sfnt_parse_languages): Look for SLNG tag if
	DLNG is not present.

	* src/androidgui.h (enum android_modifier_mask): New modifier
	ANDROID_SUPER_MASK.

	* src/androidterm.c (android_android_to_emacs_modifiers)
	(android_emacs_to_android_modifiers): Add new modifier.

	* src/androidterm.c (syms_of_androidterm): Initialize
	Vandroid_build_fingerprint in case GC happens.

	* src/emacs-module.c (module_reset_handlerlist): Fix macro
	conflict.

	* src/emacs-module.c (MODULE_HANDLE_NONLOCAL_EXIT)
	(module_make_global_ref, module_free_global_ref)
	(module_make_function, module_get_function_finalizer)
	(module_set_function_finalizer, module_make_interactive)
	(module_funcall, module_intern, module_type_of)
	(module_extract_integer, module_make_integer, module_extract_float)
	(module_make_float, module_copy_string_contents)
	(module_make_string, module_make_unibyte_string)
	(module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
	(module_get_user_finalizer, module_set_user_finalizer)
	(module_vec_set, module_vec_get, module_vec_size)
	(module_process_input, module_extract_time, module_make_time)
	(module_extract_big_integer, module_make_big_integer)
	(module_open_channel, module_reset_handlerlist): Adjust as
	recommended by Paul Eggert <eggert@cs.ucla.edu>.

	* configure.ac: Take option `--with-shared-user-id' and give it to
	AndroidManifest.xml.in.

	* java/AndroidManifest.xml.in: Substitute that into the
	application info.

	* java/INSTALL (BUILDING WITH A SHARED USER ID): New section.

2023-03-11  Po Lu  <luangruo@yahoo.com>

	* configure.ac (with_mailutils): Default to off on Android.
	(HAVE_MAILUTILS, with_mailutils, ANDROID_SDK_8_OR_EARLIER)
	(XCONFIGURE): Fix POP and mailutils configuration on Android.

	* java/Makefile.in:
	* src/callproc.c (syms_of_callproc): Avoid using built-in movemail
	when --with-mailutils.

	* src/android.c (android_resolve_handle)
	(android_resolve_handle2): Don't perform checking done by CheckJNI
	by default.
	(android_copy_area): Check for errors here because CopyArea can
	perform a lot of consing.
	(android_define_cursor): Remove redundant code.

	* java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed):
	Process submenu closing normally if it happens more than 300 ms
	after a submenu item was selected.

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu)
	(onMenuItemClick, display1): Give `wasSubmenuSelected' different
	values depending on how the submenu was selected.

	* lib/gnulib.mk.in: Update from gnulib.

	* configure.ac: Default modules to on.  Remove check for
	__attribute__((cleanup)).  However, keep the new `ifavailable'
	value for systems without dlopen.

	* src/emacs-module.c (MODULE_HANDLE_NONLOCAL_EXIT): Don't rely on
	cleanup attribute and correctly reset handlerlist upon longjmp.
	(MODULE_INTERNAL_CLEANUP): New macro.
	(module_make_global_ref, module_free_global_ref)
	(module_make_function, module_get_function_finalizer)
	(module_set_function_finalizer, module_make_interactive)
	(module_funcall, module_intern, module_type_of)
	(module_extract_integer, module_make_integer, module_extract_float)
	(module_make_float, module_copy_string_contents)
	(module_make_string, module_make_unibyte_string)
	(module_make_user_ptr, module_get_user_ptr, module_set_user_ptr)
	(module_get_user_finalizer, module_set_user_finalizer)
	(module_vec_set, module_vec_get, module_vec_size)
	(module_process_input, module_extract_time, module_make_time)
	(module_extract_big_integer, module_make_big_integer)
	(module_open_channel): Call MODULE_INTERNAL_CLEANUP prior to
	returning.

	* lisp/term/android-win.el (x-pointer-arrow, x-pointer-left-ptr)
	(x-pointer-left-side, x-pointer-sb-h-double-arrow)
	(x-pointer-sb-v-double-arrow, x-pointer-watch, x-pointer-xterm)
	(x-pointer-invisible): New constants.

	* src/androidterm.c (android_show_hourglass)
	(android_hide_hourglass): New functions.
	(android_toggle_visible_pointer, android_define_frame_cursor):
	Define or don't define hourglass cursor if x->hourglass.
	(android_redisplay_interface): Add new functions.

	* src/androidterm.h (struct android_output): New field
	`hourglass'.

2023-03-10  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Windowing): Document how to pass
	multimedia keys to the system.

	* java/org/gnu/emacs/EmacsNative.java
	(shouldForwardMultimediaButtons): New function.

	* java/org/gnu/emacs/EmacsView.java (onKeyDown, onKeyMultiple)
	(onKeyUp): Check that function.

	* java/org/gnu/emacs/EmacsWindow.java (defineCursor): Handle cases
	where cursor is NULL.

	* src/android.c (NATIVE_NAME): New function.

	* src/androidfns.c (syms_of_androidfns): New variable.

	* src/keyboard.c (lispy_function_keys): Add volume keys.

	* java/org/gnu/emacs/EmacsCursor.java: New file.

	* java/org/gnu/emacs/EmacsWindow.java (defineCursor): New
	function.

	* src/android.c (struct android_emacs_cursor): New struct.
	(android_init_emacs_cursor): New function.
	(initEmacs): Call it.
	(android_create_font_cursor, android_define_cursor)
	(android_free_cursor): New functions.

	* src/android.h (enum android_handle_type): Add cursor handle
	type.

	* src/androidfns.c (Fx_create_frame, android_create_tip_frame)
	(enum mouse_cursor, struct mouse_cursor_types, mouse_cursor_types)
	(struct mouse_cursor_data, android_set_mouse_color)
	(syms_of_androidfns):

	* src/androidgui.h (enum android_cursor_shape):

	* src/androidterm.c (make_invisible_cursor)
	(android_toggle_invisible_pointer, android_free_frame_resources)
	(android_define_frame_cursor):

	* src/androidterm.h (struct android_display_info)
	(struct android_output): Port mouse cursor code over from X.

	* java/org/gnu/emacs/EmacsNative.java: Add missing dependency.

	* lisp/battery.el (battery-status-function): Don't look for /sys
	or /proc* on Android.  Explain why.

	* java/org/gnu/emacs/EmacsService.java (queryBattery19): New
	function.
	(queryBattery): Call it on old systems.  Also, return AC line
	status and temperature.

	* lisp/battery.el (battery-android): Implement more format
	directives.

	* src/android.c (android_query_battery): Handle new status fields.

	* src/android.h (struct android_battery_state): Add `plugged' and
	`temperature'.

	* src/androidfns.c (Fandroid_query_battery): Return new fields.

2023-03-09  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_destroy_handle): Handle OOM errors in
	android_destroy_handle.

	* textconv.c: Remove out-of-date comment.

	* java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed):

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu)
	(onMenuItemClick, run):

	* java/org/gnu/emacs/EmacsDialog.java (onClick, createDialog)
	(onDismiss): Take menu event serial, and pass it along in context
	menu events.

	* java/org/gnu/emacs/EmacsNative.java (sendContextMenu): New
	argument.

	* src/android.c (sendContextMenu): Pass serial number in event.

	* src/androidgui.h (struct android_menu_event): New field
	`menu_event_serial'.

	* src/androidmenu.c (android_init_emacs_dialog): Adjust method
	declarations.
	(android_menu_show, android_dialog_show):

	* src/androidterm.c (handle_one_android_event): Expect serial in
	context menu events.

	* src/androidterm.h: Update prototypes.

	* configure.ac (HAVE_WEBP): Disable WebPGetInfo check when
	REALLY_ANDROID.

	* java/debug.sh (is_root): Port to Android versions which don't
	support `chmod +x'.

	* src/android.c (android_content_name_p): Disable before API level
	19.

	* java/org/gnu/emacs/EmacsContextMenu.java (addItem): New argument
	`tooltip'.

	* src/android.c (android_build_string): Convert the text to
	UTF-16, and create the Java string using that.
	(android_build_jstring): Update comment.

	* src/androidmenu.c (android_init_emacs_context_menu): Add String
	argument to `addItem'.

	(android_menu_show): Correctly pass help strings in regular menu
	items.

	* src/sfnt.c (_sfnt_swap16, _sfnt_swap32): Avoid reserved names.

	* src/android.c (android_set_input_focus): Don't call method on
	window using service class.

	* src/sfnt.c (ODD): Use PUSH_UNCHECKED.

2023-03-08  Po Lu  <luangruo@yahoo.com>

	* src/fileio.c (Fcopy_file): On Android, ignore ENOSYS and ENOTSUP
	when restoring file times, as many old kernel versions encountered
	on Android devices omit support for the relevant system calls.

	* src/androidterm.c (android_build_extracted_text): Return NULL if
	text class not initialized.
	(android_update_selection): Check that EXTRACTED is not NULL.

	* doc/emacs/android.texi (Android File System): Document what
	`temp~unlinked' means in the temporary files directory.

	* java/org/gnu/emacs/EmacsService.java (updateExtractedText): New
	function.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Ask
	the input method nicely to not display the extracted text UI.

	* src/android.c (struct android_emacs_service): New method
	`updateExtractedText'.
	(android_hack_asset_fd_fallback): Improve naming convention.  Fix
	typo.
	(android_init_emacs_service): Add new method.
	(android_update_extracted_text): New function.
	(android_open_asset): Fix typo.

	* src/androidgui.h: Update prototypes.

	* src/androidterm.c (struct android_get_extracted_text_context):
	New field `flags'.
	(android_get_extracted_text): Set flags on the frame's output
	data.
	(android_build_extracted_text): New function.
	(getExtractedText): Move out class structures.
	(android_update_selection): Send updates to extracted text if the
	input method asked for them.
	(android_reset_conversion): Clear extracted text flags.

	* src/androidterm.h (struct android_output): New fields for
	storing extracted text data.

	* src/sfnt.c (sfnt_read_cmap_table): Don't allocate too big data.
	Also, free elements of (*data), not offsets into data itself.

2023-03-07  Po Lu  <luangruo@yahoo.com>

	* java/Makefile.in (install_temp/assets/build_info): New rule.
	(emacs.apk-in): Depend on that file.

	* lisp/version.el (android-read-build-system)
	(android-read-build-time): New functions.
	(emacs-build-system, emacs-build-time): Use those functions on
	Android, as dumping is done after installation on Android.

	* src/fileio.c (Finsert_file_contents):

	* src/window.c (replace_buffer_in_windows): Don't call functions
	if they are not defined, which can happen during loadup.

	* java/org/gnu/emacs/EmacsWindow.java (onSomeKindOfMotionEvent):
	Dismiss splurious LeaveNotify events from button presses.

	* src/android.c (android_change_window_attributes)
	(android_change_gc, android_set_clip_rectangles)
	(android_reparent_window, android_clear_window)
	(android_map_window, android_unmap_window, android_resize_window)
	(android_move_window, android_swap_buffers)
	(android_fill_rectangle, android_copy_area)
	(android_fill_polygon, android_draw_rectangle, android_draw_point)
	(android_draw_line, android_clear_area, android_bell)
	(android_set_input_focus, android_raise_window)
	(android_lower_window, android_set_dont_focus_on_map)
	(android_set_dont_accept_focus, android_get_keysym_name)
	(android_toggle_on_screen_keyboard, android_restart_emacs)
	(android_display_toast, android_update_ic, android_reset_ic)
	(android_set_fullscreen): Optimize by specifying the class
	explicitly when calling a method.

	* src/lread.c (lread_fd, file_tell, infile, skip_dyn_bytes)
	(skip_dyn_eof, readbyte_from_stdio, safe_to_load_version)
	(close_infile_unwind, close_file_unwind_android_fd): New function.
	(Fload, Flocate_file_internal, openp): New argument PLATFORM.  All
	callers changed.
	(skip_lazy_string): Add optimized versions of various functions
	for accessing Android assets.

2023-03-06  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function
	requestSelectionUpdate.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
	Call it instead of losing if getting the current selection fails.

	* src/android-asset.h (AAsset_seek): Define stub.

	* src/android.c (android_open): Take mode_t MODE instead of int.
	(android_open_asset, android_close_asset, android_asset_read_quit)
	(android_asset_read, android_asset_lseek, android_asset_fstat):
	New functions.

	* src/android.h (struct android_fd_or_asset): Update prototypes.

	* src/androidgui.h (enum android_ime_operation): Add new operation
	to update the selection position.

	* src/androidterm.c (android_handle_ime_event): Handle new
	operation.
	(requestSelectionUpdate): New function.

	* src/fileio.c (close_file_unwind_emacs_fd): New function.
	(Fcopy_file, union read_non_regular, read_non_regular)
	(Finsert_file_contents): Use optimized codepath to insert Android
	asset files.

	* src/frame.h (enum text_conversion_operation): New operation.

	* src/textconv.c (really_request_point_update)
	(handle_pending_conversion_events_1, request_point_update): New
	functions.

	* src/textconv.h: Update prototypes.

	* src/conf_post.h: Avoid macro redeclaration.

	* java/org/gnu/emacs/EmacsService.java (sync): Delete function.

	* java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap): Erase
	with window background.
	(onDetachedFromWindow): Only recycle bitmap if non-NULL.

	* java/org/gnu/emacs/EmacsWindow.java (background): New field.
	(changeWindowBackground): Set it.

	* src/android.c (struct android_emacs_service): Remove `sync'.
	(android_init_emacs_service): Likewise.
	(android_sync): Delete function.

	* src/androidfns.c (android_create_tip_frame): Set frame
	background color correctly.
	(Fx_show_tip): Make the tip frame visible.

	* src/androidgui.h: Update prototypes.

	* src/androidterm.c (handle_one_android_event): Handle tooltip
	movement correctly.

2023-03-05  Po Lu  <luangruo@yahoo.com>

	* 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:
	* java/org/gnu/emacs/EmacsNative.java:
	* java/org/gnu/emacs/EmacsNoninteractive.java (main):
	* java/org/gnu/emacs/EmacsOpenActivity.java (startEmacsClient):
	* java/org/gnu/emacs/EmacsSdk7FontDriver.java:
	* java/org/gnu/emacs/EmacsSdk8Clipboard.java:
	* java/org/gnu/emacs/EmacsService.java (onCreate):
	* java/org/gnu/emacs/EmacsView.java (onLayout):
	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow):
	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java: Remove
	redundant includes.  Reorganize some functions, remove duplicate
	`getLibDir' functions, and remove unused local variables.

	* java/org/gnu/emacs/EmacsOpenActivity.java (onCreate): Don't set
	the style here.

	* java/res/values-v11/style.xml:
	* java/res/values-v14/style.xml:
	* java/res/values-v29/style.xml:
	* java/res/values/style.xml: Define styles for the emacsclient
	wrapper.

	* src/keyboard.c (read_key_sequence): Don't disable text
	conversion if use_mouse_menu or if a menu bar prefix key is being
	displayed.

	* etc/PROBLEMS: Document problem with default monospace font.

	* src/fileio.c (check_mutable_filename): Check if the file is a
	constituent of /content as well.
	(Fcopy_file, Fdelete_directory_internal, Fdelete_file)
	(Frename_file, Fadd_name_to_file, Fmake_symbolic_link)
	(Fset_file_modes, Fset_file_times, Ffile_newer_than_file_p)
	(write_region): Adjust accordingly.
	(Fset_visited_file_modtime): Remove unnecessary restriction.

	* src/filelock.c (make_lock_file_name): Don't interlock files
	under /assets and /content.

	* src/inotify.c (Finotify_add_watch): Fix typo.

	* cross/Makefile.in (config.status): Depend on
	top_builddir/config.status instead.

	* configure.ac: Fix another typo.

	* cross/Makefile.in (builddir): Define.

	* cross/README: Update.

	* cross/lib: Delete.  Make configure generate it instead.

	* .gitignore: Simplify cross/lib rule.

	* admin/merge-gnulib (avoided_flags): Stop copying to cross/lib.

	* configure.ac: Link gnulib source and header files to cross/lib.

	* cross/Makefile.in (LIB_SRCDIR): Make relative to builddir.
	(maintainer-clean): Merge with distclean.  Remove links created
	by configure.

2023-03-04  Po Lu  <luangruo@yahoo.com>

	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk: Specify right ELF
	format for 64 bit executables.

	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk: Ensure nasm
	generates ELF objects.

	* src/sfnt.c (sfnt_fill_span): Specifically handle spans that span
	a single pixel by computing the coverage in the center.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): New field
	`lastClosedMenu'.
	(onContextMenuClosed): Don't send event if a menu is closed twice
	in a row.  Also, clear wasSubmenuSelected immediately.

	* java/org/gnu/emacs/EmacsContextMenu.java: Display submenus
	manually in Android 6.0 and earlier.

	* java/org/gnu/emacs/EmacsView.java (onCreateContextMenu)
	(popupMenu): Adjust accordingly.

	* configure.ac: Check for __ctype_get_mb_cur_max.  Then see if
	MB_CUR_MAX is defined to it, and define REPLACEMENT_MB_CUR_MAX if
	so and it does not link.

	* java/INSTALL: Update documentation.

	* src/conf_post.h (MB_CUR_MAX): Define replacement if
	necessary.

	* m4/ndk-build.m4 (ndk_INIT): Fix typo.

	* configure.ac: Call ndk_LATE after gl_EARLY.

	* cross/ndk-build/Makefile.in (NDK_BUILD_CXX): New variable.

	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk: Use it.

	* java/INSTALL: Describe how to build C++ dependencies.

	* m4/ndk-build.m4 (ndk_LATE): New macro.
	(ndk_INIT): Try to find a suitable C++ compiler.
	(ndk_CHECK_MODULES): Make sure the C++ compiler works before
	allowing C++ dependencies.

	* cross/ndk-build/Makefile.in (NDK_BUILD_CFLAGS_CXX): New
	variable.

	* cross/ndk-build/ndk-build-shared-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1)))):
	* cross/ndk-build/ndk-build-static-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1)))): Use it to
	build C++ code.

2023-03-03  Po Lu  <luangruo@yahoo.com>

	* configure.ac (ANDROID_SDK_8_OR_EARLIER): Pass through
	`--with-ndk-cxx-shared'.

	* m4/ndk-build.m4 (ndk_INIT): Fix quoting of $CC.

	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk: Include
	ndk-resolve.mk in srcdir.

	* cross/ndk-build/README: Update accordingly.

	* build-aux/ndk-build-helper.mk: Define in terms of BUILD_AUXDIR.

	* m4/ndk-build.m4 (ndk_INIT): Find right build-aux directory.
	Remove uses of unportable shell constructs.

	* java/org/gnu/emacs/EmacsService.java (checkContentUri): Improve
	debug output.

	* lisp/files.el (basic-save-buffer): Check whether or not file
	itself exists before checking for the existence of the directory
	containing it.

	* src/android.c (android_open): Don't forget to set errno after
	open_content_uri fails.

	* java/org/gnu/emacs/EmacsActivity.java (onCreate): Add view tree
	observer.
	(onGlobalLayout): Sync fullscreen state.
	(syncFullscreenWith): Improve visibility flag setting.

	* src/textconv.c (select_window): New function.
	(textconv_query, restore_selected_window, really_commit_text)
	(really_set_composing_text, really_set_composing_region)
	(really_delete_surrounding_text, really_set_point_and_mark)
	(get_extracted_text): Call it instead of Fselect_window to avoid
	selecting the mini window if it is no longer active.

2023-03-02  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/input.texi (On-Screen Keyboards): Fix indexing.

	* INSTALL: Document where to find Android installation
	instructions.

	* configure.ac (CHECK_LISP_OBJECT_TYPE): Pacify
	-Wsuggest-attribute=noreturn only on Android.

	* cross/ndk-build/README: New file.

	* doc/emacs/android.texi (Android):
	* doc/emacs/emacs.texi (Top):
	* doc/emacs/input.texi (Other Input Devices): Untabify menus.

	* etc/NEWS: Move INSTALL.android to java/INSTALL.

	* java/INSTALL: New file.

	* java/README:

	* src/coding.c (from_unicode_buffer): Make Android specific code
	only build on Android.

	* INSTALL.android: Remove file.

	* configure.ac: Make cross/* and related directories.

	* cross/Makefile.in (src/verbose.mk, lib/libgnu.a)
	(src/config.h): Stop making directories here.
	(lib-src/config.h): New config.h rule.
	($(LIBSRC_BINARIES)): Add it.
	(clean): Don't remove CLEAN_SUBDIRS, but clean inside.

	* src/android.c (android_alloc_id): Return correct values upon
	wraparound.

	* java/Makefile.in ($(CLASS_FILES) &): Touch all class files, even
	those the Java compiler elected not to rebuild.

	* java/org/gnu/emacs/EmacsActivity.java (onWindowFocusChanged):
	Restore fullscreen state here.
	(onResume): And not here.

	* doc/emacs/android.texi (Android):
	* doc/emacs/emacs.texi (Top, GNU Free Documentation License):
	Rearrange menu and sectioning.

	* doc/emacs/android.texi (Android Windowing): Reword
	documentation.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity):
	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu):
	* java/org/gnu/emacs/EmacsFontDriver.java (EmacsFontDriver):
	* java/org/gnu/emacs/EmacsSdk7FontDriver.java
	(EmacsSdk7FontDriver):
	* java/org/gnu/emacs/EmacsService.java (queryBattery):
	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): Make
	functions final and classes static where possible.  This
	subsequently brings a small speed-up as the JVM can optimize
	vtable dispatch away at run-time.

	* src/android.c (struct android_emacs_service): New method
	`display_toast'.
	(android_init_emacs_service): Load new method.
	(android_display_toast): New function.

	* src/android.h (android_display_toast): Export that new function.

	* src/androidfns.c (Fandroid_detect_mouse):
	* src/androidselect.c (Fandroid_clipboard_owner_p)
	(Fandroid_set_clipboard, Fandroid_get_clipboard)
	(Fandroid_browse_url): Prevent crashes when called from
	libandroid-emacs.so, where the Emacs service object is not
	present.

	* src/androidterm.c (handle_one_android_event): Fix out of date
	commentary.

2023-03-01  Po Lu  <luangruo@yahoo.com>

	* configure.ac (JAVA_PUSH_LINT): Push to WARN_JAVAFLAGS instead of
	JAVAFLAGS.
	(cross/lib): Always AS_MKDIR_P.

	* cross/Makefile.in (srcdir): New variable.
	(LIB_SRCDIR): Take realpath relative to srcdir, not.
	(src/verbose.mk): Depend on verbose.mk.android in srcdir.
	(lib/Makefile): Edit srcdir and VPATH to LIB_SRCDIR.
	(src/Makefile): Edit -I$$(top_srcdir) to -I../$(srcdir)/lib,
	instead of omitting it.
	(clean): Allow ndk-build clean to fail.

	* java/Makefile.in (builddir): New variable.
	(WARN_JAVAFLAGS): Likewise.
	(JAVAFLAGS): Define in terms of WARN_JAVAFLAGS.
	(SIGN_EMACS, SIGN_EMACS_V2): Use emacs.keystore relative to
	srcdir.  Allow inclusion of ndk-build.mk to fail.
	(install_temp, emacs.apk-in)
	(../config.status): Depend relative to top_srcdir.
	(AndroidManifest.xml, $(APK_NAME)): Likewise.
	(RESOURCE_FILE, CLASS_FILES, classes.dex): Output class files to
	$(srcdir); these are arch independents, so this is okay.

2023-03-01  Po Lu  <luangruo@yahoo.com>

	* cross/Makefile.in: Remove outdated comment.

	* src/Makefile.in (.PHONY): Clean android-emacs and libemacs.so,
	not emacs.so and aemacs.

	* doc/emacs/android.texi (Android File System): Document new
	behavior of starting a subprocess from /assets.

	* java/org/gnu/emacs/EmacsWindow.java (onSomeKindOfMotionEvent):
	Don't use isFromSource where not present.

	* src/androidterm.c (android_scroll_run): Avoid undefined behavior
	writing to bitfields.

	* src/callproc.c (get_current_directory): When trying to run a
	subprocess inside /assets, run it from the home directory instead.

	* java/AndroidManifest.xml.in: Specify @style/EmacsStyle.

	* java/org/gnu/emacs/EmacsActivity.java (onCreate): Stop setting
	the theme here.

	* java/res/values-v11/style.xml:
	* java/res/values-v14/style.xml:
	* java/res/values-v29/style.xml:
	* java/res/values/style.xml: Extract style resources into
	res/values.

	* java/Makefile.in (ETAGS, clean): New rules to generate tags.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity):
	* java/org/gnu/emacs/EmacsApplication.java (EmacsApplication):
	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu):
	* java/org/gnu/emacs/EmacsCopyArea.java (EmacsCopyArea):
	* java/org/gnu/emacs/EmacsDialog.java (EmacsDialog):
	* java/org/gnu/emacs/EmacsDocumentsProvider.java
	(EmacsDocumentsProvider):
	* java/org/gnu/emacs/EmacsDrawLine.java (EmacsDrawLine):
	* java/org/gnu/emacs/EmacsDrawPoint.java (EmacsDrawPoint):
	* java/org/gnu/emacs/EmacsDrawRectangle.java
	(EmacsDrawRectangle):
	* java/org/gnu/emacs/EmacsFillPolygon.java (EmacsFillPolygon):
	* java/org/gnu/emacs/EmacsFillRectangle.java
	(EmacsFillRectangle):
	* java/org/gnu/emacs/EmacsGC.java (EmacsGC):
	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection):
	* java/org/gnu/emacs/EmacsNative.java (EmacsNative):
	* java/org/gnu/emacs/EmacsNoninteractive.java
	(EmacsNoninteractive):
	* java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity):
	* java/org/gnu/emacs/EmacsPixmap.java (EmacsPixmap):
	* java/org/gnu/emacs/EmacsPreferencesActivity.java
	(EmacsPreferencesActivity):
	* java/org/gnu/emacs/EmacsSdk11Clipboard.java
	(EmacsSdk11Clipboard):
	* java/org/gnu/emacs/EmacsSdk23FontDriver.java
	(EmacsSdk23FontDriver):
	* java/org/gnu/emacs/EmacsSdk8Clipboard.java
	(EmacsSdk8Clipboard):
	* java/org/gnu/emacs/EmacsService.java (EmacsService):
	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView):
	* java/org/gnu/emacs/EmacsView.java (EmacsView):
	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow):
	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java
	(EmacsWindowAttachmentManager): Make classes final where
	appropriate.  The Java virtual machine is capable of removing
	vtable dispatch when a virtual function call is being performed on
	an instance of a final class.

	* src/android.c (android_query_tree, android_get_geometry)
	(android_translate_coordinates, android_query_battery): Correctly
	verify the results of calls to JNI Get<Type>ArrayElements
	functions.
	(android_exception_check_nonnull): New function.

	* src/androidselect.c (Fandroid_get_clipboard): Also check the
	return values of calls to JNI array extraction functions.

2023-02-28  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (main):

	* src/sfntfont.c (sfntfont_get_glyph_outline): Remove outdated
	commentary.

2023-02-26  Po Lu  <luangruo@yahoo.com>

	* src/android.c (struct android_emacs_window): New methods.
	(android_init_emacs_window): Add new methods.
	(android_lookup_method): Delete now-unused function.
	(android_change_window_attributes, android_reparent_window)
	(android_map_window, android_unmap_window, android_resize_window)
	(android_move_window, android_set_input_focus)
	(android_raise_window, android_lower_window, android_get_geometry)
	(android_translate_coordinates, android_set_dont_focus_on_map)
	(android_set_dont_accept_focus): Don't look up the class and
	method each time when calling a function; that's just wasteful.

	* cross/lib/unistd.in.h:
	* lib/gnulib.mk.in:
	* m4/gnulib-comp.m4: Update from gnulib.

	* doc/lispref/commands.texi (Misc Events): Update documentation.

	* java/org/gnu/emacs/EmacsService.java (onStartCommand): Improve
	notification message.

	* src/android.c (android_hack_asset_fd): Detect if ashmem is
	available dynamically.
	(android_detect_ashmem): New function.

	* src/textconv.c (record_buffer_change): Use markers to
	represent BEG and END instead.
	(syms_of_textconv): Update doc string.

2023-02-25  Po Lu  <luangruo@yahoo.com>

	* java/debug.sh (is_root): Fix tee detection again for old systems
	which don't return exit codes from adb shell.

	* src/android.c (android_run_select_thread, initEmacs):
	* src/android.h:
	* src/androidterm.c: Apply stack alignment to all JNICALL
	functions.

	* src/android.c (android_open): Clean up unused variables.

	* java/org/gnu/emacs/EmacsNoninteractive.java (main): Port to
	Android 2.2.

	* src/android-asset.h (AAsset_openFileDescriptor): Delete stub
	function.

	* src/android.c (android_check_compressed_file): Delete function.
	(android_open): Stop trying to find compressed files or to use the
	system provided file descriptor.  Explain why.

	* doc/emacs/android.texi (Android Startup, Android File System)
	(Android Environment, Android Windowing, Android Troubleshooting):
	Improve documentation; fix typos.

	* doc/lispref/commands.texi (Misc Events): Likewise.

	* java/org/gnu/emacs/EmacsService.java (queryBattery): New
	function.

	* lisp/battery.el (battery-status-function): Set appropriately
	for Android.
	(battery-android): New function.

	* src/android.c (struct android_emacs_service): New method
	`query_battery'.
	(android_check_content_access): Improve exception checking.
	(android_init_emacs_service): Look up new method.
	(android_destroy_handle, android_create_window)
	(android_init_android_rect_class, android_init_emacs_gc_class)
	(android_set_clip_rectangles)
	(android_create_pixmap_from_bitmap_data, android_fill_polygon)
	(android_get_image, android_put_image, android_bell)
	(android_set_input_focus, android_raise_window)
	(android_lower_window, android_query_tree, android_get_geometry)
	(android_translate_coordinates, android_wc_lookup_string)
	(android_damage_window, android_build_string)
	(android_build_jstring, android_exception_check_1)
	(android_exception_check_2): New functions.
	(android_browse_url): Improve exception handling.  Always use
	android_exception_check and don't leak local refs.
	(android_query_battery): New function.

	* src/android.h (struct android_battery_state): New struct.

	* src/androidfns.c (Fandroid_query_battery, syms_of_androidfns):
	New functions.

	* src/androidfont.c (androidfont_from_lisp, DO_SYMBOL_FIELD)
	(DO_CARDINAL_FIELD, androidfont_list, androidfont_match)
	(androidfont_draw, androidfont_open_font)
	(androidfont_close_font):
	* src/androidselect.c (Fandroid_set_clipboard)
	(Fandroid_get_clipboard):
	* src/sfnt.c (sfnt_map_glyf_table):
	* src/sfntfont.c (sfntfont_free_outline_cache)
	(sfntfont_free_raster_cache, sfntfont_close): Allow calling font
	close functions twice.

2023-02-24  Po Lu  <luangruo@yahoo.com>

	* configure.ac (JAVA_PUSH_LINT): New macro.
	(JAVAFLAGS): New variable.  Check for various lint flags and
	macros and enable them.

	* java/Makefile.in (ANDROID_ABI):

	* java/org/gnu/emacs/EmacsSdk7FontDriver.java: Remove compiler
	warning.

	* lisp/frame.el (display-symbol-keys-p):
	* lisp/simple.el (normal-erase-is-backspace-setup-frame): Return
	appropriate values on Android.

	* src/inotify.c (Finotify_add_watch): Handle asset files by
	returning nil.

	* src/keyboard.c (lispy_function_keys): Add missing delete key.

2023-02-23  Po Lu  <luangruo@yahoo.com>

	* lisp/loadup.el: Update commentary.

	* src/androidterm.c (syms_of_androidterm): Define
	Vx_toolkit_scroll_bars.

	* src/xterm.c (syms_of_xterm): Update doc string.

	* INSTALL.android:
	* build-aux/ndk-build-helper-1.mk:
	(NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES)
	(NDK_CXX_FLAG_$(LOCAL_MODULE)):
	* build-aux/ndk-build-helper-2.mk:
	(NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES)
	(NDK_CXX_FLAG_$(LOCAL_MODULE)):
	* cross/ndk-build/ndk-build-shared-library.mk (objname)
	($(call	objname,$(LOCAL_MODULE),$(basename $(1))))
	(ALL_OBJECT_FILES$(LOCAL_MODULE)):
	* cross/ndk-build/ndk-build-static-library.mk (objname)
	($(call objname,$(LOCAL_MODULE),$(basename $(1))))
	(ALL_OBJECT_FILES$(LOCAL_MODULE)):
	(ALL_SOURCE_FILES): Update ImageMagick build instructions and C++
	module detection.

	* src/android.c (android_run_select_thread): Fix typos.
	(android_run_select_thread): Lock select_mutex before signaling
	condition variable.
	(android_select): Unlock event queue mutex prior to waiting for
	it.

2023-02-22  Po Lu  <luangruo@yahoo.com>

	* cross/ndk-build/ndk-build-shared-library.mk: Fix typo.

	* src/image.c (imagemagick_load_image): Check HAVE_DECL_xxx.

	* INSTALL.android: Document ImageMagick and caveats.

	* build-aux/ndk-build-helper-1.mk (NDK_SO_NAMES):
	* build-aux/ndk-build-helper-2.mk (NDK_A_NAMES):
	* build-aux/ndk-build-helper.mk (TARGET_ARCH_ABI): Define
	architecture and don't respect explicitly specified library names.
	* configure.ac: Enable ImageMagick and lcms2 on Android.
	* cross/ndk-build/ndk-build-shared-library.mk (objname)
	($(call objname,$(LOCAL_MODULE),$(basename $(1))))
	(ALL_OBJECT_FILES$(LOCAL_MODULE)):
	* cross/ndk-build/ndk-build-static-library.mk (objname)
	($(call objname,$(LOCAL_MODULE),$(basename $(1))))
	(NDK_CFLAGS, ALL_SOURCE_FILES): Handle source files whose names
	begin with $(LOCAL_PATH).

	* cross/ndk-build/ndk-clear-vars.mk: Don't undefine; clear
	variables instead.

	* m4/ndk-build.m4 (ndk_SEARCH_MODULE): Redirect make stderr to
	config.log.

	* src/androidmenu.c (android_menu_show): Fix typo.

	* doc/emacs/input.texi (On-Screen Keyboards): Document changes to
	text conversion.

	* java/org/gnu/emacs/EmacsInputConnection.java (getExtractedText):
	* src/keyboard.c (read_key_sequence): Disable text conversion
	after reading prefix key.

	* src/textconv.c (get_extracted_text): Fix returned value when
	request length is zero.

	* configure.ac: Per title.

	* INSTALL.android: Port to MIPS.

	* configure.ac (modules): Default to ifavailable.  Write actual
	test for __attribute__((cleanup)).

	* m4/ndk-build.m4: Recognize mips and mips64.

	* src/emacs-module.c: Remove broken HAS_ATTRIBUTE test.

2023-02-21  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsContextMenu.java (addSubmenu)
	(inflateMenuItems): Handle tooltips correctly.

	* src/android.c (android_scan_directory_tree): Fix limit
	generation for root directory.

	* src/androidmenu.c (android_init_emacs_context_menu)
	(android_menu_show): Implement menu item help text on Android 8.0
	and later.

	* admin/merge-gnulib (GNULIB_MODULES): Add gnulib module stpncpy.

	* m4, lib: Update from Gnulib.

	* src/android.c: Include string.h.

	* doc/emacs/android.texi (Android Startup): Document `content'
	special directory.

	* java/debug.sh (is_root): Improve /bin/tee detection.

	* java/org/gnu/emacs/EmacsNative.java (dup): New function.

	* java/org/gnu/emacs/EmacsOpenActivity.java (checkReadableOrCopy)
	(onCreate): Create content directory names when the file is not
	readable.

	* java/org/gnu/emacs/EmacsService.java (openContentUri)
	(checkContentUri): New functions.

	* src/android.c (struct android_emacs_service): New methods.
	(android_content_name_p, android_get_content_name)
	(android_check_content_access): New function.
	(android_fstatat, android_open): Implement opening content URIs.
	(dup): Export to Java.
	(android_init_emacs_service): Initialize new methods.
	(android_faccessat): Implement content file names.

2023-02-20  Po Lu  <luangruo@yahoo.com>

	* INSTALL.android: Explain where to get tree-sitter.

	* configure.ac: Add support for dynamic modules and tree-sitter.

	* doc/emacs/android.texi (Android Windowing):

	* java/org/gnu/emacs/EmacsSdk11Clipboard.java
	(ownsClipboard): Enhance the treatment of the clipboard and the
	documentation addressing that subject.

2023-02-20  Po Lu  <luangruo@yahoo.com>

	* src/androidfont.c (androidfont_list_family): Don't
	unconditionally initialize the Android font driver.

	* src/fontset.c (fontset_find_font): Add compatibility test to
	registry strangeness case.

	* src/sfnt.c (sfnt_read_cmap_table): Don't read subtable data if
	DATA is NULL.

	* src/sfntfont.c (struct sfnt_font_desc): New field `registry'.
	(sfnt_registry_for_subtable): New function.
	(sfntfont_identify_cmap): Move above sfnt_grok_registry.
	(sfnt_grok_registry): New function.
	(sfnt_enum_font_1): Call it.
	(sfntfont_registries_compatible_p): New function.
	(sfntfont_list_1): Check registry compatibility.
	(sfntfont_registry_for_desc): New function.
	(mark_sfntfont): Mark desc->registry.

	* java/Makefile.in ($(CLASS_FILES)): Depend on the Java compiler's
	internal dependency tracking.

	* src/fontset.c (fontset_find_font): Work around TrueType
	performance problem.

	* cross/Makefile.in (src/libemacs.so): Depend on libgnu.a.

	* cross/ndk-build/ndk-build.mk.in (NDK_BUILD_MODULES)
	(NDK_BUILD_SHARED, NDK_BUILD_STATIC): Define group rule to build
	all files so that they are built within one make process.

	* java/Makefile.in: Reorganize cross compilation and make sure
	there is only one make subprocess for each subdirectory of cross.

	* cross/Makefile.in (.PHONY):
	* java/Makefile.in (.PHONY):
	* src/Makefile.in (libemacs.so): Avoid calling ndk-build from two
	places at once.  Build android-emacs separately from libemacs.so.

	* cross/Makefile.in ($(top_builddir)/lib/libgnu.a):
	* java/Makefile.in (CROSS_LIBS): Explicitly depend on Gnulib to
	prevent it from being built at the same time from different jobs.

	* src/sfntfont.c (sfntfont_close): Don't unlink font if mmap is
	not available.

	* INSTALL.android: Say where building Emacs is supported.

	* doc/emacs/android.texi (Android Startup): Describe how to
	connect via ADB.

	* java/org/gnu/emacs/EmacsNative.java (getSelection): Return array
	of ints.

	* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
	Adjust accordingly.

	* src/androidterm.c (struct android_get_selection_context): New
	field `mark'.
	(android_get_selection): Set the mark field as appropriate.
	(getSelection): Adjust accordingly.

	* lisp/play/gamegrid.el (gamegrid-setup-default-font): Clamp font
	size at eight.

	* java/org/gnu/emacs/EmacsOpenActivity.java (checkReadableOrCopy):
	New function.
	(onCreate): If the file specified is not readable from C, read it
	into a temporary file and ask Emacs to open that.

	* doc/emacs/android.texi (Android Windowing): Document what new
	frame parameters are now supported.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): New field
	`isFullscreen'.
	(detachWindow, attachWindow): Sync fullscreen state.
	(onWindowFocusChanged): Add more logging.
	(onResume): Restore previous fullscreen state.
	(syncFullscreen): New function.

	* java/org/gnu/emacs/EmacsWindow.java (setFullscreen): New
	function.

	* src/android.c (struct android_emacs_window): Add new method.
	(android_init_emacs_window): Look up new method.
	(android_set_fullscreen): New function.

	* src/androidgui.h:
	* src/androidterm.c (android_fullscreen_hook): Implement
	accordingly.

	* lisp/subr.el (overriding-text-conversion-style, y-or-n-p):
	Disable text conversion when reading from minibuffer.

	* src/androidfns.c (android_make_monitor_attribute_list): New
	function.
	(Fandroid_display_monitor_attributes_list): Call it to set
	monitor_frames, which avoids a NULL pointer dereference.
	Reported by Angelo Graziosi <angelo.g0@libero.it>.

2023-02-18  Po Lu  <luangruo@yahoo.com>

	* lisp/loadup.el: Fix merge typos.

	* doc/emacs/input.texi (On-Screen Keyboards): Document
	`touch-screen-always-display'.

	* doc/lispref/commands.texi (Misc Events): Improve documentation
	of text conversion events.

	* java/org/gnu/emacs/EmacsDialog.java (toAlertDialog, display1):
	Reorder buttons to make more sense.

	* lisp/elec-pair.el (electric-pair-analyze-conversion): New
	function.

	* lisp/simple.el (analyze-text-conversion): Improve integration
	with electric pair modes.

	* lisp/term.el (term-mode): Always display the onscreen keyboard.

	* lisp/touch-screen.el (touch-screen-display-keyboard)
	(touch-screen-handle-point-up): Respect new options.

	* src/textconv.c (really_set_composing_text): Stop widenining
	unnecessarily.
	(really_delete_surrounding_text): Really delete surrounding text.
	Give text conversion analyzers the buffer text.
	(syms_of_textconv): Update doc string.

	* INSTALL.android: Clarify build instructions.

	* src/textconv.c (struct complete_edit_check_context): New
	structure.
	(complete_edit_check): New function.
	(handle_pending_conversion_events_1): If the window is known, then
	ensure that any editing failures are reported to the input method.

	* configure.ac: Fix typo.  Check for madvise.

	* lisp/international/fontset.el (script-representative-chars):
	Improve detection of CJK fonts.

	* src/pdumper.c (dump_discard_mem): Use madvise if possible.

	* src/sfnt.c (sfnt_map_glyf_table, sfnt_unmap_glyf_table): New
	functions.

	* src/sfnt.h (struct sfnt_glyf_table): New field.

	* src/sfntfont.c (struct sfnt_font_info, sfntfont_open)
	(sfntfont_close, sfntfont_detect_sigbus): Map fonts into memory if
	possible.

	* src/sfntfont.h: Update prototypes.

	* src/sysdep.c (handle_sigbus, init_sigbus, init_signals):
	Initialize SIGBUS correctly.

2023-02-17  Po Lu  <luangruo@yahoo.com>

	* src/androidterm.c (android_get_selection): Use ephemeral last
	point.

	* src/textconv.c (report_selected_window_change): Set
	w->ephemeral_last_point to the window's point now.

	* java/Makefile.in (install_temp/assets/version): New generated
	file.

	* lisp/loadup.el: Set Emacs versions appropriately prior to
	dumping on Android.

	* lisp/mail/emacsbug.el (emacs-build-description): Insert Android
	build fingerprint.

	* lisp/version.el (emacs-repository-version-android)
	(emacs-repository-get-version, emacs-repository-get-branch):
	Implement for Android.

	* src/androidterm.c (android_set_build_fingerprint): New function.
	(syms_of_androidterm): New variable `android-build-fingerprint'.

	* src/android.c (android_exception_check): Fix typo.
	(android_exception_check): Print more detailed information.

	* java/org/gnu/emacs/EmacsService.java (nameKeysym): Implement
	stub on Android 3.0 and earlier.

	* INSTALL.android: Document that Android 2.2 is now supported)
	(with caveats.

	* configure.ac (ANDROID_MIN_SDK, ANDROID_SDK_18_OR_EARLIER)
	(SYSTEM_TYPE, ANDROID_STUBIFY, SIZEOF_LONG): Correctly detect
	things missing on Android 2.2.

	* java/Makefile.in (ANDROID_JAR, JARSIGNER_FLAGS):
	* java/debug.sh (jdb, gdbserver, line):
	* java/org/gnu/emacs/EmacsApplication.java (findDumpFile):
	* java/org/gnu/emacs/EmacsService.java (onCreate):
	* java/org/gnu/emacs/EmacsThread.java (run): Run parameter
	initialization on main thread.

	* src/android-asset.h (struct android_asset_manager)
	(struct android_asset, AAssetManager_fromJava, AAssetManager_open)
	(AAsset_close, android_asset_create_stream)
	(android_asset_read_internal, AAsset_openFileDescriptor)
	(AAsset_getLength, AAsset_getBuffer, AAsset_read): New file.
	Write substitutes for functions that aren't present within the NDK
	on Android 2.2.

	* src/android.c: Arrange to include android-asset.h if the minimum
	supported Android version is 2.2.
	(android_user_full_name, android_hack_asset_fd)
	(android_check_compressed_file): Implement for Android 2.2.

	* src/process.c (Fprocess_send_eof): Don't call tcdrain if
	unavailable.

	* src/sfntfont-android.c (system_font_directories): Fix compiler
	warning.

	* src/sfntfont.c (sfntfont_read_cmap): Correctly test rc of
	emacs_open.

	* src/textconv.c (handle_pending_conversion_events_1): Mark buffer
	UNINIT.

2023-02-16  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Fonts):
	* doc/emacs/input.texi (On-Screen Keyboards):
	* doc/lispref/commands.texi (Misc Events): Update documentation.

	* java/org/gnu/emacs/EmacsInputConnection.java (setSelection): New
	function.
	* java/org/gnu/emacs/EmacsSurfaceView.java
	(reconfigureFrontBuffer): Make bitmap references weak references.

	* java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap): Don't
	clear surfaceView bitmap.

	* lisp/comint.el (comint-mode): Set text-conversion-style to
	`action' so on screen keyboards' Return buttons send an actual key
	press event.

	* lisp/international/fontset.el (script-representative-chars)
	(setup-default-fontset): Improve detection of CJK fonts.

	* lisp/isearch.el (set-text-conversion-style): New variable.
	(isearch-mode, isearch-done): Save and restore the text conversion
	style.

	* lisp/minibuffer.el (minibuffer-mode): Set an appropriate text
	conversion style.

	* lisp/simple.el (analyze-text-conversion): Run
	post-self-insert-hook properly.

	* lisp/subr.el (read-char-from-minibuffer): Disable text
	conversion when reading character.

	* src/androidterm.c (show_back_buffer): Don't check that F is not
	garbaged.
	(android_update_selection, android_reset_conversion): Use the
	ephemeral last point and handle text conversion being disabled.

	* src/buffer.c (syms_of_buffer): Convert old style DEFVAR.

	* src/keyboard.c (kbd_buffer_get_event): Handle text conversion
	first.

	* src/lisp.h: Update prototypes.

	* src/lread.c (read_filtered_event): Temporarily disable text
	conversion.

	* src/sfnt.c (sfnt_decompose_glyph_1, sfnt_decompose_glyph_2): New
	functions.
	(sfnt_decompose_glyph, sfnt_decompose_instructed_outline):
	Refactor contour decomposition to those two functions.
	(main): Update tests.

	* src/sfntfont-android.c (system_font_directories): Add empty
	field.
	(Fandroid_enumerate_fonts, init_sfntfont_android): Enumerate fonts
	in a user fonts directory.

	* src/sfntfont.c (struct sfnt_font_desc): New field `num_glyphs'.
	(sfnt_enum_font_1): Set num_glyphs and avoid duplicate fonts.
	(sfntfont_glyph_valid): New function.
	(sfntfont_lookup_char, sfntfont_list_1): Make sure glyphs found
	are valid.

	* src/textconv.c (sync_overlay, really_commit_text)
	(really_set_composing_text, really_set_composing_region)
	(really_delete_surrounding_text, really_set_point_and_mark)
	(handle_pending_conversion_events_1)
	(handle_pending_conversion_events, conversion_disabled_p)
	(disable_text_conversion, resume_text_conversion)
	(Fset_text_conversion_style, syms_of_textconv): Update to respect
	new options.

	* src/window.h (GCALIGNED_STRUCT): New field
	`ephemeral_last_point'.

	* src/xdisp.c (mark_window_display_accurate_1): Set it.

2023-02-15  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/input.texi (On-Screen Keyboards):
	* doc/lispref/commands.texi (Misc Events): Improve documentation
	of text conversion stuff.

	* java/org/gnu/emacs/EmacsInputConnection.java (beginBatchEdit)
	(endBatchEdit, commitCompletion, commitText)
	(deleteSurroundingText)
	(finishComposingText, getSelectedText, getTextAfterCursor)
	(EmacsInputConnection, setComposingRegion, performEditorAction)
	(getExtractedText): Condition debug code on DEBUG_IC.

	* java/org/gnu/emacs/EmacsService.java (EmacsService, updateIC):
	Likewise.

	* lisp/bindings.el (global-map):
	* lisp/electric.el (global-map): Make `text-conversion'
	`analyze-text-conversion'.

	* lisp/progmodes/prog-mode.el (prog-mode): Enable text conversion
	in input methods.

	* lisp/simple.el (analyze-text-conversion): New function.

	* lisp/textmodes/text-mode.el (text-conversion-style)
	(text-mode): Likewise.

	* src/androidterm.c (android_handle_ime_event): Handle
	set_point_and_mark.
	(android_sync_edit): Give Emacs 100 ms instead.
	(android_perform_conversion_query): Skip the active region, not
	the conversion region.
	(getSelectedText): Implement properly.
	(android_update_selection): Expose mark to input methods.
	(android_reset_conversion): Handle `text-conversion-style'.

	* src/buffer.c (init_buffer_once, syms_of_buffer): Add buffer
	local variable `text-conversion-style'.

	* src/buffer.h (struct buffer, bset_text_conversion_style): New
	fields.

	* src/emacs.c (android_emacs_init): Call syms_of_textconv.

	* src/frame.h (enum text_conversion_operation): Rename
	TEXTCONV_SET_POINT.

	* src/lisp.h (syms_of_textconv): Export syms_of_textconv.

	* src/marker.c (set_marker_internal): Force redisplay when the
	mark is set and the buffer is visible on builds that use text
	conversion.  Explain why.

	* src/textconv.c (copy_buffer): Fix copying past gap.
	(get_mark): New function.
	(textconv_query): Implement new flag.
	(sync_overlay): New function.  Display conversion text in an
	overlay.
	(record_buffer_change, really_commit_text)
	(really_set_composing_text, really_set_composing_region)
	(really_delete_surrounding_text, really_set_point)
	(handle_pending_conversion_events_1, decrement_inside)
	(handle_pending_conversion_events, textconv_set_point)
	(get_extracted_text, register_textconv_interface): Various fixes
	and improvements.

	* src/textconv.h (struct textconv_interface): Update
	documentation.

	* src/window.h (GCALIGNED_STRUCT): New field `prev_mark'.

	* src/xdisp.c (mark_window_display_accurate_1): Handle prev_mark.

	* java/debug.sh: Run gdbserver directly if possible.

	* src/androidterm.c (android_handle_ime_event): Pacify compiler
	warnings.

	* src/textconv.c (really_set_composing_text)
	(handle_pending_conversion_events, get_extracted_text): Fix
	reentrancy problems and uses of uninitialized values.

	* configure.ac (HAVE_TEXT_CONVERSION): Define on Android.

	* doc/emacs/input.texi (On-Screen Keyboards): Document ``text
	conversion'' slightly.

	* doc/lispref/commands.texi (Misc Events): Document new
	`text-conversion' event.

	* java/org/gnu/emacs/EmacsContextMenu.java (display): Use
	`syncRunnable'.

	* java/org/gnu/emacs/EmacsDialog.java (display): Likewise.

	* java/org/gnu/emacs/EmacsEditable.java: Delete file.

	* java/org/gnu/emacs/EmacsInputConnection.java
	(EmacsInputConnection): Reimplement from scratch.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): Add new
	functions.

	* java/org/gnu/emacs/EmacsService.java (getEmacsView)
	(getLocationOnScreen, sync, getClipboardManager, restartEmacs):
	Use syncRunnable.
	(syncRunnable): New function.
	(updateIC, resetIC): New functions.

	* java/org/gnu/emacs/EmacsView.java (EmacsView): New field
	`inputConnection' and `icMode'.
	(onCreateInputConnection): Update accordingly.
	(setICMode, getICMode): New functions.

	* lisp/bindings.el (global-map): Ignore text conversion events.

	* src/alloc.c (mark_frame): Mark text conversion data.

	* src/android.c (struct android_emacs_service): New fields
	`update_ic' and `reset_ic'.
	(event_serial): Export.
	(android_query_sem): New function.
	(android_init_events): Initialize new semaphore.
	(android_write_event): Export.
	(android_select): Check for UI thread code.
	(setEmacsParams, android_init_emacs_service): Initialize new
	methods.
	(android_check_query, android_begin_query, android_end_query)
	(android_run_in_emacs_thread):
	(android_update_ic, android_reset_ic): New functions for managing
	synchronous queries from one thread to another.

	* src/android.h: Export new functions.

	* src/androidgui.h (enum android_event_type): Add input method
	events.
	(enum android_ime_operation, struct android_ime_event)
	(union android_event, enum android_ic_mode): New structs and
	enums.

	* src/androidterm.c (android_window_to_frame): Allow DPYINFO to be
	NULL.
	(android_decode_utf16, android_handle_ime_event)
	(handle_one_android_event, android_sync_edit)
	(android_copy_java_string, beginBatchEdit, endBatchEdit)
	(commitCompletion, deleteSurroundingText, finishComposingText)
	(getSelectedtext, getTextAfterCursor, getTextBeforeCursor)
	(setComposingText, setComposingRegion, setSelection, getSelection)
	(performEditorAction, getExtractedText): New functions.
	(struct android_conversion_query_context)
	(android_perform_conversion_query, android_text_to_string)
	(android_get_selection_context, android_get_selection)
	(android_get_extracted_text_context, android_get_extracted_text)
	(android_extracted_text_request_class)
	(android_extracted_text_class, android_update_selection)
	(android_reset_conversion, android_set_point)
	(android_compose_region_changed, android_notify_conversion)
	(text_conversion_interface): New functions and structures.
	(android_term_init): Initialize text conversion.

	* src/coding.c (syms_of_coding): Define Qutf_16le on Android.

	* src/frame.c (make_frame): Clear conversion data.
	(delete_frame): Reset conversion state.

	* src/frame.h (enum text_conversion_operation)
	(struct text_conversion_action, struct text_conversion_state)
	(GCALIGNED_STRUCT): Update structures.

	* src/keyboard.c (read_char, readable_events, kbd_buffer_get_event)
	(syms_of_keyboard): Handle text conversion events.

	* src/lisp.h:
	* src/process.c: Fix includes.

	* src/textconv.c (enum textconv_batch_edit_flags, textconv_query)
	(reset_frame_state, detect_conversion_events)
	(restore_selected_window, really_commit_text)
	(really_finish_composing_text, really_set_composing_text)
	(really_set_composing_region, really_delete_surrounding_text)
	(really_set_point, complete_edit)
	(handle_pending_conversion_events_1)
	(handle_pending_conversion_events, start_batch_edit)
	(end_batch_edit, commit_text, finish_composing_text)
	(set_composing_text, set_composing_region, textconv_set_point)
	(delete_surrounding_text, get_extracted_text)
	(report_selected_window_change, report_point_change)
	(register_texconv_interface): New functions.

	* src/textconv.h (struct textconv_interface)
	(TEXTCONV_SKIP_CONVERSION_REGION): Update prototype.

	* src/xdisp.c (mark_window_display_accurate_1):
	* src/xfns.c (xic_string_conversion_callback):
	* src/xterm.c (init_xterm): Adjust accordingly.

2023-02-12  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Environment): Mention that Emacs
	also requests the notifications permission.

	* java/org/gnu/emacs/EmacsEditable.java:
	* java/org/gnu/emacs/EmacsInputConnection.java: New files.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): Load library
	dependencies in a less verbose fashion.

	* java/org/gnu/emacs/EmacsView.java (EmacsView): Make imManager
	public.
	(onCreateInputConnection): Set InputType to TYPE_NULL for now.

	* java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp)
	(getEventUnicodeChar): Correctly handle key events with strings.

	* lisp/term/android-win.el (android-clear-preedit-text)
	(android-preedit-text): New special event handlers.

	* src/android.c (struct android_emacs_window): Add function
	lookup_string.
	(android_init_emacs_window): Adjust accordingly.
	(android_wc_lookup_string): New function.

	* src/androidgui.h (struct android_key_event): Improve commentary.
	(enum android_lookup_status): New enum.

	* src/androidterm.c (handle_one_android_event): Synchronize IM
	lookup code with X.

	* src/coding.c (from_unicode_buffer): Implement on Android.

	* src/coding.h:
	* src/sfnt.c: Fix commentary.

2023-02-11  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsActivity.java (onDestroy)
	(onWindowFocusChanged): Keep track of the last focused activity.

	* java/org/gnu/emacs/EmacsDialog.java (display1): Use it if there
	is no current focus.

2023-02-10  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Add org/gnu/emacs/R.java.

	* cross/Makefile.in (top_builddir): Include verbose.mk.  Rewrite
	rules to print nice looking statements.

	* doc/emacs/android.texi (Android, Android Startup)
	(Android Environment, Android Windowing, Android Fonts):
	* doc/emacs/emacs.texi (Top): Add an extra ``Android
	Troubleshooting'' node and move troubleshooting details there.

	* java/Makefile.in: Generate R.java; improve appearance by using
	verbose.mk.

	* java/org/gnu/emacs/EmacsPreferencesActivity.java: Reimplement in
	terms of PreferencesActivity.

	* java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap): Avoid
	flicker.

	* java/res/xml/preferences.xml: New file.

	* src/verbose.mk.in (AM_V_AAPT, AM_V_SILENT): New variables.

	* java/org/gnu/emacs/EmacsDocumentsProvider.java (queryRoots):
	Implement isChild.
	(getNotificationUri, notifyChange): New functions.
	(queryDocument1): Set rename and remove flags.
	(queryDocument, queryChildDocuments): Allow the requester to
	detect changes in the directory hierarchy.
	(createDocument, deleteDocument, removeDocument): Signal changes
	to the directory hierarchy.

	* java/org/gnu/emacs/EmacsCopyArea.java (perform): Fix typo.

	* java/org/gnu/emacs/EmacsSurfaceView.java
	(reconfigureFrontBuffer): Don't use function only present on
	Android 8.0 and later.

	* doc/emacs/android.texi (Android Windowing): Remove yet another
	limitation.

	* java/debug.sh: Make this work on systems which prohibit
	attaching to app processes from adbd.

	* java/org/gnu/emacs/EmacsCopyArea.java (perform): Avoid creating
	copies whenever possible.

	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView):
	Remove SurfaceView based implementation and use manual double
	buffering with invalidate instead.

	* java/org/gnu/emacs/EmacsView.java (EmacsView, handleDirtyBitmap)
	(raise, lower, onDetachedFromWindow): Adjust accordingly.

	* java/org/gnu/emacs/EmacsWindow.java (windowUpdated): Remove
	function.

	* src/sfntfont.c (sfntfont_open): Set font->max_width correctly.

	* src/sfnt.c (IUP_SINGLE_PAIR): If i is initially more than end,
	make it start.
	(sfnt_verbose): Handle cases where interpreter->glyph_zone is
	NULL.
	(main): Update tests.
	(sfnt_read_cmap_table): Fix typo.
	(main): Update tests.

2023-02-09  Po Lu  <luangruo@yahoo.com>

	* java/AndroidManifest.xml.in: Declare the new documents provider.

	* java/README: Describe the meaning of files in res/values.

	* java/org/gnu/emacs/EmacsDocumentsProvider.java: New file.

	* java/res/values-v19/bool.xml:
	* java/res/values/bool.xml: New files.

	* src/sfnt.c (main): Update tests.

	* src/sfnt.c (sfnt_read_simple_glyph, sfnt_read_compound_glyph)
	(sfnt_read_glyph): Take size_t offsets.
	(struct sfnt_compound_glyph_context)
	(sfnt_expand_compound_glyph_context)
	(sfnt_decompose_compound_glyph): Take size_t contour offsets.
	(sfnt_decompose_glyph): Always close contour even if the first
	point isn't on-curve.
	(sfnt_build_outline_edges): Fix coding style.
	(sfnt_interpret_iup): Skip phantom points during IUP.
	(sfnt_decompose_instructed_outline): Clarify documentation.
	Always close contour even if the first point isn't on-curve.
	(struct sfnt_test_dcontext, sfnt_test_move_to, sfnt_test_line_to)
	(sfnt_test_curve_to, sfnt_transform_f26dot6, sfnt_test_get_glyph)
	(sfnt_test_free_glyph, sfnt_test_span, sfnt_test_edge_ignore)
	(sfnt_interpret_compound_glyph_2, sfnt_test_edges, main): Update
	tests.

	* src/sfnt.h: Export new function.

	* src/sfntfont.c (sfntfont_get_glyph_outline): Handle compound
	glyphs.
	(sfntfont_measure_instructed_pcm, sfntfont_measure_pcm)
	(sfntfont_draw): Update accordingly.

2023-02-08  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (SCFS): Fix order of arguments.
	(sfnt_normalize_vector): Make sure vx and vy are within a
	reasonable range.
	(sfnt_move): Don't move when vectors are orthogonal.
	(main): Update.

	* doc/emacs/android.texi (Android Startup): Fix typos.

	* src/sfnt.c (sfnt_interpret_msirp): Fix order in which operands
	to MSIRP are popped.
	(main): Reduce ppem values.

	* doc/lispref/frames.texi (On-Screen Keyboards): Describe return
	value of `frame-toggle-on-screen-keyboard'.

	* java/org/gnu/emacs/EmacsSurfaceView.java (surfaceChanged)
	(surfaceCreated): Remove purposeless synchronization code.  The
	framework doesn't seem to consult this at all.

	* java/org/gnu/emacs/EmacsView.java (onLayout): Lay out the window
	after children.
	(swapBuffers): Properly implement `force'.
	(windowUpdated): Delete function.

	* lisp/frame.el (frame-toggle-on-screen-keyboard): Return whether
	or not the on screen keyboard might've been displayed.

	* lisp/minibuffer.el (minibuffer-on-screen-keyboard-timer)
	(minibuffer-on-screen-keyboard-displayed)
	(minibuffer-setup-on-screen-keyboard)
	(minibuffer-exit-on-screen-keyboard): Improve OSK dismissal when
	there are consecutive minibuffers.

	* lisp/touch-screen.el (touch-screen-window-selection-changed):
	New function.
	(touch-screen-handle-point-up): Register it as a window selection
	changed function.

	* src/android.c (struct android_emacs_window)
	(android_init_emacs_window): Remove references to `windowUpdated'.
	(android_window_updated): Delete function.

	* src/android.h (struct android_output): Remove
	`last_configure_serial'.

	* src/androidterm.c (handle_one_android_event)
	(android_frame_up_to_date):

	* src/androidterm.h (struct android_output): Remove frame
	synchronization, as that does not work on Android.

	* src/sfntfont.c (sfntfont_get_glyph_outline): Take new argument
	STATE and restore it prior to instructing the glyph.
	(sfntfont_measure_instructed_pcm, sfntfont_measure_pcm)
	(sfntfont_draw): Adjust accordingly.
	(sfntfont_measure_instructed_pcm)
	(sfntfont_measure_pcm): Ceil rbearing value.

	* src/sfnt.c (sfnt_build_glyph_outline): Clear
	build_outline_context.
	(sfnt_poly_coverage): Extend coverage map.
	(sfnt_prepare_raster): Always floor coordinates, since the
	increase in coverage makes this hack unnecessary.
	(sfnt_build_outline_edges): Likewise.
	(sfnt_compare_edges): Remove function.
	(sfnt_edge_sort): New function.  Since edges are already partially
	sorted, and there are not many, insertion sort suffices.
	(sfnt_poly_edges): Use sfnt_edge_sort.
	(sfnt_fill_span): Stop rounding x0 and x1 to the grid, and make
	coverage computation static.
	(sfnt_lookup_glyph_metrics): Fix return code for unscaled metrics.
	(sfnt_scale_metrics): New function.
	(SFNT_ENABLE_HINTING): Remove define.
	(struct sfnt_cvt_table, struct sfnt_fpgm_table)
	(struct sfnt_prep_table): Move to sfnt.h.
	(sfnt_read_cvt_table, sfnt_read_fpgm_table, sfnt_read_prep_table):
	Make TEST_STATIC.
	(struct sfnt_unit_vector, struct sfnt_interpreter_definition)
	(struct sfnt_interpreter_zone, struct sfnt_graphics_state):
	(struct sfnt_interpreter): Move to sfnt.h.
	(sfnt_make_interpreter): Make TEST_STATIC.
	(POP, PUSH, DELTAP1, DELTAP2, DELTAP3): When TEST, define to
	regular push and pop.
	(sfnt_deltac, sfnt_deltap): Fix order of arguments.
	(IUP_SINGLE_PAIR): Fix interpolation loop wraparound.
	(sfnt_interpret_font_program)
	(sfnt_interpret_control_value_program): Make TEST_STATIC.
	(struct sfnt_instructed_outline): Move to sfnt.h.
	(sfnt_build_instructed_outline): Make TEST_STATIC.
	(sfnt_interpret_simple_glyph, sfnt_x_raster, sfnt_test_raster)
	(all_tests, sfnt_verbose, main): Improve test code.

	* src/sfnt.h (SFNT_ENABLE_HINTING, struct sfnt_cvt_table)
	(struct sfnt_fpgm_table, struct sfnt_prep_table)
	(struct sfnt_unit_vector, struct sfnt_interpreter_definition)
	(struct sfnt_interpreter_zone, struct sfnt_graphics_state)
	(struct sfnt_interpreter, struct sfnt_instructed_outline)
	(PROTOTYPE): New definitions.

	* src/sfntfont-android.c (sfntfont_android_put_glyphs): Make
	coordinate generation more straightforward.

	* src/sfntfont.c (sfntfont_get_glyph_outline): New arguments
	INTERPRETER and METRICS.
	(struct sfnt_font_info): New tables.
	(sfntfont_setup_interpreter): New function.
	(sfntfont_open): Avoid memory leak.  Set up interpreter.
	(sfntfont_measure_instructed_pcm): New function.
	(sfntfont_measure_pcm): Delegate to measure_instructed_pcm where
	appropriate.
	(sfntfont_close): Free new tables.
	(sfntfont_draw): Scale metrics properly.

2023-02-07  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_name_instruction): Remove junk from instruction
	table.
	(sfnt_step_edge, sfnt_step_edge_n)
	(sfnt_build_outline_edges, sfnt_test_edge, main):
	* src/sfnt.h (struct sfnt_edge): Stop using error corrected line
	drawing, as it's actually slower.

	* INSTALL.android: Describe patches for BoringSSL on ARM.

	* src/sfnt.c (sfnt_build_glyph_outline): Remove redundant
	multiplication.
	(sfnt_prepare_raster): Update offset calculation for changes.
	(sfnt_step_edge, sfnt_step_edge_n): Handle bresenham terms.
	(sfnt_build_outline_edges): Don't subtract floored xmin, just
	xmin.
	(sfnt_saturate_short): Make clang generate better code.
	(sfnt_fill_span): Stop rounding coordinates.
	(sfnt_poly_span): Poly consecutive on transitions all in one go.
	(sfnt_lookup_glyph_metrics): Remove redundant multiplication.
	(struct sfnt_interpreter): New hooks for debugging.
	(sfnt_large_integer_add): New function.
	(sfnt_mul_f26dot6_fixed): Round product.
	(sfnt_make_interpreter): Remove redundant multiplication.
	(CHECK_STACK_ELEMENTS, POP_UNCHECKED, PUSH_UNCHECKED): New macros.
	(MOVE, POP, SWAP, CINDEX, RS, RCVT, LT, LTEQ, GT, GTEQ, EQ, NEQ)
	(EVEN, AND, OR, NOT, ADD, SUB, DIV, MUL, ABS, NEG, FLOOR, CEILING)
	(GETINFO, ROLL, _MAX, _MIN, ROUND, NROUND, GC, MD): Don't check SP
	redundantly, especially when pushing an element right after
	popping one.
	(sfnt_move_glyph_zone): Don't touch points by passing NULL as
	flags.
	(sfnt_direct_move_zp2): Touch P in the directions of the movement.
	(sfnt_interpret_scfs): Fix coding style.
	(sfnt_interpret_simple_glyph): Don't round Y coordinates.
	(sfnt_test_span, sfnt_test_edges, sfnt_debug_edges)
	(sfnt_test_edge)
	(sfnt_x_raster, sfnt_test_raster, rcvt_test_args)
	(deltac1_test_args, deltac2_test_args, deltac3_test_args)
	(roll_1_test_args, sfnt_run_hook, sfnt_identify_instruction)
	(sfnt_verbose, main): Improve debug code and tests.

	* src/sfnt.h (struct sfnt_edge): Add bresenham terms.

2023-02-06  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsNative.java
	(EmacsNative) <static constructor>: Load every native library on
	which Emacs depends prior to loading libemacs itself.

	* java/org/gnu/emacs/EmacsOpenActivity.java (readEmacsClientLog)
	(startEmacsClient): Don't use redirectError on Android 7.1 and
	earlier.

	* configure.ac: Pass ANDROID_CFLAGS to ndk_INIT.

	* cross/ndk-build/Makefile.in (NDK_BUILD_CFLAGS):
	* cross/ndk-build/ndk-build-shared-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1)))):
	($$(error Unsupported suffix):
	* cross/ndk-build/ndk-build-static-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1)))):
	($$(error Unsupported suffix): Use NDK_BUILD_CFLAGS.

	* m4/ndk-build.m4 (ndk_INIT): Accept cflags.
	(ndk_CONFIG_FILES): Export NDK_BUILD_CFLAGS.

	* java/AndroidManifest.xml.in: Prevent the Emacs activity from
	being overlaid by the emacsclient wrapper.
	* java/org/gnu/emacs/EmacsOpenActivity.java (run): Likewise.
	(onCreate): Set an appropriate theme on ICS and up.

	* java/org/gnu/emacs/EmacsWindow.java (onTouchEvent): Handle
	ACTION_CANCEL correctly.

	* src/sfnt.c (struct sfnt_build_glyph_outline_context)
	(sfnt_build_glyph_outline, sfnt_fill_span): Improve glyph
	appearance by rounding coordinate values.
	(struct sfnt_interpreter): New fields `twilight_original_x',
	`twilight_original_y'.
	(sfnt_make_interpreter): Set new fields.
	(DELTAP1, DELTAP2, DELTAP3, SVTCAy, SPVTL, SFVTL, MD): Implement
	instructions.
	(sfnt_save_projection_vector): New argument `dual_only'.  All
	callers changed.
	(sfnt_address_zp2, sfnt_address_zp1, sfnt_address_zp0): Obtain
	original positions in the twilight zone as well.
	(sfnt_check_zp1, sfnt_interpret_fliprgoff)
	(sfnt_interpret_fliprgon)
	(sfnt_interpret_flippt, sfnt_interpret_scfs, sfnt_interpret_miap)
	(sfnt_interpret_alignrp, sfnt_line_to_vector, P)
	(sfnt_interpret_msirp, sfnt_interpret_ip, sfnt_interpret_call)
	(load_point, sfnt_interpret_iup_1, sfnt_interpret_iup)
	(sfnt_interpret_run, struct sfnt_scaled_outline)
	(struct sfnt_instructed_outline)
	(sfnt_decompose_instructed_outline)
	(sfnt_build_instructed_outline, sfnt_compute_phantom_points)
	(sfnt_interpret_simple_glyph, all_tests, sfnt_setup_debugger)
	(sfnt_name_instruction, sfnt_draw_debugger, sfnt_run_hook)
	(sfnt_verbose, main): Make glyph instructing work.

	* src/sfnt.h (SFNT_POLY_ROUND): New enumerator.

2023-02-05  Po Lu  <luangruo@yahoo.com>

	* INSTALL.android: Explain how to build selinux.

	* configure.ac: Enable selinux on Android.

	* cross/ndk-build/ndk-build-shared-library.mk
	($(call	objname,$(LOCAL_MODULE),$(basename $(1))))
	($$(error Unsupported suffix))
	(NDK_CFLAGS_$(LOCAL_MODULE)):
	* cross/ndk-build/ndk-build-static-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1))))
	($$(error Unsupported suffix))
	(NDK_CFLAGS_$(LOCAL_MODULE)): Correctly handle files with a .cc
	suffix, and clang-specific asflags.

	* cross/ndk-build/ndk-clear-vars.mk: Handle AOSP extensions
	LOCAL_ADDITIONAL_DEPENDENCIES,
	LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH) and LOCAL_IS_HOST_MODULE.

	* doc/emacs/android.texi (Android Startup): Explain emacsclient
	wrapper.

	* java/org/gnu/emacs/EmacsView.java (EmacsView): New flag
	`isCurrentlyTextEditor'.
	(showOnScreenKeyboard, hideOnScreenKeyboard): Set as appropriate.
	(onCheckIsTextEditor): Return its value.

	* lisp/touch-screen.el (touch-screen-handle-scroll): Don't ding
	at buffer limits.

	* m4/ndk-build.m4: Improve doc.

	* src/Makefile.in (LIBSELINUX_CFLAGS): New variable.
	(EMACS_CFLAGS): Add it.

2023-02-05  Po Lu  <luangruo@yahoo.com>

	* m4, lib: Update from Gnulib.

	* src/sfnt.c (struct sfnt_graphics_state, LOOPCALL, DELTAC3)
	(PROJECT, SHPIX, sfnt_save_projection_vector, sfnt_check_zp0)
	(sfnt_dual_project_vector, sfnt_interpret_scfs)
	(sfnt_round_symmetric, sfnt_interpret_miap)
	(sfnt_interpret_alignrp_1, sfnt_interpret_alignrp)
	(sfnt_measure_distance, sfnt_interpret_msirp, sfnt_interpret_ip)
	(sfnt_interpret_mdap, sfnt_deltap)
	(sfnt_dual_project_onto_any_vector, sfnt_validate_gs)
	(sfnt_set_projection_vector, sfnt_interpret_shp)
	(sfnt_interpret_run, sfnt_check_sloop, main): Check in more WIP
	font code.

2023-02-04  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android File System):

	* java/AndroidManifest.xml.in: Update with new activity.  Remove
	Android 10 restrictions through a special flag.

	* java/org/gnu/emacs/EmacsNative.java (getProcName): New
	function.

	* java/org/gnu/emacs/EmacsOpenActivity.java: New file.

	* java/org/gnu/emacs/EmacsService.java (getLibraryDirection):
	Remove unused annotation.

	* lib-src/emacsclient.c (decode_options): Set alt_display on
	Android.

	* src/android.c (android_proc_name): New function.
	(getProcName): Export via JNI.

	* doc/emacs/android.texi (Android Environment):

	* java/AndroidManifest.xml.in: Add network state permissions.

	* src/sfnt.c (sfnt_multiply_divide_signed)
	(struct sfnt_interpreter_zone, struct sfnt_graphics_state)
	(struct sfnt_interpreter, sfnt_mul_f2dot14)
	(sfnt_interpret_trap, WCVTF)
	(ALIGNPTS, sfnt_scale_by_freedom_vector, sfnt_interpret_utp)
	(sfnt_address_zp2, sfnt_address_zp1, sfnt_address_zp0)
	(sfnt_check_zp2, sfnt_move_zp0, sfnt_move_zp1)
	(sfnt_move_glyph_zone, sfnt_move_twilight_zone)
	(sfnt_direct_move_zp2, sfnt_interpret_alignpts)
	(sfnt_interpret_isect, sfnt_line_to_vector, sfnt_deltac)
	(sfnt_interpret_mdap, sfnt_interpret_call, sfnt_dot_fix_14)
	(sfnt_move_x, sfnt_move_y, sfnt_move, sfnt_validate_gs)
	(sfnt_interpret_shz, sfnt_interpret_shc, sfnt_interpret_shp)
	(sfnt_interpret_iup_1, sfnt_interpret_iup, sfnt_interpret_run)
	(sfnt_interpret_font_program)
	(sfnt_interpret_control_value_program)
	(sfnt_interpret_simple_glyph, jrot_test_args, jrof_test_args)
	(all_tests, main): Check in more WIP code.

2023-02-02  Po Lu  <luangruo@yahoo.com>

	* java/AndroidManifest.xml.in: Add new icon.

	* java/Makefile.in (srcdir): New variable.
	(JAVA_FILES, RESOURCE_FILES): Update variables.
	(emacs.apk-in): Apply resources.

	* java/README: Describe directory tree.

	* java/res/drawable/emacs.png: New file.

	* src/android.c (android_get_current_api_level): New function.

	* src/android.h: Export it.

	* src/sfntfont-android.c (init_sfntfont_android): Make device API
	level detection always work.

	* src/sfnt.c (sfnt_multiply_divide_signed): Add MAYBE_UNUSED.

	* src/sfnt.c (xmalloc, xrealloc): Improve behavior upon allocation
	failures during test.
	(sfnt_table_names): Add prep.
	(sfnt_transform_coordinates): Allow applying offsets during
	coordinate transform.
	(sfnt_decompose_compound_glyph): Defer offset computation until
	any component compound glyph is loaded, then apply it during the
	transform process.
	(sfnt_multiply_divide): Make available everywhere.  Implement on
	64 bit systems.
	(sfnt_multiply_divide_signed): New function.
	(sfnt_mul_fixed): Fix division overflow.
	(sfnt_curve_to_and_build_1, sfnt_build_glyph_outline): Remove
	outdated comment.
	(sfnt_build_outline_edges): Fix coding style.
	(sfnt_lookup_glyph_metrics): Allow looking up metrics without
	scaling.
	(struct sfnt_cvt_table): Fix type of cvt values.
	(struct sfnt_prep_table): New structure.
	(sfnt_read_cvt_table): Read cvt values in terms of fwords, not
	longs (as Apple's doc seems to say).
	(sfnt_read_fpgm_table): Fix memory allocation for font program
	table.
	(sfnt_read_prep_table): New function.
	(struct sfnt_interpreter_zone): New structure.
	(struct sfnt_interpreter_graphics_state): New fields `project',
	`move', `vector_dot_product'.  Rename to `sfnt_graphics_state'.
	(struct sfnt_interpreter, sfnt_mul_f26dot6): Stop doing rounding
	division.
	(sfnt_init_graphics_state, sfnt_make_interpreter, MOVE, SSW, RAW)
	(SDS, ADD, SUB, ABS, NEG, WCVTF, _MIN, S45ROUND, SVTCAx)
	(sfnt_set_srounding_state, sfnt_skip_code)
	(sfnt_interpret_unimplemented, sfnt_interpret_fdef)
	(sfnt_interpret_idef, sfnt_interpret_if, sfnt_interpret_else)
	(sfnt_round_none, sfnt_round_to_grid, sfnt_round_to_double_grid)
	(sfnt_round_down_to_grid, sfnt_round_up_to_grid)
	(sfnt_round_to_half_grid, sfnt_round_super, sfnt_validate_gs)
	(sfnt_interpret_run, sfnt_interpret_font_program)
	(struct sfnt_test_dcontext, sfnt_test_move_to, sfnt_test_line_to)
	(sfnt_test_curve_to, sfnt_test_get_glyph, sfnt_test_free_glyph)
	(sfnt_test_span, sfnt_test_edge_ignore, sfnt_test_edge)
	(sfnt_test_raster, test_interpreter_profile, test_cvt_values)
	(test_interpreter_cvt, test_interpreter_head)
	(sfnt_make_test_interpreter, struct sfnt_interpreter_test)
	(sfnt_run_interpreter_test, struct sfnt_generic_test_args)
	(sfnt_generic_check, sfnt_check_srp0, sfnt_check_szp0)
	(sfnt_check_sloop, struct sfnt_rounding_test_args)
	(sfnt_check_rounding, sfnt_check_smd, sfnt_check_scvtci)
	(sfnt_check_sswci, sfnt_check_ssw, sfnt_check_flipon)
	(sfnt_check_flipoff, npushb_test_args, npushw_test_args)
	(pushb_test_args, pushw_test_args, stack_overflow_test_args)
	(stack_underflow_test_args, rtg_test_args)
	(rtg_symmetric_test_args, rtg_1_test_args)
	(rtg_1_symmetric_test_args, rthg_test_args, rthg_1_test_args)
	(rtdg_test_args, rtdg_1_test_args, rtdg_2_test_args)
	(rtdg_3_test_args, else_test_args, jmpr_test_args, dup_test_args)
	(pop_test_args, clear_test_args, swap_test_args, depth_test_args)
	(cindex_test_args, mindex_test_args, raw_test_args)
	(loopcall_test_args, call_test_args, fdef_test_args)
	(fdef_1_test_args, endf_test_args, ws_test_args, rs_test_args)
	(wcvtp_test_args, rcvt_test_args, mppem_test_args, mps_test_args)
	(debug_test_args, lt_test_args, all_tests, main): Implement more
	instructions.

	* src/sfnt.h (enum sfnt_table, struct sfnt_glyph_metrics): Add new
	tables.  Add comment.

2023-01-30  Po Lu  <luangruo@yahoo.com>

	* cross/ndk-build/ndk-build-shared-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1)))):
	* cross/ndk-build/ndk-build-static-library.mk
	($(call objname,$(LOCAL_MODULE),$(basename $(1)))): Revert broken
	typo fixes.

	* src/sfnt.c (TEST_STATIC): Define ARRAYELTS.
	(sfnt_table_names): New CVT and FPGM tables.
	(sfnt_decompose_compound_glyph, sfnt_decompose_glyph)
	(struct sfnt_large_integer, sfnt_multiply_divide_1)
	(sfnt_count_leading_zero_bits, sfnt_multiply_divide_2)
	(sfnt_multiply_divide, sfnt_mul_fixed, sfnt_div_fixed)
	(sfnt_ceil_fixed, sfnt_build_glyph_outline): Fix fixed point
	multiplication routines on systems without 64 bit long long
	type.
	(SFNT_ENABLE_HINTING, struct sfnt_test_dcontext, sfnt_test_move_to)
	(sfnt_test_line_to, sfnt_test_curve_to, sfnt_test_get_glyph)
	(sfnt_test_free_glyph, sfnt_test_span, sfnt_test_edge_ignore)
	(sfnt_read_cvt_table, sfnt_test_edge, sfnt_test_raster)
	(sfnt_read_fpgm_table, struct sfnt_unit_vector)
	(struct sfnt_interpreter_definition)
	(struct sfnt_interpreter_graphics_state, struct sfnt_interpreter)
	(sfnt_div_f26dot6, sfnt_mul_f26dot6, sfnt_floor_f26dot6)
	(sfnt_ceil_f26dot6, sfnt_round_f26dot6, sfnt_init_graphics_state)
	(sfnt_make_interpreter, enum sfnt_interpreter_run_context)
	(sfnt_interpret_trap, STACKSIZE, sfnt_set_srounding_state)
	(sfnt_skip_code, sfnt_interpret_unimplemented, sfnt_interpret_fdef)
	(sfnt_interpret_idef, sfnt_interpret_if, sfnt_interpret_else)
	(sfnt_round_none, sfnt_round_to_grid, sfnt_round_to_double_grid)
	(sfnt_round_down_to_grid, sfnt_round_up_to_grid)
	(sfnt_round_to_half_grid, sfnt_round_super, sfnt_validate_gs)
	(sfnt_interpret_run, sfnt_interpret_font_program)
	(test_interpreter_profile, test_cvt_values, test_interpreter_cvt)
	(test_interpreter_head, sfnt_make_test_interpreter)
	(struct sfnt_interpreter_test, sfnt_run_interpreter_test)
	(struct sfnt_generic_test_args, sfnt_generic_check)
	(sfnt_check_srp0, sfnt_check_szp0, sfnt_check_sloop)
	(struct sfnt_rounding_test_args, sfnt_check_rounding)
	(sfnt_check_smd, sfnt_check_scvtci, sfnt_check_sswci)
	(sfnt_check_ssw, sfnt_check_flipon, sfnt_check_flipoff)
	(npushb_test_args, npushw_test_args, pushb_test_args)
	(pushw_test_args, stack_overflow_test_args)
	(stack_underflow_test_args, rtg_test_args, rtg_symmetric_test_args)
	(rtg_1_test_args, rtg_1_symmetric_test_args, rthg_test_args)
	(rthg_1_test_args, rtdg_test_args, rtdg_1_test_args)
	(rtdg_2_test_args, rtdg_3_test_args, else_test_args)
	(jmpr_test_args, dup_test_args, pop_test_args, clear_test_args)
	(swap_test_args, depth_test_args, cindex_test_args)
	(mindex_test_args, raw_test_args, loopcall_test_args)
	(call_test_args, fdef_test_args, fdef_1_test_args, endf_test_args)
	(ws_test_args, rs_test_args, wcvtp_test_args, rcvt_test_args)
	(mppem_test_args, mps_test_args, debug_test_args, lt_test_args)
	(all_tests, main): Check in WIP hinting code.

	* src/sfnt.h (enum sfnt_table): Add `cvt ' and `fpgm' tables.

2023-01-29  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Add missing Gnulib files.

	* INSTALL.android (module_target): Clarify documentation.

	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk: Fix building Neon
	objects.

	* java/AndroidManifest.xml.in: Add a version code.

2023-01-28  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (restartEmacs): New
	function.

	* src/android.c (struct android_emacs_service)
	(android_init_emacs_service): Add new method.
	(android_restart_emacs): New function.

	* src/android.h: Update prototypes.

	* src/emacs.c (Fkill_emacs): Call android_restart_emacs whenever
	appropriate.

	* INSTALL.android: Document how to build with libtiff.

	* build-aux/ndk-build-helper-1.mk (NDK_SO_NAME):
	* build-aux/ndk-build-helper-2.mk (NDK_A_NAME):
	* build-aux/ndk-build-helper-4.mk: Decrease number of duplicate
	dependencies found.

	* configure.ac (ANDROID_SDK_18_OR_EARLIER, XCONFIGURE, PNG_CFLAGS)
	(HAVE_TIFF): Allow using libtiff on Android.

	* cross/ndk-build/ndk-clear-vars.mk: Undefine additional
	variables.

	* cross/ndk-build/ndk-resolve.mk: Split CFLAGS resolution from
	a-name resolution, and do not recursively add archive or shared
	object names for dependencies of shared libraries.

	* src/Makefile.in (TIFF_CFLAGS): New variable.
	(EMACS_CFLAGS): Use it.

2023-01-28  Po Lu  <luangruo@yahoo.com>

	* src/image.c (syms_of_image): Fix typo.

	* doc/emacs/android.texi (Android File System): Describe an easier
	way to disable scoped storage.

	* java/AndroidManifest.xml.in: Add new permission to allow that.

	* java/README: Add more text describing Java.

	* java/org/gnu/emacs/EmacsContextMenu.java (Item): New fields
	`isCheckable' and `isChecked'.
	(EmacsContextMenu, addItem): New arguments.
	(inflateMenuItems): Set checked status as appropriate.

	* java/org/gnu/emacs/EmacsCopyArea.java (perform): Disallow
	operations where width and height are less than or equal to zero.

	* lisp/menu-bar.el (menu-bar-edit-menu): Make
	execute-extended-command available as a menu item.

	* src/androidmenu.c (android_init_emacs_context_menu)
	(android_menu_show): Implement menu check boxes.

	* src/menu.c (have_boxes): Treat Android builds as providing menu
	checkboxes.

2023-01-28  Po Lu  <luangruo@yahoo.com>

	* lisp/term/android-win.el (window-system-initialization): Create
	default fontset.

	* src/sfntfont.c (sfntfont_read_cmap, sfntfont_open): Fix leaks of
	file descriptors.

	* m4, lib: Update from Gnulib.

	* INSTALL.android: Document support for gnutls and libgmp.

	* build-aux/ndk-build-helper-1.mk (NDK_SO_NAMES, NDK_INCLUDES)
	(SYSTEM_LIBRARIES):
	* build-aux/ndk-build-helper-2.mk: Recursively resolve and add
	shared library dependencies; even those of static libraries.

	* build-aux/ndk-module-extract.awk: Fix makefile_imports code.

	* configure.ac (ANDROID_SDK_18_OR_EARLIER, XCONFIGURE)
	(LIBGMP_CFLAGS): Enable GMP and gnutls on Android.

	* cross/ndk-build/Makefile.in (LOCAL_EXPORT_C_INCLUDES):
	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-clear-vars.mk:
	* cross/ndk-build/ndk-resolve.mk (NDK_SYSTEM_LIBRARIES):
	(NDK_LOCAL_EXPORT_C_INCLUDES_$(LOCAL_MODULE)):
	(NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE)): Implement ``LOCAL_ASM_RULE''
	and ``LOCAL_C_ADDITIONAL_FLAGS'' extensions for libgmp.

	* doc/emacs/input.texi (Touchscreens): Document how to
	horizontally scroll.

	* java/org/gnu/emacs/EmacsActivity.java (attachWindow): Give the
	view focus again if necessary.
	(onPause): Call right super function.

	* java/org/gnu/emacs/EmacsPreferencesActivity.java (onClick):
	Clear dumpFileName lest Emacs try to load a nonexistent dump file.

	* java/org/gnu/emacs/EmacsView.java (onDetachedFromWindow)
	(onAttachedToWindow): Call super functions.
	(onCreateInputConnection): Make sure the IME never obscures Emacs.

	* java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp):
	Improve tracking of quit keys.

	* lisp/isearch.el (isearch-mode): Bring up the onscreen keyboard.

	* lisp/touch-screen.el (touch-screen-current-tool): Add three
	fields.
	(touch-screen-handle-scroll): Allow hscrolling as well.
	(touch-screen-handle-touch): Add additional fields to
	`touch-screen-current-tool'.

	* src/Makefile.in (LIBGMP_CFLAGS, EMACS_CFLAGS): Add new variable.

	* src/android.c (android_run_select_thread, android_write_event):
	Use pthread_cond_broadcast because pthread_cond_signal does
	nothing on some Android versions/devices?

2023-01-26  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/input.texi (On-Screen Keyboards): Fix typo.

	* INSTALL.android: Mention that apksigner is also required.

	* configure.ac: Correctly add cross/Makefile to SUBDIR_MAKEFILES.

	* cross/Makefile.in (config.status): Depend on
	$(top_srcdir)/config.status.

	* doc/emacs/input.texi (On-Screen Keyboards): Document how to quit
	without a physical keyboard.

	* java/org/gnu/emacs/EmacsNative.java (quit): New function `quit'.

	* java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): New field
	`lastVolumeButtonPress'.
	(onKeyDown): Quit if necessary.

	* m4/ndk-build.m4 (ndk_where_cc): Fix search if CC is not a single
	word.

	* src/android.c (android_open): Remove unused variable.
	(quit): New function.

	* src/androidmenu.c (android_process_events_for_menu): Allow
	quitting the menu.

	* src/xterm.c (handle_one_xevent, x_term_init, syms_of_xterm):
	Implement features illustrated above, so they work on free
	operating systems.

	* src/xterm.h (struct x_display_info): New fields `quit_keysym',
	`quit_keysym_time'.

2023-01-26  Po Lu  <luangruo@yahoo.com>

	* INSTALL.android: Document how to install sqlite3.

	* build-aux/ndk-build-helper-1.mk (SYSTEM_LIBRARIES):
	* build-aux/ndk-build-helper-2.mk (SYSTEM_LIBRARIES): Add liblog
	and libandroid.

	* configure.ac (SQLITE3_LIBS, HAVE_SQLITE3)
	(HAVE_SQLITE3_LOAD_EXTENSION): Support on Android.
	(APKSIGNER): Look for this new required binary.

	* cross/ndk-build/ndk-build-shared-library.mk (objname):
	* cross/ndk-build/ndk-build-static-library.mk (objname): Avoid
	duplicate rules by prefixing objects with module type.

	* cross/ndk-build/ndk-build.mk.in (NDK_BUILD_SHARED): Fix
	definition.

	* cross/ndk-build/ndk-resolve.mk
	(NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE)): Handle new system libraries.

	* doc/emacs/android.texi (Android File System): Document Android
	10 system restriction.

	* java/AndroidManifest.xml.in: Target Android API 33, not 28.

	* java/Makefile.in (SIGN_EMACS_V2, APKSIGNER): New variables.
	($(APK_NAME)): Make sure to apply a ``version 2 signature'' to the
	package as well.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
	argument apiLevel.

	* java/org/gnu/emacs/EmacsNoninteractive.java (main):
	* java/org/gnu/emacs/EmacsThread.java (run): Pass API level.

	* m4/ndk-build.m4 (ndk_package_mape): Add package mapping for
	sqlite3.

	* src/Makefile.in (SQLITE3_CFLAGS): New substitution.
	(EMACS_CFLAGS): Add that variable.

	* src/android.c (android_api_level): New variable.
	(initEmacs): Set it.
	(android_file_access_p): Make static.
	(android_hack_asset_fd): Adjust for restrictions in Android 29 and
	later.
	(android_close_on_exec): New function.
	(android_open): Adjust to not duplicate file descriptor even if
	CLOEXEC.
	(android_faccessat): Use fstatat at-func emulation.

	* src/android.h: Update prototypes.

	* src/dired.c (file_name_completion_dirp):
	* src/fileio.c (file_access_p, Faccess_file): Now that
	sys_faccessat takes care of everything, stop calling
	android_file_access_p.

2023-01-26  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Ignore lib/math.h.

	* INSTALL.android: Update accordingly.

	* build-aux/ndk-build-helper-1.mk:
	* build-aux/ndk-build-helper-2.mk:
	* build-aux/ndk-build-helper.mk:
	* build-aux/ndk-module-extract.awk: Handle C++ modules.
	* configure.ac: Enable libxml2 on Android.

	* cross/ndk-build/Makefile.in:
	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk:
	* cross/ndk-build/ndk-build.mk.in:
	* cross/ndk-build/ndk-resolve.mk: Fix dependency resolution of
	includes.

	* java/org/gnu/emacs/EmacsView.java (popupMenu): Fix minimum SDK
	version for actual popup menus.
	* lib/math.h: Delete file.

	* m4/ndk-build.m4 (ndk_SEARCH_MODULE, ndk_CHECK_MODULES): Look for
	nasm and C++ libraries.

	* src/android.c (faccessat): Rename to `android_faccessat'.

	* src/android.h: Update prototypes.

	* src/dired.c (file_name_completion_dirp):
	* src/fileio.c (file_access_p, Faccess_file, file_directory_p):
	* src/lisp.h:
	* src/lread.c (openp):
	* src/process.c (allocate_pty): Use sys_faccessat.
	* src/sysdep.c (sys_faccessat): New function.

2023-01-26  Po Lu  <luangruo@yahoo.com>

	* cross/ndk-build/ndk-build.in: Delete unused file.

2023-01-25  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsDrawLine.java: Fix this again.

	* java/org/gnu/emacs/EmacsNoninteractive.java (main): Port to
	Android 2.3.3.

	* java/org/gnu/emacs/EmacsSdk11Clipboard.java: Port to Android
	4.0.3.

	* java/org/gnu/emacs/EmacsService.java (getClipboardManager): New
	function.

	* src/alloc.c (find_string_data_in_pure): Fix Android alignment
	issue.

	* src/android-emacs.c (main): Port to Android 4.4.

	* src/android.c (initEmacs): Align stack to 32 bytes, so it ends
	up aligned to 16 even though gcc thinks the stack is already
	aligned to 16 bytes.

	* src/callproc.c (init_callproc): Use /system/bin/sh instead of
	/bin/sh by default.

	* cross/lib/math.h: Delete header.

	* java/Makefile.in (emacs.apk-in): Don't call cp with empty args.

	* java/org/gnu/emacs/EmacsDrawLine.java (perform): Fix for
	PostScript filling semantics.

	* src/Makefile.in (android-emacs): Build android-emacs directly.

	* doc/emacs/android.texi (Android Startup, Android Environment):
	Document that restrictions on starting Emacs have been lifted.

	* java/README: Document Java for Emacs developers and how the
	Android port works.

	* java/org/gnu/emacs/EmacsApplication.java (EmacsApplication)
	(findDumpFile): New function.
	(onCreate): Factor out dump file finding functions to there.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): Update
	function declarations.

	* java/org/gnu/emacs/EmacsNoninteractive.java: New class.

	* java/org/gnu/emacs/EmacsService.java (getApkFile)
	(onCreate): Pass classpath to setEmacsParams.

	* java/org/gnu/emacs/EmacsThread.java (run): Label as an
	@Override.

	* lisp/loadup.el: Don't dump on Android when noninteractive.

	* lisp/shell.el (shell--command-completion-data): Handle
	inaccessible directories.

	* src/Makefile.in (android-emacs): Link with Gnulib.

	* src/android-emacs.c (main): Implement to launch app-process and
	then EmacsNoninteractive.

	* src/android.c (setEmacsParams): New argument `class_path'.
	Don't set stuff up when running noninteractive.

	* src/android.h (initEmacs): Likewise.

	* src/androidfont.c (init_androidfont):
	* src/androidselect.c (init_androidselect): Don't initialize when
	running noninteractive.

	* src/emacs.c (load_pdump): New argument `dump_file'.
	(android_emacs_init): Give new argument `dump_file' to
	`load_pdump'.

	* src/sfntfont-android.c (init_sfntfont_android): Don't initialize
	when running noninteractive.

	* admin/merge-gnulib (GNULIB_MODULES): Add printf-posix and
	vasprintf-posix.

	* m4, lib: Update from Gnulib.

	* configure.ac (CFLAGS): Add -DHAVE_CONFIG_H.

2023-01-24  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/processes.texi (Subprocess Creation): Document
	variables containing program names.

	* etc/NEWS: Document new variables.

	* java/Makefile.in (CROSS_BINS): Add missing etags binary.

	* lisp/cedet/semantic/db-ebrowse.el
	(semanticdb-create-ebrowse-database):
	* lisp/gnus/mail-source.el (mail-source-movemail-program):
	* lisp/hexl.el (hexl-program):
	* lisp/htmlfontify.el (hfy-etags-bin):
	* lisp/ielm.el (inferior-emacs-lisp-mode):
	* lisp/mail/rmail.el (rmail-autodetect):
	(rmail-insert-inbox-text):
	* lisp/org/org-ctags.el (org-ctags-path-to-ctags):
	* lisp/progmodes/cperl-mode.el (cperl-etags):
	* lisp/speedbar.el (speedbar-fetch-etags-command):
	* lisp/textmodes/reftex-global.el (reftex-create-tags-file): Use
	new variables.

	* src/callproc.c (syms_of_callproc): Introduce new variables
	naming binaries redistributed with Emacs.

	* INSTALL.android: Update documentation.

	* build-aux/ndk-build-helper-1.mk: When building shared
	libraries, do not link libemacs.so with dependent archive files.

	* build-aux/ndk-build-helper-2.mk: Add whole archive dependencies
	as well.

	* configure.ac (HAVE_JPEG): Enable on Android.

	* cross/ndk-build/ndk-build-shared-library.mk: Link the shared
	object with archive file dependencies.

	* cross/ndk-build/ndk-build-static-library.mk: Build all code
	position-independently.

	* cross/ndk-build/ndk-resolve.mk: Separately resolve a names of
	archive and whole archive dependencies.

	* src/Makefile.in (JPEG_CFLAGS): New variable.
	(EMACS_CFLAGS): Add it.

2023-01-24  Po Lu  <luangruo@yahoo.com>

	* INSTALL.android: Update.

	* build-aux/ndk-build-helper-1.mk: Fix typo.

	* configure.ac: Enable --with-json on Android.

	* cross/ndk-build/ndk-build-shared-library.mk:
	(NDK_CFLAGS_$(LOCAL_MODULE)):
	(LOCAL_MODULE_FILENAME):
	* cross/ndk-build/ndk-build-static-library.mk:
	(ALL_OBJECT_FILES$(LOCAL_MODULE)):
	(LOCAL_MODULE_FILENAME): Recursively resolve dependencies.
	* cross/ndk-build/ndk-resolve.mk: New function.

	* doc/emacs/android.texi (Android Startup): Document how Emacs is
	dumped during initial startup.

	* java/Makefile.in (filename): Fix build with multiple shared
	libraries.

	* java/README: Improve commentary.

	* java/org/gnu/emacs/EmacsApplication.java (onCreate): Look and
	set dump file.

	* java/org/gnu/emacs/EmacsNative.java (getFingerprint): New
	function getFingerprint.

	* java/org/gnu/emacs/EmacsPreferencesActivity.java (onCreate):
	Add option to erase the dump file.

	* java/org/gnu/emacs/EmacsService.java (browseUrl): New function.

	* java/org/gnu/emacs/EmacsThread.java (run): Specify dump file if
	found.

	* lisp/loadup.el: Always dump during loadup on Android.

	* lisp/net/browse-url.el (browse-url--browser-defcustom-type)
	(browse-url-default-browser, browse-url-default-android-browser):
	New browse url type.

	* m4/ndk-build.m4 (ndk_package_map): Map jansson to libjansson.

	* src/android.c (struct android_emacs_service): New method
	`browse_url'.
	(getFingerprint): New function.
	(android_init_emacs_service): Initialize new method.
	(android_browse_url): New function.

	* src/android.h: Update prototypes.

	* src/androidselect.c (Fandroid_browse_url): New function.
	(syms_of_androidselect): Define it.

	* src/emacs.c (load_pdump): Eschew excessively elaborate dump file
	location code on Android.

	* src/pdumper.c (Fdump_emacs_portable): Allow dumping while
	interactive on Android.
	(syms_of_pdumper): New variable `pdumper-fingerprint'.

	* src/sfntfont-android.c (sfntfont_android_composite_bitmap): Fix
	unused variables.

2023-01-24  Po Lu  <luangruo@yahoo.com>

	* admin/merge-gnulib: Fix paths for rename.

	* lib-src/Makefile.in (DONT_INSTALL, clean): Correctly define
	asset-directory-tool.

	* cross/Makefile.in (distclean bootstrap-clean): Remove Makefile.

2023-01-24  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Update with new files.  Do not ignore std*.in.h.

	* INSTALL.android: Explain how to build Emacs with external
	dependencies.

	* Makefile.in (xcompile, cross): Rename to `cross'.
	(clean_dirs): Clean cross, not xcompile.

	* README: Document new directories.

	* build-aux/ndk-build-helper-1.mk:
	* build-aux/ndk-build-helper-2.mk:
	* build-aux/ndk-build-helper-3.mk:
	* build-aux/ndk-build-helper-4.mk:
	* build-aux/ndk-build-helper.mk (NDK_BUILD_DIR, my-dir):
	* build-aux/ndk-module-extract.awk: New files.
	* configure.ac: Set up libgif, libwebp, and libpng for ndk-build.

	* cross/ndk-build/Makefile.in:
	* cross/ndk-build/ndk-build-executable.mk:
	* cross/ndk-build/ndk-build-shared-library.mk:
	* cross/ndk-build/ndk-build-static-library.mk:
	* cross/ndk-build/ndk-build.in:
	* cross/ndk-build/ndk-build.mk.in:
	* cross/ndk-build/ndk-clear-vars.mk:
	* cross/ndk-build/ndk-prebuilt-shared-library.mk:
	* cross/ndk-build/ndk-prebuilt-static-library.mk: New files.

	* doc/emacs/android.texi (Android, Android Environment): Document
	clipboard support on Android.

	* doc/emacs/emacs.texi (Top): Update menus.

	* etc/MACHINES: Document Android.

	* java/AndroidManifest.xml.in: Respect new `--with-android-debug'
	option.

	* java/Makefile.in (CROSS_BINS, CROSS_LIBS): Adjust for rename.
	Include ndk-build.mk.
	(emacs.apk-in): Depend on shared libraries.  Then, package shared
	libraries.

	* java/org/gnu/emacs/EmacsClipboard.java: New file.

	* java/org/gnu/emacs/EmacsFontDriver.java: Update comment to say
	this is unused.

	* java/org/gnu/emacs/EmacsNative.java (sendExpose): New function
	`sendExpose'.

	* java/org/gnu/emacs/EmacsSdk11Clipboard.java:
	* java/org/gnu/emacs/EmacsSdk8Clipboard.java: New files.

	* java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap)
	(onDetachedFromWindow): When window is reattached, expose the
	frame.

	* lib/Makefile.in (VPATH, ALL_CFLAGS): Adjust for rename.

	* lisp/term/android-win.el (android-clipboard-exists-p)
	(android-get-clipboard, android-set-clipboard)
	(android-clipboard-owner-p, android-primary-selection)
	(android-get-clipboard-1, android-get-primary)
	(android-selection-bounds, android-encode-select-string)
	(gui-backend-get-selection, gui-backend-selection-exists-p)
	(gui-backend-selection-owner-p, gui-backend-set-selection): New
	functions.

	* m4/ndk-build.m4: New file.

	* src/Makefile.in (GIF_CFLAGS, ANDROID_LDFLAGS): New variables.
	(EMACS_CFLAGS): Add GIF_CFLAGS.  Include ndk-build.mk.
	(libemacs.so): Depend on and link with required libraries.

	* src/android.c (android_check_compressed_file): New function.
	(android_open): Work around Android platform bug.
	(sendExpose): New function.
	(android_readdir): Set d_type if this is a directory.

	* src/androidgui.h (enum android_event_type)
	(struct android_expose_event, union android_event): Add expose
	events.

	* src/androidselect.c: New file.

	* src/androidterm.c (handle_one_android_event) <ANDROID_EXPOSE>:
	Handle exposures.

	* src/androidterm.h: Update prototypes.

	* src/emacs.c (android_emacs_init): Initialize androidselect.

	* xcompile: Move to cross.
	* cross: New directory.

2023-01-21  Po Lu  <luangruo@yahoo.com>

	* doc/lispref/commands.texi (Touchscreen Events): Document
	changes.

	* lisp/touch-screen.el (touch-screen-current-tool): Update doc
	string.
	(touch-screen-precision-scroll): New user option.
	(touch-screen-handle-scroll): Use traditional scrolling by
	default.
	(touch-screen-handle-touch): Adjust format of
	touch-screen-current-tool.
	(touch-screen-track-tap): Don't print waiting for events.
	(touch-screen-track-drag): Likewise.  Also, don't call UPDATE
	until threshold is reached.
	(touch-screen-drag-mode-line-1, touch-screen-drag-mode-line):
	Improve window dragging.

	* src/fileio.c (Fverify_visited_file_modtime): Fix fs check.

2023-01-21  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android File System): Document that
	ls-lisp is now used by default.

	* java/org/gnu/emacs/EmacsThread.java (EmacsThread): Name the
	thread something meaningful.

	* lisp/loadup.el (featurep): Load ls-lisp on Android.

	* lisp/ls-lisp.el (ls-lisp-use-insert-directory-program): Default
	to off on Android.

	* src/android.c (android_is_directory): New function.
	(android_fstatat): Handle directories created by
	`android_opendir'.
	(android_open): Return meaningful file mode.
	(struct android_dir): New fields `next', `asset_file' and `fd'.
	(android_opendir): Populate those fields.
	(android_dirfd): New function.
	(android_closedir): Close file descriptor if set.
	(android_lookup_asset_directory_fd): New function.

	* src/android.h: Update prototypes.

	* src/androidfont.c (androidfont_check_init): New function.
	(androidfont_list, androidfont_match, androidfont_draw)
	(androidfont_open_font, androidfont_close_font)
	(androidfont_has_char, androidfont_encode_char)
	(androidfont_text_extents, androidfont_list_family): Initialize
	font driver if necessary.
	(init_androidfont): Don't initialize Java font if necessary.

	* src/dired.c (open_directory): Return android_dirfd if
	appropriate.
	(directory_files_internal, file_name_completion_dirp): Implement
	correctly for Android.

	* src/fileio.c (check_mutable_filename): New function.
	(Fcopy_file, Fdelete_directory_internal, Fdelete_file)
	(Frename_file, Fadd_name_to_file, Fmake_symbolic_link)
	(Fset_file_modes, Fset_file_times, Ffile_newer_than_file_p)
	(Fverify_visited_file_modtime, Fset_visited_file_modtime): Check
	that files being written to do not lie in /assets.

	* src/sfntfont-android.c (GET_SCANLINE_BUFFER)
	(sfntfont_android_u255to256, sfntfont_android_over_8888_1)
	(sfntfont_android_over_8888, sfntfont_android_composite_bitmap):
	Optimize for 64-bit ARM devices.
	(sfntfont_android_put_glyphs): Optimize away memset if background
	need not be filled.

2023-01-20  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_run_select_thread, android_select)
	(android_ftruncate):
	* src/android.h (ftruncate): Fix compilation on Android 16 and up.

	* src/android.c (android_run_select_thread, android_init_events)
	(android_select): Add alternative android_select implementation
	for API 16 and lower.

	* src/androidterm.c (handle_one_android_event): Fix
	use-after-frees.

	* xcompile/lib/gnulib.mk.in: Delete.

2023-01-20  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Don't ignore verbose.mk.android.

	* doc/emacs/Makefile.in (EMACSSOURCES): Add android.texi and
	input.texi.

	* doc/emacs/android.texi (Android): Document support for the
	on-screen keyboard.
	(Android Startup): Document how to start Emacs with -Q on Android.
	(Android Environment): Document how Emacs circumvents the system
	``task killer''.  Document changes to frame deletion behavior.

	* doc/emacs/emacs.texi (Top):
	* doc/emacs/input.texi (Other Input Devices)
	(On-Screen Keyboards): Document how to use Emacs with virtual
	keyboards.

	* doc/lispref/commands.texi (Touchscreen Events): Document changes
	to `touch-screen-track-drag'.

	* doc/lispref/frames.texi (Frames, On-Screen Keyboards): New node.

	* java/AndroidManifest.xml.in: Add settings activity and
	appropriate OSK adjustment mode.

	* java/org/gnu/emacs/EmacsActivity.java (onCreate): Allow creating
	Emacs with -Q.
	(onDestroy): Don't remove if killed by the system.

	* java/org/gnu/emacs/EmacsContextMenu.java (inflateMenuItems): Fix
	context menus again.

	* java/org/gnu/emacs/EmacsNative.java (EmacsNative): Make all
	event sending functions return long.

	* java/org/gnu/emacs/EmacsPreferencesActivity.java: New file.

	* java/org/gnu/emacs/EmacsService.java (EmacsService)
	(onStartCommand, onCreate, startEmacsService): Start as a
	foreground service if necessary to bypass system restrictions.

	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView):
	* java/org/gnu/emacs/EmacsThread.java (run):
	* java/org/gnu/emacs/EmacsView.java (onLayout)
	(onDetachedFromWindow):
	* java/org/gnu/emacs/EmacsWindow.java (viewLayout):
	Implement frame resize synchronization.

	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java
	(removeWindowConsumer): Adjust accordingly for changes to frame
	deletion behavior.

	* lisp/frame.el (android-toggle-on-screen-keyboard)
	(frame-toggle-on-screen-keyboard): New functions.

	* lisp/minibuffer.el (minibuffer-setup-on-screen-keyboard)
	(minibuffer-exit-on-screen-keyboard): New functions.
	(minibuffer-setup-hook, minibuffer-exit-hook): Add new functions
	to hooks.

	* lisp/touch-screen.el (touch-screen-relative-xy): Accept new
	value of window `frame'.  Return frame coordinates in that case.
	(touch-screen-set-point-commands): New variable.
	(touch-screen-handle-point-up): Respect that variable.
	(touch-screen-track-drag): Return `no-drag' where appropriate.
	(touch-screen-drag-mode-line-1, touch-screen-drag-mode-line):
	Refactor to use `no-drag'.

	* src/android.c (struct android_emacs_window): New methods.  Make
	all event sending functions return the event serial.
	(android_toggle_on_screen_keyboard, android_window_updated): New
	functions.

	* src/android.h: Update prototypes.

	* src/androidfns.c (Fandroid_toggle_on_screen_keyboard)
	(syms_of_androidfns): New functions.

	* src/androidgui.h (struct android_any_event)
	(struct android_key_event, struct android_configure_event)
	(struct android_focus_event, struct android_window_action_event)
	(struct android_crossing_event, struct android_motion_event)
	(struct android_button_event, struct android_touch_event)
	(struct android_wheel_event, struct android_iconify_event)
	(struct android_menu_event): Add `serial' fields.

	* src/androidterm.c (handle_one_android_event)
	(android_frame_up_to_date):

	* src/androidterm.h (struct android_output): Implement frame
	resize synchronization.

	* xcompile/verbose.mk.android: New file.

2023-01-19  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Add new files.

	* INSTALL.android: Explain how to build Emacs for ancient versions
	of Android.

	* admin/merge-gnulib (GNULIB_MODULES): Add getdelim.

	* build-aux/config.guess (timestamp, version):
	* build-aux/config.sub (timestamp, version): Autoupdate.

	* configure.ac (BUILD_DETAILS, ANDROID_MIN_SDK):
	(ANDROID_STUBIFY): Allow specifying CFLAGS via ANDROID_CFLAGS.
	Add new configure tests for Android API version when not
	explicitly specified.

	* doc/emacs/android.texi (Android): Add reference to ``Other
	Input Devices''.
	(Android File System): Remove restrictions on directory-files on
	the assets directory.

	* doc/emacs/emacs.texi (Top): Add Other Input Devices to menu.

	* doc/emacs/input.texi (Other Input Devices): New node.

	* doc/lispref/commands.texi (Touchscreen Events): Document
	changes to touchscreen input events.

	* doc/lispref/frames.texi (Pop-Up Menus): Likewise.

	* etc/NEWS: Announce changes.

	* java/Makefile.in: Use lib-src/asset-directory-tool to generate
	an `directory-tree' file placed in /assets.

	* java/debug.sh: Large adjustments to support Android 2.2 and
	later.

	* java/org/gnu/emacs/EmacsContextMenu.java (inflateMenuItems):
	* java/org/gnu/emacs/EmacsCopyArea.java (perform):
	* java/org/gnu/emacs/EmacsDialog.java (toAlertDialog):
	* java/org/gnu/emacs/EmacsDrawLine.java (perform):
	* java/org/gnu/emacs/EmacsDrawRectangle.java (perform):
	* java/org/gnu/emacs/EmacsDrawable.java (EmacsDrawable):
	* java/org/gnu/emacs/EmacsFillPolygon.java (perform):
	* java/org/gnu/emacs/EmacsFillRectangle.java (perform):
	* java/org/gnu/emacs/EmacsGC.java:
	* java/org/gnu/emacs/EmacsPixmap.java (destroyHandle):
	* java/org/gnu/emacs/EmacsSdk7FontDriver.java (draw): Avoid
	redundant canvas saves and restores.

	* java/org/gnu/emacs/EmacsService.java (run):
	* java/org/gnu/emacs/EmacsView.java (EmacsView):
	(handleDirtyBitmap):
	* java/org/gnu/emacs/EmacsWindow.java (changeWindowBackground)
	(EmacsWindow): Make compatible with Android 2.2 and later.

	* lib-src/Makefile.in (DONT_INSTALL): Add asset-directory-tool
	on Android.
	(asset-directory-tool${EXEEXT}): New target.

	* lib-src/asset-directory-tool.c (struct directory_tree, xmalloc)
	(main_1, main_2, main): New file.

	* lib, m4: Merge from gnulib.  This will be reverted before
	merging to master.

	* lisp/button.el (button-map, push-button):
	* lisp/frame.el (display-popup-menus-p): Improve touchscreen
	support.

	* lisp/subr.el (event-start, event-end): Handle touchscreen
	events.

	* lisp/touch-screen.el (touch-screen-handle-timeout)
	(touch-screen-handle-point-update, touch-screen-handle-point-up)
	(touch-screen-track-tap, touch-screen-track-drag)
	(touch-screen-drag-mode-line-1, touch-screen-drag-mode-line): New
	function
	([mode-line touchscreen-begin])
	([bottom-divider touchscreen-begin]): Bind new events.

	* lisp/wid-edit.el (widget-event-point, widget-keymap)
	(widget-event-start, widget-button--check-and-call-button)
	(widget-button-click): Improve touchscreen support.

	* src/alloc.c (make_lisp_symbol): Avoid ICE on Android NDK GCC.
	(mark_pinned_symbols): Likewise.

	* src/android.c (struct android_emacs_window): New struct.
	(window_class): New variable.
	(android_run_select_thread): Add workaround for Android platform
	bug.
	(android_extract_long, android_scan_directory_tree): New
	functions.
	(android_file_access_p): Use those functions instead.
	(android_init_emacs_window): New function.
	(android_init_emacs_gc_class): Update signature of `markDirty'.
	(android_change_gc, android_set_clip_rectangles): Tell the GC
	whether or not clip rects were dirtied.
	(android_swap_buffers): Do not look up method every time.
	(struct android_dir): Adjust for new directory tree lookup.
	(android_opendir, android_readdir, android_closedir): Likewise.
	(android_four_corners_bilinear): Fix coding style.
	(android_ftruncate): New function.

	* src/android.h: Update prototypes.  Replace ftruncate with
	android_ftruncate when necessary.

	* src/androidterm.c (handle_one_android_event): Pacify GCC.  Fix
	touch screen tool bar bug.

	* src/emacs.c (using_utf8): Fix compilation error.

	* src/fileio.c (Ffile_system_info): Return Qnil when fsusage.o
	is not built.

	* src/filelock.c (BOOT_TIME_FILE): Fix definition for Android.

	* src/frame.c (Fx_parse_geometry): Fix uninitialized variable
	uses.

	* src/keyboard.c (lispy_function_keys): Fix `back'.

	* src/menu.c (x_popup_menu_1): Handle touch screen events.
	(Fx_popup_menu): Document changes.

	* src/sfnt.c (main): Improve tests.

	* src/sfntfont-android.c (sfntfont_android_put_glyphs): Fix
	minor problem.
	(init_sfntfont_android): Check for
	HAVE_DECL_ANDROID_GET_DEVICE_API_LEVEL.

	* src/sfntfont.c (struct sfnt_font_desc): New fields `adstyle' and
	`languages'.
	(sfnt_parse_style): Append tokens to adstyle.
	(sfnt_parse_languages): New function.
	(sfnt_enum_font_1): Parse supported languages and adstyle.
	(sfntfont_list_1): Handle new fields.
	(sfntfont_text_extents): Fix uninitialized variable use.
	(syms_of_sfntfont, mark_sfntfont): Adjust accordingly.

2023-01-17  Po Lu  <luangruo@yahoo.com>

	* doc/emacs/android.texi (Android Fonts): Document that TTC format
	fonts are now supported.

	* doc/emacs/emacs.texi (Top): Fix menus.

	* doc/lispref/commands.texi (Touchscreen Events)
	(Key Sequence Input): Document changes to touchscreen events.

	* etc/DEBUG: Describe how to debug 64 bit binaries on Android.

	* java/org/gnu/emacs/EmacsCopyArea.java (perform): Explicitly
	recycle copy bitmap.

	* java/org/gnu/emacs/EmacsDialog.java (EmacsDialog): New class.

	* java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Use 5
	point PolyLine like X, because Android behaves like Postscript on
	some devices and X elsewhere.

	* java/org/gnu/emacs/EmacsFillRectangle.java (perform): Explicitly
	recycle copy bitmap.

	* java/org/gnu/emacs/EmacsPixmap.java (destroyHandle): Explicitly
	recycle bitmap and GC if it is big.

	* java/org/gnu/emacs/EmacsView.java (EmacsView): Make
	`bitmapDirty' a boolean.
	(handleDirtyBitmap): Reimplement in terms of that boolean.
	Explicitly recycle old bitmap and GC.
	(onLayout): Fix lock up.
	(onDetachedFromWindow): Recycle bitmap and GC.

	* java/org/gnu/emacs/EmacsWindow.java (requestViewLayout):
	Update call to explicitlyDirtyBitmap.

	* src/android.c (android_run_select_thread, android_select):
	Really fix android_select.
	(android_build_jstring): New function.

	* src/android.h: Update prototypes.

	* src/androidmenu.c (android_process_events_for_menu): Totally
	unblock input before process_pending_signals.
	(android_menu_show): Remove redundant unblock_input and debugging
	code.
	(struct android_emacs_dialog, android_init_emacs_dialog)
	(android_dialog_show, android_popup_dialog, init_androidmenu):
	Implement popup dialogs on Android.

	* src/androidterm.c (android_update_tools)
	(handle_one_android_event, android_frame_up_to_date): Allow
	tapping tool bar items.
	(android_create_terminal): Add dialog hook.
	(android_wait_for_event): Adjust call to android_select.

	* src/androidterm.h (struct android_touch_point): New field
	`tool_bar_p'.

	* src/keyboard.c (read_key_sequence, head_table)
	(syms_of_keyboard): Prefix touchscreen events with posn.

	* src/keyboard.h (EVENT_HEAD): Handle touchscreen events.

	* src/process.c (wait_reading_process_output): Adjust call to
	android_select.

	* src/sfnt.c (sfnt_read_table_directory): If the first long turns
	out to be ttcf, return -1.
	(sfnt_read_ttc_header): New function.
	(main): Test TTC support.

	* src/sfnt.h (struct sfnt_ttc_header): New structure.
	(enum sfnt_ttc_tag): New enum.

	* src/sfntfont-android.c
	(struct sfntfont_android_scanline_buffer): New structure.
	(GET_SCANLINE_BUFFER): New macro.  Try to avoid so much malloc
	upon accessing the scanline buffer.
	(sfntfont_android_put_glyphs): Do not use SAFE_ALLOCA to allocate
	the scaline buffer.
	(Fandroid_enumerate_fonts): Enumerate ttc fonts too.

	* src/sfntfont.c (struct sfnt_font_desc): New field `offset'.
	(sfnt_enum_font_1): Split out enumeration code from
	sfnt_enum_font.
	(sfnt_enum_font): Read TTC tables and enumerate each font therein.
	(sfntfont_open): Seek to the offset specified.

	* xcompile/Makefile.in (maintainer-clean): Fix depends here.

2023-01-16  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (sfnt_decompose_compound_glyph): Correct treatment of
	the Y offset in components with ARG_1_AND_2_ARE_WORDS.
	(main): Update debugging code.

	* doc/emacs/android.texi (Android, Android Environment): Improve
	documentation.

	* doc/lispref/commands.texi (Touchscreen Events): Document changes
	to touchscreen support.

	* doc/lispref/display.texi (Defining Faces, Window Systems):
	* doc/lispref/frames.texi (Frame Layout)
	(Font and Color Parameters):
	* doc/lispref/os.texi (System Environment): Document Android in
	various places.

	* java/org/gnu/emacs/EmacsWindow.java (figureChange): Fix crash.

	* lisp/loadup.el ("touch-screen"): Load touch-screen.el.

	* lisp/pixel-scroll.el: Autoload two functions.

	* lisp/term/android-win.el: Add require 'touch-screen.

	* lisp/touch-screen.el (touch-screen-current-tool)
	(touch-screen-current-timer, touch-screen-delay)
	(touch-screen-relative-xy, touch-screen-handle-scroll)
	(touch-screen-handle-timeout, touch-screen-handle-point-update)
	(touch-screen-handle-point-up, touch-screen-handle-touch)
	(global-map, touch-screen): New file.

	* src/android.c (android_run_debug_thread): Fix build on 64 bit
	systems.
	(JNICALL, android_put_pixel): Likewise.
	(android_transform_coordinates, android_four_corners_bilinear)
	(android_fetch_pixel_bilinear, android_project_image_bilinear)
	(android_fetch_pixel_nearest_24, android_fetch_pixel_nearest_1)
	(android_project_image_nearest): New functions.

	* src/androidgui.h (struct android_transform): New structure.

	* src/androidterm.c (android_note_mouse_movement): Remove obsolete
	TODO.
	(android_get_scale_factor): New function.
	(android_draw_underwave): Scale underwave correctly.

	* src/dispextern.h: Support native image transforms on Android.

	* src/image.c (matrix_identity, matrix_rotate)
	(matrix_mirror_horizontal, matrix_translate): New functions.
	(image_set_transform): Implement native image transforms on
	Android.
	(Fimage_transforms_p): Implement on Android.

	* src/keyboard.c (make_lispy_event, syms_of_keyboard): Handle
	touch screen menu bar events.

	* src/sfnt.c: Fix typo in comment.

	* src/sfntfont-android.c (sfntfont_android_blend, U255TO256)
	(sfntfont_android_put_glyphs): Prevent redundant swizzling.

	* src/sfntfont.c (sfntfont_lookup_char): Fix build on 64 bit
	systems.

2023-01-15  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsActivity.java (onCreate): Set the
	default theme to Theme.DeviceDefault.NoActionBar if possible.
	(onContextMenuClosed): Add hack for Android bug.

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu)
	(onMenuItemClick): Set flag upon submenu selection.
	(inflateMenuItems): Set onClickListener for submenus as well.
	(display1): Clear new flag.

	* java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Fix
	rectangle bounds.

	* java/org/gnu/emacs/EmacsNative.java (setEmacsParams): New
	argument for the cache directory.

	* java/org/gnu/emacs/EmacsService.java (onCreate): Pass cache
	directory.
	(sync): New function.

	* src/android.c (struct android_emacs_service): New method `sync'.
	(setEmacsParams, initEmacs): Handle cache directory.
	(android_init_emacs_service): Initialize new method `sync'.
	(android_sync): New function.

	* src/androidfns.c (Fx_show_tip): Call both functions.

	* src/androidgui.h: Update prototypes.

	* src/androidmenu.c (struct android_menu_subprefix)
	(android_free_subprefixes, android_menu_show): Handle submenu
	prefixes correctly.

	* src/androidterm.c (handle_one_android_event): Clear help echo
	on MotionNotify like on X.

	* src/menu.c (single_menu_item): Enable submenus on Android.

2023-01-15  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed):
	New function.

	* java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): New
	field `itemAlreadySelected'.
	(onMenuItemClick): New function.
	(inflateMenuItems): Attach onClickListener as appropriate.
	(display1): Clear itemAlreadySelected.
	(display): Fix runnable synchronization.

	* java/org/gnu/emacs/EmacsNative.java (sendContextMenu): New
	function.

	* java/org/gnu/emacs/EmacsView.java (popupMenu):
	(cancelPopupMenu): Set popupactive correctly.

	* src/android.c (android_run_select_thread): Fix android_select
	again.
	(android_wait_event): New function.

	* src/android.h: Update prototypes.
	* src/androidgui.h (enum android_event_type): New
	`ANDROID_CONTEXT_MENU' event.
	(struct android_menu_event, union android_event): Add new event.

	* src/androidmenu.c (struct android_emacs_context_menu): New
	structure.
	(android_init_emacs_context_menu): Add `dismiss' method.
	(struct android_dismiss_menu_data): New structure.
	(android_dismiss_menu, android_process_events_for_menu): New
	functions.
	(android_menu_show): Set an actual item ID.
	(popup_activated): Define when stubify as well.
	(Fmenu_or_popup_active_p): New function.
	(syms_of_androidmenu): New function.

	* src/androidterm.c (handle_one_android_event): Handle context
	menu events.

	* src/androidterm.h (struct android_display_info): New field for
	menu item ID.

	* src/emacs.c (android_emacs_init): Call syms_of_androidmenu.

	* src/xdisp.c (note_mouse_highlight): Return if popup_activated on
	Android as well.

2023-01-14  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_run_select_thread, android_select):
	Handle EINTR in sem_wait and fix sigsets.

	* xcompile/lib/fpending.c (__fpending): Fix gnulib problem.

	* xcompile/lib/fpending.c (__fpending):
	* xcompile/lib/open.c:
	* xcompile/lib/unistd.c (_GL_UNISTD_INLINE): Remove Android
	patches.

2023-01-14  Po Lu  <luangruo@yahoo.com>

	* java/Makefile.in (clean): Fix distclean and bootstrap-clean
	rules.
	* java/debug.sh (jdb_port, attach_existing, num_pids, line): Add
	new options to upload a gdbserver binary to the device.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): Make
	focusedActivities public.

	* java/org/gnu/emacs/EmacsContextMenu.java: New file.

	* java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Fix
	bounds computation.

	* java/org/gnu/emacs/EmacsGC.java (markDirty): Expressly provide
	stroke width.

	* java/org/gnu/emacs/EmacsService.java (getLocationOnScreen)
	(nameKeysym): New functions.

	* java/org/gnu/emacs/EmacsView.java (<init>): Disable focus
	highlight.
	(onCreateContextMenu, popupMenu, cancelPopupMenu): New functions.

	* java/org/gnu/emacs/EmacsWindow.java: Implement a kind of
	``override redirect'' window for tooltips.

	* src/android.c (struct android_emacs_service): New method
	`name_keysym'.
	(android_run_select_thread, android_init_events):
	(android_select): Release select thread on semaphores instead of
	signals to avoid one nasty race on SIGUSR2 delivery.
	(android_init_emacs_service): Initialize new method.
	(android_create_window): Handle CW_OVERRIDE_REDIRECT.
	(android_move_resize_window, android_map_raised)
	(android_translate_coordinates, android_get_keysym_name)
	(android_build_string, android_exception_check): New functions.

	* src/android.h: Update prototypes.

	* src/androidfns.c (android_set_parent_frame, Fx_create_frame)
	(unwind_create_tip_frame, android_create_tip_frame)
	(android_hide_tip, compute_tip_xy, Fx_show_tip, Fx_hide_tip)
	(syms_of_androidfns): Implement tooltips and iconification
	reporting.

	* src/androidgui.h (enum android_window_value_mask): Add
	CWOverrideRedirect.
	(struct android_set_window_attributes): Add `override_redirect'.
	(ANDROID_IS_MODIFIER_KEY): Recognize Caps Lock.

	* src/androidmenu.c (struct android_emacs_context_menu): New
	struct.
	(android_init_emacs_context_menu, android_unwind_local_frame)
	(android_push_local_frame, android_menu_show, init_androidmenu):
	New functions.

	* src/androidterm.c (handle_one_android_event): Fix NULL pointer
	dereference.
	(android_fullscreen_hook): Handle fullscreen correctly.
	(android_draw_box_rect): Fix top line.
	(get_keysym_name): Implement function.
	(android_create_terminal): Remove scroll bar stubs and add menu
	hook.

	* src/androidterm.h: Update prototypes.
	* src/emacs.c (android_emacs_init): Initialize androidmenu.c.
	* xcompile/Makefile.in: Fix clean rules.

2023-01-14  Po Lu  <luangruo@yahoo.com>

	* .gitignore: Add new files.

	* INSTALL.android: New file.

	* Makefile.in (clean_dirs): Clean xcompile as well.

	* admin/merge-gnulib (avoided_flags): Import Gnulib into Android
	directory as well.

	* doc/emacs/android.texi (Android):
	* doc/emacs/emacs.texi (Top): New node `Android'.

	* java/org/gnu/emacs/EmacsThread.java (run): Use right executable
	name.

	* lib/Makefile.in (ANDROID_CFLAGS): Use better way to refer to
	/src.
	(vpath): Delete ugly block of vpath statements.
	(mostlyclean): Remove Makefile.android.

	* lib/fpending.c (__fpending):
	* lib/open.c:
	* lib/unistd.c (_GL_UNISTD_INLINE): Revert changes to gnulib in
	lib/.

	* src/android.h:
	* src/androidterm.c: Fix build.
	* xcompile/Makefile.in (LIB_SRCDIR, LIBSRC_BINARIES)
	(src/verbose.mk, PRE_BUILD_DEPS, PHONY): Use gnulib in
	xcompile/lib/ as opposed to lib/.

	* xcompile/README: Adjust README.

	* xcompile/lib: Check-in Gnulib with patches for Android.

2023-01-13  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsService.java (queryTree): Fix NULL
	pointer dereference.

	* src/android.c (android_query_tree): Set *nchildren_return.

	* .gitignore: Add AndroidManifest.xml.

	* java/AndroidManifest.xml: Remove file that is now generated.

	* src/frame.c (make_monitor_attribute_list): Allow source to be NULL.

	* configure.ac (ANDROID_MIN_SDK): New variable.
	(DX): Remove and replace with D8.
	(XCONFIGURE): Check for the minimum version of Android the cross
	compiler compiles for.  Generate java/AndroidManifest.xml from
	java/AndroidManifest.xml.in.  Allow using Zlib on Android.

	* java/AndroidManifest.xml.in: New file.  Use the minimum SDK
	detected by configure.

	* java/Makefile.in (top_srcdir, version): New variables.
	(DX, D8): Replace with D8.
	(ANDROID_MIN_SDK, APK_NAME): New variables.
	(.PHONY, .PRECIOUS, classes.dex, emacs.apk): Generate $(APK_NAME)
	rather than `emacs.apk'.

	* java/debug.sh: New option --attach-existing.  Attach to an
	existing Emacs instance when specified.

	* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): New field
	`isPaused'.
	(invalidateFocus1): Fix infinite recursion.
	(detachWindow): Deiconify window.
	(attachWindow): Iconify the window if the activity is paused.
	(onCreate): Use the ``no title bar'' theme.
	(onPause, onResume): New functions.

	* java/org/gnu/emacs/EmacsNative.java (sendTouchUp, sendTouchDown)
	(sendTouchMove, sendWheel, sendIconified, sendDeiconified): New
	functions.

	* java/org/gnu/emacs/EmacsSdk7FontDriver.java (Sdk7Typeface):
	(list): Remove logging for code that is mostly going to be unused.

	* java/org/gnu/emacs/EmacsService.java (ringBell, queryTree)
	(getScreenWidth, getScreenHeight, detectMouse): New functions.

	* java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView)
	(surfaceChanged, surfaceCreated, surfaceDestroyed): Add extra
	debug logging.  Avoid deadlock in surfaceCreated.

	* java/org/gnu/emacs/EmacsView.java (EmacsView): Try very hard to
	make the SurfaceView respect Z order.  It didn't work.
	(handleDirtyBitmap): Copy over the contents from the old bitmap.
	(explicitlyDirtyBitmap): New function.
	(onLayout): Don't dirty bitmap if unnecessary.
	(damageRect, swapBuffers): Don't synchronize so hard.
	(onTouchEvent): Call window.onTouchEvent instead.
	(moveChildToBack, raise, lower): New functions.

	* java/org/gnu/emacs/EmacsWindow.java (Coordinate): New
	subclass.
	(pointerMap, isMapped, isIconified, dontFocusOnMap)
	(dontAcceptFocus): New fields.
	(EmacsWindow): Don't immediately register unmapped window.
	(viewLayout): Send configure event outside the lock.
	(requestViewLayout): Explicitly dirty the bitmap.
	(mapWindow): Register the window now.  Respect dontFocusOnMap.
	(unmapWindow): Unregister the window now.
	(figureChange, onTouchEvent): New functions.
	(onSomeKindOfMotionEvent): Handle scroll wheel events.
	(reparentTo, makeInputFocus, raise, lower, getWindowGeometry)
	(noticeIconified, noticeDeiconified, setDontAcceptFocus)
	(setDontFocusOnMap, getDontFocusOnMap): New functions.

	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java
	(registerWindow, detachWindow): Synchronize.
	(noticeIconified, noticeDeiconified): New functions.
	(copyWindows): New function.

	* lisp/frame.el (frame-geometry, frame-edges)
	(mouse-absolute-pixel-position, set-mouse-absolute-pixel-position)
	(frame-list-z-order, frame-restack, display-mouse-p)
	(display-monitor-attributes-list): Implement on Android.

	* lisp/mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event)
	(mouse-wheel-left-event, mouse-wheel-right-event): Define on
	Android.

	* src/android.c (struct android_emacs_service): New methods
	`ringBell', `queryTree', `getScreenWidth', `getScreenHeight',
	and `detectMouse'.
	(struct android_event_queue, android_init_events)
	(android_next_event, android_write_event): Remove write limit.
	(android_file_access_p): Handle directories correctly.
	(android_close): Fix coding style.
	(android_fclose): New function.
	(android_init_emacs_service): Initialize new methods.
	(android_reparent_window): Implement function.
	(android_bell, android_set_input_focus, android_raise_window)
	(android_lower_window, android_query_tree, android_get_geometry)
	(android_get_screen_width, android_get_screen_height)
	(android_get_mm_width, android_get_mm_height)
	(android_detect_mouse)
	(android_set_dont_focus_on_map, android_set_dont_accept_focus):
	New functions.
	(struct android_dir): New structure.
	(android_opendir, android_readdir, android_closedir): New
	functions.
	(emacs_abort): Implement here on Android and poke debuggerd into
	generating a tombstone.

	* src/android.h: Update prototypes.

	* src/androidfns.c (android_set_parent_frame): New function.
	(android_default_font_parameter): Use sane font size by default.
	(Fx_display_pixel_width, Fx_display_pixel_height)
	(Fx_display_mm_width, Fx_display_mm_height)
	(Fx_display_monitor_attributes_list): Rename to start with
	`android-'.  Implement.  Fiddle with documentation to introduce
	Android specific nuances.
	(Fandroid_display_monitor_attributes_list): New function.
	(Fx_frame_geometry, frame_geometry): New function.
	(Fandroid_frame_geometry): Implement correctly.
	(Fx_frame_list_z_order): Rename to start with `android-'.
	(android_frame_list_z_order, Fandroid_frame_list_z_order):
	Implement.
	(Fx_frame_restack): Rename to start with `android-'.
	(Fandroid_frame_restack): ``Implement''.
	(Fx_mouse_absolute_pixel_position): Rename to start with
	`android-'.
	(Fandroid_mouse_absolute_pixel_position): ``Implement''.
	(Fx_set_mouse_absolute_pixel_position): Rename to start with
	`android-'.
	(Fandroid_set_mouse_absolute_pixel_position): ``Implement''.
	(Fandroid_detect_mouse): New function.
	(android_set_menu_bar_lines): Use FRAME_ANDROID_DRAWABLE when
	clearing area.
	(android_set_no_focus_on_map, android_set_no_accept_focus): New
	functions.
	(android_frame_parm_handlers): Register new frame parameter
	handlers.
	(syms_of_androidfns): Update appropriately.

	* src/androidfont.c (androidfont_draw): Use FRAME_ANDROID_DRAWABLE
	instead of FRAME_ANDROID_WINDOW.

	* src/androidgui.h (enum android_event_type): New events.
	(struct android_touch_event, struct android_wheel_event)
	(struct android_iconify_event): New structures.
	(union android_event): Add new events.

	* src/androidterm.c (android_clear_frame): Use
	FRAME_ANDROID_DRAWABLE instead of FRAME_ANDROID_WINDOW.
	(android_flash, android_ring_bell): Implement bell ringing.
	(android_toggle_invisible_pointer): Don't TODO function that can't
	be implemented.
	(show_back_buffer, android_flush_dirty_back_buffer_on): Check if a
	buffer flip is required before doing the flip.
	(android_lower_frame, android_raise_frame): Implement functions.
	(android_update_tools, android_find_tool): New functions.
	(handle_one_android_event): Handle new iconification, wheel and
	touch events.
	(android_read_socket): Implement pending-autoraise-frames.
	(android_frame_up_to_date): Implement bell ringing.
	(android_buffer_flipping_unblocked_hook): Check if a buffer flip
	is required before doing the flip.
	(android_focus_frame, android_frame_highlight)
	(android_frame_unhighlight): New function.
	(android_frame_rehighlight): Implement functions.
	(android_iconify_frame): Always display error.
	(android_set_alpha): Update commentary.
	(android_free_frame_resources): Free frame touch points.
	(android_scroll_run, android_flip_and_flush)
	(android_clear_rectangle, android_draw_fringe_bitmap)
	(android_draw_glyph_string_background, android_fill_triangle)
	(android_clear_point, android_draw_relief_rect)
	(android_draw_box_rect, android_draw_glyph_string_bg_rect)
	(android_draw_image_foreground, android_draw_stretch_glyph_string)
	(android_draw_underwave, android_draw_glyph_string_foreground)
	(android_draw_composite_glyph_string_foreground)
	(android_draw_glyphless_glyph_string_foreground)
	(android_draw_glyph_string, android_clear_frame_area)
	(android_clear_under_internal_border, android_draw_hollow_cursor)
	(android_draw_bar_cursor, android_draw_vertical_window_border)
	(android_draw_window_divider): Use FRAME_ANDROID_DRAWABLE instead
	of FRAME_ANDROID_WINDOW for drawing operations.

	* src/androidterm.h (struct android_touch_point): New structure.
	(struct android_output): New fields.
	(FRAME_ANDROID_NEED_BUFFER_FLIP): New macro.

	* src/dired.c (emacs_readdir, open_directory)
	(directory_files_internal_unwind, read_dirent)
	(directory_files_internal, file_name_completion): Add indirection
	over readdir and opendir.  Use android variants on Android.

	* src/dispnew.c (Fopen_termscript):
	* src/fileio.c (fclose_unwind): Use emacs_fclose.
	(Faccess_file): Call android_file_access_p.
	(file_accessible_directory_p): Append right suffix to Android
	assets directory.
	(do_auto_save_unwind): Use emacs_fclose.

	* src/keyboard.c (lispy_function_keys): Use right function key for
	page up and page down.
	(Fopen_dribble_file): Use emacs_fclose.

	* src/lisp.h: New prototype emacs_fclose.

	* src/lread.c (close_infile_unwind): Use emacs_fclose.

	* src/sfnt.c (sfnt_curve_is_flat): Fix area-squared computation.
	(sfnt_prepare_raster): Compute raster width and height
	consistently with outline building.
	(sfnt_build_outline_edges): Use the same offsets used to set offy
	and offx.
	(main): Adjust debug code.

	* src/sfntfont-android.c (sfntfont_android_saturate32): Delete
	function.
	(sfntfont_android_blend, sfntfont_android_blendrgb): Remove
	unnecessary debug code.
	(sfntfont_android_composite_bitmap): Prevent out of bounds write.
	(sfntfont_android_put_glyphs): Use FRAME_ANDROID_DRAWABLE.
	(init_sfntfont_android): Initialize Monospace Serif font to
	something sensible.

	* src/sfntfont.c (sfntfont_text_extents): Clear glyph metrics
	before summing up pcm.
	(sfntfont_draw): Use s->font instead of s->face->font.

	* src/sysdep.c (emacs_fclose): Wrap around android_fclose on
	Android.

	* src/term.c (Fsuspend_tty, delete_tty): Use emacs_fclose.
	* src/verbose.mk.in (AM_V_DX): Replace with D8 version.

2023-01-11  Po Lu  <luangruo@yahoo.com>

	Bring up the sfnt-android font driver
	* configure.ac (ANDROID_CFLAGS): Add sfnt-related font objects
	to ANDROID_OBJ when not building stubs.
	* lisp/startup.el (android-fonts-enumerated): New variable.
	(normal-top-level): Set it.  Also enumerate fonts as early as
	possible upon startup.

	* src/alloc.c (cleanup_vector): Only finalize Android font
	entities.
	(garbage_collect): Mark sfntfont.c.

	* src/android.c (struct android_emacs_drawable): New field
	`damage_rect'.
	(android_init_emacs_drawable): Initialize
	Lorg/gnu/emacs/EmacsDrawable;#damageRect(Landroid/graphics/rect;)V.
	(android_create_gc): Initialize cached GC fields.
	(android_free_gc): Free cached GC clip rectangles.
	(android_change_gc): Cache fields as appropriate.
	(android_set_clip_rectangles): Set cached clip rectangles for
	easy access from C.
	(android_get_gc_values): Use cached values.
	(android_get_image): Remove obsolete comment.
	(android_lock_bitmap, android_damage_window): New functions that
	don't parallel anything on X.

	* src/android.h: Update prototypes.

	* src/androidfns.c (android_default_font_parameter): Set Droid
	Sans Mono as the default monospace font.
	(Fx_create_frame): Register the sfntfont driver.

	* src/androidgui.h (struct android_gc): Add C side caches for
	clip rectangles and the foreground and background colors.

	* src/androidterm.h: Update prototypes.

	* src/dispextern.h (struct gui_box): New struct.
	(gui_union_rectangles): New function.

	* src/emacs.c (android_emacs_init): Initialize Android font
	stuff late.
	* src/font.c (font_make_entity): Clear `is_android' field on
	Android.
	(font_make_entity_android): Set `is_android' field.
	* src/font.h (struct font_entity): New field `is_android'.

	* src/print.c (print_vectorlike): Don't print private data,
	which could include Lisp_Misc.

	* src/sfnt.c (sfnt_read_cmap_format_0, sfnt_read_cmap_format_2)
	(sfnt_read_cmap_format_4, sfnt_read_cmap_format_6)
	(sfnt_read_cmap_format_8, sfnt_read_cmap_format_12): Remove
	buggy pragmas.
	(sfnt_lookup_glyph_4_1): New function.
	(sfnt_lookup_glyph_4): Handle malformed lookup tables found on
	Android.
	(sfnt_lookup_glyph): Fix overflow problems in glyph checks.
	(sfnt_read_glyph): Handle empty glyphs.  This implements some
	behavior which everyone else seems to as well, but I can't find
	documented in the TrueType Reference Manual.
	(sfnt_free_glyph): Export correctly.
	(sfnt_transform_coordinates): Make faster.
	(sfnt_lerp_half): Fix lerping in some cases.
	(sfnt_decompose_glyph): Handle empty glyphs correctly.  Close
	contours manually instead of waiting for the edge building
	process to do that.  This lets curves be handled correctly.
	(struct sfnt_build_glyph_outline_context): Move internal struct
	back to sfnt.c.
	(sfnt_build_append): Fix detection of initial entry.
	(sfnt_curve_to_and_build_1): Fix De Casteljau implementation.
	(sfnt_curve_to_and_build): Use fixed point arithmetic to scale
	outlines.
	(sfnt_build_glyph_outline): Clear reference counts.  Use fixed
	point arithmetic.
	(sfnt_prepare_raster): Align rasters to 4 bytes,
	SFNT_POLY_ALIGNMENT.  Fix calculation of offx and offy.
	(sfnt_step_edge_by): Step edge by previously computed step_x.
	(sfnt_build_outline_edges): Adjust for already closed contours.
	Ignore edges abandoned after grid fit.  Also precompute step_x
	to avoid multiplication on each span rastered.
	(sfnt_poly_edges): Improve alignment.
	(sfnt_fill_span): Rewrite to avoid control flow in while loop.
	(sfnt_poly_span): Remove unnecessary code.
	(sfnt_raster_glyph_outline): Use raster stride instead of width.
	(sfnt_test_edge, sfnt_test_raster, main): Improve debugging
	code.

	* src/sfnt.h (struct sfnt_glyph_outline): Add refcount field to
	outline.
	(struct sfnt_build_glyph_outline_context): Remove private
	struct.
	(struct sfnt_raster): Add refcount field to raster.
	(struct sfnt_edge): Improve doc.  Add `source_x' field used when
	built with TEST.
	(SFNT_CEIL_FIXED): New macro.

	* src/sfntfont-android.c (sfntfont_android_saturate32)
	(sfntfont_android_scale32, sfntfont_android_mul8x2)
	(sfntfont_android_blend, U255TO256)
	(sfntfont_android_composite_bitmap, sfntfont_android_union_boxes)
	(sfntfont_android_put_glyphs, sfntfont_android_get_cache): New
	functions.
	(android_sfntfont_driver): New font driver.
	(Fandroid_enumerate_fonts): New function.
	(syms_of_sfntfont_android_for_pdumper, init_sfntfont_android)
	(syms_of_sfntfont_android): Initialize default fonts, special
	family mapping and font driver.
	* src/sfntfont.c (struct sfnt_font_desc): New fields
	`char_cache', `cmap_invalid' and `subtable'.
	(sfnt_setup_coding_system): Improve commentary.  Add default
	branch.  Fix return value.
	(sfnt_safe_encode_coding_object_1)
	(sfnt_safe_encode_coding_object_2):
	(sfnt_safe_encode_coding_object): Use decode_coding_object
	instead of encode_coding_object.
	(sfnt_decode_font_string): Adjust for rename.
	(sfnt_decode_foundry_name): New function.
	(sfnt_weight_descriptions, sfnt_slant_descriptions)
	(sfnt_width_descriptions): Fix definitions.
	(sfnt_parse_style): Make function work.
	(sfnt_enum_font): Initialize designer, char-cache and subtable
	platform ID.
	(sfntfont_charset_for_name, mark_sfntfont)
	(sfntfont_charset_for_cmap): New functions.
	(syms_of_sfntfont): New variable `sfnt-default-family-alist'.

	* src/sfntfont.h (_SFNTFONT_H_): Update prototypes.

	* src/xdisp.c (gui_union_rectangles): New function.

2023-01-08  Po Lu  <luangruo@yahoo.com>

	* configure.ac (ANDROID_OBJS): Add sfntfont files.

	* src/sfnt.h:
	* src/sfntfont-android.c:
	* src/sfntfont.c:
	* src/sfntfont.h: New files.

2023-01-08  Po Lu  <luangruo@yahoo.com>

	* src/android.c (android_change_gc): Fix situations where clip
	rects are cleared.
	(android_create_pixmap_from_bitmap_data): Fix bitmap data
	iteration.

	* src/androidfns.c (Fx_show_tip, Fx_hide_tip): Remove annoying
	errors.

	* src/androidgui.h (enum android_event_type)
	(struct android_crossing_event)
	(struct android_motion_event)
	(struct android_button_event, union android_event): New crossing,
	motion and button events.

	* src/androidterm.c (android_note_mouse_movement)
	(mouse_or_wdesc_frame, android_construct_mouse_click)
	(handle_one_android_event, android_mouse_position)
	(android_wait_for_event, android_set_window_size_1)
	(android_bitmap_icon, android_free_frame_resources)
	(syms_of_androidterm): New functions.  Handle crossing, motion and
	button events.

	* src/androidterm.h (struct android_display_info): New field
	`last_mouse_movement_time'.
	(struct android_output): Remove unused `need_buffer_flip' field.

	* src/emacs.c (android_emacs_init): Initialize sfntfont.

	* src/frame.c (syms_of_frame): Set frame_inhibit_implied_resize
	to some reasonable value.

	* src/frame.h (GCALIGNED_STRUCT): Set wait_event_type on Android.

	* src/sfnt.c (eassert, TEST_STATIC, available, enum sfnt_table)
	(sfnt_table_names, SFNT_ENDOF, struct sfnt_table_directory)
	(sfnt_scaler_type, sfnt_coerce_fixed, struct sfnt_hhea_table)
	(struct sfnt_cmap_table, enum sfnt_platform_id)
	(enum sfnt_unicode_platform_specific_id)
	(enum sfnt_macintosh_platform_specific_id)
	(enum sfnt_microsoft_platform_specific_id)
	(struct sfnt_cmap_encoding_subtable)
	(struct sfnt_cmap_encoding_subtable_data)
	(struct sfnt_cmap_format_0)
	(struct sfnt_cmap_format_2_subheader, struct sfnt_cmap_format_2)
	(struct sfnt_cmap_format_4, struct sfnt_cmap_format_6)
	(struct sfnt_cmap_format_8_or_12_group, struct sfnt_cmap_format_8)
	(struct sfnt_cmap_format_12, struct sfnt_maxp_table)
	(struct sfnt_loca_table_short, struct sfnt_loca_table_long)
	(struct sfnt_glyf_table, struct sfnt_simple_glyph)
	(struct sfnt_compound_glyph_component, struct sfnt_compound_glyph)
	(struct sfnt_glyph, sfnt_read_table_directory, file)
	(sfnt_read_cmap_table)
	(sfnt_read_head_table, success, sfnt_read_hhea_table)
	(sfnt_read_loca_table_short, sfnt_read_loca_table_long)
	(sfnt_read_maxp_table, sfnt_read_glyf_table)
	(sfnt_read_compound_glyph, sfnt_read_glyph, struct sfnt_point)
	(sfnt_expand_compound_glyph_context)
	(sfnt_decompose_compound_glyph, struct sfnt_glyph_outline)
	(enum sfnt_glyph_outline_flags)
	(struct sfnt_build_glyph_outline_context)
	(sfnt_build_append, sfnt_build_glyph_outline, struct sfnt_raster)
	(struct sfnt_edge, sfnt_prepare_raster, sfnt_build_outline_edges)
	(sfnt_raster_glyph_outline): Move structures to sfnt.h.
	(struct sfnt_long_hor_metric, sfnt_read_hmtx_table)
	(sfnt_lookup_glyph_metrics, sfnt_read_name_table, sfnt_find_name)
	(sfnt_read_meta_table, sfnt_find_metadata, sfnt_test_edge_ignore):
	New functions.
	(main): Add new tests.

2023-01-08  Po Lu  <luangruo@yahoo.com>

	* java/org/gnu/emacs/EmacsPaintQueue.java
	* java/org/gnu/emacs/EmacsPaintReq.java: Remove files.

	* java/org/gnu/emacs/EmacsCopyArea.java (perform, paintTo):
	* java/org/gnu/emacs/EmacsDrawLine.java:
	* java/org/gnu/emacs/EmacsDrawPoint.java:
	* java/org/gnu/emacs/EmacsDrawRectangle.java (paintTo):
	* java/org/gnu/emacs/EmacsDrawable.java:
	* java/org/gnu/emacs/EmacsFillPolygon.java:
	* java/org/gnu/emacs/EmacsFillRectangle.java:
	* java/org/gnu/emacs/EmacsFontDriver.java:
	* java/org/gnu/emacs/EmacsGC.java:
	* java/org/gnu/emacs/EmacsNative.java:
	* java/org/gnu/emacs/EmacsPixmap.java:
	* java/org/gnu/emacs/EmacsSdk23FontDriver.java:
	* java/org/gnu/emacs/EmacsSdk7FontDriver.java (textExtents1)
	(textExtents, draw):
	* java/org/gnu/emacs/EmacsService.java (copyArea):
	* java/org/gnu/emacs/EmacsSurfaceView.java:
	* java/org/gnu/emacs/EmacsView.java (onLayout, onFocusChanged):
	* java/org/gnu/emacs/EmacsWindow.java (run, resizeWindow)
	(lockCanvas, getBitmap, onKeyDown, onKeyUp)
	(onActivityDetached): Move rendering to main thread.  Make
	drawing operations completely static.

	* src/androidmenu.c: New file.

2023-01-07  Po Lu  <luangruo@yahoo.com>

	* src/sfnt.c (xmalloc, xrealloc, xfree, eassert, MIN)
	(sfnt_table_names, SFNT_ENDOF, struct sfnt_table_directory)
	(enum sfnt_scaler_type, sfnt_coerce_fixed, struct sfnt_hhea_table)
	(struct sfnt_cmap_table, enum sfnt_platform_id)
	(enum sfnt_unicode_platform_specific_id)
	(enum sfnt_macintosh_platform_specific_id)
	(enum sfnt_microsoft_platform_specific_id)
	(struct sfnt_cmap_encoding_subtable)
	(struct sfnt_cmap_encoding_subtable_data)
	(struct sfnt_cmap_format_0, struct sfnt_cmap_format_2_subheader)
	(struct sfnt_cmap_format_2, struct sfnt_cmap_format_4)
	(struct sfnt_cmap_format_6, struct sfnt_cmap_format_8_or_12_group)
	(struct sfnt_cmap_format_8, struct sfnt_cmap_format_12)
	(struct sfnt_maxp_table, struct sfnt_loca_table_short)
	(struct sfnt_loca_table_long, struct sfnt_glyf_table)
	(struct sfnt_simple_glyph, struct sfnt_compound_glyph_component)
	(struct sfnt_compound_glyph, struct sfnt_glyph, _sfnt_swap16)
	(_sfnt_swap32, sfnt_swap16, sfnt_find_table)
	(sfnt_read_cmap_format_0, sfnt_read_cmap_format_2)
	(sfnt_read_cmap_format_4, sfnt_read_cmap_format_6)
	(sfnt_read_cmap_format_8, sfnt_read_cmap_format_12)
	(sfnt_read_cmap_table_1, sfnt_read_cmap_table)
	(sfnt_lookup_glyph_0)
	(sfnt_lookup_glyph_2, sfnt_bsearch_above, sfnt_compare_uint16)
	(sfnt_lookup_glyph_4, sfnt_lookup_glyph_6, sfnt_lookup_glyph_8)
	(sfnt_lookup_glyph_12, sfnt_lookup_glyph, sfnt_read_head_table)
	(sfnt_read_hhea_table, sfnt_read_loca_table_short)
	(sfnt_read_loca_table_long, sfnt_read_maxp_table)
	(sfnt_read_glyf_table, sfnt_read_simple_glyph)
	(sfnt_read_compound_glyph, sfnt_read_glyph, sfnt_free_glyph)
	(struct sfnt_point, sfnt_transform_coordinates)
	(struct sfnt_compound_glyph_context)
	(sfnt_expand_compound_glyph_context, sfnt_round_fixed)
	(sfnt_decompose_compound_glyph, sfnt_lerp_half)
	(sfnt_decompose_glyph, struct sfnt_glyph_outline)
	(enum sfnt_glyph_outline_flags)
	(struct sfnt_build_glyph_outline_context, sfnt_build_append)
	(sfnt_move_to_and_build, sfnt_line_to_and_build, sfnt_mul_fixed)
	(sfnt_div_fixed, sfnt_ceil_fixed, sfnt_floor_fixed)
	(sfnt_curve_is_flat, sfnt_curve_to_and_build_1)
	(sfnt_curve_to_and_build, sfnt_build_glyph_outline)
	(struct sfnt_raster, struct sfnt_edge, sfnt_poly_coverage)
	(sfnt_poly_grid_ceil, sfnt_prepare_raster, sfnt_step_edge_by)
	(sfnt_build_outline_edges, sfnt_compare_edges, sfnt_poly_edges)
	(sfnt_saturate_short, sfnt_fill_span, sfnt_poly_span)
	(sfnt_raster_span, sfnt_raster_edge, sfnt_raster_glyph_outline)
	(struct sfnt_long_hor_metric, struct sfnt_hmtx_table)
	(struct sfnt_glyph_metrics, sfnt_read_hmtx_table)
	(sfnt_lookup_glyph_metrics, struct sfnt_test_dcontext)
	(sfnt_test_move_to, sfnt_test_line_to, sfnt_test_curve_to)
	(sfnt_test_get_glyph, sfnt_test_free_glyph, sfnt_test_span)
	(sfnt_test_edge, sfnt_test_raster, main): New file, meant to read
	TrueType fonts and OpenType fonts using TrueType outlines.

2023-01-02  Po Lu  <luangruo@yahoo.com>

	* Makefile.in (java): Depend on info.
	(MAKEFILE_NAME, config.status): Remove unneeded changes.

	* configure.ac (BUILD_DETAILS, ANDROID_STUBIFY): Don't require a
	C++ compiler on Android.

	* java/AndroidManifest.xml <EmacsActivity>: Set launchMode
	appropriately.
	<EmacsMultitaskActivity>: New activity.

	* java/Makefile.in (CROSS_BINS): Add Emacsclient to the list of
	binaries that will be copied into the app package.

	* java/org/gnu/emacs/EmacsActivity.java (onCreate): Use the window
	attachment manager.

	* java/org/gnu/emacs/EmacsCopyArea.java (paintTo): Implement clip
	masks correctly.

	* java/org/gnu/emacs/EmacsDrawRectangle.java (getRect, paintTo):
	Fix damage tracking rectangles.

	* java/org/gnu/emacs/EmacsFontDriver.java (toString): New
	function.
	(FontMetrics): Fix signature of textExtents.

	* java/org/gnu/emacs/EmacsMultitaskActivity.java: New file.

	* java/org/gnu/emacs/EmacsNative.java (sendFocusIn, sendFocusOut)
	(sendWindowAction): New functions.

	* java/org/gnu/emacs/EmacsPaintQueue.java (run): Correct treatment
	of the clip rectangle list.

	* java/org/gnu/emacs/EmacsPixmap.java: Add constructor for mutable
	pixmaps.

	* java/org/gnu/emacs/EmacsSdk23FontDriver.java: New file.

	* java/org/gnu/emacs/EmacsSdk7FontDriver.java (Sdk7Typeface)
	(Sdk7FontEntity, Sdk7FontObject, checkMatch, hasChar, encodeChar):
	Implement text display and fix font metrics semantics.

	* java/org/gnu/emacs/EmacsService.java (EmacsService): Remove
	availableChildren.
	(getLibraryDirectory, onCreate): Pass pixel density to Emacs.
	(clearArea): Fix arguments.  Switch to using the window attachment
	manager.

	* java/org/gnu/emacs/EmacsSurfaceView.java (surfaceChanged)
	(surfaceCreated): Flip buffers on surface attachment.

	* java/org/gnu/emacs/EmacsView.java (swapBuffers): New argument
	FORCE.  Always swap if it is true.
	(onKeyMultiple, onFocusChanged): New functions.

	* java/org/gnu/emacs/EmacsWindow.java (destroyHandle, run): Switch
	to using the window attachment manager.

	* java/org/gnu/emacs/EmacsWindowAttachmentManager.java: New file.

	* lisp/cus-edit.el (custom-button, custom-button-mouse)
	(custom-button-pressed):

	* lisp/faces.el (tool-bar): Define faces correctly on Android.

	* src/android.c (struct android_emacs_pixmap): Add mutable
	constructor.
	(struct android_emacs_drawable): New structure.
	(android_write_event): Check if event queue hasn't yet been
	initialized.
	(android_select): Set errno to EINTR if pselect fails.
	(android_close): Remove unused debugging code.
	(android_get_home_directory): New function.
	(Java_org_gnu_emacs_EmacsNative_setEmacsParams): Set pixel density
	and compute game path.
	(android_init_emacs_drawable): New function.
	(Java_org_gnu_emacs_EmacsNative_sendKeyPress): New argument
	`unicode_char'.  Pass it in events.
	(Java_org_gnu_emacs_EmacsNative_sendKeyRelease): Likewise.
	(Java_org_gnu_emacs_EmacsNative_sendFocusIn)
	(Java_org_gnu_emacs_EmacsNative_sendFocusOut)
	(Java_org_gnu_emacs_EmacsNative_sendWindowAction): New functions.
	(android_resolve_handle): Export function.
	(android_change_gc): Clear clip rects under the right
	circumstances.  Set right clip mask field.
	(android_create_pixmap_from_bitmap_data): Use correct alpha
	channels.
	(android_create_pixmap): Create mutable pixmap and avoid redundant
	color array allocation.
	(android_create_bitmap_from_data, android_create_image)
	(android_destroy_image, android_put_pixel, android_get_pixel)
	(android_get_image, android_put_image, faccessat): New functions.

	* src/android.h: Update prototypes.

	* src/androidfns.c (android_default_font_parameter): Prefer
	monospace to Droid Sans Mono.

	* src/androidfont.c (struct android_emacs_font_driver): New method
	`draw'.
	(struct android_emacs_font_spec): New field `dpi'.
	(struct androidfont_info): Add font metrics cache.
	(android_init_font_driver, android_init_font_spec): Adjust
	accordingly.
	(androidfont_from_lisp, androidfont_from_java): Handle new fields.
	(androidfont_draw): Implement function.
	(androidfont_open_font): Set pixel size correctly.
	(androidfont_close_font): Free metrics cache.
	(androidfont_cache_text_extents)
	(androidfont_check_cached_extents): New functions.
	(androidfont_text_extents): Cache glyph metrics somewhere for
	future use.
	(androidfont_list_family): Implement function.

	* src/androidgui.h (enum android_event_type): New focus and window
	action events.
	(enum android_modifier_mask): New masks.
	(struct android_key_event): New field `unicode_char'.
	(ANDROID_IS_MODIFIER_KEY): Newmacro.
	(struct android_focus_event, struct android_window_action_event):
	New structs.
	(union android_event): Add new fields.
	(enum android_image_format, struct android_image): New enums and
	structs.

	* src/androidterm.c (android_android_to_emacs_modifiers)
	(android_emacs_to_android_modifiers, android_lower_frame)
	(android_raise_frame, android_new_focus_frame)
	(android_focus_changed, android_detect_focus_change): New
	functions.
	(handle_one_android_event): Implement focus and key event
	handling.
	(android_frame_rehighlight): New function.
	(android_frame_raise_lower): Implement accordingly.
	(android_make_frame_invisible): Clear highlight_frame if required.
	(android_free_frame_resources): Clear x_focus_event_frame if
	required.
	(android_draw_fringe_bitmap, android_draw_image_foreground)
	(android_draw_image_foreground_1)
	(android_draw_image_glyph_string): Remove unnecessary code.
	(android_create_terminal, android_term_init): Set the baud rate to
	something sensible.

	* src/androidterm.h (struct android_bitmap_record): Make structure
	the same as on X.
	(struct android_display_info): New focus tracking fields.
	(struct android_output): Likewise.

	* src/dispextern.h (struct image): Add ximg and mask_img on
	Android.

	* src/emacs.c (android_emacs_init): Fix argc sorting iteration.

	* src/fileio.c (user_homedir, get_homedir): Implement correctly on
	Android.

	* src/font.h (PT_PER_INCH): Define correctly on Android.

	* src/fringe.c (X, swap_nibble, init_fringe_bitmap): Swap fringe
	bitmaps correctly on Android.

	* src/image.c (GET_PIXEL, image_create_bitmap_from_data)
	(image_create_bitmap_from_file, free_bitmap_record)
	(image_unget_x_image_or_dc, struct image_type)
	(prepare_image_for_display, image_clear_image_1)
	(image_size_in_bytes, x_check_image_size)
	(x_create_x_image_and_pixmap, x_destroy_x_image)
	(image_check_image_size, image_create_x_image_and_pixmap_1)
	(image_destroy_x_image, gui_put_x_image, image_put_x_image)
	(image_get_x_image, image_unget_x_image)
	(Create_Pixmap_From_Bitmap_Data, image_pixmap_draw_cross)
	(MaskForeground, image_types, syms_of_image): Implement all of the
	above on Android in terms of an API very similar to X.

	* src/keyboard.c (FUNCTION_KEY_OFFSET, lispy_function_keys):
	Define to something sensible under Android.

	* src/lread.c (build_load_history): Fix problem.

2022-12-31  Po Lu  <luangruo@yahoo.com>

	* .dir-locals.el (c-mode): Add ANDROID_EXPORT noise macro.

	* .gitignore: Add new files to ignore.

	* Makefile.in: Adjust for Android.

	* admin/merge-gnulib: Add new warning.

	* configure.ac: Detect Android.  Run cross-configuration for
	Android when appropriate.

	* etc/DEBUG: Document how to debug Emacs on Android.

	* java/AndroidManifest.xml:
	* java/Makefile.in:
	* java/README:
	* java/debug.sh:
	* java/org/gnu/emacs/EmacsActivity.java:
	* java/org/gnu/emacs/EmacsApplication.java:
	* java/org/gnu/emacs/EmacsCopyArea.java:
	* java/org/gnu/emacs/EmacsDrawLine.java:
	* java/org/gnu/emacs/EmacsDrawPoint.java:
	* java/org/gnu/emacs/EmacsDrawRectangle.java:
	* java/org/gnu/emacs/EmacsDrawable.java:
	* java/org/gnu/emacs/EmacsFillPolygon.java:
	* java/org/gnu/emacs/EmacsFillRectangle.java:
	* java/org/gnu/emacs/EmacsFontDriver.java:
	* java/org/gnu/emacs/EmacsGC.java:
	* java/org/gnu/emacs/EmacsHandleObject.java:
	* java/org/gnu/emacs/EmacsNative.java:
	* java/org/gnu/emacs/EmacsPaintQueue.java:
	* java/org/gnu/emacs/EmacsPaintReq.java:
	* java/org/gnu/emacs/EmacsPixmap.java:
	* java/org/gnu/emacs/EmacsSdk7FontDriver.java:
	* java/org/gnu/emacs/EmacsService.java:
	* java/org/gnu/emacs/EmacsSurfaceView.java:
	* java/org/gnu/emacs/EmacsThread.java:
	* java/org/gnu/emacs/EmacsView.java:
	* java/org/gnu/emacs/EmacsWindow.java: New files and classes.

	* lib-src/Makefile.in (srcdir):

	* lib/Makefile.in (VPATH, HAVE_NATIVE_COMP, libgnu_a_SOURCES):
	(DEPFLAGS): Configure correctly for cross-compiling.

	* lib/faccessat.c:

	* lib/fpending.c (__fpending):

	* lib/open.c:

	* lib/unistd.c (_GL_UNISTD_INLINE): Temporary adjustments to
	Gnulib.

	* lisp/frame.el (display-graphic-p, display-screens)
	(display-pixel-height, display-pixel-width, display-mm-height)
	(display-mm-width, display-backing-store, display-save-under)
	(display-planes, display-color-cells, display-visual-class):
	Adjust for new window system `android'.

	* lisp/image/wallpaper.el (x-open-connection): Add declaration.

	* lisp/loadup.el (featurep): Load files for Android.

	* lisp/net/eww.el (eww-form-submit, eww-form-file)
	(eww-form-checkbox, eww-form-select): Adjust faces for android.

	* lisp/term/android-win.el: New file.

	* src/Makefile.in: Add new targets emacs.so and android-emacs,
	then adjust for cross compilation.

	* src/alloc.c (cleanup_vector): Clean up Android font entities
	as well.
	(garbage_collect): Mark androidterm.

	* src/android-emacs.c (main):

	* src/android.c (ANDROID_THROW, enum android_fd_table_entry_flags)
	(struct android_emacs_service, struct android_emacs_pixmap)
	(struct android_graphics_point, struct android_event_container)
	(struct android_event_queue, android_run_select_thread)
	(android_handle_sigusr1, android_init_events, android_pending)
	(android_next_event, android_write_event, android_select)
	(android_run_debug_thread, android_user_full_name)
	(android_get_asset_name, android_fstat, android_fstatat)
	(android_file_access_p, android_hack_asset_fd, android_open)
	(android_close, JNICALL, android_init_emacs_service)
	(android_init_emacs_pixmap, android_init_graphics_point)
	(MAX_HANDLE, struct android_handle_entry, android_alloc_id)
	(android_destroy_handle, android_resolve_handle)
	(android_resolve_handle2, android_change_window_attributes)
	(android_create_window, android_set_window_background)
	(android_destroy_window, android_init_android_rect_class)
	(android_init_emacs_gc_class, android_create_gc, android_free_gc)
	(android_change_gc, android_set_clip_rectangles)
	(android_reparent_window, android_lookup_method)
	(android_clear_window, android_map_window, android_unmap_window)
	(android_resize_window, android_move_window, android_swap_buffers)
	(android_get_gc_values, android_set_foreground)
	(android_fill_rectangle, android_create_pixmap_from_bitmap_data)
	(android_set_clip_mask, android_set_fill_style, android_copy_area)
	(android_free_pixmap, android_set_background)
	(android_fill_polygon)
	(android_draw_rectangle, android_draw_point, android_draw_line)
	(android_create_pixmap, android_set_ts_origin)
	(android_clear_area):

	* src/android.h (ANDROID_EXPORT):

	* src/androidfns.c (android_display_info_for_name)
	(check_android_display_info, check_x_display_info, gamma_correct)
	(android_defined_color, android_decode_color)
	(android_implicitly_set_name, android_explicitly_set_name)
	(android_set_tool_bar_lines, android_change_tool_bar_height)
	(android_set_tab_bar_lines, android_change_tab_bar_height)
	(android_set_scroll_bar_default_height)
	(android_set_scroll_bar_default_width, android_icon_verify)
	(android_icon, android_make_gc, android_free_gcs)
	(unwind_create_frame, do_unwind_create_frame)
	(android_default_font_parameter, android_create_frame_window)
	(Fx_create_frame, Fxw_color_defined_p, Fxw_color_values)
	(Fxw_display_color_p, Fx_display_grayscale_p)
	(Fx_display_pixel_width, Fx_display_pixel_height)
	(Fx_display_planes, Fx_display_color_cells, Fx_display_screens)
	(Fx_display_mm_width, Fx_display_mm_height)
	(Fx_display_backing_store, Fx_display_visual_class)
	(Fx_display_monitor_attributes_list, Fx_frame_geometry)
	(Fx_frame_list_z_order, Fx_frame_restack)
	(Fx_mouse_absolute_pixel_position)
	(Fx_set_mouse_absolute_pixel_position, Fandroid_get_connection)
	(Fx_display_list, Fx_show_tip, Fx_hide_tip)
	(android_set_background_color, android_set_border_color)
	(android_set_cursor_color, android_set_cursor_type)
	(android_set_foreground_color)
	(android_set_child_frame_border_width)
	(android_set_internal_border_width, android_set_menu_bar_lines)
	(android_set_mouse_color, android_set_title, android_set_alpha)
	(android_frame_parm_handlers, syms_of_androidfns):

	* src/androidfont.c (struct android_emacs_font_driver)
	(struct android_emacs_font_spec)
	(struct android_emacs_font_metrics)
	(struct android_emacs_font_object, struct android_integer)
	(struct androidfont_info, struct androidfont_entity)
	(android_init_font_driver, android_init_font_spec)
	(android_init_font_metrics, android_init_integer)
	(android_init_font_object, androidfont_get_cache)
	(androidfont_from_lisp, androidfont_from_java, androidfont_list)
	(androidfont_match, androidfont_draw, androidfont_open_font)
	(androidfont_close_font, androidfont_has_char)
	(androidfont_encode_char, androidfont_text_extents)
	(androidfont_list_family, androidfont_driver)
	(syms_of_androidfont_for_pdumper, syms_of_androidfont)
	(init_androidfont, android_finalize_font_entity):

	* src/androidgui.h (_ANDROID_GUI_H_, struct android_rectangle)
	(struct android_point, enum android_gc_function)
	(enum android_gc_value_mask, enum android_fill_style)
	(enum android_window_value_mask)
	(struct android_set_window_attributes, struct android_gc_values)
	(struct android_gc, enum android_swap_action, enum android_shape)
	(enum android_coord_mode, struct android_swap_info)
	(NativeRectangle, struct android_any_event)
	(struct android_key_event, struct android_configure_event)
	(union android_event):

	* src/androidterm.c (android_window_to_frame, android_clear_frame)
	(android_ring_bell, android_toggle_invisible_pointer)
	(android_update_begin, android_update_end, show_back_buffer)
	(android_flush_dirty_back_buffer_on, handle_one_android_event)
	(android_read_socket, android_frame_up_to_date)
	(android_buffer_flipping_unblocked_hook)
	(android_query_frame_background_color, android_parse_color)
	(android_alloc_nearest_color, android_query_colors)
	(android_mouse_position, android_get_focus_frame)
	(android_focus_frame, android_frame_rehighlight)
	(android_frame_raise_lower, android_make_frame_visible)
	(android_make_frame_invisible)
	(android_make_frame_visible_invisible, android_fullscreen_hook)
	(android_iconify_frame, android_set_window_size_1)
	(android_set_window_size, android_set_offset, android_set_alpha)
	(android_new_font, android_bitmap_icon, android_free_pixmap_hook)
	(android_free_frame_resources, android_delete_frame)
	(android_delete_terminal, android_scroll_run)
	(android_after_update_window_line, android_flip_and_flush)
	(android_clear_rectangle, android_reset_clip_rectangles)
	(android_clip_to_row, android_draw_fringe_bitmap)
	(android_set_cursor_gc, android_set_mouse_face_gc)
	(android_set_mode_line_face_gc, android_set_glyph_string_gc)
	(android_set_glyph_string_clipping)
	(android_set_glyph_string_clipping_exactly)
	(android_compute_glyph_string_overhangs)
	(android_clear_glyph_string_rect)
	(android_draw_glyph_string_background, android_fill_triangle)
	(android_make_point, android_inside_rect_p, android_clear_point)
	(android_draw_relief_rect, android_draw_box_rect)
	(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT, android_setup_relief_color)
	(android_setup_relief_colors, android_draw_glyph_string_box)
	(android_draw_glyph_string_bg_rect, android_draw_image_relief)
	(android_draw_image_foreground, android_draw_image_foreground_1)
	(android_draw_image_glyph_string)
	(android_draw_stretch_glyph_string, android_draw_underwave)
	(android_draw_glyph_string_foreground)
	(android_draw_composite_glyph_string_foreground)
	(android_draw_glyphless_glyph_string_foreground)
	(android_draw_glyph_string, android_define_frame_cursor)
	(android_clear_frame_area, android_clear_under_internal_border)
	(android_draw_hollow_cursor, android_draw_bar_cursor)
	(android_draw_window_cursor, android_draw_vertical_window_border)
	(android_draw_window_divider, android_redisplay_interface)
	(frame_set_mouse_pixel_position, get_keysym_name)
	(android_create_terminal, android_term_init, syms_of_androidterm)
	(mark_androidterm):

	* src/androidterm.h (_ANDROID_TERM_H_)
	(struct android_display_info)
	(struct android_output, FRAME_ANDROID_OUTPUT, XSCROLL_BAR): New
	files.

	* src/dired.c (file_attributes): Do not use openat on Android.

	* src/dispextern.h (No_Cursor): Define appropriately on Android.
	(struct glyph_string, struct face): Make gc field of type struct
	android_gc on Android.

	* src/dispnew.c (clear_current_matrices, clear_desired_matrices)
	(adjust_frame_glyphs_for_window_redisplay, free_glyphs)
	(update_frame, scrolling, char_ins_del_cost, update_frame_line)
	(init_display_interactive): Disable text terminal support
	completely on Android.  Fix non-toolkit menus for non-X systems.

	* src/editfns.c (Fuser_full_name): Call android_user_full_name.

	* src/emacs.c (android_emacs_init): Make main this on Android.
	Prohibit argv sorting from exceeding end of argv.

	* src/epaths.in: Add path definitions for Android.

	* src/fileio.c (file_access_p): Call android_file_access_p.
	(file_name_directory): Avoid using openat on Android.
	(Fcopy_file): Adjust to call sys_fstat instead.
	(file_directory_p, Finsert_file_contents, write_region): Likewise.

	* src/filelock.c:

	* src/fns.c (Flocale_info): Pacify warning on Android.

	* src/font.c (font_make_entity_android): New function.

	* src/font.h:

	* src/frame.c (Fframep, Fwindow_system): Handle new window system
	`android'.  Update doc strings.
	(Fmake_terminal_frame): Disable on Android.
	(gui_display_get_resource): Disable get_string_resource_hook on
	Android.
	(syms_of_frame): New defsym `android'.

	* src/frame.h (GCALIGNED_STRUCT): Add new output data for Android.
	(ENUM_BF): Expand enumerator size.
	(FRAME_ANDROID_P, FRAME_WINDOW_P, MOUSE_HL_INFO): Add definitions
	for Android.

	* src/image.c (GET_PIXEL, image_create_bitmap_from_file)
	(image_create_x_image_and_pixmap_1, image_get_x_image, slurp_file)
	(lookup_rgb_color, image_to_emacs_colors, image_from_emacs_colors)
	(image_pixmap_draw_cross, image_disable_image, MaskForeground)
	(gif_load): Add stubs for Android.

	* src/lisp.h:

	* src/lread.c (safe_to_load_version, maybe_swap_for_eln1, openp):

	* src/pdumper.c (pdumper_load): Call sys_fstat instead of fstat.

	* src/process.c (wait_reading_process_output): Use android_select
	instead of pselect.

	* src/scroll.c: Disable on Android.

	* src/sysdep.c (widen_foreground_group, reset_sys_modes)
	(init_signals, emacs_fstatat, sys_fstat): New function.
	(emacs_open, emacs_open_noquit, emacs_close): Implement
	differently on Android.
	(close_output_streams): Disable what is not required on Android.

	* src/term.c (OUTPUT1_IF, encode_terminal_code, string_cost)
	(string_cost_one_line, per_line_cost, calculate_costs)
	(struct fkey_table, tty_append_glyph, produce_glyphs)
	(tty_capable_p, Fsuspend_tty, Fresume_tty, device, init_tty)
	(maybe_fatal, syms_of_term): Disable text terminal support on
	Android.

	* src/termhooks.h (enum output_method): Add android output method.
	(GCALIGNED_STRUCT, TERMINAL_FONT_CACHE): Define for Android.

	* src/terminal.c (Fterminal_live_p): Implement for Android.

	* src/verbose.mk.in (AM_V_GLOBALS): Add JAVAC and DX.
	* src/xdisp.c (redisplay_internal): Disable text terminals on
	Android.
	(display_menu_bar, display_tty_menu_item)
	(draw_row_with_mouse_face, expose_frame): Make the non toolkit
	menu bar work on Android.

	* src/xfaces.c (GCGraphicsExposures, x_create_gc, x_free_gc)
	(Fx_load_color_file): Define for Android.

	* xcompile/Makefile.in:
	* xcompile/README:
	* xcompile/langinfo.h (nl_langinfo): New files.

2022-12-29  Po Lu  <luangruo@yahoo.com>

	Development of the Android port starts...

This ChangeLog only chronicles changes constituting the initial
development of the Android port.  Refer to other ChangeLog files for a
narrative of unrelated modifications made to Emacs during that time,
and those made after the Android port was installed.

;; Local Variables:
;; coding: utf-8
;; End:

  Copyright (C) 2023-2025 Free Software Foundation, Inc.

  This file is part of GNU Emacs.

  GNU Emacs is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  GNU Emacs is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
