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