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

Commit a805a2df authored by Shan Huang's avatar Shan Huang
Browse files

Put wired charging ripple back.

It was removed as a collateral damage of dead code cleanup (ag/15312956)..
Also made callback registeration more explicit.

Bug: 215568460
Test: atest frameworks/base/packages/SystemUI/tests/src/com/android/systemui/statusbar/charging/WiredChargingRippleControllerTest.kt
Test: adb shell cmd statusbar charging-ripple
Test: Plugging and unplugging phone
Change-Id: I2953c0f294b68b3c65515642f45e2b29d44449d1
parent d9b337e9
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context
        rippleShader.progress = 0f
        rippleShader.sparkleStrength = RIPPLE_SPARKLE_STRENGTH
        ripplePaint.shader = rippleShader
        visibility = View.GONE
    }

    override fun onConfigurationChanged(newConfig: Configuration?) {
@@ -86,12 +85,10 @@ class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context
        animator.addListener(object : AnimatorListenerAdapter() {
            override fun onAnimationEnd(animation: Animator?) {
                rippleInProgress = false
                visibility = View.GONE
                onAnimationEnd?.run()
            }
        })
        animator.start()
        visibility = View.VISIBLE
        rippleInProgress = true
    }

@@ -100,6 +97,11 @@ class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context
    }

    override fun onDraw(canvas: Canvas?) {
        if (canvas == null || !canvas.isHardwareAccelerated) {
            // Drawing with the ripple shader requires hardware acceleration, so skip
            // if it's unsupported.
            return
        }
        // To reduce overdraw, we mask the effect to a circle whose radius is big enough to cover
        // the active effect area. Values here should be kept in sync with the
        // animation implementation in the ripple shader.
+9 −7
Original line number Diff line number Diff line
@@ -28,15 +28,15 @@ import com.android.internal.annotations.VisibleForTesting
import com.android.internal.logging.UiEvent
import com.android.internal.logging.UiEventLogger
import com.android.settingslib.Utils
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.statusbar.commandline.Command
import com.android.systemui.statusbar.commandline.CommandRegistry
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.leak.RotationUtils
import com.android.systemui.R
import com.android.systemui.flags.Flags
import com.android.systemui.util.time.SystemClock
import java.io.PrintWriter
import javax.inject.Inject
@@ -53,8 +53,8 @@ private const val BASE_DEBOUNCE_TIME = 2000
@SysUISingleton
class WiredChargingRippleController @Inject constructor(
    commandRegistry: CommandRegistry,
    batteryController: BatteryController,
    configurationController: ConfigurationController,
    private val batteryController: BatteryController,
    private val configurationController: ConfigurationController,
    featureFlags: FeatureFlags,
    private val context: Context,
    private val windowManager: WindowManager,
@@ -88,6 +88,11 @@ class WiredChargingRippleController @Inject constructor(

    init {
        pluggedIn = batteryController.isPluggedIn
        commandRegistry.registerCommand("charging-ripple") { ChargingRippleCommand() }
        updateRippleColor()
    }

    fun registerCallbacks() {
        val batteryStateChangeCallback = object : BatteryController.BatteryStateChangeCallback {
            override fun onBatteryLevelChanged(
                level: Int,
@@ -123,9 +128,6 @@ class WiredChargingRippleController @Inject constructor(
            }
        }
        configurationController.addCallback(configurationChangedListener)

        commandRegistry.registerCommand("charging-ripple") { ChargingRippleCommand() }
        updateRippleColor()
    }

    // Lazily debounce ripple to avoid triggering ripple constantly (e.g. from flaky chargers).
+4 −1
Original line number Diff line number Diff line
@@ -203,6 +203,7 @@ import com.android.systemui.statusbar.PowerButtonReveal;
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.charging.WiredChargingRippleController;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.core.StatusBarInitializer;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
@@ -786,7 +787,8 @@ public class StatusBar extends CoreStartable implements
            NotifPipelineFlags notifPipelineFlags,
            InteractionJankMonitor jankMonitor,
            DeviceStateManager deviceStateManager,
            DreamOverlayStateController dreamOverlayStateController) {
            DreamOverlayStateController dreamOverlayStateController,
            WiredChargingRippleController wiredChargingRippleController) {
        super(context);
        mNotificationsController = notificationsController;
        mFragmentService = fragmentService;
@@ -912,6 +914,7 @@ public class StatusBar extends CoreStartable implements

        deviceStateManager.registerCallback(mMainExecutor,
                new FoldStateListener(mContext, this::onFoldedStateChanged));
        wiredChargingRippleController.registerCallbacks();
    }

    @Override
+5 −2
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.NotificationViewHierarchyManager;
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.charging.WiredChargingRippleController;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
@@ -233,7 +234,8 @@ public interface StatusBarPhoneModule {
            NotifPipelineFlags notifPipelineFlags,
            InteractionJankMonitor jankMonitor,
            DeviceStateManager deviceStateManager,
            DreamOverlayStateController dreamOverlayStateController) {
            DreamOverlayStateController dreamOverlayStateController,
            WiredChargingRippleController wiredChargingRippleController) {
        return new StatusBar(
                context,
                notificationsController,
@@ -330,7 +332,8 @@ public interface StatusBarPhoneModule {
                notifPipelineFlags,
                jankMonitor,
                deviceStateManager,
                dreamOverlayStateController
                dreamOverlayStateController,
                wiredChargingRippleController
        );
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ class WiredChargingRippleControllerTest : SysuiTestCase() {
                commandRegistry, batteryController, configurationController,
                featureFlags, context, windowManager, systemClock, uiEventLogger)
        controller.rippleView = rippleView // Replace the real ripple view with a mock instance
        controller.registerCallbacks()
    }

    @Test
Loading