Skip to content

ADFA-3817 | Fix for dropdown entries separating layout and strings data#1258

Merged
jatezzz merged 3 commits intostagefrom
fix/ADFA-3817-dropdown-entries-experimental
Apr 28, 2026
Merged

ADFA-3817 | Fix for dropdown entries separating layout and strings data#1258
jatezzz merged 3 commits intostagefrom
fix/ADFA-3817-dropdown-entries-experimental

Conversation

@jatezzz
Copy link
Copy Markdown
Collaborator

@jatezzz jatezzz commented Apr 27, 2026

Description

Resolved an issue where dropdowns incorrectly generated tools:entries="[x,y,z]" inline, which fails to compile. Extracted the dropdown array definitions so that the layout is properly separated from the data. The generator now creates <string-array> items and assigns standard @array/... references to the Spinner's android:entries attribute.

Details

  • Updated AndroidXmlGenerator and the Computer Vision pipeline to return a Pair<String, String> containing both the layout XML and the newly generated strings XML.
  • Introduced SpinnerWidget parsing logic to cleanly format array items and populate XmlContext.stringArrays.
  • Added StringsXmlInjector utility to safely inject the generated <string-array> blocks into the project's existing res/values/strings.xml without destroying current resources.
  • Updated BaseEditorActivity to handle the dual XML results and trigger the injection appropriately.
document_5152532828897937754.mp4

Ticket

ADFA-3817

Observation

The StringsXmlInjector uses regex to check for existing arrays with the same name to prevent duplication, and cleanly inserts new blocks right before the closing </resources> tag.

Updates XML generator to extract dropdown items into string arrays and injects them into the project's strings.xml.
@jatezzz jatezzz requested review from a team, Daniel-ADFA and avestaadfa April 27, 2026 22:18
@jatezzz jatezzz force-pushed the fix/ADFA-3817-dropdown-entries-experimental branch from eead251 to 705339c Compare April 27, 2026 22:19
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 27, 2026

Warning

Rate limit exceeded

@jatezzz has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 47 minutes and 32 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4fac1575-9530-4d04-8dee-f141b960698a

📥 Commits

Reviewing files that changed from the base of the PR and between 23571a5 and 41559a0.

📒 Files selected for processing (1)
  • app/src/main/java/com/itsaky/androidide/utils/ProjectStringsXmlResolver.kt
📝 Walkthrough

Walkthrough

UI designer generation now produces two payloads: layout XML and strings XML. The editor intake asynchronously injects parsed <string-array> resources into the project strings.xml before applying the generated layout to the editor.

Changes

Cohort / File(s) Summary
Editor Activity Integration
app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt, cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/ComputerVisionActivity.kt
Editor result handling split: optional async strings injection (via extras EXTRA_GENERATED_STRINGS, EXTRA_LAYOUT_FILE_PATH) then main-thread layout application; ComputerVisionActivity returns both layout and strings extras and forwards layout path.
Strings Injection & Commands
app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt, app/src/main/java/com/itsaky/androidide/api/commands/AddStringArrayResourceCommand.kt, app/src/main/java/com/itsaky/androidide/api/commands/AddStringResourceCommand.kt, app/src/main/java/com/itsaky/androidide/api/commands/SuspendCommand.kt, app/src/main/java/com/itsaky/androidide/utils/ProjectStringsXmlResolver.kt
New injector that parses <string-array> fragments and applies them via suspendable commands; added AddStringArrayResourceCommand, suspend command interface, resolver to locate project strings.xml, and updates to string resource command resolution.
Strings resources
app/src/main/res/values/strings.xml
Added localized messages for strings-injection failure modes (parser unsupported, file not found, invalid XML, general failure).
CV repo: return-type changes
cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/data/repository/ComputerVisionRepository.kt, .../ComputerVisionRepositoryImpl.kt, .../ComputerVisionViewModel.kt, .../ComputerVisionUiState.kt, .../ComputerVisionActivity.kt
generateXml now returns Result<Pair<String,String>> (layoutXml, stringsXml) across repository, viewmodel, state/effects, and activity result wiring; viewmodel save logic conditionally appends strings XML.
XML generation & widget handling
cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/YoloToXmlConverter.kt, .../xml/AndroidXmlGenerator.kt, .../xml/AndroidWidget.kt, .../xml/XmlContext.kt
Generator returns Pair(layout, strings); XmlContext adds stringArrays; AndroidWidget adds overridable processAttributes and a SpinnerWidget that extracts comma-separated entries into stringArrays and rewrites android:entries to @array/....
Attribute parsing & grammar
cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/FuzzyAttributeParser.kt, .../grammar/AttributeValidator.kt, .../grammar/WidgetGrammar.kt
Switched entries attribute from tools:entriesandroid:entries, simplified EntriesValidator output formatting (no brackets, comma-separated no spaces), and replaced hard-coded attribute strings with AttributeKey constants.
Minor activity extras
uidesigner/src/main/java/com/itsaky/androidide/uidesigner/UIDesignerActivity.kt
Added extras constants EXTRA_GENERATED_STRINGS and EXTRA_LAYOUT_FILE_PATH for returning strings payload and layout path.

