|
31 | 31 | import com.google.android.gms.maps.model.Marker;
|
32 | 32 | import com.google.android.gms.maps.model.MarkerOptions;
|
33 | 33 | import com.omkarmoghe.pokemap.R;
|
| 34 | +import com.omkarmoghe.pokemap.controllers.MarkerRefreshController; |
34 | 35 | import com.omkarmoghe.pokemap.controllers.app_preferences.PokemapAppPreferences;
|
35 | 36 | import com.omkarmoghe.pokemap.controllers.app_preferences.PokemapSharedPreferences;
|
36 | 37 | import com.omkarmoghe.pokemap.controllers.map.LocationManager;
|
37 | 38 | import com.omkarmoghe.pokemap.helpers.RemoteImageLoader;
|
38 | 39 | import com.omkarmoghe.pokemap.models.events.CatchablePokemonEvent;
|
39 | 40 | import com.omkarmoghe.pokemap.models.events.ClearMapEvent;
|
40 | 41 | import com.omkarmoghe.pokemap.models.events.GymsEvent;
|
| 42 | +import com.omkarmoghe.pokemap.models.events.MarkerUpdateEvent; |
41 | 43 | import com.omkarmoghe.pokemap.models.events.PokestopsEvent;
|
42 | 44 | import com.omkarmoghe.pokemap.models.events.SearchInPosition;
|
43 | 45 | import com.omkarmoghe.pokemap.models.map.GymMarkerExtended;
|
@@ -352,6 +354,7 @@ public void onFetch(Bitmap bitmap) {
|
352 | 354 | userSelectedPositionCircles.clear();
|
353 | 355 | }
|
354 | 356 | }
|
| 357 | + MarkerRefreshController.getInstance().reset(); |
355 | 358 | }
|
356 | 359 |
|
357 | 360 | private float getDistanceInMeters(double lat1, double lon1, double lat2, double lon2) {
|
@@ -527,6 +530,33 @@ public void onFetch(Bitmap bitmap) {
|
527 | 530 | }
|
528 | 531 | }
|
529 | 532 |
|
| 533 | + private void removeExpiredMarkers() { |
| 534 | + |
| 535 | + if (mGoogleMap != null) { |
| 536 | + if (markerList != null && !markerList.isEmpty()) { |
| 537 | + for (Iterator<Map.Entry<String, PokemonMarkerExtended>> pokemonIterator = markerList.entrySet().iterator(); pokemonIterator.hasNext(); ) { |
| 538 | + Map.Entry<String, PokemonMarkerExtended> pokemonEntry = pokemonIterator.next(); |
| 539 | + CatchablePokemon catchablePokemon = pokemonEntry.getValue().getCatchablePokemon(); |
| 540 | + Marker marker = pokemonEntry.getValue().getMarker(); |
| 541 | + |
| 542 | + long millisLeft = catchablePokemon.getExpirationTimestampMs() - System.currentTimeMillis(); |
| 543 | + if (millisLeft < 0) { |
| 544 | + marker.remove(); |
| 545 | + pokemonIterator.remove(); |
| 546 | + } else { |
| 547 | + marker.setSnippet(getExpirationBreakdown(millisLeft)); |
| 548 | + if (marker.isInfoWindowShown()) { |
| 549 | + marker.showInfoWindow(); |
| 550 | + } |
| 551 | + MarkerRefreshController.getInstance().notifyTimeToExpiry(millisLeft);} |
| 552 | + } |
| 553 | + MarkerRefreshController.getInstance().reset(); |
| 554 | + } |
| 555 | + } |
| 556 | + |
| 557 | + } |
| 558 | + |
| 559 | + |
530 | 560 | private void showMapNotInitializedError() {
|
531 | 561 | if(getView() != null){
|
532 | 562 | Snackbar.make(getView(), getString(R.string.toast_map_not_initialized), Snackbar.LENGTH_SHORT).show();
|
@@ -593,6 +623,19 @@ public void onEvent(GymsEvent event) {
|
593 | 623 | setGymsMarkers(event);
|
594 | 624 | }
|
595 | 625 |
|
| 626 | + /** |
| 627 | + * Called whenever a MarkerUpdateEvent is posted to the bus. Posted by {@link MarkerRefreshController} when |
| 628 | + * expired markers need to be removed. |
| 629 | + * |
| 630 | + * @param event |
| 631 | + */ |
| 632 | + |
| 633 | + @Subscribe(threadMode = ThreadMode.MAIN) |
| 634 | + public void onEvent(MarkerUpdateEvent event){ |
| 635 | + removeExpiredMarkers(); |
| 636 | + } |
| 637 | + |
| 638 | + |
596 | 639 | private void clearCatchedPokemonCircle() {
|
597 | 640 |
|
598 | 641 | //Check and eventually remove old marker
|
|
0 commit comments