1d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue/*
2d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * Copyright (C) 2017 The Android Open Source Project
3d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue *
4d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * Licensed under the Apache License, Version 2.0 (the "License");
5d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * you may not use this file except in compliance with the License.
6d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * You may obtain a copy of the License at
7d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue *
8d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue *      http://www.apache.org/licenses/LICENSE-2.0
9d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue *
10d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * Unless required by applicable law or agreed to in writing, software
11d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * distributed under the License is distributed on an "AS IS" BASIS,
12d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * See the License for the specific language governing permissions and
14d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * limitations under the License
15d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue */
16d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
17d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xuepackage com.android.car.settings.display;
18d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
19d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xueimport static android.provider.Settings.System.SCREEN_BRIGHTNESS;
20d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
21d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xueimport android.content.Context;
22d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xueimport android.provider.Settings;
23cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xueimport android.widget.SeekBar;
24cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xueimport android.widget.SeekBar.OnSeekBarChangeListener;
25cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue
26cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xueimport androidx.car.widget.SeekbarListItem;
27d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
28d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xueimport com.android.car.settings.R;
294f12d9289b1944f56e85905e29a651d15e4910f9Rodrigo Lagosimport com.android.car.settings.common.Logger;
30d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
31d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue/**
32d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue * A LineItem that displays and sets display brightness.
33d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue */
34cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xuepublic class BrightnessLineItem extends SeekbarListItem {
354f12d9289b1944f56e85905e29a651d15e4910f9Rodrigo Lagos    private static final Logger LOG = new Logger(BrightnessLineItem.class);
36d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue    private static final int MAX_BRIGHTNESS = 255;
37d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue    private final Context mContext;
38d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
39cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue    /**
40cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue     * Handles brightness change from user
41cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue     */
42cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue    private SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener =
43cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue            new OnSeekBarChangeListener() {
44cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                @Override
45cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                public void onStartTrackingTouch(SeekBar seekBar) {
46cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                    // no-op
47cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                }
48cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue
49cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                @Override
50cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                public void onStopTrackingTouch(SeekBar seekBar) {
51cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                    // no-op
52cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                }
53cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue
54cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                @Override
55cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
56cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                    Settings.System.putInt(
57cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                            mContext.getContentResolver(), SCREEN_BRIGHTNESS, progress);
58cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue                }
59cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue            };
60cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue
61d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue    public BrightnessLineItem(Context context) {
62cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue        super(context);
63d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue        mContext = context;
64cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue        setMax(MAX_BRIGHTNESS);
65cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue        setProgress(getSeekbarValue(context));
66cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue        setOnSeekBarChangeListener(mOnSeekBarChangeListener);
67cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue        setText(context.getString(R.string.brightness));
68d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue    }
69d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue
70cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue    private static int getSeekbarValue(Context context) {
71d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue        int currentBrightness = 0;
72d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue        try {
73cfcd027ec6ded6dbb8c73d62f87bb1ce91355fdeLujiang Xue            currentBrightness = Settings.System.getInt(context.getContentResolver(),
74d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue                    SCREEN_BRIGHTNESS);
75d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue        } catch (Settings.SettingNotFoundException e) {
764f12d9289b1944f56e85905e29a651d15e4910f9Rodrigo Lagos            LOG.w("Can't find setting for SCREEN_BRIGHTNESS.");
77d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue        }
78d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue        return currentBrightness;
79d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue    }
80d91964dd49bc0e6a49ff43fb99c70ad2eca6daddroger xue}
81