From 2cb9414e04b3c8ec05c46579fa324597542c6531 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 16 Apr 2018 11:06:31 +0200 Subject: [android] - add example of MapView removal in custom container --- .../src/main/AndroidManifest.xml | 297 +++++++++++---------- .../activity/maplayout/TabViewActivity.java | 37 +++ .../mapbox/mapboxsdk/testapp/view/EmptyView.java | 11 + .../mapboxsdk/testapp/view/MapViewWrapper.java | 51 ++++ .../src/main/res/layout/activity_map_tab.xml | 22 ++ .../src/main/res/values/actions.xml | 1 + .../src/main/res/values/descriptions.xml | 1 + .../src/main/res/values/titles.xml | 1 + 8 files changed, 278 insertions(+), 143 deletions(-) create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/TabViewActivity.java create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/EmptyView.java create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewWrapper.java create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_tab.xml diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 442635f909..fc3759b21c 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + package="com.mapbox.mapboxsdk.testapp"> - + - + - + + android:value="@string/category_infowindow"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_infowindow"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_infowindow"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_fragment"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_fragment"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_fragment"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_custom_layer"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_camera"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_basic"/> + android:value="@string/category_offline"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_offline"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_offline"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_imagegenerator"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_imagegenerator"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_imagegenerator"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_imagegenerator"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_fragment"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_basic"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_imagegenerator"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_features"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_features"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_features"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_features"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_features"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_annotation"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> @@ -672,10 +672,10 @@ android:label="@string/activity_url_transform"> + android:value="@string/category_storage"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_maplayout"/> @@ -693,7 +693,7 @@ android:label="@string/activity_textureview_debug"> + android:value="@string/category_textureview"/> + android:value="@string/category_textureview"/> + android:value="@string/category_textureview"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_textureview"/> + android:value="@string/category_maplayout"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_style"/> + android:value=".activity.FeatureOverviewActivity"/> + android:description="@string/description_gesture_detector" + android:label="@string/activity_gesture_detector"> + android:value="@string/category_camera"/> + android:value="com.mapbox.mapboxsdk.testapp.activity.FeatureOverviewActivity"/> + + + + + android:screenOrientation="portrait"/> + android:screenOrientation="portrait"/> + android:screenOrientation="portrait"/> + android:screenOrientation="portrait"/> + android:value="api-events-staging.tilestream.net"/> + android:value="pk.eyJ1IjoiYmxzdGFnaW5nIiwiYSI6ImNpdDF3OHpoaTAwMDcyeXA5Y3Z0Nmk2dzEifQ.0IfB7v5Qbm2MGVYt8Kb8fg"/> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/TabViewActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/TabViewActivity.java new file mode 100644 index 0000000000..13af82ce83 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/TabViewActivity.java @@ -0,0 +1,37 @@ +package com.mapbox.mapboxsdk.testapp.activity.maplayout; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.ViewGroup; + +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.view.EmptyView; +import com.mapbox.mapboxsdk.testapp.view.MapViewWrapper; + +public class TabViewActivity extends AppCompatActivity { + + private boolean empty = true; + private MapViewWrapper mapViewWrapper; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_tab); + + ViewGroup viewContainer = (ViewGroup) findViewById(R.id.container); + findViewById(R.id.button).setOnClickListener(v -> { + if (mapViewWrapper != null) { + mapViewWrapper.beforeRemoveCleanup(); + mapViewWrapper = null; + } + viewContainer.removeAllViews(); + + if (empty) { + viewContainer.addView(mapViewWrapper = new MapViewWrapper(TabViewActivity.this)); + } else { + viewContainer.addView(new EmptyView(this)); + } + empty = !empty; + }); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/EmptyView.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/EmptyView.java new file mode 100644 index 0000000000..086117833d --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/EmptyView.java @@ -0,0 +1,11 @@ +package com.mapbox.mapboxsdk.testapp.view; + +import android.content.Context; +import android.view.View; + +public class EmptyView extends View { + + public EmptyView(Context context) { + super(context); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewWrapper.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewWrapper.java new file mode 100644 index 0000000000..3bf2996eb3 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewWrapper.java @@ -0,0 +1,51 @@ +package com.mapbox.mapboxsdk.testapp.view; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.widget.FrameLayout; + +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; + +import timber.log.Timber; + +public class MapViewWrapper extends FrameLayout implements OnMapReadyCallback { + + private MapView mapView; + + public MapViewWrapper(@NonNull Context context) { + super(context); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mapView = new MapView(getContext()); + addView(mapView); + + mapView.onCreate(null); + mapView.getMapAsync(mapboxMap -> { + + }); + mapView.onStart(); + mapView.onResume(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + removeView(mapView); + } + + public void beforeRemoveCleanup(){ + mapView.onPause(); + mapView.onStop(); + mapView.onDestroy(); + } + + @Override + public void onMapReady(MapboxMap mapboxMap) { + Timber.e("onMapReady"); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_tab.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_tab.xml new file mode 100644 index 0000000000..11dbe9cee4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_tab.xml @@ -0,0 +1,22 @@ + + + + + +