Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions app/src/main/java/com/uzlov/moviefind/HostActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.uzlov.moviefind.databinding.ActivityMainBinding
import com.uzlov.moviefind.fragments.FilmFragment
import com.uzlov.moviefind.fragments.HomeFragment
import com.uzlov.moviefind.fragments.PopularFilmsFragment

Expand All @@ -15,7 +16,7 @@ class HostActivity : AppCompatActivity() {
private val popularFilmsFragment = PopularFilmsFragment()
private val homeFragment = HomeFragment()
private var activeFragment = Fragment()

private var filmsFragmentL = FilmFragment()

private var _viewBinding: ActivityMainBinding ?= null
private val viewBinding get() = _viewBinding!!
Expand All @@ -39,7 +40,7 @@ class HostActivity : AppCompatActivity() {
}
R.id.menu_settings -> {
Toast.makeText(this, getString(R.string.in_developing), Toast.LENGTH_SHORT).show()
true
false
}
else -> false
}
Expand All @@ -50,12 +51,14 @@ class HostActivity : AppCompatActivity() {
supportFragmentManager.beginTransaction().apply {
add(R.id.fragment_container, homeFragment, "homeFragment").hide(homeFragment)
add(R.id.fragment_container, popularFilmsFragment, "popularFilmsFragment").hide(popularFilmsFragment)
add(R.id.fragment_container, filmsFragmentL, "filmsFragmentL").hide(filmsFragmentL)
}.commit()

setActiveFragment(homeFragment)
}

