Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +4 −6 Original line number Diff line number Diff line Loading @@ -608,12 +608,10 @@ private fun ShadeCarrierGroupKairos( logger = iconsViewModel.logger, slot = "mobile_carrier_shade_group", viewModel = buildSpec { ShadeCarrierGroupMobileIconViewModelKairos( icon, icon.iconInteractor, ) }, ), scope = scope, subscriptionId = subId, location = StatusBarLocation.SHADE_CARRIER_GROUP, Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernShadeCarrierGroupMobileView.kt +10 −4 Original line number Diff line number Diff line Loading @@ -20,9 +20,9 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout import com.android.systemui.kairos.BuildSpec import com.android.systemui.kairos.ExperimentalKairosApi import com.android.systemui.kairos.KairosNetwork import com.android.systemui.kairos.buildSpec import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON import com.android.systemui.statusbar.phone.StatusBarLocation Loading Loading @@ -92,7 +92,7 @@ class ModernShadeCarrierGroupMobileView(context: Context, attrs: AttributeSet?) context: Context, logger: MobileViewLogger, slot: String, viewModel: BuildSpec<ShadeCarrierGroupMobileIconViewModelKairos>, viewModel: ShadeCarrierGroupMobileIconViewModelKairos, scope: CoroutineScope, subscriptionId: Int, location: StatusBarLocation, Loading @@ -110,7 +110,7 @@ class ModernShadeCarrierGroupMobileView(context: Context, attrs: AttributeSet?) val (binding, _) = MobileIconBinderKairos.bind( view = iconView, viewModel = viewModel, viewModel = buildSpec { viewModel }, initialVisibilityState = STATE_ICON, logger = logger, scope = this, Loading @@ -122,7 +122,13 @@ class ModernShadeCarrierGroupMobileView(context: Context, attrs: AttributeSet?) val textView = view.requireViewById<AutoMarqueeTextView>(R.id.mobile_carrier_text) launch { ShadeCarrierBinderKairos.bind(textView, viewModel, kairosNetwork) } launch { ShadeCarrierBinderKairos.bind( textView, buildSpec { viewModel }, kairosNetwork, ) } } } } Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileView.kt +3 −3 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import android.view.LayoutInflater import android.widget.FrameLayout import android.widget.ImageView import com.android.keyguard.AlphaOptimizedLinearLayout import com.android.systemui.kairos.BuildSpec import com.android.systemui.kairos.ExperimentalKairosApi import com.android.systemui.kairos.KairosNetwork import com.android.systemui.kairos.buildSpec import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView.getVisibleStateString import com.android.systemui.statusbar.core.NewStatusBarIcons Loading Loading @@ -139,7 +139,7 @@ class ModernStatusBarMobileView(context: Context, attrs: AttributeSet?) : context: Context, logger: MobileViewLogger, slot: String, viewModel: BuildSpec<LocationBasedMobileViewModelKairos>, viewModel: LocationBasedMobileViewModelKairos, scope: CoroutineScope, subscriptionId: Int, location: StatusBarLocation, Loading @@ -163,7 +163,7 @@ class ModernStatusBarMobileView(context: Context, attrs: AttributeSet?) : val (binding, job) = MobileIconBinderKairos.bind( view = view, viewModel = viewModel, viewModel = buildSpec { viewModel }, logger = logger, scope = scope, kairosNetwork = kairosNetwork, Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelKairos.kt +76 −84 Original line number Diff line number Diff line Loading @@ -113,15 +113,29 @@ constructor( fun viewModelForSub( subId: Int, location: StatusBarLocation, ): BuildSpec<LocationBasedMobileViewModelKairos> = buildSpec { ): LocationBasedMobileViewModelKairos { val commonImpl = trackedCommonViewModel(subId) return LocationBasedMobileViewModelKairos.viewModelForLocation( commonImpl, commonImpl.iconInteractor, verboseLogger, location, ) } @Deprecated("Access view-models directly from \"icons\" property instead.") fun shadeCarrierGroupIcon(subId: Int): ShadeCarrierGroupMobileIconViewModelKairos { val commonImpl = trackedCommonViewModel(subId) return ShadeCarrierGroupMobileIconViewModelKairos(commonImpl, commonImpl.iconInteractor) } private fun trackedInteractor(subId: Int): MobileIconInteractorKairos = object : MobileIconInteractorKairos { val iconInteractorState: State<MobileIconInteractorKairos?> = interactor.icons.map { it[subId] } val iconInteractor = object : MobileIconInteractorKairos { fun <T> latest( default: T, block: MobileIconInteractorKairos.() -> State<T>, ): State<T> = iconInteractorState.flatMap { it?.block() ?: stateOf(default) } fun <T> latest(default: T, block: MobileIconInteractorKairos.() -> State<T>): State<T> = iconInteractorState.flatMap { it?.block() ?: stateOf(default) } override val tableLogBuffer: TableLogBuffer = logFactory.getOrCreate(tableBufferLogName(subId), MOBILE_CONNECTION_BUFFER_SIZE) Loading @@ -140,9 +154,7 @@ constructor( override val signalLevelIcon: State<SignalIconModel> = latest(SignalIconModel.DEFAULT) { signalLevelIcon } override val networkTypeIconGroup: State<NetworkTypeIconModel> = latest(NetworkTypeIconModel.DefaultIcon(TelephonyIcons.G)) { networkTypeIconGroup } latest(NetworkTypeIconModel.DefaultIcon(TelephonyIcons.G)) { networkTypeIconGroup } override val showSliceAttribution: State<Boolean> = latest(false) { showSliceAttribution } override val isNonTerrestrial: State<Boolean> = latest(false) { isNonTerrestrial } Loading @@ -160,51 +172,31 @@ constructor( latest(false) { carrierNetworkChangeActive } } val commonViewModelState: State<MobileIconViewModelKairos?> = icons.map { it[subId] } val commonViewModel = private fun trackedCommonViewModel(subId: Int) = object : MobileIconViewModelKairosCommon { override val iconInteractor: MobileIconInteractorKairos = trackedInteractor(subId) val commonViewModelState: State<MobileIconViewModelKairos?> = icons.map { it[subId] } fun <T> latest( default: T, block: MobileIconViewModelKairosCommon.() -> State<T>, ): State<T> = commonViewModelState.flatMap { it?.block() ?: stateOf(default) } override val subscriptionId: Int = subId override val iconInteractor: MobileIconInteractorKairos = iconInteractor override val isVisible: State<Boolean> = latest(false) { isVisible } override val icon: State<SignalIconModel> = latest(SignalIconModel.DEFAULT) { icon } override val contentDescription: State<MobileContentDescription?> = latest(null) { contentDescription } override val roaming: State<Boolean> = latest(false) { roaming } override val networkTypeIcon: State<Icon.Resource?> = latest(null) { networkTypeIcon } override val networkTypeIcon: State<Icon.Resource?> = latest(null) { networkTypeIcon } override val networkTypeBackground: State<Icon.Resource?> = latest(null) { networkTypeBackground } override val activityInVisible: State<Boolean> = latest(false) { activityInVisible } override val activityOutVisible: State<Boolean> = latest(false) { activityOutVisible } override val activityOutVisible: State<Boolean> = latest(false) { activityOutVisible } override val activityContainerVisible: State<Boolean> = latest(false) { activityContainerVisible } } LocationBasedMobileViewModelKairos.viewModelForLocation( commonViewModel, iconInteractor, verboseLogger, location, ) } fun shadeCarrierGroupIcon(subId: Int): BuildSpec<ShadeCarrierGroupMobileIconViewModelKairos> = buildSpec { val iconInteractor = interactor.icons.sample().getOrElse(subId) { error("Unknown subscription id: $subId") } val commonViewModel = icons.sample().getOrElse(subId) { error("Unknown subscription id: $subId") } ShadeCarrierGroupMobileIconViewModelKairos(commonViewModel, iconInteractor) } private fun BuildScope.commonViewModel(subId: Int, iconInteractor: MobileIconInteractorKairos) = activated { MobileIconViewModelKairos( Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +4 −6 Original line number Diff line number Diff line Loading @@ -608,12 +608,10 @@ private fun ShadeCarrierGroupKairos( logger = iconsViewModel.logger, slot = "mobile_carrier_shade_group", viewModel = buildSpec { ShadeCarrierGroupMobileIconViewModelKairos( icon, icon.iconInteractor, ) }, ), scope = scope, subscriptionId = subId, location = StatusBarLocation.SHADE_CARRIER_GROUP, Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernShadeCarrierGroupMobileView.kt +10 −4 Original line number Diff line number Diff line Loading @@ -20,9 +20,9 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout import com.android.systemui.kairos.BuildSpec import com.android.systemui.kairos.ExperimentalKairosApi import com.android.systemui.kairos.KairosNetwork import com.android.systemui.kairos.buildSpec import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON import com.android.systemui.statusbar.phone.StatusBarLocation Loading Loading @@ -92,7 +92,7 @@ class ModernShadeCarrierGroupMobileView(context: Context, attrs: AttributeSet?) context: Context, logger: MobileViewLogger, slot: String, viewModel: BuildSpec<ShadeCarrierGroupMobileIconViewModelKairos>, viewModel: ShadeCarrierGroupMobileIconViewModelKairos, scope: CoroutineScope, subscriptionId: Int, location: StatusBarLocation, Loading @@ -110,7 +110,7 @@ class ModernShadeCarrierGroupMobileView(context: Context, attrs: AttributeSet?) val (binding, _) = MobileIconBinderKairos.bind( view = iconView, viewModel = viewModel, viewModel = buildSpec { viewModel }, initialVisibilityState = STATE_ICON, logger = logger, scope = this, Loading @@ -122,7 +122,13 @@ class ModernShadeCarrierGroupMobileView(context: Context, attrs: AttributeSet?) val textView = view.requireViewById<AutoMarqueeTextView>(R.id.mobile_carrier_text) launch { ShadeCarrierBinderKairos.bind(textView, viewModel, kairosNetwork) } launch { ShadeCarrierBinderKairos.bind( textView, buildSpec { viewModel }, kairosNetwork, ) } } } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileView.kt +3 −3 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import android.view.LayoutInflater import android.widget.FrameLayout import android.widget.ImageView import com.android.keyguard.AlphaOptimizedLinearLayout import com.android.systemui.kairos.BuildSpec import com.android.systemui.kairos.ExperimentalKairosApi import com.android.systemui.kairos.KairosNetwork import com.android.systemui.kairos.buildSpec import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView.getVisibleStateString import com.android.systemui.statusbar.core.NewStatusBarIcons Loading Loading @@ -139,7 +139,7 @@ class ModernStatusBarMobileView(context: Context, attrs: AttributeSet?) : context: Context, logger: MobileViewLogger, slot: String, viewModel: BuildSpec<LocationBasedMobileViewModelKairos>, viewModel: LocationBasedMobileViewModelKairos, scope: CoroutineScope, subscriptionId: Int, location: StatusBarLocation, Loading @@ -163,7 +163,7 @@ class ModernStatusBarMobileView(context: Context, attrs: AttributeSet?) : val (binding, job) = MobileIconBinderKairos.bind( view = view, viewModel = viewModel, viewModel = buildSpec { viewModel }, logger = logger, scope = scope, kairosNetwork = kairosNetwork, Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelKairos.kt +76 −84 Original line number Diff line number Diff line Loading @@ -113,15 +113,29 @@ constructor( fun viewModelForSub( subId: Int, location: StatusBarLocation, ): BuildSpec<LocationBasedMobileViewModelKairos> = buildSpec { ): LocationBasedMobileViewModelKairos { val commonImpl = trackedCommonViewModel(subId) return LocationBasedMobileViewModelKairos.viewModelForLocation( commonImpl, commonImpl.iconInteractor, verboseLogger, location, ) } @Deprecated("Access view-models directly from \"icons\" property instead.") fun shadeCarrierGroupIcon(subId: Int): ShadeCarrierGroupMobileIconViewModelKairos { val commonImpl = trackedCommonViewModel(subId) return ShadeCarrierGroupMobileIconViewModelKairos(commonImpl, commonImpl.iconInteractor) } private fun trackedInteractor(subId: Int): MobileIconInteractorKairos = object : MobileIconInteractorKairos { val iconInteractorState: State<MobileIconInteractorKairos?> = interactor.icons.map { it[subId] } val iconInteractor = object : MobileIconInteractorKairos { fun <T> latest( default: T, block: MobileIconInteractorKairos.() -> State<T>, ): State<T> = iconInteractorState.flatMap { it?.block() ?: stateOf(default) } fun <T> latest(default: T, block: MobileIconInteractorKairos.() -> State<T>): State<T> = iconInteractorState.flatMap { it?.block() ?: stateOf(default) } override val tableLogBuffer: TableLogBuffer = logFactory.getOrCreate(tableBufferLogName(subId), MOBILE_CONNECTION_BUFFER_SIZE) Loading @@ -140,9 +154,7 @@ constructor( override val signalLevelIcon: State<SignalIconModel> = latest(SignalIconModel.DEFAULT) { signalLevelIcon } override val networkTypeIconGroup: State<NetworkTypeIconModel> = latest(NetworkTypeIconModel.DefaultIcon(TelephonyIcons.G)) { networkTypeIconGroup } latest(NetworkTypeIconModel.DefaultIcon(TelephonyIcons.G)) { networkTypeIconGroup } override val showSliceAttribution: State<Boolean> = latest(false) { showSliceAttribution } override val isNonTerrestrial: State<Boolean> = latest(false) { isNonTerrestrial } Loading @@ -160,51 +172,31 @@ constructor( latest(false) { carrierNetworkChangeActive } } val commonViewModelState: State<MobileIconViewModelKairos?> = icons.map { it[subId] } val commonViewModel = private fun trackedCommonViewModel(subId: Int) = object : MobileIconViewModelKairosCommon { override val iconInteractor: MobileIconInteractorKairos = trackedInteractor(subId) val commonViewModelState: State<MobileIconViewModelKairos?> = icons.map { it[subId] } fun <T> latest( default: T, block: MobileIconViewModelKairosCommon.() -> State<T>, ): State<T> = commonViewModelState.flatMap { it?.block() ?: stateOf(default) } override val subscriptionId: Int = subId override val iconInteractor: MobileIconInteractorKairos = iconInteractor override val isVisible: State<Boolean> = latest(false) { isVisible } override val icon: State<SignalIconModel> = latest(SignalIconModel.DEFAULT) { icon } override val contentDescription: State<MobileContentDescription?> = latest(null) { contentDescription } override val roaming: State<Boolean> = latest(false) { roaming } override val networkTypeIcon: State<Icon.Resource?> = latest(null) { networkTypeIcon } override val networkTypeIcon: State<Icon.Resource?> = latest(null) { networkTypeIcon } override val networkTypeBackground: State<Icon.Resource?> = latest(null) { networkTypeBackground } override val activityInVisible: State<Boolean> = latest(false) { activityInVisible } override val activityOutVisible: State<Boolean> = latest(false) { activityOutVisible } override val activityOutVisible: State<Boolean> = latest(false) { activityOutVisible } override val activityContainerVisible: State<Boolean> = latest(false) { activityContainerVisible } } LocationBasedMobileViewModelKairos.viewModelForLocation( commonViewModel, iconInteractor, verboseLogger, location, ) } fun shadeCarrierGroupIcon(subId: Int): BuildSpec<ShadeCarrierGroupMobileIconViewModelKairos> = buildSpec { val iconInteractor = interactor.icons.sample().getOrElse(subId) { error("Unknown subscription id: $subId") } val commonViewModel = icons.sample().getOrElse(subId) { error("Unknown subscription id: $subId") } ShadeCarrierGroupMobileIconViewModelKairos(commonViewModel, iconInteractor) } private fun BuildScope.commonViewModel(subId: Int, iconInteractor: MobileIconInteractorKairos) = activated { MobileIconViewModelKairos( Loading