MyTracks ソース読み (4)

今日のもくもくでハマッたソレは周辺情報なエントリを自分で入れてました。

なんとなくで申し訳ないんですが

    SharedPreferences prefs =
        getSharedPreferences(MyTracksSettings.SETTINGS_NAME, 0);
    if (prefs != null) {
      selectedTrackId = prefs.getLong(MyTracksSettings.SELECTED_TRACK, -1);
      recordingTrackId = prefs.getLong(MyTracksSettings.RECORDING_TRACK, -1);
      prefs.registerOnSharedPreferenceChangeListener(this);
    }

保存しているソレがあったらリスナ登録している。リスナは preference なナニが変更されたら onChange 的なナニが呼ばれるはず。上記エントリによれば以下との事。

  @Override
  public void onSharedPreferenceChanged(
      SharedPreferences sharedPreferences, String key) {
    // The service itself cannot listen to changes (not supported by Android for
    // services that run in a separate process). So we'll notify it manually:
    if (key != null && trackRecordingService != null) {
      try {
        trackRecordingService.sharedPreferenceChanged(key);
      } catch (RemoteException e) {
        Log.w(MyTracksConstants.TAG,
            "MyTracks: Cannot notify track recording service of changes "
            + "to shared preferences: ", e);
      }
    }
    if (key != null && key.equals(MyTracksSettings.SELECTED_TRACK)) {
      selectedTrackId =
          sharedPreferences.getLong(MyTracksSettings.SELECTED_TRACK, -1);
    }
  }

おそらくは setSelectedTrack メソドで非同期に変更されて、変更された時点で上記の callback が呼び出されると見た。という事は MapView なナニを書き換えてるのは

        trackRecordingService.sharedPreferenceChanged(key);

な部分と類推。

てか、

どうやって Overlay なソレを描画しているのかを確認したいんだが、な件orz

  • Overlay で grep したら MyTracksMap というクラスがナニ

とりあえず課題満載なのだけは間違いないですな。