From 344ba6912c49dd5916c7e309670290d31989d5ea Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Mon, 2 Dec 2024 12:30:50 +0800 Subject: [PATCH] [Catalyst] Migrate "Mobile data" Bug: 368355368 Flag: com.android.settings.flags.catalyst_mobile_network_list Test: devtool Change-Id: Id6092f37e0790566a2fdeb8a6f10e17ad79def78 --- .../settings/network/MobileDataPreference.kt | 78 +++++++++++++++++++ .../network/MobileNetworkListScreen.kt | 3 +- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/com/android/settings/network/MobileDataPreference.kt diff --git a/src/com/android/settings/network/MobileDataPreference.kt b/src/com/android/settings/network/MobileDataPreference.kt new file mode 100644 index 00000000000..d285a8ca26e --- /dev/null +++ b/src/com/android/settings/network/MobileDataPreference.kt @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2024 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 com.android.settings.network + +import android.content.Context +import android.telephony.SubscriptionManager +import com.android.settings.R +import com.android.settings.network.telephony.MobileDataRepository +import com.android.settings.network.telephony.SubscriptionRepository +import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.NoOpKeyedObservable +import com.android.settingslib.metadata.PreferenceAvailabilityProvider +import com.android.settingslib.metadata.ReadWritePermit +import com.android.settingslib.metadata.SensitivityLevel +import com.android.settingslib.metadata.SwitchPreference +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking + +class MobileDataPreference : + SwitchPreference( + KEY, + R.string.mobile_data_settings_title, + R.string.mobile_data_settings_summary, + ), + PreferenceAvailabilityProvider { + + override fun isAvailable(context: Context) = + SubscriptionRepository(context).getSelectableSubscriptionInfoList().any { + it.simSlotIndex > -1 + } + + override fun storage(context: Context): KeyValueStore = MobileDataStorage(context) + + override fun getReadPermit(context: Context, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + + override val sensitivityLevel + get() = SensitivityLevel.LOW_SENSITIVITY + + @Suppress("UNCHECKED_CAST") + private class MobileDataStorage(private val context: Context) : + NoOpKeyedObservable(), KeyValueStore { + + override fun contains(key: String) = key == KEY + + override fun getValue(key: String, valueType: Class): T { + val subId = SubscriptionManager.getDefaultDataSubscriptionId() + val flow = MobileDataRepository(context).isMobileDataEnabledFlow(subId) + return runBlocking { flow.first() } as T + } + + override fun setValue(key: String, valueType: Class, value: T?) { + val subId = SubscriptionManager.getDefaultDataSubscriptionId() + MobileDataRepository(context).setMobileDataEnabled(subId, value as Boolean) + } + } + + companion object { + const val KEY = "mobile_data" + } +} diff --git a/src/com/android/settings/network/MobileNetworkListScreen.kt b/src/com/android/settings/network/MobileNetworkListScreen.kt index 9f629c73cf9..d7231ccb711 100644 --- a/src/com/android/settings/network/MobileNetworkListScreen.kt +++ b/src/com/android/settings/network/MobileNetworkListScreen.kt @@ -159,7 +159,8 @@ class MobileNetworkListScreen : override fun fragmentClass() = MobileNetworkListFragment::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + override fun getPreferenceHierarchy(context: Context) = + preferenceHierarchy(this) { +MobileDataPreference() } companion object { const val KEY = "mobile_network_list"