private fun setActiveFragment(fragment: Fragment){
private fun setActiveFragment(fragment: Fragment) {
if(supportFragmentManager.backStackEntryCount > 0) supportFragmentManager.popBackStack()
supportFragmentManager.beginTransaction().hide(activeFragment).show(fragment).commit()
activeFragment = fragment
}
Expand Down
74 changes: 74 additions & 0 deletions app/src/main/java/com/uzlov/moviefind/fragments/FilmFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.uzlov.moviefind.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.uzlov.moviefind.databinding.FragmentFilmBinding
import com.uzlov.moviefind.model.TestFilm
import com.uzlov.moviefind.ui.ActorFilmsAdapter
import com.uzlov.moviefind.ui.MyItemDecorator

class FilmFragment : Fragment() {

private var _viewBinding: FragmentFilmBinding?=null
private val viewBinding get() = _viewBinding!!
private lateinit var film : TestFilm

companion object {
fun newInstance(testFilm: TestFilm): FilmFragment {
val data = Bundle().apply {
putParcelable("film_key", testFilm)
}
return FilmFragment().apply { arguments = data }
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
film = arguments?.getParcelable("film_key") ?: TestFilm()
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_viewBinding = FragmentFilmBinding.inflate(layoutInflater, container, false)
return viewBinding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val actorAdapter = ActorFilmsAdapter()
viewBinding.apply {

titleTv.text = film.name
ratingFilm.rating = film.rating.toFloat()
descriptionTV.text = film.description
genreFilmTv.text = film.genre
studioFilm.text = film.studio
yearFilmTv.text = film.year

recyclerViewActor.apply {
adapter = actorAdapter
layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false)
addItemDecoration(MyItemDecorator(), RecyclerView.HORIZONTAL)
}

backButton.setOnClickListener {
parentFragmentManager.popBackStack()
}
}

}


override fun onDestroy() {
_viewBinding = null
super.onDestroy()
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.uzlov.moviefind.fragments

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand All @@ -10,17 +9,19 @@ import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.uzlov.moviefind.R
import com.uzlov.moviefind.databinding.PopularFilmsFragmentBinding
import com.uzlov.moviefind.model.TestFilm
import com.uzlov.moviefind.ui.MyItemDecorator
import com.uzlov.moviefind.ui.PopularFilmsAdapter
import com.uzlov.moviefind.viewmodels.FilmsViewModel

class PopularFilmsFragment : Fragment() {
class PopularFilmsFragment : Fragment(), OnClickListenerAdapter {

private lateinit var viewModel: FilmsViewModel
private var _viewBinding: PopularFilmsFragmentBinding?=null
private val viewBinding get() = _viewBinding!!

private val films:ArrayList<TestFilm> = ArrayList()
private lateinit var popularFilmsAdapter : PopularFilmsAdapter

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
Expand All @@ -30,10 +31,14 @@ class PopularFilmsFragment : Fragment() {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
popularFilmsAdapter = PopularFilmsAdapter()
popularFilmsAdapter = PopularFilmsAdapter(this)
viewModel = ViewModelProvider(this).get(FilmsViewModel::class.java)
viewModel.getPopularFilms().observe(viewLifecycleOwner, {
showLoadedFilms(it)
films.apply {
clear()
addAll(it)
}
})
}

Expand All @@ -42,12 +47,25 @@ class PopularFilmsFragment : Fragment() {
viewBinding.recyclerView.apply {
layoutManager = LinearLayoutManager(requireContext())
adapter = popularFilmsAdapter
addItemDecoration(DividerItemDecoration(requireContext(), RecyclerView.VERTICAL))
addItemDecoration(MyItemDecorator(RecyclerView.VERTICAL))
}
}

override fun onDestroy() {
super.onDestroy()
_viewBinding = null
super.onDestroy()
}

override fun onClick(position: Int) {
parentFragmentManager.beginTransaction()
.hide(this)
.replace(R.id.fragment_container, FilmFragment.newInstance(films[position]))
.addToBackStack(null)
.commit()
}


}
interface OnClickListenerAdapter{
fun onClick(position: Int)
}
39 changes: 38 additions & 1 deletion app/src/main/java/com/uzlov/moviefind/model/TestFilm.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,40 @@
package com.uzlov.moviefind.model

data class TestFilm(val name:String, val genre:String)
import android.os.Parcel
import android.os.Parcelable

data class TestFilm(val name:String = "", val genre:String = "", val rating: Double = 0.0,
val description: String = "", val studio: String = "", val year: String = "") : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readDouble(),
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readString() ?: ""
) {
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(name)
parcel.writeString(genre)
parcel.writeDouble(rating)
parcel.writeString(description)
parcel.writeString(studio)
parcel.writeString(year)
}

override fun describeContents(): Int {
return 0
}

companion object CREATOR : Parcelable.Creator<TestFilm> {
override fun createFromParcel(parcel: Parcel): TestFilm {
return TestFilm(parcel)
}

override fun newArray(size: Int): Array<TestFilm?> {
return arrayOfNulls(size)
}
}
}
41 changes: 41 additions & 0 deletions app/src/main/java/com/uzlov/moviefind/ui/ActorFilmsAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.uzlov.moviefind.ui

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.uzlov.moviefind.R
import com.uzlov.moviefind.databinding.ItemActorBinding

class ActorFilmsAdapter : RecyclerView.Adapter<ActorFilmsHolder>() {
private val mListFilms:MutableList<String> = mutableListOf()

init {
mListFilms.add("Арнольд \n Цварцнеггер")
mListFilms.add("Майкл \n Бин")
mListFilms.add("Линда \n Хэмилтон")
mListFilms.add("Поп \n Уинфилд")
mListFilms.add("Лэн \n Хенриксен")
mListFilms.add("Бесс \n Мотта")
mListFilms.add("Эрл \n Боэн")
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ActorFilmsHolder {
val binding = ItemActorBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ActorFilmsHolder(binding)
}

override fun onBindViewHolder(holder: ActorFilmsHolder, position: Int) {
holder.onBind(mListFilms[position])
}

override fun getItemCount(): Int = mListFilms.size

}

class ActorFilmsHolder(private val binding: ItemActorBinding) : RecyclerView.ViewHolder(binding.root) {
fun onBind(actor : String){
binding.imageActor.background = ContextCompat.getDrawable(binding.root.context, R.drawable.actor)
binding.actorName.text = actor
}
}
14 changes: 14 additions & 0 deletions app/src/main/java/com/uzlov/moviefind/ui/MyItemDecorator.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.uzlov.moviefind.ui

import android.graphics.Rect
import androidx.recyclerview.widget.RecyclerView

class MyItemDecorator(private val orientation: Int = 1) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, itemPosition: Int, parent: RecyclerView) {
when(orientation) {
RecyclerView.HORIZONTAL -> outRect.set(Rect(16, 0, 16, 0))
RecyclerView.VERTICAL -> outRect.set(Rect(0, 16, 0, 16))
else -> outRect.set(Rect(16, 16, 16, 16))
}
}
}
38 changes: 21 additions & 17 deletions app/src/main/java/com/uzlov/moviefind/ui/PopularFilmsAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
package com.uzlov.moviefind.ui

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.uzlov.moviefind.R
import com.uzlov.moviefind.databinding.ItemFilmBinding
import com.uzlov.moviefind.databinding.PopularFilmsFragmentBinding
import com.uzlov.moviefind.model.Result
import com.uzlov.moviefind.fragments.OnClickListenerAdapter
import com.uzlov.moviefind.model.TestFilm

class PopularFilmsAdapter : RecyclerView.Adapter<PopularFilmsHolder>() {
private val mListFilms:MutableList<TestFilm> = mutableListOf()
class PopularFilmsAdapter(var listenerClick: OnClickListenerAdapter) :
RecyclerView.Adapter<PopularFilmsAdapter.PopularFilmsHolder>() {
private val mListFilms: MutableList<TestFilm> = mutableListOf()


fun addFilm(film : TestFilm ){
fun addFilm(film: TestFilm) {
mListFilms.add(film)
notifyItemInserted(mListFilms.size)
}

fun setTestFilms(films : List<TestFilm>){
fun setTestFilms(films: List<TestFilm>) {
mListFilms.apply {
clear()
addAll(films)
Expand All @@ -38,13 +35,20 @@ class PopularFilmsAdapter : RecyclerView.Adapter<PopularFilmsHolder>() {
holder.onBind(mListFilms[position])
}

override fun getItemCount(): Int = mListFilms.size

}

class PopularFilmsHolder(private val binding: ItemFilmBinding) : RecyclerView.ViewHolder(binding.root) {
fun onBind(film : TestFilm){
binding.nameFilmTV.text = film.name
binding.genreFilmTV.text = film.genre
override fun getItemCount(): Int = mListFilms.size

inner class PopularFilmsHolder(private val binding: ItemFilmBinding) :
RecyclerView.ViewHolder(binding.root) {
fun onBind(film: TestFilm) {
binding.apply {
nameFilmTV.text = film.name
genreFilmTVLabel.text = film.genre
root.setOnClickListener {
listenerClick.onClick(adapterPosition)
}
}
}
}
}


Loading