From fe2a106d5cfeb19233b9c4bcbf4e8ff3f26d4b0c Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Mon, 11 Dec 2023 16:25:14 +0800 Subject: [PATCH] Fix cold startup of NetworkProviderCallsSmsController Network & internet is shown at the very beginning when activity embedding is enabled. Fix: 311604902 Test: manual - with TestDPC Change-Id: Ic27455e34a9ba4b48b8e72fd30d5b8d9e4be7194 --- res/drawable/ic_calls_sms.xml | 29 +++++++ res/xml/network_provider_internet.xml | 8 +- .../network/NetworkDashboardFragment.java | 1 + .../NetworkProviderCallsSmsController.kt | 75 +++++++------------ 4 files changed, 66 insertions(+), 47 deletions(-) create mode 100644 res/drawable/ic_calls_sms.xml diff --git a/res/drawable/ic_calls_sms.xml b/res/drawable/ic_calls_sms.xml new file mode 100644 index 00000000000..2033e8fc0dc --- /dev/null +++ b/res/drawable/ic_calls_sms.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml index cd44ab1620e..1a8ee0872cc 100644 --- a/res/xml/network_provider_internet.xml +++ b/res/xml/network_provider_internet.xml @@ -31,10 +31,16 @@ settings:keywords="@string/keywords_internet" settings:useAdminDisabledSummary="true" /> - Boolean = IsInServiceImpl(context)::isInService, -) : ComposePreferenceController(context, preferenceKey) { +) : BasePreferenceController(context, preferenceKey) { + + private lateinit var lazyViewModel: Lazy + private lateinit var preference: RestrictedPreference + + fun init(fragment: Fragment) { + lazyViewModel = fragment.viewModels() + } override fun getAvailabilityStatus() = when { !SubscriptionUtil.isSimHardwareVisible(mContext) -> UNSUPPORTED_ON_DEVICE @@ -72,35 +67,23 @@ open class NetworkProviderCallsSmsController @JvmOverloads constructor( else -> AVAILABLE } - @Composable - override fun Content() { - Column { - CallsAndSms() - HorizontalDivider() - } + override fun displayPreference(screen: PreferenceScreen) { + super.displayPreference(screen) + preference = screen.findPreference(preferenceKey)!! } - @Composable - private fun CallsAndSms() { - val viewModel: SubscriptionInfoListViewModel = viewModel() - val subscriptionInfos by viewModel.subscriptionInfoListFlow.collectAsStateWithLifecycle() - val summary by remember { summaryFlow(viewModel.subscriptionInfoListFlow) } - .collectAsStateWithLifecycle(initialValue = placeholder()) - RestrictedPreference( - model = object : PreferenceModel { - override val title = stringResource(R.string.calls_and_sms) - override val icon = @Composable { SettingsIcon(Icons.Outlined.PermPhoneMsg) } - override val summary = { summary } - override val enabled = { subscriptionInfos.isNotEmpty() } - override val onClick = { - SubSettingLauncher(mContext).apply { - setDestination(NetworkProviderCallsSmsFragment::class.qualifiedName) - setSourceMetricsCategory(SettingsEnums.SETTINGS_NETWORK_CATEGORY) - }.launch() + override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) { + val viewModel by lazyViewModel + + summaryFlow(viewModel.subscriptionInfoListFlow) + .collectLatestWithLifecycle(viewLifecycleOwner) { preference.summary = it } + + viewModel.subscriptionInfoListFlow + .collectLatestWithLifecycle(viewLifecycleOwner) { subscriptionInfoList -> + if (!preference.isDisabledByAdmin) { + preference.isEnabled = subscriptionInfoList.isNotEmpty() } - }, - restrictions = Restrictions(keys = listOf(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)), - ) + } } private fun summaryFlow(subscriptionInfoListFlow: Flow>) = combine(