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

Commit 80c05362 authored by amehfooz's avatar amehfooz
Browse files

Make StatusBarSignalPolicy startable

Bug: 264539100
Test: Made sure the airplane icon is updated in the status bar
when it is toggled from the QS Tile and the settings app.
This was done on a Pixel tablet.
Flag: com.android.systemui.status_bar_signal_policy_refactor

Change-Id: I7b479132e11bd811e7f9b47af0b42d67ec0d8b24
parent e3d259ba
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogBufferFactory
import com.android.systemui.statusbar.data.StatusBarDataLayerModule
import com.android.systemui.statusbar.phone.LightBarController
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLog
import com.android.systemui.statusbar.ui.SystemBarUtilsProxyImpl
@@ -51,6 +52,11 @@ abstract class StatusBarModule {
    @ClassKey(LightBarController::class)
    abstract fun bindLightBarController(impl: LightBarController): CoreStartable

    @Binds
    @IntoMap
    @ClassKey(StatusBarSignalPolicy::class)
    abstract fun bindStatusBarSignalPolicy(impl: StatusBarSignalPolicy): CoreStartable

    companion object {
        @Provides
        @SysUISingleton
+5 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static com.android.systemui.Flags.keyboardShortcutHelperRewrite;
import static com.android.systemui.Flags.lightRevealMigration;
import static com.android.systemui.Flags.newAodTransition;
import static com.android.systemui.Flags.relockWithPowerButtonImmediately;
import static com.android.systemui.Flags.statusBarSignalPolicyRefactor;
import static com.android.systemui.charging.WirelessChargingAnimation.UNKNOWN_BATTERY_LEVEL;
import static com.android.systemui.flags.Flags.SHORTCUT_LIST_SEARCH_LAYOUT;
import static com.android.systemui.statusbar.NotificationLockscreenUserManager.PERMISSION_SELF;
@@ -864,7 +865,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mBubblesOptional.ifPresent(this::initBubbles);
        mKeyguardBypassController.listenForQsExpandedChange();

        if (!statusBarSignalPolicyRefactor()) {
            mStatusBarSignalPolicy.init();
        }

        mKeyguardIndicationController.init();

        mColorExtractor.addOnColorsChangedListener(mOnColorsChangedListener);
+24 −6
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.util.ArraySet;
import android.util.Log;

import com.android.settingslib.mobile.TelephonyIcons;
import com.android.systemui.CoreStartable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.connectivity.IconState;
@@ -44,10 +45,13 @@ import java.util.Objects;

import javax.inject.Inject;

/** Controls the signal policies for icons shown in the statusbar. **/
/** Controls the signal policies for icons shown in the statusbar. */
@SysUISingleton
public class StatusBarSignalPolicy implements SignalCallback,
        SecurityController.SecurityControllerCallback, Tunable {
public class StatusBarSignalPolicy
        implements SignalCallback,
                SecurityController.SecurityControllerCallback,
                Tunable,
                CoreStartable {
    private static final String TAG = "StatusBarSignalPolicy";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

@@ -71,9 +75,9 @@ public class StatusBarSignalPolicy implements SignalCallback,
    private boolean mHideAirplane;
    private boolean mHideMobile;
    private boolean mHideEthernet;
    private boolean mActivityEnabled;
    private final boolean mActivityEnabled;

    private ArrayList<CallIndicatorIconState> mCallIndicatorStates = new ArrayList<>();
    private final ArrayList<CallIndicatorIconState> mCallIndicatorStates = new ArrayList<>();
    private boolean mInitialized;

    @Inject
@@ -107,9 +111,23 @@ public class StatusBarSignalPolicy implements SignalCallback,
        mActivityEnabled = mContext.getResources().getBoolean(R.bool.config_showActivity);
    }

    @Override
    public void start() {
        if (!statusBarSignalPolicyRefactor()) {
            return;
        }

        mTunerService.addTunable(this, StatusBarIconController.ICON_HIDE_LIST);
        mNetworkController.addCallback(this);
        mSecurityController.addCallback(this);

        mJavaAdapter.alwaysCollectFlow(
                mAirplaneModeInteractor.isAirplaneMode(), this::updateAirplaneModeIcon);
    }

    /** Call to initialize and register this class with the system. */
    public void init() {
        if (mInitialized) {
        if (mInitialized || statusBarSignalPolicyRefactor()) {
            return;
        }
        mInitialized = true;
+24 −4
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ import com.android.systemui.statusbar.phone.StatusBarSignalPolicy
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy_Factory
import com.android.systemui.statusbar.phone.ui.StatusBarIconController
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.airplaneModeInteractor
import com.android.systemui.statusbar.policy.securityController
import com.android.systemui.statusbar.policy.SecurityController
import com.android.systemui.tuner.TunerService
import com.android.systemui.util.CarrierConfigTracker
import com.android.systemui.util.kotlin.JavaAdapter
@@ -60,8 +60,8 @@ class StatusBarSignalPolicyTest : SysuiTestCase() {

    private val javaAdapter = JavaAdapter(testScope.backgroundScope)
    private val airplaneModeInteractor = kosmos.airplaneModeInteractor
    private val securityController = kosmos.securityController

    private val securityController = mock<SecurityController>()
    private val tunerService = mock<TunerService>()
    private val statusBarIconController = mock<StatusBarIconController>()
    private val networkController = mock<NetworkController>()
@@ -90,7 +90,7 @@ class StatusBarSignalPolicyTest : SysuiTestCase() {
    @EnableFlags(FLAG_STATUS_BAR_SIGNAL_POLICY_REFACTOR)
    fun airplaneModeViaInteractor_statusBarSignalPolicyRefactorFlagEnabled_iconUpdated() =
        testScope.runTest {
            underTest.init()
            underTest.start()
            airplaneModeInteractor.setIsAirplaneMode(true)
            runCurrent()
            verify(statusBarIconController).setIconVisibility(slotAirplane, true)
@@ -104,7 +104,7 @@ class StatusBarSignalPolicyTest : SysuiTestCase() {
    @EnableFlags(FLAG_STATUS_BAR_SIGNAL_POLICY_REFACTOR)
    fun airplaneModeViaSignalCallback_statusBarSignalPolicyRefactorFlagEnabled_iconNotUpdated() =
        testScope.runTest {
            underTest.init()
            underTest.start()
            runCurrent()
            clearInvocations(statusBarIconController)

@@ -119,6 +119,16 @@ class StatusBarSignalPolicyTest : SysuiTestCase() {
            verifyZeroInteractions(statusBarIconController)
        }

    @Test
    @EnableFlags(FLAG_STATUS_BAR_SIGNAL_POLICY_REFACTOR)
    fun statusBarSignalPolicyInitialization_statusBarSignalPolicyRefactorFlagEnabled_initNoOp() =
        testScope.runTest {
            // Make sure StatusBarSignalPolicy.init does no initialization when
            // the refactor flag is disabled.
            underTest.init()
            verifyZeroInteractions(securityController, networkController, tunerService)
        }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_SIGNAL_POLICY_REFACTOR)
    fun airplaneModeViaSignalCallback_statusBarSignalPolicyRefactorFlagDisabled_iconUpdated() =
@@ -150,4 +160,14 @@ class StatusBarSignalPolicyTest : SysuiTestCase() {
            runCurrent()
            verifyZeroInteractions(statusBarIconController)
        }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_SIGNAL_POLICY_REFACTOR)
    fun statusBarSignalPolicyInitialization_statusBarSignalPolicyRefactorFlagDisabled_startNoOp() =
        testScope.runTest {
            // Make sure StatusBarSignalPolicy.start does no initialization when
            // the refactor flag is disabled.
            underTest.start()
            verifyZeroInteractions(securityController, networkController, tunerService)
        }
}