From 00c085d9cf9c4ec6c3a5bb07684fec344b8807e4 Mon Sep 17 00:00:00 2001 From: Michael Gangolf Date: Tue, 27 Jan 2026 18:49:27 +0100 Subject: [PATCH 1/4] feat(android): custom accessiblityImportant value for views --- .../java/org/appcelerator/titanium/TiC.java | 1 + .../titanium/proxy/TiViewProxy.java | 1 + .../appcelerator/titanium/view/TiUIView.java | 22 +++++++++++++++++++ apidoc/Titanium/UI/View.yml | 7 ++++++ 4 files changed, 31 insertions(+) diff --git a/android/titanium/src/java/org/appcelerator/titanium/TiC.java b/android/titanium/src/java/org/appcelerator/titanium/TiC.java index 7cd2b42be22..ec8e59447ca 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/TiC.java +++ b/android/titanium/src/java/org/appcelerator/titanium/TiC.java @@ -233,6 +233,7 @@ public class TiC public static final String PROPERTY_ACCESSIBILITY_HINT = "accessibilityHint"; public static final String PROPERTY_ACCESSIBILITY_LABEL = "accessibilityLabel"; public static final String PROPERTY_ACCESSIBILITY_VALUE = "accessibilityValue"; + public static final String PROPERTY_ACCESSIBILITY_IMPORTANT = "accessibilityImportant"; public static final String PROPERTY_ACCESSIBILITY_DISABLE_LONG = "accessibilityDisableLongPress"; public static final String PROPERTY_ACCESSORY_TYPE = "accessoryType"; public static final String PROPERTY_ACTION = "action"; diff --git a/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java b/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java index 3d82f0448a9..c65d38ca78b 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java +++ b/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java @@ -71,6 +71,7 @@ TiC.PROPERTY_ACCESSIBILITY_LABEL, TiC.PROPERTY_ACCESSIBILITY_VALUE, TiC.PROPERTY_ACCESSIBILITY_HIDDEN, + TiC.PROPERTY_ACCESSIBILITY_IMPORTANT, // others TiC.PROPERTY_FOCUSABLE, TiC.PROPERTY_TOUCH_ENABLED, diff --git a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java index 4715790ec6e..344c16f0114 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java +++ b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java @@ -103,6 +103,12 @@ public abstract class TiUIView implements KrollProxyListener, OnFocusChangeListe public static final int TRANSITION_CHANGE_TRANSFORM = 10; public static final int TRANSITION_CHANGE_IMAGE_TRANSFORM = 11; + public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES; + public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO; + public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS + = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS; + public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO; + protected View nativeView; // Native View object protected TiViewProxy proxy; @@ -911,6 +917,8 @@ public void propertyChanged(String key, Object oldValue, Object newValue, KrollP } else if (key.equals(TiC.PROPERTY_ACCESSIBILITY_HIDDEN)) { applyAccessibilityHidden(newValue); + } else if (key.equals(TiC.PROPERTY_ACCESSIBILITY_IMPORTANT)) { + applyAccessibilityImportant(newValue); } else if (key.equals(TiC.PROPERTY_ELEVATION)) { if (getOuterView() != null) { ViewCompat.setElevation(getOuterView(), TiConvert.toFloat(newValue)); @@ -1077,6 +1085,10 @@ public void processProperties(KrollDict d) applyContentDescription(d); } + if (d.containsKey(TiC.PROPERTY_ACCESSIBILITY_IMPORTANT)) { + applyAccessibilityImportant(d); + } + if (d.containsKey(TiC.PROPERTY_ACCESSIBILITY_HIDDEN)) { applyAccessibilityHidden(d.get(TiC.PROPERTY_ACCESSIBILITY_HIDDEN)); } @@ -2328,6 +2340,16 @@ private void applyAccessibilityHidden(Object hiddenPropertyValue) ViewCompat.setImportantForAccessibility(nativeView, importanceMode); } + private void applyAccessibilityImportant(Object hiddenPropertyValue) + { + if (nativeView == null) { + return; + } + + int importanceMode = TiConvert.toInt(hiddenPropertyValue, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO); + ViewCompat.setImportantForAccessibility(nativeView, importanceMode); + } + /** * Our view proxy supports three properties to match iOS regarding * the text that is read aloud (or otherwise communicated) by the diff --git a/apidoc/Titanium/UI/View.yml b/apidoc/Titanium/UI/View.yml index 478e44fb812..a7a3bbf267e 100644 --- a/apidoc/Titanium/UI/View.yml +++ b/apidoc/Titanium/UI/View.yml @@ -1129,6 +1129,13 @@ properties: type: Boolean default: false + - name: accessibilityImportant + summary: Sets the accessibility important mode. + since: "13.2.0" + platforms: [android] + type: int + default: false + - name: accessibilityHint summary: Briefly describes what performing an action (such as a click) on the view will do. description: | From 518f8cadebf31b118cc8eaa19d4f6a8459942afb Mon Sep 17 00:00:00 2001 From: Michael Gangolf Date: Tue, 27 Jan 2026 18:52:39 +0100 Subject: [PATCH 2/4] fix lint --- apidoc/Titanium/UI/View.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apidoc/Titanium/UI/View.yml b/apidoc/Titanium/UI/View.yml index a7a3bbf267e..372b16f26f1 100644 --- a/apidoc/Titanium/UI/View.yml +++ b/apidoc/Titanium/UI/View.yml @@ -1133,7 +1133,7 @@ properties: summary: Sets the accessibility important mode. since: "13.2.0" platforms: [android] - type: int + type: Number default: false - name: accessibilityHint From 2fc163bedc8627cc39faa324d9eb93f1b182fc2f Mon Sep 17 00:00:00 2001 From: Michael Gangolf Date: Tue, 27 Jan 2026 20:01:45 +0100 Subject: [PATCH 3/4] fix constants, docs update --- .../titanium/ui/android/AndroidModule.java | 10 ++++++++++ .../appcelerator/titanium/view/TiUIView.java | 6 ------ apidoc/Titanium/UI/Android/Android.yml | 20 +++++++++++++++++++ apidoc/Titanium/UI/View.yml | 4 +++- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java b/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java index b6d6db771df..77bda19bd56 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java @@ -32,6 +32,7 @@ import androidx.annotation.ColorInt; import androidx.core.content.ContextCompat; import androidx.core.view.GravityCompat; +import androidx.core.view.ViewCompat; import com.google.android.material.color.MaterialColors; @@ -262,6 +263,15 @@ public class AndroidModule extends KrollModule @Kroll.constant public static final int WEBVIEW_SCROLLBARS_HIDE_ALL = 3; + @Kroll.constant + public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES; + @Kroll.constant + public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO; + @Kroll.constant + public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS + = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS; + @Kroll.constant + public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO; public AndroidModule() { super(); diff --git a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java index 344c16f0114..354eef302ee 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java +++ b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java @@ -103,12 +103,6 @@ public abstract class TiUIView implements KrollProxyListener, OnFocusChangeListe public static final int TRANSITION_CHANGE_TRANSFORM = 10; public static final int TRANSITION_CHANGE_IMAGE_TRANSFORM = 11; - public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES; - public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO; - public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS - = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS; - public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO; - protected View nativeView; // Native View object protected TiViewProxy proxy; diff --git a/apidoc/Titanium/UI/Android/Android.yml b/apidoc/Titanium/UI/Android/Android.yml index cdd06fcb847..0bda312747a 100644 --- a/apidoc/Titanium/UI/Android/Android.yml +++ b/apidoc/Titanium/UI/Android/Android.yml @@ -74,6 +74,26 @@ methods: since: "9.1.0" properties: + - name: IMPORTANT_FOR_ACCESSIBILITY_YES + summary: The view is important for accessibility + type: Number + permission: read-only + + - name: IMPORTANT_FOR_ACCESSIBILITY_NO + summary: The view is not important for autofill, but its children (if any) will be traversed. + type: Number + permission: read-only + + - name: IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS + summary: The view is not important for accessibility, nor are any of its descendant views. + type: Number + permission: read-only + + - name: IMPORTANT_FOR_ACCESSIBILITY_AUTO + summary: Automatically determine whether a view is important for autofill. + type: Number + permission: read-only + - name: FLAG_LAYOUT_NO_LIMITS summary: Flag allowing window to extend into the status bar and navigation bar. description: | diff --git a/apidoc/Titanium/UI/View.yml b/apidoc/Titanium/UI/View.yml index 372b16f26f1..949d12fb487 100644 --- a/apidoc/Titanium/UI/View.yml +++ b/apidoc/Titanium/UI/View.yml @@ -148,6 +148,7 @@ description: | * * * + * The first three, `accessibilityLabel`, `accessibilityValue` and `accessibilityHint`, are for setting text that will be relayed to the user by the assistive service (such as TalkBack on Android or VoiceOver @@ -1134,7 +1135,8 @@ properties: since: "13.2.0" platforms: [android] type: Number - default: false + constants: Titanium.UI.Android.IMPORTANT_* + default: null - name: accessibilityHint summary: Briefly describes what performing an action (such as a click) on the view will do. From c1473656012196968cb4820ba9e3f6792aa15439 Mon Sep 17 00:00:00 2001 From: Michael Gangolf Date: Tue, 27 Jan 2026 20:53:45 +0100 Subject: [PATCH 4/4] fixes --- .../src/java/org/appcelerator/titanium/view/TiUIView.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java index 354eef302ee..ebf053980d5 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java +++ b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java @@ -905,7 +905,8 @@ public void propertyChanged(String key, Object oldValue, Object newValue, KrollP nativeView.setKeepScreenOn(TiConvert.toBoolean(newValue)); } - } else if (key.indexOf("accessibility") == 0 && !key.equals(TiC.PROPERTY_ACCESSIBILITY_HIDDEN)) { + } else if (key.indexOf("accessibility") == 0 && !key.equals(TiC.PROPERTY_ACCESSIBILITY_HIDDEN) + && !key.equals(TiC.PROPERTY_ACCESSIBILITY_IMPORTANT)) { applyContentDescription(); } else if (key.equals(TiC.PROPERTY_ACCESSIBILITY_HIDDEN)) { @@ -1080,7 +1081,7 @@ public void processProperties(KrollDict d) } if (d.containsKey(TiC.PROPERTY_ACCESSIBILITY_IMPORTANT)) { - applyAccessibilityImportant(d); + applyAccessibilityImportant(d.get(TiC.PROPERTY_ACCESSIBILITY_IMPORTANT)); } if (d.containsKey(TiC.PROPERTY_ACCESSIBILITY_HIDDEN)) {