diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..94a25f7 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
index a4cd4a0..634de6c 100644
--- a/sample/src/main/AndroidManifest.xml
+++ b/sample/src/main/AndroidManifest.xml
@@ -21,8 +21,8 @@
+ android:name=".travelino.presentation.TravelinoActivity"
+ android:theme="@style/SampleTheme.Travelino" />
\ No newline at end of file
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/MainActivity.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/MainActivity.kt
index 722fee3..e4e0197 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/MainActivity.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/MainActivity.kt
@@ -2,7 +2,7 @@ package com.johnnym.jackitemanimator.sample
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayActivity
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoActivity
import com.johnnym.jackitemanimator.sample.taxilist.presentation.TaxiListActivity
import kotlinx.android.synthetic.main.activity_main.*
@@ -16,8 +16,8 @@ class MainActivity : AppCompatActivity() {
startActivity(TaxiListActivity.createIntent(this))
}
- greenTuesdayButton.setOnClickListener {
- startActivity(GreenTuesdayActivity.createIntent(this))
+ travelinoButton.setOnClickListener {
+ startActivity(TravelinoActivity.createIntent(this))
}
}
}
\ No newline at end of file
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/SampleApplicationComponent.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/SampleApplicationComponent.kt
index 7d61085..fc56ce7 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/SampleApplicationComponent.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/SampleApplicationComponent.kt
@@ -1,7 +1,7 @@
package com.johnnym.jackitemanimator.sample
-import com.johnnym.jackitemanimator.sample.greentuesday.GreenTuesdayComponent
-import com.johnnym.jackitemanimator.sample.greentuesday.GreenTuesdayModule
+import com.johnnym.jackitemanimator.sample.travelino.TravelinoComponent
+import com.johnnym.jackitemanimator.sample.travelino.TravelinoModule
import com.johnnym.jackitemanimator.sample.taxilist.TaxiListComponent
import com.johnnym.jackitemanimator.sample.taxilist.TaxiListModule
import dagger.Component
@@ -16,5 +16,5 @@ interface SampleApplicationComponent {
fun inject(sampleApplication: SampleApplication)
fun newTaxiListComponent(taxiListModule: TaxiListModule): TaxiListComponent
- fun newGreenTuesdayComponent(greenTuesdayModule: GreenTuesdayModule): GreenTuesdayComponent
+ fun newTravelinoComponent(travelinoModule: TravelinoModule): TravelinoComponent
}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/common/views/CardViewOutlineProvider.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/common/views/CardViewOutlineProvider.kt
index 9088ccb..fcc10b2 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/common/views/CardViewOutlineProvider.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/common/views/CardViewOutlineProvider.kt
@@ -7,7 +7,7 @@ import com.johnnym.jackitemanimator.sample.R
class CardViewOutlineProvider : ViewOutlineProvider() {
override fun getOutline(view: View, outline: Outline) {
- val radius = view.resources.getDimension(R.dimen.green_tuesday_item_radius)
+ val radius = view.resources.getDimension(R.dimen.travelino_item_radius)
outline.setRoundRect(0, 0, view.width, view.height, radius)
}
}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/GreenTuesdayComponent.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/GreenTuesdayComponent.kt
deleted file mode 100644
index 575ad77..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/GreenTuesdayComponent.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday
-
-import com.johnnym.jackitemanimator.sample.common.di.ActivityScoped
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayActivity
-import dagger.Subcomponent
-
-@ActivityScoped
-@Subcomponent(
- modules = [(GreenTuesdayModule::class)])
-interface GreenTuesdayComponent {
-
- fun inject(greenTuesdayActivity: GreenTuesdayActivity)
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/GreenTuesdayModule.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/GreenTuesdayModule.kt
deleted file mode 100644
index 1582eb5..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/GreenTuesdayModule.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday
-
-import com.johnnym.jackitemanimator.sample.greentuesday.data.GreenTuesdayListRepository
-import com.johnnym.jackitemanimator.sample.greentuesday.data.MockGreenTuesdayListRepository
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GetGreenTuesdayList
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayContract
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayListViewModelMapper
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayPresenter
-import dagger.Module
-import dagger.Provides
-import io.reactivex.android.schedulers.AndroidSchedulers
-import io.reactivex.schedulers.Schedulers
-
-@Module
-class GreenTuesdayModule(
- private val greenTuesdayView: GreenTuesdayContract.View
-) {
-
- @Provides
- fun provideGreenTuesdayContractPresenter(
- getGreenTuesdayList: GetGreenTuesdayList,
- greenTuesdayListViewModelMapper: GreenTuesdayListViewModelMapper
- ): GreenTuesdayContract.Presenter =
- GreenTuesdayPresenter(
- greenTuesdayView,
- getGreenTuesdayList,
- greenTuesdayListViewModelMapper)
-
- @Provides
- fun provideGetGreenTuesdayList(
- greenTuesdayListRepository: GreenTuesdayListRepository
- ): GetGreenTuesdayList =
- GetGreenTuesdayList(
- greenTuesdayListRepository,
- Schedulers.io(),
- AndroidSchedulers.mainThread())
-
- @Provides
- fun provideGreenTuesdayListRepository(): GreenTuesdayListRepository =
- MockGreenTuesdayListRepository()
-
- @Provides
- fun provideGreenTuesdayListViewModelMapper(): GreenTuesdayListViewModelMapper =
- GreenTuesdayListViewModelMapper()
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/GreenTuesdayListRepository.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/GreenTuesdayListRepository.kt
deleted file mode 100644
index 71262be..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/GreenTuesdayListRepository.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.data
-
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GreenTuesdayList
-import io.reactivex.Single
-
-interface GreenTuesdayListRepository {
-
- fun getGreenTuesdayListSingle(): Single
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/GreenTuesdayMockFactory.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/GreenTuesdayMockFactory.kt
deleted file mode 100644
index 343a6b6..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/GreenTuesdayMockFactory.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.data
-
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GreenTuesdayList
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GreenTuesdayListItem
-import java.lang.IllegalStateException
-
-class GreenTuesdayMockFactory {
-
- companion object {
-
- private const val INSTANCE_MOD_VALUE = 2
-
- fun createGreenTuesdayList(currentInstanceNumber: Int): GreenTuesdayList {
- val currentInstanceNumberMod = currentInstanceNumber % INSTANCE_MOD_VALUE
-
- @Suppress("UnnecessaryVariable")
- val greenTuesdayList = GreenTuesdayList(when (currentInstanceNumberMod) {
- 0 -> listOf(
- Beans.createCopy(infoMessage = "Hurry up, these beans are great!"),
- Cookies.createCopy(),
- Milk.createCopy(),
- Steak.createCopy(),
- Yogurt.createCopy(),
- Mojito.createCopy(infoMessage = "This mojito is a bomb!"),
- Chicken.createCopy(),
- Vodka.createCopy())
- 1 -> listOf(
- Milk.createCopy(),
- Steak.createCopy(price = 1.23f, infoMessage = "This steak has never been cheaper!"),
- Beans.createCopy(),
- Cookies.createCopy(),
- Chicken.createCopy(price = 7.48f),
- Yogurt.createCopy(),
- Mojito.createCopy(price = 6.01f),
- Vodka.createCopy())
- else -> throw IllegalStateException("$currentInstanceNumberMod should be between 0 (included) and $INSTANCE_MOD_VALUE")
- })
-
- return greenTuesdayList
- }
-
- private fun GreenTuesdayListItem.createCopy(
- price: Float = this.price,
- infoMessage: String? = null
- ) = this.copy(
- price = price,
- infoMessage = infoMessage
- )
-
- private val Beans = GreenTuesdayListItem(
- "id_00",
- "Soylent Green Beans",
- 5.69f,
- 8.20f,
- "https://i.pinimg.com/736x/54/a4/fc/54a4fc5e045b6cf0f4c52a4c58b508ed--jack-nicholson-october-.jpg",
- null)
-
- private val Cookies = GreenTuesdayListItem(
- "id_01",
- "Greench home made cookies",
- 7.20f,
- 8.20f,
- "https://www.taschen.com/media/images/640/default_pr_schapiro_taxi_driver_travis_bickle_1011041545_id_394863.jpg",
- null)
-
- private val Milk = GreenTuesdayListItem(
- "id_02",
- "Soylent Milk - Missing human edition",
- 12.34f,
- 16.84f,
- "https://upload.wikimedia.org/wikipedia/tr/1/19/Scarfaceinthefall.jpg",
- null)
-
- private val Steak = GreenTuesdayListItem(
- "id_03",
- "Steak green soyless",
- 15.25f,
- 17.39f,
- "https://pbs.twimg.com/profile_images/610719306847002624/MmvsAf-U.jpg",
- null)
-
- private val Yogurt = GreenTuesdayListItem(
- "id_04",
- "Soyless yogurt",
- 2.70f,
- 4.22f,
- "https://images-na.ssl-images-amazon.com/images/M/MV5BMTU4OTY2MTE3OF5BMl5BanBnXkFtZTcwMzc0Mzg4Mw@@._V1_.jpg",
- null)
-
- private val Mojito = GreenTuesdayListItem(
- "id_05",
- "Classic mojito",
- 5.55f,
- 6.53f,
- "https://atwistedsenseoftumour.files.wordpress.com/2014/03/patrick-bateman.jpg",
- null)
-
- private val Chicken = GreenTuesdayListItem(
- "id_06",
- "Pure chicken",
- 13.23f,
- 20.43f,
- "https://upload.wikimedia.org/wikipedia/en/thumb/d/df/Michaelcoreleone.jpg/220px-Michaelcoreleone.jpg",
- null)
-
- private val Vodka = GreenTuesdayListItem(
- "id_07",
- "Soyless vodka",
- 22.34f,
- 32.32f,
- "https://static.giantbomb.com/uploads/original/1/14103/323221-1_1_.jpg",
- null)
- }
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/MockGreenTuesdayListRepository.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/MockGreenTuesdayListRepository.kt
deleted file mode 100644
index 35c3e98..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/data/MockGreenTuesdayListRepository.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.data
-
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GreenTuesdayList
-import io.reactivex.Single
-import java.util.concurrent.TimeUnit
-
-class MockGreenTuesdayListRepository : GreenTuesdayListRepository {
-
- private var getGreenTuesdayListRequestNumber = 0
-
- override fun getGreenTuesdayListSingle(): Single {
- return Single
- .create {
- it.onSuccess(GreenTuesdayMockFactory.createGreenTuesdayList(getGreenTuesdayListRequestNumber++))
- }
- .delay(1, TimeUnit.SECONDS)
- }
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GetGreenTuesdayList.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GetGreenTuesdayList.kt
deleted file mode 100644
index c76d66c..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GetGreenTuesdayList.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.domain
-
-import com.johnnym.jackitemanimator.sample.common.domain.UseCase
-import com.johnnym.jackitemanimator.sample.greentuesday.data.GreenTuesdayListRepository
-import io.reactivex.Scheduler
-import io.reactivex.Single
-
-class GetGreenTuesdayList(
- private val greenTuesdayListRepository: GreenTuesdayListRepository,
- subscribeOnScheduler: Scheduler,
- observeOnScheduler: Scheduler
-) : UseCase(subscribeOnScheduler, observeOnScheduler) {
-
- override fun buildUseCase(params: Params): Single =
- greenTuesdayListRepository.getGreenTuesdayListSingle()
-
- class Params
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GreenTuesdayList.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GreenTuesdayList.kt
deleted file mode 100644
index 13bdbe5..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GreenTuesdayList.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.domain
-
-data class GreenTuesdayList(
- val listItems: List)
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GreenTuesdayListItem.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GreenTuesdayListItem.kt
deleted file mode 100644
index 0180707..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/domain/GreenTuesdayListItem.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.domain
-
-data class GreenTuesdayListItem(
- val id: String,
- val name: String,
- val price: Float,
- val originalPrice: Float,
- val imageUrl: String,
- val infoMessage: String?) {
-
- val discountPercentage: Float = ((price / originalPrice) - 1) * 100
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayActivity.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayActivity.kt
deleted file mode 100644
index f930bb6..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayActivity.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import androidx.appcompat.app.AppCompatActivity
-import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
-import com.johnnym.jackitemanimator.sample.R
-import com.johnnym.jackitemanimator.sample.common.binding.bindView
-import com.johnnym.jackitemanimator.sample.common.sampleApplication
-import com.johnnym.jackitemanimator.sample.common.views.MarginItemDecoration
-import com.johnnym.jackitemanimator.sample.greentuesday.GreenTuesdayModule
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.list.GreenTuesdayListAdapter
-import kotlinx.android.synthetic.main.green_tuesday_activity.*
-import javax.inject.Inject
-
-class GreenTuesdayActivity : AppCompatActivity(),
- GreenTuesdayContract.View {
-
- companion object {
-
- fun createIntent(context: Context): Intent {
- return Intent(context, GreenTuesdayActivity::class.java)
- }
- }
-
- @Inject
- lateinit var presenter: GreenTuesdayContract.Presenter
-
- private val greenTuesdayItemsLoadingView: SwipeRefreshLayout by bindView(R.id.greenTuesdayItemsLoadingView)
- private val greenTuesdayItems: RecyclerView by bindView(R.id.greenTuesdayItems)
-
- private lateinit var greenTuesdayListAdapter: GreenTuesdayListAdapter
- private lateinit var greenTuesdayListLayoutManager: GridLayoutManager
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.green_tuesday_activity)
-
- window.decorView.systemUiVisibility =
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
-
- root.setOnApplyWindowInsetsListener { _, insets ->
- statusBarBackground.layoutParams.height = insets.systemWindowInsetTop
- statusBarBackground.requestLayout()
-
- insets.consumeSystemWindowInsets()
- }
-
- with(toolbar) {
- setNavigationOnClickListener { onBackPressed() }
- inflateMenu(R.menu.green_tuesday_menu)
- setOnMenuItemClickListener { item ->
- when (item.itemId) {
- R.id.green_tuesday_refresh_menu_item -> {
- presenter.onRefreshButtonPressed()
- true
- }
- else -> super.onOptionsItemSelected(item)
- }
- }
- }
-
- greenTuesdayListAdapter = GreenTuesdayListAdapter()
- greenTuesdayItems.setHasFixedSize(true)
- greenTuesdayItems.adapter = greenTuesdayListAdapter
- greenTuesdayListLayoutManager = GridLayoutManager(this, 2)
- greenTuesdayListLayoutManager.spanSizeLookup = greenTuesdayListSpanSizeLookup
- greenTuesdayItems.layoutManager = greenTuesdayListLayoutManager
- greenTuesdayItems.addItemDecoration(MarginItemDecoration(
- resources.getDimensionPixelSize(R.dimen.margin_item_decoration_margin)))
-
- greenTuesdayItemsLoadingView.isEnabled = false
-
- sampleApplication.sampleApplicationComponent
- .newGreenTuesdayComponent(
- GreenTuesdayModule(
- this))
- .inject(this)
- }
-
- override fun onDestroy() {
- super.onDestroy()
-
- presenter.viewDestroyed()
- }
-
- override fun showGreenTuesdayListViewModel(viewModel: GreenTuesdayListViewModel) {
- greenTuesdayListAdapter.setItems(viewModel.itemList)
- }
-
- override fun showLoading() {
- greenTuesdayItemsLoadingView.isRefreshing = true
- }
-
- override fun hideLoading() {
- greenTuesdayItemsLoadingView.isRefreshing = false
- }
-
- private val greenTuesdayListSpanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
- override fun getSpanSize(position: Int): Int {
- val style = greenTuesdayListAdapter.getItem(position).style
-
- return when (style) {
- GreenTuesdayListItemViewModel.Style.FULL_WIDTH -> 2
- GreenTuesdayListItemViewModel.Style.HALF_WIDTH -> 1
- }
- }
- }
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListViewModel.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListViewModel.kt
deleted file mode 100644
index 89a178f..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListViewModel.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation
-
-data class GreenTuesdayListViewModel (
- val itemList: List)
\ No newline at end of file
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListViewModelMapper.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListViewModelMapper.kt
deleted file mode 100644
index 282299e..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListViewModelMapper.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation
-
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GreenTuesdayList
-import kotlin.math.roundToInt
-
-class GreenTuesdayListViewModelMapper {
-
- companion object {
- private const val PRICE_PREFIX = "$"
- }
-
- fun map(greenTuesdayList: GreenTuesdayList): GreenTuesdayListViewModel {
- val listItemViewModels = greenTuesdayList.listItems.mapIndexed { index, item ->
- val style = if ((index + 1).rem(3) == 0) GreenTuesdayListItemViewModel.Style.FULL_WIDTH
- else GreenTuesdayListItemViewModel.Style.HALF_WIDTH
-
- GreenTuesdayListItemViewModel(
- item.id,
- item.name,
- "$PRICE_PREFIX%.2f".format(item.price),
- "$PRICE_PREFIX%.2f".format(item.originalPrice),
- "${item.discountPercentage.roundToInt()}%",
- item.imageUrl,
- item.infoMessage,
- style)
- }
-
- return GreenTuesdayListViewModel(listItemViewModels)
- }
-}
\ No newline at end of file
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayPresenter.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayPresenter.kt
deleted file mode 100644
index f12f1c3..0000000
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayPresenter.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation
-
-import com.johnnym.jackitemanimator.sample.common.mvp.AbsPresenter
-import com.johnnym.jackitemanimator.sample.common.presentation.GeneralSingleObserver
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GetGreenTuesdayList
-import com.johnnym.jackitemanimator.sample.greentuesday.domain.GreenTuesdayList
-
-class GreenTuesdayPresenter(
- private val greenTuesdayView: GreenTuesdayContract.View,
- private val getGreenTuesdayList: GetGreenTuesdayList,
- private val greenTuesdayListViewModelMapper: GreenTuesdayListViewModelMapper
-) : AbsPresenter(), GreenTuesdayContract.Presenter {
-
- init {
- getAndShowGreenTuesdayList()
- }
-
- override fun onRefreshButtonPressed() {
- getAndShowGreenTuesdayList()
- }
-
- private fun getAndShowGreenTuesdayList() {
- greenTuesdayView.showLoading()
-
- getGreenTuesdayList.disposePendingExecutions()
- getGreenTuesdayList.execute(
- GetGreenTuesdayListObserver(),
- GetGreenTuesdayList.Params())
- }
-
- inner class GetGreenTuesdayListObserver : GeneralSingleObserver(this) {
-
- override fun onSuccess(greenTuesdayList: GreenTuesdayList) {
- greenTuesdayView.hideLoading()
- greenTuesdayView.showGreenTuesdayListViewModel(greenTuesdayListViewModelMapper.map(greenTuesdayList))
- }
-
- override fun onError(e: Throwable?) {
- greenTuesdayView.hideLoading()
- }
- }
-}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/TravelinoComponent.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/TravelinoComponent.kt
new file mode 100644
index 0000000..d4d28a7
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/TravelinoComponent.kt
@@ -0,0 +1,13 @@
+package com.johnnym.jackitemanimator.sample.travelino
+
+import com.johnnym.jackitemanimator.sample.common.di.ActivityScoped
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoActivity
+import dagger.Subcomponent
+
+@ActivityScoped
+@Subcomponent(
+ modules = [(TravelinoModule::class)])
+interface TravelinoComponent {
+
+ fun inject(travelinoActivity: TravelinoActivity)
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/TravelinoModule.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/TravelinoModule.kt
new file mode 100644
index 0000000..28c3559
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/TravelinoModule.kt
@@ -0,0 +1,45 @@
+package com.johnnym.jackitemanimator.sample.travelino
+
+import com.johnnym.jackitemanimator.sample.travelino.data.TravelinoListRepository
+import com.johnnym.jackitemanimator.sample.travelino.data.MockTravelinoListRepository
+import com.johnnym.jackitemanimator.sample.travelino.domain.GetTravelinoList
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoContract
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoListViewModelMapper
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoPresenter
+import dagger.Module
+import dagger.Provides
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+
+@Module
+class TravelinoModule(
+ private val travelinoView: TravelinoContract.View
+) {
+
+ @Provides
+ fun provideTravelinoContractPresenter(
+ getTravelinoList: GetTravelinoList,
+ travelinoListViewModelMapper: TravelinoListViewModelMapper
+ ): TravelinoContract.Presenter =
+ TravelinoPresenter(
+ travelinoView,
+ getTravelinoList,
+ travelinoListViewModelMapper)
+
+ @Provides
+ fun provideGetTravelinoList(
+ travelinoListRepository: TravelinoListRepository
+ ): GetTravelinoList =
+ GetTravelinoList(
+ travelinoListRepository,
+ Schedulers.io(),
+ AndroidSchedulers.mainThread())
+
+ @Provides
+ fun provideTravelinoListRepository(): TravelinoListRepository =
+ MockTravelinoListRepository()
+
+ @Provides
+ fun provideTravelinoListViewModelMapper(): TravelinoListViewModelMapper =
+ TravelinoListViewModelMapper()
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/MockTravelinoListRepository.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/MockTravelinoListRepository.kt
new file mode 100644
index 0000000..2b442cb
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/MockTravelinoListRepository.kt
@@ -0,0 +1,18 @@
+package com.johnnym.jackitemanimator.sample.travelino.data
+
+import com.johnnym.jackitemanimator.sample.travelino.domain.TravelinoList
+import io.reactivex.Single
+import java.util.concurrent.TimeUnit
+
+class MockTravelinoListRepository : TravelinoListRepository {
+
+ private var getTravelinoListRequestNumber = 0
+
+ override fun getTravelinoListSingle(): Single {
+ return Single
+ .create {
+ it.onSuccess(TravelinoMockFactory.createTravelinoList(getTravelinoListRequestNumber++))
+ }
+ .delay(1, TimeUnit.SECONDS)
+ }
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/TravelinoListRepository.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/TravelinoListRepository.kt
new file mode 100644
index 0000000..9f8adca
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/TravelinoListRepository.kt
@@ -0,0 +1,9 @@
+package com.johnnym.jackitemanimator.sample.travelino.data
+
+import com.johnnym.jackitemanimator.sample.travelino.domain.TravelinoList
+import io.reactivex.Single
+
+interface TravelinoListRepository {
+
+ fun getTravelinoListSingle(): Single
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/TravelinoMockFactory.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/TravelinoMockFactory.kt
new file mode 100644
index 0000000..b5af2f3
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/data/TravelinoMockFactory.kt
@@ -0,0 +1,137 @@
+package com.johnnym.jackitemanimator.sample.travelino.data
+
+import com.johnnym.jackitemanimator.sample.travelino.domain.TravelinoList
+import com.johnnym.jackitemanimator.sample.travelino.domain.TravelinoListItem
+import java.lang.IllegalStateException
+
+class TravelinoMockFactory {
+
+ companion object {
+
+ private const val INSTANCE_MOD_VALUE = 2
+
+ private const val UNSPLASH_BASE_URL = "https://source.unsplash.com/"
+
+ fun createTravelinoList(currentInstanceNumber: Int): TravelinoList {
+ val currentInstanceNumberMod = currentInstanceNumber % INSTANCE_MOD_VALUE
+
+ @Suppress("UnnecessaryVariable")
+ val travelinoList = TravelinoList(when (currentInstanceNumberMod) {
+ 0 -> listOf(
+ Zagreb.createCopy(infoMessage = "Hurry up, Zagreb is great!"),
+ Paris.createCopy(),
+ NewYork.createCopy(),
+ London.createCopy(),
+ Sidney.createCopy(),
+ Berlin.createCopy(),
+ Rome.createCopy(),
+ Cuba.createCopy(),
+ Hawaii.createCopy(),
+ Maldives.createCopy())
+ 1 -> listOf(
+ Paris.createCopy(price = 37),
+ Hawaii.createCopy(),
+ Zagreb.createCopy(price = 83),
+ London.createCopy(),
+ Sidney.createCopy(),
+ Berlin.createCopy(),
+ Rome.createCopy(),
+ Cuba.createCopy(),
+ Maldives.createCopy())
+ else -> throw IllegalStateException("$currentInstanceNumberMod should be between 0 (included) and $INSTANCE_MOD_VALUE")
+ })
+
+ return travelinoList
+ }
+
+ private fun createImageUrl(photoId: String) = UNSPLASH_BASE_URL + photoId
+
+ private fun TravelinoListItem.createCopy(
+ price: Int = this.price,
+ infoMessage: String? = null
+ ) = this.copy(
+ price = price,
+ infoMessage = infoMessage
+ )
+
+ private val Zagreb = TravelinoListItem(
+ "id_00",
+ "Zagreb",
+ 70,
+ 92,
+ createImageUrl("ZINC3joF-JQ"),
+ null)
+
+ private val Paris = TravelinoListItem(
+ "id_01",
+ "Paris",
+ 52,
+ 74,
+ createImageUrl("Q0-fOL2nqZc"),
+ null)
+
+ private val NewYork = TravelinoListItem(
+ "id_02",
+ "New York",
+ 60,
+ 95,
+ createImageUrl("UExx0KnnkjY"),
+ null)
+
+ private val London = TravelinoListItem(
+ "id_03",
+ "London",
+ 30,
+ 35,
+ createImageUrl("tZDtyUrYrFU"),
+ null)
+
+ private val Sidney = TravelinoListItem(
+ "id_04",
+ "Sidney",
+ 102,
+ 134,
+ createImageUrl("DLbCETd599Y"),
+ null)
+
+ private val Berlin = TravelinoListItem(
+ "id_05",
+ "Berlin",
+ 48,
+ 64,
+ createImageUrl("fv0yV5-Pbjc"),
+ null)
+
+ private val Rome = TravelinoListItem(
+ "id_06",
+ "Rome",
+ 42,
+ 48,
+ createImageUrl("0Bs3et8FYyg"),
+ null)
+
+ private val Cuba = TravelinoListItem(
+ "id_07",
+ "Cuba",
+ 99,
+ 113,
+ createImageUrl("RqMIFcDLeos"),
+ null)
+
+ private val Hawaii = TravelinoListItem(
+ "id_08",
+ "Hawaii",
+ 120,
+ 150,
+ createImageUrl("prSogOoFmkw"),
+ null)
+
+ private val Maldives = TravelinoListItem(
+ "id_09",
+ "Maldives",
+ 114,
+ 145,
+ createImageUrl("qtbV_8P_Ksk"),
+ null)
+ }
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/GetTravelinoList.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/GetTravelinoList.kt
new file mode 100644
index 0000000..0593d81
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/GetTravelinoList.kt
@@ -0,0 +1,18 @@
+package com.johnnym.jackitemanimator.sample.travelino.domain
+
+import com.johnnym.jackitemanimator.sample.common.domain.UseCase
+import com.johnnym.jackitemanimator.sample.travelino.data.TravelinoListRepository
+import io.reactivex.Scheduler
+import io.reactivex.Single
+
+class GetTravelinoList(
+ private val travelinoListRepository: TravelinoListRepository,
+ subscribeOnScheduler: Scheduler,
+ observeOnScheduler: Scheduler
+) : UseCase(subscribeOnScheduler, observeOnScheduler) {
+
+ override fun buildUseCase(params: Params): Single =
+ travelinoListRepository.getTravelinoListSingle()
+
+ class Params
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/TravelinoList.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/TravelinoList.kt
new file mode 100644
index 0000000..ba4c8f8
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/TravelinoList.kt
@@ -0,0 +1,4 @@
+package com.johnnym.jackitemanimator.sample.travelino.domain
+
+data class TravelinoList(
+ val listItems: List)
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/TravelinoListItem.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/TravelinoListItem.kt
new file mode 100644
index 0000000..7217a9c
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/domain/TravelinoListItem.kt
@@ -0,0 +1,12 @@
+package com.johnnym.jackitemanimator.sample.travelino.domain
+
+data class TravelinoListItem(
+ val id: String,
+ val name: String,
+ val price: Int,
+ val originalPrice: Int,
+ val imageUrl: String,
+ val infoMessage: String?) {
+
+ val discountPercentage: Float = ((price.toFloat() / originalPrice) - 1) * 100
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoActivity.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoActivity.kt
new file mode 100644
index 0000000..5778672
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoActivity.kt
@@ -0,0 +1,115 @@
+package com.johnnym.jackitemanimator.sample.travelino.presentation
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+import com.johnnym.jackitemanimator.sample.R
+import com.johnnym.jackitemanimator.sample.common.binding.bindView
+import com.johnnym.jackitemanimator.sample.common.sampleApplication
+import com.johnnym.jackitemanimator.sample.common.views.MarginItemDecoration
+import com.johnnym.jackitemanimator.sample.travelino.TravelinoModule
+import com.johnnym.jackitemanimator.sample.travelino.presentation.list.TravelinoListAdapter
+import kotlinx.android.synthetic.main.travelino_activity.*
+import javax.inject.Inject
+
+class TravelinoActivity : AppCompatActivity(),
+ TravelinoContract.View {
+
+ companion object {
+
+ fun createIntent(context: Context): Intent {
+ return Intent(context, TravelinoActivity::class.java)
+ }
+ }
+
+ @Inject
+ lateinit var presenter: TravelinoContract.Presenter
+
+ private val travelinoItemsLoadingView: SwipeRefreshLayout by bindView(R.id.travelinoItemsLoadingView)
+ private val travelinoItems: RecyclerView by bindView(R.id.travelinoItems)
+
+ private lateinit var travelinoListAdapter: TravelinoListAdapter
+ private lateinit var travelinoListLayoutManager: GridLayoutManager
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.travelino_activity)
+
+ window.decorView.systemUiVisibility =
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+
+ root.setOnApplyWindowInsetsListener { _, insets ->
+ statusBarBackground.layoutParams.height = insets.systemWindowInsetTop
+ statusBarBackground.requestLayout()
+
+ insets.consumeSystemWindowInsets()
+ }
+
+ with(toolbar) {
+ setNavigationOnClickListener { onBackPressed() }
+ inflateMenu(R.menu.travelino_menu)
+ setOnMenuItemClickListener { item ->
+ when (item.itemId) {
+ R.id.travelino_refresh_menu_item -> {
+ presenter.onRefreshButtonPressed()
+ true
+ }
+ else -> super.onOptionsItemSelected(item)
+ }
+ }
+ }
+
+ travelinoListAdapter = TravelinoListAdapter()
+ travelinoItems.setHasFixedSize(true)
+ travelinoItems.adapter = travelinoListAdapter
+ travelinoListLayoutManager = GridLayoutManager(this, 2)
+ travelinoListLayoutManager.spanSizeLookup = travelinoListSpanSizeLookup
+ travelinoItems.layoutManager = travelinoListLayoutManager
+ travelinoItems.addItemDecoration(MarginItemDecoration(
+ resources.getDimensionPixelSize(R.dimen.margin_item_decoration_margin)))
+
+ travelinoItemsLoadingView.isEnabled = false
+
+ sampleApplication.sampleApplicationComponent
+ .newTravelinoComponent(
+ TravelinoModule(
+ this))
+ .inject(this)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+
+ presenter.viewDestroyed()
+ }
+
+ override fun showTravelinoListViewModel(viewModel: TravelinoListViewModel) {
+ travelinoListAdapter.setItems(viewModel.itemList)
+ }
+
+ override fun showLoading() {
+ travelinoItemsLoadingView.isRefreshing = true
+ }
+
+ override fun hideLoading() {
+ travelinoItemsLoadingView.isRefreshing = false
+ }
+
+ private val travelinoListSpanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
+ override fun getSpanSize(position: Int): Int {
+ val style = travelinoListAdapter.getItem(position).style
+
+ return when (style) {
+ TravelinoListItemViewModel.Style.FULL_WIDTH -> 2
+ TravelinoListItemViewModel.Style.HALF_WIDTH -> 1
+ }
+ }
+ }
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayContract.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoContract.kt
similarity index 56%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayContract.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoContract.kt
index 63ea630..c9a6c7b 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayContract.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoContract.kt
@@ -1,12 +1,12 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation
+package com.johnnym.jackitemanimator.sample.travelino.presentation
import com.johnnym.jackitemanimator.sample.common.mvp.BasePresenter
-interface GreenTuesdayContract {
+interface TravelinoContract {
interface View {
- fun showGreenTuesdayListViewModel(viewModel: GreenTuesdayListViewModel)
+ fun showTravelinoListViewModel(viewModel: TravelinoListViewModel)
fun showLoading()
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListItemViewModel.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListItemViewModel.kt
similarity index 73%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListItemViewModel.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListItemViewModel.kt
index c0ccb50..c5c2670 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/GreenTuesdayListItemViewModel.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListItemViewModel.kt
@@ -1,6 +1,6 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation
+package com.johnnym.jackitemanimator.sample.travelino.presentation
-data class GreenTuesdayListItemViewModel(
+data class TravelinoListItemViewModel(
val id: String,
val name: String,
val price: String,
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListViewModel.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListViewModel.kt
new file mode 100644
index 0000000..c5efd21
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListViewModel.kt
@@ -0,0 +1,4 @@
+package com.johnnym.jackitemanimator.sample.travelino.presentation
+
+data class TravelinoListViewModel (
+ val itemList: List)
\ No newline at end of file
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListViewModelMapper.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListViewModelMapper.kt
new file mode 100644
index 0000000..ed7062a
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoListViewModelMapper.kt
@@ -0,0 +1,30 @@
+package com.johnnym.jackitemanimator.sample.travelino.presentation
+
+import com.johnnym.jackitemanimator.sample.travelino.domain.TravelinoList
+import kotlin.math.roundToInt
+
+class TravelinoListViewModelMapper {
+
+ companion object {
+ private const val PRICE_PREFIX = "$"
+ }
+
+ fun map(travelinoList: TravelinoList): TravelinoListViewModel {
+ val listItemViewModels = travelinoList.listItems.mapIndexed { index, item ->
+ val style = if ((index + 1).rem(3) == 0) TravelinoListItemViewModel.Style.FULL_WIDTH
+ else TravelinoListItemViewModel.Style.HALF_WIDTH
+
+ TravelinoListItemViewModel(
+ item.id,
+ item.name,
+ "$PRICE_PREFIX%d".format(item.price),
+ "$PRICE_PREFIX%d".format(item.originalPrice),
+ "${item.discountPercentage.roundToInt()}%",
+ item.imageUrl,
+ item.infoMessage,
+ style)
+ }
+
+ return TravelinoListViewModel(listItemViewModels)
+ }
+}
\ No newline at end of file
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoPresenter.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoPresenter.kt
new file mode 100644
index 0000000..03078fe
--- /dev/null
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/TravelinoPresenter.kt
@@ -0,0 +1,42 @@
+package com.johnnym.jackitemanimator.sample.travelino.presentation
+
+import com.johnnym.jackitemanimator.sample.common.mvp.AbsPresenter
+import com.johnnym.jackitemanimator.sample.common.presentation.GeneralSingleObserver
+import com.johnnym.jackitemanimator.sample.travelino.domain.GetTravelinoList
+import com.johnnym.jackitemanimator.sample.travelino.domain.TravelinoList
+
+class TravelinoPresenter(
+ private val travelinoView: TravelinoContract.View,
+ private val getTravelinoList: GetTravelinoList,
+ private val travelinoListViewModelMapper: TravelinoListViewModelMapper
+) : AbsPresenter(), TravelinoContract.Presenter {
+
+ init {
+ getAndShowTravelinoList()
+ }
+
+ override fun onRefreshButtonPressed() {
+ getAndShowTravelinoList()
+ }
+
+ private fun getAndShowTravelinoList() {
+ travelinoView.showLoading()
+
+ getTravelinoList.disposePendingExecutions()
+ getTravelinoList.execute(
+ GetTravelinoListObserver(),
+ GetTravelinoList.Params())
+ }
+
+ inner class GetTravelinoListObserver : GeneralSingleObserver(this) {
+
+ override fun onSuccess(travelinoList: TravelinoList) {
+ travelinoView.hideLoading()
+ travelinoView.showTravelinoListViewModel(travelinoListViewModelMapper.map(travelinoList))
+ }
+
+ override fun onError(e: Throwable?) {
+ travelinoView.hideLoading()
+ }
+ }
+}
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayListAdapter.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoListAdapter.kt
similarity index 54%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayListAdapter.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoListAdapter.kt
index 2f8b65d..cc259ff 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayListAdapter.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoListAdapter.kt
@@ -1,20 +1,20 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation.list
+package com.johnnym.jackitemanimator.sample.travelino.presentation.list
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayListItemViewModel
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoListItemViewModel
-class GreenTuesdayListAdapter : RecyclerView.Adapter() {
+class TravelinoListAdapter : RecyclerView.Adapter() {
- private var items = mutableListOf()
+ private var items = mutableListOf()
override fun getItemCount(): Int = items.size
override fun getItemViewType(position: Int): Int {
val viewType = when (items[position].style) {
- GreenTuesdayListItemViewModel.Style.FULL_WIDTH -> ViewType.NORMAL
- GreenTuesdayListItemViewModel.Style.HALF_WIDTH -> ViewType.SQUARE
+ TravelinoListItemViewModel.Style.FULL_WIDTH -> ViewType.NORMAL
+ TravelinoListItemViewModel.Style.HALF_WIDTH -> ViewType.SQUARE
}
return viewType.ordinal
@@ -24,15 +24,15 @@ class GreenTuesdayListAdapter : RecyclerView.Adapter()
val context = parent.context
return when (ViewType.from(viewType)) {
- ViewType.NORMAL -> GreenTuesdayNormalItemViewHolder(context, GreenTuesdayNormalItemView(context))
- ViewType.SQUARE -> GreenTuesdaySquareItemViewHolder(context, GreenTuesdaySquareItemView(context))
+ ViewType.NORMAL -> TravelinoNormalItemViewHolder(context, TravelinoNormalItemView(context))
+ ViewType.SQUARE -> TravelinoSquareItemViewHolder(context, TravelinoSquareItemView(context))
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
- is GreenTuesdayNormalItemViewHolder -> holder.bind(items[position])
- is GreenTuesdaySquareItemViewHolder -> holder.bind(items[position])
+ is TravelinoNormalItemViewHolder -> holder.bind(items[position])
+ is TravelinoSquareItemViewHolder -> holder.bind(items[position])
}
}
@@ -44,8 +44,8 @@ class GreenTuesdayListAdapter : RecyclerView.Adapter()
}
}
- fun setItems(newItems: List) {
- val result = DiffUtil.calculateDiff(GreenTuesdayListDiffUtilCallback(this.items, newItems))
+ fun setItems(newItems: List) {
+ val result = DiffUtil.calculateDiff(TravelinoListDiffUtilCallback(this.items, newItems))
result.dispatchUpdatesTo(this)
this.items.clear()
this.items.addAll(newItems)
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayListDiffUtilCallback.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoListDiffUtilCallback.kt
similarity index 59%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayListDiffUtilCallback.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoListDiffUtilCallback.kt
index 81288a3..7549b3a 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayListDiffUtilCallback.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoListDiffUtilCallback.kt
@@ -1,11 +1,11 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation.list
+package com.johnnym.jackitemanimator.sample.travelino.presentation.list
import androidx.recyclerview.widget.DiffUtil
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayListItemViewModel
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoListItemViewModel
-class GreenTuesdayListDiffUtilCallback(
- private var oldItems: List,
- private var newItems: List
+class TravelinoListDiffUtilCallback(
+ private var oldItems: List,
+ private var newItems: List
) : DiffUtil.Callback() {
override fun getOldListSize(): Int = oldItems.size
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayNormalItemView.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoNormalItemView.kt
similarity index 78%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayNormalItemView.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoNormalItemView.kt
index 6b3f9f4..3742b53 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayNormalItemView.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoNormalItemView.kt
@@ -1,4 +1,4 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation.list
+package com.johnnym.jackitemanimator.sample.travelino.presentation.list
import android.content.Context
import android.util.AttributeSet
@@ -10,13 +10,13 @@ import com.johnnym.jackitemanimator.sample.R
import com.johnnym.jackitemanimator.sample.common.binding.bindView
import com.johnnym.jackitemanimator.sample.common.views.CardViewOutlineProvider
-class GreenTuesdayNormalItemView @JvmOverloads constructor(
+class TravelinoNormalItemView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
- private val itemElevation by bindDimen(R.dimen.green_tuesday_item_elevation)
+ private val itemElevation by bindDimen(R.dimen.travelino_item_elevation)
val image: ImageView by bindView(R.id.image)
val title: TextView by bindView(R.id.title)
@@ -26,7 +26,7 @@ class GreenTuesdayNormalItemView @JvmOverloads constructor(
val alarmMessage: TextView by bindView(R.id.alarmMessage)
init {
- inflate(context, R.layout.green_tuesday_normal_item, this)
+ inflate(context, R.layout.travelino_normal_item, this)
outlineProvider = CardViewOutlineProvider()
clipToOutline = true
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdaySquareItemViewHolder.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoNormalItemViewHolder.kt
similarity index 74%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdaySquareItemViewHolder.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoNormalItemViewHolder.kt
index 8687967..d820156 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdaySquareItemViewHolder.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoNormalItemViewHolder.kt
@@ -1,18 +1,18 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation.list
+package com.johnnym.jackitemanimator.sample.travelino.presentation.list
import android.content.Context
import androidx.core.view.isGone
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayListItemViewModel
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoListItemViewModel
-class GreenTuesdaySquareItemViewHolder(
+class TravelinoNormalItemViewHolder(
private val context: Context,
- val view: GreenTuesdaySquareItemView
+ val view: TravelinoNormalItemView
) : RecyclerView.ViewHolder(view) {
- fun bind(viewModel: GreenTuesdayListItemViewModel) {
+ fun bind(viewModel: TravelinoListItemViewModel) {
view.title.text = viewModel.name
view.price.text = viewModel.price
view.originalPrice.text = viewModel.originalPrice
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdaySquareItemView.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoSquareItemView.kt
similarity index 78%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdaySquareItemView.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoSquareItemView.kt
index d910bdc..bd47caa 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdaySquareItemView.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoSquareItemView.kt
@@ -1,4 +1,4 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation.list
+package com.johnnym.jackitemanimator.sample.travelino.presentation.list
import android.content.Context
import android.util.AttributeSet
@@ -10,13 +10,13 @@ import com.johnnym.jackitemanimator.sample.R
import com.johnnym.jackitemanimator.sample.common.binding.bindView
import com.johnnym.jackitemanimator.sample.common.views.CardViewOutlineProvider
-class GreenTuesdaySquareItemView @JvmOverloads constructor(
+class TravelinoSquareItemView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
- private val itemElevation by bindDimen(R.dimen.green_tuesday_item_elevation)
+ private val itemElevation by bindDimen(R.dimen.travelino_item_elevation)
val image: ImageView by bindView(R.id.image)
val title: TextView by bindView(R.id.title)
@@ -26,7 +26,7 @@ class GreenTuesdaySquareItemView @JvmOverloads constructor(
val alarmMessage: TextView by bindView(R.id.alarmMessage)
init {
- inflate(context, R.layout.green_tuesday_square_item, this)
+ inflate(context, R.layout.travelino_square_item, this)
outlineProvider = CardViewOutlineProvider()
clipToOutline = true
diff --git a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayNormalItemViewHolder.kt b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoSquareItemViewHolder.kt
similarity index 74%
rename from sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayNormalItemViewHolder.kt
rename to sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoSquareItemViewHolder.kt
index 02c0567..790de3c 100644
--- a/sample/src/main/java/com/johnnym/jackitemanimator/sample/greentuesday/presentation/list/GreenTuesdayNormalItemViewHolder.kt
+++ b/sample/src/main/java/com/johnnym/jackitemanimator/sample/travelino/presentation/list/TravelinoSquareItemViewHolder.kt
@@ -1,18 +1,18 @@
-package com.johnnym.jackitemanimator.sample.greentuesday.presentation.list
+package com.johnnym.jackitemanimator.sample.travelino.presentation.list
import android.content.Context
import androidx.core.view.isGone
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
-import com.johnnym.jackitemanimator.sample.greentuesday.presentation.GreenTuesdayListItemViewModel
+import com.johnnym.jackitemanimator.sample.travelino.presentation.TravelinoListItemViewModel
-class GreenTuesdayNormalItemViewHolder(
+class TravelinoSquareItemViewHolder(
private val context: Context,
- val view: GreenTuesdayNormalItemView
+ val view: TravelinoSquareItemView
) : RecyclerView.ViewHolder(view) {
- fun bind(viewModel: GreenTuesdayListItemViewModel) {
+ fun bind(viewModel: TravelinoListItemViewModel) {
view.title.text = viewModel.name
view.price.text = viewModel.price
view.originalPrice.text = viewModel.originalPrice
diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml
index be9ae89..746f740 100644
--- a/sample/src/main/res/layout/activity_main.xml
+++ b/sample/src/main/res/layout/activity_main.xml
@@ -14,19 +14,19 @@
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:text="@string/taxi_list_label"
- app:layout_constraintBottom_toTopOf="@id/greenTuesdayButton"
+ app:layout_constraintBottom_toTopOf="@id/travelinoButton"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />