mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-30 12:21:25 -08:00
Update Android port
* 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): * src/menu.c (have_boxes): Implement menu check boxes.
This commit is contained in:
parent
5bd38905ac
commit
198b8160cf
8 changed files with 123 additions and 16 deletions
|
|
@ -52,6 +52,10 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. -->
|
|||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- This is required on Android 11 or later to access /sdcard. -->
|
||||
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||
|
||||
<uses-sdk android:minSdkVersion="@ANDROID_MIN_SDK@"
|
||||
android:targetSdkVersion="33"/>
|
||||
|
||||
|
|
|
|||
63
java/README
63
java/README
|
|
@ -292,15 +292,15 @@ public class EmacsFrobinicator
|
|||
}
|
||||
}
|
||||
|
||||
Java arrays are similar to C arrays in that they can not grow. But
|
||||
Java arrays are similar to C arrays in that they can not grow. But
|
||||
they are very much unlike C arrays in that they are always references
|
||||
(as opposed to decaying into pointers in various situations), and
|
||||
(as opposed to decaying into pointers in only some situations), and
|
||||
contain information about their length.
|
||||
|
||||
If another function named ``frobinicate1'' takes an array as an
|
||||
argument, then it need not take the length of the array.
|
||||
|
||||
Instead, it simply iterates over the array like so:
|
||||
Instead, it may simply iterate over the array like so:
|
||||
|
||||
int i, k;
|
||||
|
||||
|
|
@ -339,10 +339,65 @@ struct emacs_array_container
|
|||
|
||||
or, possibly even better,
|
||||
|
||||
typedef int my_array[10];
|
||||
typedef int emacs_array_container[10];
|
||||
|
||||
Alas, Java has no equivalent of `typedef'.
|
||||
|
||||
Like in C, Java string literals are delimited by double quotes.
|
||||
Unlike C, however, strings are not NULL-terminated arrays of
|
||||
characters, but a distinct type named ``String''. They store their
|
||||
own length, characters in Java's 16-bit ``char'' type, and are capable
|
||||
of holding NULL bytes.
|
||||
|
||||
Instead of writing:
|
||||
|
||||
wchar_t character;
|
||||
extern char *s;
|
||||
size_t s;
|
||||
|
||||
for (/* determine n, s in a loop. */)
|
||||
s += mbstowc (&character, s, n);
|
||||
|
||||
or:
|
||||
|
||||
const char *byte;
|
||||
|
||||
for (byte = my_string; *byte; ++byte)
|
||||
/* do something with *byte. */;
|
||||
|
||||
or perhaps even:
|
||||
|
||||
size_t length, i;
|
||||
char foo;
|
||||
|
||||
length = strlen (my_string);
|
||||
|
||||
for (i = 0; i < length; ++i)
|
||||
foo = my_string[i];
|
||||
|
||||
you write:
|
||||
|
||||
char foo;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < myString.length (); ++i)
|
||||
foo = myString.charAt (0);
|
||||
|
||||
Java also has stricter rules on what can be used as a truth value in a
|
||||
conditional. While in C, any non-zero value is true, Java requires
|
||||
that every truth value be of the boolean type ``boolean''.
|
||||
|
||||
What this means is that instead of simply writing:
|
||||
|
||||
if (foo || bar)
|
||||
|
||||
where foo can either be 1 or 0, and bar can either be NULL or a
|
||||
pointer to something, you must explicitly write:
|
||||
|
||||
if (foo != 0 || bar != null)
|
||||
|
||||
in Java.
|
||||
|
||||
JAVA NATIVE INTERFACE
|
||||
|
||||
Java also provides an interface for C code to interface with Java.
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public class EmacsContextMenu
|
|||
public int itemID;
|
||||
public String itemName;
|
||||
public EmacsContextMenu subMenu;
|
||||
public boolean isEnabled;
|
||||
public boolean isEnabled, isCheckable, isChecked;
|
||||
|
||||
@Override
|
||||
public boolean
|
||||
|
|
@ -108,10 +108,15 @@ public class EmacsContextMenu
|
|||
|
||||
/* Add a normal menu item to the context menu with the id ITEMID and
|
||||
the name ITEMNAME. Enable it if ISENABLED, else keep it
|
||||
disabled. */
|
||||
disabled.
|
||||
|
||||
If this is not a submenu and ISCHECKABLE is set, make the item
|
||||
checkable. Likewise, if ISCHECKED is set, make the item
|
||||
checked. */
|
||||
|
||||
public void
|
||||
addItem (int itemID, String itemName, boolean isEnabled)
|
||||
addItem (int itemID, String itemName, boolean isEnabled,
|
||||
boolean isCheckable, boolean isChecked)
|
||||
{
|
||||
Item item;
|
||||
|
||||
|
|
@ -119,6 +124,8 @@ public class EmacsContextMenu
|
|||
item.itemID = itemID;
|
||||
item.itemName = itemName;
|
||||
item.isEnabled = isEnabled;
|
||||
item.isCheckable = isCheckable;
|
||||
item.isChecked = isChecked;
|
||||
|
||||
menuItems.add (item);
|
||||
}
|
||||
|
|
@ -198,6 +205,15 @@ public class EmacsContextMenu
|
|||
/* If the item ID is zero, then disable the item. */
|
||||
if (item.itemID == 0 || !item.isEnabled)
|
||||
menuItem.setEnabled (false);
|
||||
|
||||
/* Now make the menu item display a checkmark as
|
||||
appropriate. */
|
||||
|
||||
if (item.isCheckable)
|
||||
menuItem.setCheckable (true);
|
||||
|
||||
if (item.isChecked)
|
||||
menuItem.setChecked (true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,6 +99,12 @@ public class EmacsCopyArea
|
|||
if (src_y + height > srcBitmap.getHeight ())
|
||||
height = srcBitmap.getHeight () - src_y;
|
||||
|
||||
/* If width and height are empty or negative, then skip the entire
|
||||
CopyArea operation lest createBitmap throw an exception. */
|
||||
|
||||
if (width <= 0 || height <= 0)
|
||||
return;
|
||||
|
||||
rect = new Rect (dest_x, dest_y, dest_x + width,
|
||||
dest_y + height);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue