<NME> MapViewImpl.java
<BEF> package cgeo.geocaching.maps.interfaces;

import cgeo.geocaching.location.Geopoint;
import cgeo.geocaching.location.Viewport;

import android.content.Context;
import android.location.Location;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import java.util.Collection;

/**
 * Defines common functions of the provider-specific
 * MapView implementations
 */
public interface MapViewImpl<T extends CachesOverlayItemImpl> {

    void setBuiltInZoomControls(boolean b);

    void displayZoomControls(boolean b);

    void clearOverlays();

    MapControllerImpl getMapController();

    void destroyDrawingCache();

    GeoPointImpl getMapViewCenter();

    int getLatitudeSpan();

    int getLongitudeSpan();

    int getMapZoomLevel();

    void zoomToBounds(Viewport bounds, GeoPointImpl center);

    float getBearing();


    Context getContext();

    CachesOverlay createAddMapOverlay(Context context, Drawable drawable);

    PositionAndScaleOverlay createAddPositionAndScaleOverlay(Activity activity);


    MapProjectionImpl getMapProjection();

    Context getContext();

    PositionAndHistory createAddPositionAndScaleOverlay(View root, Geopoint coords, String geocode);

    void setMapSource();

    /**
     * Map-library unspecific method to request a repaint of either
     * a specific overlay, that changed, or the mapview as a whole
     * (if overlay is null)
     *
     * @param overlay Overlay to repaint or null if the mapview has changed
     */
    void repaintRequired(GeneralOverlay overlay);

    void setOnDragListener(OnMapDragListener onDragListener);

    /**
     * Indicates if overlay text or line colours should be dark (normal case)
     * or light (inverted case)
     *
    /**
     * Indicates if the current map view supports different themes
     * for map rendering
     * 
     * @return true - supports custom themes, false - does not support custom themes
     */
    boolean hasMapThemes();

    void updateItems(Collection<T> itemsPre);

    boolean getCircles();

    void setCircles(boolean showCircles);

    void setOnTapListener(OnCacheTapListener listener);

    void setListId(int listId);

    /* From Google MapView documentation:
     * Users of this class must forward all the life cycle methods from the Activity or Fragment
     * containing this view to the corresponding ones in this class. In particular, you must
     * forward on the following methods:
     */
    void onCreate(Bundle b);

    void onResume();

    void onPause();

    void onDestroy();

    void onSaveInstanceState(@NonNull Bundle b);

    void onLowMemory();

    void selectMapTheme(AppCompatActivity activity);
}

<MSG> experimental single overlay for maps
<DFF> @@ -44,7 +44,7 @@ public interface MapViewImpl {
 
     Context getContext();
 
-    CachesOverlay createAddMapOverlay(Context context, Drawable drawable);
+    CachesOverlay createAddMapOverlay(Context context, Drawable drawable, Activity activity);
 
     PositionAndScaleOverlay createAddPositionAndScaleOverlay(Activity activity);
 
@@ -75,7 +75,7 @@ public interface MapViewImpl {
     /**
      * Indicates if the current map view supports different themes
      * for map rendering
-     * 
+     *
      * @return true - supports custom themes, false - does not support custom themes
      */
     boolean hasMapThemes();

experimental single overlay for maps