summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-07-18 02:41:19 -0700
committerSteve Kondik <shade@chemlab.org>2016-07-20 10:08:45 -0700
commita186b70f592628b0bc35c2a1ada23346f11c9083 (patch)
tree831cd1d7b1395413201b805741b291c10dbafef0
parent99948dfb5f569e758805843b8c50a48804550e1b (diff)
downloadpackages_apps_Settings-a186b70f592628b0bc35c2a1ada23346f11c9083.zip
packages_apps_Settings-a186b70f592628b0bc35c2a1ada23346f11c9083.tar.gz
packages_apps_Settings-a186b70f592628b0bc35c2a1ada23346f11c9083.tar.bz2
settings: Add support for color balance in LiveDisplay
* Use the newly exposed APIs to map color temperatures to the linear color balance range using a power curve calculation. Change-Id: Ia1b7f26b5e4fff6d0f0e78d6cb62a7a9a2aec30e
-rw-r--r--src/com/android/settings/livedisplay/DisplayTemperature.java88
-rw-r--r--src/com/android/settings/livedisplay/LiveDisplay.java4
2 files changed, 71 insertions, 21 deletions
diff --git a/src/com/android/settings/livedisplay/DisplayTemperature.java b/src/com/android/settings/livedisplay/DisplayTemperature.java
index f63204b..920d197 100644
--- a/src/com/android/settings/livedisplay/DisplayTemperature.java
+++ b/src/com/android/settings/livedisplay/DisplayTemperature.java
@@ -24,6 +24,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.preference.DialogPreference;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
@@ -31,6 +32,8 @@ import android.widget.TextView;
import com.android.settings.R;
+import org.cyanogenmod.internal.util.MathUtils;
+
import cyanogenmod.hardware.LiveDisplayConfig;
import cyanogenmod.hardware.LiveDisplayManager;
@@ -51,6 +54,8 @@ public class DisplayTemperature extends DialogPreference {
private final LiveDisplayManager mLiveDisplay;
private final LiveDisplayConfig mConfig;
+ private static final int STEP = 100;
+
public DisplayTemperature(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
@@ -85,8 +90,8 @@ public class DisplayTemperature extends DialogPreference {
TextView nightText = (TextView) view.findViewById(R.id.night_temperature_value);
mNightTemperature = new ColorTemperatureSeekBar(night, nightText);
- mDayTemperature.setProgress(mOriginalDayTemperature);
- mNightTemperature.setProgress(mOriginalNightTemperature);
+ mDayTemperature.setTemperature(mOriginalDayTemperature);
+ mNightTemperature.setTemperature(mOriginalNightTemperature);
}
@Override
@@ -100,8 +105,8 @@ public class DisplayTemperature extends DialogPreference {
defaultsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- mDayTemperature.setProgress(mConfig.getDefaultDayTemperature());
- mNightTemperature.setProgress(mConfig.getDefaultNightTemperature());
+ mDayTemperature.setTemperature(mConfig.getDefaultDayTemperature());
+ mNightTemperature.setTemperature(mConfig.getDefaultNightTemperature());
updateTemperature(true);
}
});
@@ -124,8 +129,8 @@ public class DisplayTemperature extends DialogPreference {
final SavedState myState = new SavedState(superState);
myState.originalDayTemperature = mOriginalDayTemperature;
myState.originalNightTemperature = mOriginalNightTemperature;
- myState.currentDayTemperature = mDayTemperature.getProgress();
- myState.currentNightTemperature = mNightTemperature.getProgress();
+ myState.currentDayTemperature = mDayTemperature.getTemperature();
+ myState.currentNightTemperature = mNightTemperature.getTemperature();
// Restore the old state when the activity or dialog is being paused
updateTemperature(false);
@@ -146,8 +151,8 @@ public class DisplayTemperature extends DialogPreference {
mOriginalDayTemperature = myState.originalDayTemperature;
mOriginalNightTemperature = myState.originalNightTemperature;
- mDayTemperature.setProgress(myState.currentDayTemperature);
- mNightTemperature.setProgress(myState.currentNightTemperature);;
+ mDayTemperature.setTemperature(myState.currentDayTemperature);
+ mNightTemperature.setTemperature(myState.currentNightTemperature);;
updateTemperature(true);
}
@@ -193,27 +198,51 @@ public class DisplayTemperature extends DialogPreference {
}
private void updateTemperature(boolean accept) {
- int day = accept ? mDayTemperature.getProgress() : mOriginalDayTemperature;
- int night = accept ? mNightTemperature.getProgress() : mOriginalNightTemperature;
+ int day = accept ? mDayTemperature.getTemperature() : mOriginalDayTemperature;
+ int night = accept ? mNightTemperature.getTemperature() : mOriginalNightTemperature;
callChangeListener(new Integer[] { day, night });
mLiveDisplay.setDayColorTemperature(day);
mLiveDisplay.setNightColorTemperature(night);
}
+ int roundUp(int value) {
+ return ((value + STEP / 2) / STEP) * STEP;
+ }
+
private class ColorTemperatureSeekBar implements SeekBar.OnSeekBarChangeListener {
private final SeekBar mSeekBar;
private final TextView mValue;
- private static final int MIN = 1000;
- private static final int MAX = 10000;
- private static final int STEP = 100;
+ private final int mMin;
+ private final int mMax;
+
+ private final int mBalanceMin;
+ private final int mBalanceMax;
+
+ private final int mBarMax;
+
+ private final boolean mUseBalance;
+ private final double[] mBalanceCurve;
public ColorTemperatureSeekBar(SeekBar seekBar, TextView value) {
mSeekBar = seekBar;
mValue = value;
-
- mSeekBar.setMax((MAX - MIN) / STEP);
+ mMin = mConfig.getColorTemperatureRange().getLower();
+ mMax = mConfig.getColorTemperatureRange().getUpper();
+ mBalanceMin = mConfig.getColorBalanceRange().getLower();
+ mBalanceMax = mConfig.getColorBalanceRange().getUpper();
+ mUseBalance = mConfig.hasFeature(LiveDisplayManager.FEATURE_COLOR_BALANCE) &&
+ ((mBalanceMin != 0) || (mBalanceMax != 0));
+
+ if (mUseBalance) {
+ mBalanceCurve = MathUtils.powerCurve(mMin, mConfig.getDefaultDayTemperature(), mMax);
+ mBarMax = mBalanceMax - mBalanceMin;
+ } else {
+ mBalanceCurve = null;
+ mBarMax = (mMax - mMin) / STEP;
+ }
+ mSeekBar.setMax(mBarMax);
mSeekBar.setOnSeekBarChangeListener(this);
}
@@ -222,17 +251,36 @@ public class DisplayTemperature extends DialogPreference {
if (fromUser) {
updateTemperature(true);
}
+
+ int displayValue;
+ if (mUseBalance) {
+ displayValue = roundUp(Math.round((float)MathUtils.linearToPowerCurve(
+ mBalanceCurve, (double)progress / (double)mBarMax)));
+ } else {
+ displayValue = progress * STEP + mMin;
+ }
+ Log.d(TAG, "onProgressChanged: progress=" + progress + " displayValue=" + displayValue);
+
mValue.setText(mContext.getResources().getString(
- R.string.live_display_color_temperature_label, progress * STEP + MIN));
+ R.string.live_display_color_temperature_label, displayValue));
}
- public void setProgress(int progress) {
- int p = Math.max(progress, MIN) - MIN;
+ public void setTemperature(int temperature) {
+ if (mUseBalance) {
+ double z = MathUtils.powerCurveToLinear(mBalanceCurve, (double)temperature);
+ mSeekBar.setProgress(Math.round((float)(z * (double)mBarMax)));
+ return;
+ }
+ int p = Math.max(temperature, mMin) - mMin;
mSeekBar.setProgress(Math.round((float) p / STEP));
}
- public int getProgress() {
- return mSeekBar.getProgress() * STEP + MIN;
+ public int getTemperature() {
+ if (mUseBalance) {
+ return Math.round((float)MathUtils.linearToPowerCurve(
+ mBalanceCurve, (double)mSeekBar.getProgress() / (double)mBarMax));
+ }
+ return mSeekBar.getProgress() * STEP + mMin;
}
@Override
diff --git a/src/com/android/settings/livedisplay/LiveDisplay.java b/src/com/android/settings/livedisplay/LiveDisplay.java
index f4214b9..51a295d 100644
--- a/src/com/android/settings/livedisplay/LiveDisplay.java
+++ b/src/com/android/settings/livedisplay/LiveDisplay.java
@@ -313,7 +313,9 @@ public class LiveDisplay extends SettingsPreferenceFragment implements
int night = mLiveDisplayManager.getNightColorTemperature();
mDisplayTemperature.setSummary(getResources().getString(
- R.string.live_display_color_temperature_summary, day, night));
+ R.string.live_display_color_temperature_summary,
+ mDisplayTemperature.roundUp(day),
+ mDisplayTemperature.roundUp(night)));
}
@Override