From d91cd48981071b5ee7a39132768899428961f2eb Mon Sep 17 00:00:00 2001 From: YURY TILMAN Date: Sun, 12 Oct 2025 23:43:38 +0300 Subject: [PATCH 1/5] Add activity_contacts.xml --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 2 +- .../viewandresources/ContactsActivity.kt | 80 ++++++- app/src/main/res/drawable/arrow_left.xml | 10 + app/src/main/res/drawable/bookmark.xml | 9 + app/src/main/res/drawable/calendar.xml | 9 + app/src/main/res/drawable/dots_vertical.xml | 1 + app/src/main/res/drawable/drop_down.xml | 9 + app/src/main/res/drawable/icon_people.xml | 9 + app/src/main/res/drawable/mic.xml | 9 + app/src/main/res/drawable/paperclip.xml | 1 + app/src/main/res/drawable/smartphone.xml | 9 + app/src/main/res/layout/activity_contacts.xml | 201 +++++++++++++++++- app/src/main/res/menu/top_app_bar.xml | 16 ++ app/src/main/res/values-night/colors.xml | 143 +++++++++++++ app/src/main/res/values-night/styles.xml | 6 + app/src/main/res/values-night/themes.xml | 146 ++++++++++++- app/src/main/res/values/arrays.xml | 8 + app/src/main/res/values/attrs.xml | 5 + app/src/main/res/values/colors.xml | 142 +++++++++++++ app/src/main/res/values/strings.xml | 28 +++ app/src/main/res/values/styles.xml | 16 ++ app/src/main/res/values/themes.xml | 148 ++++++++++++- 23 files changed, 997 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable/arrow_left.xml create mode 100644 app/src/main/res/drawable/bookmark.xml create mode 100644 app/src/main/res/drawable/calendar.xml create mode 100644 app/src/main/res/drawable/dots_vertical.xml create mode 100644 app/src/main/res/drawable/drop_down.xml create mode 100644 app/src/main/res/drawable/icon_people.xml create mode 100644 app/src/main/res/drawable/mic.xml create mode 100644 app/src/main/res/drawable/paperclip.xml create mode 100644 app/src/main/res/drawable/smartphone.xml create mode 100644 app/src/main/res/menu/top_app_bar.xml create mode 100644 app/src/main/res/values-night/colors.xml create mode 100644 app/src/main/res/values-night/styles.xml create mode 100644 app/src/main/res/values/arrays.xml create mode 100644 app/src/main/res/values/attrs.xml create mode 100644 app/src/main/res/values/styles.xml diff --git a/app/build.gradle b/app/build.gradle index debcfaf..ef309f0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,11 +29,14 @@ android { kotlinOptions { jvmTarget = '17' } + buildFeatures { + viewBinding = true + } } dependencies { implementation 'androidx.core:core-ktx:1.15.0' implementation 'androidx.appcompat:appcompat:1.7.0' - implementation 'com.google.android.material:material:1.12.0' + implementation 'com.google.android.material:material:1.14.0-alpha05' implementation 'androidx.constraintlayout:constraintlayout:2.2.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 608e135..9708b21 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.ViewResources" + android:theme="@style/Base.Theme" tools:targetApi="31"> = + ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, phoneTypes) + + + with(binding) { + textFieldPhoneType + .editText + ?.asClass() + ?.setAdapter(adapter) + + val datePickerBuilder = MaterialDatePicker + .Builder + .datePicker() + .setTitleText(dataPickerTitle) + + + if (editData.text.toString().isNotEmpty()) { + try { + dateFormat + .parse(editData.text.toString()) + ?.let { + datePickerBuilder.setSelection(it.time) + } + } catch (e: Exception) { + e.printStackTrace() + } + } + val datePicker = datePickerBuilder.build() + editData.setOnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + datePicker.addOnPositiveButtonClickListener { selection: Long -> + editData.setText(dateFormat.format(Date(selection))) + } + datePicker.addOnNegativeButtonClickListener { + editData.clearFocus() + } + datePicker.addOnDismissListener { + editData.clearFocus() + } + datePicker.show(supportFragmentManager, "birthday_date") + + } else { + // + } + } + + + } + + } -} \ No newline at end of file +} + +fun Any.asClass(): T? = if (this as? T == null) null else this \ No newline at end of file diff --git a/app/src/main/res/drawable/arrow_left.xml b/app/src/main/res/drawable/arrow_left.xml new file mode 100644 index 0000000..6935245 --- /dev/null +++ b/app/src/main/res/drawable/arrow_left.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bookmark.xml b/app/src/main/res/drawable/bookmark.xml new file mode 100644 index 0000000..d8e7b44 --- /dev/null +++ b/app/src/main/res/drawable/bookmark.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/calendar.xml b/app/src/main/res/drawable/calendar.xml new file mode 100644 index 0000000..4f02730 --- /dev/null +++ b/app/src/main/res/drawable/calendar.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/dots_vertical.xml b/app/src/main/res/drawable/dots_vertical.xml new file mode 100644 index 0000000..481a28d --- /dev/null +++ b/app/src/main/res/drawable/dots_vertical.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/drop_down.xml b/app/src/main/res/drawable/drop_down.xml new file mode 100644 index 0000000..2ab1674 --- /dev/null +++ b/app/src/main/res/drawable/drop_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_people.xml b/app/src/main/res/drawable/icon_people.xml new file mode 100644 index 0000000..f845dc4 --- /dev/null +++ b/app/src/main/res/drawable/icon_people.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/mic.xml b/app/src/main/res/drawable/mic.xml new file mode 100644 index 0000000..bb076ac --- /dev/null +++ b/app/src/main/res/drawable/mic.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/paperclip.xml b/app/src/main/res/drawable/paperclip.xml new file mode 100644 index 0000000..29199fe --- /dev/null +++ b/app/src/main/res/drawable/paperclip.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/smartphone.xml b/app/src/main/res/drawable/smartphone.xml new file mode 100644 index 0000000..1839564 --- /dev/null +++ b/app/src/main/res/drawable/smartphone.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_contacts.xml b/app/src/main/res/layout/activity_contacts.xml index 6ef087b..6455b60 100644 --- a/app/src/main/res/layout/activity_contacts.xml +++ b/app/src/main/res/layout/activity_contacts.xml @@ -1,9 +1,206 @@ - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/top_app_bar.xml b/app/src/main/res/menu/top_app_bar.xml new file mode 100644 index 0000000..4bed2ed --- /dev/null +++ b/app/src/main/res/menu/top_app_bar.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000..6958402 --- /dev/null +++ b/app/src/main/res/values-night/colors.xml @@ -0,0 +1,143 @@ + + #D3BCFD + #38265C + #4F3D74 + #EBDDFF + #CDC2DB + #342D40 + #4B4358 + #E9DEF8 + #F0B7C5 + #4A2530 + #643B46 + #FFD9E1 + #FFB4AB + #690005 + #93000A + #FFDAD6 + #151218 + #E7E0E8 + #151218 + #E7E0E8 + #49454E + #CBC4CF + #948F99 + #49454E + #000000 + #E7E0E8 + #322F35 + #68548E + #EBDDFF + #230F46 + #D3BCFD + #4F3D74 + #E9DEF8 + #1F182B + #CDC2DB + #4B4358 + #FFD9E1 + #31101B + #F0B7C5 + #643B46 + #151218 + #3B383E + #0F0D13 + #1D1B20 + #211F24 + #2C292F + #36343A + #E5D5FF + #2D1A50 + #9B86C4 + #000000 + #E3D8F1 + #292235 + #968DA4 + #000000 + #FFD0DB + #3E1A25 + #B68390 + #000000 + #FFD2CC + #540003 + #FF5449 + #000000 + #151218 + #E7E0E8 + #151218 + #FFFFFF + #49454E + #E1DAE5 + #B6B0BA + #948E98 + #000000 + #E7E0E8 + #2C292F + #513E75 + #EBDDFF + #18023B + #D3BCFD + #3E2C62 + #E9DEF8 + #140E20 + #CDC2DB + #3A3346 + #FFD9E1 + #250611 + #F0B7C5 + #512A36 + #151218 + #46434A + #08070B + #1F1D22 + #29272D + #343137 + #3F3C43 + #F6ECFF + #000000 + #CFB8F9 + #110031 + #F6ECFF + #000000 + #C9BED7 + #0E0819 + #FFEBEE + #000000 + #ECB4C1 + #1D020B + #FFECE9 + #000000 + #FFAEA4 + #220001 + #151218 + #E7E0E8 + #151218 + #FFFFFF + #49454E + #FFFFFF + #F5EDF9 + #C7C0CB + #000000 + #E7E0E8 + #000000 + #513E75 + #EBDDFF + #000000 + #D3BCFD + #18023B + #E9DEF8 + #000000 + #CDC2DB + #140E20 + #FFD9E1 + #000000 + #F0B7C5 + #250611 + #151218 + #524F55 + #000000 + #211F24 + #322F35 + #3D3A40 + #49454C + diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..b250ff9 --- /dev/null +++ b/app/src/main/res/values-night/styles.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..7cfc9ce --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,8 @@ + + + + Mobile + Work + Home + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..5e306a7 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..d8f67da 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,146 @@ #FF018786 #FF000000 #FFFFFFFF + + #68548E + #FFFFFF + #EBDDFF + #4F3D74 + #635B70 + #FFFFFF + #E9DEF8 + #4B4358 + #7E525D + #FFFFFF + #FFD9E1 + #643B46 + #BA1A1A + #FFFFFF + #FFDAD6 + #93000A + #FEF7FF + #1D1B20 + #FEF7FF + #1D1B20 + #E7E0EB + #49454E + #7A757F + #CBC4CF + #000000 + #322F35 + #F5EFF7 + #D3BCFD + #EBDDFF + #230F46 + #D3BCFD + #4F3D74 + #E9DEF8 + #1F182B + #CDC2DB + #4B4358 + #FFD9E1 + #31101B + #F0B7C5 + #643B46 + #DED8E0 + #FEF7FF + #FFFFFF + #F8F1FA + #F2ECF4 + #EDE6EE + #E7E0E8 + #3E2C62 + #FFFFFF + #77639D + #FFFFFF + #3A3346 + #FFFFFF + #72697F + #FFFFFF + #512A36 + #FFFFFF + #8F606C + #FFFFFF + #740006 + #FFFFFF + #CF2C27 + #FFFFFF + #FEF7FF + #1D1B20 + #FEF7FF + #121016 + #E7E0EB + #38353D + #55515A + #706B75 + #000000 + #322F35 + #F5EFF7 + #D3BCFD + #77639D + #FFFFFF + #5E4B83 + #FFFFFF + #72697F + #FFFFFF + #595166 + #FFFFFF + #8F606C + #FFFFFF + #744854 + #FFFFFF + #CAC4CC + #FEF7FF + #FFFFFF + #F8F1FA + #EDE6EE + #E1DBE3 + #D6D0D7 + #342157 + #FFFFFF + #523F77 + #FFFFFF + #30293C + #FFFFFF + #4D465A + #FFFFFF + #45212C + #FFFFFF + #673D48 + #FFFFFF + #600004 + #FFFFFF + #98000A + #FFFFFF + #FEF7FF + #1D1B20 + #FEF7FF + #000000 + #E7E0EB + #000000 + #2E2B33 + #4C4751 + #000000 + #322F35 + #FFFFFF + #D3BCFD + #523F77 + #FFFFFF + #3B285E + #FFFFFF + #4D465A + #FFFFFF + #362F43 + #FFFFFF + #673D48 + #FFFFFF + #4D2732 + #FFFFFF + #BCB7BF + #FEF7FF + #FFFFFF + #F5EFF7 + #E7E0E8 + #D8D2DA + #CAC4CC \ 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 a7036ac..0bf01c1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,31 @@ View & Resources + arrow left button + Ivan Petrov + edit + description_search + Меню + attache + Корзина + Кнопка меню + выйти из аккаунта + Выйти + прикрепить + кнопка прикрепления файла + Name + Иконка профиля человека + Phone + Select + Select phone type button + Address + Notes + Иконка закладки в поле ввода адреса + Иконка календаря в поле ввода дня рождения + Иконка микрофона в поле ввода заметок + Введите город + Введите страну + City + Country + Date + Select your Birthday \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..84ba2ac --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,16 @@ + + + + + + + + - - + + + + + + + \ No newline at end of file From 40d32ffa27031168b4f8d269a5035d9a9f0d1366 Mon Sep 17 00:00:00 2001 From: YURY TILMAN Date: Fri, 17 Oct 2025 23:51:12 +0300 Subject: [PATCH 3/5] Add app bar to cart --- app/src/main/res/drawable/close.xml | 9 +++++++++ app/src/main/res/layout/activity_cart.xml | 17 +++++++++++++++++ app/src/main/res/values/strings_cart.xml | 5 +++++ 3 files changed, 31 insertions(+) create mode 100644 app/src/main/res/drawable/close.xml create mode 100644 app/src/main/res/values/strings_cart.xml diff --git a/app/src/main/res/drawable/close.xml b/app/src/main/res/drawable/close.xml new file mode 100644 index 0000000..cd6c8c1 --- /dev/null +++ b/app/src/main/res/drawable/close.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_cart.xml b/app/src/main/res/layout/activity_cart.xml index 57dc4d4..b2da0b4 100644 --- a/app/src/main/res/layout/activity_cart.xml +++ b/app/src/main/res/layout/activity_cart.xml @@ -6,4 +6,21 @@ android:layout_height="match_parent" tools:context=".CartActivity"> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings_cart.xml b/app/src/main/res/values/strings_cart.xml new file mode 100644 index 0000000..8725ab0 --- /dev/null +++ b/app/src/main/res/values/strings_cart.xml @@ -0,0 +1,5 @@ + + Cart + Close cart + close cart + \ No newline at end of file From 5552cdcc5e8c3f104df8c2c7e46c83abaae8c5d4 Mon Sep 17 00:00:00 2001 From: YURY TILMAN Date: Fri, 17 Oct 2025 23:51:23 +0300 Subject: [PATCH 4/5] Add cart item --- app/src/main/res/drawable/cart_item_icon.xml | 29 +++++++ app/src/main/res/layout/cart_item.xml | 79 ++++++++++++++++++++ app/src/main/res/menu/top_cart_bar.xml | 11 +++ 3 files changed, 119 insertions(+) create mode 100644 app/src/main/res/drawable/cart_item_icon.xml create mode 100644 app/src/main/res/layout/cart_item.xml create mode 100644 app/src/main/res/menu/top_cart_bar.xml diff --git a/app/src/main/res/drawable/cart_item_icon.xml b/app/src/main/res/drawable/cart_item_icon.xml new file mode 100644 index 0000000..f2987f4 --- /dev/null +++ b/app/src/main/res/drawable/cart_item_icon.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cart_item.xml b/app/src/main/res/layout/cart_item.xml new file mode 100644 index 0000000..1605542 --- /dev/null +++ b/app/src/main/res/layout/cart_item.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/top_cart_bar.xml b/app/src/main/res/menu/top_cart_bar.xml new file mode 100644 index 0000000..09086ca --- /dev/null +++ b/app/src/main/res/menu/top_cart_bar.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file From 71e5251acb4cbe1d6626785a6edd9855e1ff8f07 Mon Sep 17 00:00:00 2001 From: YURY TILMAN Date: Mon, 20 Oct 2025 00:06:01 +0300 Subject: [PATCH 5/5] Cart activity complete --- .../homework/viewandresources/CartActivity.kt | 41 ++++++- .../homework/viewandresources/CartAdapter.kt | 52 +++++++++ .../viewandresources/CartViewHolder.kt | 46 ++++++++ .../homework/viewandresources/ItemListener.kt | 8 ++ .../homework/viewandresources/dto/Product.kt | 12 ++ app/src/main/res/drawable/mood_icon.xml | 9 ++ app/src/main/res/layout/activity_cart.xml | 104 ++++++++++++++++++ app/src/main/res/layout/cart_item.xml | 13 +-- app/src/main/res/menu/top_app_bar.xml | 1 + app/src/main/res/menu/top_cart_bar.xml | 4 +- app/src/main/res/values-night/styles.xml | 4 +- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/strings_cart.xml | 6 + app/src/main/res/values/styles.xml | 38 +++++++ 14 files changed, 327 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/otus/gpb/homework/viewandresources/CartAdapter.kt create mode 100644 app/src/main/java/otus/gpb/homework/viewandresources/CartViewHolder.kt create mode 100644 app/src/main/java/otus/gpb/homework/viewandresources/ItemListener.kt create mode 100644 app/src/main/java/otus/gpb/homework/viewandresources/dto/Product.kt create mode 100644 app/src/main/res/drawable/mood_icon.xml diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/CartActivity.kt b/app/src/main/java/otus/gpb/homework/viewandresources/CartActivity.kt index b6cbf73..9547acc 100644 --- a/app/src/main/java/otus/gpb/homework/viewandresources/CartActivity.kt +++ b/app/src/main/java/otus/gpb/homework/viewandresources/CartActivity.kt @@ -1,11 +1,46 @@ package otus.gpb.homework.viewandresources -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.widget.LinearLayout +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.DividerItemDecoration +import otus.gpb.homework.viewandresources.databinding.ActivityCartBinding +import otus.gpb.homework.viewandresources.dto.Product +import java.util.UUID + +class CartActivity : AppCompatActivity(), ItemListener { + + private val products by lazy { generateTestData() } + private val adapter by lazy { CartAdapter(products, this) } + + lateinit var activityCartBinding: ActivityCartBinding -class CartActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_cart) + activityCartBinding = ActivityCartBinding.inflate(layoutInflater) + setContentView(activityCartBinding.root) + val cartListView = activityCartBinding.cartListView + cartListView.addItemDecoration(DividerItemDecoration(this, LinearLayout.VERTICAL)) + cartListView.adapter = adapter +// adapter.notifyDataSetChanged() + activityCartBinding.orderTotalValue.text = + products.sumOf { it.price.replace("$", "").toInt() }.toString() } + + fun generateTestData() = Array(22) { + Product( + UUID.randomUUID(), + R.drawable.cart_item_icon, + "Product $it", + "Category $it", + "lorem ipsum dolor sit amet, consectetur adipiscing elit", + "$$it" + ) + }.toMutableList() + + override fun onItemClick(id: UUID) { + Toast.makeText(this, "Clicked on item with id $id", Toast.LENGTH_SHORT).show() + } + } \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/CartAdapter.kt b/app/src/main/java/otus/gpb/homework/viewandresources/CartAdapter.kt new file mode 100644 index 0000000..3205705 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/CartAdapter.kt @@ -0,0 +1,52 @@ +package otus.gpb.homework.viewandresources + +import android.content.Context +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import otus.gpb.homework.viewandresources.databinding.CartItemBinding +import otus.gpb.homework.viewandresources.dto.Product + +/** + * Cвязывает данные [Product] с представлениями [CartViewHolder] + * */ +class CartAdapter( + private val dataSet: MutableList, + private val itemListener: ItemListener, +) : RecyclerView.Adapter() { + + + fun removeItem(index: Int) { + dataSet.removeAt(index) + notifyItemRemoved(index) + } + + /** + * [RecyclerView] вызывает этот метод всякий раз, + * когда ему необходимо создать новый ViewHolder . + * Метод создаёт и инициализирует ViewHolder и связанный с ним View , + * но не заполняет содержимое представления, + * так как ViewHolder ещё не привязан к определённым данным. + * */ + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartViewHolder { + val cartItemBinding: CartItemBinding = + CartItemBinding.inflate( + LayoutInflater.from(parent.context), parent, false + ) + return CartViewHolder(cartItemBinding, itemListener) + } + + /** + * [RecyclerView] вызывает этот метод, чтобы связать ViewHolder с данными. + * Метод извлекает соответствующие данные и использует их для заполнения макета держателя представления. + * Например, если RecyclerView отображает список имён, + * метод может найти нужное имя в списке и заполнить виджет TextView держателя представления. + * */ + override fun onBindViewHolder(holder: CartViewHolder, position: Int) = + holder.bind(dataSet[position]) + + override fun getItemCount() = dataSet.size + + +} + diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/CartViewHolder.kt b/app/src/main/java/otus/gpb/homework/viewandresources/CartViewHolder.kt new file mode 100644 index 0000000..4c30f72 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/CartViewHolder.kt @@ -0,0 +1,46 @@ +package otus.gpb.homework.viewandresources + +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.imageview.ShapeableImageView +import otus.gpb.homework.viewandresources.databinding.CartItemBinding +import otus.gpb.homework.viewandresources.dto.Product + +/** + * Обёртка вокруг View, и этим представлением управляет RecyclerView . + * */ +class CartViewHolder( + private val cartItemBinding: CartItemBinding, + private val itemListener: ItemListener +) : RecyclerView.ViewHolder(cartItemBinding.root) { + + init { + println("init CartViewHolder") + } + + val productImageView: ImageView = cartItemBinding.productImage + val productNameView: TextView = cartItemBinding.productName + val categoryView: TextView = cartItemBinding.category + val descriptionView: TextView = cartItemBinding.description + val priceView: TextView = cartItemBinding.price + + + fun bind(product: Product) { + with(product) { + println("bind CartViewHolder with id $id.}") + //todo разобраться, почему без этой строки не отображается + productImageView.setImageResource(imageResId) + productNameView.text = productName + categoryView.text = category + descriptionView.text = description + priceView.text = price + } + cartItemBinding.root.setOnClickListener { it -> + itemListener.onItemClick(product.id) + } + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/ItemListener.kt b/app/src/main/java/otus/gpb/homework/viewandresources/ItemListener.kt new file mode 100644 index 0000000..93f0109 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/ItemListener.kt @@ -0,0 +1,8 @@ +package otus.gpb.homework.viewandresources + +import java.util.UUID + +interface ItemListener { + fun onItemClick(id: UUID) + +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/dto/Product.kt b/app/src/main/java/otus/gpb/homework/viewandresources/dto/Product.kt new file mode 100644 index 0000000..00a33cc --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/dto/Product.kt @@ -0,0 +1,12 @@ +package otus.gpb.homework.viewandresources.dto + +import java.util.UUID + +data class Product( + val id: UUID, + val imageResId: Int, + val productName: String, + val category: String, + val description: String, + val price: String +) \ No newline at end of file diff --git a/app/src/main/res/drawable/mood_icon.xml b/app/src/main/res/drawable/mood_icon.xml new file mode 100644 index 0000000..60e1954 --- /dev/null +++ b/app/src/main/res/drawable/mood_icon.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_cart.xml b/app/src/main/res/layout/activity_cart.xml index b2da0b4..218b97a 100644 --- a/app/src/main/res/layout/activity_cart.xml +++ b/app/src/main/res/layout/activity_cart.xml @@ -8,12 +8,17 @@ + + + + + + + + + + + + + + + + + + + + +