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

Commit 7609b334 authored by Evan Laird's avatar Evan Laird
Browse files

[sb] Add compose battery to keyguard status bar

Test: manual
Bug: 391605373
Flag: com.android.settingslib.flags.new_status_bar_icons
Change-Id: Ia9dc1ff833994423861b9c2d93f5ac5f7a83ab5a
parent 9a984b49
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -51,11 +51,13 @@ import com.android.systemui.res.R
import com.android.systemui.shade.ShadeViewStateProvider
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.core.NewStatusBarIcons
import com.android.systemui.statusbar.data.repository.StatusBarContentInsetsProviderStore
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler
import com.android.systemui.statusbar.layout.mockStatusBarContentInsetsProvider
import com.android.systemui.statusbar.phone.ui.StatusBarIconController
import com.android.systemui.statusbar.phone.ui.TintedIconManager
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.batteryViewModelFactory
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -85,6 +87,7 @@ import org.mockito.MockitoAnnotations
@SmallTest
@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
@DisableFlags(NewStatusBarIcons.FLAG_NAME)
class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
    private lateinit var kosmos: Kosmos
    private lateinit var testScope: TestScope
@@ -190,6 +193,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
            statusBarIconController,
            iconManagerFactory,
            batteryMeterViewController,
            kosmos.batteryViewModelFactory,
            shadeViewStateProvider,
            keyguardStateController,
            keyguardBypassController,
