Coverage Summary for Class: PermissionFlowImpl (dev.shreyaspatil.permissionFlow.impl)
| Class | Method, % | Branch, % | Line, % | Instruction, % |
|---|---|---|---|---|
| PermissionFlowImpl | 100% (6/6) | 100% (7/7) | 100% (33/33) | |
| PermissionFlowImpl$Companion | 100% (2/2) | 100% (2/2) | 100% (8/8) | 100% (25/25) |
| Total | 100% (8/8) | 100% (2/2) | 100% (15/15) | 100% (58/58) |
1 /** 2 * Copyright 2022 Shreyas Patil 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 dev.shreyaspatil.permissionFlow.impl 17 18 import android.app.Application 19 import android.content.Context 20 import androidx.annotation.VisibleForTesting 21 import dev.shreyaspatil.permissionFlow.MultiplePermissionState 22 import dev.shreyaspatil.permissionFlow.PermissionFlow 23 import dev.shreyaspatil.permissionFlow.PermissionState 24 import dev.shreyaspatil.permissionFlow.internal.ApplicationStateMonitor 25 import dev.shreyaspatil.permissionFlow.watchmen.PermissionWatchmen 26 import kotlinx.coroutines.CoroutineDispatcher 27 import kotlinx.coroutines.flow.StateFlow 28 29 /** Default implementation of a [PermissionFlow] */ 30 internal class PermissionFlowImpl 31 @VisibleForTesting 32 constructor( 33 private val watchmen: PermissionWatchmen, 34 ) : PermissionFlow { 35 36 override fun getPermissionState(permission: String): StateFlow<PermissionState> { 37 return watchmen.watchState(permission) 38 } 39 40 override fun getMultiplePermissionState( 41 vararg permissions: String 42 ): StateFlow<MultiplePermissionState> { 43 return watchmen.watchMultipleState(permissions.toList().toTypedArray()) 44 } 45 46 override fun notifyPermissionsChanged(vararg permissions: String) { 47 watchmen.notifyPermissionsChanged(permissions.toList().toTypedArray()) 48 } 49 50 override fun startListening() { 51 watchmen.wakeUp() 52 } 53 54 override fun stopListening() { 55 watchmen.sleep() 56 } 57 58 internal companion object { 59 @Volatile 60 var instance: PermissionFlowImpl? = null 61 private set 62 63 @Synchronized 64 fun init(context: Context, dispatcher: CoroutineDispatcher) { 65 if (instance == null) { 66 val monitor = ApplicationStateMonitor(context.applicationContext as Application) 67 val watchmen = 68 PermissionWatchmen( 69 appStateMonitor = monitor, 70 dispatcher = dispatcher, 71 ) 72 instance = PermissionFlowImpl(watchmen) 73 } 74 } 75 } 76 }