1 /*
2  * Copyright 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package androidx.work.impl.utils
17 
18 import androidx.annotation.RestrictTo
19 import androidx.work.Logger
20 import androidx.work.StopReason
21 import androidx.work.WorkInfo
22 import androidx.work.impl.Processor
23 import androidx.work.impl.StartStopToken
24 
25 /** A [Runnable] that requests [androidx.work.impl.Processor] to stop the work */
26 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
27 class StopWorkRunnable(
28     private val processor: Processor,
29     private val token: StartStopToken,
30     private val stopInForeground: Boolean,
31     @StopReason private val reason: Int,
32 ) : Runnable {
33 
34     // java compatibility, can't use default args because @JvmOverloads doesn't work with
35     // inline classes
36     constructor(
37         processor: Processor,
38         token: StartStopToken,
39         stopInForeground: Boolean,
40     ) : this(processor, token, stopInForeground, WorkInfo.STOP_REASON_UNKNOWN)
41 
runnull42     override fun run() {
43         val isStopped =
44             if (stopInForeground) {
45                 processor.stopForegroundWork(token, reason)
46             } else {
47                 // This call is safe to make for foreground work because Processor ignores requests
48                 // to stop for foreground work.
49                 processor.stopWork(token, reason)
50             }
51         Logger.get()
52             .debug(
53                 Logger.tagWithPrefix("StopWorkRunnable"),
54                 "StopWorkRunnable for ${token.id.workSpecId}; Processor.stopWork = $isStopped"
55             )
56     }
57 }
58