Skip to content

Instantly share code, notes, and snippets.

@pawegio
Last active February 27, 2018 21:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pawegio/a28daec18b91950f38ddcbd83b6e2f8b to your computer and use it in GitHub Desktop.
Save pawegio/a28daec18b91950f38ddcbd83b6e2f8b to your computer and use it in GitHub Desktop.
class Sample1Activity : AppCompatActivity() {
private val items = mutableListOf<Item>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.sample_1_activity)
recyclerView.adapter = basicAdapterWithLayoutAndBinder(
items, R.layout.simple_list_item, ::bindItem
)
swipeRefreshLayout.setOnRefreshListener(::refreshData)
}
private fun refreshData() {
items.run { clear(); addAll(generateItems()) }
recyclerView.adapter.notifyDataSetChanged()
swipeRefreshLayout.isRefreshing = false
}
}
private fun generateItems(): List<Item> {
val now = LocalDateTime.now()
return List(1_000) { createItem(now, it + 1) }
}
private fun createItem(now: LocalDateTime, offset: Int): Item {
val date = now.plusDays(offset.toLong()).toLocalDate().atStartOfDay()
return Item(
formattedDate = date.format(DateTimeFormatter.ISO_LOCAL_DATE),
remainingTime = getRemainingTime(now, date)
)
}
private fun getRemainingTime(start: LocalDateTime, end: LocalDateTime): String {
val duration = Duration.between(start, end)
val days = duration.toDays()
val hours = duration.minusDays(days).toHours()
val minutes = duration.minusDays(days).minusHours(hours).toMinutes()
val seconds = duration.minusDays(days).minusHours(hours).minusMinutes(minutes).seconds
return buildString {
if (days > 0) append("$days d")
if (hours > 0) append(" $hours h")
if (minutes > 0) append(" $minutes min")
if (seconds > 0) append(" $seconds s")
}.trim()
}
private fun bindItem(holder: ViewHolderBinder<Item>, item: Item) = with(holder.itemView) {
dateView.text = item.formattedDate
remainingTimeView.text = resources.getString(R.string.remaining, item.remainingTime)
}
private data class Item(val formattedDate: String, val remainingTime: String)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment