Remove deprecated location APIs (#11351)

This commit is contained in:
Łukasz Paczos
2018-03-02 11:01:10 +01:00
committed by GitHub
parent 87f88f37c4
commit 899211d816
49 changed files with 30 additions and 4679 deletions

View File

@@ -161,16 +161,6 @@ public class MapboxMapTest extends BaseActivityTest {
}));
}
//
// TrackingSettings
//
@Test
public void testTrackingSettings() {
validateTestSetup();
assertNotNull("TrackingSettings should not be null", mapboxMap.getTrackingSettings());
}
//
// InfoWindow
//
@@ -203,30 +193,6 @@ public class MapboxMapTest extends BaseActivityTest {
}));
}
//
// Location
//
@Test
@Ignore /* disabled due to enabling permissions during test #7177 */
public void testMyLocationEnabled() {
validateTestSetup();
onView(withId(R.id.mapView)).perform(new MapboxMapAction((uiController, view) -> {
mapboxMap.setMyLocationEnabled(true);
assertTrue("MyLocationEnabled should be true", mapboxMap.isMyLocationEnabled());
}));
}
@Test
@Ignore /* can't create handler inside thread that not called Looper.prepare() */
public void testMyLocationDisabled() {
validateTestSetup();
onView(withId(R.id.mapView)).perform(new MapboxMapAction((uiController, view) -> {
mapboxMap.setMyLocationEnabled(false);
assertFalse("MyLocationEnabled should be false", mapboxMap.isMyLocationEnabled());
}));
}
//
// setters/getters interfaces
//

View File

@@ -1,229 +0,0 @@
package com.mapbox.mapboxsdk.testapp.maps.widgets;
import android.annotation.SuppressLint;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.test.espresso.UiController;
import android.support.test.espresso.ViewAction;
import android.view.View;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.MyBearingTracking;
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationView;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest;
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Ignore;
import org.junit.Test;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.Matchers.not;
/**
* Experimental MyLocationView tests,
* requires application to be granted with runtime location permissions.
* <p>
* Tests for enabling and disabling the {@link MyLocationView}.
* Tests for enabling tracking modes and if the correct default images are shown when toggling
* {@link com.mapbox.mapboxsdk.maps.TrackingSettings#setMyLocationTrackingMode(int)} &
* {@link com.mapbox.mapboxsdk.maps.TrackingSettings#setMyBearingTrackingMode(int)}.
* </p>
*/
public class MyLocationViewTest extends BaseActivityTest {
@Override
protected Class getActivityClass() {
return EspressoTestActivity.class;
}
@Test
@Ignore // requires runtime permissions, disabled for CI
public void testEnabled() {
validateTestSetup();
onView(withId(R.id.userLocationView)).check(matches(not(isDisplayed())));
onView(withId(R.id.mapView)).perform(new ToggleLocationAction(mapboxMap, true));
onView(withId(R.id.userLocationView)).check(matches(isDisplayed()));
onView(withId(R.id.mapView)).perform(new ToggleLocationAction(mapboxMap, false));
onView(withId(R.id.userLocationView)).check(matches(not(isDisplayed())));
}
@Test
@Ignore
// requires runtime permissions, disabled for CI + issue with android.support.test.espresso.AppNotIdleException:
// Looped for 5049 iterations over 60 SECONDS.
public void testTracking() {
validateTestSetup();
onView(withId(R.id.userLocationView)).check(matches(not(isDisplayed())));
onView(withId(R.id.mapView)).perform(new EnableLocationTrackingAction(mapboxMap));
onView(withId(R.id.userLocationView)).check(matches(isDisplayed()));
onView(withId(R.id.userLocationView)).check(matches(new DrawableMatcher(mapboxMap,
R.drawable.mapbox_mylocation_icon_default, false)));
onView(withId(R.id.mapView)).perform(new EnableCompassBearingTrackingAction(mapboxMap));
onView(withId(R.id.userLocationView)).check(matches(new DrawableMatcher(mapboxMap,
R.drawable.mapbox_mylocation_icon_bearing, true)));
}
private class ToggleLocationAction implements ViewAction {
private MapboxMap mapboxMap;
private boolean isEnabled;
ToggleLocationAction(MapboxMap map, boolean enable) {
mapboxMap = map;
isEnabled = enable;
}
@Override
public Matcher<View> getConstraints() {
return isDisplayed();
}
@Override
public String getDescription() {
return getClass().getSimpleName();
}
@SuppressLint("MissingPermission")
@Override
public void perform(UiController uiController, View view) {
if (isEnabled) {
// move camera above user location
mapboxMap.moveCamera(
CameraUpdateFactory.newCameraPosition(
new CameraPosition.Builder()
.target(new LatLng(Mapbox.getLocationEngine().getLastLocation()))
.build()
)
);
}
// show loction on screen
mapboxMap.setMyLocationEnabled(isEnabled);
}
}
private class EnableLocationTrackingAction implements ViewAction {
private MapboxMap mapboxMap;
EnableLocationTrackingAction(MapboxMap map) {
mapboxMap = map;
}
@Override
public Matcher<View> getConstraints() {
return isDisplayed();
}
@Override
public String getDescription() {
return getClass().getSimpleName();
}
@Override
public void perform(UiController uiController, View view) {
mapboxMap.getTrackingSettings().setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
}
}
private class EnableCompassBearingTrackingAction implements ViewAction {
private MapboxMap mapboxMap;
EnableCompassBearingTrackingAction(MapboxMap map) {
mapboxMap = map;
}
@Override
public Matcher<View> getConstraints() {
return isDisplayed();
}
@Override
public String getDescription() {
return getClass().getSimpleName();
}
@Override
public void perform(UiController uiController, View view) {
mapboxMap.getTrackingSettings().setMyBearingTrackingMode(MyBearingTracking.COMPASS);
// wait for next compass update cycle
uiController.loopMainThreadForAtLeast(500);
}
}
private class DrawableMatcher extends TypeSafeMatcher<View> {
private MapboxMap mapboxMap;
private boolean isBearingDrawable;
private final int expectedId;
DrawableMatcher(MapboxMap mapboxMap, int expectedId, boolean isBearingDrawable) {
super(MyLocationView.class);
this.mapboxMap = mapboxMap;
this.expectedId = expectedId;
this.isBearingDrawable = isBearingDrawable;
}
@Override
protected boolean matchesSafely(View target) {
Drawable currentDrawable = isBearingDrawable
? mapboxMap.getMyLocationViewSettings().getForegroundBearingDrawable() :
mapboxMap.getMyLocationViewSettings().getForegroundDrawable();
Resources resources = target.getContext().getResources();
Drawable expectedDrawable = resources.getDrawable(expectedId);
return areDrawablesIdentical(currentDrawable, expectedDrawable);
}
@Override
public void describeTo(Description description) {
description.appendText("trying to match MyLocationView drawable to " + expectedId);
}
boolean areDrawablesIdentical(Drawable drawableA, Drawable drawableB) {
Drawable.ConstantState stateA = drawableA.getConstantState();
Drawable.ConstantState stateB = drawableB.getConstantState();
return (stateA != null && stateB != null && stateA.equals(stateB))
|| getBitmap(drawableA).sameAs(getBitmap(drawableB));
}
Bitmap getBitmap(Drawable drawable) {
Bitmap result;
if (drawable instanceof BitmapDrawable) {
result = ((BitmapDrawable) drawable).getBitmap();
} else {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
// Some drawables have no intrinsic width - e.g. solid colours.
if (width <= 0) {
width = 1;
}
if (height <= 0) {
height = 1;
}
result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
}
return result;
}
}
}

View File

@@ -2,7 +2,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mapbox.mapboxsdk.testapp">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
@@ -212,62 +211,6 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.FeatureOverviewActivity"/>
</activity>
<activity
android:name=".activity.userlocation.MyLocationTrackingModeActivity"
android:description="@string/description_user_location_tracking"
android:label="@string/activity_user_tracking_mode"
android:theme="@style/NoActionBar">
<meta-data
android:name="@string/category"
android:value="@string/category_userlocation"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.FeatureOverviewActivity"/>
</activity>
<activity
android:name=".activity.userlocation.MyLocationDrawableActivity"
android:description="@string/description_user_location_customization"
android:label="@string/activity_user_tracking_customization">
<meta-data
android:name="@string/category"
android:value="@string/category_userlocation"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.FeatureOverviewActivity"/>
</activity>
<activity
android:name=".activity.userlocation.MyLocationTintActivity"
android:description="@string/description_user_location_dot_color"
android:label="@string/activity_user_dot_color">
<meta-data
android:name="@string/category"
android:value="@string/category_userlocation"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.FeatureOverviewActivity"/>
</activity>
<activity
android:name=".activity.userlocation.MyLocationToggleActivity"
android:description="@string/description_user_location_toggle"
android:label="@string/activity_user_location_toggle">
<meta-data
android:name="@string/category"
android:value="@string/category_userlocation"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.FeatureOverviewActivity"/>
</activity>
<activity
android:name=".activity.userlocation.CustomLocationEngineActivity"
android:description="@string/description_custom_location_engine"
android:label="@string/activity_custom_location_engine">
<meta-data
android:name="@string/category"
android:value="@string/category_userlocation"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.FeatureOverviewActivity"/>
</activity>
<activity
android:name=".activity.annotation.PolygonActivity"
android:description="@string/description_polygon"

View File

