Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/**
* Titanium SDK
* Copyright TiDev, Inc. 04/07/2022-Present. All Rights Reserved.
* Licensed under the terms of the Apache Public License
* Please see the LICENSE included with this distribution for details.
*/
package ti.modules.titanium.accessibility;

import org.appcelerator.kroll.KrollModule;
import org.appcelerator.kroll.annotations.Kroll;
import org.appcelerator.kroll.common.Log;
import org.appcelerator.titanium.TiApplication;
import org.appcelerator.titanium.proxy.TiViewProxy;
import org.appcelerator.titanium.view.TiUIView;

import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import androidx.core.view.accessibility.AccessibilityEventCompat;

@Kroll.module
public class AccessibilityModule extends KrollModule
{
private static final String TAG = "AccessibilityModule";

@Kroll.method
public void announce(String message)
{
AccessibilityManager accessibilityManager = TiApplication.getInstance().getAccessibilityManager();
if (!accessibilityManager.isEnabled()) {
Log.w(TAG, "Accessibility announcement ignored. Accessibility services are not enabled on this device.");
return;
}
if (message == null || message.isEmpty()) {
Log.w(TAG, "Accessibility announcement ignored. No announcement text was provided.");
return;
}

AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEventCompat.TYPE_ANNOUNCEMENT);
event.setEnabled(true);
event.getText().clear();
event.getText().add(message);
accessibilityManager.sendAccessibilityEvent(event);
}

@Kroll.method
public void focus(Object viewProxy)
{
if (!(viewProxy instanceof TiViewProxy)) {
Log.w(TAG, "Ti.Accessibility.focus: argument must be a Ti.UI view proxy.");
return;
}

TiViewProxy proxy = (TiViewProxy) viewProxy;
TiUIView uiView = proxy.peekView();
if (uiView == null) {
Log.w(TAG, "Ti.Accessibility.focus: view is not yet realized, ignoring.");
return;
}

final android.view.View nativeView = uiView.getNativeView();
if (nativeView != null) {
nativeView.post(new Runnable() {
@Override
public void run()
{
nativeView.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
}
});
}
}

@Override
public String getApiName()
{
return "Ti.Accessibility";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@

import org.appcelerator.titanium.util.TiSession;

import androidx.annotation.NonNull;

@Kroll.module
public class AppModule extends KrollModule implements SensorEventListener
public class AppModule extends KrollModule implements SensorEventListener, TiApplication.ConfigurationChangedListener
{
private static final String TAG = "AppModule";

Expand All @@ -46,17 +48,25 @@ public class AppModule extends KrollModule implements SensorEventListener
private boolean proximityDetection = false;
private boolean proximityState;
private int proximityEventListenerCount = 0;
private float currentFontScale = -1.0f;

public AppModule()
{
super("App");

TiApplication.getInstance().addAppEventProxy(this);
appInfo = TiApplication.getInstance().getAppInfo();

TiApplication.addConfigurationChangeListener(this);
android.content.res.Configuration config = TiApplication.getInstance().getResources().getConfiguration();
if (config != null) {
currentFontScale = config.fontScale;
}
}

public void onDestroy()
{
TiApplication.removeConfigurationChangedListener(this);
TiApplication.getInstance().removeAppEventProxy(this);
}

Expand Down Expand Up @@ -324,4 +334,15 @@ public String getApiName()
{
return "Ti.App";
}

@Override
public void onConfigurationChanged(@NonNull android.content.res.Configuration newConfig)
{
if (currentFontScale != newConfig.fontScale) {
currentFontScale = newConfig.fontScale;
KrollDict data = new KrollDict();
data.put("value", currentFontScale);
fireEvent("fontScaleChanged", data);
}
}
}
1 change: 1 addition & 0 deletions android/titanium/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ android {
java.srcDirs = [
'src/java',
"${projectDir}/../modules/accelerometer/src/java",
"${projectDir}/../modules/accessibility/src/java",
"${projectDir}/../modules/android/src/java",
"${projectDir}/../modules/app/src/java",
"${projectDir}/../modules/calendar/src/java",
Expand Down
2 changes: 2 additions & 0 deletions android/titanium/src/java/org/appcelerator/titanium/TiC.java
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,8 @@ public class TiC
public static final String PROPERTY_ACCESSIBILITY_LABEL = "accessibilityLabel";
public static final String PROPERTY_ACCESSIBILITY_VALUE = "accessibilityValue";
public static final String PROPERTY_ACCESSIBILITY_DISABLE_LONG = "accessibilityDisableLongPress";
public static final String PROPERTY_ACCESSIBILITY_DISABLE_CLICK = "accessibilityDisableClick";
public static final String PROPERTY_ACCESSIBILITY_VIEW_IS_MODAL = "accessibilityViewIsModal";
public static final String PROPERTY_ACCESSORY_TYPE = "accessoryType";
public static final String PROPERTY_ACTION = "action";
public static final String PROPERTY_ACTION_VIEW = "actionView";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
TiC.PROPERTY_ACCESSIBILITY_LABEL,
TiC.PROPERTY_ACCESSIBILITY_VALUE,
TiC.PROPERTY_ACCESSIBILITY_HIDDEN,
TiC.PROPERTY_ACCESSIBILITY_VIEW_IS_MODAL,
// others
TiC.PROPERTY_FOCUSABLE,
TiC.PROPERTY_TOUCH_ENABLED,
Expand All @@ -95,7 +96,8 @@
TiC.PROPERTY_TRANSITION_NAME,
TiC.PROPERTY_HIDDEN_BEHAVIOR,
TiC.PROPERTY_ANCHOR_POINT,
TiC.PROPERTY_ACCESSIBILITY_DISABLE_LONG
TiC.PROPERTY_ACCESSIBILITY_DISABLE_LONG,
TiC.PROPERTY_ACCESSIBILITY_DISABLE_CLICK
})
public abstract class TiViewProxy extends KrollProxy
{
Expand Down
Loading