Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate ShadowAccessibilityNodeInfo to reflector #6868

Merged
merged 1 commit into from Nov 20, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -8,6 +8,7 @@
import static android.os.Build.VERSION_CODES.N;
import static android.os.Build.VERSION_CODES.Q;
import static org.robolectric.RuntimeEnvironment.getApiLevel;
import static org.robolectric.util.reflector.Reflector.reflector;

import android.graphics.Rect;
import android.os.Bundle;
Expand Down Expand Up @@ -36,7 +37,9 @@
import org.robolectric.annotation.Resetter;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.ReflectionHelpers.ClassParameter;
import org.robolectric.util.reflector.Accessor;
import org.robolectric.util.reflector.ForType;
import org.robolectric.util.reflector.Static;

/**
* Properties of {@link android.view.accessibility.AccessibilityNodeInfo} that are normally locked
Expand Down Expand Up @@ -191,8 +194,7 @@ public AccessibilityNodeInfo[] newArray(int size) {

@Implementation
protected void __constructor__() {
ReflectionHelpers.setStaticField(
AccessibilityNodeInfo.class, "CREATOR", ShadowAccessibilityNodeInfo.CREATOR);
reflector(AccessibilityNodeInfoReflector.class).setCreator(ShadowAccessibilityNodeInfo.CREATOR);
}

@Implementation
Expand Down Expand Up @@ -1223,11 +1225,7 @@ public static final class ShadowAccessibilityAction {

@Implementation
protected void __constructor__(int id, CharSequence label) {
if (((id
& (int)
ReflectionHelpers.getStaticField(
AccessibilityNodeInfo.class, "ACTION_TYPE_MASK"))
== 0)
if (((id & reflector(AccessibilityNodeInfoReflector.class).getActionTypeMask()) == 0)
&& Integer.bitCount(id) != 1) {
throw new IllegalArgumentException("Invalid standard action id");
}
Expand Down Expand Up @@ -1266,8 +1264,8 @@ public boolean equals(Object other) {

@Override
public String toString() {
String actionSybolicName = ReflectionHelpers.callStaticMethod(
AccessibilityNodeInfo.class, "getActionSymbolicName", ClassParameter.from(int.class, id));
String actionSybolicName =
reflector(AccessibilityNodeInfoReflector.class).getActionSymbolicName(id);
return "AccessibilityAction: " + actionSybolicName + " - " + label;
}
}
Expand All @@ -1292,19 +1290,16 @@ protected void writeToParcel(Parcel dest, int flags) {

private static int getActionTypeMaskFromFramework() {
// Get the mask to determine whether an int is a legit ID for an action, defined by Android
return (int)ReflectionHelpers.getStaticField(AccessibilityNodeInfo.class, "ACTION_TYPE_MASK");
return reflector(AccessibilityNodeInfoReflector.class).getActionTypeMask();
}

private static AccessibilityAction getActionFromIdFromFrameWork(int id) {
// Convert an action ID to Android standard Accessibility Action defined by Android
return ReflectionHelpers.callStaticMethod(
AccessibilityNodeInfo.class, "getActionSingleton", ClassParameter.from(int.class, id));
return reflector(AccessibilityNodeInfoReflector.class).getActionSingleton(id);
}

private static int getLastLegacyActionFromFrameWork() {
return (int)
ReflectionHelpers.getStaticField(
AccessibilityNodeInfo.class, "LAST_LEGACY_STANDARD_ACTION");
return reflector(AccessibilityNodeInfoReflector.class).getLastLegacyStandardAction();
}

/**
Expand All @@ -1331,4 +1326,25 @@ public String toString() {
+ className
+ "}";
}

@ForType(AccessibilityNodeInfo.class)
interface AccessibilityNodeInfoReflector {
@Static
@Accessor("CREATOR")
void setCreator(Parcelable.Creator<AccessibilityNodeInfo> creator);

@Static
@Accessor("ACTION_TYPE_MASK")
int getActionTypeMask();

@Static
@Accessor("LAST_LEGACY_STANDARD_ACTION")
int getLastLegacyStandardAction();

@Static
String getActionSymbolicName(int id);

@Static
AccessibilityAction getActionSingleton(int id);
}
}