@@ -7,23 +7,17 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.adapter.FeatureAdapter;
import com.mapbox.mapboxsdk.testapp.adapter.FeatureSectionAdapter;
import com.mapbox.mapboxsdk.testapp.model.activity.Feature;
import com.mapbox.mapboxsdk.testapp.utils.ItemClickSupport;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import java.util.ArrayList;
import java.util.Collections;
@@ -39,23 +33,19 @@ import timber.log.Timber;
* It uses tags as category and description to order the different entries.
* </p>
*/
public class FeatureOverviewActivity extends AppCompatActivity implements PermissionsListener {
public class FeatureOverviewActivity extends AppCompatActivity {
private static final String KEY_STATE_FEATURES = "featureList";
private PermissionsManager permissionsManager;
private RecyclerView recyclerView;
private FeatureSectionAdapter sectionAdapter;
private List<Feature> features;
private int locationActivityInList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_feature_overview);
permissionsManager = new PermissionsManager(this);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener());
@@ -65,11 +55,6 @@ public class FeatureOverviewActivity extends AppCompatActivity implements Permis
if (!sectionAdapter.isSectionHeaderPosition(position)) {
int itemPosition = sectionAdapter.getConvertedPosition(position);
Feature feature = features.get(itemPosition);
if (feature.isRequiresLocationPermission()) {
if (requestLocationPermission(itemPosition)) {
return;
}
}
startFeature(feature);
}
});
@@ -118,45 +103,6 @@ public class FeatureOverviewActivity extends AppCompatActivity implements Permis
startActivity(intent);
}
private boolean requestLocationPermission(final int positionInList) {
if (isRuntimePermissionsRequired()) {
locationActivityInList = positionInList;
permissionsManager.requestLocationPermissions(this);
return true;
}
return false;
}
@Override
public void onExplanationNeeded(List<String> list) {
Snackbar.make(
findViewById(android.R.id.content),
TextUtils.join("", list.toArray()),
Snackbar.LENGTH_SHORT).show();
}
@Override
public void onPermissionResult(boolean isPermissionGranted) {
if (isPermissionGranted) {
startFeature(features.get(locationActivityInList));
} else {
Snackbar.make(
findViewById(android.R.id.content),
"Can't open without accepting the location permission.",
Snackbar.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private boolean isRuntimePermissionsRequired() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@@ -178,8 +124,7 @@ public class FeatureOverviewActivity extends AppCompatActivity implements Permis
String label = getString(info.labelRes);
String description = resolveString(info.descriptionRes);
String category = resolveMetaData(info.metaData, metaDataKey);
boolean requiresLocationPermission = requiresLocationPermission(label, category);
features.add(new Feature(info.name, label, description, category, requiresLocationPermission));
features.add(new Feature(info.name, label, description, category));
}
}
@@ -213,24 +158,6 @@ public class FeatureOverviewActivity extends AppCompatActivity implements Permis
}
}
private boolean requiresLocationPermission(String name, String category) {
final Resources resources = getResources();
List<String> requiresPermissionCategories = new ArrayList<String>() {
{
add(resources.getString(R.string.category_userlocation));
}
};
List<String> requiresPermissionActivities = new ArrayList<String>() {
{
add(resources.getString(R.string.activity_double_map));
}
};
return requiresPermissionCategories.contains(category) || requiresPermissionActivities.contains(name);
}
@Override
protected void onPostExecute(List<Feature> features) {
super.onPostExecute(features);

View File

@@ -1,7 +1,6 @@
package com.mapbox.mapboxsdk.testapp.activity.maplayout;
import android.content.Context;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -151,10 +150,7 @@ public class BottomSheetActivity extends AppCompatActivity {
@Override
public void onMapReady(MapboxMap mapboxMap) {
Location location = mapboxMap.getMyLocation();
if (location != null) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 15));
}
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.760545, -122.436055), 15));
}
@Override
@@ -207,7 +203,6 @@ public class BottomSheetActivity extends AppCompatActivity {
public static BottomSheetFragment newInstance() {
BottomSheetFragment mapFragment = new BottomSheetFragment();
MapboxMapOptions mapboxMapOptions = new MapboxMapOptions();
mapboxMapOptions.locationEnabled(true);
mapboxMapOptions.renderSurfaceOnTop(true);
mapboxMapOptions.styleUrl(Style.LIGHT);
mapFragment.setArguments(MapFragmentUtils.createFragmentArgs(mapboxMapOptions));
@@ -230,10 +225,7 @@ public class BottomSheetActivity extends AppCompatActivity {
@Override
public void onMapReady(MapboxMap mapboxMap) {
Location location = mapboxMap.getMyLocation();
if (location != null) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 15));
}
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.760545, -122.436055), 15));
}
@Override

View File

