1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.car.settings.qc;
18 
19 import static com.android.car.qc.QCItem.QC_ACTION_SLIDER_VALUE;
20 import static com.android.car.settings.qc.SettingsQCRegistry.BRIGHTNESS_SLIDER_URI;
21 import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX;
22 import static com.android.settingslib.display.BrightnessUtils.convertGammaToLinear;
23 import static com.android.settingslib.display.BrightnessUtils.convertLinearToGamma;
24 
25 import android.content.Context;
26 import android.content.Intent;
27 import android.net.Uri;
28 import android.os.PowerManager;
29 import android.os.UserHandle;
30 import android.provider.Settings;
31 
32 import com.android.car.qc.QCItem;
33 import com.android.car.qc.QCList;
34 import com.android.car.qc.QCRow;
35 import com.android.car.qc.QCSlider;
36 import com.android.car.settings.R;
37 import com.android.car.settings.common.Logger;
38 
39 /**
40  *  QCItem for showing a brightness slider.
41  */
42 public class BrightnessSlider extends SettingsQCItem {
43     private static final Logger LOG = new Logger(BrightnessSlider.class);
44     private final int mMaximumBacklight;
45     private final int mMinimumBacklight;
46 
BrightnessSlider(Context context)47     public BrightnessSlider(Context context) {
48         super(context);
49         PowerManager powerManager = context.getSystemService(PowerManager.class);
50         mMaximumBacklight = powerManager.getMaximumScreenBrightnessSetting();
51         mMinimumBacklight = powerManager.getMinimumScreenBrightnessSetting();
52     }
53 
54     @Override
getQCItem()55     QCItem getQCItem() {
56         QCList.Builder listBuilder = new QCList.Builder()
57                 .addRow(getBrightnessRowBuilder().build());
58 
59         return listBuilder.build();
60     }
61 
62     @Override
getUri()63     Uri getUri() {
64         return BRIGHTNESS_SLIDER_URI;
65     }
66 
67     @Override
onNotifyChange(Intent intent)68     void onNotifyChange(Intent intent) {
69         int value = intent.getIntExtra(QC_ACTION_SLIDER_VALUE, Integer.MIN_VALUE);
70         if (value == Integer.MIN_VALUE) {
71             return;
72         }
73         int linear = convertGammaToLinear(value, mMinimumBacklight, mMaximumBacklight);
74         Settings.System.putIntForUser(getContext().getContentResolver(),
75                 Settings.System.SCREEN_BRIGHTNESS, linear, UserHandle.myUserId());
76     }
77 
getBrightnessRowBuilder()78     protected QCRow.Builder getBrightnessRowBuilder() {
79         return new QCRow.Builder()
80                 .setTitle(getContext().getString(R.string.qc_display_brightness))
81                 .addSlider(new QCSlider.Builder()
82                         .setMax(GAMMA_SPACE_MAX)
83                         .setValue(getSeekbarValue())
84                         .setInputAction(getBroadcastIntent())
85                         .build()
86                 );
87     }
88 
getSeekbarValue()89     private int getSeekbarValue() {
90         int gamma = GAMMA_SPACE_MAX;
91         try {
92             int linear = Settings.System.getIntForUser(getContext().getContentResolver(),
93                     Settings.System.SCREEN_BRIGHTNESS, UserHandle.myUserId());
94             gamma = convertLinearToGamma(linear, mMinimumBacklight, mMaximumBacklight);
95         } catch (Settings.SettingNotFoundException e) {
96             LOG.w("Can't find setting for SCREEN_BRIGHTNESS.");
97         }
98         return gamma;
99     }
100 }
101