Sequence Diagram

sequenceDiagram
    actor User
    participant UIDesigner as UIDesignerActivity
    participant CV as ComputerVisionActivity
    participant Editor as BaseEditorActivity
    participant Injector as StringsXmlInjector
    participant StringsFile as Project strings.xml
    participant Generator as AndroidXmlGenerator

    User->>UIDesigner: trigger generation
    UIDesigner->>Generator: buildXml()
    Generator-->>UIDesigner: (layoutXml, stringsXml)
    UIDesigner->>CV: ReturnXmlResult(layoutXml, stringsXml)
    CV->>Editor: Intent with RESULT_GENERATED_XML & RESULT_GENERATED_STRINGS + layoutPath
    Editor->>Editor: extract extras
    alt stringsXml non-empty
      Editor->>Injector: inject(layoutPath, stringsXml)
      Injector->>StringsFile: update/merge <string-array> entries
      StringsFile-->>Injector: success/failure
    end
    Editor->>Editor: applyGeneratedXmlToEditor(layoutXml)
    Editor-->>User: show updated editor
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • Daniel-ADFA
  • avestaadfa
  • itsaky-adfa

Poem

🐇 Hop, I parsed the spinner rings,

I tucked their items into strings,
Two XMLs now leap and play,
Layout sings while arrays stay —
Hooray! 🌷

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: fixing dropdown entries by separating layout XML from strings data, with a reference to the ticket identifier.
Description check ✅ Passed The description comprehensively relates to the changeset, explaining the issue, the solution approach, implementation details, and key components added.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ADFA-3817-dropdown-entries-experimental

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt`:
- Around line 1109-1117: handleStringsInjection currently silently skips
injecting when layoutFilePath is missing and uses hard-coded extra keys; change
it to validate both values with isNullOrBlank (treat empty layoutFilePath as an
error), use named constants instead of literal keys (e.g.,
EXTRA_GENERATED_STRINGS, EXTRA_LAYOUT_FILE_PATH) for Intent extras, and if
layoutFilePath is missing log/report the problem (or surface a user-facing
notification) rather than no-op; when launching editorActivityScope.launch to
call StringsXmlInjector.inject(layoutFilePath, stringsXml) wrap the call in
try/catch and log failures so unresolved `@array/`... references are visible for
debugging.

In `@app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt`:
- Around line 14-15: The current Regex-based replacement (ARRAY_REGEX) in
StringsXmlInjector should be replaced with proper XML parsing/serialization:
parse the strings.xml via a standard XML parser (e.g.,
javax.xml.parsers.DocumentBuilder / org.w3c.dom or XmlPullParser), locate
<string-array> elements by tag name and name attribute, modify or remove them
programmatically, then write the Document back with an XML serializer to
preserve comments/formatting; update the code paths that reference ARRAY_REGEX
(inside class StringsXmlInjector and any methods that perform the replacement)
to use the new DOM/XmlPull-based logic and remove the regex constant so
commented-out blocks and attribute-order variations are handled correctly.
- Around line 16-28: The inject function currently swallows all exceptions;
change its signature from suspend fun inject(layoutFilePath: String,
newStringsXml: String) to return a Result<Unit> (suspend fun inject(...):
Result<Unit>) and update its body to avoid catching Exception broadly—only catch
and handle specific, expected errors (e.g., IOException when reading/writing the
file and any XML-parsing exception thrown by mergeContent/resolveStringsFile),
returning Result.failure(e) for those cases and Result.success(Unit) on success;
remove the generic catch that logs and absorbs errors (keep logging but still
return failure), and update callers (e.g., BaseEditorActivity) to check the
Result and abort the layout update on failure.

In
`@cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/viewmodel/ComputerVisionViewModel.kt`:
- Around line 333-338: The code in ComputerVisionViewModel creates a combined
payload but currently discards stringsXml; update the logic that builds combined
(used before calling saveXmlFile) to append stringsXml when it's not blank
(e.g., combine layoutXml, separator/newlines, then stringsXml) so Spinner/arrays
are included in the download payload; make this change in the block that
computes combined and then calls saveXmlFile(combined) and keep the existing
CvAnalyticsUtil and _uiState updates intact.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e9a56a19-b3e6-4138-89ce-b39969940172

📥 Commits

Reviewing files that changed from the base of the PR and between cc9270a and eead251.

📒 Files selected for processing (14)
  • app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt
  • app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/data/repository/ComputerVisionRepository.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/data/repository/ComputerVisionRepositoryImpl.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/FuzzyAttributeParser.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/YoloToXmlConverter.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/grammar/AttributeValidator.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/grammar/WidgetGrammar.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/AndroidWidget.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/AndroidXmlGenerator.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/XmlContext.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/ComputerVisionActivity.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/ComputerVisionUiState.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/viewmodel/ComputerVisionViewModel.kt

Comment thread app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt Outdated
Comment thread app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt Outdated
Comment thread app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt Outdated
@jatezzz
Copy link
Copy Markdown
Collaborator Author

jatezzz commented Apr 28, 2026

Current behavior

document_5154784628711625104.mp4

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/viewmodel/ComputerVisionViewModel.kt (1)

333-335: ⚠️ Potential issue | 🟠 Major

stringsXml is still dropped in the downloads payload.

At Line 334, combined adds only newlines when stringsXml is present, so saved output misses <string-array> data.

♻️ Proposed fix
-                    val combined = if(stringsXml.isNotBlank()) "$layoutXml\n\n\n" else layoutXml
+                    val combined =
+                        if (stringsXml.isNotBlank()) "$layoutXml\n\n\n$stringsXml" else layoutXml
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/viewmodel/ComputerVisionViewModel.kt`
around lines 333 - 335, In the onSuccess lambda where layoutXml and stringsXml
are combined, the code currently only appends newlines when stringsXml is
present, dropping the actual strings payload; fix the logic in the onSuccess
block (the combined variable) to append stringsXml (e.g. use layoutXml +
separators + stringsXml when stringsXml.isNotBlank()) so the saved/downloaded
output includes the <string-array> content, keeping the
CvAnalyticsUtil.trackXmlGenerated call and existing state.detections usage
intact.
🧹 Nitpick comments (3)
app/src/main/java/com/itsaky/androidide/api/commands/AddStringArrayResourceCommand.kt (3)