@@ -11,11 +11,9 @@ import android.view.View;
import android.view.ViewGroup;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.TrackingSettings;
import com.mapbox.mapboxsdk.maps.UiSettings;
import com.mapbox.mapboxsdk.testapp.R;
@@ -50,14 +48,6 @@ public class DoubleMapActivity extends AppCompatActivity {
mapboxMap = map;
mapboxMap.setStyleUrl(Style.DARK);
mapboxMap.moveCamera(CameraUpdateFactory.zoomTo(18));
try {
mapboxMap.setMyLocationEnabled(true);
TrackingSettings settings = mapboxMap.getTrackingSettings();
settings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
} catch (SecurityException securityException) {
// permission is handled in MainActivity
finish();
}
}
/**
@@ -106,15 +96,6 @@ public class DoubleMapActivity extends AppCompatActivity {
uiSettings.setAttributionEnabled(false);
uiSettings.setLogoEnabled(false);
try {
mapboxMap.setMyLocationEnabled(true);
TrackingSettings settings = mapboxMap.getTrackingSettings();
settings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
} catch (SecurityException securityException) {
// permission is handled in MainActivity
getActivity().finish();
}
mapboxMap.setOnMapClickListener(point -> {
// test if we can open 2 activities after each other
startActivity(new Intent(mapViewMini.getContext(), DoubleMapActivity.class));

View File

@@ -8,18 +8,13 @@ import android.view.MenuItem;
import com.mapbox.mapboxsdk.annotations.MarkerOptions;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.TrackingSettings;
import com.mapbox.mapboxsdk.testapp.R;
/**
* Test activity showcasing using the map padding API.
* <p>
* This activity tests for correct padding around a marker (Bangalore) and correct padding around MyLocationView.
* </p>
*/
public class MapPaddingActivity extends AppCompatActivity {
@@ -96,24 +91,7 @@ public class MapPaddingActivity extends AppCompatActivity {
return true;
}
private void toggleGps(boolean enable) {
try {
// Enable user location
mapboxMap.setMyLocationEnabled(enable);
TrackingSettings trackingSettings = mapboxMap.getTrackingSettings();
trackingSettings.setDismissLocationTrackingOnGesture(false);
trackingSettings.setMyLocationTrackingMode(
enable ? MyLocationTracking.TRACKING_FOLLOW : MyLocationTracking.TRACKING_NONE);
} catch (SecurityException securityException) {
// permission not granted is handled in FeatureOverviewActivity
finish();
}
}
private void moveToBangalore() {
toggleGps(false);
LatLng bangalore = new LatLng(12.9810816, 77.6368034);
CameraPosition cameraPosition = new CameraPosition.Builder()
.zoom(16)
@@ -129,11 +107,6 @@ public class MapPaddingActivity extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_user_tracking:
if (mapboxMap != null) {
toggleGps(true);
}
return true;
case R.id.action_bangalore:
if (mapboxMap != null) {

View File

@@ -1,66 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import java.util.List;
/**
* Base class for location aware activities.
*/
public abstract class BaseLocationActivity extends AppCompatActivity implements PermissionsListener {
private PermissionsManager permissionsManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
permissionsManager = new PermissionsManager(this);
}
@UiThread
protected final void toggleGps(boolean enableGps) {
if (enableGps) {
if (!isRuntimePermissionsRequired()) {
permissionsManager.requestLocationPermissions(this);
} else {
enableLocation(true);
}
} else {
enableLocation(false);
}
}
@Override
public void onExplanationNeeded(List<String> list) {
Snackbar.make(
findViewById(android.R.id.content),
TextUtils.join("", list.toArray()),
Snackbar.LENGTH_SHORT).show();
}
@Override
public void onPermissionResult(boolean isPermissionAccepted) {
enableLocation(isPermissionAccepted);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private boolean isRuntimePermissionsRequired() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
protected abstract void enableLocation(boolean enabled);
}

View File

@@ -1,117 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.view.Menu;
import android.view.MenuItem;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.testapp.R;
/**
* Test activity showcasing using a custom location engine.
*/
public class CustomLocationEngineActivity extends BaseLocationActivity {
private MapView mapView;
private MapboxMap mapboxMap;
private FloatingActionButton locationToggleFab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_location_engine);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(map -> {
mapboxMap = map;
mapboxMap.setLocationSource(MockLocationEngine.getInstance());
});
locationToggleFab = (FloatingActionButton) findViewById(R.id.fabLocationToggle);
locationToggleFab.setOnClickListener(view -> {
if (mapboxMap != null) {
enableLocation(!mapboxMap.isMyLocationEnabled());
}
});
}
@Override
protected void enableLocation(boolean enabled) {
mapboxMap.setMyLocationEnabled(enabled);
if (enabled) {
locationToggleFab.setImageResource(R.drawable.ic_location_disabled);
} else {
locationToggleFab.setImageResource(R.drawable.ic_my_location);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_location_engine, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mapboxMap != null) {
int itemId = item.getItemId();
if (itemId == R.id.action_id_location_source_lost) {
mapboxMap.setLocationSource(Mapbox.getLocationEngine());
return true;
} else if (itemId == R.id.action_id_location_source_mock) {
mapboxMap.setLocationSource(MockLocationEngine.getInstance());
return true;
} else if (itemId == R.id.action_id_location_source_null) {
mapboxMap.setLocationSource(null);
return true;
}
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
}

View File

@@ -1,130 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.animation.AnimatorListenerAdapter;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.location.Location;
import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.android.core.location.LocationEngineListener;
import timber.log.Timber;
/**
* Sample LocationEngine that provides mocked LOCATIONS simulating GPS updates
*/
public class MockLocationEngine extends LocationEngine {
private static MockLocationEngine INSTANCE;
private final LocationAnimator locationAnimator;
private boolean running;
private static int counter;
MockLocationEngine(Location start, Location end) {
locationAnimator = new LocationAnimator(start, end, animation -> {
for (LocationEngineListener listener : locationListeners) {
listener.onLocationChanged((Location) animation.getAnimatedValue());
}
});
}
public static synchronized MockLocationEngine getInstance() {
if (INSTANCE == null) {
INSTANCE = new MockLocationEngine(
MockLocationEngine.createLocation(40.416913, -3.703861),
MockLocationEngine.createLocation(39.461643, -0.368041)
);
}
return INSTANCE;
}
public static Location createLocation(double latitude, double longitude) {
Location location = new Location(MockLocationEngine.class.getSimpleName());
location.setLatitude(latitude);
location.setLongitude(longitude);
return location;
}
@Override
public void activate() {
// "Connection" is immediate here
for (LocationEngineListener listener : locationListeners) {
listener.onConnected();
}
}
@Override
public void deactivate() {
}
@Override
public boolean isConnected() {
return true; // Always connected
}
@Override
public Location getLastLocation() {
return null;
}
@Override
public void requestLocationUpdates() {
if (!running) {
locationAnimator.start();
running = true;
}
}
@Override
public void removeLocationUpdates() {
if (running) {
locationAnimator.stop();
running = false;
Timber.e("LOC %s", counter);
}
}
@Override
public Type obtainType() {
return Type.MOCK;
}
private static class LocationAnimator extends AnimatorListenerAdapter {
private static final long DURATION_ANIMATION = 10000;
private final ValueAnimator locationAnimator;
private long animationTime;
LocationAnimator(Location start, Location end, ValueAnimator.AnimatorUpdateListener listener) {
locationAnimator = ValueAnimator.ofObject(new LocationEvaluator(), start, end);
locationAnimator.setDuration(DURATION_ANIMATION);
locationAnimator.addUpdateListener(listener);
locationAnimator.addListener(this);
}
void start() {
locationAnimator.start();
locationAnimator.setCurrentPlayTime(animationTime);
}
void stop() {
animationTime = locationAnimator.getCurrentPlayTime();
locationAnimator.cancel();
}
private static class LocationEvaluator implements TypeEvaluator<Location> {
private Location location = new Location(MockLocationEngine.class.getSimpleName());
@Override
public Location evaluate(float fraction, Location startValue, Location endValue) {
counter++;
location.setLatitude(startValue.getLatitude()
+ ((endValue.getLatitude() - startValue.getLatitude()) * fraction));
location.setLongitude(startValue.getLongitude()
+ ((endValue.getLongitude() - startValue.getLongitude()) * fraction));
return location;
}
}
}
}

View File

@@ -1,114 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.graphics.Color;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.ViewGroup;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.MapboxMapOptions;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.android.core.location.LocationEngineListener;
/**
* Test activity showcasing how to change the MyLocationView drawable.
*/
public class MyLocationDrawableActivity extends BaseLocationActivity implements LocationEngineListener {
private MapView mapView;
private MapboxMap mapboxMap;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_location_customization);
findViewById(R.id.progress).setVisibility(View.GONE);
MapboxMapOptions mapboxMapOptions = new MapboxMapOptions();
mapboxMapOptions.styleUrl(Style.MAPBOX_STREETS);
mapboxMapOptions.myLocationForegroundDrawable(ContextCompat.getDrawable(this, R.drawable.ic_android));
mapboxMapOptions.myLocationBackgroundDrawable(ContextCompat.getDrawable(this, R.drawable.ic_android));
mapboxMapOptions.myLocationForegroundTintColor(Color.GREEN);
mapboxMapOptions.myLocationBackgroundTintColor(Color.YELLOW);
mapboxMapOptions.myLocationBackgroundPadding(new int[] {0, 0,
(int) getResources().getDimension(R.dimen.locationview_background_drawable_padding),
(int) getResources().getDimension(R.dimen.locationview_background_drawable_padding)});
mapboxMapOptions.myLocationAccuracyTint(Color.RED);
mapboxMapOptions.myLocationAccuracyAlpha(155);
mapView = new MapView(this, mapboxMapOptions);
mapView.setId(R.id.mapView);
ViewGroup parent = (ViewGroup) findViewById(android.R.id.content);
parent.addView(mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(map -> {
mapboxMap = map;
toggleGps(true);
});
}
@Override
protected void enableLocation(boolean enabled) {
mapboxMap.setMyLocationEnabled(enabled);
}
@Override
public void onConnected() {
// Nothing
}
@Override
public void onLocationChanged(Location location) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 14));
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
}

