Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import android.os.Looper
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.animation.Animation
import android.view.animation.TranslateAnimation
import android.widget.ArrayAdapter
import android.widget.AutoCompleteTextView
import android.widget.Button
Expand Down Expand Up @@ -102,7 +104,6 @@ import com.ilya.meetmapkmp.Map.ViewModel.PersonalizedMarkersViewModel
import com.ilya.meetmapkmp.Map.ViewModel.PersonalizedMarkersViewModelFactory
import com.ilya.meetmapkmp.R
import com.ilya.meetmapkmp.SocialMap.SocialMapActivity
import com.ilya.meetmapkmp.SocialMap.ViewModel.FriendsViewModel
import com.ilya.reaction.logik.PreferenceHelper.getUserKey
import decodePoly
import generateUID
Expand Down Expand Up @@ -170,6 +171,11 @@ class Map_Activity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnPolyli
private var isItemDecorationAdded = false // Флаг
private val webSocketManager = WebSocketManager(client, this)
val markerDataMap: MutableMap<Marker, MarkerData> = ConcurrentHashMap()
private lateinit var button2: View
private lateinit var button3: View
private lateinit var routeButton: View
private var isExpanded = false // Флаг для отслеживания состояния


private companion object {
private const val MY_PERMISSIONS_REQUEST_LOCATION = 1
Expand All @@ -190,6 +196,11 @@ class Map_Activity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnPolyli
setContentView(R.layout.activity_map)


button2 = findViewById(R.id.button2)
button3 = findViewById(R.id.button3)
routeButton = findViewById(R.id.routeButton)


var PersonalizedMarkersViewModel = ViewModelProvider(
this,
PersonalizedMarkersViewModelFactory(applicationContext)
Expand Down Expand Up @@ -512,7 +523,7 @@ class Map_Activity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnPolyli

val locationAutoCompleteTextView = findViewById<AutoCompleteTextView>(R.id.locationAutoCompleteTextView)
val findButton = findViewById<ImageView>(R.id.findButton)
val routeButton = findViewById<ImageView>(R.id.routeButton)
//+val routeButton = findViewById<ImageView>(R.id.routeButton)
val socialbutton = findViewById<ImageView>(R.id.social)


Expand Down Expand Up @@ -615,22 +626,82 @@ class Map_Activity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnPolyli
// Инициализация объекта Polyline
polyline = mMap.addPolyline(PolylineOptions().width(5f).color(android.graphics.Color.BLUE))


var isRouteDrawn = false
// routeButton.setOnClickListener {
// if (isRouteDrawn) {
// currentPolyline?.remove()
// removeMarkers()
// isRouteDrawn = false
// } else {
// findLocation_route()
// isRouteDrawn = true
// }
// }
// Установка обработчика нажатия на кнопку
routeButton.setOnClickListener {
if (isRouteDrawn) {
currentPolyline?.remove()
removeMarkers()
isRouteDrawn = false
if (isExpanded) {
collapseMenu()
} else {
findLocation_route()
isRouteDrawn = true
expandMenu()
}
isExpanded = !isExpanded
}
}
}
}, 200) // Задержка в 0.2 секунду перед выполнением кода
}
}

// Метод для раскрытия меню
private fun expandMenu() {
// Показать кнопки
button2.visibility = View.VISIBLE
button3.visibility = View.VISIBLE

// Анимация перемещения кнопок влево
val animationButton2 = TranslateAnimation(0f, -60f, 0f, 0f).apply {
duration = 400
fillAfter = true
}
button2.startAnimation(animationButton2)

val animationButton3 = TranslateAnimation(0f, -120f, 0f, 0f).apply {
duration = 400
fillAfter = true
}
button3.startAnimation(animationButton3)
}

// Метод для сворачивания меню
private fun collapseMenu() {
// Анимация перемещения кнопок вправо
val animationButton2 = TranslateAnimation(-60f, 0f, 0f, 0f).apply {
duration = 400
setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {}
override fun onAnimationEnd(animation: Animation?) {
button2.visibility = View.GONE
}
override fun onAnimationRepeat(animation: Animation?) {}
})
}
button2.startAnimation(animationButton2)

val animationButton3 = TranslateAnimation(-120f, 0f, 0f, 0f).apply {
duration = 200
setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {}
override fun onAnimationEnd(animation: Animation?) {
button3.visibility = View.GONE
}
override fun onAnimationRepeat(animation: Animation?) {}
})
}
button3.startAnimation(animationButton3)
}


