Merge "Start on cover display if folded" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1ca2f8ec7d
@@ -167,6 +167,12 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo,
|
LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo,
|
||||||
@NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
|
@NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
|
||||||
@NonNull Handler handler) {
|
@NonNull Handler handler) {
|
||||||
|
this(context, repo, listener, syncRoot, handler, new DeviceStateToLayoutMap());
|
||||||
|
}
|
||||||
|
|
||||||
|
LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo,
|
||||||
|
@NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
|
||||||
|
@NonNull Handler handler, DeviceStateToLayoutMap deviceStateToLayoutMap) {
|
||||||
mSyncRoot = syncRoot;
|
mSyncRoot = syncRoot;
|
||||||
mPowerManager = context.getSystemService(PowerManager.class);
|
mPowerManager = context.getSystemService(PowerManager.class);
|
||||||
mInteractive = mPowerManager.isInteractive();
|
mInteractive = mPowerManager.isInteractive();
|
||||||
@@ -181,7 +187,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
mDeviceStatesOnWhichToSleep = toSparseBooleanArray(context.getResources().getIntArray(
|
mDeviceStatesOnWhichToSleep = toSparseBooleanArray(context.getResources().getIntArray(
|
||||||
com.android.internal.R.array.config_deviceStatesOnWhichToSleep));
|
com.android.internal.R.array.config_deviceStatesOnWhichToSleep));
|
||||||
mDisplayDeviceRepo.addListener(this);
|
mDisplayDeviceRepo.addListener(this);
|
||||||
mDeviceStateToLayoutMap = new DeviceStateToLayoutMap();
|
mDeviceStateToLayoutMap = deviceStateToLayoutMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -369,9 +375,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
// the transition is smooth. Plus, on some devices, only one internal displays can be
|
// the transition is smooth. Plus, on some devices, only one internal displays can be
|
||||||
// on at a time. We use DISPLAY_PHASE_LAYOUT_TRANSITION to mark a display that needs to be
|
// on at a time. We use DISPLAY_PHASE_LAYOUT_TRANSITION to mark a display that needs to be
|
||||||
// temporarily turned off.
|
// temporarily turned off.
|
||||||
if (mDeviceState != DeviceStateManager.INVALID_DEVICE_STATE) {
|
resetLayoutLocked(mDeviceState, state, LogicalDisplay.DISPLAY_PHASE_LAYOUT_TRANSITION);
|
||||||
resetLayoutLocked(mDeviceState, state, LogicalDisplay.DISPLAY_PHASE_LAYOUT_TRANSITION);
|
|
||||||
}
|
|
||||||
mPendingDeviceState = state;
|
mPendingDeviceState = state;
|
||||||
final boolean wakeDevice = shouldDeviceBeWoken(mPendingDeviceState, mDeviceState,
|
final boolean wakeDevice = shouldDeviceBeWoken(mPendingDeviceState, mDeviceState,
|
||||||
mInteractive, mBootCompleted);
|
mInteractive, mBootCompleted);
|
||||||
@@ -891,8 +895,8 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
newDisplay.swapDisplaysLocked(oldDisplay);
|
newDisplay.swapDisplaysLocked(oldDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!displayLayout.isEnabled()) {
|
if (displayLayout.isEnabled()) {
|
||||||
setDisplayPhase(newDisplay, LogicalDisplay.DISPLAY_PHASE_DISABLED);
|
setDisplayPhase(newDisplay, LogicalDisplay.DISPLAY_PHASE_ENABLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -912,7 +916,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
final LogicalDisplay display = new LogicalDisplay(displayId, layerStack, device);
|
final LogicalDisplay display = new LogicalDisplay(displayId, layerStack, device);
|
||||||
display.updateLocked(mDisplayDeviceRepo);
|
display.updateLocked(mDisplayDeviceRepo);
|
||||||
mLogicalDisplays.put(displayId, display);
|
mLogicalDisplays.put(displayId, display);
|
||||||
setDisplayPhase(display, LogicalDisplay.DISPLAY_PHASE_ENABLED);
|
setDisplayPhase(display, LogicalDisplay.DISPLAY_PHASE_DISABLED);
|
||||||
return display;
|
return display;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import static android.view.Display.DEFAULT_DISPLAY_GROUP;
|
|||||||
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED;
|
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED;
|
||||||
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_CHANGED;
|
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_CHANGED;
|
||||||
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED;
|
import static com.android.server.display.DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED;
|
||||||
|
import static com.android.server.display.LogicalDisplay.DISPLAY_PHASE_DISABLED;
|
||||||
|
import static com.android.server.display.LogicalDisplay.DISPLAY_PHASE_ENABLED;
|
||||||
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_ADDED;
|
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_ADDED;
|
||||||
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_REMOVED;
|
import static com.android.server.display.LogicalDisplayMapper.LOGICAL_DISPLAY_EVENT_REMOVED;
|
||||||
|
|
||||||
@@ -53,6 +55,8 @@ import android.view.DisplayInfo;
|
|||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
import androidx.test.runner.AndroidJUnit4;
|
import androidx.test.runner.AndroidJUnit4;
|
||||||
|
|
||||||
|
import com.android.server.display.layout.Layout;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -85,6 +89,7 @@ public class LogicalDisplayMapperTest {
|
|||||||
@Mock Resources mResourcesMock;
|
@Mock Resources mResourcesMock;
|
||||||
@Mock IPowerManager mIPowerManagerMock;
|
@Mock IPowerManager mIPowerManagerMock;
|
||||||
@Mock IThermalService mIThermalServiceMock;
|
@Mock IThermalService mIThermalServiceMock;
|
||||||
|
@Mock DeviceStateToLayoutMap mDeviceStateToLayoutMapMock;
|
||||||
|
|
||||||
@Captor ArgumentCaptor<LogicalDisplay> mDisplayCaptor;
|
@Captor ArgumentCaptor<LogicalDisplay> mDisplayCaptor;
|
||||||
|
|
||||||
@@ -130,11 +135,13 @@ public class LogicalDisplayMapperTest {
|
|||||||
when(mResourcesMock.getIntArray(
|
when(mResourcesMock.getIntArray(
|
||||||
com.android.internal.R.array.config_deviceStatesOnWhichToSleep))
|
com.android.internal.R.array.config_deviceStatesOnWhichToSleep))
|
||||||
.thenReturn(new int[]{0});
|
.thenReturn(new int[]{0});
|
||||||
|
when(mDeviceStateToLayoutMapMock.get(-1)).thenReturn(new Layout());
|
||||||
|
|
||||||
mLooper = new TestLooper();
|
mLooper = new TestLooper();
|
||||||
mHandler = new Handler(mLooper.getLooper());
|
mHandler = new Handler(mLooper.getLooper());
|
||||||
mLogicalDisplayMapper = new LogicalDisplayMapper(mContextMock, mDisplayDeviceRepo,
|
mLogicalDisplayMapper = new LogicalDisplayMapper(mContextMock, mDisplayDeviceRepo,
|
||||||
mListenerMock, new DisplayManagerService.SyncRoot(), mHandler);
|
mListenerMock, new DisplayManagerService.SyncRoot(), mHandler,
|
||||||
|
mDeviceStateToLayoutMapMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -413,6 +420,58 @@ public class LogicalDisplayMapperTest {
|
|||||||
/* isBootCompleted= */true));
|
/* isBootCompleted= */true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeviceStateLocked() {
|
||||||
|
DisplayDevice device1 = createDisplayDevice(Display.TYPE_INTERNAL, 600, 800,
|
||||||
|
DisplayDeviceInfo.FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
|
||||||
|
DisplayDevice device2 = createDisplayDevice(Display.TYPE_INTERNAL, 600, 800,
|
||||||
|
DisplayDeviceInfo.FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
|
||||||
|
|
||||||
|
Layout layout = new Layout();
|
||||||
|
layout.createDisplayLocked(device1.getDisplayDeviceInfoLocked().address, true, true);
|
||||||
|
layout.createDisplayLocked(device2.getDisplayDeviceInfoLocked().address, false, false);
|
||||||
|
when(mDeviceStateToLayoutMapMock.get(0)).thenReturn(layout);
|
||||||
|
|
||||||
|
layout = new Layout();
|
||||||
|
layout.createDisplayLocked(device1.getDisplayDeviceInfoLocked().address, false, false);
|
||||||
|
layout.createDisplayLocked(device2.getDisplayDeviceInfoLocked().address, true, true);
|
||||||
|
when(mDeviceStateToLayoutMapMock.get(1)).thenReturn(layout);
|
||||||
|
when(mDeviceStateToLayoutMapMock.get(2)).thenReturn(layout);
|
||||||
|
|
||||||
|
LogicalDisplay display1 = add(device1);
|
||||||
|
assertEquals(info(display1).address, info(device1).address);
|
||||||
|
assertEquals(DEFAULT_DISPLAY, id(display1));
|
||||||
|
|
||||||
|
LogicalDisplay display2 = add(device2);
|
||||||
|
assertEquals(info(display2).address, info(device2).address);
|
||||||
|
// We can only have one default display
|
||||||
|
assertEquals(DEFAULT_DISPLAY, id(display1));
|
||||||
|
|
||||||
|
mLogicalDisplayMapper.setDeviceStateLocked(0, false);
|
||||||
|
mLooper.moveTimeForward(1000);
|
||||||
|
mLooper.dispatchAll();
|
||||||
|
assertEquals(DISPLAY_PHASE_ENABLED,
|
||||||
|
mLogicalDisplayMapper.getDisplayLocked(device1).getPhase());
|
||||||
|
assertEquals(DISPLAY_PHASE_DISABLED,
|
||||||
|
mLogicalDisplayMapper.getDisplayLocked(device2).getPhase());
|
||||||
|
|
||||||
|
mLogicalDisplayMapper.setDeviceStateLocked(1, false);
|
||||||
|
mLooper.moveTimeForward(1000);
|
||||||
|
mLooper.dispatchAll();
|
||||||
|
assertEquals(DISPLAY_PHASE_DISABLED,
|
||||||
|
mLogicalDisplayMapper.getDisplayLocked(device1).getPhase());
|
||||||
|
assertEquals(DISPLAY_PHASE_ENABLED,
|
||||||
|
mLogicalDisplayMapper.getDisplayLocked(device2).getPhase());
|
||||||
|
|
||||||
|
mLogicalDisplayMapper.setDeviceStateLocked(2, false);
|
||||||
|
mLooper.moveTimeForward(1000);
|
||||||
|
mLooper.dispatchAll();
|
||||||
|
assertEquals(DISPLAY_PHASE_DISABLED,
|
||||||
|
mLogicalDisplayMapper.getDisplayLocked(device1).getPhase());
|
||||||
|
assertEquals(DISPLAY_PHASE_ENABLED,
|
||||||
|
mLogicalDisplayMapper.getDisplayLocked(device2).getPhase());
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////
|
/////////////////
|
||||||
// Helper Methods
|
// Helper Methods
|
||||||
/////////////////
|
/////////////////
|
||||||
|
|||||||
Reference in New Issue
Block a user