View File

@@ -1,181 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.app.Activity;
import android.graphics.Color;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.View;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.TrackingSettings;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.android.core.location.LocationEngineListener;
/**
* Test activity showcasing how to tint the MyLocationView.
*/
public class MyLocationTintActivity extends BaseLocationActivity implements LocationEngineListener {
private MapView mapView;
private MapboxMap mapboxMap;
private boolean firstRun;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_location_dot_color);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(map -> {
mapboxMap = map;
// enable location updates
toggleGps(true);
// add some padding
final MyLocationViewSettings myLocationViewSettings = mapboxMap.getMyLocationViewSettings();
myLocationViewSettings.setPadding(0, 500, 0, 0);
// enable tracking
TrackingSettings settings = mapboxMap.getTrackingSettings();
settings.setDismissLocationTrackingOnGesture(false);
settings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
// handle default button clicks
ViewUtils.attachClickListener(
MyLocationTintActivity.this,
R.id.default_user_dot_coloring_button,
view -> {
myLocationViewSettings.setAccuracyTintColor(ContextCompat.getColor(
MyLocationTintActivity.this, R.color.mapbox_blue));
myLocationViewSettings.setForegroundTintColor(ContextCompat.getColor(
MyLocationTintActivity.this, R.color.mapbox_blue));
myLocationViewSettings.setBackgroundTintColor(Color.WHITE);
});
// handle tint user dot button clicks
ViewUtils.attachClickListener(
MyLocationTintActivity.this,
R.id.tint_user_dot_button,
view -> {
myLocationViewSettings.setAccuracyTintColor(
ContextCompat.getColor(MyLocationTintActivity.this, R.color.mapboxGreen));
myLocationViewSettings.setForegroundTintColor(
ContextCompat.getColor(MyLocationTintActivity.this, R.color.mapboxGreen));
myLocationViewSettings.setBackgroundTintColor(Color.WHITE);
});
// handle tint accuracy ring button clicks
ViewUtils.attachClickListener(
MyLocationTintActivity.this,
R.id.user_accuracy_ring_tint_button,
view -> {
myLocationViewSettings.setAccuracyTintColor(
ContextCompat.getColor(MyLocationTintActivity.this, R.color.accent));
myLocationViewSettings.setForegroundTintColor(
ContextCompat.getColor(MyLocationTintActivity.this, R.color.mapbox_blue));
myLocationViewSettings.setBackgroundTintColor(Color.WHITE);
});
ViewUtils.attachClickListener(
MyLocationTintActivity.this,
R.id.user_dot_transparent_button,
view -> {
myLocationViewSettings.setForegroundTintColor(Color.TRANSPARENT);
myLocationViewSettings.setBackgroundTintColor(Color.TRANSPARENT);
}
);
});
}
@Override
public void onConnected() {
// Nothing
}
@Override
public void onLocationChanged(Location location) {
if (mapboxMap != null && firstRun) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 15));
firstRun = false;
}
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void enableLocation(boolean enabled) {
if (enabled) {
mapboxMap.setMyLocationEnabled(true);
if (mapboxMap.getMyLocation() != null) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(mapboxMap.getMyLocation().getLatitude(),
mapboxMap.getMyLocation().getLongitude()), 15));
}
} else {
mapboxMap.setMyLocationEnabled(false);
}
}
private static class ViewUtils {
public static void attachClickListener(
@NonNull Activity activity, @IdRes int buttonId, @Nullable View.OnClickListener clickListener) {
View view = activity.findViewById(buttonId);
if (view != null) {
view.setOnClickListener(clickListener);
}
}
}
}

View File

@@ -1,91 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.testapp.R;
import timber.log.Timber;
/**
* Test activity showcasing toggling the user location on the map.
*/
public class MyLocationToggleActivity extends BaseLocationActivity {
private MapView mapView;
private MapboxMap mapboxMap;
private FloatingActionButton locationToggleFab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_location_toggle);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(map -> mapboxMap = map);
locationToggleFab = (FloatingActionButton) findViewById(R.id.fabLocationToggle);
locationToggleFab.setOnClickListener(view -> {
if (mapboxMap != null) {
toggleGps(!mapboxMap.isMyLocationEnabled());
}
});
}
@Override
protected void enableLocation(boolean enabled) {
Timber.e("Enabling location: %s", enabled);
mapboxMap.setMyLocationEnabled(enabled);
if (enabled) {
locationToggleFab.setImageResource(R.drawable.ic_location_disabled);
} else {
locationToggleFab.setImageResource(R.drawable.ic_my_location);
}
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
}

View File

