Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.leavingstone.kazbegi.ui.screens.main
- import android.Manifest
- import android.animation.ValueAnimator
- import android.annotation.SuppressLint
- import android.app.Activity
- import android.content.Intent
- import android.graphics.Color
- import android.location.Location
- import android.os.Build
- import android.os.Bundle
- import android.os.Looper.getMainLooper
- import android.provider.Settings
- import androidx.core.content.ContextCompat
- import android.text.Editable
- import android.text.TextUtils
- import android.text.TextWatcher
- import android.util.Log
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import android.view.animation.AccelerateInterpolator
- import android.view.animation.AlphaAnimation
- import android.view.animation.LinearInterpolator
- import android.view.inputmethod.EditorInfo
- import android.widget.Toast
- import com.leavingstone.kazbegi.R
- import com.leavingstone.kazbegi.database.RealmHelper
- import com.leavingstone.kazbegi.extensions.hideKeyboard
- import com.leavingstone.kazbegi.networking.api.response.GetCategoriesResult
- import com.leavingstone.kazbegi.networking.api.response.GetLocationsResult
- import com.leavingstone.kazbegi.ui.base.BaseActivity
- import com.leavingstone.kazbegi.ui.base.BaseMvpFragment
- import com.leavingstone.kazbegi.ui.screens.filterfragment.FilterFragment
- import com.leavingstone.kazbegi.ui.screens.general.GeneralDescriptionFragment
- import com.leavingstone.kazbegi.ui.screens.menu.MenuFragment
- import com.leavingstone.kazbegi.ui.screens.tab.TabFragment
- import com.leavingstone.kazbegi.ui.widgets.DoubleClickListener
- import com.leavingstone.kazbegi.ui.widgets.adapters.SearchAdapter
- import com.leavingstone.kazbegi.utils.FilterHelper
- import com.leavingstone.kazbegi.utils.MapViewMarker
- import com.leavingstone.kazbegi.view.ext.setDebounceOnClickListener
- import com.mapbox.android.core.location.*
- import com.mapbox.android.core.permissions.PermissionsManager
- //import com.mapbox.android.core.location.LocationEngineListener
- //import com.mapbox.android.core.location.LocationEnginePriority
- import com.mapbox.api.directions.v5.DirectionsCriteria
- import com.mapbox.api.directions.v5.models.DirectionsResponse
- import com.mapbox.api.directions.v5.models.DirectionsRoute
- import com.mapbox.core.constants.Constants.PRECISION_6
- import com.mapbox.geojson.Feature
- import com.mapbox.geojson.FeatureCollection
- import com.mapbox.geojson.LineString
- import com.mapbox.geojson.Point
- import com.mapbox.mapboxsdk.Mapbox
- 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.geometry.LatLngBounds
- 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.Style
- //import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode
- //import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin
- import com.mapbox.mapboxsdk.style.layers.LineLayer
- import com.mapbox.mapboxsdk.style.layers.Property
- import com.mapbox.mapboxsdk.style.layers.PropertyFactory
- import com.mapbox.mapboxsdk.style.layers.PropertyFactory.*
- import com.mapbox.mapboxsdk.style.sources.GeoJsonSource
- import com.mapbox.mapboxsdk.style.sources.Source
- import com.mapbox.services.android.navigation.ui.v5.NavigationView
- //import com.mapbox.services.android.location.LostLocationEngine
- import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute
- import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute
- //import com.mapbox.services.api.directions.v5.models.DirectionsRoute
- import io.realm.Realm
- import kotlinx.android.synthetic.main.fragment_main_layout.*
- import pub.devrel.easypermissions.AfterPermissionGranted
- import pub.devrel.easypermissions.EasyPermissions
- import retrofit2.Call
- import retrofit2.Callback
- import retrofit2.Response
- import java.lang.Exception
- import kotlin.collections.ArrayList
- /**
- * Created by Giorgi on 12/20/17.
- */
- class MainFragment
- : BaseMvpFragment<MainContract.View, MainContract.Presenter>(),
- MainContract.View,
- MapViewMarker.MarkerClickListener,
- EasyPermissions.PermissionCallbacks {
- companion object {
- const val TAG = "MainFragment"
- private val PERMISSIONS = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)
- private const val LOCATION_PERMISSION_REQUEST_CODE = 1
- private const val FILTER_FRAGMENT_REQUEST_CODE = 100
- private const val GENERAL_FRAGMENT_PATH_REQUEST_CODE = 101
- fun newInstance(): MainFragment {
- return MainFragment()
- }
- }
- var diractionShow: Boolean = false
- private var mapBoxMap: MapboxMap? = null
- private var locationEngine: LocationEngine? = null
- // private var locationPlugin: LocationLayerPlugin? = null
- private var originLocation: Location? = null
- private lateinit var originPosition: Point
- private lateinit var destinationPosition: Point
- private var navigationMapRoute: NavigationMapRoute? = null
- private var markersList: ArrayList<GetLocationsResult.Params>? = null
- private var filteredLIst: ArrayList<GetLocationsResult.Params>? = null
- private var filtersList: ArrayList<Any>? = null
- private var tabFragment: TabFragment? = null
- private var cameraBearingAnimator: ValueAnimator? = null
- private lateinit var realm: Realm
- private lateinit var realmHelper: RealmHelper
- private var afterLanguageChangedAction: ((Unit) -> Unit)? = null
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- realm = Realm.getDefaultInstance()
- realmHelper = RealmHelper(realm)
- }
- override fun onCreateView(inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?)
- : View? {
- return bind(inflater, R.layout.fragment_main_layout, false)
- }
- override fun onViewCreated(view: View,
- savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- if (activity?.intent?.hasExtra(BaseActivity.EXTRA_FROM_CHANGE_LANGUAGE) == true) {
- afterLanguageChangedAction = {
- showMenuAfterLanguageChanged()
- }
- }
- mapView.onCreate(savedInstanceState)
- mapView.getMapAsync {
- onMapReady(it)
- }
- presenter.getCategories(realm)
- presenter.getLocationItem(realm)
- burger_btn_id.setOnClickListener {
- hideKeyboard()
- val fr = MenuFragment.newInstance()
- fragmentManager?.beginTransaction()
- ?.setCustomAnimations(R.anim.slide_enter, 0, 0, R.anim.slide_exit)
- ?.replace(R.id.root, fr)
- ?.addToBackStack("menu")
- ?.commit()
- }
- ic_navigation_btn_id.setOnClickListener(object : DoubleClickListener() {
- override fun onSingleClick(v: View) {
- requestLocationPermissions()
- }
- override fun onDoubleClick(v: View) {
- val map = mapBoxMap ?: return
- val degree = if (map.cameraPosition.bearing.toFloat() > 180) {
- -(360 - map.cameraPosition.bearing.toFloat())
- } else {
- map.cameraPosition.bearing.toFloat()
- }
- cameraBearingAnimator?.cancel()
- cameraBearingAnimator = ValueAnimator.ofFloat(degree, 0.toFloat())
- val anim = requireNotNull(cameraBearingAnimator)
- anim.interpolator = LinearInterpolator()
- anim.duration = 300L
- anim.addUpdateListener {
- val bearing = it.animatedValue as Float
- map.moveCamera(CameraUpdateFactory
- .newCameraPosition(CameraPosition.Builder()
- .target(LatLng(
- map.cameraPosition.target.latitude,
- map.cameraPosition.target.longitude))
- .bearing(bearing.toDouble())
- .build()))
- }
- anim.start()
- }
- })
- direction_btn_calear.setOnClickListener {
- navigationMapRoute?.removeRoute()
- addMarkers()
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.visibility = View.GONE
- filter_container_id.clearAnimation()
- filter_container_id.visibility = View.VISIBLE
- diractionShow = false
- }
- direction_btn_container_id.setDebounceOnClickListener {
- updateCamera()
- }
- initSearchView()
- }
- override fun filterListReady(filter: List<GetLocationsResult.Params>) {
- filteredLIst = ArrayList(filter)
- addMarkers()
- }
- private fun initSearchView() {
- main_search_id.addTextChangedListener(object : TextWatcher {
- override fun afterTextChanged(s: Editable?) {
- }
- override fun beforeTextChanged(s: CharSequence?,
- start: Int,
- count: Int,
- after: Int) {
- }
- override fun onTextChanged(s: CharSequence?,
- start: Int,
- before: Int,
- count: Int) {
- if (count == 0) {
- presenter.searchMarkers("", markersList)
- search_cancel_btn.visibility = View.INVISIBLE
- } else {
- search_cancel_btn.visibility = View.VISIBLE
- }
- }
- })
- search_cancel_btn.setOnClickListener {
- main_search_id.text = null
- presenter.searchMarkers("", markersList)
- it.visibility = View.INVISIBLE
- }
- main_search_id.setOnEditorActionListener { v, actionId, _ ->
- if (actionId == EditorInfo.IME_ACTION_SEARCH) {
- val term = v.text.toString()
- if (!term.isEmpty()) {
- realmHelper.saveSearchedString(v.text.toString(),
- object : RealmHelper.UpdateSuggestedSearchListener {
- override fun update() {
- activity?.runOnUiThread {
- createSearchAdapter()
- }
- }
- })
- }
- presenter.searchMarkers(v.text, markersList)
- createSearchAdapter()
- hideKeyboard()
- }
- return@setOnEditorActionListener true
- }
- createSearchAdapter()
- }
- private fun createSearchAdapter() {
- val list = realmHelper.readSearchedString()
- val adapter = SearchAdapter(requireNotNull(context), list, R.layout.search_adapter_item,
- true)
- if (list.isNullOrEmpty()) {
- main_search_id.setAdapter(null)
- } else {
- main_search_id.setAdapter(adapter)
- }
- main_search_id.threshold = 0
- }
- private fun removeSearchAdapter() {
- main_search_id.setAdapter(null)
- }
- override fun filteredList(filteredLIst: ArrayList<GetLocationsResult.Params>) {
- this.filteredLIst = filteredLIst
- addMarkers()
- tabFragment?.setFilteredList(filteredLIst)
- }
- @SuppressLint("MissingPermission")
- private fun requestLocation() {
- if (hasPermission()) {
- initLocationEngine()
- initializeLocationPlugin()
- } else {
- requestLocationPermissions()
- }
- }
- override fun onMarkerClickListener(idMarker: String) {
- val transaction = fragmentManager?.beginTransaction()
- markersList?.let {
- val category = filtersList?.find { it is GetCategoriesResult } as GetCategoriesResult
- val fragment = GeneralDescriptionFragment.newInstance(idMarker, it, category)
- fragment.setTargetFragment(this, GENERAL_FRAGMENT_PATH_REQUEST_CODE)
- transaction?.replace(R.id.tab_fragment_container_id,
- fragment, "tag")?.addToBackStack("stack")?.commit()
- hideBtbAnimation()
- hideKeyboard()
- }
- }
- private fun hideBtbAnimation() {
- val alphaAnimation = AlphaAnimation(1f, 0f)
- alphaAnimation.duration = 220
- alphaAnimation.fillAfter = true
- ic_navigation_btn_id.startAnimation(alphaAnimation)
- menu_buton_id.startAnimation(alphaAnimation)
- menu_buton_id.visibility = View.GONE
- filter_container_id.startAnimation(alphaAnimation)
- if (direction_btn_container_id.visibility == View.VISIBLE) {
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.startAnimation(alphaAnimation)
- }
- }
- fun showBtbAnimation() {
- val alphaAnimation = AlphaAnimation(0f, 1f)
- alphaAnimation.interpolator = AccelerateInterpolator()
- alphaAnimation.duration = 250
- alphaAnimation.fillAfter = true
- ic_navigation_btn_id.startAnimation(alphaAnimation)
- menu_buton_id.startAnimation(alphaAnimation)
- menu_buton_id.visibility = View.VISIBLE
- filter_container_id.startAnimation(alphaAnimation)
- if (direction_btn_container_id.visibility == View.VISIBLE) {
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.startAnimation(alphaAnimation)
- }
- }
- fun showDirection() {
- if (diractionShow) {
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.visibility = View.VISIBLE
- filter_container_id.clearAnimation()
- filter_container_id.visibility = View.GONE
- }
- }
- override fun loadDataFromBase(params: ArrayList<GetLocationsResult.Params>) {
- this.markersList = params
- addMarkers()
- menu_buton_id.setDebounceOnClickListener {
- tabFragment = TabFragment.newInstance(markersList!!)
- val transaction = fragmentManager?.beginTransaction()
- transaction?.setCustomAnimations(R.anim.slide_enter, 0, 0, R.anim.slide_exit)
- transaction?.add(R.id.tab_fragment_container_id, tabFragment!!)?.addToBackStack(null)?.commit()
- hideKeyboard()
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.visibility = View.GONE
- filter_container_id.clearAnimation()
- filter_container_id.visibility = View.VISIBLE
- }
- }
- private fun addMarkers(wayPointFor: GetLocationsResult.Params? = null) {
- val list = filteredLIst?.toList() ?: markersList?.toList() ?: return
- mapBoxMap?.let { map ->
- map.clear()
- MapViewMarker(requireNotNull(context),
- map,
- list,
- wayPointFor,
- this)
- }
- }
- @SuppressLint("ResourceType")
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- // filter_container_id.isClickable = true
- if (resultCode == Activity.RESULT_OK) {
- if (requestCode == FILTER_FRAGMENT_REQUEST_CODE) {
- changeFilter()
- // filter_container_id.isClickable = true
- }
- if (requestCode == GENERAL_FRAGMENT_PATH_REQUEST_CODE) {
- data?.let {
- if (checkLocationSwich()) {
- mapBoxMap?.style?.let {
- val coords = data.extras?.getSerializable("line") as GetLocationsResult.Params
- val points = coords.coordinates?.coordinatesList?.map {
- if (it.latitude != null && it.longitude != null) {
- Point.fromLngLat(it.latitude!!.toDouble(), it.longitude!!.toDouble())
- } else
- Point.fromLngLat(40.000, 40.100)
- }
- // addCoordinatesSource(it, points!!)
- }
- drawPath(it.extras?.getSerializable("line") as GetLocationsResult.Params)
- } else Toast.makeText(context, resources.getString(R.string.location_warning_text), Toast.LENGTH_SHORT).show()
- }
- }
- }
- if (resultCode == Activity.RESULT_CANCELED) {
- filter_container_id.background = ContextCompat.getDrawable(context!!, R.drawable.non_selected_filter_btn_background)
- }
- }
- private fun checkLocationSwich(): Boolean {
- val locationMode: Int
- val locationProviders: String
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- try {
- locationMode = Settings.Secure.getInt(context?.contentResolver, Settings.Secure.LOCATION_MODE)
- } catch (e: Settings.SettingNotFoundException) {
- e.printStackTrace()
- return false
- }
- return locationMode != Settings.Secure.LOCATION_MODE_OFF
- } else {
- locationProviders = Settings.Secure.getString(context?.contentResolver, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)
- return !TextUtils.isEmpty(locationProviders)
- }
- }
- private fun changeFilter() {
- filter_container_id.background = ContextCompat.getDrawable(context!!, R.drawable.filter_bachgraund)
- filter_clear_btn.visibility = View.VISIBLE
- filter_clear_btn.setOnClickListener {
- filter_container_id.background = ContextCompat.getDrawable(context!!, R.drawable.non_selected_filter_btn_background)
- filter_clear_btn.visibility = View.GONE
- FilterHelper.resetFilter()
- filteredLIst = null
- addMarkers()
- tabFragment?.setFilteredList(markersList!!)
- }
- presenter.filterMarkers(markersList)
- }
- private fun showDirectionBtn() {
- diractionShow = true
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.visibility = View.VISIBLE
- filter_container_id.clearAnimation()
- filter_container_id.visibility = View.GONE
- }
- private fun hasPermission(): Boolean = EasyPermissions.hasPermissions(
- requireNotNull(context), *PERMISSIONS)
- private fun drawPath(params: GetLocationsResult.Params) {
- if (hasPermission()) {
- if (params.coordinates?.coordinatesList?.isNotEmpty() == true) {
- if (params.coordinates?.coordinatesList?.get(0)?.latitude != null &&
- params.coordinates?.coordinatesList?.get(0)?.longitude != null)
- destinationPosition = Point.fromLngLat(params.coordinates?.coordinatesList?.get(0)?.longitude?.toDouble()!!,
- params.coordinates?.coordinatesList?.get(0)?.latitude?.toDouble()!!)
- }
- originLocation?.let {
- originPosition = Point.fromLngLat(it.longitude, it.latitude)
- getRoute(originPosition, destinationPosition, params)
- }
- } else requestLocationPermissions()
- }
- private fun getRoute(origin: Point,
- destination: Point,
- params: GetLocationsResult.Params) {
- addMarkers(params)
- NavigationRoute.builder(context)
- .profile(DirectionsCriteria.PROFILE_WALKING)
- .accessToken(Mapbox.getAccessToken()!!)
- .origin(origin)
- .destination(destination)
- .also { builder ->
- val pints = ArrayList<Point>()
- params.coordinates?.coordinatesList
- ?.filter {
- it.longitude != null && it.latitude != null
- }?.onEach {
- println("---> | ${it.longitude} ${it.latitude}")
- pints.add(Point.fromLngLat(
- requireNotNull(it.longitude).toDouble(),
- requireNotNull(it.latitude).toDouble()))
- // builder.addWaypoint(Point.fromLngLat(
- // requireNotNull(it.longitude).toDouble(),
- // requireNotNull(it.latitude).toDouble()))
- }
- addCoordinates(pints)
- }
- .build().getRoute(object : Callback<DirectionsResponse> {
- override fun onResponse(call: Call<DirectionsResponse>, response: Response<DirectionsResponse>) {
- val res = response.body()
- res?.routes()?.forEach {
- println("---> ${it.routeOptions()?.coordinates()}")
- }
- mapBoxMap?.style?.let { s ->
- res?.routes()?.let {
- // addCoordinates(res.routes()[0])
- }
- }
- if (res == null) {
- Log.e(TAG, "No routes found, make sure you set the right user and access token.")
- return
- } else if (response.body()!!.routes().size < 1) {
- Log.e(TAG, "No routes found")
- return
- }
- val currentRoute = response.body()?.routes()?.get(0)
- // Draw the route on the map
- if (navigationMapRoute != null) {
- navigationMapRoute!!.removeRoute()
- } else {
- navigationMapRoute = NavigationMapRoute(null, mapView, mapBoxMap!!, R.style.NavigationMapRoute)
- }
- navigationMapRoute!!.addRoute(currentRoute)
- updateCamera()
- showDirectionBtn()
- }
- override fun onFailure(call: Call<DirectionsResponse>, throwable: Throwable) {
- Log.e(TAG, "Error: " + throwable.message)
- }
- })
- }
- private lateinit var dashedLineDirectionsFeatureCollection: FeatureCollection
- fun addCoordinates(route: DirectionsRoute){
- val directionsRouteFeatureList = ArrayList<Feature>()
- val lineString = LineString.fromPolyline(route.geometry()!!, PRECISION_6)
- val coords = lineString.coordinates()
- directionsRouteFeatureList.add(Feature.fromGeometry(LineString.fromLngLats(coords)))
- dashedLineDirectionsFeatureCollection = FeatureCollection.fromFeatures(directionsRouteFeatureList)
- val source:GeoJsonSource? = mapBoxMap?.style?.getSourceAs("line-source1")
- source?.setGeoJson(dashedLineDirectionsFeatureCollection)
- }
- private fun addCoordinates(route: List<Point>){
- val directionsRouteFeatureList = ArrayList<Feature>()
- val lineString = LineString.fromLngLats(route)
- val coords = lineString.coordinates()
- directionsRouteFeatureList.add(Feature.fromGeometry(LineString.fromLngLats(coords)))
- dashedLineDirectionsFeatureCollection = FeatureCollection.fromFeatures(directionsRouteFeatureList)
- val source:GeoJsonSource? = mapBoxMap?.style?.getSourceAs("line-source1")
- source?.setGeoJson(dashedLineDirectionsFeatureCollection)
- }
- private fun addCoordinatesSource(style: Style) {
- dashedLineDirectionsFeatureCollection = FeatureCollection.fromFeatures(emptyArray<Feature>())
- style.addSource(GeoJsonSource("line-source1", dashedLineDirectionsFeatureCollection))
- addLayer(style)
- }
- private fun addLayer(style: Style) {
- // The layer properties for our line. This is where we make the line dotted, set the
- // color, etc.
- style.addLayer(LineLayer("dashedlayer", "line-source1").withProperties(
- lineDasharray(arrayOf(0.01f, 2f)),
- lineCap(Property.LINE_CAP_ROUND),
- lineJoin(Property.LINE_JOIN_ROUND),
- lineWidth(5f),
- lineColor(Color.parseColor("#e55e5e"))
- ))
- }
- fun drawDashedLineRoute(style: Style) {
- style.addLayer(LineLayer("linelayer", "line-source1").withProperties(
- lineCap(Property.LINE_CAP_ROUND),
- lineJoin(Property.LINE_JOIN_ROUND),
- lineWidth(2f),
- lineColor(Color.parseColor("#e44e4e"))
- ))
- }
- fun initDottedLineSourceAndLayer(loadedMapStyle: Style) {
- // dashedLineDirectionsFeatureCollection = FeatureCollection.fromFeatures(arrayOf<Feature>());
- // loadedMapStyle.addSource( GeoJsonSource ("SOURCE_ID", dashedLineDirectionsFeatureCollection));
- loadedMapStyle.addLayerBelow(
- LineLayer(
- "DIRECTIONS_LAYER_ID", "SOURCE_ID").withProperties(
- lineWidth(4.5f),
- lineColor(Color.BLACK),
- lineTranslate(arrayOf(0f, 4f)),
- lineDasharray(arrayOf(1.2f, 1.2f))
- ), "road-label-small")
- }
- private fun drawNavigationPolylineRoute(route: DirectionsRoute) {
- if (mapBoxMap != null) {
- mapBoxMap?.getStyle { style ->
- val directionsRouteFeatureList = ArrayList<Feature>()
- val lineString = LineString.fromPolyline(route.geometry()!!, PRECISION_6)
- val coordinates = lineString.coordinates()
- coordinates.forEach {
- directionsRouteFeatureList.add(Feature.fromGeometry(LineString.fromLngLats(coordinates)))
- }
- // dashedLineDirectionsFeatureCollection = FeatureCollection.fromFeatures(directionsRouteFeatureList);
- // style.getSourceAs<GeoJsonSource>("SOURCE_ID")?.setGeoJson(dashedLineDirectionsFeatureCollection)
- }
- }
- }
- @SuppressLint("MissingPermission")
- @AfterPermissionGranted(LOCATION_PERMISSION_REQUEST_CODE)
- private fun requestLocationPermissions() {
- if (hasPermission()) {
- requestLocation()
- originLocation?.let { setCameraPosition(it) }
- } else {
- EasyPermissions.requestPermissions(this,
- getString(R.string.offline_map),
- LOCATION_PERMISSION_REQUEST_CODE, *PERMISSIONS)
- }
- }
- override fun onPermissionsDenied(requestCode: Int,
- perms: MutableList<String>) {
- }
- @SuppressLint("MissingPermission")
- override fun onPermissionsGranted(requestCode: Int,
- perms: MutableList<String>) {
- requestLocation()
- }
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
- @SuppressLint("MissingPermission")
- private fun initLocationEngine() {
- locationEngine = LocationEngineProvider.getBestLocationEngine(context!!)
- val request = LocationEngineRequest.Builder(1000)
- .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
- .setMaxWaitTime(10000).build()
- locationEngine?.requestLocationUpdates(request, locListenerEngine, getMainLooper())
- locationEngine?.getLastLocation(locListenerEngine)
- }
- private val locListenerEngine = object : LocationEngineCallback<LocationEngineResult> {
- override fun onSuccess(result: LocationEngineResult?) {
- originLocation = result?.lastLocation
- println("location->>> ${result?.lastLocation}")
- }
- override fun onFailure(exception: Exception) {
- exception.printStackTrace()
- }
- }
- private fun initializeLocationPlugin() {
- // var lp = locationPlugin
- // if (lp == null) {
- // lp = LocationLayerPlugin(mapView, mapBoxMap!!, locationEngine)
- // lp.setLocationLayerEnabled(LocationLayerMode.TRACKING)
- // locationPlugin = lp
- // }
- }
- // override fun onLocationChanged(location: Location?) {
- // if (location != null) {
- // originLocation = location
- // locationEngine?.removeLocationEngineListener(this)
- // }
- // }
- // @SuppressLint("MissingPermission")
- // override fun onConnected() {
- // locationEngine?.requestLocationUpdates()
- // }
- private fun showMenuAfterLanguageChanged() {
- val fr = MenuFragment.newInstance()
- fragmentManager?.beginTransaction()
- ?.setCustomAnimations(0, 0, 0, R.anim.slide_exit)
- ?.replace(R.id.root, fr)
- ?.addToBackStack("menu")
- ?.commit()
- }
- private fun setCameraPosition(location: Location) {
- mapBoxMap?.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(location.latitude, location.longitude), 13.0))
- }
- private fun updateCamera() {
- originLocation?.let {
- val latLngBounds = LatLngBounds.Builder()
- .include(LatLng(
- destinationPosition.latitude(),
- destinationPosition.longitude()))
- .include(LatLng(
- it.latitude,
- it.longitude))
- .build()
- val padding = requireNotNull(context).resources.getDimension(
- R.dimen.map_camera_bounds_padding).toInt()
- mapBoxMap?.animateCamera(
- CameraUpdateFactory.newLatLngBounds(latLngBounds,
- padding,
- padding,
- padding,
- padding), 1000, null)
- }
- }
- private fun onMapReady(map: MapboxMap) {
- mapBoxMap = map
- mapBoxMap?.setStyle(Style.MAPBOX_STREETS) {
- enableLocationComponent()
- initLocationEngine()
- addCoordinatesSource(it)
- }
- mapBoxMap?.addOnMapClickListener {
- view?.requestFocus()
- hideKeyboard()
- return@addOnMapClickListener true
- }
- addMarkers()
- requestLocation()
- }
- @SuppressWarnings("MissingPermission")
- private fun enableLocationComponent() {
- // Check if permissions are enabled and if not request
- if (PermissionsManager.areLocationPermissionsGranted(context)) {
- // Get an instance of the component
- val locationComponent = mapBoxMap?.locationComponent
- // Activate with a built LocationComponentActivationOptions object
- locationComponent?.activateLocationComponent(LocationComponentActivationOptions.builder(context!!, mapBoxMap?.style!!).build())
- // Enable to make component visible
- locationComponent?.isLocationComponentEnabled = true
- // Set the component's camera mode
- locationComponent?.cameraMode = CameraMode.TRACKING
- // Set the component's render mode
- locationComponent?.renderMode = RenderMode.COMPASS
- } else {
- // permissionsManager = PermissionsManager(this)
- // permissionsManager?.requestLocationPermissions(this)
- }
- }
- override fun onLocationItemLoaded(params: ArrayList<GetLocationsResult.Params>) {
- this.markersList = params
- // RealmHelper(realm).saveLocations(params)
- addMarkers()
- menu_buton_id.setDebounceOnClickListener {
- tabFragment = TabFragment.newInstance(markersList!!)
- val transaction = fragmentManager?.beginTransaction()
- transaction?.setCustomAnimations(R.anim.slide_enter, 0, R.anim.slide_enter, R.anim.slide_exit)
- transaction?.add(R.id.tab_fragment_container_id, tabFragment!!)?.addToBackStack(null)?.commit()
- hideKeyboard()
- direction_btn_container_id.clearAnimation()
- direction_btn_container_id.visibility = View.GONE
- filter_container_id.clearAnimation()
- filter_container_id.visibility = View.VISIBLE
- }
- }
- override fun onCategoriesLoad(body: ArrayList<Any>) {
- filtersList = body
- filter_container_id.setDebounceOnClickListener {
- val transaction = fragmentManager?.beginTransaction()
- transaction?.setCustomAnimations(R.anim.slide_up, 0, 0, R.anim.slide_down)
- val fragment = FilterFragment.newInstance(body)
- fragment.setTargetFragment(this@MainFragment, FILTER_FRAGMENT_REQUEST_CODE)
- transaction?.replace(R.id.root, fragment)?.addToBackStack(FilterFragment.newInstance(body).tag)?.commit()
- hideKeyboard()
- }
- }
- override val presenter: MainContract.Presenter = MainPresenterImpl()
- @SuppressLint("MissingPermission")
- override fun onStart() {
- super.onStart()
- // locationEngine?.requestLocationUpdates()
- // locationPlugin?.onStart()
- mapView.onStart()
- }
- override fun onResume() {
- super.onResume()
- mapView.onResume()
- val action = afterLanguageChangedAction
- afterLanguageChangedAction = null
- action?.invoke(Unit)
- }
- override fun onPause() {
- super.onPause()
- mapView.onPause()
- }
- override fun onStop() {
- super.onStop()
- // locationEngine?.removeLocationUpdates()
- // locationPlugin?.onStop()
- mapView.onStop()
- }
- override fun onLowMemory() {
- super.onLowMemory()
- mapView.onLowMemory()
- }
- override fun onDestroy() {
- super.onDestroy()
- // locationEngine?.deactivate()
- realm.close()
- }
- override fun onDestroyView() {
- mapView?.onDestroy()
- super.onDestroyView()
- }
- override fun onSaveInstanceState(outState: Bundle) {
- super.onSaveInstanceState(outState)
- mapView.onSaveInstanceState(outState)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement