From d8af2e7dd8e193c9495a726ba1fb517ecd0ced93 Mon Sep 17 00:00:00 2001 From: Egorick Date: Sat, 17 May 2025 23:56:38 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20(=20=D0=9F=D0=BE=D1=87=D1=82=D0=B8=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../Activity/RecomendationActivity.kt | 28 +++ .../Adapters/MainRecommendAdapter.kt | 50 +++++ .../Fragments/RecomandationFragment.kt | 39 ++++ .../projectfigma/Fragments/Recommend.kt | 15 +- app/src/main/res/drawable/ic_badge_new.png | Bin 0 -> 2171 bytes .../res/layout/activity_recomendation.xml | 71 +++++++ .../fragment_recomandation_fragemnt.xml | 55 ++++++ .../main/res/layout/item_main_recomend.xml | 157 ++++++++++++++++ app/src/main/res/layout/item_new_recomend.xml | 177 ++++++++++++++++++ 10 files changed, 590 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/example/projectfigma/Activity/RecomendationActivity.kt create mode 100644 app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt create mode 100644 app/src/main/java/com/example/projectfigma/Fragments/RecomandationFragment.kt create mode 100644 app/src/main/res/drawable/ic_badge_new.png create mode 100644 app/src/main/res/layout/activity_recomendation.xml create mode 100644 app/src/main/res/layout/fragment_recomandation_fragemnt.xml create mode 100644 app/src/main/res/layout/item_main_recomend.xml create mode 100644 app/src/main/res/layout/item_new_recomend.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5c7e98..278200b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,6 +22,7 @@ + diff --git a/app/src/main/java/com/example/projectfigma/Activity/RecomendationActivity.kt b/app/src/main/java/com/example/projectfigma/Activity/RecomendationActivity.kt new file mode 100644 index 0000000..4bc6000 --- /dev/null +++ b/app/src/main/java/com/example/projectfigma/Activity/RecomendationActivity.kt @@ -0,0 +1,28 @@ +package com.example.projectfigma.Activity + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.example.projectfigma.Fragments.BottomPanelFragment +import com.example.projectfigma.R +import com.example.projectfigma.Util.StatusBar +import com.example.projectfigma.databinding.ActivityAdvertisingPageBinding +import com.example.projectfigma.databinding.ActivityRecomendationBinding + +class RecomendationActivity : AppCompatActivity() { + private lateinit var binding: ActivityRecomendationBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivityRecomendationBinding.inflate(layoutInflater) + setContentView(binding.root) + StatusBar.hideStatusBar(window) + + supportFragmentManager.beginTransaction() + .replace(R.id.buttonPanel, BottomPanelFragment()) + .commit() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt b/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt new file mode 100644 index 0000000..26602a0 --- /dev/null +++ b/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt @@ -0,0 +1,50 @@ +package com.example.projectfigma.Adapters + +import android.net.Uri +import android.view.View +import android.view.ViewGroup +import android.view.LayoutInflater +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.example.projectfigma.Entites.Dishes +import com.example.projectfigma.R + +class MainRecommendAdapter( + private var dishes: List +) : RecyclerView.Adapter() { + + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val imgFood: ImageView = view.findViewById(R.id.imgFood) + val imgCategory: ImageView = view.findViewById(R.id.imgCategory) + val tvTitle: TextView = view.findViewById(R.id.tvTitle) + val tvDesc: TextView = view.findViewById(R.id.tvDesc) + val tvPrice: TextView = view.findViewById(R.id.tvPrice) + val tvRating: TextView = view.findViewById(R.id.tvRating) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val v = LayoutInflater.from(parent.context) + .inflate(R.layout.item_main_recomend, parent, false) + return ViewHolder(v) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val dish = dishes[position] + + Glide.with(holder.itemView.context) + .load(Uri.parse(dish.imageUri)) + .into(holder.imgFood) + holder.imgCategory.setImageResource(dish.category.iconRes) + holder.tvTitle.text = dish.name + holder.tvDesc.text = dish.description + holder.tvPrice.text = dish.price.toString() + holder.tvRating.text = dish.rating.toString() + } + + override fun getItemCount(): Int = dishes.size + fun updateData(newItems: List) { + dishes = newItems + } +} diff --git a/app/src/main/java/com/example/projectfigma/Fragments/RecomandationFragment.kt b/app/src/main/java/com/example/projectfigma/Fragments/RecomandationFragment.kt new file mode 100644 index 0000000..23ad5c4 --- /dev/null +++ b/app/src/main/java/com/example/projectfigma/Fragments/RecomandationFragment.kt @@ -0,0 +1,39 @@ +package com.example.projectfigma.Fragments + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.View +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.example.projectfigma.Adapters.MainBestSellerAdapter +import com.example.projectfigma.Adapters.MainRecommendAdapter +import com.example.projectfigma.DAO.DishesDao +import com.example.projectfigma.DataBase.DataBase +import com.example.projectfigma.R +class RecomandationFragment : Fragment(R.layout.fragment_recomandation_fragemnt) { + + private lateinit var dataBase: DataBase + private lateinit var dishesDao: DishesDao + + // Создаём адаптер сразу с пустым списком + private val adapter by lazy { MainRecommendAdapter(emptyList()) } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val rv = view.findViewById(R.id.popularRecyclerView) + rv.layoutManager = GridLayoutManager(requireContext(), 2) + rv.adapter = adapter // устанавливаем адаптер сразу + + dataBase = DataBase.getDb(requireContext()) + dishesDao = dataBase.getDishesDao() + + // Наблюдаем за списком рекомендаций + dishesDao.getRecommend().observe(viewLifecycleOwner) { dishList -> + // Если MainRecommendAdapter у вас наследник ListAdapter: + // adapter.submitList(dishList) + // Иначе: + adapter.updateData(dishList) + adapter.notifyDataSetChanged() + } + } +} diff --git a/app/src/main/java/com/example/projectfigma/Fragments/Recommend.kt b/app/src/main/java/com/example/projectfigma/Fragments/Recommend.kt index efe1762..f42fcc3 100644 --- a/app/src/main/java/com/example/projectfigma/Fragments/Recommend.kt +++ b/app/src/main/java/com/example/projectfigma/Fragments/Recommend.kt @@ -1,13 +1,17 @@ package com.example.projectfigma.Fragments +import android.content.Intent import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TextView import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.example.projectfigma.Activity.BestSellerActivity +import com.example.projectfigma.Activity.RecomendationActivity import com.example.projectfigma.Adapters.RecommendAdapter import com.example.projectfigma.DataBase.DataBase import com.example.projectfigma.R @@ -16,22 +20,27 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext class Recommend : Fragment(R.layout.fragment_recommend) { + private val db by lazy { DataBase.getDb(requireContext()) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val rv = view.findViewById(R.id.rvRecommend) + val textRecomend = view.findViewById(R.id.tvHeader) rv.layoutManager = GridLayoutManager(requireContext(), 2) + textRecomend.setOnClickListener(){ + val intent = Intent(requireContext(), RecomendationActivity::class.java) + startActivity(intent) + requireActivity().finish() + } + viewLifecycleOwner.lifecycleScope.launch { - // 1. Получаем пользователя в IO val sessionEmail = db.getSessionDao().getSession()?.userEmail.orEmpty() val user = withContext(Dispatchers.IO) { db.getUserDao().getUserByEmail(sessionEmail) } - // 2. Теперь наблюдаем LiveData рекомендаций - // и каждый раз создаём новый адаптер с реальным списком withContext(Dispatchers.Main) { db.getDishesDao() .getRecommend() diff --git a/app/src/main/res/drawable/ic_badge_new.png b/app/src/main/res/drawable/ic_badge_new.png new file mode 100644 index 0000000000000000000000000000000000000000..cb51f02a2201d2404acf5d63259f67a2f8ef5a82 GIT binary patch literal 2171 zcmV->2!!{EP)wnN2%mM^TO8RijPsSEGwOj{6N1H5CIzqJl}d$il=e-;O9vieCO~*MApd%+Gj6oH%^-} zY-bbVtP!ucl>@6`137kYepHIfTvQ=CUi|ZPJY0RZlt+rNolS@{rH6OC&qataqvD$` zL>ut5?UzPqqqe1}EZpslj$mMTlrSS0;379G*C35zb18`?uF8-(T(x zgT4Jl6e2*I$PVlH$zP>7slj$OA-*1iZfB&55En;|fenOvvd0hg_7_!%91k59ho=VH z*@XCd3_fhV!}^-PcAMNY8ET!r0DIh_P)I8;|ROG7Z<>SMxgf_4|Sl@oE~wt`b&|(aStEdE5&i3jv+xJy>w^^p1qeni|s5OUEbf@)HmqZAGCO`9MXPT zS@@Yg5)@;PHK$%m!b;dcGE7bzwBw8_A)-g;#?^om%5+DMf18A9(-m1RZ9{4I>(2}M zYn_M>7Lp8uW1!<;M}ye3^eDR~LRqK0Q&HkDh$EllK;1DSb9@HJFY@PE3o*7H&K7)M zBQ+rox>r7B&8ZhBj3FdM-W}xQjF1p{R65LhN+}pTSLQwXVS0vysZ7WqY;Zn*lB0_z zS%<`VIA$$G9?@MrP!4>e zT<`%GAK^f&zk};KZ&+{Mixb8W5+Vp4XM}_(4Z~p$xhcf!ELkRL^qsZ$3Sodp>*K$t zyS~0>`|vp~gHB{$Ie_N$q33hkYx(gsSngtTXQv4jptIoe&r*n3e#kKHoE%!&7G<+0 z|MjNWixbDd&cNY7_FB>rLPC^jFk-=28uHoFIpk)DT;s98-FIi?l89*(uR`VtvB@49 z;4K@BIGR&&`n*o7{^^yhBe$Q#=d3&h*QT!8v+{DyP>2V=6gONrZ3ti8QX>f=`i?Vv zLS!+-BG+<0137`8ZeUEE!%a`wIYUCwkaglUVhnZCho=1!+5W(F0=!n{bdu0?U*129 z5Mw(O4WFG8ByOVymy)=W7$JgUW1nuW_=Lzti$w}ib3QqOx?M+CE;l`uy>pciH0lUR zqfUBX-5G9AC!#t|%yvF6A<7w340Y--ZwfDVhb~SS0~?6L9lTb7BO-5nP0B!PbJ=moU2gV+ zDi%qI`JYORxk?Emh!r9zj5b*>7!slsggi5=gUlc6L^mzpOyDI~z{%V&h#w!DnM`kn2KpZQ*1HX7BnI4Obu0L8j1U7RQeb_Nb-WWz~Vh-gqY zUjE8fCOkL+rdx6Zljn#s4}K0i0pL1l<%y+^kTmM1=iN-y4{Z#zFm_b72jZY(!z*T( zj&dFjDMYOQ_$39133+R8%4i!)EM`{^l*8qry#>WnW^~$!ufZXrvqtnrDDjvyE;Pp6{mhH?hNpQFi zc_=S|4cJy1?iDwgj&0}QkvS!TV&up%umLz+gQp@u69|CwNatkWtf25 z5ldYmF=t7SvZ5o>1PLcao>lchdd;Cx2H1c%d{~G8Z7bLITn_Dp0|x%2)x(uVvo+oT z($dIjc#3$%$PrTljszpXPymfTyis1yTy$g`X*Vfb&@l!z+BS$g}`I|R< z(=d!?$^Wnv-!u%PS^9V}oNpS2(JZfo*zR$FVHnM^v(ozD()RVvCI=XX(H!{^Mt`Ms zjROqBXpHHvNNsm*R5XmHDg9HL(NgO&{(C7$Gz{bX_^;bqnut(}(MCqYXoMb?gsj2B xg`u+FZQr#K(lBNRrlH&2_QUM+OYLvi{12gCd9xtzNmc*=002ovPDHLkV1lXa3Jw4O literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_recomendation.xml b/app/src/main/res/layout/activity_recomendation.xml new file mode 100644 index 0000000..483e269 --- /dev/null +++ b/app/src/main/res/layout/activity_recomendation.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_recomandation_fragemnt.xml b/app/src/main/res/layout/fragment_recomandation_fragemnt.xml new file mode 100644 index 0000000..d8b1d4d --- /dev/null +++ b/app/src/main/res/layout/fragment_recomandation_fragemnt.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + /> + + + + + diff --git a/app/src/main/res/layout/item_main_recomend.xml b/app/src/main/res/layout/item_main_recomend.xml new file mode 100644 index 0000000..0f08dbc --- /dev/null +++ b/app/src/main/res/layout/item_main_recomend.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_new_recomend.xml b/app/src/main/res/layout/item_new_recomend.xml new file mode 100644 index 0000000..5ac536e --- /dev/null +++ b/app/src/main/res/layout/item_new_recomend.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 141cd346569e0d990b999e2ce89561d5ee6a6c20 Mon Sep 17 00:00:00 2001 From: Egorick Date: Sun, 18 May 2025 16:51:13 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Adapters/MainRecommendAdapter.kt | 2 +- app/src/main/res/drawable/rounded_corners.xml | 5 +++++ app/src/main/res/layout/item_main_recomend.xml | 4 +++- app/src/main/res/layout/item_new_recomend.xml | 17 +++++++++-------- 4 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 app/src/main/res/drawable/rounded_corners.xml diff --git a/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt b/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt index 26602a0..1510d8f 100644 --- a/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt +++ b/app/src/main/java/com/example/projectfigma/Adapters/MainRecommendAdapter.kt @@ -39,7 +39,7 @@ class MainRecommendAdapter( holder.imgCategory.setImageResource(dish.category.iconRes) holder.tvTitle.text = dish.name holder.tvDesc.text = dish.description - holder.tvPrice.text = dish.price.toString() + holder.tvPrice.text = "$" + dish.price.toString() holder.tvRating.text = dish.rating.toString() } diff --git a/app/src/main/res/drawable/rounded_corners.xml b/app/src/main/res/drawable/rounded_corners.xml new file mode 100644 index 0000000..151f366 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_main_recomend.xml b/app/src/main/res/layout/item_main_recomend.xml index 0f08dbc..e51529d 100644 --- a/app/src/main/res/layout/item_main_recomend.xml +++ b/app/src/main/res/layout/item_main_recomend.xml @@ -115,8 +115,10 @@ android:id="@+id/tvPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:textSize="20dp" android:text="$15.00" - android:textColor="@color/black" + android:textFontWeight="800" + android:textColor="@color/organe" android:textAppearance="@style/TextAppearance.AppCompat.Large" /> + android:padding="11dp">