diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 3fe22b7..91853b6 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -40,6 +40,7 @@ dependencies {
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
implementation("androidx.room:room-ktx:2.7.1")
+ implementation(libs.androidx.activity)
kapt("androidx.room:room-compiler:2.7.1")
testImplementation("junit:junit:4.13.2")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8c8027d..3d94ad0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,6 +11,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.Project"
tools:targetApi="31">
+
@@ -20,12 +23,13 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
) :
+class PromoAdapter(
+ private var items: List,
+ private val onBannerClick: () -> Unit) :
RecyclerView.Adapter() {
inner class VH(view: View) : RecyclerView.ViewHolder(view) {
private val image: ImageView = view.findViewById(R.id.promo_image)
private val title: TextView = view.findViewById(R.id.title)
private val discount: TextView = view.findViewById(R.id.discount)
+ private val fullCard: CardView = view.findViewById(R.id.fullCard)
fun bind(item: Dishes) {
title.text = "Experience our delicious new dish"
discount.text = "${30}% OFF"
+ fullCard.setOnClickListener { onBannerClick() }
}
}
diff --git a/app/src/main/java/com/example/projectfigma/Fragments/BannerFood.kt b/app/src/main/java/com/example/projectfigma/Fragments/BannerFood.kt
index 56d489c..54f85e8 100644
--- a/app/src/main/java/com/example/projectfigma/Fragments/BannerFood.kt
+++ b/app/src/main/java/com/example/projectfigma/Fragments/BannerFood.kt
@@ -1,5 +1,6 @@
package com.example.projectfigma.Fragments
+import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@@ -7,7 +8,10 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.widget.ViewPager2
+import com.example.projectfigma.Activity.AdverstsingPageActivity
+import com.example.projectfigma.Activity.LogActivity
import com.example.projectfigma.Adapters.PromoAdapter
import com.example.projectfigma.DataBase.DataBase
import com.example.projectfigma.R
@@ -15,71 +19,73 @@ import com.example.projectfigma.databinding.FragmentBannerFoodBinding
import com.example.projectfigma.databinding.FragmentBestSellerBinding
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.isActive
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
class BannerFood : Fragment() {
private var _binding: FragmentBannerFoodBinding? = null
private val binding get() = _binding!!
private lateinit var promoAdapter: PromoAdapter
-
- override fun onCreate(savedInstanceState: Bundle?) {
-
- super.onCreate(savedInstanceState)
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentBannerFoodBinding.inflate(inflater, container, false)
+ return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 1) Инициализируем адаптер
- promoAdapter = PromoAdapter(emptyList())
+ promoAdapter = PromoAdapter(emptyList()) {
+ val intent = Intent(requireContext(), AdverstsingPageActivity::class.java)
+ startActivity(intent)
+ requireActivity().finish()
+ }
binding.viewPager.adapter = promoAdapter
// 2) Настраиваем TabLayoutMediator, сразу задаём иконки
TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, _ ->
- tab.setIcon(R.drawable.tab_indicator_unselected)
+ tab.setIcon(com.example.projectfigma.R.drawable.tab_indicator_unselected)
}.attach()
- // 3) Подписываемся на смену вкладки, чтобы менять иконки
+ // 3) Слушаем смену вкладки для изменения иконки
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
- tab.setIcon(R.drawable.tab_indicator_selected)
+ tab.setIcon(com.example.projectfigma.R.drawable.tab_indicator_selected)
}
override fun onTabUnselected(tab: TabLayout.Tab) {
- tab.setIcon(R.drawable.tab_indicator_unselected)
+ tab.setIcon(com.example.projectfigma.R.drawable.tab_indicator_unselected)
}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
- // 4) Тут же можете запустить автопрокрутку, если она нужна в фрагменте
- val handler = Handler(Looper.getMainLooper())
- handler.postDelayed(object : Runnable {
- override fun run() {
+ // 4) Автопрокрутка с помощью корутины
+ viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
+ while (isActive) {
+ delay(4000)
if (promoAdapter.itemCount > 1) {
val next = (binding.viewPager.currentItem + 1) % promoAdapter.itemCount
binding.viewPager.setCurrentItem(next, true)
}
- handler.postDelayed(this, 4000)
}
- }, 4000)
+ }
- // 5) А обновление списка (LiveData) можно тоже повесить здесь:
+ // 5) Обновление списка из БД
val dao = DataBase.getDb(requireContext()).getDishesDao()
dao.getBestSellers().observe(viewLifecycleOwner) { list ->
promoAdapter.updateList(list)
}
}
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- _binding = FragmentBannerFoodBinding.inflate(inflater, container, false)
- return binding.root
- }
-
override fun onDestroyView() {
super.onDestroyView()
_binding = null
diff --git a/app/src/main/res/drawable/bg_rating.xml b/app/src/main/res/drawable/bg_rating.xml
index 3dea9c6..0c63dd9 100644
--- a/app/src/main/res/drawable/bg_rating.xml
+++ b/app/src/main/res/drawable/bg_rating.xml
@@ -1,4 +1,4 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_rating_orange.xml b/app/src/main/res/drawable/bg_rating_orange.xml
new file mode 100644
index 0000000..da9d1a2
--- /dev/null
+++ b/app/src/main/res/drawable/bg_rating_orange.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_skibidi_tualet.xml b/app/src/main/res/drawable/bg_skibidi_tualet.xml
new file mode 100644
index 0000000..ee75929
--- /dev/null
+++ b/app/src/main/res/drawable/bg_skibidi_tualet.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_add_to_card.png b/app/src/main/res/drawable/ic_add_to_card.png
new file mode 100644
index 0000000..f0cd87e
Binary files /dev/null and b/app/src/main/res/drawable/ic_add_to_card.png differ
diff --git a/app/src/main/res/drawable/ic_discount_30.png b/app/src/main/res/drawable/ic_discount_30.png
new file mode 100644
index 0000000..4483ec2
Binary files /dev/null and b/app/src/main/res/drawable/ic_discount_30.png differ
diff --git a/app/src/main/res/drawable/ic_heart_in_circle.png b/app/src/main/res/drawable/ic_heart_in_circle.png
new file mode 100644
index 0000000..49217e6
Binary files /dev/null and b/app/src/main/res/drawable/ic_heart_in_circle.png differ
diff --git a/app/src/main/res/drawable/ic_heart_unborder.png b/app/src/main/res/drawable/ic_heart_unborder.png
new file mode 100644
index 0000000..b29230d
Binary files /dev/null and b/app/src/main/res/drawable/ic_heart_unborder.png differ
diff --git a/app/src/main/res/drawable/ic_minus.png b/app/src/main/res/drawable/ic_minus.png
new file mode 100644
index 0000000..23908c0
Binary files /dev/null and b/app/src/main/res/drawable/ic_minus.png differ
diff --git a/app/src/main/res/drawable/ic_plus.png b/app/src/main/res/drawable/ic_plus.png
new file mode 100644
index 0000000..aba45e0
Binary files /dev/null and b/app/src/main/res/drawable/ic_plus.png differ
diff --git a/app/src/main/res/layout/activity_advertising_page.xml b/app/src/main/res/layout/activity_advertising_page.xml
new file mode 100644
index 0000000..01f1994
--- /dev/null
+++ b/app/src/main/res/layout/activity_advertising_page.xml
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_banner.xml b/app/src/main/res/layout/item_banner.xml
index 2cd74b0..ed9debb 100644
--- a/app/src/main/res/layout/item_banner.xml
+++ b/app/src/main/res/layout/item_banner.xml
@@ -1,5 +1,6 @@
-
+
+
+
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 2c177a0..5cf5bcd 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Sun May 04 14:55:53 MSK 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists