Explorar o código

update: update models, tours and his viewmodel

Maksutka hai 1 semana
pai
achega
cdd29836c1

+ 1 - 1
TripHelper/app/src/main/java/com/example/triphelper/model/Hotels.kt

@@ -7,7 +7,7 @@ import kotlinx.serialization.Serializer
 @Serializable
 data class Hotels(
     val id: Int,
-    val city: Int,
+    val city: City,
     val rating: Int,
     val quantity_of_rooms: Int,
     val floors: Int,

+ 1 - 1
TripHelper/app/src/main/java/com/example/triphelper/model/Metro.kt

@@ -6,6 +6,6 @@ import kotlinx.serialization.Serializer
 @Serializable
 data class Metro(
     val id: Int,
-    val city: Int,
+    val city: City,
     val photo: String
 )

+ 4 - 4
TripHelper/app/src/main/java/com/example/triphelper/model/Organization_of_tours.kt

@@ -6,8 +6,8 @@ import kotlinx.serialization.Serializer
 @Serializable
 data class Organization_of_tours(
     val id: Int,
-    val tours: Int,
-    val attractions: Int,
-    val hotels: Int,
-    val restaurants: Int
+    val tours: Tours,
+    val attractions: Attractions,
+    val hotels: Hotels,
+    val restaurants: Restaurants
 )

+ 3 - 3
TripHelper/app/src/main/java/com/example/triphelper/model/Restaurants.kt

@@ -7,11 +7,11 @@ import kotlinx.serialization.Serializer
 @Serializable
 data class Restaurants(
     val id: Int,
-    val city: Int,
-    val currency: Int,
+    val city: City,
+    val currency: Currency,
     val name: String,
     val work_schedule: String,
-    val phone: Int,
+    val phone: String,
     val photo: String,
     val address: String,
     val basic_info: String,

+ 4 - 2
TripHelper/app/src/main/java/com/example/triphelper/view/RouteScreens/ChoiceLocation.kt

@@ -284,7 +284,7 @@ fun ChoiceLocation(navController: NavController, iconsRouteIsActivity: MutableSt
                         ),
                 ){
                     Text(
-                        text = "Не выбран город",
+                        text = viewModel.routeWrongText.value,
                         fontFamily = Roboto,
                         fontWeight = FontWeight.W600,
                         fontSize = 22.sp,
@@ -296,7 +296,9 @@ fun ChoiceLocation(navController: NavController, iconsRouteIsActivity: MutableSt
             }
             Row(modifier = Modifier.fillMaxWidth(0.6f).padding(top = 20.dp)) {
                 ButtonStyleBackSquare("Далее",33.sp) {
-                        navController.navigate("${NavigationRoutes.CH_TOUR}/${cityTitle.value}")
+                    viewModel.getCity(cityTitle.value)
+                    if(viewModel.routeWrong.value) navController.navigate(NavigationRoutes.TOURS)
+//                    "${NavigationRoutes.CH_TOUR}/${cityTitle.value}"
                 }
             }
         }

+ 78 - 33
TripHelper/app/src/main/java/com/example/triphelper/view/RouteScreens/RouteViewModel.kt

@@ -5,9 +5,12 @@ import androidx.compose.runtime.mutableStateOf
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import com.example.triphelper.domain.Constants
+import com.example.triphelper.model.Attractions
 import com.example.triphelper.model.City
 import com.example.triphelper.model.Country
+import com.example.triphelper.model.Organization_of_tours
 import com.example.triphelper.model.Rules
+import com.example.triphelper.model.Tours
 import dagger.hilt.android.lifecycle.HiltViewModel
 import io.github.jan.supabase.postgrest.from
 import io.github.jan.supabase.postgrest.query.Columns
@@ -23,7 +26,7 @@ import javax.inject.Inject
 
 
 @HiltViewModel
-class RouteViewModel@Inject constructor(): ViewModel(){
+class RouteViewModel @Inject constructor() : ViewModel() {
     private var _navigationTo = MutableStateFlow<String?>(null)
     val navigationTo = _navigationTo.asStateFlow()
 
@@ -43,14 +46,23 @@ class RouteViewModel@Inject constructor(): ViewModel(){
     val idCountry: StateFlow<Int?> = _idCountry.asStateFlow()
 
     var wrong = mutableStateOf(false)
+    var routeWrong = mutableStateOf(false)
+    var routeWrongText = mutableStateOf("")
 
-    fun getCountry(){
+    private val _titleToure: MutableStateFlow<String> = MutableStateFlow("")
+    val titleToure: Flow<String> = _titleToure.asStateFlow()
+
+    private val _orgTour: MutableStateFlow<List<Organization_of_tours>> = MutableStateFlow(listOf())
+    val orgTour: StateFlow<List<Organization_of_tours>> = _orgTour.asStateFlow()
+
+    fun getCountry() {
         viewModelScope.launch {
             try {
+                GetAttractions(1, "Сеул")
                 withContext(Dispatchers.IO) {
                     val response = Constants.supabase
                         .from("country")
-                        .select(){
+                        .select() {
                             order(column = "title", order = Order.ASCENDING)
                         }
                         .decodeList<Country>()
@@ -58,9 +70,11 @@ class RouteViewModel@Inject constructor(): ViewModel(){
                 }
             } catch (e: Exception) {
                 Log.e("getCountry", "Error retrieving country data", e)
+                routeWrong.value = false
             }
         }
     }
+
     suspend fun getIdCountry(titleCountry: String) {
         try {
             val response = Constants.supabase
@@ -73,72 +87,103 @@ class RouteViewModel@Inject constructor(): ViewModel(){
                 .decodeSingleOrNull<Country>()
             _idCountry.value = response?.id
             _titleCountry.value = response?.title.toString()
+            if (_idCountry.value == null) {
+                routeWrongText.value = "Не выбрана страна"
+                wrong.value = true
+            } else {
+                wrong.value = false
+            }
             Log.i("id", "${_idCountry.value}")
         } catch (e: Exception) {
             Log.e("getCountry", "Error retrieving country data", e)
+            routeWrong.value = false
         }
     }
-    fun getCity(countryTitle :String){
+
+    fun getCity(countryTitle: String) {
         viewModelScope.launch {
             try {
                 withContext(Dispatchers.IO) {
                     getIdCountry(countryTitle)
-                    if(_idCountry.value == null){
+                    if (_idCountry.value == null) {
                         wrong.value = true
-                    }
-                    else{
+                    } else {
                         val response = Constants.supabase
                             .from("city")
                             .select(
                                 Columns.raw(
-                                    "id, "+
-                                            "country(id,title,flag), "+
+                                    "id, " +
+                                            "country(id,title,flag), " +
                                             "title"
                                 )
-                            ){
+                            ) {
                                 order(column = "title", order = Order.ASCENDING)
                                 filter {
                                     _idCountry.value?.let { eq("country", it) }
                                 }
                             }
                             .decodeList<City>()
-                        if(response.isEmpty()) wrong.value = true
-                        else{
-                            _city.value = response
+                        _city.value = response
+                        if (_city.value == null) {
+                            wrong.value = true
+                            routeWrong.value = false
+                            routeWrongText.value = "Не выбранны данные"
+                        } else {
+
                             wrong.value = false
+                            routeWrong.value = true
                         }
-                        Log.i("City", "Done")
+                        Log.i("City", "${_city.value}")
                     }
                 }
             } catch (e: Exception) {
                 Log.e("getCountry", "Error retrieving country data", e)
+                routeWrong.value = false
             }
         }
     }
-    fun GetRules(title:String){
+
+    suspend fun getNameToure(numberTour: Int) {
+        try {
+            withContext(Dispatchers.IO) {
+                val response = Constants.supabase.from("tours")
+                    .select {
+                        filter {
+                            eq("id", numberTour)
+                        }
+                    }.decodeSingleOrNull<Tours>()
+                _titleToure.value = response?.title.toString()
+                Log.i("getCity", _titleToure.value)
+            }
+        } catch (e: Exception) {
+            Log.e("getCity", "Error")
+        }
+    }
+
+    suspend fun GetAttractions(numberTour: Int, titleCity:String) {
         viewModelScope.launch {
-            try{
-                getIdCountry(title)
-                val responce = Constants.supabase.from("rules").select(
+            withContext(Dispatchers.IO) {
+                val responce = Constants.supabase.from("organization_of_tours").select(
                     Columns.raw(
-                        "id, "+
-                                "country(id,title,flag), "+
-                                "laws, "+
-                                "rules_of_culture, "+
-                                "gestures"
+                        "id, " +
+                                "tours(*), " +
+                                "attractions(id,city(id,country(id,title,flag),title),currency(id,country(id,title,flag),title),name,visiting,work_schedule,price_showing,photo,history,address,route,schedule_more,price,coordinates), " +
+                                "hotels(id,city(id,country(id,title,flag),title),rating,quantity_of_rooms,floors,name,photo_hotel,address,basic_info,interior,photo_interior,rooms,photo_room,services,price,coordinates), " +
+                                "restaurants(id,city(id,country(id,title,flag),title),currency(id,country(id,title,flag),title),name,work_schedule,phone,photo,address,basic_info,interior,recommendations,price,average_check,coordinates)"
                     )
-                ){
+                ) {
                     filter {
-                        _idCountry.value?.let { eq("country", it) }
+                        eq("tours.id", numberTour)
+//                        and {
+//
+//                            eq("attractions.city.title",titleCity)
+//
+//                        }
+
                     }
-                }.decodeList<Rules>()
-                _ruleses.value = responce
-                wrong.value = true
-                Log.i("Rules","${_idCountry.value}")
-            }
-            catch (e: Exception){
-                Log.e("Error","error")
-                wrong.value = false
+                }.decodeList<Organization_of_tours>()
+                _orgTour.value = responce
+                Log.i("tours", "${_orgTour.value}")
             }
         }
     }

+ 194 - 10
TripHelper/app/src/main/java/com/example/triphelper/view/RouteScreens/Tours.kt

@@ -1,31 +1,215 @@
 package com.example.triphelper.view.RouteScreens
 
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
 import androidx.compose.foundation.content.MediaType.Companion.Text
 import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import androidx.hilt.navigation.compose.hiltViewModel
 import androidx.navigation.NavController
+import com.example.testirovanye_supabase.R
+import com.example.triphelper.view.style.StyleMainFone
+import com.example.triphelper.view.theme.RobotoB
+import com.example.triphelper.view.theme.SeoulBold
+import io.github.jan.supabase.realtime.Column
 
+//titleCity : String, numberTour: String,
 @Composable
-fun Tours(navController: NavController, iconsRouteIsActivity: MutableState<Boolean>, titleCity : String, numberTour: String, viewModel: RouteViewModel = hiltViewModel()){
+fun Tours(navController: NavController, iconsRouteIsActivity: MutableState<Boolean>,  viewModel: RouteViewModel = hiltViewModel()){
     iconsRouteIsActivity.value = true
-    numberTour.toInt()
+    val titleToure by viewModel.titleToure.collectAsState("")
+    val number = 1
+    val titleCity = "Сеул"
+    var attarctionsColumn by remember { mutableStateOf(true) }
+    var hotelColumn by remember { mutableStateOf(false) }
+    var restouranceColumn by remember { mutableStateOf(false) }
+    var metroColumn by remember { mutableStateOf(false) }
+//    numberTour.toInt()
+
+    LaunchedEffect(key1 = viewModel.navigationTo) {
+        viewModel.navigationTo.collect { destination ->
+            destination?.let {
+                navController.navigate(destination)
+            }
+        }
+    }
+    LaunchedEffect(Unit) {
+        viewModel.getNameToure(number)
+    }
+    viewModel.getCountry()
+    StyleMainFone()
     Column(
-        modifier = Modifier.fillMaxSize(),
-        verticalArrangement = Arrangement.Center,
+        modifier = Modifier.fillMaxSize().padding(top = 65.dp),
         horizontalAlignment = Alignment.CenterHorizontally
     ){
-        Text(
-            text = titleCity
-        )
-        Text(
-            text = numberTour
-        )
+        Box(
+            modifier = Modifier
+                .fillMaxWidth(0.8f)
+                .background(Color(0xFF510B3C), RoundedCornerShape(10.dp))
+                .height(50.dp),
+            contentAlignment = Alignment.Center
+        ){
+            Text(
+                text = "${titleToure} тур",
+                fontSize = 32.sp,
+                fontFamily = RobotoB,
+                color = Color.White,
+                textAlign = TextAlign.Center
+            )
+        }
+        Column(modifier = Modifier.padding(top = 10.dp)){
+            Text(
+                text = titleCity,
+                fontSize = 36.sp,
+                fontFamily = SeoulBold,
+                fontWeight = FontWeight.Bold,
+                color = Color(0xFF510B3C),
+                textAlign = TextAlign.Center
+            )
+        }
+        Row(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(top = 10.dp)
+                .fillMaxHeight(0.1f)
+                .background(Color.White)
+                .border(
+                    width = 5.dp,
+                    color = Color(0xFF510B3C)
+                ),
+            verticalAlignment = Alignment.CenterVertically,
+            horizontalArrangement = Arrangement.SpaceEvenly
+        ){
+            Box(
+                modifier = Modifier
+                    .fillMaxHeight(0.9f)
+                    .background(if(attarctionsColumn) Color(0xFFDC5B6E).copy(alpha = 0.4f) else Color.Transparent)
+            ){
+                IconButton(
+                    onClick = {
+                        attarctionsColumn = true
+                        hotelColumn = false
+                        restouranceColumn = false
+                        metroColumn = false
+                        viewModel.getCountry()
+                    },
+                    modifier = Modifier
+                        .size(60.dp)
+                ) {
+                    Icon(
+                        painter = painterResource(id = R.drawable.attractions_icon),
+                        contentDescription = "Достопримечательности",
+                        tint = Color.Unspecified,
+                        modifier = Modifier.size(50.dp)
+                    )
+                }
+            }
+            Box(
+                modifier = Modifier
+                    .fillMaxHeight(0.9f)
+                    .background(if(hotelColumn) Color(0xFFDC5B6E).copy(alpha = 0.4f) else Color.Transparent)
+            ){
+                IconButton(
+                    onClick = {
+                        attarctionsColumn = false
+                        hotelColumn = true
+                        restouranceColumn = false
+                        metroColumn = false
+                    },
+                    modifier = Modifier
+                        .size(60.dp)
+                ) {
+                    Icon(
+                        painter = painterResource(id = R.drawable.hotel_icons),
+                        contentDescription = "Отели",
+                        tint = Color.Unspecified,
+                        modifier = Modifier.size(50.dp)
+                    )
+                }
+            }
+            Box(
+                modifier = Modifier
+                    .fillMaxHeight(0.9f)
+                    .background(if(restouranceColumn) Color(0xFFDC5B6E).copy(alpha = 0.4f) else Color.Transparent)
+            ){
+                IconButton(
+                    onClick = {
+                        attarctionsColumn = false
+                        hotelColumn = false
+                        restouranceColumn = true
+                        metroColumn = false
+                    },
+                    modifier = Modifier
+                        .size(60.dp)
+                ) {
+                    Icon(
+                        painter = painterResource(id = R.drawable.restourants_icons),
+                        contentDescription = "Рестораны",
+                        tint = Color.Unspecified,
+                        modifier = Modifier.size(45.dp)
+                    )
+                }
+            }
+            Box(
+                modifier = Modifier
+                    .fillMaxHeight(0.9f)
+                    .background(if(metroColumn) Color(0xFFDC5B6E).copy(alpha = 0.4f) else Color.Transparent)
+            ){
+                IconButton(
+                    onClick = {
+                        attarctionsColumn = false
+                        hotelColumn = false
+                        restouranceColumn = false
+                        metroColumn = true
+                    },
+                    modifier = Modifier
+                        .size(60.dp)
+                ) {
+                    Icon(
+                        painter = painterResource(id = R.drawable.metro_icons),
+                        contentDescription = "Метро",
+                        tint = Color.Unspecified,
+                        modifier = Modifier.size(45.dp)
+                    )
+                }
+            }
+        }
+        if(attarctionsColumn){
+
+        }
+        if(hotelColumn){
+
+        }
     }
 }

+ 17 - 8
TripHelper/app/src/main/java/com/example/triphelper/view/navigation/Navigation.kt

@@ -23,7 +23,7 @@ fun Navigation(controller: NavHostController, barsIsVisible: MutableState<Boolea
                iconsLawIsActivity: MutableState<Boolean>, iconsProfileIsActivity: MutableState<Boolean>,
                iconsAdviceIsActivity: MutableState<Boolean>,iconsMainIsActivity: MutableState<Boolean>, iconsRoutsIsActivity: MutableState<Boolean>) {
     NavHost(navController = controller,
-        startDestination = NavigationRoutes.CH_LOC)
+        startDestination = NavigationRoutes.TOURS)
     {
         composable( NavigationRoutes.AUTH){
             barsIsVisible.value = false
@@ -86,19 +86,28 @@ fun Navigation(controller: NavHostController, barsIsVisible: MutableState<Boolea
                 ChoiceTour(controller, iconsRoutsIsActivity, titleCity)
             }
         }
-        composable(route =  "${NavigationRoutes.TOURS}/{titleCity}/{numberToure}"){
-                backStackEntry ->
-            val titleCity = backStackEntry.arguments?.getString("titleCity")
-            val numberToure = backStackEntry.arguments?.getString("numberToure")
+//        composable(route =  "${NavigationRoutes.TOURS}/{titleCity}/{numberToure}"){
+//                backStackEntry ->
+//            val titleCity = backStackEntry.arguments?.getString("titleCity")
+//            val numberToure = backStackEntry.arguments?.getString("numberToure")
+//            barsIsVisible.value = true
+//            iconsLawIsActivity.value = false
+//            iconsAdviceIsActivity.value = false
+//            iconsProfileIsActivity.value = false
+//            iconsMainIsActivity.value = false
+//            iconsRoutsIsActivity.value = false
+//            if (titleCity != null && numberToure != null) {
+//                Tours(controller, iconsRoutsIsActivity, titleCity, numberToure)
+//            }
+//        }
+        composable(NavigationRoutes.TOURS){
             barsIsVisible.value = true
             iconsLawIsActivity.value = false
             iconsAdviceIsActivity.value = false
             iconsProfileIsActivity.value = false
             iconsMainIsActivity.value = false
             iconsRoutsIsActivity.value = false
-            if (titleCity != null && numberToure != null) {
-                Tours(controller, iconsRoutsIsActivity, titleCity, numberToure)
-            }
+            Tours(controller, iconsRoutsIsActivity)
         }
     }
 }

+ 24 - 0
TripHelper/app/src/main/res/drawable/attractions_icon.xml

@@ -0,0 +1,24 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="41dp"
+    android:height="34dp"
+    android:viewportWidth="41"
+    android:viewportHeight="34">
+  <path
+      android:pathData="M3.688,14.134V27.113H6.194C7.497,27.113 8.554,26.369 8.554,25.452V12.473H6.046C4.744,12.473 3.688,13.217 3.688,14.134Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M13.273,14.134V27.113H15.781C17.083,27.113 18.141,26.369 18.141,25.452V12.473H15.633C14.329,12.473 13.273,13.217 13.273,14.134Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M22.859,14.134V27.113H25.367C26.668,27.113 27.727,26.369 27.727,25.452V12.473H25.22C23.916,12.473 22.859,13.217 22.859,14.134Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M32.446,14.134V27.113H34.953C36.255,27.113 37.313,26.369 37.313,25.452V12.473H34.806C33.501,12.473 32.446,13.217 32.446,14.134Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M40.016,9.74C40.016,9.109 39.143,8.179 38.066,7.663L22.893,0.395C21.816,-0.12 20.057,-0.133 18.964,0.366L2.961,7.692C1.869,8.192 0.982,9.108 0.982,9.739V10.882H40.016C40.016,10.882 40.016,10.371 40.016,9.74Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M0,32.339C0,33.256 1.055,34 2.36,34H38.64C39.943,34 41,33.256 41,32.339V29.363H0V32.339Z"
+      android:fillColor="#510B3C"/>
+</vector>

+ 54 - 0
TripHelper/app/src/main/res/drawable/hotel_icons.xml

@@ -0,0 +1,54 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="41dp"
+    android:height="34dp"
+    android:viewportWidth="41"
+    android:viewportHeight="34">
+  <path
+      android:pathData="M37.875,34H3.125C1.404,33.987 0.012,32.483 0,30.624V9.547C0.012,7.687 1.404,6.182 3.124,6.17H37.875C39.596,6.182 40.988,7.687 41,9.545V30.627C41,32.49 39.603,34 37.879,34H37.875ZM3.125,8.422C3.122,8.422 3.118,8.422 3.116,8.422C2.546,8.422 2.084,8.921 2.084,9.537V9.548V30.628V30.638C2.084,31.254 2.546,31.753 3.116,31.753H3.126H37.876H37.886C38.456,31.753 38.917,31.254 38.917,30.638C38.917,30.634 38.917,30.631 38.917,30.627V9.547C38.917,9.544 38.917,9.54 38.917,9.537C38.917,8.921 38.456,8.422 37.886,8.422C37.882,8.422 37.879,8.422 37.875,8.422H3.125Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M29.709,2.702V2.707C29.709,3.376 29.207,3.917 28.59,3.917C28.588,3.917 28.586,3.917 28.584,3.917H12.419C12.417,3.917 12.415,3.917 12.413,3.917C11.795,3.917 11.294,3.375 11.294,2.707C11.294,2.706 11.294,2.703 11.294,2.702C11.294,2.7 11.294,2.697 11.294,2.696C11.294,2.027 11.796,1.486 12.413,1.486H12.419H28.584C29.195,1.516 29.683,2.044 29.709,2.702Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M33.626,3.603V3.622C33.626,4.631 32.869,5.449 31.936,5.449C31.93,5.449 31.923,5.449 31.916,5.449C31.911,5.449 31.906,5.449 31.899,5.449C30.966,5.449 30.21,4.631 30.21,3.622C30.21,3.615 30.21,3.608 30.21,3.601V1.846C30.21,1.84 30.21,1.833 30.21,1.826C30.21,0.817 30.966,0 31.899,0H31.919H31.936C32.869,0 33.626,0.817 33.626,1.826V1.847V1.846V3.603Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M10.792,3.603V3.622C10.792,4.631 10.035,5.449 9.102,5.449C9.095,5.449 9.089,5.449 9.082,5.449C9.077,5.449 9.072,5.449 9.065,5.449C8.132,5.449 7.376,4.631 7.376,3.622C7.376,3.615 7.376,3.608 7.376,3.601V1.846C7.376,1.84 7.376,1.833 7.376,1.826C7.376,0.817 8.132,0 9.065,0H9.085H9.084H9.102C10.035,0 10.792,0.817 10.792,1.826V1.847V1.846V3.603Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M39.085,2.702V2.707C39.085,3.376 38.583,3.917 37.965,3.917C37.964,3.917 37.961,3.917 37.96,3.917H35.17C35.168,3.917 35.166,3.917 35.164,3.917C34.546,3.917 34.045,3.375 34.045,2.707C34.045,2.706 34.045,2.703 34.045,2.702C34.045,2.7 34.045,2.697 34.045,2.696C34.045,2.027 34.547,1.486 35.164,1.486H35.17H37.96C38.571,1.516 39.059,2.044 39.085,2.702Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M6.917,2.702V2.707C6.917,3.376 6.415,3.917 5.797,3.917H3.042C3.041,3.917 3.038,3.917 3.037,3.917C2.418,3.917 1.917,3.375 1.917,2.707C1.917,2.706 1.917,2.703 1.917,2.702C1.917,2.7 1.917,2.697 1.917,2.696C1.917,2.027 2.42,1.486 3.037,1.486H3.042H5.833C6.433,1.519 6.91,2.049 6.917,2.702Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M7.416,20.624V23.457H9.958V20.624H11.5V28.01H9.958V24.902H7.416V28.01H5.875V20.624H7.416Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M19.125,24.229C19.137,24.34 19.143,24.467 19.143,24.596C19.143,26.558 17.67,28.149 15.855,28.149C15.818,28.149 15.78,28.149 15.744,28.148H15.749C15.737,28.148 15.724,28.148 15.711,28.148C13.95,28.148 12.524,26.606 12.524,24.704C12.524,24.585 12.53,24.466 12.542,24.35L12.54,24.364C12.532,24.273 12.528,24.17 12.528,24.063C12.528,22.089 14.009,20.489 15.835,20.489H15.876H15.873C15.897,20.489 15.926,20.488 15.953,20.488C17.711,20.488 19.135,22.028 19.135,23.926C19.135,24.032 19.131,24.139 19.122,24.242L19.123,24.229H19.125ZM14.209,24.319C14.209,25.761 14.838,26.795 15.875,26.795C16.912,26.795 17.5,25.714 17.5,24.273C17.5,22.922 16.917,21.797 15.834,21.797C14.793,21.794 14.209,22.876 14.209,24.316V24.319Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M21.208,22.021H19.376V20.624H24.627V22.021H22.753V28.01H21.211L21.208,22.021Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M29.501,24.857H27.001V26.614H29.832V27.965H25.417V20.624H29.625V21.975H26.959V23.507H29.459V24.858L29.501,24.857Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M30.875,20.624H32.417V26.614H35.125V28.01H30.875V20.624Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M20.501,15.898L18.25,17.208L18.67,14.507L16.875,12.562L19.375,12.156L20.499,9.728L21.624,12.161L24.124,12.566L22.332,14.502L22.751,17.204L20.501,15.898Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M28.292,16.211L26.584,17.201L26.917,15.13L25.541,13.689L27.415,13.42L28.289,11.529L29.123,13.42L31.039,13.689L29.664,15.131L29.955,17.203L28.292,16.211Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M33.249,16.572L32.125,17.203L32.334,15.851L31.418,14.906L32.669,14.679L33.252,13.464L33.795,14.679L35.045,14.906L34.171,15.851L34.381,17.203L33.249,16.572Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M12.75,16.211L14.416,17.201L14.083,15.13L15.458,13.688L13.584,13.419L12.752,11.529L11.877,13.42L10.002,13.689L11.377,15.131L11.043,17.203L12.75,16.211Z"
+      android:fillColor="#510B3C"/>
+  <path
+      android:pathData="M7.751,16.572L8.875,17.203L8.665,15.851L9.582,14.906L8.331,14.679L7.749,13.464L7.207,14.679L5.956,14.906L6.872,15.851L6.663,17.203L7.751,16.572Z"
+      android:fillColor="#510B3C"/>
+</vector>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 6 - 0
TripHelper/app/src/main/res/drawable/metro_icons.xml


+ 10 - 0
TripHelper/app/src/main/res/drawable/restourants_icons.xml

@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="41dp"
+    android:height="34dp"
+    android:viewportWidth="41"
+    android:viewportHeight="34">
+  <path
+      android:pathData="M32.467,16.997C32.467,21.56 31.303,25.457 28.971,28.673C26.635,31.893 23.812,33.503 20.503,33.503C17.206,33.503 14.384,31.898 12.045,28.673C9.709,25.457 8.535,21.56 8.535,16.997C8.535,12.447 9.706,8.568 12.045,5.339C14.39,2.118 17.209,0.499 20.503,0.499C23.812,0.499 26.635,2.114 28.971,5.339C31.299,8.568 32.467,12.447 32.467,16.997ZM5.462,13.956C6.513,12.967 7.04,11.674 6.95,8.716V1.111C6.94,0.048 5.542,-0.081 5.472,1.111L5.418,7.28C5.415,8.435 4.157,8.472 4.161,7.28L4.214,0.899C4.197,-0.242 2.863,-0.357 2.846,0.899C2.846,2.671 2.793,5.509 2.793,7.28C2.859,8.398 1.692,8.545 1.722,7.28L1.775,0.941C1.745,0.08 1.058,-0.228 0.591,0.177C0.093,0.614 0.194,1.493 0.173,2.233L0,9.511C0.027,11.628 0.43,13.348 1.632,14.08C1.815,14.19 2.069,14.278 2.362,14.337L1.949,32.086C1.925,33.14 2.549,34 3.28,34H3.447C4.271,34 4.968,33.029 4.945,31.847L4.581,14.333C4.965,14.25 5.282,14.126 5.462,13.956ZM35.613,31.552L35.593,15.612C31.54,12.382 32.831,-0.062 36.888,0.007C41.819,0.085 42.403,14.029 38.162,15.561L38.476,31.617C38.536,34.653 35.617,34.934 35.613,31.552ZM27.469,16.983C27.469,19.642 26.792,21.91 25.427,23.792C24.066,25.664 22.421,26.607 20.493,26.607C18.577,26.607 16.933,25.664 15.571,23.792C14.21,21.91 13.529,19.642 13.529,16.983C13.529,14.342 14.21,12.074 15.571,10.202C16.936,8.329 18.577,7.386 20.493,7.386C24.366,7.391 27.469,11.637 27.469,16.983ZM29.101,16.983C29.101,13.716 28.267,10.924 26.588,8.61C24.91,6.296 22.878,5.146 20.493,5.146C18.114,5.146 16.088,6.296 14.42,8.61C12.742,10.924 11.898,13.716 11.898,16.983C11.898,20.258 12.742,23.051 14.42,25.374C16.088,27.693 18.114,28.857 20.493,28.857C22.875,28.857 24.907,27.693 26.588,25.374C28.263,23.046 29.101,20.254 29.101,16.983Z"
+      android:fillColor="#510B3C"
+      android:fillType="evenOdd"/>
+</vector>

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio