1 package org.robolectric.shadows; 2 3 import static android.os.Build.VERSION_CODES.Q; 4 5 import android.Manifest; 6 import android.annotation.RequiresPermission; 7 import android.annotation.SystemApi; 8 import android.hardware.display.ColorDisplayManager.AutoMode; 9 import java.util.HashMap; 10 import java.util.Map; 11 import org.robolectric.annotation.Implementation; 12 import org.robolectric.annotation.Implements; 13 14 @Implements( 15 className = "android.hardware.display.ColorDisplayManager", 16 isInAndroidSdk = false, 17 minSdk = Q) 18 public class ShadowColorDisplayManager { 19 20 private boolean isNightDisplayActivated; 21 private int nightDisplayTemperature; 22 private int nightDisplayAutoMode; 23 private final Map<String, Integer> packagesToSaturation = new HashMap<>(); 24 25 // Full saturation by default 26 private int saturationLevel = 100; 27 // No capabilities by default 28 private int transformCapabilities = 0x0; 29 30 @Implementation __constructor__()31 protected void __constructor__() { 32 // Don't initialize ColorDisplayManagerInternal. 33 } 34 35 @Implementation 36 @SystemApi 37 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) getTransformCapabilities()38 protected int getTransformCapabilities() { 39 return transformCapabilities; 40 } 41 42 @Implementation 43 @SystemApi 44 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) setNightDisplayActivated(boolean activated)45 protected boolean setNightDisplayActivated(boolean activated) { 46 isNightDisplayActivated = activated; 47 return true; 48 } 49 50 @Implementation 51 @SystemApi 52 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) isNightDisplayActivated()53 protected boolean isNightDisplayActivated() { 54 return isNightDisplayActivated; 55 } 56 57 @Implementation 58 @SystemApi 59 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) setNightDisplayColorTemperature(int temperature)60 protected boolean setNightDisplayColorTemperature(int temperature) { 61 nightDisplayTemperature = temperature; 62 return true; 63 } 64 65 @Implementation 66 @SystemApi 67 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) getNightDisplayColorTemperature()68 protected int getNightDisplayColorTemperature() { 69 return nightDisplayTemperature; 70 } 71 72 @Implementation 73 @SystemApi 74 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) setNightDisplayAutoMode(@utoMode int autoMode)75 protected boolean setNightDisplayAutoMode(@AutoMode int autoMode) { 76 nightDisplayAutoMode = autoMode; 77 return true; 78 } 79 80 @Implementation 81 @SystemApi 82 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) 83 @AutoMode getNightDisplayAutoMode()84 protected int getNightDisplayAutoMode() { 85 return nightDisplayAutoMode; 86 } 87 88 @Implementation 89 @SystemApi 90 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) setSaturationLevel(int saturationLevel)91 protected boolean setSaturationLevel(int saturationLevel) { 92 this.saturationLevel = saturationLevel; 93 return true; 94 } 95 96 @Implementation 97 @SystemApi 98 @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) setAppSaturationLevel(String packageName, int saturationLevel)99 protected boolean setAppSaturationLevel(String packageName, int saturationLevel) { 100 packagesToSaturation.put(packageName, saturationLevel); 101 return true; 102 } 103 104 /** Sets the current transform capabilities. */ setTransformCapabilities(int transformCapabilities)105 public boolean setTransformCapabilities(int transformCapabilities) { 106 this.transformCapabilities = transformCapabilities; 107 return true; 108 } 109 110 /** Returns the current display saturation level for the {@code packageName}. */ getAppSaturationLevel(String packageName)111 public int getAppSaturationLevel(String packageName) { 112 return packagesToSaturation.getOrDefault(packageName, 100); 113 } 114 115 /** Returns the current display saturation level. */ getSaturationLevel()116 public int getSaturationLevel() { 117 return saturationLevel; 118 } 119 } 120