1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.cts.deviceinfo; 17 18 import android.hardware.display.DisplayManager; 19 import android.view.Display; 20 import android.view.Display.HdrCapabilities; 21 import android.view.Display.Mode; 22 23 import com.android.compatibility.common.deviceinfo.DeviceInfo; 24 import com.android.compatibility.common.util.DeviceInfoStore; 25 import com.android.server.display.feature.flags.Flags; 26 27 import java.util.Arrays; 28 import java.util.List; 29 import java.util.stream.Collectors; 30 31 public class DisplayDeviceInfo extends DeviceInfo { 32 33 private static final String HDR_CAPABILITIES = "hdr_capabilities"; 34 private static final String SUPPORTED_HDR_TYPES = "supported_hdr_types"; 35 private static final String MAX_LUMINANCE = "max_luminance"; 36 private static final String MAX_AVERAGE_LUMINANCE = "max_average_luminance"; 37 private static final String MIN_LUMINANCE = "min_luminance"; 38 private static final String MAX_HDR_SDR_RATIO = "max_hdr_sdr_ratio"; 39 40 @Override collectDeviceInfo(DeviceInfoStore store)41 protected void collectDeviceInfo(DeviceInfoStore store) throws Exception { 42 DisplayManager displayManager = (DisplayManager) 43 getContext().getSystemService(DisplayManager.class); 44 store.startArray(HDR_CAPABILITIES); 45 46 List<Display> internalDisplays = Arrays.stream(displayManager.getDisplays()) 47 .filter(d -> d != null) 48 .filter(d -> d.getType() == Display.TYPE_INTERNAL) 49 .filter(d -> d.isHdr()) 50 .collect(Collectors.toList()); 51 52 for (Display display: internalDisplays) { 53 store.startGroup(); 54 int[] hdrTypes = Arrays.stream(display.getSupportedModes()) 55 .map(Mode::getSupportedHdrTypes) 56 .flatMapToInt(Arrays::stream) 57 .distinct().toArray(); 58 store.addArrayResult(SUPPORTED_HDR_TYPES, hdrTypes); 59 60 HdrCapabilities hdrCapabilities = display.getHdrCapabilities(); 61 62 store.addResult(MAX_LUMINANCE, hdrCapabilities.getDesiredMaxLuminance()); 63 store.addResult(MAX_AVERAGE_LUMINANCE, 64 hdrCapabilities.getDesiredMaxAverageLuminance()); 65 store.addResult(MIN_LUMINANCE, hdrCapabilities.getDesiredMinLuminance()); 66 if (Flags.highestHdrSdrRatioApi()) { 67 store.addResult(MAX_HDR_SDR_RATIO, display.getHighestHdrSdrRatio()); 68 } 69 store.endGroup(); 70 } 71 72 store.endArray(); // HDR_CAPABILITIES 73 } 74 } 75