Merge "Plumb display brightness from Android to VHAL" into pi-dev
am: 0ff20fa66b
Change-Id: I7c21b8f6b32001ff3b0a7984dfea40355b94fff3
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/CarPowerManagementService.java
index 3aa473c..57ccf62 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/CarPowerManagementService.java
@@ -604,7 +604,7 @@
}
private void doHandleMainDisplayStateChange(boolean on) {
- //TODO bug: 32065231
+ Log.w(CarLog.TAG_POWER, "Unimplemented: doHandleMainDisplayStateChange() - on = " + on);
}
public void handleMainDisplayChanged(boolean on) {
@@ -615,6 +615,14 @@
handler.handleMainDisplayStateChange(on);
}
+ /**
+ * Send display brightness to VHAL.
+ * @param brightness value 0-100%
+ */
+ public void sendDisplayBrightness(int brightness) {
+ mHal.sendDisplayBrightness(brightness);
+ }
+
public synchronized Handler getHandler() {
return mHandler;
}
diff --git a/service/src/com/android/car/hal/PowerHalService.java b/service/src/com/android/car/hal/PowerHalService.java
index 00c8e69..f43e853 100644
--- a/service/src/com/android/car/hal/PowerHalService.java
+++ b/service/src/com/android/car/hal/PowerHalService.java
@@ -204,6 +204,24 @@
setPowerState(VehicleApPowerSetState.SHUTDOWN_START, wakeupTimeSec);
}
+ /**
+ * Sets the display brightness for the vehicle.
+ * @param brightness value from 0 to 100.
+ */
+ public void sendDisplayBrightness(int brightness) {
+ if (brightness < 0) {
+ brightness = 0;
+ } else if (brightness > 100) {
+ brightness = 100;
+ }
+ try {
+ mHal.set(VehicleProperty.DISPLAY_BRIGHTNESS, 0).to(brightness);
+ Log.i(CarLog.TAG_POWER, "send display brightness = " + brightness);
+ } catch (PropertyTimeoutException e) {
+ Log.e(CarLog.TAG_POWER, "cannot set DISPLAY_BRIGHTNESS", e);
+ }
+ }
+
public void sendDisplayOn() {
Log.i(CarLog.TAG_POWER, "send display on");
setPowerState(VehicleApPowerSetState.DISPLAY_ON, 0);
@@ -217,7 +235,7 @@
private void setPowerState(int state, int additionalParam) {
int[] values = { state, additionalParam };
try {
- mHal.set(VehicleProperty.AP_POWER_STATE).to(values);
+ mHal.set(VehicleProperty.AP_POWER_STATE, 0).to(values);
Log.i(CarLog.TAG_POWER, "setPowerState=" + state + " param=" + additionalParam);
} catch (PropertyTimeoutException e) {
Log.e(CarLog.TAG_POWER, "cannot set to AP_POWER_STATE", e);
diff --git a/service/src/com/android/car/systeminterface/DisplayInterface.java b/service/src/com/android/car/systeminterface/DisplayInterface.java
index 8ef4aec..015f54d 100644
--- a/service/src/com/android/car/systeminterface/DisplayInterface.java
+++ b/service/src/com/android/car/systeminterface/DisplayInterface.java
@@ -16,12 +16,17 @@
package com.android.car.systeminterface;
+import android.content.ContentResolver;
import android.content.Context;
+import android.database.ContentObserver;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
+import android.os.Handler;
+import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemClock;
-import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.provider.Settings.System;
import android.util.Log;
import android.view.Display;
@@ -41,6 +46,7 @@
void stopDisplayStateMonitoring();
class DefaultImpl implements DisplayInterface {
+ private final ContentResolver mContentResolver;
private final Context mContext;
private final DisplayManager mDisplayManager;
private final int mMaximumBacklight;
@@ -49,6 +55,28 @@
private final WakeLockInterface mWakeLockInterface;
private CarPowerManagementService mService;
private boolean mDisplayStateSet;
+
+ private ContentObserver mBrightnessObserver =
+ new ContentObserver(new Handler(Looper.getMainLooper())) {
+ @Override
+ public void onChange(boolean selfChange) {
+ int brightness = mMinimumBacklight;
+ int range = mMaximumBacklight - mMinimumBacklight;
+
+ try {
+ brightness = System.getInt(mContentResolver, System.SCREEN_BRIGHTNESS);
+ } catch (SettingNotFoundException e) {
+ Log.e(CarLog.TAG_POWER, "Could not get SCREEN_BRIGHTNESS: " + e);
+ }
+ // Convert brightness from 0-255 to 0-100%
+ brightness -= mMinimumBacklight;
+ brightness *= 100;
+ brightness += (range + 1) / 2;
+ brightness /= range;
+ mService.sendDisplayBrightness(brightness);
+ }
+ };
+
private final DisplayManager.DisplayListener mDisplayListener = new DisplayListener() {
@Override
public void onDisplayAdded(int displayId) {
@@ -70,11 +98,12 @@
DefaultImpl(Context context, WakeLockInterface wakeLockInterface) {
mContext = context;
- mWakeLockInterface = wakeLockInterface;
+ mContentResolver = mContext.getContentResolver();
mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMaximumBacklight = mPowerManager.getMaximumScreenBrightnessSetting();
mMinimumBacklight = mPowerManager.getMinimumScreenBrightnessSetting();
+ mWakeLockInterface = wakeLockInterface;
}
private void handleMainDisplayChanged() {
@@ -114,8 +143,7 @@
brightness = mMaximumBacklight;
}
// Set the brightness
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,
- brightness);
+ System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS, brightness);
}
@Override
@@ -124,12 +152,15 @@
mService = service;
mDisplayStateSet = isMainDisplayOn();
}
+ mContentResolver.registerContentObserver(System.getUriFor(System.SCREEN_BRIGHTNESS),
+ false, mBrightnessObserver);
mDisplayManager.registerDisplayListener(mDisplayListener, service.getHandler());
}
@Override
public void stopDisplayStateMonitoring() {
mDisplayManager.unregisterDisplayListener(mDisplayListener);
+ mContentResolver.unregisterContentObserver(mBrightnessObserver);
}
@Override