+17 −4
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.core.NewStatusBarIcons;
import com.android.systemui.statusbar.layout.StatusBarContentInsetsProvider;
import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher.DarkChange;
import com.android.systemui.statusbar.phone.ui.TintedIconManager;
@@ -78,7 +79,7 @@ public class KeyguardStatusBarView extends RelativeLayout {

    private TextView mCarrierLabel;
    private ImageView mMultiUserAvatar;
    private BatteryMeterView mBatteryView;
    @Nullable private BatteryMeterView mBatteryView;
    private StatusIconContainer mStatusIconContainer;
    private StatusBarUserSwitcherContainer mUserSwitcherContainer;

@@ -127,6 +128,11 @@ public class KeyguardStatusBarView extends RelativeLayout {
        mMultiUserAvatar = findViewById(R.id.multi_user_avatar);
        mCarrierLabel = findViewById(R.id.keyguard_carrier_text);
        mBatteryView = mSystemIconsContainer.findViewById(R.id.battery);
        if (NewStatusBarIcons.isEnabled()) {
            // When this flag is rolled forward, this whole view can be removed
            mBatteryView.setVisibility(View.GONE);
            mBatteryView = null;
        }
        mCutoutSpace = findViewById(R.id.cutout_space_view);
        mStatusIconArea = findViewById(R.id.status_icon_area);
        mStatusIconContainer = findViewById(R.id.statusIcons);
@@ -255,8 +261,11 @@ public class KeyguardStatusBarView extends RelativeLayout {
                mMultiUserAvatar.setVisibility(View.GONE);
            }
        }

        if (mBatteryView != null) {
            mBatteryView.setForceShowPercent(mBatteryCharging && mShowPercentAvailable);
        }
    }

    private void updateSystemIconsLayoutParams() {
        LinearLayout.LayoutParams lp =
@@ -435,7 +444,9 @@ public class KeyguardStatusBarView extends RelativeLayout {

    /** Should only be called from {@link KeyguardStatusBarViewController}. */
    void onThemeChanged(TintedIconManager iconManager) {
        if (mBatteryView != null) {
            mBatteryView.setColorsFromContext(mContext);
        }
        updateIconsAndTextColors(iconManager);
    }

@@ -443,7 +454,9 @@ public class KeyguardStatusBarView extends RelativeLayout {
    void onOverlayChanged() {
        final int carrierTheme = R.style.TextAppearance_StatusBar_Clock;
        mCarrierLabel.setTextAppearance(carrierTheme);
        if (mBatteryView != null) {
            mBatteryView.updatePercentView();
        }

        final int userSwitcherTheme = R.style.TextAppearance_StatusBar_UserChip;
        TextView userSwitcherName = mUserSwitcherContainer.findViewById(R.id.current_user_name);
+22 −2
Original line number Diff line number Diff line
@@ -34,10 +34,12 @@ import android.provider.Settings;
import android.util.MathUtils;
import android.view.DisplayCutout;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.compose.ui.platform.ComposeView;
import androidx.core.animation.Animator;
import androidx.core.animation.AnimatorListenerAdapter;
import androidx.core.animation.ValueAnimator;
@@ -62,6 +64,7 @@ import com.android.systemui.shade.ShadeViewStateProvider;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.core.NewStatusBarIcons;
import com.android.systemui.statusbar.data.repository.StatusBarContentInsetsProviderStore;
import com.android.systemui.statusbar.disableflags.DisableStateTracker;
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
@@ -71,10 +74,13 @@ import com.android.systemui.statusbar.notification.AnimatableProperty;
import com.android.systemui.statusbar.notification.PropertyAnimator;
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.domain.interactor.DarkIconInteractor;
import com.android.systemui.statusbar.phone.fragment.StatusBarIconBlocklistKt;
import com.android.systemui.statusbar.phone.fragment.StatusBarSystemEventDefaultAnimator;
import com.android.systemui.statusbar.phone.ui.StatusBarIconController;
import com.android.systemui.statusbar.phone.ui.TintedIconManager;
import com.android.systemui.statusbar.pipeline.battery.ui.binder.UnifiedBatteryViewBinder;
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -125,6 +131,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    private final StatusBarIconController mStatusBarIconController;
    private final TintedIconManager.Factory mTintedIconManagerFactory;
    private final BatteryMeterViewController mBatteryMeterViewController;
    private final BatteryViewModel.Factory mBatteryViewModelFactory;
    private final ShadeViewStateProvider mShadeViewStateProvider;
    private final KeyguardStateController mKeyguardStateController;
    private final KeyguardBypassController mKeyguardBypassController;
@@ -145,7 +152,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    private final GlanceableHubToLockscreenTransitionViewModel mHubToLockscreenTransitionViewModel;
    private final LockscreenToGlanceableHubTransitionViewModel mLockscreenToHubTransitionViewModel;

    private View mSystemIconsContainer;
    private ViewGroup mSystemIconsContainer;
    private final StatusOverlayHoverListenerFactory mStatusOverlayHoverListenerFactory;

    private final ConfigurationController.ConfigurationListener mConfigurationListener =
@@ -327,6 +334,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
            StatusBarIconController statusBarIconController,
            TintedIconManager.Factory tintedIconManagerFactory,
            BatteryMeterViewController batteryMeterViewController,
            BatteryViewModel.Factory batteryViewModelFactory,
            ShadeViewStateProvider shadeViewStateProvider,
            KeyguardStateController keyguardStateController,
            KeyguardBypassController bypassController,
@@ -360,6 +368,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        mStatusBarIconController = statusBarIconController;
        mTintedIconManagerFactory = tintedIconManagerFactory;
        mBatteryMeterViewController = batteryMeterViewController;
        mBatteryViewModelFactory = batteryViewModelFactory;
        mShadeViewStateProvider = shadeViewStateProvider;
        mKeyguardStateController = keyguardStateController;
        mKeyguardBypassController = bypassController;
@@ -417,7 +426,9 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    protected void onInit() {
        super.onInit();
        mCarrierTextController.init();
        if (!NewStatusBarIcons.isEnabled()) {
            mBatteryMeterViewController.init();
        }
        if (isMigrationEnabled()) {
            KeyguardStatusBarViewBinder.bind(mView, mKeyguardStatusBarViewModel);
        }
@@ -469,6 +480,15 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
                mToGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
        collectFlow(mView, mHubToLockscreenTransitionViewModel.getStatusBarAlpha(),
                mFromGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
        if (NewStatusBarIcons.isEnabled()) {
            ComposeView batteryComposeView = new ComposeView(mContext);
            UnifiedBatteryViewBinder.bind(
                    batteryComposeView,
                    mBatteryViewModelFactory,
                    DarkIconInteractor.toIsAreaDark(mView.darkChangeFlow()));

            mSystemIconsContainer.addView(batteryComposeView, -1);
        }
    }

    @Override
+12 −1
Original line number Diff line number Diff line
@@ -16,7 +16,10 @@

package com.android.systemui.statusbar.pipeline.battery.ui.binder

import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.view.isVisible
@@ -27,6 +30,8 @@ import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.statusbar.phone.domain.interactor.IsAreaDark
import com.android.systemui.statusbar.pipeline.battery.ui.composable.UnifiedBattery
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel.Companion.STATUS_BAR_BATTERY_HEIGHT
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel.Companion.STATUS_BAR_BATTERY_WIDTH
import kotlinx.coroutines.flow.Flow

/** In cases where the battery needs to be bound to an existing android view */
@@ -47,7 +52,13 @@ object UnifiedBatteryViewBinder {
                    )
                    setContent {
                        val isDark by isAreaDark.collectAsStateWithLifecycle(IsAreaDark { true })
                        UnifiedBattery(viewModelFactory = viewModelFactory, isDark = isDark)
                        UnifiedBattery(
                            modifier =
                                Modifier.height(STATUS_BAR_BATTERY_HEIGHT)
                                    .width(STATUS_BAR_BATTERY_WIDTH),
                            viewModelFactory = viewModelFactory,
                            isDark = isDark,
                        )
                    }
                }
            }