| 84 | } |
| 85 | |
| 86 | export async function snapshotAndroid( |
| 87 | device: DeviceInfo, |
| 88 | options: AndroidSnapshotOptions = {}, |
| 89 | ): Promise<{ |
| 90 | nodes: RawSnapshotNode[]; |
| 91 | truncated?: boolean; |
| 92 | analysis: AndroidSnapshotAnalysis; |
| 93 | androidSnapshot: AndroidSnapshotBackendMetadata; |
| 94 | }> { |
| 95 | const adb = resolveAndroidAdbProvider(device, options.helperAdb).exec; |
| 96 | const capture = await captureAndroidUiHierarchy(device, options, adb); |
| 97 | const xml = capture.xml; |
| 98 | const includeHiddenContentHints = options.includeHiddenContentHints !== false; |
| 99 | if (!options.interactiveOnly) { |
| 100 | const parsed = parseUiHierarchy(xml, undefined, options); |
| 101 | const truncated = mergeAndroidSnapshotTruncation(parsed.truncated, capture.metadata); |
| 102 | if (includeHiddenContentHints) { |
| 103 | const nativeHints = await deriveScrollableContentHintsIfNeeded( |
| 104 | device, |
| 105 | parsed.nodes, |
| 106 | xml, |
| 107 | adb, |
| 108 | ); |
| 109 | applyHiddenContentHintsToNodes(nativeHints, parsed.nodes); |
| 110 | } |
| 111 | return { |
| 112 | ...parsed, |
| 113 | ...androidSnapshotTruncationFields(truncated), |
| 114 | androidSnapshot: capture.metadata, |
| 115 | }; |
| 116 | } |
| 117 | |
| 118 | const tree = parseUiHierarchyTree(xml); |
| 119 | const interactiveSnapshot = buildUiHierarchySnapshot(tree, undefined, options); |
| 120 | const truncated = mergeAndroidSnapshotTruncation(interactiveSnapshot.truncated, capture.metadata); |
| 121 | if (includeHiddenContentHints) { |
| 122 | await applyHiddenContentHintsToInteractiveSnapshot({ |
| 123 | device, |
| 124 | options, |
| 125 | tree, |
| 126 | xml, |
| 127 | adb, |
| 128 | interactiveSnapshot, |
| 129 | }); |
| 130 | } |
| 131 | const { sourceNodes: _sourceNodes, ...snapshot } = interactiveSnapshot; |
| 132 | return { |
| 133 | ...snapshot, |
| 134 | ...androidSnapshotTruncationFields(truncated), |
| 135 | androidSnapshot: capture.metadata, |
| 136 | }; |
| 137 | } |
| 138 | |
| 139 | function mergeAndroidSnapshotTruncation( |
| 140 | snapshotTruncated: boolean | undefined, |