Skip to content

Instantly share code, notes, and snippets.

View Ikhiloya's full-sized avatar

Ikhiloya Ikhiloya

View GitHub Profile
@Ikhiloya
Ikhiloya / FirebaseAdminInitialization.java
Created July 20, 2020 05:47
Firebase Admin Storage initialization
String bucketName = environment.getRequiredProperty("FIREBASE_BUCKET_NAME");
String projectId = environment.getRequiredProperty("FIREBASE_PROJECT_ID");
FileInputStream serviceAccount =
new FileInputStream("/home/user/Downloads/service-account-file.json");
this.storageOptions = StorageOptions.newBuilder()
.setProjectId(projectId)
.setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();
{
"type": "",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
@Ikhiloya
Ikhiloya / Person.kt
Created May 26, 2020 14:43
Person data class
package com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.model
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.google.gson.annotations.Expose
import com.google.gson.annotations.SerializedName
@Entity
data class Person(
@Expose(serialize = false)
@Ikhiloya
Ikhiloya / Beneficiary.kt
Created May 26, 2020 14:43
Beneficiary data class
package com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.model
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.google.gson.annotations.Expose
import com.google.gson.annotations.SerializedName
@Entity
data class Beneficiary(
@Expose(serialize = false)
val periodicSyncDataWork = PeriodicWorkRequest.Builder(BeneficiaryWorker::class.java, 15, TimeUnit.MINUTES)
.addTag(Constant.TAG_SYNC_BENEFICIARY)
.setConstraints(constraints) // setting a backoff on case the work needs to retry
.setBackoffCriteria(
BackoffPolicy.LINEAR,
PeriodicWorkRequest.MIN_BACKOFF_MILLIS,
TimeUnit.MILLISECONDS
)
.build()
getWorkManager()!!.enqueueUniquePeriodicWork(
@Ikhiloya
Ikhiloya / PersonWorkRequest.kt
Last active May 26, 2020 14:37
A worker class to post person data to the remote server
val periodicSyncDataWork =
PeriodicWorkRequest.Builder(PersonWorker::class.java, 15, TimeUnit.MINUTES)
.addTag(Constant.TAG_SYNC_PERSON)
.setConstraints(constraints) // setting a backoff on case the work needs to retry
.setBackoffCriteria(
BackoffPolicy.LINEAR,
PeriodicWorkRequest.MIN_BACKOFF_MILLIS,
TimeUnit.MILLISECONDS
).build()
getWorkManager()!!.enqueueUniquePeriodicWork(
@Ikhiloya
Ikhiloya / NetworkConstraint.kt
Created May 26, 2020 14:32
WorkManager Network constraint
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
@Ikhiloya
Ikhiloya / BeneficiaryWorker.kt
Created May 26, 2020 14:29
A worker class to save Beneficiary entity to a remote server
package com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.worker
import android.content.Context
import androidx.work.WorkerParameters
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.CommunityApp
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.db.CommunityDao
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.model.Beneficiary
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.model.Person
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.service.CommunityService
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.util.Constant
@Ikhiloya
Ikhiloya / PersonWorker.kt
Created May 26, 2020 14:28
A worker class to save Person entity to a remote server
package com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.worker
import android.content.Context
import androidx.work.WorkerParameters
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.CommunityApp
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.db.CommunityDao
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.model.Person
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.service.CommunityService
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.util.Constant
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.util.WorkerUtils
@Ikhiloya
Ikhiloya / WorkerContract.kt
Last active May 29, 2020 14:38
A generic class that defines the contract for pushing local data stored in {@link androidx.room.Room} database with a remote data source.The contract shows the various conditions that must be met before an [Entity] can be synchronized with the remote.
package com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.worker
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.dependency.Injector
import com.ikhiloyaimokhai.dependentworkmanagerperiodictask_kotlin.util.AppExecutor
import retrofit2.Call
import retrofit2.Response
import timber.log.Timber