/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.policy; import android.content.ContentResolver; import android.content.Context; import android.os.AsyncTask; import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.util.Slog; import android.view.IWindowManager; import android.widget.CompoundButton; public class BrightnessController implements ToggleSlider.Listener { private static final String TAG = "StatusBar.BrightnessController"; // Backlight range is from 0 - 255. Need to make sure that user // doesn't set the backlight to 0 and get stuck private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10; private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON; private Context mContext; private ToggleSlider mControl; private IPowerManager mPower; public BrightnessController(Context context, ToggleSlider control) { mContext = context; mControl = control; boolean automaticAvailable = context.getResources().getBoolean( com.android.internal.R.bool.config_automatic_brightness_available); mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power")); if (automaticAvailable) { int automatic; try { automatic = Settings.System.getInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); } catch (SettingNotFoundException snfe) { automatic = 0; } control.setChecked(automatic != 0); } else { control.setChecked(false); //control.hideToggle(); } int value; try { value = Settings.System.getInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); } catch (SettingNotFoundException ex) { value = MAXIMUM_BACKLIGHT; } control.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT); control.setValue(value - MINIMUM_BACKLIGHT); control.setOnChangedListener(this); } public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) { setMode(automatic ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC : Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); if (!automatic) { final int val = value + MINIMUM_BACKLIGHT; setBrightness(val); if (!tracking) { AsyncTask.execute(new Runnable() { public void run() { Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, val); } }); } } } private void setMode(int mode) { Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, mode); } private void setBrightness(int brightness) { try { mPower.setBacklightBrightness(brightness); } catch (RemoteException ex) { } } }