Skip to content

Commit

Permalink
UI updates
Browse files Browse the repository at this point in the history
  • Loading branch information
ztimms73 committed Apr 17, 2023
1 parent 5286283 commit efbeaef
Show file tree
Hide file tree
Showing 3 changed files with 177 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@ package org.xtimms.ridebus.ui.routes.details.info
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import com.yandex.mapkit.MapKitFactory
import com.yandex.mapkit.RequestPoint
import com.yandex.mapkit.RequestPointType
import com.yandex.mapkit.directions.DirectionsFactory
import com.yandex.mapkit.directions.driving.*
import com.yandex.mapkit.directions.driving.DrivingOptions
import com.yandex.mapkit.directions.driving.DrivingRoute
import com.yandex.mapkit.directions.driving.DrivingRouter
import com.yandex.mapkit.directions.driving.DrivingSession
import com.yandex.mapkit.directions.driving.VehicleOptions
import com.yandex.mapkit.geometry.BoundingBox
import com.yandex.mapkit.geometry.Point
import com.yandex.mapkit.logo.Alignment
import com.yandex.mapkit.logo.HorizontalAlignment
import com.yandex.mapkit.logo.VerticalAlignment
import com.yandex.mapkit.map.CameraPosition
import com.yandex.mapkit.map.MapObjectCollection
import com.yandex.mapkit.transport.masstransit.*
import com.yandex.runtime.Error
import com.yandex.runtime.network.NetworkError
import com.yandex.runtime.network.UnauthorizedError
Expand Down Expand Up @@ -55,60 +57,98 @@ class RouteInfoHeaderAdapter(
private lateinit var binding: RouteDetailHeaderBinding

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HeaderViewHolder {
binding = RouteDetailHeaderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
binding =
RouteDetailHeaderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
updateDetailsPosition()

MapKitFactory.initialize(parent.context)
MapKitFactory.getInstance()

for (coordinate in db.routesAndStopsDao().getStopsCoordinates(route.routeId)) {
stopsPoints.add(
Point(
coordinate.latitude,
coordinate.longitude
)
)
}
val constraintLayout: ConstraintLayout = binding.root
val constraintSet = ConstraintSet()

val boundingBox = BoundingBox(
Point(stopsPoints.first().latitude, stopsPoints.first().longitude),
Point(stopsPoints.last().latitude, stopsPoints.last().longitude)
)
if (db.routesAndStopsDao().getStopsCoordinates(route.routeId).isNotEmpty()) {
for (coordinate in db.routesAndStopsDao().getStopsCoordinates(route.routeId)) {
stopsPoints.add(
Point(
coordinate.latitude,
coordinate.longitude
)
)
}

val cameraPosition = binding.map.map.cameraPosition(boundingBox)
val boundingBox = BoundingBox(
Point(stopsPoints.first().latitude, stopsPoints.last().longitude),
Point(stopsPoints.last().latitude, stopsPoints.first().longitude)
)

binding.routeSummary.expanded = isTablet
binding.map.map.apply {
logo.setAlignment(Alignment(HorizontalAlignment.RIGHT, VerticalAlignment.TOP))
isNightModeEnabled = parent.context.isNightMode()
/*isRotateGesturesEnabled = false
isScrollGesturesEnabled = false
isTiltGesturesEnabled = false
isZoomGesturesEnabled = false*/
isModelsEnabled = false
move(CameraPosition(cameraPosition.target, cameraPosition.zoom - 0.8f, cameraPosition.azimuth, cameraPosition.tilt))
}
val cameraPosition = binding.mapView.map.cameraPosition(boundingBox)

drivingRouter = DirectionsFactory.getInstance().createDrivingRouter()
mapObjects = binding.map.map.mapObjects.addCollection()
val drivingOptions = DrivingOptions()
val vehicleOptions = VehicleOptions()
val requestPoints: ArrayList<RequestPoint> = ArrayList()
constraintSet.clone(constraintLayout)
constraintSet.connect(
R.id.backdrop_overlay,
ConstraintSet.BOTTOM,
R.id.map_view,
ConstraintSet.BOTTOM,
0
)
constraintSet.applyTo(constraintLayout)
binding.mapView.visibility = View.VISIBLE
binding.backdrop.visibility = View.GONE

binding.mapView.map.apply {
isNightModeEnabled = parent.context.isNightMode()
isRotateGesturesEnabled = false
isScrollGesturesEnabled = false
isTiltGesturesEnabled = false
isZoomGesturesEnabled = false
isModelsEnabled = false
move(
CameraPosition(
cameraPosition.target,
cameraPosition.zoom - 0.8f,
cameraPosition.azimuth,
cameraPosition.tilt
)
)
}

for (stopLocation in stopsPoints) {
requestPoints.add(
RequestPoint(
Point(
stopLocation.latitude,
stopLocation.longitude
),
RequestPointType.WAYPOINT,
null
drivingRouter = DirectionsFactory.getInstance().createDrivingRouter()
mapObjects = binding.mapView.map.mapObjects.addCollection()
val drivingOptions = DrivingOptions()
val vehicleOptions = VehicleOptions()
val requestPoints: ArrayList<RequestPoint> = ArrayList()

for (stopLocation in stopsPoints) {
requestPoints.add(
RequestPoint(
Point(
stopLocation.latitude,
stopLocation.longitude
),
RequestPointType.WAYPOINT,
null
)
)
}

drivingSession =
drivingRouter!!.requestRoutes(requestPoints, drivingOptions, vehicleOptions, this)
} else {
constraintSet.clone(constraintLayout)
constraintSet.connect(
R.id.backdrop_overlay,
ConstraintSet.BOTTOM,
R.id.backdrop,
ConstraintSet.BOTTOM,
0
)
constraintSet.applyTo(constraintLayout)
binding.mapView.visibility = View.GONE
binding.backdrop.visibility = View.VISIBLE
}

drivingSession = drivingRouter!!.requestRoutes(requestPoints, drivingOptions, vehicleOptions, this)
binding.routeSummary.expanded = isTablet

return HeaderViewHolder(binding.root)
}
Expand Down Expand Up @@ -155,17 +195,36 @@ class RouteInfoHeaderAdapter(
* Update the view with route information.
*/
private fun setRouteInfo() {
if (route.transportId == MINIBUS && preferences.isVisibleAttentionNote().get()) binding.noteChip.visibility = View.VISIBLE
if (route.transportId == MINIBUS && preferences.isVisibleAttentionNote()
.get()
) {
binding.noteChip.visibility = View.VISIBLE
}

binding.noteChip.clicks()
.onEach { controller.showAttentionDialog() }
.launchIn(controller.viewScope)

when (route.transportId) {
BUS -> binding.circleTransport.setBackgroundColor(itemView.context.getThemeColor(R.attr.busPrimaryContainer))
MINIBUS -> binding.circleTransport.setBackgroundColor(itemView.context.getThemeColor(R.attr.minibusPrimaryContainer))
EXPRESS -> binding.circleTransport.setBackgroundColor(itemView.context.getThemeColor(R.attr.expressPrimaryContainer))
TRAM -> binding.circleTransport.setBackgroundColor(itemView.context.getThemeColor(R.attr.tramPrimaryContainer))
BUS -> binding.circleTransport.setBackgroundColor(
itemView.context.getThemeColor(R.attr.busPrimaryContainer)
)

MINIBUS -> binding.circleTransport.setBackgroundColor(
itemView.context.getThemeColor(
R.attr.minibusPrimaryContainer
)
)

EXPRESS -> binding.circleTransport.setBackgroundColor(
itemView.context.getThemeColor(
R.attr.expressPrimaryContainer
)
)

TRAM -> binding.circleTransport.setBackgroundColor(
itemView.context.getThemeColor(R.attr.tramPrimaryContainer)
)
}

when (route.transportId) {
Expand All @@ -176,10 +235,21 @@ class RouteInfoHeaderAdapter(
}

when (route.transportId) {
BUS -> binding.type.setColorFilter(itemView.context.getThemeColor(R.attr.busOnPrimaryContainer))
MINIBUS -> binding.type.setColorFilter(itemView.context.getThemeColor(R.attr.minibusOnPrimaryContainer))
EXPRESS -> binding.type.setColorFilter(itemView.context.getThemeColor(R.attr.expressOnPrimaryContainer))
TRAM -> binding.type.setColorFilter(itemView.context.getThemeColor(R.attr.tramOnPrimaryContainer))
BUS -> binding.type.setColorFilter(
itemView.context.getThemeColor(R.attr.busOnPrimaryContainer)
)

MINIBUS -> binding.type.setColorFilter(
itemView.context.getThemeColor(R.attr.minibusOnPrimaryContainer)
)

EXPRESS -> binding.type.setColorFilter(
itemView.context.getThemeColor(R.attr.expressOnPrimaryContainer)
)

TRAM -> binding.type.setColorFilter(
itemView.context.getThemeColor(R.attr.tramOnPrimaryContainer)
)
}

// Update number TextView
Expand Down Expand Up @@ -251,21 +321,25 @@ class RouteInfoHeaderAdapter(
binding.routeSummary.setTags(tags)
binding.routeSummary.description = view.context.getString(R.string.route_direction) +
": " + route.following + "\n\n" + view.context.getString(R.string.working_hours) +
": " + route.workingHours + "\n\n" + view.context.getString(R.string.additional_info) +
": " + route.techInfo + "\n\n" + view.context.getString(R.string.carrier_company) +
": " + route.workingHours + "\n\n" + view.context.getString(
R.string.additional_info
) +
": " + route.techInfo + "\n\n" + view.context.getString(
R.string.carrier_company
) +
": " + route.carrierCompany
}
}

override fun onViewAttachedToWindow(holder: HeaderViewHolder) {
super.onViewAttachedToWindow(holder)
MapKitFactory.getInstance().onStart()
binding.map.onStart()
binding.mapView.onStart()
}

override fun onViewDetachedFromWindow(holder: HeaderViewHolder) {
MapKitFactory.getInstance().onStop()
binding.map.onStop()
binding.mapView.onStop()
super.onViewDetachedFromWindow(holder)
}

Expand All @@ -281,6 +355,7 @@ class RouteInfoHeaderAdapter(
is UnauthorizedError -> {
errorMessage = controller.resources?.getString(R.string.invalid_api_key)
}

is NetworkError -> {
errorMessage = controller.resources?.getString(R.string.network_error_message)
}
Expand Down
27 changes: 24 additions & 3 deletions app/src/main/res/layout/route_detail_header.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,44 @@
android:orientation="vertical">

<com.yandex.mapkit.mapview.MapView
android:id="@+id/map"
android:id="@+id/map_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="-48dp"
app:layout_constraintBottom_toBottomOf="@+id/details"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/backdrop"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="-32dp"
android:alpha="0.2"
android:src="@drawable/backdrop"
android:scaleType="centerCrop"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/details"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<View
android:id="@+id/backdrop_overlay_top"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/backdrop_gradient_270"
android:backgroundTint="?android:attr/colorBackground"
app:layout_constraintTop_toTopOf="@+id/map_view" />

<View
android:id="@+id/backdrop_overlay"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@drawable/backdrop_gradient_90"
android:backgroundTint="?android:attr/colorBackground"
app:layout_constraintBottom_toBottomOf="@+id/map"
app:layout_constraintBottom_toBottomOf="@+id/map_view"
app:layout_constraintTop_toTopOf="parent" />

<androidx.constraintlayout.widget.Barrier
Expand Down Expand Up @@ -60,7 +81,7 @@
android:layout_height="wrap_content"
android:elevation="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<com.google.android.material.imageview.ShapeableImageView
Expand Down
20 changes: 20 additions & 0 deletions app/src/main/res/layout/route_detail_stops_header.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
Expand All @@ -20,4 +21,23 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Провайдер карт"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/stops_label"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-4dp"
android:layout_marginEnd="-8dp"
android:src="@drawable/yandex_logo_en_white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />

</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit efbeaef

Please sign in to comment.