[go: nahoru, domu]

blob: 1d81efb71a48b708c054d3420954228c6106b1f4 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.health.services.client.data
import android.os.Bundle
import androidx.health.services.client.proto.DataProto
import com.google.protobuf.ByteString
/** Utility methods for working with Bundles. */
internal object BundlesUtil {
@JvmStatic
internal fun toProto(bundle: Bundle): DataProto.Bundle {
val builder = DataProto.Bundle.newBuilder()
for (key in bundle.keySet()) {
@Suppress("DEPRECATION")
when (val value = bundle.get(key)) {
is Boolean -> builder.putBools(key, value)
is String -> builder.putStrings(key, value)
is Int -> builder.putInts(key, value)
is Long -> builder.putLongs(key, value)
is Float -> builder.putFloats(key, value)
is Double -> builder.putDoubles(key, value)
is Byte -> builder.putBytes(key, value.toInt())
is ByteArray -> builder.putByteArrays(key, ByteString.copyFrom(value))
is Bundle -> if (value != bundle) builder.putBundles(key, toProto(value))
}
}
return builder.build()
}
@JvmStatic
internal fun fromProto(proto: DataProto.Bundle): Bundle {
val bundle = Bundle()
proto.boolsMap.forEach { bundle.putBoolean(it.key, it.value) }
proto.stringsMap.forEach { bundle.putString(it.key, it.value) }
proto.intsMap.forEach { bundle.putInt(it.key, it.value) }
proto.longsMap.forEach { bundle.putLong(it.key, it.value) }
proto.floatsMap.forEach { bundle.putFloat(it.key, it.value) }
proto.doublesMap.forEach { bundle.putDouble(it.key, it.value) }
proto.bytesMap.forEach { bundle.putByte(it.key, it.value.toByte()) }
proto.byteArraysMap.forEach { bundle.putByteArray(it.key, it.value.toByteArray()) }
proto.bundlesMap.forEach { bundle.putBundle(it.key, fromProto(it.value)) }
return bundle
}
}