diff options
author | Steve Kondik <steve@cyngn.com> | 2016-07-18 02:41:19 -0700 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2016-07-20 10:08:45 -0700 |
commit | a186b70f592628b0bc35c2a1ada23346f11c9083 (patch) | |
tree | 831cd1d7b1395413201b805741b291c10dbafef0 | |
parent | 99948dfb5f569e758805843b8c50a48804550e1b (diff) | |
download | packages_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.java | 88 | ||||
-rw-r--r-- | src/com/android/settings/livedisplay/LiveDisplay.java | 4 |
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 |