· 6 years ago · Mar 14, 2019, 06:52 PM
1class NetworkWorker(private val context: Context, private val params: WorkerParameters) : Worker(context, params) {
2
3 override fun doWork(): Result {
4
5 // Get the input data
6 val userData = params.inputData.getStringArray(KEY_USER_DATA)
7 val secretKey = params.inputData.getString(KEY_SECRET_KEY)
8
9 secretKey ?: run {
10 Log.e(TAG, "doWork: SecretKey not found in WorkParams")
11 return Result.failure()
12 }
13
14 MockNetworkCall.initializeWithParameters(context, secretKey)
15
16 return try {
17 val result = MockNetworkCall.doLongRunningNetworkCall(userData)
18
19 Result.success(result.toOutputData())
20
21 } catch (ioError: IOException) {
22 // This means there was a problem with network.
23 Result.retry()
24 } catch (otherError: Exception) {
25 Result.failure()
26 }
27 }
28
29 companion object {
30 private const val TAG = "NetworkWorker"
31 private const val KEY_USER_DATA = "key_user_data"
32 private const val KEY_SECRET_KEY = "key_secret_key"
33
34 const val NAME = "com.quipper.wmdemo.NetworkWorker"
35
36 fun buildRequest(secretKey: String, userData: Array<String>): OneTimeWorkRequest {
37
38 val inputData = Data.Builder()
39 .putString(KEY_SECRET_KEY, secretKey)
40 .putStringArray(KEY_USER_DATA, userData)
41 .build()
42
43 val constraints = Constraints.Builder()
44 .setRequiredNetworkType(NetworkType.CONNECTED)
45 .setRequiresCharging(true)
46 .build()
47
48 return OneTimeWorkRequest.Builder(NetworkWorker::class.java)
49 .setInputData(inputData)
50 .setConstraints(constraints)
51 .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 15, TimeUnit.MINUTES)
52 .build()
53 }
54 }
55}