diff options
9 files changed, 85 insertions, 61 deletions
diff --git a/core/java/android/os/IHardwareService.aidl b/core/java/android/os/IHardwareService.aidl index a6ef647..594c0e8 100755 --- a/core/java/android/os/IHardwareService.aidl +++ b/core/java/android/os/IHardwareService.aidl @@ -28,12 +28,6 @@ interface IHardwareService boolean getFlashlightEnabled(); void setFlashlightEnabled(boolean on); void enableCameraFlash(int milliseconds); - - // sets the brightness of the backlights (screen, keyboard, button) 0-255 - void setBacklights(int brightness); - - // enables or disables automatic brightness mode - void setAutoBrightness(boolean on); // for the phone void setAttentionLight(boolean on); diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 188e7ff..189335e 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -31,4 +31,10 @@ interface IPowerManager long getScreenOnTime(); void preventScreenOn(boolean prevent); void setScreenBrightnessOverride(int brightness); + + // sets the brightness of the backlights (screen, keyboard, button) 0-255 + void setBacklightBrightness(int brightness); + + // enables or disables automatic brightness mode + void setAutoBrightness(boolean on); } diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index d5934102..11c96d2 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -379,6 +379,21 @@ public class PowerManager } } + /** + * sets the brightness of the backlights (screen, keyboard, button). + * + * @param brightness value from 0 to 255 + * + * {@hide} + */ + public void setBacklightBrightness(int brightness) + { + try { + mService.setBacklightBrightness(brightness); + } catch (RemoteException e) { + } + } + /** * Returns the set of flags for {@link #newWakeLock(int, String) newWakeLock()} * that are supported on the device. diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index b13883e..39084a7 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -27,7 +27,7 @@ import android.content.IContentService; import android.content.res.Configuration; import android.location.LocationManager; import android.media.AudioManager; -import android.os.IHardwareService; +import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.provider.Settings; @@ -94,10 +94,10 @@ public class SettingsHelper { private void setBrightness(int brightness) { try { - IHardwareService hardware = IHardwareService.Stub - .asInterface(ServiceManager.getService("hardware")); - if (hardware != null) { - hardware.setBacklights(brightness); + IPowerManager power = IPowerManager.Stub.asInterface( + ServiceManager.getService("power")); + if (power != null) { + power.setBacklightBrightness(brightness); } } catch (RemoteException doe) { diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java index 01daae3..29c13e0 100755 --- a/services/java/com/android/server/HardwareService.java +++ b/services/java/com/android/server/HardwareService.java @@ -269,26 +269,6 @@ public class HardwareService extends IHardwareService.Stub { Hardware.enableCameraFlash(milliseconds); } - public void setBacklights(int brightness) { - if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.HARDWARE_TEST) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("Requires HARDWARE_TEST permission"); - } - // Don't let applications turn the screen all the way off - brightness = Math.max(brightness, Power.BRIGHTNESS_DIM); - setLightBrightness_UNCHECKED(LIGHT_ID_BACKLIGHT, brightness); - setLightBrightness_UNCHECKED(LIGHT_ID_KEYBOARD, brightness); - setLightBrightness_UNCHECKED(LIGHT_ID_BUTTONS, brightness); - long identity = Binder.clearCallingIdentity(); - try { - mBatteryStats.noteScreenBrightness(brightness); - } catch (RemoteException e) { - Log.w(TAG, "RemoteException calling noteScreenBrightness on BatteryStatsService", e); - } finally { - Binder.restoreCallingIdentity(identity); - } - } - void setLightOff_UNCHECKED(int light) { setLight_native(mNativePointer, light, 0, LIGHT_FLASH_NONE, 0, 0); } @@ -307,14 +287,6 @@ public class HardwareService extends IHardwareService.Stub { setLight_native(mNativePointer, light, color, mode, onMS, offMS); } - public void setAutoBrightness(boolean on) { - if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.HARDWARE_TEST) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("Requires HARDWARE_TEST permission"); - } - setAutoBrightness_UNCHECKED(on); - } - void setAutoBrightness_UNCHECKED(boolean on) { if (mAutoBrightnessAvailable) { setAutoBrightness_native(mNativePointer, on); diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index 2951384..35f508b 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -2061,6 +2061,42 @@ class PowerManagerService extends IPowerManager.Stub return result; } + public void setBacklightBrightness(int brightness) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); + // Don't let applications turn the screen all the way off + brightness = Math.max(brightness, Power.BRIGHTNESS_DIM); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, brightness); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, brightness); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, brightness); + long identity = Binder.clearCallingIdentity(); + try { + mBatteryStats.noteScreenBrightness(brightness); + } catch (RemoteException e) { + Log.w(TAG, "RemoteException calling noteScreenBrightness on BatteryStatsService", e); + } finally { + Binder.restoreCallingIdentity(identity); + } + + // update our animation state + if (ANIMATE_SCREEN_LIGHTS) { + mScreenBrightness.curValue = brightness; + mScreenBrightness.animating = false; + } + if (ANIMATE_KEYBOARD_LIGHTS) { + mKeyboardBrightness.curValue = brightness; + mKeyboardBrightness.animating = false; + } + if (ANIMATE_BUTTON_LIGHTS) { + mButtonBrightness.curValue = brightness; + mButtonBrightness.animating = false; + } + } + + public void setAutoBrightness(boolean on) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); + mHardware.setAutoBrightness_UNCHECKED(on); + } + private SensorManager getSensorManager() { if (mSensorManager == null) { mSensorManager = new SensorManager(mHandlerThread.getLooper()); diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java b/tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java index bd5c955..2f1a738 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java @@ -63,6 +63,8 @@ public class PowerManagerTest extends AndroidTestCase { wl = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "PARTIAL_WAKE_LOCK"); doTestWakeLock(wl); + doTestSetBacklightBrightness(); + // TODO: Some sort of functional test (maybe not in the unit test here?) // that confirms that things are really happening e.g. screen power, keyboard power. } @@ -121,5 +123,20 @@ public class PowerManagerTest extends AndroidTestCase { // TODO: Threaded test (needs handler) to make sure timed wakelocks work too } - + + /** + * Test that calling {@link android.os.IHardwareService#setBacklights(int)} requires + * permissions. + * <p>Tests permission: + * {@link android.Manifest.permission#DEVICE_POWER} + */ + private void doTestSetBacklightBrightness() { + try { + mPm.setBacklightBrightness(0); + fail("setBacklights did not throw SecurityException as expected"); + } catch (SecurityException e) { + // expected + } + } + } diff --git a/tests/FrameworkTest/src/com/android/frameworktest/settings/BrightnessLimit.java b/tests/FrameworkTest/src/com/android/frameworktest/settings/BrightnessLimit.java index 5644044..6d5996c 100644 --- a/tests/FrameworkTest/src/com/android/frameworktest/settings/BrightnessLimit.java +++ b/tests/FrameworkTest/src/com/android/frameworktest/settings/BrightnessLimit.java @@ -16,7 +16,7 @@ package com.android.frameworktest.settings; -import android.os.IHardwareService; +import android.os.IPowerManager; import android.app.Activity; import android.os.Bundle; @@ -45,11 +45,11 @@ public class BrightnessLimit extends Activity implements OnClickListener { } public void onClick(View v) { - IHardwareService hardware = IHardwareService.Stub.asInterface( - ServiceManager.getService("hardware")); - if (hardware != null) { + IPowerManager power = IPowerManager.Stub.asInterface( + ServiceManager.getService("power")); + if (power != null) { try { - hardware.setBacklights(0); + power.setBacklightBrightness(0); } catch (RemoteException darn) { } diff --git a/tests/permission/src/com/android/framework/permission/tests/HardwareServicePermissionTest.java b/tests/permission/src/com/android/framework/permission/tests/HardwareServicePermissionTest.java index aebd68c..2290c1d 100644 --- a/tests/permission/src/com/android/framework/permission/tests/HardwareServicePermissionTest.java +++ b/tests/permission/src/com/android/framework/permission/tests/HardwareServicePermissionTest.java @@ -117,20 +117,4 @@ public class HardwareServicePermissionTest extends TestCase { // expected } } - - /** - * Test that calling {@link android.os.IHardwareService#setBacklights(int)} requires - * permissions. - * <p>Tests permission: - * {@link android.Manifest.permission#HARDWARE_TEST} - * @throws RemoteException - */ - public void testSetBacklights() throws RemoteException { - try { - mHardwareService.setBacklights(0); - fail("setBacklights did not throw SecurityException as expected"); - } catch (SecurityException e) { - // expected - } - } } |