>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yaros/sweetshopviki/ui/MainActivity.kt b/app/src/main/java/com/yaros/sweetshopviki/ui/MainActivity.kt
index 71bc111..a835c18 100644
--- a/app/src/main/java/com/yaros/sweetshopviki/ui/MainActivity.kt
+++ b/app/src/main/java/com/yaros/sweetshopviki/ui/MainActivity.kt
@@ -28,7 +28,5 @@ class MainActivity : AppCompatActivity() {
popupMenu.inflate(R.menu.menu)
val menu = popupMenu.menu
binding.navigationView.setupWithNavController(menu, navHostFragment.navController)
-
}
-
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yaros/sweetshopviki/ui/SplashActivity.kt b/app/src/main/java/com/yaros/sweetshopviki/ui/SplashActivity.kt
index 9bc688a..c049e3d 100644
--- a/app/src/main/java/com/yaros/sweetshopviki/ui/SplashActivity.kt
+++ b/app/src/main/java/com/yaros/sweetshopviki/ui/SplashActivity.kt
@@ -20,7 +20,7 @@ class SplashActivity : AppCompatActivity() {
setContentView(binding.root)
CoroutineScope(Dispatchers.Main).launch {
- val intent = Intent(this@SplashActivity, LoginActivity::class.java)
+ val intent = Intent(this@SplashActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
diff --git a/app/src/main/java/com/yaros/sweetshopviki/ui/basket/BasketFragment.kt b/app/src/main/java/com/yaros/sweetshopviki/ui/basket/BasketFragment.kt
index ad21f77..78494bc 100644
--- a/app/src/main/java/com/yaros/sweetshopviki/ui/basket/BasketFragment.kt
+++ b/app/src/main/java/com/yaros/sweetshopviki/ui/basket/BasketFragment.kt
@@ -1,10 +1,12 @@
package com.yaros.sweetshopviki.ui.basket
+import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
+import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
@@ -12,6 +14,7 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
+import com.google.firebase.auth.FirebaseAuth
import com.yaros.sweetshopviki.R
import com.yaros.sweetshopviki.common.formatPrice
import com.yaros.sweetshopviki.common.gone
@@ -19,6 +22,7 @@ import com.yaros.sweetshopviki.common.visible
import com.yaros.sweetshopviki.data.models.ProductsBasketRoomModel
import com.yaros.sweetshopviki.data.repo.Repository
import com.yaros.sweetshopviki.databinding.FragmentBasketBinding
+import com.yaros.sweetshopviki.ui.login.LoginActivity
import com.zhuinden.fragmentviewbindingdelegatekt.viewBinding
class BasketFragment : Fragment(R.layout.fragment_basket) {
@@ -26,6 +30,7 @@ class BasketFragment : Fragment(R.layout.fragment_basket) {
private val binding by viewBinding(FragmentBasketBinding::bind)
private val viewModel by lazy { BasketViewModel(requireContext()) }
private var basketAmount: Double = 0.0
+ private lateinit var auth: FirebaseAuth
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity?)!!.supportActionBar!!.title =
@@ -61,6 +66,7 @@ class BasketFragment : Fragment(R.layout.fragment_basket) {
}
private fun initObservers() {
+ auth = FirebaseAuth.getInstance()
binding.apply {
viewModel.apply {
isLoading.observe(viewLifecycleOwner) {
@@ -124,13 +130,22 @@ class BasketFragment : Fragment(R.layout.fragment_basket) {
addOrder.setOnClickListener { findNavController().navigate(BasketFragmentDirections.actionBasketFragmentToCategoriesFragment()) }
approveBasket.setOnClickListener {
- findNavController().navigate(
- BasketFragmentDirections.actionBasketFragmentToPaymentFragment(basketAmount.toFloat())
- )
+ if (auth.currentUser == null) {
+ onLoginActivity()
+ } else {
+ findNavController().navigate(
+ BasketFragmentDirections.actionBasketFragmentToPaymentFragment(basketAmount.toFloat())
+ )
+ }
}
}
}
}
+ private fun onLoginActivity(){
+ val LoginIntent = Intent(context, LoginActivity::class.java)
+ Toast.makeText(context, R.string.loginpls, Toast.LENGTH_LONG).show()
+ startActivity(LoginIntent)
+ }
private fun onDeleteClick(productId: Int) {
viewModel.deleteProductFromBasket(productId)
diff --git a/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentFragment.kt b/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentFragment.kt
index 446bf5d..87f62f4 100644
--- a/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentFragment.kt
+++ b/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentFragment.kt
@@ -11,19 +11,22 @@ import android.view.ViewGroup
import android.view.WindowManager
import android.widget.Button
import androidx.appcompat.app.AlertDialog
+import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.firebase.auth.FirebaseAuth
-import com.google.firebase.firestore.ktx.firestore
-import com.google.firebase.ktx.Firebase
import com.yaros.sweetshopviki.R
import com.yaros.sweetshopviki.common.formatPrice
import com.yaros.sweetshopviki.common.getPaymentImages
import com.yaros.sweetshopviki.common.getPaymentNames
+import com.yaros.sweetshopviki.data.repo.OrderManager
+import com.yaros.sweetshopviki.data.repo.Repository
import com.yaros.sweetshopviki.databinding.FragmentPaymentBinding
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
import java.util.*
import javax.mail.*
import javax.mail.internet.InternetAddress
@@ -34,10 +37,9 @@ class PaymentFragment : BottomSheetDialogFragment() {
private var _binding: FragmentPaymentBinding? = null
private val binding get() = _binding!!
-
private val viewModel by lazy { PaymentViewModel(requireContext()) }
-
private val args: PaymentFragmentArgs by navArgs()
+ private lateinit var orderManager: OrderManager
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -77,18 +79,26 @@ class PaymentFragment : BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val repository = Repository(requireContext()) // Получаем контекст с помощью requireContext()
+ orderManager = OrderManager(repository)
val user = FirebaseAuth.getInstance().currentUser
val email = user?.email
val subject = "Ваш заказ"
- val body = "Уважаемый пользователь \n Ваш заказ отправлен на указанный вами адрес\n Ваш заказ готовится и скоро приедит к вам :) \n С уважением Кондитерская Вики"
+ val name = user?.displayName
binding.apply {
closePaymentScreen.setOnClickListener { findNavController().popBackStack() }
+
orderNow.setOnClickListener {
if (orderAddress.text.isEmpty().not()) {
showOrderSuccessDialog()
- sendMail(email!!, subject, body)
+ val address = orderAddress.text
+ sendMail(email!!,subject, name!!, address.toString())
Log.d("Email", email)
+ lifecycleScope.launch {
+ handleOrder()
+ }
+
viewModel.clearBasket()
} else {
orderAddress.error = getString(R.string.address_error)
@@ -113,6 +123,10 @@ class PaymentFragment : BottomSheetDialogFragment() {
}
}
+ private suspend fun handleOrder() {
+ orderManager.placeOrder()
+ }
+
private fun showOrderSuccessDialog() {
val alertDialog = AlertDialog.Builder(requireContext())
@@ -133,34 +147,45 @@ class PaymentFragment : BottomSheetDialogFragment() {
}
}
- private fun sendMail(toEmail: String, subject: String, body: String) {
- Thread {
+ private fun sendMail(toEmail: String, subject: String, name: String, address: String) {
+ lifecycleScope.launch(Dispatchers.IO) { // Используем IO диспетчер для выполнения сетевых операций
val props = Properties()
props["mail.smtp.host"] = "smtp.yandex.ru"
props["mail.smtp.socketFactory.port"] = "465"
props["mail.smtp.socketFactory.class"] = "javax.net.ssl.SSLSocketFactory"
props["mail.smtp.auth"] = "true"
props["mail.smtp.port"] = "465"
+
val session = Session.getDefaultInstance(props,
object : Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication("VikiSweetShop@yandex.ru", "wpvldcgiythzbouq")
}
})
+
val message = MimeMessage(session)
try {
- message.setFrom(InternetAddress.parse("VikiSweetShop@yandex.ru")[0])
+ val emailBody = """
+ Уважаемый(ая) $name,
+ Благодарим вас за ваш заказ из Кондитерской Вики!
+ Ваш заказ
+ Будет отправлен на следующий адрес: $address
+ С уважением,
Команда Кондитерской Вики
+ """.trimIndent()
+
+ message.setFrom(InternetAddress("VikiSweetShop@yandex.ru"))
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail))
message.subject = subject
- message.setText(body)
+ message.setContent(emailBody, "text/html; charset=utf-8")
Transport.send(message)
- Log.d("EMAIL", "SUCCESS")
+ Log.d("EMAIL", "Email sent successfully")
} catch (e: MessagingException) {
- Log.d("EMAIL", "Failed to send email", e)
+ Log.e("EMAIL", "Failed to send email", e)
}
- }.start()
+ }
}
+
override fun onDestroyView() {
super.onDestroyView()
_binding = null
diff --git a/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentViewModel.kt b/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentViewModel.kt
index 6fa983d..07b4c60 100644
--- a/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentViewModel.kt
+++ b/app/src/main/java/com/yaros/sweetshopviki/ui/payment/PaymentViewModel.kt
@@ -3,6 +3,7 @@ package com.yaros.sweetshopviki.ui.payment
import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.yaros.sweetshopviki.data.models.ProductsBasketRoomModel
import com.yaros.sweetshopviki.data.repo.Repository
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/com/yaros/sweetshopviki/ui/productdetail/ProductDetailFragment.kt b/app/src/main/java/com/yaros/sweetshopviki/ui/productdetail/ProductDetailFragment.kt
index 26d4838..83d52cb 100644
--- a/app/src/main/java/com/yaros/sweetshopviki/ui/productdetail/ProductDetailFragment.kt
+++ b/app/src/main/java/com/yaros/sweetshopviki/ui/productdetail/ProductDetailFragment.kt
@@ -46,12 +46,12 @@ class ProductDetailFragment : BottomSheetDialogFragment() {
val product = args.product
binding.apply {
- productImage.loadImage(product.imagePath?.substring(39).toString())
+ productImage.loadImage(product.imagePath)
totalPrice = product.price
price = product.price
productName.text = product.name
updatePrice()
- productCount.text = count.toString()
+ productCount.text = minOf(count, 25).toString()
increase.setOnClickListener { increaseCount() }
decrease.setOnClickListener { decreaseCount() }
cancel.setOnClickListener { findNavController().popBackStack() }
@@ -80,19 +80,24 @@ class ProductDetailFragment : BottomSheetDialogFragment() {
}
private fun increaseCount() {
- count += 1
- binding.productCount.text = count.toString()
- updatePrice()
+ if (count < 25) {
+ count += 1
+ binding.productCount.text = count.toString()
+ updatePrice()
+ }
}
+
private fun decreaseCount() {
- if (count >= 2) {
+ if (count > 1) {
count -= 1
binding.productCount.text = count.toString()
updatePrice()
}
}
+
+
override fun onDestroyView() {
super.onDestroyView()
_binding = null
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 16933f6..5f95c99 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -57,4 +57,5 @@
Банковская карта
Наличные
Ваш заказ
+ Пожалуйста войдите в свой аккаунт чтобы сделать заказ
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d243e32..5388328 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -56,6 +56,7 @@
Credit Card
Cash
Ваш заказ
+ Please log in to your account to place an order
- M255.7,459.08c-56,0 -111.95,-0.09 -167.92,0.06 -15.52,0 -26.35,-6.78 -32.73,-20.69 -1.7,-3.71 -2,-7.93 -2,-12q0,-170.16 0,-340.31c0,-19 14.19,-33 33.22,-33q169.66,-0.06 339.34,0C445,53.11 459,67.14 459,86.5q0.06,169.91 0,339.82c0,18.76 -14.09,32.73 -32.86,32.74Q340.91,459.12 255.7,459.08ZM197.48,147.88c-14.66,0 -29.32,0.19 -44,-0.12 -4,-0.08 -5.88,1.25 -7.31,4.82 -3.95,9.9 -7.93,19.79 -10.67,30.08 -5.25,19.76 -8.78,39.72 -5.17,60.23 3,17.09 10.58,31.37 25.42,41.27 8.24,5.5 17.41,8.26 27,9.63 3.87,0.56 4.82,2.11 4.74,5.78q-0.33,16.23 0,32.47c0.08,3.48 -0.91,4.94 -4.42,5.68 -9,1.9 -17.81,4.21 -26.68,6.49 -5.25,1.35 -8.63,5.88 -8.11,10.5a10.33,10.33 0,0 0,10.43 9q38.48,0.13 77,0c5.66,0 9.9,-3.77 10.49,-8.77s-2.55,-9.31 -8.27,-10.76c-8.87,-2.24 -17.74,-4.56 -26.68,-6.5 -3.29,-0.71 -4.2,-2.12 -4.14,-5.36 0.19,-10.82 0.26,-21.66 0,-32.48 -0.1,-3.9 0.89,-5.48 4.95,-6 14.23,-1.94 27,-7.23 36.87,-18.08 14.61,-16.07 17.71,-35.69 16.54,-56.35 -1.34,-23.72 -8.09,-46.1 -17.53,-67.79 -1.32,-3 -2.93,-3.75 -6,-3.72C227.13,148 212.3,147.88 197.48,147.88ZM383.12,191.59c0,-11.67 0,-21.16 0,-30.65 0,-8.19 -3.69,-13.05 -9.83,-13s-9.52,4.7 -9.55,12.68c0,6.17 0,12.33 0,18.49 0,9 0.13,18 -0.06,27 -0.14,6.28 -4.25,10.31 -9.92,10.29 -5.83,0 -9.41,-3.9 -9.61,-10.42 -0.05,-1.66 0,-3.33 0,-5q0,-21.24 0,-42.47c0,-4.66 -2.22,-7.88 -6.44,-9.79 -3.66,-1.65 -6.86,-0.56 -9.75,1.75s-3.53,5.84 -3.53,9.46q0,22.72 0,45.46c0,3.66 -0.64,7 -4,9.17a9.76,9.76 0,0 1,-10.41 0.68c-3.91,-2 -5.2,-5.41 -5.21,-9.49 0,-15.49 0,-31 0,-46.47 0,-6.74 -3.75,-11.12 -9.42,-11.32s-10.11,4.67 -10.14,11.25c-0.07,18.65 -0.63,37.33 0.16,56 1,22.83 11.91,39.41 33.77,47.77 2.49,0.95 2.83,2.13 2.59,4.39Q320,284 318.49,300.61c-1.27,13.93 -2.7,27.85 -3.58,41.8C314,357.23 327,367 340.78,362.15c9.35,-3.29 13.84,-11.25 12.77,-22.74 -2.16,-23.2 -4.22,-46.42 -6.65,-69.6 -0.47,-4.5 0.78,-6.24 4.94,-7.84 16.26,-6.24 26.39,-18.12 30,-35.18C384.52,214.44 382.46,201.87 383.12,191.59Z
diff --git a/build.gradle.kts b/build.gradle.kts
index 906157c..555068c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,6 +1,6 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
- id("com.android.application") version "8.1.4" apply false
+ id("com.android.application") version "8.4.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
id("com.google.gms.google-services") version "4.4.0" apply false
id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
@@ -15,7 +15,7 @@ buildscript {
}
dependencies {
classpath(kotlin("gradle-plugin", version = "1.9.10"))
- classpath ("androidx.navigation:navigation-safe-args-gradle-plugin:2.7.5")
- classpath ("com.google.gms:google-services:4.4.0")
+ classpath ("androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7")
+ classpath ("com.google.gms:google-services:4.4.1")
}
}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index ea6ee25..94383ea 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Sat Oct 14 21:46:09 MSK 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists