From b73285cdae30cc1ea9f16e1298a3cfd81e8a83b3 Mon Sep 17 00:00:00 2001 From: gisele Date: Thu, 16 Mar 2023 16:10:41 -0300 Subject: [PATCH 01/11] Recriando a LaunchActivity linkando no manifest --- .../spaceapp/presentation/LaunchActivity.kt | 53 ++++++++- .../src/main/res/layout/activity_launch.xml | 112 ++++++++++++++++++ 2 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt index 5fb552c..2343c4d 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt @@ -1,4 +1,55 @@ package com.devpass.spaceapp.presentation -class LaunchActivity { +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.bumptech.glide.Glide +import com.devpass.spaceapp.R +import com.devpass.spaceapp.data.model.NextLaunchesModel +import com.devpass.spaceapp.databinding.ActivityLaunchBinding +import com.google.android.material.tabs.TabLayoutMediator + +class LaunchActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivityLaunchBinding.inflate(layoutInflater) + setContentView(binding.root) + + // Recuperar o objeto launch da intent + val launch = intent.getSerializableExtra("nextLaunch") as NextLaunchesModel + + // Preencher os campos com as informações do objeto launch + binding.launchTitleTextView.text = launch.name + binding.launchDateTextView.text = launch.date_utc + binding.launchStatusTextView.text = launch.status.toString() + if(launch.links.image.small.isEmpty()) { + // caso a URL da imagem seja nula ou vazia, carrega uma imagem padrão + Glide.with(this) + .load(R.drawable.space_logo) + .circleCrop() + .into(binding.launchImage) + } else { + // carrega a imagem usando Glide + Glide.with(this) + .load(launch.links.image.small) + .circleCrop() + .into(binding.launchImage) + } + + // Cria uma instância do LaunchDetailsPagerAdapter com as informações do lançamento + val launchDetailsPagerAdapter = LaunchDetailsPagerAdapter(this, launch) + + // Configura o ViewPager para usar o adapter + binding.viewPager.adapter = launchDetailsPagerAdapter + + // Adiciona as abas ao TabLayout + val titles = arrayOf("Overview", "Mission", "Rocket") + for (title in titles) { + binding.tabLayout.addTab(binding.tabLayout.newTab().setText(title)) + } + + // Conecta o TabLayout e ViewPager + TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position -> + tab.text = titles[position] + }.attach() + } } \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml new file mode 100644 index 0000000..a6e5371 --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7d85d3b1774c551bd2912534ecc632a676f22ee3 Mon Sep 17 00:00:00 2001 From: gisele Date: Thu, 16 Mar 2023 16:11:14 -0300 Subject: [PATCH 02/11] Registrando a LaunchActivity no manifest --- .../app/src/main/AndroidManifest.xml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml index a7e0586..490b5ff 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - + - + + + @@ -21,10 +27,9 @@ - + android:exported="true" /> Date: Thu, 16 Mar 2023 16:13:35 -0300 Subject: [PATCH 03/11] Corrigindo links entre as Activities --- .../presentation/LaunchDetailsActivity.kt | 42 +----- .../presentation/LaunchDetailsFragment.kt | 21 ++- .../nextlaunches/NextLaunchesActivity.kt | 6 +- .../res/layout/activity_launch_details.xml | 123 ++++-------------- .../res/layout/fragment_launch_details.xml | 7 +- 5 files changed, 54 insertions(+), 145 deletions(-) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt index 9734b50..00aa46a 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt @@ -2,55 +2,23 @@ package com.devpass.spaceapp.presentation import android.os.Bundle import androidx.appcompat.app.AppCompatActivity -import com.bumptech.glide.Glide -import com.devpass.spaceapp.R import com.devpass.spaceapp.data.model.NextLaunchesModel import com.devpass.spaceapp.databinding.ActivityLaunchDetailsBinding -import com.google.android.material.tabs.TabLayoutMediator + +private const val ARG_LAUNCH = "fullLaunchDescription" class LaunchDetailsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + val binding = ActivityLaunchDetailsBinding.inflate(layoutInflater) setContentView(binding.root) // Recuperar o objeto launch da intent - val launch = intent.getSerializableExtra("nextLaunch") as NextLaunchesModel + val launch = intent.getSerializableExtra(ARG_LAUNCH) as NextLaunchesModel // Preencher os campos com as informações do objeto launch - binding.launchTitleTextView.text = launch.name - binding.launchDateTextView.text = launch.date_utc.toString() - binding.launchStatusTextView.text = launch.status.toString() - if(launch.links.image.small.isEmpty()) { - // caso a URL da imagem seja nula ou vazia, carrega uma imagem padrão - Glide.with(this) - .load(R.drawable.space_logo) - .circleCrop() - .into(binding.launchImage) - } else { - // carrega a imagem usando Glide - Glide.with(this) - .load(launch.links.image.small) - .circleCrop() - .into(binding.launchImage) - } - - // Cria uma instância do LaunchDetailsPagerAdapter com as informações do lançamento - val launchDetailsPagerAdapter = LaunchDetailsPagerAdapter(this, launch) - - // Configura o ViewPager para usar o adapter - binding.viewPager.adapter = launchDetailsPagerAdapter - - // Adiciona as abas ao TabLayout - val titles = arrayOf("Overview", "Mission", "Rocket") - for (title in titles) { - binding.tabLayout.addTab(binding.tabLayout.newTab().setText(title)) - } - - // Conecta o TabLayout e ViewPager - TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position -> - tab.text = titles[position] - }.attach() + binding.launchDescriptionTextView.text = launch.details } } \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt index f1e21b4..fa7ba61 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt @@ -1,5 +1,6 @@ package com.devpass.spaceapp.presentation +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -31,8 +32,24 @@ class LaunchDetailsFragment : Fragment() { // Recupera o objeto NextLaunchesModel dos argumentos val launch = arguments?.getSerializable(ARG_LAUNCH) as NextLaunchesModel? - // Exibe o nome da missão em um TextView - binding.launchDescription.text = launch?.name ?: "Nome da missão desconhecido" + val fullDescription = launch?.details ?: "Erro ao carregar detalhes" + + // Exibe as 3 primeiras linhas de details em um TextView + val shortDescription = fullDescription.lineSequence().take(1).joinToString("\n") + binding.launchDescriptionFragment.text = shortDescription + + val viewMore:String = "View more..." + + val viewMoreLink = binding.launchViewMore + + viewMoreLink.text = viewMore + + viewMoreLink.setOnClickListener { + val intent = Intent(context, LaunchDetailsActivity::class.java) + intent.putExtra("fullLaunchDescription", fullDescription) + startActivity(intent) + } + } companion object { diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/nextlaunches/NextLaunchesActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/nextlaunches/NextLaunchesActivity.kt index 9aeaea5..1129249 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/nextlaunches/NextLaunchesActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/nextlaunches/NextLaunchesActivity.kt @@ -6,15 +6,13 @@ import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.devpass.spaceapp.R import com.devpass.spaceapp.RetrofitService import com.devpass.spaceapp.data.api.SpaceXAPIClient import com.devpass.spaceapp.data.datasource.LaunchesListDataSourceImpl import com.devpass.spaceapp.data.model.NextLaunchesModel import com.devpass.spaceapp.data.repository.LaunchesListRepositoryImpl import com.devpass.spaceapp.databinding.ActivityMainBinding -import com.devpass.spaceapp.presentation.LaunchDetailsActivity +import com.devpass.spaceapp.presentation.LaunchActivity import com.devpass.spaceapp.presentation.NextLaunchesAdapter class NextLaunchesActivity : AppCompatActivity() { @@ -53,7 +51,7 @@ class NextLaunchesActivity : AppCompatActivity() { } private fun onLaunchClick(launch: NextLaunchesModel) { - val intent = Intent(this, LaunchDetailsActivity::class.java) + val intent = Intent(this, LaunchActivity::class.java) intent.putExtra("nextLaunch", launch) // <- corrigido para "nextLaunch" startActivity(intent) } diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml index 50951f3..a1a8fcb 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml @@ -1,106 +1,27 @@ - - - - - - - - - - + tools:context=".presentation.LaunchDetailsActivity"> - - - - - - - - - + + + + diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml index c69cf5f..b8847fd 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml @@ -5,9 +5,14 @@ android:orientation="vertical"> + From 550008f036955462a673a6371bbd2c100bcbfcbf Mon Sep 17 00:00:00 2001 From: gisele Date: Thu, 16 Mar 2023 22:24:32 -0300 Subject: [PATCH 04/11] Corrigindo view more e adicionando voltar --- .../presentation/LaunchDetailsActivity.kt | 26 ++++++++++++--- .../presentation/LaunchDetailsFragment.kt | 3 +- .../src/main/res/drawable/ic_back_arrow.xml | 5 +++ .../src/main/res/layout/activity_launch.xml | 5 --- .../res/layout/activity_launch_details.xml | 32 ++++++++++++------- .../res/layout/fragment_launch_details.xml | 2 ++ .../app/src/main/res/values/themes.xml | 1 - 7 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/res/drawable/ic_back_arrow.xml diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt index 00aa46a..d1f9c3b 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt @@ -1,8 +1,9 @@ package com.devpass.spaceapp.presentation import android.os.Bundle +import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity -import com.devpass.spaceapp.data.model.NextLaunchesModel +import com.devpass.spaceapp.R import com.devpass.spaceapp.databinding.ActivityLaunchDetailsBinding private const val ARG_LAUNCH = "fullLaunchDescription" @@ -11,14 +12,31 @@ class LaunchDetailsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val binding = ActivityLaunchDetailsBinding.inflate(layoutInflater) setContentView(binding.root) + // Configurar a Toolbar como a ActionBar da Activity + setSupportActionBar(binding.toolbar2) + + // Habilitar o botão de voltar na Toolbar + supportActionBar?.setDisplayHomeAsUpEnabled(true) + + // Definir o ícone personalizado de retorno na Toolbar + supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_back_arrow) + // Recuperar o objeto launch da intent - val launch = intent.getSerializableExtra(ARG_LAUNCH) as NextLaunchesModel + val details = intent.getCharSequenceExtra(ARG_LAUNCH) // Preencher os campos com as informações do objeto launch - binding.launchDescriptionTextView.text = launch.details + binding.launchDescriptionTextView.text = details + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + // Quando o botão de voltar na Toolbar é pressionado, finaliza a activity atual + finish() + return true + } + return super.onOptionsItemSelected(item) } } \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt index fa7ba61..c837310 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt @@ -38,7 +38,7 @@ class LaunchDetailsFragment : Fragment() { val shortDescription = fullDescription.lineSequence().take(1).joinToString("\n") binding.launchDescriptionFragment.text = shortDescription - val viewMore:String = "View more..." + val viewMore = "View more..." val viewMoreLink = binding.launchViewMore @@ -49,7 +49,6 @@ class LaunchDetailsFragment : Fragment() { intent.putExtra("fullLaunchDescription", fullDescription) startActivity(intent) } - } companion object { diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/drawable/ic_back_arrow.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/drawable/ic_back_arrow.xml new file mode 100644 index 0000000..31e7df2 --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/drawable/ic_back_arrow.xml @@ -0,0 +1,5 @@ + + + diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml index a6e5371..70ff5f5 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml @@ -42,14 +42,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:textAllCaps="true" android:layout_marginBottom="8dp" android:layout_gravity="center" android:fontFamily="@font/roboto" android:textStyle="normal" android:text="@string/titulo_launch" - android:textColor="@color/black" android:textSize="24sp" /> @@ -106,7 +104,4 @@ /> - - - \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml index a1a8fcb..4c1e6dc 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch_details.xml @@ -10,18 +10,28 @@ android:id="@+id/toolbar2" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" + android:background="@color/primaryColor" + app:layout_constraintBottom_toTopOf="@+id/launchDescriptionTextView" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - /> + app:subtitleTextColor="#FFFFFF" + app:title="Details" + app:titleTextColor="@color/white" /> - + diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml index b8847fd..73c391d 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml @@ -13,6 +13,8 @@ android:id="@+id/launchViewMore" android:layout_width="match_parent" android:layout_height="match_parent" + android:textColor="@color/primaryColor" + android:linksClickable="true" /> diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/values/themes.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/values/themes.xml index 9f202d4..53fa429 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/values/themes.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/values/themes.xml @@ -12,6 +12,5 @@ ?attr/colorPrimaryVariant - @style/ToolbarStyle \ No newline at end of file From 3fe93f916acd0f83b5d20b8ab29909cba8e3a5f7 Mon Sep 17 00:00:00 2001 From: gisele Date: Thu, 16 Mar 2023 22:48:23 -0300 Subject: [PATCH 05/11] mostrar uma parte do texto e view more --- .../devpass/spaceapp/presentation/LaunchDetailsFragment.kt | 5 +---- .../app/src/main/res/layout/fragment_launch_details.xml | 4 ++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt index c837310..a92362f 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt @@ -17,7 +17,6 @@ class LaunchDetailsFragment : Fragment() { private var _binding: FragmentLaunchDetailsBinding? = null private val binding get() = _binding!! - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -34,9 +33,7 @@ class LaunchDetailsFragment : Fragment() { val fullDescription = launch?.details ?: "Erro ao carregar detalhes" - // Exibe as 3 primeiras linhas de details em um TextView - val shortDescription = fullDescription.lineSequence().take(1).joinToString("\n") - binding.launchDescriptionFragment.text = shortDescription + binding.launchDescriptionFragment.text = fullDescription val viewMore = "View more..." diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml index 73c391d..e671feb 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml @@ -8,11 +8,15 @@ android:id="@+id/launchDescriptionFragment" android:layout_width="match_parent" android:layout_height="wrap_content" + android:ellipsize="end" + android:maxLines="3" android:textAppearance="?android:attr/textAppearanceLarge" /> From 157dfa23f9b45b8bd296560cc6bc92e7ed9ee9ca Mon Sep 17 00:00:00 2001 From: gisele Date: Thu, 16 Mar 2023 23:01:29 -0300 Subject: [PATCH 06/11] Adicionando cardView --- .../res/layout/fragment_launch_details.xml | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml index e671feb..e4b06d7 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/fragment_launch_details.xml @@ -1,24 +1,35 @@ - + android:layout_height="wrap_content" + app:cardCornerRadius="4dp" + app:cardElevation="4dp" + app:cardUseCompatPadding="true"> - - + android:padding="16dp" + android:orientation="vertical"> + + + + - + + From 38b2039f2501319b6e2cd054399468042f128f76 Mon Sep 17 00:00:00 2001 From: gisele Date: Fri, 17 Mar 2023 09:21:01 -0300 Subject: [PATCH 07/11] Texto fixo no strings.xml --- .../devpass/spaceapp/presentation/LaunchActivity.kt | 2 +- .../spaceapp/presentation/LaunchDetailsFragment.kt | 5 +++-- .../app/src/main/res/layout/activity_launch.xml | 12 ------------ .../app/src/main/res/values/strings.xml | 7 ++++++- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt index 2343c4d..379065b 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt @@ -42,7 +42,7 @@ class LaunchActivity : AppCompatActivity() { binding.viewPager.adapter = launchDetailsPagerAdapter // Adiciona as abas ao TabLayout - val titles = arrayOf("Overview", "Mission", "Rocket") + val titles = arrayOf(getString(R.string.tab_title_details), getString(R.string.tab_title_launchpad), getString(R.string.tab_title_rocket)) for (title in titles) { binding.tabLayout.addTab(binding.tabLayout.newTab().setText(title)) } diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt index a92362f..dded108 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsFragment.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import com.devpass.spaceapp.R import com.devpass.spaceapp.data.model.NextLaunchesModel import com.devpass.spaceapp.databinding.FragmentLaunchDetailsBinding @@ -31,11 +32,11 @@ class LaunchDetailsFragment : Fragment() { // Recupera o objeto NextLaunchesModel dos argumentos val launch = arguments?.getSerializable(ARG_LAUNCH) as NextLaunchesModel? - val fullDescription = launch?.details ?: "Erro ao carregar detalhes" + val fullDescription = launch?.details ?: getString(R.string.details_load_error) binding.launchDescriptionFragment.text = fullDescription - val viewMore = "View more..." + val viewMore = getString(R.string.view_more) val viewMoreLink = binding.launchViewMore diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml index 70ff5f5..53d42fb 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_launch.xml @@ -25,18 +25,6 @@ android:src="@drawable/ic_launcher_background" android:contentDescription="@string/imagem_nextlaunch" /> - - SpaceApp Space App - 0 Descricao da imagem imagem da api titulo data status + Nome da missão desconhecido + Erro ao carregar detalhes + View More + Details + Launchpad + Rocket \ No newline at end of file From 591343f2ecc5bce554a7370389518218c5a99bd4 Mon Sep 17 00:00:00 2001 From: gisele Date: Fri, 17 Mar 2023 09:37:14 -0300 Subject: [PATCH 08/11] =?UTF-8?q?Codereview=20refatora=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devpass/spaceapp/presentation/LaunchActivity.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt index 379065b..afa51c5 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt @@ -18,9 +18,12 @@ class LaunchActivity : AppCompatActivity() { val launch = intent.getSerializableExtra("nextLaunch") as NextLaunchesModel // Preencher os campos com as informações do objeto launch - binding.launchTitleTextView.text = launch.name - binding.launchDateTextView.text = launch.date_utc - binding.launchStatusTextView.text = launch.status.toString() + binding.apply { + launchTitleTextView.text = launch.name + launchDateTextView.text = launch.date_utc + launchStatusTextView.text = launch.status.toString() + } + if(launch.links.image.small.isEmpty()) { // caso a URL da imagem seja nula ou vazia, carrega uma imagem padrão Glide.with(this) @@ -35,6 +38,7 @@ class LaunchActivity : AppCompatActivity() { .into(binding.launchImage) } + // Cria uma instância do LaunchDetailsPagerAdapter com as informações do lançamento val launchDetailsPagerAdapter = LaunchDetailsPagerAdapter(this, launch) From abc2db75a6d1b8b75efff29021e4ed49b4944683 Mon Sep 17 00:00:00 2001 From: gisele Date: Fri, 17 Mar 2023 14:09:20 -0300 Subject: [PATCH 09/11] Testando carregamento de rockets da API --- .../app/build.gradle | 4 ++++ .../app/src/main/AndroidManifest.xml | 7 ++++++ .../data/api/RocketdetailAPIClient.kt | 11 ++++++++++ .../datasource/RocketDetailsDataSource.kt | 10 +++++++++ .../data/model/RocketDetailResponse.kt | 10 +++++++++ .../repository/RocketDetailsRepository.kt | 19 ++++++++++++++++ .../spaceapp/presentation/LaunchActivity.kt | 22 +++++++++++++++++++ .../res/layout/activity_rocket_details.xml | 8 +++++++ 8 files changed, 91 insertions(+) create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/model/RocketDetailResponse.kt create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_rocket_details.xml diff --git a/solutions/devsprint-bruno-almeida-2/app/build.gradle b/solutions/devsprint-bruno-almeida-2/app/build.gradle index f80f5fa..ad2f48a 100644 --- a/solutions/devsprint-bruno-almeida-2/app/build.gradle +++ b/solutions/devsprint-bruno-almeida-2/app/build.gradle @@ -63,6 +63,10 @@ dependencies { //Material Design para tabs implementation 'com.google.android.material:material:1.4.0' + //lifecycle viewmodel + implementation "androidx.activity:activity-ktx:1.3.1" + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0' + //Viewpager implementation 'androidx.viewpager2:viewpager2:1.0.0' diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml index 490b5ff..25bce48 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/AndroidManifest.xml @@ -11,6 +11,13 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.SpaceApp"> + + + diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt new file mode 100644 index 0000000..c977111 --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt @@ -0,0 +1,11 @@ +package com.devpass.spaceapp.data.api + +import com.devpass.spaceapp.data.model.RocketDetailResponse +import retrofit2.http.GET +import retrofit2.http.Query + +interface RocketdetailAPIClient { + + @GET("rockets") + suspend fun getRocketDetails(@Query("id") id: String): RocketDetailResponse +} \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt new file mode 100644 index 0000000..6896b2a --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt @@ -0,0 +1,10 @@ +package com.devpass.spaceapp.data.datasource + +import com.devpass.spaceapp.data.api.RocketdetailAPIClient +import com.devpass.spaceapp.data.model.RocketDetailResponse + +class RocketDetailsDataSource(private val rocketdetailAPIClient: RocketdetailAPIClient) { + suspend fun getRocketDetails(id: String) : RocketDetailResponse { + return rocketdetailAPIClient.getRocketDetails(id) + } +} \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/model/RocketDetailResponse.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/model/RocketDetailResponse.kt new file mode 100644 index 0000000..0bb8782 --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/model/RocketDetailResponse.kt @@ -0,0 +1,10 @@ +package com.devpass.spaceapp.data.model + +import java.io.Serializable + +data class RocketDetailResponse( + val id: String, + val name: String, + val flickr_images: List, + val description: String +) : Serializable \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt new file mode 100644 index 0000000..40e11d1 --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt @@ -0,0 +1,19 @@ +package com.devpass.spaceapp.data.repository + +import com.devpass.spaceapp.data.datasource.RocketDetailsDataSource +import com.devpass.spaceapp.data.model.RocketDetailResponse + +class RocketDetailsRepository(private val rocketDetailsDataSource: RocketDetailsDataSource) { + + suspend fun getRocketDetails(id:String): Result{ + return handleResult(rocketDetailsDataSource.getRocketDetails(id)) + } + + private fun handleResult(rocketDetails: RocketDetailResponse): Result { + return try { + Result.success(rocketDetails) + } catch (e: Exception) { + Result.failure(e) + } + } +} \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt index afa51c5..0bcb16b 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt @@ -2,13 +2,19 @@ package com.devpass.spaceapp.presentation import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.util.Log +import androidx.activity.viewModels + import com.bumptech.glide.Glide import com.devpass.spaceapp.R import com.devpass.spaceapp.data.model.NextLaunchesModel +import kotlin.Result import com.devpass.spaceapp.databinding.ActivityLaunchBinding import com.google.android.material.tabs.TabLayoutMediator class LaunchActivity : AppCompatActivity() { + private val rocketDetailsViewModel: RocketDetailsViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityLaunchBinding.inflate(layoutInflater) @@ -38,6 +44,22 @@ class LaunchActivity : AppCompatActivity() { .into(binding.launchImage) } + rocketDetailsViewModel.rocketDetail.observe(this, { result -> + when (result) { + is Result.Success -> { + val rocketDetail = result.data + Log.d("LaunchActivity", "Rocket Detail: $rocketDetail") + // faça algo com os dados de RocketDetail + } + is Result.Failure -> { + val exception = result.exception + Log.e("LaunchActivity", "Failed to fetch rocket detail", exception) + // trate o erro + } + } + }) + + // Cria uma instância do LaunchDetailsPagerAdapter com as informações do lançamento val launchDetailsPagerAdapter = LaunchDetailsPagerAdapter(this, launch) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_rocket_details.xml b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_rocket_details.xml new file mode 100644 index 0000000..2b6d12c --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/res/layout/activity_rocket_details.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file From ed57d018c3655f4d693dcf0f8f73f218cf20221d Mon Sep 17 00:00:00 2001 From: gisele Date: Fri, 17 Mar 2023 14:10:13 -0300 Subject: [PATCH 10/11] Recriando RocketDetailsActivity --- .../presentation/RocketDetailViewModel.kt | 27 +++++++++++++++++++ .../presentation/RocketDetailsActivity.kt | 19 +++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt new file mode 100644 index 0000000..7d3c550 --- /dev/null +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt @@ -0,0 +1,27 @@ +package com.devpass.spaceapp.presentation + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.devpass.spaceapp.data.model.RocketDetailResponse +import com.devpass.spaceapp.data.repository.RocketDetailsRepository + +import androidx.lifecycle.LiveData + +import androidx.lifecycle.viewModelScope + +import kotlinx.coroutines.launch + +class RocketDetailsViewModel(private val repository: RocketDetailsRepository, private val id: String) : ViewModel() { + + private val _rocketDetail = MutableLiveData>() + val rocketDetail: LiveData> + get() = _rocketDetail + + init { + viewModelScope.launch { + _rocketDetail.value = repository.getRocketDetails(id) + } + } +} + + diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsActivity.kt index a3781e9..e82de84 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsActivity.kt @@ -1,4 +1,19 @@ package com.devpass.spaceapp.presentation -class RocketDetailsActivity { -} \ No newline at end of file +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +import com.devpass.spaceapp.databinding.ActivityRocketDetailsBinding + +class RocketDetailsActivity : AppCompatActivity() { + private lateinit var binding: ActivityRocketDetailsBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityRocketDetailsBinding.inflate(layoutInflater) + setContentView(binding.root) + + } +} + + From 98cd50eeab363848c5e7d43df3596374a15c7c20 Mon Sep 17 00:00:00 2001 From: gisele Date: Fri, 17 Mar 2023 23:08:37 -0300 Subject: [PATCH 11/11] Visualizando chamada no logcat RocketDetails --- .../com/devpass/spaceapp/RetrofitService.kt | 3 +- .../data/api/RocketdetailAPIClient.kt | 2 +- .../datasource/RocketDetailsDataSource.kt | 2 +- .../repository/RocketDetailsRepository.kt | 9 +++-- .../spaceapp/presentation/LaunchActivity.kt | 36 ++++++++++--------- ...ViewModel.kt => RocketDetailsViewModel.kt} | 4 +-- 6 files changed, 31 insertions(+), 25 deletions(-) rename solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/{RocketDetailViewModel.kt => RocketDetailsViewModel.kt} (91%) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/RetrofitService.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/RetrofitService.kt index ac92950..170ea1a 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/RetrofitService.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/RetrofitService.kt @@ -1,10 +1,9 @@ package com.devpass.spaceapp -import com.google.gson.GsonBuilder import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -const val BASE_URL = "https://api.spacexdata.com/v5/" +const val BASE_URL = "https://api.spacexdata.com/v4/" object RetrofitService { diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt index c977111..639b507 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/api/RocketdetailAPIClient.kt @@ -7,5 +7,5 @@ import retrofit2.http.Query interface RocketdetailAPIClient { @GET("rockets") - suspend fun getRocketDetails(@Query("id") id: String): RocketDetailResponse + suspend fun getRocketDetails(@Query("id") id: String): List } \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt index 6896b2a..63ea704 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/datasource/RocketDetailsDataSource.kt @@ -5,6 +5,6 @@ import com.devpass.spaceapp.data.model.RocketDetailResponse class RocketDetailsDataSource(private val rocketdetailAPIClient: RocketdetailAPIClient) { suspend fun getRocketDetails(id: String) : RocketDetailResponse { - return rocketdetailAPIClient.getRocketDetails(id) + return rocketdetailAPIClient.getRocketDetails(id)[0] } } \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt index 40e11d1..fe756df 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/data/repository/RocketDetailsRepository.kt @@ -5,7 +5,7 @@ import com.devpass.spaceapp.data.model.RocketDetailResponse class RocketDetailsRepository(private val rocketDetailsDataSource: RocketDetailsDataSource) { - suspend fun getRocketDetails(id:String): Result{ + suspend fun getRocketDetails(id: String): Result { return handleResult(rocketDetailsDataSource.getRocketDetails(id)) } @@ -16,4 +16,9 @@ class RocketDetailsRepository(private val rocketDetailsDataSource: RocketDetails Result.failure(e) } } -} \ No newline at end of file +} + + + + + diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt index 0bcb16b..8da119e 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt @@ -3,17 +3,24 @@ package com.devpass.spaceapp.presentation import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log -import androidx.activity.viewModels import com.bumptech.glide.Glide import com.devpass.spaceapp.R +import com.devpass.spaceapp.RetrofitService +import com.devpass.spaceapp.data.api.RocketdetailAPIClient +import com.devpass.spaceapp.data.datasource.RocketDetailsDataSource import com.devpass.spaceapp.data.model.NextLaunchesModel -import kotlin.Result +import com.devpass.spaceapp.data.repository.RocketDetailsRepository + import com.devpass.spaceapp.databinding.ActivityLaunchBinding import com.google.android.material.tabs.TabLayoutMediator class LaunchActivity : AppCompatActivity() { - private val rocketDetailsViewModel: RocketDetailsViewModel by viewModels() + + private val service = RetrofitService.retrofit.create(RocketdetailAPIClient::class.java) + private val rocketDetailsDataSource = RocketDetailsDataSource(service) + private val repository:RocketDetailsRepository = RocketDetailsRepository(rocketDetailsDataSource) + private val rocketDetailsViewModel = RocketDetailsViewModel(repository) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -44,22 +51,17 @@ class LaunchActivity : AppCompatActivity() { .into(binding.launchImage) } - rocketDetailsViewModel.rocketDetail.observe(this, { result -> - when (result) { - is Result.Success -> { - val rocketDetail = result.data - Log.d("LaunchActivity", "Rocket Detail: $rocketDetail") - // faça algo com os dados de RocketDetail - } - is Result.Failure -> { - val exception = result.exception - Log.e("LaunchActivity", "Failed to fetch rocket detail", exception) - // trate o erro - } + rocketDetailsViewModel.rocketDetail.observe(this) { result -> + result.onSuccess { rocketDetail -> + Log.d("LaunchActivity", "Rocket Detail: $rocketDetail") + // faça algo com os dados de RocketDetail + }.onFailure { exception -> + Log.e("LaunchActivity", "Failed to fetch rocket detail", exception) + // trate o erro } - }) - + } + rocketDetailsViewModel.getRocketDetail(launch.id) // Cria uma instância do LaunchDetailsPagerAdapter com as informações do lançamento val launchDetailsPagerAdapter = LaunchDetailsPagerAdapter(this, launch) diff --git a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsViewModel.kt similarity index 91% rename from solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt rename to solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsViewModel.kt index 7d3c550..494ce6d 100644 --- a/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailViewModel.kt +++ b/solutions/devsprint-bruno-almeida-2/app/src/main/java/com/devpass/spaceapp/presentation/RocketDetailsViewModel.kt @@ -11,13 +11,13 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch -class RocketDetailsViewModel(private val repository: RocketDetailsRepository, private val id: String) : ViewModel() { +class RocketDetailsViewModel(private val repository: RocketDetailsRepository) : ViewModel() { private val _rocketDetail = MutableLiveData>() val rocketDetail: LiveData> get() = _rocketDetail - init { + fun getRocketDetail(id: String){ viewModelScope.launch { _rocketDetail.value = repository.getRocketDetails(id) }