@@ -1,296 +0,0 @@
package com.mapbox.mapboxsdk.testapp.activity.userlocation;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.MyBearingTracking;
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.maps.TrackingSettings;
import com.mapbox.mapboxsdk.maps.UiSettings;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.android.core.location.LocationEngineListener;
import timber.log.Timber;
/**
* Test activity showcasing the different tracking modes the SDK exposes.
* <p>
* This includes MyLocationTracking/MyLocationBearingTracking and how the components can be configured to be dismissed
* using gesture configurations.
* </p>
*/
public class MyLocationTrackingModeActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener,
OnMapReadyCallback, LocationEngineListener {
public static final int TRACKING_NONE_INDEX = 0;
public static final int TRACKING_FOLLOW_INDEX = 1;
public static final int BEARING_NONE_INDEX = 0;
public static final int BEARING_GPS_INDEX = 1;
public static final int BEARING_COMPASS_INDEX = 2;
private MapView mapView;
private MapboxMap mapboxMap;
private Spinner locationSpinner;
private Spinner bearingSpinner;
private boolean firstRun = true;
private MenuItem dismissLocationTrackingOnGestureItem;
private MenuItem dismissBearingTrackingOnGestureItem;
private MenuItem enableRotateGesturesItem;
private MenuItem enableScrollGesturesItem;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_location_tracking);
setupToolbar();
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
public void onMapReady(MapboxMap mapboxMap) {
MyLocationTrackingModeActivity.this.mapboxMap = mapboxMap;
mapboxMap.setMyLocationEnabled(true);
Mapbox.getLocationEngine().addLocationEngineListener(this);
Mapbox.getLocationEngine().requestLocationUpdates();
}
@Override
public void onConnected() {
// Nothing
}
@Override
public void onLocationChanged(Location location) {
Timber.e("Location changed %s", location);
if (firstRun) {
setInitialLocation(location, 16);
}
}
private void setInitialLocation(Location location, double zoom) {
mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), zoom));
mapboxMap.setMyLocationEnabled(true);
setupSpinners(mapboxMap);
firstRun = false;
}
private void setupToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
locationSpinner = (Spinner) findViewById(R.id.spinner_location);
ArrayAdapter<CharSequence> locationTrackingAdapter = ArrayAdapter.createFromResource(
actionBar.getThemedContext(), R.array.user_tracking_mode, android.R.layout.simple_spinner_item);
locationTrackingAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
locationSpinner.setAdapter(locationTrackingAdapter);
bearingSpinner = (Spinner) findViewById(R.id.spinner_bearing);
ArrayAdapter<CharSequence> bearingTrackingAdapter = ArrayAdapter.createFromResource(
actionBar.getThemedContext(), R.array.user_bearing_mode, android.R.layout.simple_spinner_item);
bearingTrackingAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
bearingSpinner.setAdapter(bearingTrackingAdapter);
}
}
private void setupSpinners(@NonNull MapboxMap mapboxMap) {
locationSpinner.setOnItemSelectedListener(MyLocationTrackingModeActivity.this);
bearingSpinner.setOnItemSelectedListener(MyLocationTrackingModeActivity.this);
setCheckBoxes();
mapboxMap.setOnMyLocationTrackingModeChangeListener(myLocationTrackingMode -> {
locationSpinner.setOnItemSelectedListener(null);
switch (myLocationTrackingMode) {
case MyLocationTracking.TRACKING_NONE:
locationSpinner.setSelection(TRACKING_NONE_INDEX);
break;
case MyLocationTracking.TRACKING_FOLLOW:
locationSpinner.setSelection(TRACKING_FOLLOW_INDEX);
break;
}
locationSpinner.setOnItemSelectedListener(MyLocationTrackingModeActivity.this);
});
mapboxMap.setOnMyBearingTrackingModeChangeListener(myBearingTrackingMode -> {
bearingSpinner.setOnItemSelectedListener(null);
switch (myBearingTrackingMode) {
case MyBearingTracking.NONE:
bearingSpinner.setSelection(BEARING_NONE_INDEX);
break;
case MyBearingTracking.GPS:
bearingSpinner.setSelection(BEARING_GPS_INDEX);
break;
case MyBearingTracking.COMPASS:
bearingSpinner.setSelection(BEARING_COMPASS_INDEX);
break;
}
bearingSpinner.setOnItemSelectedListener(MyLocationTrackingModeActivity.this);
});
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) throws SecurityException {
TrackingSettings trackingSettings = mapboxMap.getTrackingSettings();
if (parent.getId() == R.id.spinner_location) {
switch (position) {
case TRACKING_NONE_INDEX:
trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_NONE);
break;
case TRACKING_FOLLOW_INDEX:
trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
break;
}
} else if (parent.getId() == R.id.spinner_bearing) {
switch (position) {
case BEARING_NONE_INDEX:
trackingSettings.setMyBearingTrackingMode(MyBearingTracking.NONE);
break;
case BEARING_GPS_INDEX:
trackingSettings.setMyBearingTrackingMode(MyBearingTracking.GPS);
break;
case BEARING_COMPASS_INDEX:
trackingSettings.setMyBearingTrackingMode(MyBearingTracking.COMPASS);
break;
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
Mapbox.getLocationEngine().removeLocationEngineListener(this);
Mapbox.getLocationEngine().removeLocationUpdates();
mapView.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_tracking, menu);
dismissLocationTrackingOnGestureItem = menu.findItem(R.id.action_toggle_dismissible_location);
dismissBearingTrackingOnGestureItem = menu.findItem(R.id.action_toggle_dismissible_bearing);
enableRotateGesturesItem = menu.findItem(R.id.action_toggle_rotate_gesture_enabled);
enableScrollGesturesItem = menu.findItem(R.id.action_toggle_scroll_gesture_enabled);
setCheckBoxes();
return true;
}
private void setCheckBoxes() {
if (mapboxMap != null && dismissBearingTrackingOnGestureItem != null) {
TrackingSettings trackingSettings = mapboxMap.getTrackingSettings();
UiSettings uiSettings = mapboxMap.getUiSettings();
dismissBearingTrackingOnGestureItem.setChecked(trackingSettings.isDismissBearingTrackingOnGesture());
dismissLocationTrackingOnGestureItem.setChecked(trackingSettings.isDismissLocationTrackingOnGesture());
enableRotateGesturesItem.setChecked(uiSettings.isRotateGesturesEnabled());
enableScrollGesturesItem.setChecked(uiSettings.isScrollGesturesEnabled());
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean state;
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
case R.id.action_toggle_dismissible_location:
state = !item.isChecked();
mapboxMap.getTrackingSettings().setDismissLocationTrackingOnGesture(state);
Toast.makeText(this, "Dismiss tracking mode on gesture = " + state, Toast.LENGTH_SHORT).show();
item.setChecked(state);
return true;
case R.id.action_toggle_dismissible_bearing:
state = !item.isChecked();
mapboxMap.getTrackingSettings().setDismissBearingTrackingOnGesture(state);
Toast.makeText(this, "Dismiss bearing mode on gesture = " + state, Toast.LENGTH_SHORT).show();
item.setChecked(state);
return true;
case R.id.action_toggle_rotate_gesture_enabled:
state = !item.isChecked();
mapboxMap.getUiSettings().setRotateGesturesEnabled(state);
Toast.makeText(this, "Rotate gesture enabled = " + state, Toast.LENGTH_SHORT).show();
item.setChecked(state);
return true;
case R.id.action_toggle_scroll_gesture_enabled:
state = !item.isChecked();
mapboxMap.getUiSettings().setScrollGesturesEnabled(state);
Toast.makeText(this, "Scroll gesture enabled = " + state, Toast.LENGTH_SHORT).show();
item.setChecked(state);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}

View File

@@ -9,14 +9,12 @@ public class Feature implements Parcelable {
private String label;
private String description;
private String category;
private boolean requiresLocationPermission;
public Feature(String name, String label, String description, String category, boolean requiresLocationPermission) {
public Feature(String name, String label, String description, String category) {
this.name = name;
this.label = label;
this.description = description;
this.category = category;
this.requiresLocationPermission = requiresLocationPermission;
}
private Feature(Parcel in) {
@@ -24,7 +22,6 @@ public class Feature implements Parcelable {
label = in.readString();
description = in.readString();
category = in.readString();
requiresLocationPermission = in.readByte() != 0;
}
public String getName() {
@@ -48,10 +45,6 @@ public class Feature implements Parcelable {
return category;
}
public boolean isRequiresLocationPermission() {
return requiresLocationPermission;
}
public int describeContents() {
return 0;
}
@@ -61,7 +54,6 @@ public class Feature implements Parcelable {
out.writeString(label);
out.writeString(description);
out.writeString(category);
out.writeByte((byte) (requiresLocationPermission ? 1 : 0));
}
public static final Parcelable.Creator<Feature> CREATOR

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFF"
android:pathData="M20.94,11c-0.46,-4.17 -3.77,-7.48 -7.94,-7.94L13,1h-2v2.06c-1.13,0.12 -2.19,0.46 -3.16,0.97l1.5,1.5C10.16,5.19 11.06,5 12,5c3.87,0 7,3.13 7,7 0,0.94 -0.19,1.84 -0.52,2.65l1.5,1.5c0.5,-0.96 0.84,-2.02 0.97,-3.15L23,13v-2h-2.06zM3,4.27l2.04,2.04C3.97,7.62 3.25,9.23 3.06,11L1,11v2h2.06c0.46,4.17 3.77,7.48 7.94,7.94L11,23h2v-2.06c1.77,-0.2 3.38,-0.91 4.69,-1.98L19.73,21 21,19.73 4.27,3 3,4.27zM16.27,17.54C15.09,18.45 13.61,19 12,19c-3.87,0 -7,-3.13 -7,-7 0,-1.61 0.55,-3.09 1.46,-4.27l9.81,9.81z"/>
</vector>

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mapbox.mapboxsdk.maps.MapView
android:id="@id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:mapbox_cameraTargetLat="40.416872"
app:mapbox_cameraTargetLng="-3.703807"
app:mapbox_cameraZoom="4"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabLocationToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_my_location"
tools:backgroundTint="@color/primary"/>
</android.support.design.widget.CoordinatorLayout>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v4.widget.ContentLoadingProgressBar
android:id="@id/progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</merge>

View File

@@ -1,62 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mapbox.mapboxsdk.maps.MapView
android:id="@id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
mapbox:mapbox_uiAttribution="false"
mapbox:mapbox_uiLogo="false"/>
<LinearLayout
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/accent"
android:orientation="horizontal"
android:weightSum="4">
<Button
android:id="@+id/default_user_dot_coloring_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button_user_dot_default"
android:textColor="@color/white"/>
<Button
android:id="@+id/tint_user_dot_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button_user_dot_tint"
android:textColor="@color/white"/>
<Button
android:id="@+id/user_accuracy_ring_tint_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button_user_accuracy_ring_tint"
android:textColor="@color/white"/>
<Button
android:id="@+id/user_dot_transparent_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button_user_transparent_tint"
android:textColor="@color/white"/>
</LinearLayout>
</RelativeLayout>

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mapbox.mapboxsdk.maps.MapView
android:id="@id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabLocationToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_my_location"
tools:backgroundTint="@color/primary"/>
</android.support.design.widget.CoordinatorLayout>

View File

@@ -1,50 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2">
<Spinner
android:id="@+id/spinner_location"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner_bearing"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_weight="1" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
<com.mapbox.mapboxsdk.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:mapbox_myLocationTintColor="@color/primary"
app:mapbox_myLocationAccuracyTintColor="@color/primary"
app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets"
app:mapbox_cameraZoom="8" />
</LinearLayout>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_id_location_source_lost"
android:title="@string/menuitem_title_change_location_source_lost"
mapbox:showAsAction="never"/>
<item
android:id="@+id/action_id_location_source_mock"
android:title="@string/menuitem_title_change_location_source_mock"
mapbox:showAsAction="never"/>
<item
android:id="@+id/action_id_location_source_null"
android:title="@string/menuitem_title_change_location_source_null"
mapbox:showAsAction="never"/>
</menu>

View File

@@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_user_tracking"
android:title="@string/my_location_tracking"
mapbox:showAsAction="never" />
<item
android:id="@+id/action_bangalore"
android:title="@string/bangalore"

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:checkableBehavior="all">
<item
android:id="@+id/action_toggle_dismissible_location"
android:checkable="true"
android:checked="false"
android:title="@string/menuitem_title_tracking_mode_dismiss_on_gesture"
app:showAsAction="never" />
<item
android:id="@+id/action_toggle_dismissible_bearing"
android:checkable="true"
android:checked="false"
android:title="@string/menuitem_title_bearing_mode_dismiss_on_gesture"
app:showAsAction="never" />
<item
android:id="@+id/action_toggle_rotate_gesture_enabled"
android:checkable="true"
android:checked="false"
android:title="@string/menuitem_title_rotate_gesture_enabled"
app:showAsAction="never" />
<item
android:id="@+id/action_toggle_scroll_gesture_enabled"
android:checkable="true"
android:checked="false"
android:title="@string/menuitem_title_scroll_gesture_enabled"
app:showAsAction="never" />
</group>
</menu>

View File

@@ -2,14 +2,7 @@
<resources>
<string name="menuitem_title_concurrent_infowindow">Concurrent Open InfoWindows</string>
<string name="menuitem_title_deselect_markers_on_tap">Deselect Markers On Tap</string>
<string name="menuitem_title_tracking_mode_dismiss_on_gesture">Dismiss location tracking on gesture</string>
<string name="menuitem_title_bearing_mode_dismiss_on_gesture">Dismiss bearing tracking on gesture</string>
<string name="menuitem_title_reset">Reset</string>
<string name="menuitem_title_rotate_gesture_enabled">Enable rotate gestures</string>
<string name="menuitem_title_scroll_gesture_enabled">Enable scroll gestures</string>
<string name="menuitem_title_change_location_source_lost">Change to LOST location source</string>
<string name="menuitem_title_change_location_source_mock">Change to mock location source</string>
<string name="menuitem_title_change_location_source_null">Reset location source to null</string>
<string name="menuitem_change_icon_overlap">Toggle icon overlap</string>
<string name="menuitem_filter">Filter layer</string>
<string name="menuitem_change_location">Change location</string>
@@ -21,10 +14,6 @@
<string name="button_camera_move">Move</string>
<string name="button_camera_ease">Ease</string>
<string name="button_camera_animate">Animate</string>
<string name="button_user_dot_default">Default</string>
<string name="button_user_dot_tint">Tint dot</string>
<string name="button_user_accuracy_ring_tint">Tint ring</string>
<string name="button_user_transparent_tint">tran</string>
<string name="button_open_dialog">Open dialog</string>
<string name="button_download_region">Download region</string>
<string name="button_list_regions">List regions</string>
@@ -73,7 +62,6 @@
<string name="add_a_composite_categorical_function">Add a composite, categorical function</string>
<string name="add_a_composite_exponential_function">Add a composite, exponential function</string>
<string name="add_a_composite_interval_function">Add a composite, interval function</string>
<string name="my_location_tracking">My Location Tracking</string>
<string name="bangalore">Bangalore</string>
<string name="list_all_layers_in_the_style">List all layers in the style</string>
<string name="list_all_sources_in_the_style">List all sources in the style</string>

View File

@@ -7,16 +7,4 @@
<item>1000</item>
<item>10000</item>
</string-array>
<string-array name="user_tracking_mode">
<item>Disabled</item>
<item>Follow tracking</item>
</string-array>
<string-array name="user_bearing_mode">
<item>Disabled</item>
<item>GPS bearing</item>
<item>Compass bearing</item>
<!--<item>Combined mode</item>-->
</string-array>
</resources>

View File

@@ -10,7 +10,6 @@
<string name="category_infowindow">Info Window</string>
<string name="category_maplayout">Map Layout</string>
<string name="category_offline">Offline</string>
<string name="category_userlocation">User Location</string>
<string name="category_style">Styling</string>
<string name="category_features">Features</string>
<string name="category_storage">Storage</string>

View File

@@ -1,10 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="description_user_location_tracking">Tracks the location of the user</string>
<string name="description_user_location_customization">Customize the location of the user</string>
<string name="description_user_location_dot_color">Customize the user location color</string>
<string name="description_user_location_toggle">Toggle location of the user on and off</string>
<string name="description_custom_location_engine">Customize location engine</string>
<string name="description_custom_layer">Overlay a custom native layer on the map</string>
<string name="description_info_window_adapter">Learn how to create a custom InfoWindow</string>
<string name="description_cameraposition">CameraPosition capabilities</string>

View File

@@ -6,6 +6,5 @@
<dimen name="map_padding_bottom">256dp</dimen>
<dimen name="map_padding_right">32dp</dimen>
<dimen name="map_padding_top">0dp</dimen>
<dimen name="locationview_background_drawable_padding">2dp</dimen>
<dimen name="navigation_drawer_width">240dp</dimen>
</resources>

View File

@@ -21,11 +21,6 @@
<string name="activity_scroll_by">Scroll By Method</string>
<string name="activity_double_map">Double Map Activity</string>
<string name="activity_snapshot">Snapshot Activity</string>
<string name="activity_user_tracking_mode">User tracking mode</string>
<string name="activity_user_tracking_customization">User location drawable</string>
<string name="activity_user_dot_color">User location tint color</string>
<string name="activity_user_location_toggle">User location toggle</string>
<string name="activity_custom_location_engine">Custom location engine</string>
<string name="activity_custom_layer">Custom Layer</string>
<string name="activity_map_padding">Map Padding</string>
<string name="activity_debug_mode">Debug Mode</string>