Skip to content

Let clearOverlays() clear the strategy marker controllers too - #30

Open
wf9a5m75 wants to merge 1 commit into
developfrom
fix/clear-strategy
Open

wf9a5m75 wants to merge 1 commit into
developfrom
fix/clear-strategy

Conversation

@wf9a5m75

@wf9a5m75 wf9a5m75 commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

なぜ

clearOverlays() は、各プロバイダが自分で持つコントローラ(マーカー・ポリゴンなど)しか clear していませんでした。クラスタリングなどの拡張が登録する Strategy のコントローラ(StrategyMarkerController)は対象外で、clearOverlays() の後もクラスタのマーカーが地図に残っていました。

何を変えたか

  • BaseMapViewController.clearStrategyMarkerControllers()(protected)を足しました。登録されている StrategyMarkerController をすべて clear します(clear の中身は前回の PR で直した onRemove → strategy.clear() → onPostProcess の順)。カメラだけを聞くコントローラ(ヒートマップ)は触りません。
  • 各プロバイダの clearOverlays() からこれを呼びます(プロバイダ側の PR)。
  • 公開 API は protected メソッド 1 つの追加のみ(apiCheck)。

検証

2026-11-08 に develop(fix/mapview-teardown、fix/geodesic-polygon-fill、fix/clear-followups、refactor/polygon-controller などのマージ後)の上に載せ直してから確かめています。

  • 親ビルド(core とプロバイダを同じブランチの worktree に差し替え)で全モジュールのコンパイルと単体テストが通りました(ClearStrategyMarkerControllersTest、template の TemplateClearOverlaysStrategyTest を含む)。各 submodule の単体ビルド(ブランチの core を専用の maven リポジトリに publish して組む)でも通りました。
  • 落ちたテストは develop でも同じく落ちるもの 2 つだけです(template の Conformance 3 件の NPE、OMM の XYZ/TMS の 1 件 Log.isLoggable 未 mock)。
  • 11 プロバイダすべての clearOverlays() が clearStrategyMarkerControllers() を呼んでいることを、載せ直した後のコードで確認しました。
  • タブレット実機(develop + この PR 一式 + fix/overlay-stacking-order + MapTiler の restore を合わせた APK)で、MapLibre・Mapbox・Mappls・MapTiler・Google・HERE・OMM・TomTom・Longdo・ArcGIS 2D について、Strategy のマーカーを 3 本足して clearOverlays すると消えることを撮りました。
  • apiCheck: この PR の .api の差分は追加のみ。

確認できていないもの

  • ArcGIS 3D: 実機で検証ページの途中(逆の順で足している途中)にアプリが前面から消え、その後タブレットが adb から外れたため、原因を取れていません。載せ直す前は最後まで動いていました。
  • apiCheck は arcgis / mapbox / maplibre / mappls / omm で落ちますが、develop でも同じ内容で落ちます(develop にマージ済みの TILE_REFRESH_COALESCE と ArcGISMarkerController の引数変更が develop の .api に入っていない)。この PR とは無関係です。
  • CI: プロバイダの CI は core の同名ブランチ(この PR 一式の core)を clone して組むので、core 未マージでも通っています(初回は gradle のダウンロードのタイムアウトで落ちたものがあり、再実行で全部通りました)。

関連 PR(fix/clear-strategy の一式)

マージの順番:

  1. 各プラットフォームの core(android-sdk-core / ios-sdk-core / js-sdk-core)
  2. そのプラットフォームのプロバイダ(core の新しい API を呼ぶので、core より先に入れるとビルドが通りません)
  • web はさらに js-sdk-core の npm 公開と、各 react-for-* の依存の引き上げが前提です(npm 公開はまだしない、という決定なので、web のプロバイダ PR はそれまで保留です)。
  • fix/overlay-stacking-order の PR 一式とは衝突しません(git merge-tree で確認済み)。順番は clear-strategy → stacking を想定しています。

Strategy marker controllers (clustering and other MarkerRenderingStrategy
users) are not owned by a provider: extension modules such as
android-marker-clustering's MarkerRenderingGroup create them and hand them
to registerOverlayController. Every provider's clearOverlays() clears only
its own fields, so markers drawn through a strategy stayed on the map.

BaseMapViewController.clearStrategyMarkerControllers() clears every
registered StrategyMarkerController (with the onRemove -> clear ->
onPostProcess order from the previous commit). Providers call it from
clearOverlays(). Controllers that only listen to the camera (heatmap) are
left alone.

ClearStrategyMarkerControllersTest fails when the helper does nothing and
passes now. Public API: one protected method added.
This was referenced Nov 8, 2026
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.

1 participant