From aee00350ef27bf1af15d5dec75acce921d363ab7 Mon Sep 17 00:00:00 2001 From: adenilsonricardo <85114978+adenilsonricardo@users.noreply.github.com> Date: Mon, 22 Aug 2022 19:55:42 -0300 Subject: [PATCH 1/2] implemented fetchLaunchDetails --- .../FetchLaunchDetailsRepositoryImpl.kt | 10 +++++- .../LaunchDetailsActivity.kt | 3 +- .../launchDetails/LaunchDetailsViewModel.kt | 32 +++++++++++++++++++ .../FetchLaunchDetailsRepository.kt | 3 +- .../repository/FetchLaunchesRepositoryImpl.kt | 2 +- .../res/layout/activity_launch_details.xml | 2 +- 6 files changed, 46 insertions(+), 6 deletions(-) rename solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/{ => launchDetails}/LaunchDetailsActivity.kt (88%) create mode 100644 solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/model/repository/FetchLaunchDetailsRepositoryImpl.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/model/repository/FetchLaunchDetailsRepositoryImpl.kt index 9d8bb7e..261c9f3 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/model/repository/FetchLaunchDetailsRepositoryImpl.kt +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/model/repository/FetchLaunchDetailsRepositoryImpl.kt @@ -1,8 +1,16 @@ package com.devpass.spaceapp.model.repository +import com.devpass.spaceapp.data.api.Results import com.devpass.spaceapp.data.api.SpaceXAPIService +import com.devpass.spaceapp.model.LaunchDetails import com.devpass.spaceapp.repository.FetchLaunchDetailsRepository class FetchLaunchDetailsRepositoryImpl(private val api: SpaceXAPIService): FetchLaunchDetailsRepository { - override suspend fun getLaunchDetails(id: String) = api.fetchLaunchDetails(id) + override suspend fun getLaunchDetails(id: String) : Results { + return try { + Results.Success(api.fetchLaunchDetails(id)) + } catch (e: Exception) { + Results.Error(Throwable()) + } + } } \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsActivity.kt similarity index 88% rename from solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt rename to solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsActivity.kt index 3012f12..f55ad84 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchDetailsActivity.kt +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsActivity.kt @@ -1,4 +1,4 @@ -package com.devpass.spaceapp.presentation +package com.devpass.spaceapp.presentation.launchDetails import android.os.Bundle import android.view.LayoutInflater @@ -13,5 +13,4 @@ class LaunchDetailsActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_launch_details) } - } \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt new file mode 100644 index 0000000..f3bb319 --- /dev/null +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt @@ -0,0 +1,32 @@ +package com.devpass.spaceapp.presentation.launchDetails + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.devpass.spaceapp.data.api.Results +import com.devpass.spaceapp.model.LaunchDetails +import com.devpass.spaceapp.presentation.launchList.StateView +import com.devpass.spaceapp.presentation.launchList.StateViewData +import com.devpass.spaceapp.repository.FetchLaunchDetailsRepository +import com.devpass.spaceapp.repository.FetchLaunchesRepository +import kotlinx.coroutines.launch + +class LaunchDetailsViewModel(private val repository: FetchLaunchDetailsRepository) : ViewModel() { + + private val resultLaunchDetailsLiveData = MutableLiveData>() + + fun fetchLaunchDetails(id: String) { + resultLaunchDetailsLiveData.value = StateView.Loading() + viewModelScope.launch { + when (val result = repository.getLaunchDetails(id)) { + is Results.Success -> { + resultLaunchDetailsLiveData.value = StateView.Success(result.data) + } + is Results.Error -> { + resultLaunchDetailsLiveData.value = StateView.Error() + } + } + + } + } +} \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchDetailsRepository.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchDetailsRepository.kt index d413ea9..fa38287 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchDetailsRepository.kt +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchDetailsRepository.kt @@ -1,7 +1,8 @@ package com.devpass.spaceapp.repository +import com.devpass.spaceapp.data.api.Results import com.devpass.spaceapp.model.LaunchDetails interface FetchLaunchDetailsRepository { - suspend fun getLaunchDetails(id: String): LaunchDetails + suspend fun getLaunchDetails(id: String): Results } \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchesRepositoryImpl.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchesRepositoryImpl.kt index 90abfdc..faaf13e 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchesRepositoryImpl.kt +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/repository/FetchLaunchesRepositoryImpl.kt @@ -1,7 +1,7 @@ import com.devpass.spaceapp.data.api.* import com.devpass.spaceapp.repository.FetchLaunchesRepository -private const val NUMBER_ROCKETS = 20 +private const val NUMBER_ROCKETS = 91 class FetchLaunchesRepositoryImpl(private val api: SpaceXAPIService) : FetchLaunchesRepository { override suspend fun fetchLaunches(): Results { diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_launch_details.xml b/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_launch_details.xml index 96a7090..11db4ba 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_launch_details.xml +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_launch_details.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".presentation.LaunchDetailsActivity"> + tools:context=".presentation.launchDetails.LaunchDetailsActivity"> Date: Mon, 29 Aug 2022 17:00:56 -0300 Subject: [PATCH 2/2] implemented tabLayoutAdapter --- .../app/build.gradle | 3 ++ .../spaceapp/presentation/LaunchActivity.kt | 16 +--------- .../spaceapp/presentation/TabLayoutAdapter.kt | 14 ++++++++ .../launchDetails/LaunchDetailsViewModel.kt | 32 ------------------- .../app/src/main/res/layout/activity_tab.xml | 27 +++++++--------- 5 files changed, 30 insertions(+), 62 deletions(-) create mode 100644 solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/TabLayoutAdapter.kt delete mode 100644 solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt diff --git a/solutions/devsprint-mychelle-rocha-2/app/build.gradle b/solutions/devsprint-mychelle-rocha-2/app/build.gradle index d7fa166..12e196b 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/build.gradle +++ b/solutions/devsprint-mychelle-rocha-2/app/build.gradle @@ -71,6 +71,9 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.5' + //Glide implementation 'com.github.bumptech.glide:glide:4.13.2' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt index 229fddb..e01bc45 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/LaunchActivity.kt @@ -5,23 +5,9 @@ import android.os.Bundle import com.devpass.spaceapp.databinding.ActivityTabBinding class LaunchActivity : AppCompatActivity() { - private lateinit var binding: ActivityTabBinding - override fun onCreate(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?){ super.onCreate(savedInstanceState) - binding = ActivityTabBinding.inflate(layoutInflater) - setContentView(binding.root) - - val fragments = listOf(FragmentDetails(), RocketFragment(), FragmentLaunchpad()) - val fragmentsPageTitle = listOf("Details", "Rocket", "Launchpad") - val viewPagerAdapter = ViewPagerAdapter( - fragments = fragments, - fragmentManager = supportFragmentManager, - tittles = fragmentsPageTitle - ) - - binding.viewPager.adapter = viewPagerAdapter - binding.tabLayout.setupWithViewPager(binding.viewPager) } } \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/TabLayoutAdapter.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/TabLayoutAdapter.kt new file mode 100644 index 0000000..6dec2cf --- /dev/null +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/TabLayoutAdapter.kt @@ -0,0 +1,14 @@ +package com.devpass.spaceapp.presentation + +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.viewpager2.adapter.FragmentStateAdapter + +class TabLayoutAdapter (private val numOfTabs: Int, val list: List, activity: +AppCompatActivity): FragmentStateAdapter(activity) { + override fun getItemCount(): Int = numOfTabs + + override fun createFragment(position: Int): Fragment { + return list[position] + } +} \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt b/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt deleted file mode 100644 index f3bb319..0000000 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/java/com/devpass/spaceapp/presentation/launchDetails/LaunchDetailsViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.devpass.spaceapp.presentation.launchDetails - -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.devpass.spaceapp.data.api.Results -import com.devpass.spaceapp.model.LaunchDetails -import com.devpass.spaceapp.presentation.launchList.StateView -import com.devpass.spaceapp.presentation.launchList.StateViewData -import com.devpass.spaceapp.repository.FetchLaunchDetailsRepository -import com.devpass.spaceapp.repository.FetchLaunchesRepository -import kotlinx.coroutines.launch - -class LaunchDetailsViewModel(private val repository: FetchLaunchDetailsRepository) : ViewModel() { - - private val resultLaunchDetailsLiveData = MutableLiveData>() - - fun fetchLaunchDetails(id: String) { - resultLaunchDetailsLiveData.value = StateView.Loading() - viewModelScope.launch { - when (val result = repository.getLaunchDetails(id)) { - is Results.Success -> { - resultLaunchDetailsLiveData.value = StateView.Success(result.data) - } - is Results.Error -> { - resultLaunchDetailsLiveData.value = StateView.Error() - } - } - - } - } -} \ No newline at end of file diff --git a/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_tab.xml b/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_tab.xml index 32bb05a..1cde710 100644 --- a/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_tab.xml +++ b/solutions/devsprint-mychelle-rocha-2/app/src/main/res/layout/activity_tab.xml @@ -71,27 +71,24 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvDate" /> + + - - - - - - - + app:layout_constraintTop_toBottomOf="@id/tabLayout"> + \ No newline at end of file