]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix styling issues on Android 15 QPR1
authorPo Lu <luangruo@yahoo.com>
Mon, 3 Mar 2025 13:57:05 +0000 (21:57 +0800)
committerEshel Yaron <me@eshelyaron.com>
Tue, 4 Mar 2025 21:03:50 +0000 (22:03 +0100)
* java/org/gnu/emacs/EmacsView.java (EmacsView): Guarantee that
frame views are created with the correct theme.

* java/res/values-v20/style.xml (EmacsStyle):

* java/res/values-v29/style.xml (EmacsStyle): Disable a swiping
gesture enabled on certain Android systems.

* java/res/values-v35/style.xml: Rename from `styles'.xml.

(cherry picked from commit 96d26b493618f59bbdd4de86be65e784735541c8)

java/org/gnu/emacs/EmacsView.java
java/res/values-v20/style.xml [new file with mode: 0644]
java/res/values-v29/style.xml
java/res/values-v35/style.xml [new file with mode: 0644]
java/res/values-v35/styles.xml [deleted file]

index 5abea7115068e983d568619b7770955e999533d1..938e2a21d1aad34c00c1f1b8e327ecacaf7c9058 100644 (file)
@@ -24,10 +24,11 @@ import android.content.Context;
 import android.text.InputType;
 
 import android.view.ContextMenu;
+import android.view.ContextThemeWrapper;
 import android.view.DragEvent;
-import android.view.View;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
+import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.view.WindowInsets;
@@ -127,32 +128,36 @@ public final class EmacsView extends ViewGroup
   public
   EmacsView (EmacsWindow window)
   {
-    super (EmacsService.SERVICE);
-
-    Object tem;
-    Context context;
+    /* This is required to guarantee that popup menus respect the
+       default style.  */
+    super (new ContextThemeWrapper (EmacsService.SERVICE,
+                                   R.style.EmacsStyle));
+    {
+      Object tem;
+      Context context;
 
-    this.window = window;
-    this.damageRegion = new Region ();
+      this.window = window;
+      this.damageRegion = new Region ();
 
-    setFocusable (true);
-    setFocusableInTouchMode (true);
+      setFocusable (true);
+      setFocusableInTouchMode (true);
 
-    /* Create the surface view.  */
-    this.surfaceView = new EmacsSurfaceView (this);
-    addView (this.surfaceView);
+      /* Create the surface view.  */
+      this.surfaceView = new EmacsSurfaceView (this);
+      addView (this.surfaceView);
 
-    /* Get rid of the default focus highlight.  */
-    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
-      setDefaultFocusHighlightEnabled (false);
+      /* Get rid of the default focus highlight.  */
+      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
+       setDefaultFocusHighlightEnabled (false);
 
-    /* Obtain the input method manager.  */
-    context = getContext ();
-    tem = context.getSystemService (Context.INPUT_METHOD_SERVICE);
-    imManager = (InputMethodManager) tem;
+      /* Obtain the input method manager.  */
+      context = getContext ();
+      tem = context.getSystemService (Context.INPUT_METHOD_SERVICE);
+      imManager = (InputMethodManager) tem;
 
-    /* Add this view as its own global layout listener.  */
-    getViewTreeObserver ().addOnGlobalLayoutListener (this);
+      /* Add this view as its own global layout listener.  */
+      getViewTreeObserver ().addOnGlobalLayoutListener (this);
+    }
   }
 
   private void
diff --git a/java/res/values-v20/style.xml b/java/res/values-v20/style.xml
new file mode 100644 (file)
index 0000000..285cd61
--- /dev/null
@@ -0,0 +1,30 @@
+<!-- Style resources for GNU Emacs on Android.
+
+Copyright (C) 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/>. -->
+
+<resources>
+  <!-- Style used for popup menus and relatives between Android 4.4 W
+       and Android 10.  -->
+  <style name="EmacsStyle"
+        parent="@android:style/Theme.DeviceDefault.NoActionBar">
+    <!-- Suppress the swipe-to-dismiss gesture enabled on certain
+         systems.  -->
+    <item name="android:windowSwipeToDismiss">false</item>
+  </style>
+  <style name="EmacsStyleOpen" parent="@android:style/Theme.DeviceDefault"/>
+</resources>
index 5e6700a27e05db473f53fe71bba799540287dbb3..0ecfa7fc103d51c4a14a249aa0dbc1881abbb287 100644 (file)
@@ -18,14 +18,18 @@ You should have received a copy of the GNU General Public License
 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>. -->
 
 <resources>
-  <!-- Style used for popup menus and relatives from Android 10.0
-       onwards-->
+  <!-- Style used for popup menus and relatives from Android 10.0 to
+       14.0.  -->
   <style name="EmacsStyle" parent="@android:style/Theme.DeviceDefault.DayNight">
     <item name="android:windowActionBar">false</item>
     <item name="android:windowNoTitle">true</item>
 
     <!-- Required to make sure the status bar text remains legible.  -->
     <item name="android:statusBarColor">@android:color/black</item>
+
+    <!-- Suppress the swipe-to-dismiss gesture enabled on certain
+         systems.  -->
+    <item name="android:windowSwipeToDismiss">false</item>
   </style>
   <style name="EmacsStyleOpen"
         parent="@android:style/Theme.DeviceDefault.DayNight"/>
diff --git a/java/res/values-v35/style.xml b/java/res/values-v35/style.xml
new file mode 100644 (file)
index 0000000..0f7aeea
--- /dev/null
@@ -0,0 +1,33 @@
+<!-- Style resources for GNU Emacs on Android.
+
+Copyright (C) 2024-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/>. -->
+
+<resources>
+  <!-- Style used for popup menus and relatives from Android 15.0
+       onwards.  -->
+  <style name="EmacsStyle" parent="@android:style/Theme.DeviceDefault.DayNight">
+    <item name="android:windowActionBar">false</item>
+    <item name="android:windowNoTitle">true</item>
+    <item name="android:windowLightStatusBar">?android:attr/isLightTheme</item>
+    <!-- Suppress the swipe-to-dismiss gesture enabled on certain
+         systems.  -->
+    <item name="android:windowSwipeToDismiss">false</item>
+  </style>
+  <style name="EmacsStyleOpen"
+        parent="@android:style/Theme.DeviceDefault.DayNight"/>
+</resources>
diff --git a/java/res/values-v35/styles.xml b/java/res/values-v35/styles.xml
deleted file mode 100644 (file)
index c0dc647..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<!-- Style resources for GNU Emacs on Android.
-
-Copyright (C) 2024-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/>. -->
-
-<resources>
-  <!-- Style used for popup menus and relatives from Android 15.0
-       onwards.  -->
-  <style name="EmacsStyle" parent="@android:style/Theme.DeviceDefault.DayNight">
-    <item name="android:windowActionBar">false</item>
-    <item name="android:windowNoTitle">true</item>
-    <item name="android:windowLightStatusBar">?android:attr/isLightTheme</item>
-  </style>
-  <style name="EmacsStyleOpen"
-        parent="@android:style/Theme.DeviceDefault.DayNight"/>
-</resources>