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" />