diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt deleted file mode 100644 index 630f1a1..0000000 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package fr.tf1.player.atelierplayermvvm.ui.list - -import android.view.LayoutInflater -import android.view.View -import android.view.View.OnClickListener -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import fr.tf1.player.atelierplayermvvm.R -import fr.tf1.player.atelierplayermvvm.data.model.Book - -class BookListAdapter(val onBookItemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { - private val items: MutableList = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooklListViewHolder { - val v: View = - LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false) - return BooklListViewHolder(v) - } - - override fun onBindViewHolder(holder: BooklListViewHolder, position: Int) { - val book = items[position] - holder.bookName.text = book.bookName - val context = holder.bookCover.context - Glide.with(context) - .load(book.picUrl) - .into(holder.bookCover) - holder.itemView.setOnClickListener{ - book.id?.let { - onBookItemClick(it.toInt()) - } - } - } - - fun refresh(newItems: List? = null) { - newItems?.let { - items.clear() - items.addAll(newItems) - } - notifyDataSetChanged() - } - - override fun getItemCount(): Int { - return items.size - } - - class BooklListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val bookCover: ImageView = itemView.findViewById(R.id.bookCover) - val bookName: TextView = itemView.findViewById(R.id.bookName) - - } -} - diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt deleted file mode 100644 index 630f1a1..0000000 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package fr.tf1.player.atelierplayermvvm.ui.list - -import android.view.LayoutInflater -import android.view.View -import android.view.View.OnClickListener -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import fr.tf1.player.atelierplayermvvm.R -import fr.tf1.player.atelierplayermvvm.data.model.Book - -class BookListAdapter(val onBookItemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { - private val items: MutableList = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooklListViewHolder { - val v: View = - LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false) - return BooklListViewHolder(v) - } - - override fun onBindViewHolder(holder: BooklListViewHolder, position: Int) { - val book = items[position] - holder.bookName.text = book.bookName - val context = holder.bookCover.context - Glide.with(context) - .load(book.picUrl) - .into(holder.bookCover) - holder.itemView.setOnClickListener{ - book.id?.let { - onBookItemClick(it.toInt()) - } - } - } - - fun refresh(newItems: List? = null) { - newItems?.let { - items.clear() - items.addAll(newItems) - } - notifyDataSetChanged() - } - - override fun getItemCount(): Int { - return items.size - } - - class BooklListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val bookCover: ImageView = itemView.findViewById(R.id.bookCover) - val bookName: TextView = itemView.findViewById(R.id.bookName) - - } -} - diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt index 2c31861..c1bf4f8 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt @@ -12,13 +12,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import com.google.android.material.internal.FlowLayout import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach - @Composable fun BookListScreen( viewState: State, diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt deleted file mode 100644 index 630f1a1..0000000 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package fr.tf1.player.atelierplayermvvm.ui.list - -import android.view.LayoutInflater -import android.view.View -import android.view.View.OnClickListener -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import fr.tf1.player.atelierplayermvvm.R -import fr.tf1.player.atelierplayermvvm.data.model.Book - -class BookListAdapter(val onBookItemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { - private val items: MutableList = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooklListViewHolder { - val v: View = - LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false) - return BooklListViewHolder(v) - } - - override fun onBindViewHolder(holder: BooklListViewHolder, position: Int) { - val book = items[position] - holder.bookName.text = book.bookName - val context = holder.bookCover.context - Glide.with(context) - .load(book.picUrl) - .into(holder.bookCover) - holder.itemView.setOnClickListener{ - book.id?.let { - onBookItemClick(it.toInt()) - } - } - } - - fun refresh(newItems: List? = null) { - newItems?.let { - items.clear() - items.addAll(newItems) - } - notifyDataSetChanged() - } - - override fun getItemCount(): Int { - return items.size - } - - class BooklListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val bookCover: ImageView = itemView.findViewById(R.id.bookCover) - val bookName: TextView = itemView.findViewById(R.id.bookName) - - } -} - diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt index 2c31861..c1bf4f8 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt @@ -12,13 +12,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import com.google.android.material.internal.FlowLayout import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach - @Composable fun BookListScreen( viewState: State, diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt index cca7814..5dcb050 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.list -import android.content.Intent -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity @AndroidEntryPoint class ListActivity : AppCompatActivity() { private val viewModel: ListViewModel by viewModels() - private var bookListAdapter = BookListAdapter { bookId -> - val intent = Intent(this@ListActivity, BookDetailActivity::class.java) - intent.putExtra("BOOK_ID", bookId) - startActivity(intent) - } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt deleted file mode 100644 index 630f1a1..0000000 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package fr.tf1.player.atelierplayermvvm.ui.list - -import android.view.LayoutInflater -import android.view.View -import android.view.View.OnClickListener -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import fr.tf1.player.atelierplayermvvm.R -import fr.tf1.player.atelierplayermvvm.data.model.Book - -class BookListAdapter(val onBookItemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { - private val items: MutableList = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooklListViewHolder { - val v: View = - LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false) - return BooklListViewHolder(v) - } - - override fun onBindViewHolder(holder: BooklListViewHolder, position: Int) { - val book = items[position] - holder.bookName.text = book.bookName - val context = holder.bookCover.context - Glide.with(context) - .load(book.picUrl) - .into(holder.bookCover) - holder.itemView.setOnClickListener{ - book.id?.let { - onBookItemClick(it.toInt()) - } - } - } - - fun refresh(newItems: List? = null) { - newItems?.let { - items.clear() - items.addAll(newItems) - } - notifyDataSetChanged() - } - - override fun getItemCount(): Int { - return items.size - } - - class BooklListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val bookCover: ImageView = itemView.findViewById(R.id.bookCover) - val bookName: TextView = itemView.findViewById(R.id.bookName) - - } -} - diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt index 2c31861..c1bf4f8 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt @@ -12,13 +12,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import com.google.android.material.internal.FlowLayout import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach - @Composable fun BookListScreen( viewState: State, diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt index cca7814..5dcb050 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.list -import android.content.Intent -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity @AndroidEntryPoint class ListActivity : AppCompatActivity() { private val viewModel: ListViewModel by viewModels() - private var bookListAdapter = BookListAdapter { bookId -> - val intent = Intent(this@ListActivity, BookDetailActivity::class.java) - intent.putExtra("BOOK_ID", bookId) - startActivity(intent) - } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml deleted file mode 100644 index 08bebc3..0000000 --- a/app/src/main/res/layout/activity_list.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt deleted file mode 100644 index 630f1a1..0000000 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package fr.tf1.player.atelierplayermvvm.ui.list - -import android.view.LayoutInflater -import android.view.View -import android.view.View.OnClickListener -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import fr.tf1.player.atelierplayermvvm.R -import fr.tf1.player.atelierplayermvvm.data.model.Book - -class BookListAdapter(val onBookItemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { - private val items: MutableList = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooklListViewHolder { - val v: View = - LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false) - return BooklListViewHolder(v) - } - - override fun onBindViewHolder(holder: BooklListViewHolder, position: Int) { - val book = items[position] - holder.bookName.text = book.bookName - val context = holder.bookCover.context - Glide.with(context) - .load(book.picUrl) - .into(holder.bookCover) - holder.itemView.setOnClickListener{ - book.id?.let { - onBookItemClick(it.toInt()) - } - } - } - - fun refresh(newItems: List? = null) { - newItems?.let { - items.clear() - items.addAll(newItems) - } - notifyDataSetChanged() - } - - override fun getItemCount(): Int { - return items.size - } - - class BooklListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val bookCover: ImageView = itemView.findViewById(R.id.bookCover) - val bookName: TextView = itemView.findViewById(R.id.bookName) - - } -} - diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt index 2c31861..c1bf4f8 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt @@ -12,13 +12,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import com.google.android.material.internal.FlowLayout import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach - @Composable fun BookListScreen( viewState: State, diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt index cca7814..5dcb050 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.list -import android.content.Intent -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity @AndroidEntryPoint class ListActivity : AppCompatActivity() { private val viewModel: ListViewModel by viewModels() - private var bookListAdapter = BookListAdapter { bookId -> - val intent = Intent(this@ListActivity, BookDetailActivity::class.java) - intent.putExtra("BOOK_ID", bookId) - startActivity(intent) - } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml deleted file mode 100644 index 08bebc3..0000000 --- a/app/src/main/res/layout/activity_list.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/book_detail.xml b/app/src/main/res/layout/book_detail.xml deleted file mode 100644 index 9729ec8..0000000 --- a/app/src/main/res/layout/book_detail.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt index 7cf37dc..fc8f74f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/data/usecases/FetchListUseCase.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.data.usecases -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.repo.BookRepository import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt index 9d86be1..3e3e0b9 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/di/module/AppModule.kt @@ -1,7 +1,5 @@ package fr.tf1.player.atelierplayermvvm.di.module -import com.google.gson.Gson -import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt index 4f7ab64..da41e3f 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.details import android.os.Bundle -import android.widget.ImageView -import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.R @AndroidEntryPoint class BookDetailActivity : AppCompatActivity() { private val viewModel: BookDetailViewModel by viewModels() - private lateinit var bookCover: ImageView - private lateinit var bookTitle: TextView - private lateinit var authorName: TextView - private lateinit var bookDescription: TextView - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ComposeView(this).apply { @@ -26,25 +18,7 @@ } }) - bookTitle = findViewById(R.id.bookTitle) - authorName = findViewById(R.id.authorName) - bookDescription = findViewById(R.id.bookDescription) - bookCover = findViewById(R.id.bookCover) - - val bookId = intent.getIntExtra("BOOK_ID", 0) -// viewModel.book.observe(this) { book -> -// if (book != null) { -// bookTitle.text = book.bookName -// authorName.text = book.authorName -// bookDescription.text = book.bookDesc -// Glide.with(this@BookDetailActivity) -// .load(book.picUrl) -// .into(bookCover) -// } else { -// Toast.makeText(this@BookDetailActivity, "No book found", Toast.LENGTH_LONG).show() -// } -// -// } - viewModel.fetchBookDetail(bookId) + val bookId = intent.getStringExtra("BOOK_ID") + viewModel.fetchBookDetail(bookId?.toInt() ?: 0) } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt index f6c0365..c933b4e 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailScreen.kt @@ -7,32 +7,30 @@ import androidx.compose.ui.Modifier import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage -import fr.tf1.player.atelierplayermvvm.data.model.Book @OptIn(ExperimentalGlideComposeApi::class) @Composable fun BookDetailScreen(viewState: State) { Column(modifier = Modifier.fillMaxSize()) { - Row(modifier = Modifier.fillMaxWidth()) { - when (val state = viewState.value) { - is BookDetailContract.State.Loading -> { - Text(text = "Loading") - } - is BookDetailContract.State.Error -> { - val message = state.msg - Text(text = message) - } - is BookDetailContract.State.Completed -> { - val book = state.book + when (val state = viewState.value) { + is BookDetailContract.State.Loading -> { + Text(text = "Loading") + } + is BookDetailContract.State.Error -> { + val message = state.msg + Text(text = message) + } + is BookDetailContract.State.Completed -> { + val book = state.book + Row(modifier = Modifier.fillMaxWidth()) { GlideImage(model = book.picUrl, contentDescription = book.bookName) - Column(modifier = Modifier.fillMaxHeight()) { + Column(modifier = Modifier.wrapContentSize()) { Text(text = book.bookName ?: "") Text(text = book.authorName ?: "") + } } - } - + Text(text = book.bookDesc ?: "") } } - Text(text = "desc") } } \ No newline at end of file diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt index 8f8a949..d3b5fdd 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/details/BookDetailViewModel.kt @@ -2,14 +2,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import fr.tf1.player.atelierplayermvvm.data.model.Book import fr.tf1.player.atelierplayermvvm.data.usecases.FetchDetailUseCase -import fr.tf1.player.atelierplayermvvm.data.usecases.FetchListUseCase -import fr.tf1.player.atelierplayermvvm.ui.list.BookListContract import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt deleted file mode 100644 index 630f1a1..0000000 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListAdapter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package fr.tf1.player.atelierplayermvvm.ui.list - -import android.view.LayoutInflater -import android.view.View -import android.view.View.OnClickListener -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import fr.tf1.player.atelierplayermvvm.R -import fr.tf1.player.atelierplayermvvm.data.model.Book - -class BookListAdapter(val onBookItemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { - private val items: MutableList = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooklListViewHolder { - val v: View = - LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false) - return BooklListViewHolder(v) - } - - override fun onBindViewHolder(holder: BooklListViewHolder, position: Int) { - val book = items[position] - holder.bookName.text = book.bookName - val context = holder.bookCover.context - Glide.with(context) - .load(book.picUrl) - .into(holder.bookCover) - holder.itemView.setOnClickListener{ - book.id?.let { - onBookItemClick(it.toInt()) - } - } - } - - fun refresh(newItems: List? = null) { - newItems?.let { - items.clear() - items.addAll(newItems) - } - notifyDataSetChanged() - } - - override fun getItemCount(): Int { - return items.size - } - - class BooklListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val bookCover: ImageView = itemView.findViewById(R.id.bookCover) - val bookName: TextView = itemView.findViewById(R.id.bookName) - - } -} - diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt index 2c31861..c1bf4f8 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/BookListScreen.kt @@ -12,13 +12,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import com.google.android.material.internal.FlowLayout import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach - @Composable fun BookListScreen( viewState: State, diff --git a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt index cca7814..5dcb050 100644 --- a/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt +++ b/app/src/main/java/fr/tf1/player/atelierplayermvvm/ui/list/ListActivity.kt @@ -1,23 +1,15 @@ package fr.tf1.player.atelierplayermvvm.ui.list -import android.content.Intent -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.platform.ComposeView -import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint -import fr.tf1.player.atelierplayermvvm.ui.details.BookDetailActivity @AndroidEntryPoint class ListActivity : AppCompatActivity() { private val viewModel: ListViewModel by viewModels() - private var bookListAdapter = BookListAdapter { bookId -> - val intent = Intent(this@ListActivity, BookDetailActivity::class.java) - intent.putExtra("BOOK_ID", bookId) - startActivity(intent) - } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml deleted file mode 100644 index 08bebc3..0000000 --- a/app/src/main/res/layout/activity_list.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/book_detail.xml b/app/src/main/res/layout/book_detail.xml deleted file mode 100644 index 9729ec8..0000000 --- a/app/src/main/res/layout/book_detail.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/book_item.xml b/app/src/main/res/layout/book_item.xml deleted file mode 100644 index ada1307..0000000 --- a/app/src/main/res/layout/book_item.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - \ No newline at end of file