65-70: Consider narrowing the exception handling.

The catch-all Exception is overly broad. Per project guidelines, prefer catching specific exception types (e.g., SAXException, IOException, TransformerException) to maintain fail-fast behavior and avoid masking unexpected errors.

♻️ Proposed narrower exception handling
-            } catch (e: Exception) {
+            } catch (e: org.xml.sax.SAXException) {
+                ToolResult.failure(
+                    message = "Failed to parse strings.xml.",
+                    error_details = e.message
+                )
+            } catch (e: java.io.IOException) {
+                ToolResult.failure(
+                    message = "Failed to read or write strings.xml.",
+                    error_details = e.message
+                )
+            } catch (e: javax.xml.transform.TransformerException) {
                 ToolResult.failure(
-                    message = "An error occurred while adding or updating the string-array resource.",
+                    message = "Failed to serialize strings.xml.",
                     error_details = e.message
                 )
             }

Based on learnings: "prefer narrow exception handling that catches only the specific exception type reported in crashes... instead of a broad catch-all (e.g., catch (e: Exception))."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@app/src/main/java/com/itsaky/androidide/api/commands/AddStringArrayResourceCommand.kt`
around lines 65 - 70, The catch-all in AddStringArrayResourceCommand (the catch
(e: Exception) that returns ToolResult.failure) should be narrowed: replace it
with specific catch clauses for the likely failures such as SAXException,
IOException, TransformerException (and ParserConfigurationException if XML
parsing is used), each returning ToolResult.failure with the same message and
the specific exception's message; leave any truly unexpected errors to propagate
(or optionally rethrow/let a higher-level handler catch), ensuring you still
pass the exception detail into ToolResult.failure for debugging instead of
catching Exception globally.

90-92: Avoid redundant getElementsByTagName calls.

getElementsByTagName("string-array") is called once for .length and again for each .item(index). Store the NodeList once to avoid repeated DOM traversals.

♻️ Proposed fix
-        val existingNode = List(document.getElementsByTagName("string-array").length) { index ->
-            document.getElementsByTagName("string-array").item(index) as Element
-        }.firstOrNull { it.getAttribute("name") == name }
+        val stringArrayNodes = document.getElementsByTagName("string-array")
+        val existingNode = (0 until stringArrayNodes.length)
+            .map { stringArrayNodes.item(it) as Element }
+            .firstOrNull { it.getAttribute("name") == name }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@app/src/main/java/com/itsaky/androidide/api/commands/AddStringArrayResourceCommand.kt`
around lines 90 - 92, The code repeatedly calls
document.getElementsByTagName("string-array"); cache that NodeList in a local
val (e.g., nodeList) in AddStringArrayResourceCommand so you use nodeList.length
and nodeList.item(index) instead of calling getElementsByTagName each time, then
build the List from that cached nodeList and call .firstOrNull {
it.getAttribute("name") == name } as before.

