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

Commit c4ef2ff4 authored by Darrell Shi's avatar Darrell Shi
Browse files

Refactor DreamLogger with Logger

This change refactors where DreamLogger is used to take advantage of the
Logger class.

It also adds a FakeLogBuffer class which returns a real LogMessage
object to prevent a NullPointerException when operating on the message.

Bug: 276475093
Test: atest ComplicationCollectionLiveDataTest
Test: atest DreamOverlayAnimationsControllerTest
Test: atest DreamOverlayStateControllerTest
Test: atest DreamOverlayStatusBarViewControllerTest
Change-Id: I68160c4f2c1d46abb0cf67531e749d02f297047d
parent f29c879c
Loading
Loading
Loading
Loading
+46 −9
Original line number Original line Diff line number Diff line
@@ -16,15 +16,52 @@


package com.android.systemui.dreams
package com.android.systemui.dreams


import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.Logger
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.core.MessageBuffer
import com.android.systemui.log.dagger.DreamLog
import javax.inject.Inject


/** Logs dream-related stuff to a {@link LogBuffer}. */
/** Logs dream-related stuff to a {@link LogBuffer}. */
class DreamLogger @Inject constructor(@DreamLog private val buffer: LogBuffer) {
class DreamLogger(buffer: MessageBuffer, tag: String) : Logger(buffer, tag) {
    /** Logs a debug message to the buffer. */
    fun logDreamOverlayEnabled(enabled: Boolean) =
    fun d(tag: String, message: String) {
        d({ "Dream overlay enabled: $bool1" }) { bool1 = enabled }
        buffer.log(tag, LogLevel.DEBUG, { str1 = message }, { message })

    fun logIgnoreAddComplication(reason: String, complication: String) =
        d({ "Ignore adding complication, reason: $str1, complication: $str2" }) {
            str1 = reason
            str2 = complication
        }

    fun logIgnoreRemoveComplication(reason: String, complication: String) =
        d({ "Ignore removing complication, reason: $str1, complication: $str2" }) {
            str1 = reason
            str2 = complication
        }

    fun logAddComplication(complication: String) =
        d({ "Add dream complication: $str1" }) { str1 = complication }

    fun logRemoveComplication(complication: String) =
        d({ "Remove dream complication: $str1" }) { str1 = complication }

    fun logOverlayActive(active: Boolean) = d({ "Dream overlay active: $bool1" }) { bool1 = active }

    fun logLowLightActive(active: Boolean) =
        d({ "Low light mode active: $bool1" }) { bool1 = active }

    fun logHasAssistantAttention(hasAttention: Boolean) =
        d({ "Dream overlay has Assistant attention: $bool1" }) { bool1 = hasAttention }

    fun logStatusBarVisible(visible: Boolean) =
        d({ "Dream overlay status bar visible: $bool1" }) { bool1 = visible }

    fun logAvailableComplicationTypes(types: Int) =
        d({ "Available complication types: $int1" }) { int1 = types }

    fun logShouldShowComplications(showComplications: Boolean) =
        d({ "Dream overlay should show complications: $bool1" }) { bool1 = showComplications }

    fun logShowOrHideStatusBarItem(show: Boolean, type: String) =
        d({ "${if (bool1) "Showing" else "Hiding"} dream status bar item: $int1" }) {
            bool1 = show
            str1 = type
        }
        }
}
}
+12 −7
Original line number Original line Diff line number Diff line
@@ -36,6 +36,9 @@ import com.android.systemui.complication.ComplicationLayoutParams.Position
import com.android.systemui.dreams.dagger.DreamOverlayModule
import com.android.systemui.dreams.dagger.DreamOverlayModule
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.Logger
import com.android.systemui.log.dagger.DreamLog
import com.android.systemui.statusbar.BlurUtils
import com.android.systemui.statusbar.BlurUtils
import com.android.systemui.statusbar.CrossFadeHelper
import com.android.systemui.statusbar.CrossFadeHelper
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.ConfigurationController
@@ -65,12 +68,14 @@ constructor(
    private val mDreamInTranslationYDistance: Int,
    private val mDreamInTranslationYDistance: Int,
    @Named(DreamOverlayModule.DREAM_IN_TRANSLATION_Y_DURATION)
    @Named(DreamOverlayModule.DREAM_IN_TRANSLATION_Y_DURATION)
    private val mDreamInTranslationYDurationMs: Long,
    private val mDreamInTranslationYDurationMs: Long,
    private val mLogger: DreamLogger,
    @DreamLog logBuffer: LogBuffer,
) {
) {
    companion object {
    companion object {
        private const val TAG = "DreamOverlayAnimationsController"
        private const val TAG = "DreamOverlayAnimationsController"
    }
    }


    private val logger = Logger(logBuffer, TAG)

    private var mAnimator: Animator? = null
    private var mAnimator: Animator? = null
    private lateinit var view: View
    private lateinit var view: View


@@ -179,11 +184,11 @@ constructor(
                doOnEnd {
                doOnEnd {
                    mAnimator = null
                    mAnimator = null
                    mOverlayStateController.setEntryAnimationsFinished(true)
                    mOverlayStateController.setEntryAnimationsFinished(true)
                    mLogger.d(TAG, "Dream overlay entry animations finished.")
                    logger.d("Dream overlay entry animations finished.")
                }
                }
                doOnCancel { mLogger.d(TAG, "Dream overlay entry animations canceled.") }
                doOnCancel { logger.d("Dream overlay entry animations canceled.") }
                start()
                start()
                mLogger.d(TAG, "Dream overlay entry animations started.")
                logger.d("Dream overlay entry animations started.")
            }
            }
    }
    }


@@ -242,11 +247,11 @@ constructor(
                doOnEnd {
                doOnEnd {
                    mAnimator = null
                    mAnimator = null
                    mOverlayStateController.setExitAnimationsRunning(false)
                    mOverlayStateController.setExitAnimationsRunning(false)
                    mLogger.d(TAG, "Dream overlay exit animations finished.")
                    logger.d("Dream overlay exit animations finished.")
                }
                }
                doOnCancel { mLogger.d(TAG, "Dream overlay exit animations canceled.") }
                doOnCancel { logger.d("Dream overlay exit animations canceled.") }
                start()
                start()
                mLogger.d(TAG, "Dream overlay exit animations started.")
                logger.d("Dream overlay exit animations started.")
            }
            }
        mOverlayStateController.setExitAnimationsRunning(true)
        mOverlayStateController.setExitAnimationsRunning(true)
        return mAnimator as AnimatorSet
        return mAnimator as AnimatorSet
+15 −15
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.flags.Flags;
import com.android.systemui.log.LogBuffer;
import com.android.systemui.log.dagger.DreamLog;
import com.android.systemui.statusbar.policy.CallbackController;
import com.android.systemui.statusbar.policy.CallbackController;


import java.util.ArrayList;
import java.util.ArrayList;
@@ -115,10 +117,10 @@ public class DreamOverlayStateController implements
    public DreamOverlayStateController(@Main Executor executor,
    public DreamOverlayStateController(@Main Executor executor,
            @Named(DREAM_OVERLAY_ENABLED) boolean overlayEnabled,
            @Named(DREAM_OVERLAY_ENABLED) boolean overlayEnabled,
            FeatureFlags featureFlags,
            FeatureFlags featureFlags,
            DreamLogger dreamLogger) {
            @DreamLog LogBuffer logBuffer) {
        mExecutor = executor;
        mExecutor = executor;
        mOverlayEnabled = overlayEnabled;
        mOverlayEnabled = overlayEnabled;
        mLogger = dreamLogger;
        mLogger = new DreamLogger(logBuffer, TAG);
        mFeatureFlags = featureFlags;
        mFeatureFlags = featureFlags;
        if (mFeatureFlags.isEnabled(Flags.ALWAYS_SHOW_HOME_CONTROLS_ON_DREAMS)) {
        if (mFeatureFlags.isEnabled(Flags.ALWAYS_SHOW_HOME_CONTROLS_ON_DREAMS)) {
            mSupportedTypes = Complication.COMPLICATION_TYPE_NONE
            mSupportedTypes = Complication.COMPLICATION_TYPE_NONE
@@ -126,7 +128,7 @@ public class DreamOverlayStateController implements
        } else {
        } else {
            mSupportedTypes = Complication.COMPLICATION_TYPE_NONE;
            mSupportedTypes = Complication.COMPLICATION_TYPE_NONE;
        }
        }
        mLogger.d(TAG, "Dream overlay enabled: " + mOverlayEnabled);
        mLogger.logDreamOverlayEnabled(mOverlayEnabled);
    }
    }


    /**
    /**
@@ -134,14 +136,13 @@ public class DreamOverlayStateController implements
     */
     */
    public void addComplication(Complication complication) {
    public void addComplication(Complication complication) {
        if (!mOverlayEnabled) {
        if (!mOverlayEnabled) {
            mLogger.d(TAG,
            mLogger.logIgnoreAddComplication("overlay disabled", complication.toString());
                    "Ignoring adding complication due to overlay disabled: " + complication);
            return;
            return;
        }
        }


        mExecutor.execute(() -> {
        mExecutor.execute(() -> {
            if (mComplications.add(complication)) {
            if (mComplications.add(complication)) {
                mLogger.d(TAG, "Added dream complication: " + complication);
                mLogger.logAddComplication(complication.toString());
                mCallbacks.stream().forEach(callback -> callback.onComplicationsChanged());
                mCallbacks.stream().forEach(callback -> callback.onComplicationsChanged());
            }
            }
        });
        });
@@ -152,14 +153,13 @@ public class DreamOverlayStateController implements
     */
     */
    public void removeComplication(Complication complication) {
    public void removeComplication(Complication complication) {
        if (!mOverlayEnabled) {
        if (!mOverlayEnabled) {
            mLogger.d(TAG,
            mLogger.logIgnoreRemoveComplication("overlay disabled", complication.toString());
                    "Ignoring removing complication due to overlay disabled: " + complication);
            return;
            return;
        }
        }


        mExecutor.execute(() -> {
        mExecutor.execute(() -> {
            if (mComplications.remove(complication)) {
            if (mComplications.remove(complication)) {
                mLogger.d(TAG, "Removed dream complication: " + complication);
                mLogger.logRemoveComplication(complication.toString());
                mCallbacks.stream().forEach(callback -> callback.onComplicationsChanged());
                mCallbacks.stream().forEach(callback -> callback.onComplicationsChanged());
            }
            }
        });
        });
@@ -305,7 +305,7 @@ public class DreamOverlayStateController implements
     * @param active {@code true} if overlay is active, {@code false} otherwise.
     * @param active {@code true} if overlay is active, {@code false} otherwise.
     */
     */
    public void setOverlayActive(boolean active) {
    public void setOverlayActive(boolean active) {
        mLogger.d(TAG, "Dream overlay active: " + active);
        mLogger.logOverlayActive(active);
        modifyState(active ? OP_SET_STATE : OP_CLEAR_STATE, STATE_DREAM_OVERLAY_ACTIVE);
        modifyState(active ? OP_SET_STATE : OP_CLEAR_STATE, STATE_DREAM_OVERLAY_ACTIVE);
    }
    }


@@ -314,7 +314,7 @@ public class DreamOverlayStateController implements
     * @param active {@code true} if low light mode is active, {@code false} otherwise.
     * @param active {@code true} if low light mode is active, {@code false} otherwise.
     */
     */
    public void setLowLightActive(boolean active) {
    public void setLowLightActive(boolean active) {
        mLogger.d(TAG, "Low light mode active: " + active);
        mLogger.logLowLightActive(active);


        if (isLowLightActive() && !active) {
        if (isLowLightActive() && !active) {
            // Notify that we're exiting low light only on the transition from active to not active.
            // Notify that we're exiting low light only on the transition from active to not active.
@@ -346,7 +346,7 @@ public class DreamOverlayStateController implements
     * @param hasAttention {@code true} if has the user's attention, {@code false} otherwise.
     * @param hasAttention {@code true} if has the user's attention, {@code false} otherwise.
     */
     */
    public void setHasAssistantAttention(boolean hasAttention) {
    public void setHasAssistantAttention(boolean hasAttention) {
        mLogger.d(TAG, "Dream overlay has Assistant attention: " + hasAttention);
        mLogger.logHasAssistantAttention(hasAttention);
        modifyState(hasAttention ? OP_SET_STATE : OP_CLEAR_STATE, STATE_HAS_ASSISTANT_ATTENTION);
        modifyState(hasAttention ? OP_SET_STATE : OP_CLEAR_STATE, STATE_HAS_ASSISTANT_ATTENTION);
    }
    }


@@ -355,7 +355,7 @@ public class DreamOverlayStateController implements
     * @param visible {@code true} if the status bar is visible, {@code false} otherwise.
     * @param visible {@code true} if the status bar is visible, {@code false} otherwise.
     */
     */
    public void setDreamOverlayStatusBarVisible(boolean visible) {
    public void setDreamOverlayStatusBarVisible(boolean visible) {
        mLogger.d(TAG, "Dream overlay status bar visible: " + visible);
        mLogger.logStatusBarVisible(visible);
        modifyState(
        modifyState(
                visible ? OP_SET_STATE : OP_CLEAR_STATE, STATE_DREAM_OVERLAY_STATUS_BAR_VISIBLE);
                visible ? OP_SET_STATE : OP_CLEAR_STATE, STATE_DREAM_OVERLAY_STATUS_BAR_VISIBLE);
    }
    }
@@ -373,7 +373,7 @@ public class DreamOverlayStateController implements
     */
     */
    public void setAvailableComplicationTypes(@Complication.ComplicationType int types) {
    public void setAvailableComplicationTypes(@Complication.ComplicationType int types) {
        mExecutor.execute(() -> {
        mExecutor.execute(() -> {
            mLogger.d(TAG, "Available complication types: " + types);
            mLogger.logAvailableComplicationTypes(types);
            mAvailableComplicationTypes = types;
            mAvailableComplicationTypes = types;
            mCallbacks.forEach(Callback::onAvailableComplicationTypesChanged);
            mCallbacks.forEach(Callback::onAvailableComplicationTypesChanged);
        });
        });
@@ -391,7 +391,7 @@ public class DreamOverlayStateController implements
     */
     */
    public void setShouldShowComplications(boolean shouldShowComplications) {
    public void setShouldShowComplications(boolean shouldShowComplications) {
        mExecutor.execute(() -> {
        mExecutor.execute(() -> {
            mLogger.d(TAG, "Should show complications: " + shouldShowComplications);
            mLogger.logShouldShowComplications(shouldShowComplications);
            mShouldShowComplications = shouldShowComplications;
            mShouldShowComplications = shouldShowComplications;
            mCallbacks.forEach(Callback::onAvailableComplicationTypesChanged);
            mCallbacks.forEach(Callback::onAvailableComplicationTypesChanged);
        });
        });
+6 −4
Original line number Original line Diff line number Diff line
@@ -36,6 +36,8 @@ import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem;
import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.log.LogBuffer;
import com.android.systemui.log.dagger.DreamLog;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
@@ -161,7 +163,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
            DreamOverlayStatusBarItemsProvider statusBarItemsProvider,
            DreamOverlayStatusBarItemsProvider statusBarItemsProvider,
            DreamOverlayStateController dreamOverlayStateController,
            DreamOverlayStateController dreamOverlayStateController,
            UserTracker userTracker,
            UserTracker userTracker,
            DreamLogger dreamLogger) {
            @DreamLog LogBuffer logBuffer) {
        super(view);
        super(view);
        mResources = resources;
        mResources = resources;
        mMainExecutor = mainExecutor;
        mMainExecutor = mainExecutor;
@@ -177,7 +179,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
        mZenModeController = zenModeController;
        mZenModeController = zenModeController;
        mDreamOverlayStateController = dreamOverlayStateController;
        mDreamOverlayStateController = dreamOverlayStateController;
        mUserTracker = userTracker;
        mUserTracker = userTracker;
        mLogger = dreamLogger;
        mLogger = new DreamLogger(logBuffer, TAG);


        // Register to receive show/hide updates for the system status bar. Our custom status bar
        // Register to receive show/hide updates for the system status bar. Our custom status bar
        // needs to hide when the system status bar is showing to ovoid overlapping status bars.
        // needs to hide when the system status bar is showing to ovoid overlapping status bars.
@@ -346,8 +348,8 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
            @Nullable String contentDescription) {
            @Nullable String contentDescription) {
        mMainExecutor.execute(() -> {
        mMainExecutor.execute(() -> {
            if (mIsAttached) {
            if (mIsAttached) {
                mLogger.d(TAG, (show ? "Showing" : "Hiding") + " dream status bar item: "
                mLogger.logShowOrHideStatusBarItem(
                        + DreamOverlayStatusBarView.getLoggableStatusIconType(iconType));
                        show, DreamOverlayStatusBarView.getLoggableStatusIconType(iconType));
                mView.showIcon(iconType, show, contentDescription);
                mView.showIcon(iconType, show, contentDescription);
            }
            }
        });
        });
+2 −4
Original line number Original line Diff line number Diff line
@@ -28,10 +28,10 @@ import androidx.lifecycle.Observer;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dreams.DreamLogger;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.flags.Flags;
import com.android.systemui.log.core.FakeLogBuffer;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.systemui.util.time.FakeSystemClock;


@@ -57,8 +57,6 @@ public class ComplicationCollectionLiveDataTest extends SysuiTestCase {
    private FakeFeatureFlags mFeatureFlags;
    private FakeFeatureFlags mFeatureFlags;
    @Mock
    @Mock
    private Observer mObserver;
    private Observer mObserver;
    @Mock
    private DreamLogger mLogger;


    @Before
    @Before
    public void setUp() {
    public void setUp() {
@@ -70,7 +68,7 @@ public class ComplicationCollectionLiveDataTest extends SysuiTestCase {
                mExecutor,
                mExecutor,
                /* overlayEnabled= */ true,
                /* overlayEnabled= */ true,
                mFeatureFlags,
                mFeatureFlags,
                mLogger);
                FakeLogBuffer.Factory.Companion.create());
        mLiveData = new ComplicationCollectionLiveData(mStateController);
        mLiveData = new ComplicationCollectionLiveData(mStateController);
    }
    }


Loading