diff --git a/app/build.gradle b/app/build.gradle index debcfaf..17f604f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,6 +29,10 @@ android { kotlinOptions { jvmTarget = '17' } + + buildFeatures{ + viewBinding = true + } } dependencies { 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..1f619fd 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,80 @@ package otus.gpb.homework.viewandresources -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.Menu +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.Toolbar +import otus.gpb.homework.viewandresources.databinding.ActivityCartBinding + class CartActivity : AppCompatActivity() { + + private var orderTotal = 0.0 + private var subtotal = 0 + private var shipping = 25.0 + private var tax = 10.50 + private val listItem = mutableListOf() + private val binding by lazy { + ActivityCartBinding.inflate(layoutInflater) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_cart) + setContentView(binding.root) + setSupportActionBar(binding.myToolbar) + getSupportActionBar()?.setDisplayHomeAsUpEnabled(true) + getSupportActionBar()?.setDisplayShowHomeEnabled(true) + binding.myToolbar.setNavigationOnClickListener() { + val intent = MainActivity.newIntent(this) + startActivity(intent) + } + createListCartItem() + val adapter = ListAdapter() + adapter.list = listItem + binding.textViewCountItems.setText(String.format( + this.resources.getString(R.string.count_items), + adapter.list.size + )) + binding.recyclerViewCartList.adapter = adapter + calculateSubtotal() + calculateOrderTotal() + setResults() + } + + private fun calculateSubtotal(){ + var sum = 0 + for(cartItem in listItem){ + sum += cartItem.price + } + subtotal = sum + } + + private fun calculateOrderTotal(){ + orderTotal = tax + shipping + subtotal + } + private fun setResults(){ + binding.textViewShipping.setText(shipping.toString()) + binding.textViewSubtotal.setText(subtotal.toString()) + binding.textViewOrderTotal.setText(orderTotal.toString()) + binding.textViewTax.setText(tax.toString()) + } + + private fun createListCartItem() { + for(i in 1..4){ + val cartItem = CartItem(i, 35, CATEGORY, DESCRIPTION, IMAGE) + listItem.add(cartItem) + } + } + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.menu_cart, menu) + return true + } + + companion object{ + private const val DESCRIPTION = "Supporting line text lorem ipsum..." + private const val CATEGORY = "Category" + private const val IMAGE = "drawable/food_steak" } } \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/CartItem.kt b/app/src/main/java/otus/gpb/homework/viewandresources/CartItem.kt new file mode 100644 index 0000000..2b6a117 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/CartItem.kt @@ -0,0 +1,9 @@ +package otus.gpb.homework.viewandresources + +class CartItem( + val index: Int, + val price: Int, + val category: String, + val description: String, + val image: String +) \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/CartItemViewHolder.kt b/app/src/main/java/otus/gpb/homework/viewandresources/CartItemViewHolder.kt new file mode 100644 index 0000000..522d47b --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/CartItemViewHolder.kt @@ -0,0 +1,15 @@ +package otus.gpb.homework.viewandresources + +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView.ViewHolder + +class CartItemViewHolder(view: View): ViewHolder(view){ + + val textViewCategory = view.findViewById(R.id.textViewCategory) + val textViewDescription = view.findViewById(R.id.textViewDescription) + val textViewPrice = view.findViewById(R.id.textViewPrice) + val textViewNumber = view.findViewById(R.id.textViewNumber) + val imageView = view.findViewById(R.id.imageView) +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/ContactsActivity.kt b/app/src/main/java/otus/gpb/homework/viewandresources/ContactsActivity.kt index 25f1ffb..5ea0ef1 100644 --- a/app/src/main/java/otus/gpb/homework/viewandresources/ContactsActivity.kt +++ b/app/src/main/java/otus/gpb/homework/viewandresources/ContactsActivity.kt @@ -2,10 +2,29 @@ package otus.gpb.homework.viewandresources import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.Menu +import otus.gpb.homework.viewandresources.databinding.ActivityContactsBinding class ContactsActivity : AppCompatActivity() { + + private val binding by lazy { + ActivityContactsBinding.inflate(layoutInflater) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_contacts) + setContentView(binding.root) + setSupportActionBar(binding.myToolbar) + getSupportActionBar()?.setDisplayHomeAsUpEnabled(true) + getSupportActionBar()?.setDisplayShowHomeEnabled(true) + binding.myToolbar.setNavigationOnClickListener() { + val intent = MainActivity.newIntent(this) + startActivity(intent) + } + } + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.menu_contacts, menu) + return true } } \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/ListAdapter.kt b/app/src/main/java/otus/gpb/homework/viewandresources/ListAdapter.kt new file mode 100644 index 0000000..9163850 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/viewandresources/ListAdapter.kt @@ -0,0 +1,38 @@ +package otus.gpb.homework.viewandresources + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView.Adapter +import otus.gpb.homework.viewandresources.databinding.ActivityCartBinding +import otus.gpb.homework.viewandresources.databinding.CartItemBinding + +class ListAdapter: Adapter() { + + var list = listOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartItemViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.cart_item, parent, false) + return CartItemViewHolder(view) + } + + override fun onBindViewHolder(holder: CartItemViewHolder, position: Int) { + val cartItem = list[position] + holder.textViewNumber.setText(String.format( + holder.itemView.context.resources.getString(R.string.number_of_list), + cartItem.index + )) + holder.textViewPrice.setText(String.format( + holder.itemView.context.resources.getString(R.string.price), + cartItem.price + )) + holder.textViewDescription.setText(cartItem.description) + holder.textViewCategory.setText(cartItem.category) + val resourceId = holder.itemView.context.resources.getIdentifier(cartItem.image, "drawable", holder.itemView.context.packageName) + holder.imageView.setImageResource(resourceId) + + } + + override fun getItemCount(): Int { + return list.size + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/viewandresources/MainActivity.kt b/app/src/main/java/otus/gpb/homework/viewandresources/MainActivity.kt index 22b779c..24434dc 100644 --- a/app/src/main/java/otus/gpb/homework/viewandresources/MainActivity.kt +++ b/app/src/main/java/otus/gpb/homework/viewandresources/MainActivity.kt @@ -1,5 +1,6 @@ package otus.gpb.homework.viewandresources +import android.content.Context import android.content.Intent import android.os.Bundle import android.widget.Button @@ -24,4 +25,10 @@ class MainActivity : AppCompatActivity() { .show() } } + + companion object{ + fun newIntent(context: Context): Intent { + return Intent(context, MainActivity::class.java) + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/account.xml b/app/src/main/res/drawable/account.xml new file mode 100644 index 0000000..0b3df07 --- /dev/null +++ b/app/src/main/res/drawable/account.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/bookmark_outline.xml b/app/src/main/res/drawable/bookmark_outline.xml new file mode 100644 index 0000000..aba09c0 --- /dev/null +++ b/app/src/main/res/drawable/bookmark_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/border_bottom.xml b/app/src/main/res/drawable/border_bottom.xml new file mode 100644 index 0000000..dee8c06 --- /dev/null +++ b/app/src/main/res/drawable/border_bottom.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/border_gray_dark.xml b/app/src/main/res/drawable/border_gray_dark.xml new file mode 100644 index 0000000..a6f8451 --- /dev/null +++ b/app/src/main/res/drawable/border_gray_dark.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/calendar_today.xml b/app/src/main/res/drawable/calendar_today.xml new file mode 100644 index 0000000..f248e35 --- /dev/null +++ b/app/src/main/res/drawable/calendar_today.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/cellphone_check.xml b/app/src/main/res/drawable/cellphone_check.xml new file mode 100644 index 0000000..e8b4cca --- /dev/null +++ b/app/src/main/res/drawable/cellphone_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/close_circle_outline.xml b/app/src/main/res/drawable/close_circle_outline.xml new file mode 100644 index 0000000..7d76a44 --- /dev/null +++ b/app/src/main/res/drawable/close_circle_outline.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..53254a9 --- /dev/null +++ b/app/src/main/res/drawable/dots_vertical.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/emoticon_excited_outline.xml b/app/src/main/res/drawable/emoticon_excited_outline.xml new file mode 100644 index 0000000..43d7e0d --- /dev/null +++ b/app/src/main/res/drawable/emoticon_excited_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/food_steak.xml b/app/src/main/res/drawable/food_steak.xml new file mode 100644 index 0000000..19e567e --- /dev/null +++ b/app/src/main/res/drawable/food_steak.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/map_marker_outline.xml b/app/src/main/res/drawable/map_marker_outline.xml new file mode 100644 index 0000000..cf757b2 --- /dev/null +++ b/app/src/main/res/drawable/map_marker_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/menu_down.xml b/app/src/main/res/drawable/menu_down.xml new file mode 100644 index 0000000..22bfc56 --- /dev/null +++ b/app/src/main/res/drawable/menu_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/microphone.xml b/app/src/main/res/drawable/microphone.xml new file mode 100644 index 0000000..715463e --- /dev/null +++ b/app/src/main/res/drawable/microphone.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..c2c6419 --- /dev/null +++ b/app/src/main/res/drawable/paperclip.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/rectangle_gray.xml b/app/src/main/res/drawable/rectangle_gray.xml new file mode 100644 index 0000000..bc70444 --- /dev/null +++ b/app/src/main/res/drawable/rectangle_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_balance_sunny.xml b/app/src/main/res/drawable/white_balance_sunny.xml new file mode 100644 index 0000000..75e9b83 --- /dev/null +++ b/app/src/main/res/drawable/white_balance_sunny.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..a3fb865 100644 --- a/app/src/main/res/layout/activity_cart.xml +++ b/app/src/main/res/layout/activity_cart.xml @@ -6,4 +6,168 @@ android:layout_height="match_parent" tools:context=".CartActivity"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +