Skip to content
Merged
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
3 changes: 3 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ dependencies {
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")

// JSON
implementation ("com.google.code.gson:gson:2.10.1")

// RecyclerView
implementation("androidx.recyclerview:recyclerview:1.2.1")
// CardView для скруглённых углов карточек
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.example.projectfigma.DataBase.DataBase
import com.example.projectfigma.Entites.Dishes
import com.example.projectfigma.Fragments.BottomPanelFragment
import com.example.projectfigma.R
import com.example.projectfigma.Util.Likes
import com.example.projectfigma.Util.StatusBar
import com.example.projectfigma.databinding.ActivityFavoritesBinding
import com.example.projectfigma.databinding.ActivityFoodDetailBinding
Expand All @@ -21,11 +22,13 @@ import kotlin.time.toDuration
class FoodDetailActivity : AppCompatActivity() {
private lateinit var binding: ActivityFoodDetailBinding
private lateinit var dataBase : DataBase
private lateinit var likes: Likes

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

dataBase = DataBase.getDb(this)
likes = Likes(dataBase)

binding = ActivityFoodDetailBinding.inflate(layoutInflater)
setContentView(binding.root)
Expand All @@ -39,7 +42,18 @@ class FoodDetailActivity : AppCompatActivity() {
startActivity(Intent(this@FoodDetailActivity,HomeActivity::class.java))
}

val dish: Dishes? = intent.getParcelableExtra("dish")
val dish = intent.getParcelableExtra<Dishes>("dish")

if(likes.isLike(dish)){
likes.setLikeButton(binding.likeButton, dish)
}

binding.likeButton.setOnClickListener(){
if (dish != null) {
likes.likeDish(dish,binding.likeButton)
}
}

dish?.let {
binding.nameDishHeader.text = it.name
binding.tvRating.text = it.rating.toString()
Expand All @@ -51,19 +65,4 @@ class FoodDetailActivity : AppCompatActivity() {
binding.dishDescription.text = it.description
}
}

private suspend fun likeDish(dish: Dishes) {

val user = dataBase.getSessionDao().getSession()
?.let { it.userEmail?.let { it1 -> dataBase.getUserDao().getUserByEmail(it1) } }

val favoriteDishes:List<Int> = user?.favoriteDishesId ?: emptyList<Int>()
if (favoriteDishes.contains(dish.id)) {
val updatedDishes: List<Int> = favoriteDishes.filter { it != dish.id }
dataBase.getUserDao().updateFavoriteDishes(user?.id!!, updatedDishes)
} else {
val updatedDishes = favoriteDishes + dish.id
dataBase.getUserDao().updateFavoriteDishes(user?.id!!, updatedDishes)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.projectfigma.Adapters.BestSellerAdapter
import com.example.projectfigma.DAO.DishesDao
import com.example.projectfigma.DAO.SessionDao
import com.example.projectfigma.DAO.UserDao
import com.example.projectfigma.DataBase.DataBase
import com.example.projectfigma.Entites.Dishes
Expand All @@ -26,9 +27,9 @@ class HomeActivity : AppCompatActivity(),
private lateinit var adapter: BestSellerAdapter
private lateinit var dao: DishesDao
private lateinit var userDao: UserDao
private lateinit var sessionDao: SessionDao
private lateinit var drawer: DrawerLayout

private var user: User? = null
private lateinit var user: User

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -38,11 +39,8 @@ class HomeActivity : AppCompatActivity(),
val db = DataBase.getDb(this)
dao = db.getDishesDao()
userDao = db.getUserDao()

val email = intent.getStringExtra("user_email")
if (!email.isNullOrBlank()) {
user = userDao.getUserByEmail(email)
}
sessionDao = db.getSessionDao()
user = (sessionDao.getSession()?.user ?: null)!!

drawer = findViewById<DrawerLayout>(R.id.drawer_layout)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ class LogActivity : AppCompatActivity() {
val userDao = db.getUserDao()
val sessionDao = db.getSessionDao()

supportFragmentManager.beginTransaction()
.replace(R.id.buttonPanel, BottomPanelFragment())
.commit()

Password.setIsVisable(binding.passwordEditText)

binding.goToSignUp.setOnClickListener {
Expand Down Expand Up @@ -95,7 +91,7 @@ class LogActivity : AppCompatActivity() {
}
else -> {
withContext(Dispatchers.IO) {
sessionDao.upsert(Session(id = 0, isLoggedIn = true, userEmail = email))
sessionDao.upsert(Session(id = 0, isLoggedIn = true, userEmail = email, user = user))
}
Toast.makeText(this@LogActivity, "Вход успешен", Toast.LENGTH_SHORT).show()
startActivity(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ class RegActivity() : AppCompatActivity(){
setupDatePicker()
Reg(binding, dateBase)

supportFragmentManager.beginTransaction()
.replace(R.id.buttonPanel, BottomPanelFragment())
.commit()

passwordEditText = binding.passwordEditText
Password.setIsVisable(passwordEditText)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.projectfigma.Converters

import androidx.room.TypeConverter
import com.example.projectfigma.Entites.User
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

class SessionConverters {

private val gson = Gson()

@TypeConverter
fun userToJson(user: User?): String? =
user?.let { gson.toJson(it) }

@TypeConverter
fun jsonToUser(data: String?): User? =
data?.let {
val type = object : TypeToken<User>() {}.type
gson.fromJson<User>(it, type)
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/com/example/projectfigma/DAO/UserDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ interface UserDao {
SET favoriteDishesId = :favoriteDishes
WHERE id = :userId
""")
suspend fun updateFavoriteDishes(
fun updateFavoriteDishes(
userId: Int,
favoriteDishes: List<Int>
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.example.projectfigma.Entites.User
import com.example.projectfigma.Enums.DishCategory
import com.example.projectfigma.R
import com.example.projectfigma.Converters.ConvertersToDateTime
import com.example.projectfigma.Converters.SessionConverters
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
Expand All @@ -28,12 +29,13 @@ import java.util.Date

@Database(
entities = [User::class, Dishes::class, Session::class, AppSettings::class],
version = 9
version = 10
)
@TypeConverters(
ConvertersToDateTime::class,
ConvertToDishesCategory::class,
ConvertersList::class
ConvertersList::class,
SessionConverters::class
)
abstract class DataBase : RoomDatabase() {

Expand Down Expand Up @@ -223,7 +225,7 @@ abstract class DataBase : RoomDatabase() {
settingsDao.upsert(AppSettings(id = 0, isFirstRun = true))

val sessionDao = database.getSessionDao()
sessionDao.upsert(Session(id = 0, isLoggedIn = false, userEmail = null))
sessionDao.upsert(Session(id = 0, isLoggedIn = false, userEmail = null, user = null))
}
}
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ import androidx.room.PrimaryKey
data class Session(
@PrimaryKey val id: Int = 0, // единственная запись
val isLoggedIn: Boolean,
val userEmail: String? // email или null
val userEmail: String?, // email или null
val user: User?
)
49 changes: 49 additions & 0 deletions app/src/main/java/com/example/projectfigma/Util/Likes.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.example.projectfigma.Util

import android.widget.ImageView
import androidx.viewbinding.ViewBinding
import com.example.projectfigma.DataBase.DataBase
import com.example.projectfigma.Entites.Dishes
import com.example.projectfigma.R

class Likes {

private var dataBase: DataBase

constructor(dataBase: DataBase){
this.dataBase = dataBase
}

public fun likeDish(dish: Dishes, likeButton: ImageView) {

val user = dataBase.getSessionDao().getSession()
?.let { it.userEmail?.let { it1 -> dataBase.getUserDao().getUserByEmail(it1) } }

val favoriteDishes:List<Int> = user?.favoriteDishesId ?: emptyList()
if (isLike(dish)) {
val updatedDishes: List<Int> = favoriteDishes.filter { it != dish.id }
dataBase.getUserDao().updateFavoriteDishes(user?.id!!, updatedDishes)
} else {
val updatedDishes = favoriteDishes + dish.id
dataBase.getUserDao().updateFavoriteDishes(user?.id!!, updatedDishes)
}
}


public fun isLike(dish: Dishes?): Boolean {
val user = dataBase.getSessionDao().getSession()
?.let { it.userEmail?.let { it1 -> dataBase.getUserDao().getUserByEmail(it1) } }

val favoriteDishes:List<Int> = user?.favoriteDishesId ?: emptyList()
return favoriteDishes.contains(dish?.id)
}

public fun setLikeButton(likeButton: ImageView, dish: Dishes?) {
if (isLike(dish)) {
likeButton.setImageResource(R.drawable.ic_heart_border)
} else {
likeButton.setImageResource(R.drawable.ic_dislike)
}
}

}
Binary file added app/src/main/res/drawable/ic_dislike.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.