Coverage Summary for Class: PermissionResultLauncher (dev.shreyaspatil.permissionFlow.utils)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
PermissionResultLauncher |
100%
(1/1)
|
100%
(4/4)
|
|
68.4%
(13/19)
|
45.2%
(28/62)
|
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 @file:JvmName("PermissionResultLauncher")
17
18 package dev.shreyaspatil.permissionFlow.utils
19
20 import androidx.activity.ComponentActivity
21 import androidx.activity.result.ActivityResultCallback
22 import androidx.activity.result.ActivityResultLauncher
23 import androidx.activity.result.ActivityResultRegistry
24 import androidx.fragment.app.Fragment
25 import dev.shreyaspatil.permissionFlow.PermissionFlow
26 import dev.shreyaspatil.permissionFlow.contract.RequestPermissionsContract
27
28 /**
29 * Returns a [ActivityResultLauncher] for this Activity which internally notifies [PermissionFlow]
30 * about the state change whenever permission state is changed with this launcher.
31 *
32 * Usage:
33 *
34 * ```
35 * class MyActivity: AppCompatActivity() {
36 * private val permissionLauncher = registerForPermissionFlowRequestsResult()
37 *
38 * fun askContactPermission() {
39 * permissionLauncher.launch(android.Manifest.permission.READ_CONTACTS)
40 * }
41 * }
42 * ```
43 *
44 * @param requestPermissionsContract A contract specifying permission request and result.
45 * @param activityResultRegistry Activity result registry. By default it uses Activity's Result
46 * registry.
47 * @param callback Callback of a permission state change.
48 */
49 @JvmOverloads
50 fun ComponentActivity.registerForPermissionFlowRequestsResult(
51 requestPermissionsContract: RequestPermissionsContract = RequestPermissionsContract(),
52 activityResultRegistry: ActivityResultRegistry = getActivityResultRegistry(),
53 callback: ActivityResultCallback<Map<String, Boolean>> = emptyCallback(),
54 ): ActivityResultLauncher<Array<String>> = registerForActivityResult(
55 requestPermissionsContract,
56 activityResultRegistry,
57 callback,
58 )
59
60 /**
61 * Returns a [ActivityResultLauncher] for this Fragment which internally notifies [PermissionFlow]
62 * about the state change whenever permission state is changed with this launcher.
63 *
64 * Usage:
65 *
66 * ```
67 * class MyFragment: Fragment() {
68 * private val permissionLauncher = registerForPermissionFlowRequestsResult()
69 *
70 * fun askContactPermission() {
71 * permissionLauncher.launch(android.Manifest.permission.READ_CONTACTS)
72 * }
73 * }
74 * ```
75 *
76 * @param requestPermissionsContract A contract specifying permission request and result.
77 * registry.
78 * @param callback Callback of a permission state change.
79 */
80 @JvmOverloads
81 fun Fragment.registerForPermissionFlowRequestsResult(
82 requestPermissionsContract: RequestPermissionsContract = RequestPermissionsContract(),
83 callback: ActivityResultCallback<Map<String, Boolean>> = emptyCallback(),
84 ): ActivityResultLauncher<Array<String>> = registerForActivityResult(
85 requestPermissionsContract,
86 callback,
87 )
88
89 /**
90 * Returns a [ActivityResultLauncher] for this Fragment which internally notifies [PermissionFlow]
91 * about the state change whenever permission state is changed with this launcher.
92 *
93 * Usage:
94 *
95 * ```
96 * class MyFragment: Fragment() {
97 * private val permissionLauncher = registerForPermissionFlowRequestsResult()
98 *
99 * fun askContactPermission() {
100 * permissionLauncher.launch(android.Manifest.permission.READ_CONTACTS)
101 * }
102 * }
103 * ```
104 *
105 * @param requestPermissionsContract A contract specifying permission request and result.
106 * @param activityResultRegistry Activity result registry. By default it uses Activity's Result
107 * registry.
108 * @param callback Callback of a permission state change.
109 */
110 @JvmOverloads
111 fun Fragment.registerForPermissionFlowRequestsResult(
112 requestPermissionsContract: RequestPermissionsContract = RequestPermissionsContract(),
113 activityResultRegistry: ActivityResultRegistry,
114 callback: ActivityResultCallback<Map<String, Boolean>> = emptyCallback(),
115 ): ActivityResultLauncher<Array<String>> = registerForActivityResult(
116 requestPermissionsContract,
117 activityResultRegistry,
118 callback,
119 )
120
121 private fun <T> emptyCallback() = ActivityResultCallback<T> {}