Skip to content

Instantly share code, notes, and snippets.

@gcherubini
gcherubini / MainActivity.kt
Created February 1, 2021 20:51
Código para tratar o resultado da atividade reutilizável, dentro da atividade principal
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK && requestCode == ReusableActivityRouter.REUSABLE_ACTIVITY_REQUEST_CODE) {
val resultExtra = data?.getParcelableExtra<ReusableResultExtra>(ReusableActivityRouter.REUSABLE_ACTIVITY_RESULT_KEY)
resultExtra?.run {
Toast.makeText(this@MainActivity,
"Reusable closed activity: $screenType\n" +
"Inputted text: $inputtedText",
Toast.LENGTH_LONG).show()
@gcherubini
gcherubini / ReusableActivity.kt
Created February 1, 2021 20:50
Código que adiciona um resultado ao fechamento da atividade reutilizável
companion object {
const val REUSABLE_ACTIVITY_RESULT_KEY = "reusable_activity_result_key"
}
fun setResult(screenType: ReusableScreenType, inputtedText: String?) {
val resultIntent = Intent().apply {
putExtra(
REUSABLE_ACTIVITY_RESULT_KEY, ReusableResultExtra(
inputtedText,
screenType
)
@gcherubini
gcherubini / ReusableResultExtra.kt
Created February 1, 2021 20:49
Classe que representa os dados de resultado da atividade reutilizável
@Parcelize
data class ReusableResultExtra(
val inputtedText: String?,
val screenType: ReusableScreenType
) : Parcelable
activity.finish()
@gcherubini
gcherubini / ReusableViewModel.kt
Created February 1, 2021 20:47
Carregamento de extras através de data binding dentro view model
val title = MutableLiveData<String>()
val description = MutableLiveData<String>()
val buttonText = MutableLiveData<String>()
private var viewType: ReusableScreenType? = null
fun load(
title: String,
description: String,
buttonText: String,
viewType: ReusableScreenType?
@gcherubini
gcherubini / ReusableActivity.kt
Created February 1, 2021 20:46
Código que serve para receber e carregar extras dentro da atividade reutilizável
val extra = intent.getParcelableExtra<ReusableActivityExtra>(
ReusableActivityRouter.REUSABLE_ACTIVITY_EXTRA
)
requireNotNull(extra).run {
viewModel.load(
title,
description,
buttonText,
viewType
)
class ReusableViewModel(private val router: ReusableActivityRouter) : ViewModel()
class ReusableActivity : AppCompatActivity()
@gcherubini
gcherubini / ReusableActivityExtra.kt
Created February 1, 2021 20:43
Classe extra que é passada para a atividade reutilizável, que tem a finalidade de customizar a tela de acordo com estes dados
@Parcelize
data class ReusableActivityExtra(
val title: String,
val description: String,
val buttonText: String,
val viewType: ReusableScreenType? = null
) : Parcelable
@gcherubini
gcherubini / ReusableScreenType.kt
Created February 1, 2021 20:41
Enum que representa os tipos de telas reutilizáveis
enum class ReusableScreenType {
WELCOME,
ACCEPT_TERMS
}