1  /*
2   * Copyright (C) 2024 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  package com.android.settingslib.bluetooth
18  
19  import kotlinx.coroutines.channels.Channel
20  import kotlinx.coroutines.channels.awaitClose
21  import kotlinx.coroutines.flow.Flow
22  import kotlinx.coroutines.flow.buffer
23  import kotlinx.coroutines.flow.callbackFlow
24  import kotlinx.coroutines.launch
25  
26  /** [Flow] for [LocalBluetoothProfileManager.ServiceListener] service state changes */
27  val LocalBluetoothProfileManager.onServiceStateChanged: Flow<Unit>
28      get() =
<lambda>null29          callbackFlow {
30              val listener =
31                  object : LocalBluetoothProfileManager.ServiceListener {
32                      override fun onServiceConnected() {
33                          launch { trySend(Unit) }
34                      }
35  
36                      override fun onServiceDisconnected() {
37                          launch { trySend(Unit) }
38                      }
39                  }
40              addServiceListener(listener)
41              awaitClose { removeServiceListener(listener) }
42          }
43              .buffer(capacity = Channel.CONFLATED)