Skip to content
This repository has been archived by the owner on Oct 7, 2024. It is now read-only.

Commit

Permalink
adding china bounds checker example
Browse files Browse the repository at this point in the history
  • Loading branch information
Langston Smith committed Oct 21, 2019
1 parent 270e8bc commit 74ab9be
Show file tree
Hide file tree
Showing 7 changed files with 222 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.mapbox.mapboxandroiddemo.adapter.ExampleAdapter;
import com.mapbox.mapboxandroiddemo.commons.AnalyticsTracker;
import com.mapbox.mapboxandroiddemo.commons.FirstTimeRunChecker;
import com.mapbox.mapboxandroiddemo.examples.ChinaBoundsCheckerActivity;
import com.mapbox.mapboxandroiddemo.examples.SimpleChinaMapViewActivity;
import com.mapbox.mapboxandroiddemo.examples.labs.AnimatedMarkerActivity;
import com.mapbox.mapboxandroiddemo.examples.basics.KotlinSimpleMapViewActivity;
Expand Down Expand Up @@ -389,6 +390,14 @@ private void initializeModels() {
null,
R.string.activity_china_simple_china_mapview_url, false, BuildConfig.MIN_SDK_VERSION));

exampleItemModels.add(new ExampleItemModel(
R.id.nav_basics,
R.string.activity_china_simple_china_bounds_checker_title,
R.string.activity_china_simple_china_bounds_checker_description,
new Intent(MainActivity.this, ChinaBoundsCheckerActivity.class),
null,
R.string.activity_china_simple_china_bounds_checker_url, false, BuildConfig.MIN_SDK_VERSION));

exampleItemModels.add(new ExampleItemModel(
R.id.nav_styles,
R.string.activity_styles_basic_symbol_layer_title,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
package com.mapbox.mapboxandroiddemo.examples

import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.Toast
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import com.mapbox.android.core.location.*
import com.mapbox.android.core.permissions.PermissionsListener
import com.mapbox.android.core.permissions.PermissionsManager
import com.mapbox.mapboxandroiddemo.R
import com.mapbox.mapboxsdk.camera.CameraPosition
import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.location.LocationComponent
import com.mapbox.mapboxsdk.location.LocationComponentActivationOptions
import com.mapbox.mapboxsdk.location.modes.CameraMode
import com.mapbox.mapboxsdk.location.modes.RenderMode
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.maps.MapboxMapOptions
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback
import com.mapbox.mapboxsdk.maps.Style
import com.mapbox.mapboxsdk.plugins.china.constants.ChinaStyle
import com.mapbox.mapboxsdk.plugins.china.maps.ChinaMapView
import com.mapbox.mapboxsdk.plugins.china.shift.ChinaBoundsChecker

class ChinaBoundsCheckerActivity : AppCompatActivity(), OnMapReadyCallback,
LocationEngineCallback<LocationEngineResult>, PermissionsListener {

private lateinit var mapboxMap: MapboxMap
private var savedInstanceState: Bundle? = null
private var deviceInChina: Boolean? = null
private var chinaMapView: ChinaMapView? = null
private var locationComponent: LocationComponent? = null
private var permissionsManager: PermissionsManager? = null
private var locationEngine: LocationEngine? = null
private val defaultIntervalInMilliseconds = 1000L
private val defaultMaxWaitTime = defaultIntervalInMilliseconds * 5

// Adjust the Styles below to see various China and non-China styles used in this example
private val chinaStyleToUse: String = ChinaStyle.MAPBOX_DARK_CHINESE

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// Mapbox access token is configured here. This needs to be called either in your application
// object or in the same activity which contains the mapview.
this.savedInstanceState = savedInstanceState
locationPermissionCheckAndStart()
}

override fun onMapReady(mapboxMap: MapboxMap) {
this.mapboxMap = mapboxMap
mapboxMap.setStyle(Style.Builder().fromUri(

// TODO: Because of privacy reasons, this file isn't actually included
// in the app. Add the file to an assets folder.
// Please email Mapbox at apac-bd@mapbox.com if you're
// interested in this file and/or have questions about
// this general functionality.
if (deviceInChina!!) chinaStyleToUse else
"asset://cn_style_with_english_labels.json")) {

Toast.makeText(this@ChinaBoundsCheckerActivity,
String.format(getString(R.string.device_location),
if (deviceInChina!!) "is" else "isn't"), Toast.LENGTH_SHORT).show()

initLocationComponent(it)
}
}

override fun onSuccess(result: LocationEngineResult?) {
val lastLocation = result?.lastLocation
if (deviceInChina == null) {
deviceInChina = ChinaBoundsChecker.locationIsInChina(
this@ChinaBoundsCheckerActivity, result?.lastLocation)
initMap(
MapboxMapOptions.createFromAttributes(this, null)
.camera(
CameraPosition.Builder()
.target(LatLng(lastLocation?.latitude!!,
lastLocation.longitude))
.zoom(10.0)
.build()),
savedInstanceState)
}
locationComponent?.forceLocationUpdate(lastLocation)
}

override fun onFailure(exception: Exception) {
Toast.makeText(this, String.format("get location failed: %s",
exception.localizedMessage), Toast.LENGTH_SHORT).show()
}

private fun locationPermissionCheckAndStart() {
// Check if permissions are enabled and if not request
if (PermissionsManager.areLocationPermissionsGranted(this)) {
initLocationEngine()
} else {
permissionsManager = PermissionsManager(this).apply {
requestLocationPermissions(this@ChinaBoundsCheckerActivity)
}
}
}

private fun initMap(
mapboxMapOptions: MapboxMapOptions,
savedInstanceState: Bundle?
) {
chinaMapView = ChinaMapView(this, mapboxMapOptions).apply {
onCreate(savedInstanceState)
getMapAsync(this@ChinaBoundsCheckerActivity)
setContentView(this)
}
}

@SuppressWarnings("MissingPermission")
fun initLocationComponent(@NonNull fullyLoadedStyle: Style) {
locationComponent = mapboxMap.locationComponent
locationComponent.apply {
// Activate the LocationComponent with LocationComponentActivationOptions
activateLocationComponent(LocationComponentActivationOptions.builder(
this@ChinaBoundsCheckerActivity,
fullyLoadedStyle).build())

// Enable to make the LocationComponent visible
isLocationComponentEnabled = true

// Set the LocationComponent's camera mode
cameraMode = CameraMode.NONE

// Set the LocationComponent's render mode
renderMode = RenderMode.NORMAL
}
}

@SuppressLint("MissingPermission")
private fun initLocationEngine() {
locationEngine = LocationEngineProvider.getBestLocationEngine(this).apply {
requestLocationUpdates(LocationEngineRequest.Builder(defaultIntervalInMilliseconds)
.setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
.setMaxWaitTime(defaultMaxWaitTime).build(),
this@ChinaBoundsCheckerActivity, mainLooper)
getLastLocation(this@ChinaBoundsCheckerActivity)
}
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
permissionsManager?.onRequestPermissionsResult(requestCode, permissions, grantResults)
}

override fun onExplanationNeeded(permissionsToExplain: List<String>) {
Toast.makeText(this, R.string.user_location_permission_explanation, Toast.LENGTH_LONG).show()
}

override fun onPermissionResult(granted: Boolean) {
if (granted) {
locationPermissionCheckAndStart()
} else {
Toast.makeText(this, R.string.user_location_permission_not_granted, Toast.LENGTH_LONG).show()
finish()
}
}

override fun onResume() {
super.onResume()
chinaMapView?.onResume()
}

override fun onStart() {
super.onStart()
chinaMapView?.onStart()
}

override fun onStop() {
super.onStop()
chinaMapView?.onStop()
}

public override fun onPause() {
super.onPause()
chinaMapView?.onPause()
}

override fun onLowMemory() {
super.onLowMemory()
chinaMapView?.onLowMemory()
}

override fun onDestroy() {
super.onDestroy()
chinaMapView?.onDestroy()
}

override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
chinaMapView?.onSaveInstanceState(outState)
}
}
8 changes: 8 additions & 0 deletions MapboxAndroidDemo/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -996,6 +996,14 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="com.mapbox.mapboxandroiddemo.MainActivity" />
</activity>
<activity
android:name=".examples.ChinaBoundsCheckerActivity"
android:label="@string/activity_china_simple_china_bounds_checker_title"
android:screenOrientation="portrait">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.mapbox.mapboxandroiddemo.MainActivity" />
</activity>

