/* * Copyright (C) 2023 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.datausage import android.app.settings.SettingsEnums import android.content.Context import android.net.NetworkTemplate import android.os.Bundle import android.util.AttributeSet import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.settings.R import com.android.settings.core.SubSettingLauncher import com.android.settings.datausage.lib.BillingCycleRepository import com.android.settings.spa.preference.ComposePreference import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel /** * Preference which displays billing cycle of subscription * * @param context Context of preference * @param attrs The attributes of the XML tag that is inflating the preference */ class BillingCyclePreference @JvmOverloads constructor( context: Context, attrs: AttributeSet?, private val repository: BillingCycleRepository = BillingCycleRepository(context), ) : ComposePreference(context, attrs), TemplatePreference { override fun setTemplate(template: NetworkTemplate, subId: Int) { setContent { val isModifiable by remember(subId) { repository.isModifiableFlow(subId) }.collectAsStateWithLifecycle(initialValue = false) Preference(object : PreferenceModel { override val title = stringResource(R.string.billing_cycle) override val enabled = { isModifiable } override val onClick = { launchBillingCycleSettings(template) } }) } } private fun launchBillingCycleSettings(template: NetworkTemplate) { val args = Bundle().apply { putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, template) } SubSettingLauncher(context).apply { setDestination(BillingCycleSettings::class.java.name) setArguments(args) setTitleRes(R.string.billing_cycle) setSourceMetricsCategory(SettingsEnums.PAGE_UNKNOWN) }.launch() } }