Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 27980c60 authored by Olivier St-Onge's avatar Olivier St-Onge
Browse files

Initial implementation for dual sim icon

This adds the stacked dual sim icon when there's exactly two sims.
This includes the RAT indicator but is missing the exclamation mark icon

Bug: 394635586
Flag: com.android.systemui.status_bar_root_modernization
Flag: com.android.settingslib.flags.new_status_bar_icons
Test: manually -- using demo mode
Change-Id: I8bbbaccb29d3736d5f370fe24f754306915ece3a
parent 6b8460c4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@
        <item><xliff:g id="id">@string/status_bar_oem_satellite</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_wifi</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_hotspot</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_stacked_mobile</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_mobile</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_airplane</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_battery</xliff:g></item>
@@ -94,6 +95,7 @@
    <string translatable="false" name="status_bar_secure">secure</string>
    <string translatable="false" name="status_bar_clock">clock</string>
    <string translatable="false" name="status_bar_mobile">mobile</string>
    <string translatable="false" name="status_bar_stacked_mobile">stacked_mobile</string>
    <string translatable="false" name="status_bar_vpn">vpn</string>
    <string translatable="false" name="status_bar_ethernet">ethernet</string>
    <string translatable="false" name="status_bar_microphone">microphone</string>
+1 −0
Original line number Diff line number Diff line
@@ -3316,6 +3316,7 @@
  <java-symbol type="string" name="status_bar_no_calling" />
  <java-symbol type="string" name="status_bar_call_strength" />
  <java-symbol type="string" name="status_bar_mobile" />
  <java-symbol type="string" name="status_bar_stacked_mobile" />
  <java-symbol type="string" name="status_bar_ethernet" />
  <java-symbol type="string" name="status_bar_vpn" />
  <java-symbol type="string" name="status_bar_microphone" />
+33 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?><!--
  ~ 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.
  -->

<!-- Base layout that provides a single bindable compose view -->
<com.android.systemui.statusbar.pipeline.shared.ui.view.SingleBindableStatusBarComposeIconView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    >

    <androidx.compose.ui.platform.ComposeView
        android:id="@+id/compose_view"
        android:layout_height="@dimen/status_bar_bindable_icon_size"
        android:layout_width="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="4sp"
        />

</com.android.systemui.statusbar.pipeline.shared.ui.view.SingleBindableStatusBarComposeIconView>
+4 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.pipeline.icons.shared

import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.pipeline.icons.shared.model.BindableIcon
import com.android.systemui.statusbar.pipeline.mobile.ui.StackedMobileBindableIcon
import com.android.systemui.statusbar.pipeline.satellite.ui.DeviceBasedSatelliteBindableIcon
import javax.inject.Inject

@@ -40,11 +41,12 @@ class BindableIconsRegistryImpl
@Inject
constructor(
    /** Bindables go here */
    oemSatellite: DeviceBasedSatelliteBindableIcon
    oemSatellite: DeviceBasedSatelliteBindableIcon,
    stackedMobile: StackedMobileBindableIcon,
) : BindableIconsRegistry {
    /**
     * Adding the injected bindables to this list will get them registered with
     * StatusBarIconController
     */
    override val bindableIcons: List<BindableIcon> = listOf(oemSatellite)
    override val bindableIcons: List<BindableIcon> = listOf(oemSatellite, stackedMobile)
}
+19 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionManager
import android.telephony.SubscriptionManager.PROFILE_CLASS_PROVISIONING
import com.android.settingslib.SignalIcon.MobileIconGroup
import com.android.settingslib.flags.Flags
import com.android.settingslib.mobile.TelephonyIcons
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
@@ -28,6 +29,7 @@ import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.flags.Flags.FILTER_PROVISIONING_NETWORK_SUBSCRIPTIONS
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
@@ -39,6 +41,7 @@ import com.android.systemui.util.CarrierConfigTracker
import java.lang.ref.WeakReference
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
@@ -79,6 +82,9 @@ interface MobileIconsInteractor {
     */
    val icons: StateFlow<List<MobileIconInteractor>>

    /** Whether the mobile icons can be stacked vertically. */
    val isStackable: StateFlow<Boolean>

    /** True if the active mobile data subscription has data enabled */
    val activeDataConnectionHasDataEnabled: StateFlow<Boolean>

@@ -126,6 +132,7 @@ interface MobileIconsInteractor {
    fun getMobileConnectionInteractorForSubId(subId: Int): MobileIconInteractor
}

@OptIn(ExperimentalCoroutinesApi::class)
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
@SysUISingleton
class MobileIconsInteractorImpl
@@ -290,6 +297,18 @@ constructor(
            }
            .stateIn(scope, SharingStarted.WhileSubscribed(), emptyList())

    override val isStackable =
        if (Flags.newStatusBarIcons() && StatusBarRootModernization.isEnabled) {
                icons.flatMapLatest { icons ->
                    combine(icons.map { it.isNonTerrestrial }) {
                        it.size == 2 && it.none { isNonTerrestrial -> isNonTerrestrial }
                    }
                }
            } else {
                flowOf(false)
            }
            .stateIn(scope, SharingStarted.WhileSubscribed(), false)

    /**
     * Copied from the old pipeline. We maintain a 2s period of time where we will keep the
     * validated bit from the old active network (A) while data is changing to the new one (B).
Loading