<service android:name=".account.AccountRetrievalService" />
<receiver android:name=".utils.DemoAppHomeScreenAddressWidget">
Expand Down
3 changes: 3 additions & 0 deletions MapboxAndroidDemo/src/main/res/values/activity_strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -424,4 +424,7 @@
<!-- Variable label placement-->
<string name="zoom_map_in_and_out_circle_to_icon_transition">Zoom in and out to see the circles transition to icons</string>

<!-- China bounds checker-->
<string name="device_location">Device %1$s in China</string>

</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -136,5 +136,6 @@
<string name="activity_lab_change_attribution_color_description">Adjust the attribution "i" to match a map style, app UI, or color motif.</string>
<string name="activity_lab_shared_preferences_description">Use the Android system\'s Shared Preferences to save and retrieve coordinates.</string>
<string name="activity_china_simple_china_mapview_description">Show an accurate and government-approved China map in your app using the Mapbox Maps SDK.</string>
<string name="activity_china_simple_china_bounds_checker_description">Use the China plugin to determine whether or not the device is inside of China.</string>

</resources>
1 change: 1 addition & 0 deletions MapboxAndroidDemo/src/main/res/values/titles_strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@
<string name="activity_dds_polygon_select_toggle_title">Polygon toggle</string>
<string name="activity_lab_drag_draw_title">Drawing search area</string>
<string name="activity_china_simple_china_mapview_title">China map view</string>
<string name="activity_china_simple_china_bounds_checker_title">Device in China</string>
<string name="activity_lab_home_screen_widget_title">Homescreen geocoding widget</string>
<string name="activity_lab_rv_directions_title">RecyclerView Directions</string>
<string name="activity_lab_spinning_icon_title">Spinning icon</string>
Expand Down
1 change: 1 addition & 0 deletions MapboxAndroidDemo/src/main/res/values/urls_strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -134,4 +134,5 @@
<string name="activity_lab_change_attribution_color_url" translatable="false">https://i.imgur.com/cGv98jb.png</string>
<string name="activity_lab_shared_preferences_url" translatable="false">https://i.imgur.com/znxAhDG.png</string>
<string name="activity_china_simple_china_mapview_url" translatable="false">https://i.imgur.com/KwoEynZ.png</string>
<string name="activity_china_simple_china_bounds_checker_url" translatable="false">https://i.imgur.com/fIFWqJu.png</string>
</resources>

0 comments on commit 74ab9be

Please sign in to comment.