Skip to content

Commit a253cd2

Browse files
committed
Go back to just making FirebaseDataConnect.logLevel a MutableStateFlow
1 parent 15dd7d8 commit a253cd2

File tree

11 files changed

+27
-465
lines changed

11 files changed

+27
-465
lines changed

firebase-dataconnect/CHANGELOG.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
# Unreleased
2-
* [feature] `FirebaseDataConnect.logging` added, to provide more advanced
3-
control and access to the logcat logging facilities, such as a `Flow` to
4-
collect the log level changes, `push()` to set and restore the log level,
5-
and `withLevel()` to run a block with a specific log level.
2+
* [changed] `FirebaseDataConnect.logLevel` type changed from `LogLevel` to
3+
`MutableStateFlow<LogLevel>`. This enables apps to "collect" the flow to,
4+
for example, update a UI component when the log level changes.
65
([#6586](https://github.com/firebase/firebase-android-sdk/pull/6586))
76

87
# 16.0.0-beta03

firebase-dataconnect/api.txt

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,6 @@ package com.google.firebase.dataconnect {
4242
ctor public DataConnectException(@NonNull String message, @Nullable Throwable cause = null);
4343
}
4444

45-
public interface DataConnectLogging {
46-
method @NonNull public kotlinx.coroutines.flow.Flow<com.google.firebase.dataconnect.LogLevel> getFlow();
47-
method @NonNull public com.google.firebase.dataconnect.LogLevel getLevel();
48-
method @NonNull public com.google.firebase.dataconnect.DataConnectLogging.LogLevelStackFrame push(@NonNull com.google.firebase.dataconnect.LogLevel level);
49-
method public void setLevel(@NonNull com.google.firebase.dataconnect.LogLevel);
50-
property @NonNull public abstract kotlinx.coroutines.flow.Flow<com.google.firebase.dataconnect.LogLevel> flow;
51-
property @NonNull public abstract com.google.firebase.dataconnect.LogLevel level;
52-
}
53-
54-
public static interface DataConnectLogging.LogLevelStackFrame extends java.lang.AutoCloseable {
55-
method public void close();
56-
method @NonNull public com.google.firebase.dataconnect.LogLevel getNewLevel();
57-
method @NonNull public com.google.firebase.dataconnect.LogLevel getOriginalLevel();
58-
method @Nullable public suspend Object suspendingClose(@NonNull kotlin.coroutines.Continuation<? super kotlin.Unit>);
59-
property @NonNull public abstract com.google.firebase.dataconnect.LogLevel newLevel;
60-
property @NonNull public abstract com.google.firebase.dataconnect.LogLevel originalLevel;
61-
}
62-
63-
public final class DataConnectLoggingKt {
64-
method public static inline <T> T withLevel(@NonNull com.google.firebase.dataconnect.DataConnectLogging, @NonNull com.google.firebase.dataconnect.LogLevel level, @NonNull kotlin.jvm.functions.Function0<? extends T> block);
65-
}
66-
6745
public final class DataConnectSettings {
6846
ctor public DataConnectSettings(@NonNull String host = "firebasedataconnect.googleapis.com", boolean sslEnabled = true);
6947
method @NonNull public String getHost();
@@ -134,9 +112,7 @@ package com.google.firebase.dataconnect {
134112
public final class FirebaseDataConnectKt {
135113
method @NonNull public static com.google.firebase.dataconnect.FirebaseDataConnect getInstance(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion, @NonNull com.google.firebase.FirebaseApp app, @NonNull com.google.firebase.dataconnect.ConnectorConfig config, @NonNull com.google.firebase.dataconnect.DataConnectSettings settings = com.google.firebase.dataconnect.DataConnectSettings());
136114
method @NonNull public static com.google.firebase.dataconnect.FirebaseDataConnect getInstance(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion, @NonNull com.google.firebase.dataconnect.ConnectorConfig config, @NonNull com.google.firebase.dataconnect.DataConnectSettings settings = com.google.firebase.dataconnect.DataConnectSettings());
137-
method @Deprecated @NonNull public static com.google.firebase.dataconnect.LogLevel getLogLevel(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion);
138-
method @NonNull public static com.google.firebase.dataconnect.DataConnectLogging getLogging(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion);
139-
method @Deprecated public static void setLogLevel(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion, @NonNull com.google.firebase.dataconnect.LogLevel);
115+
method @NonNull public static kotlinx.coroutines.flow.MutableStateFlow<com.google.firebase.dataconnect.LogLevel> getLogLevel(@NonNull com.google.firebase.dataconnect.FirebaseDataConnect.Companion);
140116
}
141117

142118
@kotlinx.serialization.Serializable(with=LocalDateSerializer::class) public final class LocalDate {

firebase-dataconnect/firebase-dataconnect.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ dependencies {
125125
testImplementation(libs.mockk)
126126
testImplementation(libs.testonly.three.ten.abp)
127127
testImplementation(libs.robolectric)
128-
testImplementation(libs.turbine)
129128

130129
androidTestImplementation(project(":firebase-dataconnect:androidTestutil"))
131130
androidTestImplementation(project(":firebase-dataconnect:connectors"))
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version=16.0.0-beta99
1+
version=16.0.0-beta04
22
latestReleasedVersion=16.0.0-beta03

firebase-dataconnect/src/main/kotlin/com/google/firebase/dataconnect/DataConnectLogging.kt

Lines changed: 0 additions & 150 deletions
This file was deleted.

firebase-dataconnect/src/main/kotlin/com/google/firebase/dataconnect/FirebaseDataConnect.kt

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ import android.annotation.SuppressLint
2020
import com.google.firebase.Firebase
2121
import com.google.firebase.FirebaseApp
2222
import com.google.firebase.app
23-
import com.google.firebase.dataconnect.core.DataConnectLoggingImpl
2423
import com.google.firebase.dataconnect.core.FirebaseDataConnectFactory
24+
import com.google.firebase.dataconnect.core.LoggerGlobals
2525
import kotlinx.coroutines.CoroutineScope
26+
import kotlinx.coroutines.flow.MutableStateFlow
2627
import kotlinx.serialization.DeserializationStrategy
2728
import kotlinx.serialization.SerializationStrategy
2829
import kotlinx.serialization.modules.SerializersModule
@@ -61,8 +62,8 @@ import kotlinx.serialization.modules.SerializersModule
6162
* Data Connect service) call [FirebaseDataConnect.useEmulator]. To create [QueryRef] and
6263
* [MutationRef] instances for running queries and mutations, call [FirebaseDataConnect.query] and
6364
* [FirebaseDataConnect.mutation], respectively. To enable debug logging, which is especially useful
64-
* when reporting issues to Google, set [DataConnectLogging.level] in
65-
* [FirebaseDataConnect.Companion.logging] to [LogLevel.DEBUG].
65+
* when reporting issues to Google, set [FirebaseDataConnect.Companion.logLevel] to [LogLevel.DEBUG]
66+
* .
6667
*
6768
* ### Integration with Kotlin Coroutines and Serialization
6869
*
@@ -381,20 +382,13 @@ public fun FirebaseDataConnect.Companion.getInstance(
381382
/**
382383
* The log level used by all [FirebaseDataConnect] instances.
383384
*
385+
* As a [MutableStateFlow], the log level can be changed by assigning [MutableStateFlow.value].
386+
* Also, the flow can be "collected" as a means of observing the log level, which may be useful in
387+
* the case that a user interface shows a UI element, such as a checkbox, to represent whether debug
388+
* logging is enabled.
389+
*
384390
* The default log level is [LogLevel.WARN]. Setting this to [LogLevel.DEBUG] will enable debug
385391
* logging, which is especially useful when reporting issues to Google or investigating problems
386392
* yourself. Setting it to [LogLevel.NONE] will disable all logging.
387393
*/
388-
@Deprecated(
389-
message = "Will be removed when Data Connect graduates from beta",
390-
replaceWith = ReplaceWith("logging.level", "com.google.firebase.dataconnect.logging")
391-
)
392-
public var FirebaseDataConnect.Companion.logLevel: LogLevel
393-
get() = logging.level
394-
set(level) {
395-
logging.level = level
396-
}
397-
398-
/** The logcat logging facilities used by all [FirebaseDataConnect] instances. */
399-
public val FirebaseDataConnect.Companion.logging: DataConnectLogging<*>
400-
get() = DataConnectLoggingImpl
394+
public val FirebaseDataConnect.Companion.logLevel: MutableStateFlow<LogLevel> get() = LoggerGlobals.logLevel
Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,42 +18,11 @@ package com.google.firebase.dataconnect.core
1818

1919
import android.util.Log
2020
import com.google.firebase.dataconnect.BuildConfig
21-
import com.google.firebase.dataconnect.DataConnectLogging
2221
import com.google.firebase.dataconnect.LogLevel
2322
import com.google.firebase.dataconnect.core.LoggerGlobals.LOG_TAG
24-
import com.google.firebase.dataconnect.core.LoggerGlobals.Logger
2523
import com.google.firebase.util.nextAlphanumericString
26-
import kotlin.random.Random
2724
import kotlinx.coroutines.flow.MutableStateFlow
28-
import kotlinx.coroutines.flow.asSharedFlow
29-
30-
internal object DataConnectLoggingImpl : DataConnectLogging<DataConnectLoggingImpl.StateImpl> {
31-
32-
private val _state = MutableStateFlow(StateImpl(level = LogLevel.WARN))
33-
34-
override val flow = _state.asSharedFlow()
35-
36-
override val state
37-
get() = _state.value
38-
39-
override var level: LogLevel
40-
get() = _state.value.level
41-
set(newLevel) {
42-
while (true) {
43-
val oldState = _state.value
44-
val newState = oldState.copy(level = newLevel)
45-
if (_state.compareAndSet(oldState, newState)) {
46-
break
47-
}
48-
}
49-
}
50-
51-
data class StateImpl(override val level: LogLevel) : DataConnectLogging.State {
52-
override fun restore() {
53-
_state.value = this
54-
}
55-
}
56-
}
25+
import kotlin.random.Random
5726

5827
internal interface Logger {
5928
val name: String
@@ -90,30 +59,30 @@ private class LoggerImpl(override val name: String) : Logger {
9059
internal object LoggerGlobals {
9160
const val LOG_TAG = "FirebaseDataConnect"
9261

93-
private val logLevel: LogLevel by DataConnectLoggingImpl::level
62+
val logLevel = MutableStateFlow(LogLevel.WARN)
9463

9564
inline fun Logger.debug(message: () -> Any?) {
96-
if (logLevel <= LogLevel.DEBUG) debug("${message()}")
65+
if (logLevel.value <= LogLevel.DEBUG) debug("${message()}")
9766
}
9867

9968
fun Logger.debug(message: String) {
100-
if (logLevel <= LogLevel.DEBUG) log(null, LogLevel.DEBUG, message)
69+
if (logLevel.value <= LogLevel.DEBUG) log(null, LogLevel.DEBUG, message)
10170
}
10271

10372
inline fun Logger.warn(message: () -> Any?) {
104-
if (logLevel <= LogLevel.WARN) warn("${message()}")
73+
if (logLevel.value <= LogLevel.WARN) warn("${message()}")
10574
}
10675

10776
inline fun Logger.warn(exception: Throwable?, message: () -> Any?) {
108-
if (logLevel <= LogLevel.WARN) warn(exception, "${message()}")
77+
if (logLevel.value <= LogLevel.WARN) warn(exception, "${message()}")
10978
}
11079

11180
fun Logger.warn(message: String) {
11281
warn(null, message)
11382
}
11483

11584
fun Logger.warn(exception: Throwable?, message: String) {
116-
if (logLevel <= LogLevel.WARN) log(exception, LogLevel.WARN, message)
85+
if (logLevel.value <= LogLevel.WARN) log(exception, LogLevel.WARN, message)
11786
}
11887

11988
fun Logger(name: String): Logger = LoggerImpl(name)

0 commit comments

Comments
 (0)