override fun removeSpecificMarker(markerData: MarkerData) {
Handler(Looper.getMainLooper()).post {
Log.d("RemoveMarker", "Попытка удалить маркер с id=${markerData.id}")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import android.util.Log
import com.ilya.meetmapkmp.SocialMap.Interface.WebSocketCallback_frinds

import com.ilya.MeetingMap.SocialMap.DataModel.FindFriends
import okhttp3.OkHttpClient
import okhttp3.Request
Expand All @@ -10,71 +10,66 @@ import okio.ByteString
import org.json.JSONArray
import java.util.concurrent.TimeUnit

class WebSocketFindFriends(
url: String,
private val callback: WebSocketCallback_frinds
) : WebSocketListener() {



class Websocket_find_friends(
private var onMessageReceived: ((String) -> Unit)? = null,
private var onErrorOccurred: ((String) -> Unit)? = null
) {
private var webSocket: WebSocket? = null
private val client = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.build()

private val request = Request.Builder()
.url(url)
.build()

private val webSocket: WebSocket = client.newWebSocket(request, this)
// Метод для подключения к WebSocket
fun connect(uid: String, key: String) {
val url = "wss://meetmap.up.railway.app/findFriends/$uid/$key"
val request = Request.Builder().url(url).build()

// Метод для отправки команды по WebSocket
fun sendCommand(command: String) {
Log.d("WebSocket_friends", "Отправка команды: $command")
webSocket.send(command)
}
webSocket = client.newWebSocket(request, object : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
Log.d("WebSocket_friends", "Соединение установлено")
webSocket.send("getFriends") // Отправляем команду для получения списка друзей
}

override fun onOpen(webSocket: WebSocket, response: Response) {
Log.d("WebSocket_friends", "Соединение установлено")
}
override fun onMessage(webSocket: WebSocket, text: String) {
Log.d("WebSocket_friends", "Получено сообщение: $text")
onMessageReceived?.invoke(text) // Вызываем функцию обратного вызова для обработки сообщений
}

override fun onMessage(webSocket: WebSocket, text: String) {
Log.d("WebSocket_friends", "Получено сообщение: $text")
parseFriendList(text)
}
override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
Log.d("WebSocket_friends", "Закрытие соединения: $code / $reason")
webSocket.close(1000, null)
}

override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
Log.d("WebSocket_friends", "Получены байты: ${bytes.hex()}")
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
Log.e("WebSocket_friends", "Ошибка соединения: ${t.message}")
onErrorOccurred?.invoke(t.message ?: "Unknown error") // Вызываем функцию обратного вызова для обработки ошибок
}
})
}

override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
Log.d("WebSocket_friends", "Закрытие соединения: $code / $reason")
webSocket.close(1000, null)
// Метод для закрытия WebSocket соединения
fun disconnect() {
webSocket?.let {
Log.d("WebSocket_friends", "Закрытие WebSocket соединения")
it.close(1000, "Закрытие соединения")
}
client.dispatcher.executorService.shutdown()
}

fun stop() {
Log.d("WebSocket_friends", "Закрытие WebSocket соединения")
webSocket.close(1000, "Закрытие соединения")
client.dispatcher.executorService.shutdown()
// Метод для отправки команды по WebSocket
fun sendCommand(command: String) {
webSocket?.send(command)
}

override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
Log.e("WebSocket_friends", "Ошибка соединения: ${t.message}")
// Методы для установки callback-функций
fun setOnMessageReceivedListener(listener: (String) -> Unit) {
this.onMessageReceived = listener
}

// Метод для парсинга полученного списка друзей
private fun parseFriendList(json: String) {
Log.d("WebSocket_friends", "Парсинг списка друзей")
val jsonArray = JSONArray(json)
val friendsList = mutableListOf<FindFriends>()
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val friend = FindFriends(
key = jsonObject.getString("key"),
name = jsonObject.getString("name"),
img = jsonObject.getString("img"),
friend = jsonObject.getBoolean("friend")
)
friendsList.add(friend)
}
Log.d("WebSocket_friends", "Получен список друзей: ${friendsList.size} друзей")
callback.onFriendListReceived(friendsList)
fun setOnErrorOccurredListener(listener: (String) -> Unit) {
this.onErrorOccurred = listener
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,28 +1,63 @@
import android.util.Log
import kotlinx.serialization.json.Json
import okhttp3.ResponseBody
import retrofit2.Retrofit

import com.google.gson.GsonBuilder
import retrofit2.converter.gson.GsonConverterFactory

suspend fun postRequestAddFriends(uid: String, key: String, friendKey: String): ResponseBody? {
suspend fun postRequestAddFriends(uid: String, key: String, friendKey: String): String? {
return try {
// Логирование начала выполнения функции
Log.d("PostRequestAddFriends", "Starting postRequestAddFriends with uid=$uid, key=$key, friendKey=$friendKey")

// Создаем экземпляр Gson
val gson = GsonBuilder().setLenient().create()

// Создаем Retrofit-клиент с поддержкой Gson
val retrofit = Retrofit.Builder()
.baseUrl("https://meetmap.up.railway.app/")
.addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson)) // Используем Gson
.build()

// Логирование URL запроса
val url = "https://meetmap.up.railway.app/friendrequest/$uid/$key/$friendKey"
Log.d("PostRequestAddFriends", "Request URL: $url")

// Создаем интерфейс для запроса
val service = retrofit.create(PostInvite::class.java)
Log.d("PostRequestAddFriends", "Retrofit service created successfully")

// Выполняем запрос и получаем результат
// Выполняем запрос
Log.d("PostRequestAddFriends", "Executing POST request...")
val response = service.postInvite(uid, key, friendKey)

// Проверяем успешность запроса
if (response.isSuccessful) {
response.body() // Возвращаем тело ответа
Log.d("PostRequestAddFriends", "POST request successful. Response code: ${response.code()}")
// Получаем тело ответа как объект TokenResponse
val responseBody = response.body()
if (responseBody != null) {
Log.d("PostRequestAddFriends", "Response body received: $responseBody")
// Извлекаем токен из объекта TokenResponse
val token = responseBody.token
Log.d("PostRequestAddFriends", "Token extracted successfully: $token")
return token
} else {
// Если тело ответа пустое
Log.e("PostRequestAddFriends", "Response body is null")
return null
}
} else {
// Обработка ошибки
null
// Обработка ошибки HTTP
Log.e("PostRequestAddFriends", "HTTP error: ${response.code()}")
Log.e("PostRequestAddFriends", "Error message: ${response.errorBody()?.string()}")
return null
}
} catch (e: Exception) {
// Ловим возможные ошибки (например, отсутствие сети)
// Логирование исключения
Log.e("PostRequestAddFriends", "Exception occurred: ${e.message}")
e.printStackTrace()
null
return null
}
}
}
Loading