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