Skip to content

Instantly share code, notes, and snippets.

@ceruleanotter
ceruleanotter / MyViewModel.kt
Created June 20, 2019 18:56
ViewModel Integrations: LiveData & Saved State Module
// getLiveData gets MutableLiveData associated with a key.
// When the value associated with the key updates, the MutableLiveData does as well.
private val _userId : MutableLiveData<String> = savedStateHandle.getLiveData(USER_KEY)
// Only expose a immutable LiveData
val userId : LiveData<String> = _userId
@ceruleanotter
ceruleanotter / MyViewModel.kt
Created June 20, 2019 18:53
ViewModel Integrations: Step 3 Saved State Module
class MyViewModel(state : SavedStateHandle) : ViewModel() {
// Keep the key as a constant
companion object {
private val USER_KEY = "userId"
}
private val savedStateHandle = state
fun saveCurrentUser(userId: String) {
@ceruleanotter
ceruleanotter / SavedStateActivity.kt
Last active June 20, 2019 18:52
ViewModel Integrations: Step 2 Saved State Module
// This ktx requires at least androidx.fragment:fragment-ktx:1.1.0 or
// androidx.activity:activity-ktx:1.0.0
val viewModel by viewModels { SavedStateVMFactory(this) }
// Or the non-ktx way...
val viewModel = ViewModelProvider(this, SavedStateVMFactory(this))
.get(MyViewModel::class.java)
@ceruleanotter
ceruleanotter / SimpleWorkStatusObservation.kt
Last active June 25, 2022 14:26
WorkManager Basics: WorkStatus Observation
// In your UI (activity, fragment, etc)
WorkManager.getInstance().getWorkInfoByIdLiveData(uploadWorkRequest.id)
.observe(lifecycleOwner, Observer { workInfo ->
// Check if the current work's state is "successfully finished"
if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
displayImage(workInfo.outputData.getString(KEY_IMAGE_URI))
}
})
@ceruleanotter
ceruleanotter / SimpleArrayCreatingInputMerger.kt
Last active January 31, 2019 17:56
WorkManager Basics: ArrayCreatingInputMerger Example
val compressWorkRequest = OneTimeWorkRequestBuilder<CompressWorker>()
.setInputMerger(ArrayCreatingInputMerger::class.java)
.setConstraints(constraints)
.build()
@ceruleanotter
ceruleanotter / SimpleChain.kt
Last active June 25, 2022 14:12
WorkManager Basics: Simple Chain Example
WorkManager.getInstance()
.beginWith(Arrays.asList(
filterImageOneWorkRequest,
filterImageTwoWorkRequest,
filterImageThreeWorkRequest))
.then(compressWorkRequest)
.then(uploadWorkRequest)
.enqueue()
@ceruleanotter
ceruleanotter / SimpleWorkSchedule.kt
Created January 22, 2019 19:22
WorkManager Basics: Scheduling Work
WorkManager.getInstance().enqueue(uploadWorkRequest)
@ceruleanotter
ceruleanotter / WorkRequestCompleteExample.kt
Last active June 25, 2022 06:41
WorkManager Basics: Complete WorkRequest Example
// Create the Constraints
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
// Define the input
val imageData = workDataOf(Constants.KEY_IMAGE_URI to imageUriString)
// Bring it all together by creating the WorkRequest; this also sets the back off criteria
val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
@ceruleanotter
ceruleanotter / ManyConstraintsExample.kt
Last active January 30, 2019 20:54
WorkManager Basics: Multiple constraints example
val constraints = Constraints.Builder()
.setRequiresBatteryNotLow(true)
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(true)
.setRequiresStorageNotLow(true)
.setRequiresDeviceIdle(true)
.build()
@ceruleanotter
ceruleanotter / SimpleNetworkConstraint.kt
Created January 22, 2019 19:16
WorkManager Basics: Simple Constraint
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()