From a699690c1689222f518b5d7adc0dfd059884ac49 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 1 Feb 2016 16:45:41 +0100 Subject: [android] #3759 - Add SupportMapFragment, test app integration, cleanup old fragment implementation --- .../mapboxsdk/constants/MapboxConstants.java | 5 + .../com/mapbox/mapboxsdk/maps/MapFragment.java | 22 +---- .../mapbox/mapboxsdk/maps/SupportMapFragment.java | 104 +++++++++++++++++++++ .../src/main/AndroidManifest.xml | 3 + .../com/mapbox/mapboxsdk/testapp/MainActivity.java | 9 +- .../mapboxsdk/testapp/MapFragmentActivity.java | 8 +- .../testapp/SupportMapFragmentActivity.java | 69 ++++++++++++++ .../src/main/res/menu/menu_drawer.xml | 6 ++ .../src/main/res/values/strings.xml | 2 + 9 files changed, 201 insertions(+), 27 deletions(-) create mode 100644 platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SupportMapFragmentActivity.java (limited to 'platform') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java index 153a7d63c2..e9b654b627 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java @@ -52,6 +52,11 @@ public class MapboxConstants { */ public static final double MINIMUM_DIRECTION = 0; + /** + * Fragment Argument Key for MapboxMapOptions + */ + public static final String FRAG_ARG_MAPBOXMAPOPTIONS = "MapboxMapOptions"; + // Save instance state keys public static final String STATE_CAMERA_POSITION = "cameraPosition"; public static final String STATE_ZOOM_ENABLED = "zoomEnabled"; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java index 0802245f43..51834adb51 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java @@ -1,16 +1,15 @@ package com.mapbox.mapboxsdk.maps; +import android.app.Fragment; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.mapbox.mapboxsdk.R; +import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.utils.ApiAccess; -import com.mapbox.mapboxsdk.maps.MapView; /** * Fragment wrapper around a {@link MapView}. @@ -28,21 +27,6 @@ import com.mapbox.mapboxsdk.maps.MapView; */ public class MapFragment extends Fragment { - // - // Static members - // - - // Tag used for logging - private static final String TAG = "MapFragment"; - - // Argument used for configuration - private static final String ARGS_MAPBOXMAP_OPTIONS = "MapboxMapOptions"; - - // - // Instance members - // - - // The map private MapView mMap; private OnMapReadyCallback mMapReadyCallback; @@ -53,7 +37,7 @@ public class MapFragment extends Fragment { public static MapFragment newInstance(MapboxMapOptions mapboxMapOptions) { final MapFragment mapFragment = new MapFragment(); Bundle bundle = new Bundle(); - bundle.putParcelable(ARGS_MAPBOXMAP_OPTIONS, mapboxMapOptions); + bundle.putParcelable(MapboxConstants.FRAG_ARG_MAPBOXMAPOPTIONS, mapboxMapOptions); mapFragment.setArguments(bundle); return mapFragment; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java new file mode 100644 index 0000000000..2b268777a0 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java @@ -0,0 +1,104 @@ +package com.mapbox.mapboxsdk.maps; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.mapbox.mapboxsdk.R; +import com.mapbox.mapboxsdk.constants.MapboxConstants; +import com.mapbox.mapboxsdk.utils.ApiAccess; + +/** + * Fragment wrapper around a {@link MapView}. + *

+ * A Map component in an app. This fragment is the simplest way to place a map in an application. + * It's a wrapper around a view of a map to automatically handle the necessary life cycle needs. + * Being a fragment, this component can be added to an activity's layout or can dynamically be added + * using a FragmentManager. + *

+ *

+ * To get a reference to the MapView, use {@link #getMapAsync(OnMapReadyCallback)}} + *

+ * + * @see #getMapAsync(OnMapReadyCallback) + */ +public class SupportMapFragment extends Fragment { + + private MapView mMap; + private OnMapReadyCallback mMapReadyCallback; + + public static SupportMapFragment newInstance(){ + return new SupportMapFragment(); + } + + public static SupportMapFragment newInstance(MapboxMapOptions mapboxMapOptions) { + final SupportMapFragment mapFragment = new SupportMapFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable(MapboxConstants.FRAG_ARG_MAPBOXMAPOPTIONS, mapboxMapOptions); + mapFragment.setArguments(bundle); + return mapFragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + mMap = (MapView) inflater.inflate(R.layout.fragment_mapview, container, false); + mMap.setAccessToken(ApiAccess.getToken(inflater.getContext())); + mMap.onCreate(savedInstanceState); + return mMap; + } + + @Override + public void onStart() { + super.onStart(); + mMap.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + mMap.onResume(); + if(mMapReadyCallback!=null){ + mMapReadyCallback.onMapReady(mMap.getMapboxMap()); + } + } + + @Override + public void onPause() { + super.onPause(); + mMap.onPause(); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + mMap.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + + @Override + public void onStop() { + super.onStop(); + mMap.onStop(); + } + + @Override + public void onLowMemory() { + mMap.onLowMemory(); + super.onLowMemory(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mMap.onDestroy(); + mMap = null; + } + + @NonNull + public void getMapAsync(@NonNull OnMapReadyCallback onMapReadyCallback){ + mMapReadyCallback = onMapReadyCallback; + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 7bb1bf438c..26c271784b 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -50,6 +50,9 @@ + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java index 7c17b5f55e..38619d8a00 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java @@ -38,6 +38,7 @@ import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.layers.CustomLayer; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.maps.SupportMapFragment; import com.mapbox.mapboxsdk.maps.UiSettings; import com.mapbox.mapboxsdk.testapp.layers.ExampleCustomLayer; import com.mapbox.mapboxsdk.testapp.utils.GeoParseUtil; @@ -225,10 +226,6 @@ public class MainActivity extends AppCompatActivity { }); } - /** - * Dispatch onStart() to all fragments. Ensure any created loaders are - * now started. - */ @Override protected void onStart() { super.onStart(); @@ -373,6 +370,10 @@ public class MainActivity extends AppCompatActivity { startActivity(new Intent(getApplicationContext(), MapFragmentActivity.class)); return true; + case R.id.action_support_map_fragment: + startActivity(new Intent(getApplicationContext(), SupportMapFragmentActivity.class)); + return true; + case R.id.action_press_for_marker: startActivity(new Intent(getApplicationContext(), PressForMarkerActivity.class)); return true; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapFragmentActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapFragmentActivity.java index 65c1dba5e4..4615d35e33 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapFragmentActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapFragmentActivity.java @@ -1,8 +1,8 @@ package com.mapbox.mapboxsdk.testapp; +import android.app.FragmentTransaction; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.v4.app.FragmentTransaction; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; @@ -34,11 +34,11 @@ public class MapFragmentActivity extends AppCompatActivity { MapFragment mapFragment; if (savedInstanceState == null) { - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.add(R.id.fragment_container, mapFragment = new MapFragment(), "com.mapbox.map"); + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + transaction.add(R.id.fragment_container, mapFragment = MapFragment.newInstance(), "com.mapbox.map"); transaction.commit(); } else { - mapFragment = (MapFragment) getSupportFragmentManager().findFragmentByTag("com.mapbox.map"); + mapFragment = (MapFragment) getFragmentManager().findFragmentByTag("com.mapbox.map"); } mapFragment.getMapAsync(new OnMapReadyCallback() { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SupportMapFragmentActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SupportMapFragmentActivity.java new file mode 100644 index 0000000000..bf690b7943 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SupportMapFragmentActivity.java @@ -0,0 +1,69 @@ +package com.mapbox.mapboxsdk.testapp; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.MenuItem; + +import com.mapbox.mapboxsdk.camera.CameraPosition; +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.constants.Style; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.maps.SupportMapFragment; + +public class SupportMapFragmentActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_fragment); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(true); + } + + SupportMapFragment mapFragment; + if (savedInstanceState == null) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.add(R.id.fragment_container, mapFragment = SupportMapFragment.newInstance(), "com.mapbox.map"); + transaction.commit(); + } else { + mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentByTag("com.mapbox.map"); + } + + mapFragment.getMapAsync(new OnMapReadyCallback() { + @Override + public void onMapReady(@NonNull MapboxMap mapboxMap) { + mapboxMap.setStyleUrl(Style.SATELLITE_STREETS); + mapboxMap.moveCamera(CameraUpdateFactory.newCameraPosition( + new CameraPosition.Builder() + .target(new LatLng(48.861431, 2.334166)) + .zoom(10) + .bearing(0) + .tilt(0) + .build())); + } + }); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml index 906aa67ddd..67857c9517 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_drawer.xml @@ -95,6 +95,12 @@ android:icon="@drawable/ic_now_widgets_24dp" android:title="@string/action_map_fragment" /> + + MapboxMap Map Tilt InfoWindow Adapter + Support Map Fragment Activity Map Fragment Activity Press For Marker Activity Add Bulk Markers Activity @@ -37,6 +38,7 @@ InfoWindow Adapter Tilt MapFragment + SupportMapFragment Press For Marker Manual Zoom Min/Max Zoom -- cgit v1.2.1