33-36: fileMutexes can grow unbounded.

The ConcurrentHashMap accumulates entries for every unique file path but never removes them. In long-running sessions with many different strings.xml paths (e.g., multi-module projects), this could cause memory to grow without bound.

Consider using a bounded cache (e.g., CacheBuilder with weak values or size limit) or cleaning up entries when they're no longer needed.

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/src/main/java/com/itsaky/androidide/utils/ProjectStringsXmlResolver.kt`:
- Around line 21-23: The code currently returns stringsFile.takeIf { it.exists()
&& it.isFile } but doesn't ensure the canonicalized stringsFile is contained
within the project root (symlinks can escape the project). After computing val
stringsFile = File(projectRoot, STRINGS_XML_RELATIVE_PATH).canonicalFile, also
canonicalize the project root (e.g., val canonicalProjectRoot =
projectRoot.canonicalFile) and add a containment check (e.g.,
stringsFile.path.startsWith(canonicalProjectRoot.path + File.separator) or use a
proper Path relativize/startsWith) to the takeIf predicate so you only return
the file when it exists, isFile, and is located inside canonicalProjectRoot;
keep referencing stringsFile, projectRoot and STRINGS_XML_RELATIVE_PATH when
making the change.

In
`@cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/AndroidWidget.kt`:
- Around line 89-104: The code in processAttributes (AttributeKey.ENTRIES
handling) builds an array name from the raw id which may contain characters
invalid for Android resources and splits on commas naive to commas inside items;
fix by sanitizing the id into a valid Android resource name (lowercase, replace
any non [a-z0-9_] with '_', ensure it starts with a letter (prefix like "a_" if
needed), and fall back to nextId() or a safe suffix if result is empty) when
forming arrayName used with context.stringArrays and processed[key], and replace
the simple value.split(",") with a CSV-safe split (respect quoted items) or a
small parser that trims and unquotes items so commas inside quoted entries are
preserved before storing items in stringArrays and setting processed[key] =
"@array/$arrayName".

---

Duplicate comments:
In
`@cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/viewmodel/ComputerVisionViewModel.kt`:
- Around line 333-335: In the onSuccess lambda where layoutXml and stringsXml
are combined, the code currently only appends newlines when stringsXml is
present, dropping the actual strings payload; fix the logic in the onSuccess
block (the combined variable) to append stringsXml (e.g. use layoutXml +
separators + stringsXml when stringsXml.isNotBlank()) so the saved/downloaded
output includes the <string-array> content, keeping the
CvAnalyticsUtil.trackXmlGenerated call and existing state.detections usage
intact.

---

Nitpick comments:
In
`@app/src/main/java/com/itsaky/androidide/api/commands/AddStringArrayResourceCommand.kt`:
- Around line 65-70: The catch-all in AddStringArrayResourceCommand (the catch
(e: Exception) that returns ToolResult.failure) should be narrowed: replace it
with specific catch clauses for the likely failures such as SAXException,
IOException, TransformerException (and ParserConfigurationException if XML
parsing is used), each returning ToolResult.failure with the same message and
the specific exception's message; leave any truly unexpected errors to propagate
(or optionally rethrow/let a higher-level handler catch), ensuring you still
pass the exception detail into ToolResult.failure for debugging instead of
catching Exception globally.
- Around line 90-92: The code repeatedly calls
document.getElementsByTagName("string-array"); cache that NodeList in a local
val (e.g., nodeList) in AddStringArrayResourceCommand so you use nodeList.length
and nodeList.item(index) instead of calling getElementsByTagName each time, then
build the List from that cached nodeList and call .firstOrNull {
it.getAttribute("name") == name } as before.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0e1fa2e4-d685-4dae-ac80-6beaed3a763f

📥 Commits

Reviewing files that changed from the base of the PR and between eead251 and 23571a5.

📒 Files selected for processing (20)
  • app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt
  • app/src/main/java/com/itsaky/androidide/api/commands/AddStringArrayResourceCommand.kt
  • app/src/main/java/com/itsaky/androidide/api/commands/AddStringResourceCommand.kt
  • app/src/main/java/com/itsaky/androidide/api/commands/SuspendCommand.kt
  • app/src/main/java/com/itsaky/androidide/utils/ProjectStringsXmlResolver.kt
  • app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt
  • app/src/main/res/values/strings.xml
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/data/repository/ComputerVisionRepository.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/data/repository/ComputerVisionRepositoryImpl.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/FuzzyAttributeParser.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/YoloToXmlConverter.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/grammar/AttributeValidator.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/grammar/WidgetGrammar.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/AndroidWidget.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/AndroidXmlGenerator.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/XmlContext.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/ComputerVisionActivity.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/ComputerVisionUiState.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/viewmodel/ComputerVisionViewModel.kt
  • uidesigner/src/main/java/com/itsaky/androidide/uidesigner/UIDesignerActivity.kt
✅ Files skipped from review due to trivial changes (3)
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/xml/XmlContext.kt
  • uidesigner/src/main/java/com/itsaky/androidide/uidesigner/UIDesignerActivity.kt
  • app/src/main/res/values/strings.xml
🚧 Files skipped from review as they are similar to previous changes (7)
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/data/repository/ComputerVisionRepository.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/ui/ComputerVisionUiState.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/FuzzyAttributeParser.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/YoloToXmlConverter.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/grammar/WidgetGrammar.kt
  • cv-image-to-xml/src/main/java/org/appdevforall/codeonthego/computervision/domain/grammar/AttributeValidator.kt
  • app/src/main/java/com/itsaky/androidide/utils/StringsXmlInjector.kt

Copy link
Copy Markdown
Contributor

@Daniel-ADFA Daniel-ADFA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving with clarifying questions

@jatezzz jatezzz merged commit 62a6dcc into stage Apr 28, 2026
2 checks passed
@jatezzz jatezzz deleted the fix/ADFA-3817-dropdown-entries-experimental branch April 28, 2026 16:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants