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

Commit b162fa29 authored by Piotr Wilczyński's avatar Piotr Wilczyński Committed by Android (Google) Code Review
Browse files

Merge "Call onDisplayChanged even if hbmMetadata is null" into main

parents 21be2b2a e0095182
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.server.display;
package com.android.server.display;


import android.annotation.Nullable;
import android.hardware.display.BrightnessInfo;
import android.hardware.display.BrightnessInfo;
import android.os.Handler;
import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder;
@@ -92,7 +93,7 @@ class BrightnessRangeController {
        return mHbmController.getNormalBrightnessMax();
        return mHbmController.getNormalBrightnessMax();
    }
    }


    void loadFromConfig(HighBrightnessModeMetadata hbmMetadata, IBinder token,
    void loadFromConfig(@Nullable HighBrightnessModeMetadata hbmMetadata, IBinder token,
            DisplayDeviceInfo info, DisplayDeviceConfig displayDeviceConfig) {
            DisplayDeviceInfo info, DisplayDeviceConfig displayDeviceConfig) {
        applyChanges(
        applyChanges(
                () -> mNormalBrightnessModeController.resetNbmData(
                () -> mNormalBrightnessModeController.resetNbmData(
+15 −7
Original line number Original line Diff line number Diff line
@@ -2170,11 +2170,9 @@ public final class DisplayManagerService extends SystemService {


            HighBrightnessModeMetadata hbmMetadata =
            HighBrightnessModeMetadata hbmMetadata =
                    mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
                    mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
            if (hbmMetadata != null) {
            dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
            dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
        }
        }
    }
    }
    }


    private void updateDisplayPowerControllerLeaderLocked(
    private void updateDisplayPowerControllerLeaderLocked(
            @NonNull DisplayPowerController dpc, int leadDisplayId) {
            @NonNull DisplayPowerController dpc, int leadDisplayId) {
@@ -2291,11 +2289,9 @@ public final class DisplayManagerService extends SystemService {


            HighBrightnessModeMetadata hbmMetadata =
            HighBrightnessModeMetadata hbmMetadata =
                    mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
                    mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
            if (hbmMetadata != null) {
            dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
            dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
        }
        }
    }
    }
    }


    private Runnable updateDisplayStateLocked(DisplayDevice device) {
    private Runnable updateDisplayStateLocked(DisplayDevice device) {
        // Blank or unblank the display immediately to match the state requested
        // Blank or unblank the display immediately to match the state requested
@@ -3560,6 +3556,18 @@ public final class DisplayManagerService extends SystemService {
        DisplayManagerFlags getFlags() {
        DisplayManagerFlags getFlags() {
            return new DisplayManagerFlags();
            return new DisplayManagerFlags();
        }
        }

        DisplayPowerController getDisplayPowerController(Context context,
                DisplayPowerController.Injector injector,
                DisplayManagerInternal.DisplayPowerCallbacks callbacks, Handler handler,
                SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay,
                BrightnessTracker brightnessTracker, BrightnessSetting brightnessSetting,
                Runnable onBrightnessChangeRunnable, HighBrightnessModeMetadata hbmMetadata,
                boolean bootCompleted, DisplayManagerFlags flags) {
            return new DisplayPowerController(context, injector, callbacks, handler, sensorManager,
                    blanker, logicalDisplay, brightnessTracker, brightnessSetting,
                    onBrightnessChangeRunnable, hbmMetadata, bootCompleted, flags);
        }
    }
    }


    @VisibleForTesting
    @VisibleForTesting
@@ -3612,7 +3620,7 @@ public final class DisplayManagerService extends SystemService {
        // with the corresponding displaydevice.
        // with the corresponding displaydevice.
        HighBrightnessModeMetadata hbmMetadata =
        HighBrightnessModeMetadata hbmMetadata =
                mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
                mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
        displayPowerController = new DisplayPowerController(
        displayPowerController = mInjector.getDisplayPowerController(
                mContext, /* injector= */ null, mDisplayPowerCallbacks, mPowerHandler,
                mContext, /* injector= */ null, mDisplayPowerCallbacks, mPowerHandler,
                mSensorManager, mDisplayBlanker, display, mBrightnessTracker, brightnessSetting,
                mSensorManager, mDisplayBlanker, display, mBrightnessTracker, brightnessSetting,
                () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted, mFlags);
                () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted, mFlags);
+3 −2
Original line number Original line Diff line number Diff line
@@ -849,7 +849,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
     *
     *
     * Make sure DisplayManagerService.mSyncRoot lock is held when this is called
     * Make sure DisplayManagerService.mSyncRoot lock is held when this is called
     */
     */
    public void onDisplayChanged(HighBrightnessModeMetadata hbmMetadata, int leadDisplayId) {
    public void onDisplayChanged(@Nullable HighBrightnessModeMetadata hbmMetadata,
            int leadDisplayId) {
        mLeadDisplayId = leadDisplayId;
        mLeadDisplayId = leadDisplayId;
        final DisplayDevice device = mLogicalDisplay.getPrimaryDisplayDeviceLocked();
        final DisplayDevice device = mLogicalDisplay.getPrimaryDisplayDeviceLocked();
        if (device == null) {
        if (device == null) {
@@ -949,7 +950,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    }
    }


    private void loadFromDisplayDeviceConfig(IBinder token, DisplayDeviceInfo info,
    private void loadFromDisplayDeviceConfig(IBinder token, DisplayDeviceInfo info,
            HighBrightnessModeMetadata hbmMetadata) {
            @Nullable HighBrightnessModeMetadata hbmMetadata) {
        // All properties that depend on the associated DisplayDevice and the DDC must be
        // All properties that depend on the associated DisplayDevice and the DDC must be
        // updated here.
        // updated here.
        mScreenBrightnessDozeConfig = BrightnessUtils.clampAbsoluteBrightness(
        mScreenBrightnessDozeConfig = BrightnessUtils.clampAbsoluteBrightness(
+1 −1
Original line number Original line Diff line number Diff line
@@ -266,7 +266,7 @@ class HighBrightnessModeController {
        mSettingsObserver.stopObserving();
        mSettingsObserver.stopObserving();
    }
    }


    void setHighBrightnessModeMetadata(HighBrightnessModeMetadata hbmInfo) {
    void setHighBrightnessModeMetadata(@Nullable HighBrightnessModeMetadata hbmInfo) {
        mHighBrightnessModeMetadata = hbmInfo;
        mHighBrightnessModeMetadata = hbmInfo;
    }
    }


+40 −0
Original line number Original line Diff line number Diff line
@@ -143,6 +143,7 @@ import com.android.server.display.DisplayManagerService.DeviceStateListener;
import com.android.server.display.DisplayManagerService.SyncRoot;
import com.android.server.display.DisplayManagerService.SyncRoot;
import com.android.server.display.config.SensorData;
import com.android.server.display.config.SensorData;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.Layout;
import com.android.server.display.notifications.DisplayNotificationManager;
import com.android.server.display.notifications.DisplayNotificationManager;
import com.android.server.input.InputManagerInternal;
import com.android.server.input.InputManagerInternal;
import com.android.server.lights.LightsManager;
import com.android.server.lights.LightsManager;
@@ -3201,6 +3202,45 @@ public class DisplayManagerServiceTest {
                argThat(matchesFilter));
                argThat(matchesFilter));
    }
    }


    @Test
    public void testOnDisplayChanged_HbmMetadataNull() {
        DisplayPowerController dpc = mock(DisplayPowerController.class);
        DisplayManagerService.Injector injector = new BasicInjector() {
            @Override
            DisplayPowerController getDisplayPowerController(Context context,
                    DisplayPowerController.Injector injector,
                    DisplayManagerInternal.DisplayPowerCallbacks callbacks, Handler handler,
                    SensorManager sensorManager, DisplayBlanker blanker,
                    LogicalDisplay logicalDisplay, BrightnessTracker brightnessTracker,
                    BrightnessSetting brightnessSetting, Runnable onBrightnessChangeRunnable,
                    HighBrightnessModeMetadata hbmMetadata, boolean bootCompleted,
                    DisplayManagerFlags flags) {
                return dpc;
            }
        };
        DisplayManagerService displayManager = new DisplayManagerService(mContext, injector);
        DisplayManagerInternal localService = displayManager.new LocalService();
        registerDefaultDisplays(displayManager);
        displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);

        // Add the FakeDisplayDevice
        FakeDisplayDevice displayDevice = new FakeDisplayDevice();
        DisplayDeviceInfo displayDeviceInfo = new DisplayDeviceInfo();
        displayDeviceInfo.state = Display.STATE_ON;
        displayDevice.setDisplayDeviceInfo(displayDeviceInfo);
        displayManager.getDisplayDeviceRepository()
                .onDisplayDeviceEvent(displayDevice, DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED);
        initDisplayPowerController(localService);

        // Simulate DisplayDevice change
        DisplayDeviceInfo displayDeviceInfo2 = new DisplayDeviceInfo();
        displayDeviceInfo2.copyFrom(displayDeviceInfo);
        displayDeviceInfo2.state = Display.STATE_DOZE;
        updateDisplayDeviceInfo(displayManager, displayDevice, displayDeviceInfo2);

        verify(dpc).onDisplayChanged(/* hbmMetadata= */ null, Layout.NO_LEAD_DISPLAY);
    }

    private void initDisplayPowerController(DisplayManagerInternal localService) {
    private void initDisplayPowerController(DisplayManagerInternal localService) {
        localService.initPowerManagement(new DisplayManagerInternal.DisplayPowerCallbacks() {
        localService.initPowerManagement(new DisplayManagerInternal.DisplayPowerCallbacks() {
            @Override
            @Override