| /* | |
| * Copyright (C) 2025 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. | |
| */ | |
| @file:JvmName("SubIdBundleUtils") | |
| package com.android.settings.utils | |
| import android.os.Bundle | |
| import com.android.settings.flags.Flags | |
| import com.android.settingslib.metadata.CatalystFlagProviderFactory | |
| /** | |
| * Retrieves a subscription ID from a [Bundle] by a given [key]. | |
| * | |
| * This function retrieves the value associated with the key and checks its type. | |
| * If the value is a [String], it attempts to parse it as an integer. | |
| * If the value is an [Int], it is returned directly. | |
| * This provides compatibility for cases where the subscription ID might be stored in either format. | |
| * | |
| * @param key The key to look up in the Bundle. | |
| * @param defaultValue The value to return if the key is not found or if the `String` value cannot | |
| * be parsed as an integer. | |
| * @return The integer value associated with the key, or [defaultValue] if the key is not found or a | |
| * parsing error occurs. | |
| */ | |
| fun Bundle.getSubId(key: String, defaultValue: Int): Int { | |
| return when (@Suppress("DEPRECATION") val value = get(key)) { | |
| is String -> value.toIntOrNull() ?: defaultValue | |
| is Int -> value | |
| else -> defaultValue | |
| } | |
| } | |
| /** | |
| * Puts an integer subscription ID (`subId`) into a [Bundle] with a given [key]. | |
| * | |
| * This function is the counterpart to [getSubId] and is useful for migrations where a feature flag | |
| * controls the data type of a parameter. It checks [Flags.catalystUseStringBundle] and | |
| * [CatalystFlagProviderFactory.catalystUseKeyParameters] to determine whether to store the value as | |
| * a `String` or an `Int`. | |
| * | |
| * @param key The key with which to associate the value. | |
| * @param subId The integer value to store. | |
| */ | |
| fun Bundle.putSubId(key: String, subId: Int) { | |
| if (Flags.catalystUseStringBundle() || CatalystFlagProviderFactory.catalystUseKeyParameters()) { | |
| putString(key, subId.toString()) | |
| } else { | |
| putInt(key, subId) | |
| } | |
| } |