ADFA-319 - Welcome Screen Test - #1
Merged
Merged
Conversation
romanlapa
approved these changes
Jan 9, 2025
Closed
fryanpan
added a commit
to fryanpan/CodeOnTheGo
that referenced
this pull request
May 8, 2026
Plugin APKs are loaded with DexClassLoader and never registered with the
host's PackageManager, so Intent(host, RegionManagerActivity::class).start
silently fails at runtime. The runCatching block at GisPlugin.launchRegion
swallowed the exception and the sidebar tap no-oped. Sibling plugins
(apk-viewer, markdown-preview, keystore-generator, forms) all route
through IdeEditorTabService.selectPluginTab; do the same here.
- GisPlugin: implement EditorTabExtension; sidebar action calls
selectPluginTab("gis_regions_main_tab"). dispose() now clears the
static pluginContext so a plugin reload doesn't leave a stale ref.
- RegionManagerFragment: host-resolved Fragment under the editor tab.
Wraps inflater via PluginFragmentHelper.getPluginInflater so plugin
resources resolve. Internal navigation between list view and bbox
picker via childFragmentManager.replace(picker_container, ...).
- BboxPickerFragment (new): replaces BboxPickerActivity. Hosted under
the same tab. Listener interface (onBboxPickerSaved/Cancelled) lets
the regions fragment swap itself back in. Supports prefill (regionId,
displayName, bbox) for refresh flows so a refresh rewrites the same
cache entry instead of creating a sibling.
- applyRegionToProject: free-space precheck, atomic-rename pattern
(write .tmp, Files.move ATOMIC_MOVE), marker-last semantics so a
process kill mid-copy can't leave an inconsistent state. Logs
failures via pluginContext.logger.error so causes surface in logcat.
Defense-in-depth canonicalisation of srcDir against cache root.
- readActiveRegionId: 1024-byte cap on marker file length per
CodeRabbit theme appdevforall#1 (resource bounds).
- RegionInfo: now carries the bbox parsed from meta.json so refresh
can pre-fill the picker without re-prompting.
Drops:
- RegionManagerActivity, BboxPickerActivity (.kt), activity_*.xml
- <activity> entries from AndroidManifest.xml
- Deprecated startActivityForResult/onActivityResult pair (no longer
needed — same-tab fragment swap doesn't cross Activity boundaries)
Build: gis-plugin assembleDebug green.
Refs REVIEW.md/REVIEW2.md C1, I2, I4, I5; Codex P1, P2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jatezzz
pushed a commit
that referenced
this pull request
Jun 22, 2026
ADFA-319 - Welcome Screen Test
jatezzz
added a commit
that referenced
this pull request
Jul 17, 2026
Fan-out, adapter, and plugin-API fixes from the ProjectSearchExtension review: - Guard plugin results against null elements (mapNotNull) and wrap the collection block in a logging try/catch so a bad element no longer kills the whole fan-out silently. (#1) - buildRows buffers each section's rows and emits the header only when a group exists, skipping blank titles -- no more orphan/blank headers suppressing the empty state. (#2) - Move the fan-out to lifecycleScope so a slow plugin can't pin a destroyed Activity/ViewModel or post to a dead Activity. (#3) - Keep the search progress indicator up when the built-in search is empty but plugins are enabled, so a plugin-only match doesn't flash a terminal "no results" state. (#4) - SearchListAdapter is now a ListAdapter + DiffUtil reused across emissions; the two-phase publish diffs instead of reallocating, preserving scroll and already-run highlights. (#5) - Collapse the adapter constructors to one clicks ctor plus a thin map convenience ctor; drop the dead keys param and nullable-value scrub. (#6) - Replace the blocking .get(10s) with a non-blocking withTimeoutOrNull + await so no commonPool worker is tied up. (#7) - Trim pipe-split filter tokens at the source (endsWith(" kt") matched nothing in built-in search too); align ProjectSearchExtension KDoc with actual behavior and drop the non-ASCII em-dash. (#9, #10)
jatezzz
added a commit
that referenced
this pull request
Jul 20, 2026
Fan-out, adapter, and plugin-API fixes from the ProjectSearchExtension review: - Guard plugin results against null elements (mapNotNull) and wrap the collection block in a logging try/catch so a bad element no longer kills the whole fan-out silently. (#1) - buildRows buffers each section's rows and emits the header only when a group exists, skipping blank titles -- no more orphan/blank headers suppressing the empty state. (#2) - Move the fan-out to lifecycleScope so a slow plugin can't pin a destroyed Activity/ViewModel or post to a dead Activity. (#3) - Keep the search progress indicator up when the built-in search is empty but plugins are enabled, so a plugin-only match doesn't flash a terminal "no results" state. (#4) - SearchListAdapter is now a ListAdapter + DiffUtil reused across emissions; the two-phase publish diffs instead of reallocating, preserving scroll and already-run highlights. (#5) - Collapse the adapter constructors to one clicks ctor plus a thin map convenience ctor; drop the dead keys param and nullable-value scrub. (#6) - Replace the blocking .get(10s) with a non-blocking withTimeoutOrNull + await so no commonPool worker is tied up. (#7) - Trim pipe-split filter tokens at the source (endsWith(" kt") matched nothing in built-in search too); align ProjectSearchExtension KDoc with actual behavior and drop the non-ASCII em-dash. (#9, #10)
jatezzz
added a commit
that referenced
this pull request
Jul 20, 2026
…#1528) * feat(search): add ProjectSearchExtension API for plugin result sections Fan out to enabled plugins after built-in search and render their sections. * style: apply spotless formatting to search extension files * fix(search): address review findings on plugin search extension - Bound plugin search fan-out with a 10s timeout and drop results from superseded searches via a generation counter in EditorViewModel - Guard against Java plugins completing their future with null - Flatten SearchListAdapter's nested RecyclerView into Row.Match rows so match rows recycle instead of inflating all at once - Narrow catch(Throwable) to catch(Exception) per REVIEW.md - Document plugin-api search contract types; coordinates are 0-based, end-exclusive - Marshal plugin crash recording to the UI thread and drop the unread searchResults flow. * fix(search): address review feedback on search results list - Make the group row's LinearLayout the layout root so the click listener on binding.root receives taps (the clickable child was consuming them) and drop the redundant RelativeLayout wrapper - Log highlight failures via SLF4J and keep the plain-text preview instead of overwriting the line with the matched text - Skip files with empty match lists to avoid dangling group headers - Hide the decorative file icon from accessibility services * fix(search): address code-review findings on plugin search Fan-out, adapter, and plugin-API fixes from the ProjectSearchExtension review: - Guard plugin results against null elements (mapNotNull) and wrap the collection block in a logging try/catch so a bad element no longer kills the whole fan-out silently. (#1) - buildRows buffers each section's rows and emits the header only when a group exists, skipping blank titles -- no more orphan/blank headers suppressing the empty state. (#2) - Move the fan-out to lifecycleScope so a slow plugin can't pin a destroyed Activity/ViewModel or post to a dead Activity. (#3) - Keep the search progress indicator up when the built-in search is empty but plugins are enabled, so a plugin-only match doesn't flash a terminal "no results" state. (#4) - SearchListAdapter is now a ListAdapter + DiffUtil reused across emissions; the two-phase publish diffs instead of reallocating, preserving scroll and already-run highlights. (#5) - Collapse the adapter constructors to one clicks ctor plus a thin map convenience ctor; drop the dead keys param and nullable-value scrub. (#6) - Replace the blocking .get(10s) with a non-blocking withTimeoutOrNull + await so no commonPool worker is tied up. (#7) - Trim pipe-split filter tokens at the source (endsWith(" kt") matched nothing in built-in search too); align ProjectSearchExtension KDoc with actual behavior and drop the non-ASCII em-dash. (#9, #10) * style(search): expand when branches to block form for ktlint Spotless ratchets from origin/stage; stage was reformatted after this branch diverged, so CI flagged the single-expression when branches in onUpdateWadbConnectionStatus and the multi-line FileOpResult.Success branch. Expand them to ktlint's canonical block form so the file is fully canonical and passes under any ratchet base. * fix: reported violations for spotless
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add the Kaspresso test for the Welcome screen.
https://appdevforall.atlassian.net/browse/ADFA-319