• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (C) 2022 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  */
17 
18 package com.android.systemui.common.coroutine
19 
20 import android.util.Log
21 import kotlinx.coroutines.channels.SendChannel
22 import kotlinx.coroutines.channels.onFailure
23 
24 object ChannelExt {
25 
26     /**
27      * Convenience wrapper around [SendChannel.trySend] that also logs on failure. This is the
28      * equivalent of calling:
29      * ```
30      * sendChannel.trySend(element).onFailure {
31      *     Log.e(
32      *         loggingTag,
33      *         "Failed to send $elementDescription" +
34      *             " - downstream canceled or failed.",
35      *          it,
36      *    )
37      * }
38      * ```
39      */
trySendWithFailureLoggingnull40     fun <T> SendChannel<T>.trySendWithFailureLogging(
41         element: T,
42         loggingTag: String,
43         elementDescription: String = "updated state",
44     ) {
45         trySend(element).onFailure {
46             Log.e(
47                 loggingTag,
48                 "Failed to send $elementDescription - downstream canceled or failed.",
49                 it,
50             )
51         }
52     }
53 }
54