10087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright/* 20087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * Copyright (C) 2013 The Android Open Source Project 30087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * 40087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * Licensed under the Apache License, Version 2.0 (the "License"); 50087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * you may not use this file except in compliance with the License. 60087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * You may obtain a copy of the License at 70087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * 80087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * http://www.apache.org/licenses/LICENSE-2.0 90087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * 100087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * Unless required by applicable law or agreed to in writing, software 110087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * distributed under the License is distributed on an "AS IS" BASIS, 120087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * See the License for the specific language governing permissions and 140087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * limitations under the License. 150087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright */ 160087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 170087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightpackage com.android.systemui.settings; 180087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 190087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.app.Dialog; 200087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.content.Context; 210087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.content.res.Resources; 220087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.os.Bundle; 230087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.os.Handler; 240087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.view.Window; 250087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.view.WindowManager; 260087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightimport android.widget.ImageView; 270087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 28de84f0e77ea2bf713d15c290264059a413c2486aJohn Spurlockimport com.android.systemui.R; 290087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 300087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright/** A dialog that provides controls for adjusting the screen brightness. */ 310087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wrightpublic class BrightnessDialog extends Dialog implements 320087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright BrightnessController.BrightnessStateChangeCallback { 330087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 340087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private static final String TAG = "BrightnessDialog"; 350087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private static final boolean DEBUG = false; 360087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 370087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright protected Handler mHandler = new Handler(); 380087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 390087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private BrightnessController mBrightnessController; 400087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private final int mBrightnessDialogLongTimeout; 410087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private final int mBrightnessDialogShortTimeout; 420087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 430087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private final Runnable mDismissDialogRunnable = new Runnable() { 440087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright public void run() { 450087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright if (BrightnessDialog.this.isShowing()) { 460087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright BrightnessDialog.this.dismiss(); 470087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 480087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright }; 490087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright }; 500087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 510087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 520087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright public BrightnessDialog(Context ctx) { 530087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright super(ctx); 540087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright Resources r = ctx.getResources(); 550087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mBrightnessDialogLongTimeout = 560087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright r.getInteger(R.integer.quick_settings_brightness_dialog_long_timeout); 570087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mBrightnessDialogShortTimeout = 580087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright r.getInteger(R.integer.quick_settings_brightness_dialog_short_timeout); 590087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 600087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 610087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 620087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright /** 630087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * Create the brightness dialog and any resources that are used for the 640087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright * entire lifetime of the dialog. 650087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright */ 660087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright @Override 670087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright public void onCreate(Bundle savedInstanceState) { 680087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright super.onCreate(savedInstanceState); 690087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright Window window = getWindow(); 700087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); 710087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright window.getAttributes().privateFlags |= 720087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; 730087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 740087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright window.requestFeature(Window.FEATURE_NO_TITLE); 750087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 760087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright setContentView(R.layout.quick_settings_brightness_dialog); 770087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright setCanceledOnTouchOutside(true); 780087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 790087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 800087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 810087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright @Override 820087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright protected void onStart() { 830087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright super.onStart(); 840087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mBrightnessController = new BrightnessController(getContext(), 850087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright (ImageView) findViewById(R.id.brightness_icon), 860087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright (ToggleSlider) findViewById(R.id.brightness_slider)); 870087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright dismissBrightnessDialog(mBrightnessDialogLongTimeout); 880087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mBrightnessController.addStateChangedCallback(this); 890087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 900087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 910087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright @Override 920087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright protected void onStop() { 930087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright super.onStop(); 940087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mBrightnessController.unregisterCallbacks(); 950087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright removeAllBrightnessDialogCallbacks(); 960087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 970087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 980087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright public void onBrightnessLevelChanged() { 990087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright dismissBrightnessDialog(mBrightnessDialogShortTimeout); 1000087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 1010087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 1020087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private void dismissBrightnessDialog(int timeout) { 1030087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright removeAllBrightnessDialogCallbacks(); 1040087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mHandler.postDelayed(mDismissDialogRunnable, timeout); 1050087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 1060087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 1070087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright private void removeAllBrightnessDialogCallbacks() { 1080087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright mHandler.removeCallbacks(mDismissDialogRunnable); 1090087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright } 1100087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright 1110087a14d4b4bcfe57c6f6e36c70eec966088d7bbMichael Wright} 112