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

Commit 9a984b49 authored by Evan Laird's avatar Evan Laird
Browse files

[sb] Add new compose battery to HomeStatusBar

When the flag is enabled, this creates and adds a `ComposeView` that
holds a `UnifiedBattery` in the status bar

It also turns off the old BatteryMeterViewController, which gets
injected around. Once the flag rolls out, we can delete all of that
nonsense.

Test: manual
Bug: 391605373
Flag: com.android.settingslib.flags.new_status_bar_icons
Change-Id: I771fe3a80d2b46ac9cdf921d053daf115aeb6532
parent 913d4058
Loading
Loading
Loading
Loading
+33 −1
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ package com.android.systemui.statusbar.pipeline.shared.ui.viewmodel
import android.graphics.Color
import android.graphics.Rect
import android.view.View
import androidx.compose.runtime.getValue
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.Hydrator
import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.statusbar.chips.mediaprojection.domain.model.MediaProjectionStopDialogModel
import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChipsModel
@@ -26,15 +29,20 @@ import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChip
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState.Idle
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipModel
import com.android.systemui.statusbar.phone.domain.interactor.IsAreaDark
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel
import com.android.systemui.statusbar.pipeline.shared.ui.model.SystemInfoCombinedVisibilityModel
import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import org.mockito.Mockito.mock

class FakeHomeStatusBarViewModel(
    override val operatorNameViewModel: StatusBarOperatorNameViewModel
) : HomeStatusBarViewModel {
) : HomeStatusBarViewModel, ExclusiveActivatable() {
    private val hydrator = Hydrator("FakeHomeStatusBarViewModel.hydrator")

    override val areNotificationsLightsOut = MutableStateFlow(false)

    override val isTransitioningFromLockscreenToOccluded = MutableStateFlow(false)
@@ -56,6 +64,11 @@ class FakeHomeStatusBarViewModel(

    override val isHomeStatusBarAllowedByScene = MutableStateFlow(false)

    override val batteryViewModelFactory: BatteryViewModel.Factory =
        object : BatteryViewModel.Factory {
            override fun create(): BatteryViewModel = mock(BatteryViewModel::class.java)
        }

    override val shouldShowOperatorNameView = MutableStateFlow(false)

    override val isClockVisible =
@@ -80,6 +93,7 @@ class FakeHomeStatusBarViewModel(

    var darkIconTint = Color.BLACK
    var lightIconTint = Color.WHITE
    var darkIntensity = 0f

    override val areaTint: Flow<StatusBarTintColor> =
        MutableStateFlow(
@@ -91,4 +105,22 @@ class FakeHomeStatusBarViewModel(
                }
            }
        )

    val isAreaDarkSource =
        MutableStateFlow(
            IsAreaDark { viewBounds ->
                if (DarkIconDispatcher.isInAreas(darkRegions, viewBounds)) {
                    darkIntensity < 0.5f
                } else {
                    false
                }
            }
        )

    override val areaDark: IsAreaDark by
        hydrator.hydratedStateOf(traceName = "areaDark", source = isAreaDarkSource)

    override suspend fun onActivated(): Nothing {
        hydrator.activate()
    }
}
+6 −1
Original line number Diff line number Diff line
@@ -34,12 +34,17 @@
        android:orientation="horizontal"/>

    <!-- PaddingEnd is added to balance hover padding, compensating for paddingStart in statusIcons.
         See b/339589733 -->
         See b/339589733.

         Default visibility is now "gone" to make space for the new battery icon
         -->
    <com.android.systemui.battery.BatteryMeterView android:id="@+id/battery"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:clipToPadding="false"
        android:clipChildren="false"
        android:paddingEnd="@dimen/status_bar_battery_end_padding"
        android:visibility="gone"
        systemui:textAppearance="@style/TextAppearance.StatusBar.Clock" />

</LinearLayout>
+4 −1
Original line number Diff line number Diff line
@@ -46,7 +46,10 @@ import java.io.PrintWriter;

import javax.inject.Inject;

/** Controller for {@link BatteryMeterView}. **/
/**
 * Controller for {@link BatteryMeterView}.
 * @deprecated once [NewStatusBarIcons] is rolled out, this class is no longer needed
 */
public class BatteryMeterViewController extends ViewController<BatteryMeterView> {
    private final ConfigurationController mConfigurationController;
    private final TunerService mTunerService;
+4 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import com.android.systemui.battery.BatteryMeterViewController;
import com.android.systemui.dagger.qualifiers.DisplaySpecific;
import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.core.NewStatusBarIcons;
import com.android.systemui.statusbar.data.repository.StatusBarConfigurationController;
import com.android.systemui.statusbar.layout.StatusBarBoundsProvider;
import com.android.systemui.statusbar.notification.shared.NotificationsLiveDataStoreRefactor;
@@ -85,7 +86,9 @@ public interface HomeStatusBarComponent {
    default void init() {
        // No one accesses these controllers, so we need to make sure we reference them here so they
        // do get initialized.
        if (!NewStatusBarIcons.isEnabled()) {
            getBatteryMeterViewController().init();
        }
        getHeadsUpAppearanceController().init();
        getPhoneStatusBarViewController().init();
        if (!NotificationsLiveDataStoreRefactor.isEnabled()) {
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.pipeline.battery.ui.viewmodel

import android.content.Context
import androidx.compose.runtime.getValue
import androidx.compose.ui.unit.dp
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.lifecycle.ExclusiveActivatable
@@ -223,6 +224,10 @@ constructor(interactor: BatteryInteractor, @Application context: Context) : Excl
    }

    companion object {
        // Status bar battery height, based on a 21x12 base canvas
        val STATUS_BAR_BATTERY_HEIGHT = 13.dp
        val STATUS_BAR_BATTERY_WIDTH = 22.75.dp

        fun Int.glyphRepresentation(): List<BatteryGlyph> = toString().map { it.toGlyph() }

        private fun Char.toGlyph(): BatteryGlyph =
Loading