replicant-vendor_cmsdk/sdk/src/java/cyanogenmod/hardware/LiveDisplayConfig.java

258 lines
8.4 KiB
Java

/*
* Copyright (C) 2016 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cyanogenmod.hardware;
import static cyanogenmod.hardware.LiveDisplayManager.FEATURE_FIRST;
import static cyanogenmod.hardware.LiveDisplayManager.FEATURE_LAST;
import static cyanogenmod.hardware.LiveDisplayManager.MODE_FIRST;
import static cyanogenmod.hardware.LiveDisplayManager.MODE_LAST;
import static cyanogenmod.hardware.LiveDisplayManager.MODE_OFF;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.BitSet;
import cyanogenmod.os.Build;
import cyanogenmod.os.Concierge;
import cyanogenmod.os.Concierge.ParcelInfo;
/**
* Holder class for LiveDisplay static configuration.
*
* This class holds various defaults and hardware capabilities
* which are involved with LiveDisplay.
*/
public class LiveDisplayConfig implements Parcelable {
private final BitSet mCapabilities;
private final BitSet mAllModes = new BitSet();
private final int mDefaultDayTemperature;
private final int mDefaultNightTemperature;
private final int mDefaultMode;
private final boolean mDefaultAutoContrast;
private final boolean mDefaultAutoOutdoorMode;
private final boolean mDefaultCABC;
private final boolean mDefaultColorEnhancement;
public LiveDisplayConfig(BitSet capabilities, int defaultMode,
int defaultDayTemperature, int defaultNightTemperature,
boolean defaultAutoOutdoorMode, boolean defaultAutoContrast,
boolean defaultCABC, boolean defaultColorEnhancement) {
super();
mCapabilities = (BitSet) capabilities.clone();
mAllModes.set(MODE_FIRST, MODE_LAST);
mDefaultMode = defaultMode;
mDefaultDayTemperature = defaultDayTemperature;
mDefaultNightTemperature = defaultNightTemperature;
mDefaultAutoContrast = defaultAutoContrast;
mDefaultAutoOutdoorMode = defaultAutoOutdoorMode;
mDefaultCABC = defaultCABC;
mDefaultColorEnhancement = defaultColorEnhancement;
}
private LiveDisplayConfig(Parcel parcel) {
// Read parcelable version via the Concierge
ParcelInfo parcelInfo = Concierge.receiveParcel(parcel);
int parcelableVersion = parcelInfo.getParcelVersion();
// temp vars
long capabilities = 0;
int defaultMode = 0;
int defaultDayTemperature = -1;
int defaultNightTemperature = -1;
boolean defaultAutoContrast = false;
boolean defaultAutoOutdoorMode = false;
boolean defaultCABC = false;
boolean defaultColorEnhancement = false;
if (parcelableVersion >= Build.CM_VERSION_CODES.FIG) {
capabilities = parcel.readLong();
defaultMode = parcel.readInt();
defaultDayTemperature = parcel.readInt();
defaultNightTemperature = parcel.readInt();
defaultAutoContrast = parcel.readInt() == 1;
defaultAutoOutdoorMode = parcel.readInt() == 1;
defaultCABC = parcel.readInt() == 1;
defaultColorEnhancement = parcel.readInt() == 1;
}
// set temps
mCapabilities = BitSet.valueOf(new long[] { capabilities });
mAllModes.set(MODE_FIRST, MODE_LAST);
mDefaultMode = defaultMode;
mDefaultDayTemperature = defaultDayTemperature;
mDefaultNightTemperature = defaultNightTemperature;
mDefaultAutoContrast = defaultAutoContrast;
mDefaultAutoOutdoorMode = defaultAutoOutdoorMode;
mDefaultCABC = defaultCABC;
mDefaultColorEnhancement = defaultColorEnhancement;
// Complete parcel info for the concierge
parcelInfo.complete();
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("capabilities=").append(mCapabilities.toString());
sb.append(" defaultMode=").append(mDefaultMode);
sb.append(" defaultDayTemperature=").append(mDefaultDayTemperature);
sb.append(" defaultNightTemperature=").append(mDefaultNightTemperature);
sb.append(" defaultAutoOutdoorMode=").append(mDefaultAutoOutdoorMode);
sb.append(" defaultAutoContrast=").append(mDefaultAutoContrast);
sb.append(" defaultCABC=").append(mDefaultCABC);
sb.append(" defaultColorEnhancement=").append(mDefaultColorEnhancement);
return sb.toString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
// Tell the concierge to prepare the parcel
ParcelInfo parcelInfo = Concierge.prepareParcel(out);
// ==== FIG =====
out.writeLong(mCapabilities.toLongArray()[0]);
out.writeInt(mDefaultMode);
out.writeInt(mDefaultDayTemperature);
out.writeInt(mDefaultNightTemperature);
out.writeInt(mDefaultAutoContrast ? 1 : 0);
out.writeInt(mDefaultAutoOutdoorMode ? 1 : 0);
out.writeInt(mDefaultCABC ? 1 : 0);
out.writeInt(mDefaultColorEnhancement ? 1 : 0);
// Complete the parcel info for the concierge
parcelInfo.complete();
}
/**
* Checks if a particular feature or mode is supported by the system.
*
* @param feature
* @return true if capable
*/
public boolean hasFeature(int feature) {
return ((feature >= MODE_FIRST && feature <= MODE_LAST) ||
(feature >= FEATURE_FIRST && feature <= FEATURE_LAST)) &&
(feature == MODE_OFF || mCapabilities.get(feature));
}
/**
* Checks if LiveDisplay is available for use on this device.
*
* @return true if any feature is enabled
*/
public boolean isAvailable() {
return !mCapabilities.isEmpty();
}
/**
* Checks if LiveDisplay has support for adaptive modes.
*
* @return true if adaptive modes are available
*/
public boolean hasModeSupport() {
return isAvailable() && mCapabilities.intersects(mAllModes);
}
/**
* Gets the default color temperature to use in the daytime. This is typically
* set to 6500K, however this may not be entirely accurate. Use this value for
* resetting controls to the default.
*
* @return the default day temperature in K
*/
public int getDefaultDayTemperature() {
return mDefaultDayTemperature;
}
/**
* Gets the default color temperature to use at night. This is typically set
* to 4500K, but this may not be entirely accurate. Use this value for resetting
* controls to defaults.
*
* @return the default night color temperature
*/
public int getDefaultNightTemperature() {
return mDefaultNightTemperature;
}
/**
* Get the default adaptive mode.
*
* @return the default mode
*/
public int getDefaultMode() {
return mDefaultMode;
}
/**
* Get the default value for auto contrast
*
* @return true if enabled
*/
public boolean getDefaultAutoContrast() {
return mDefaultAutoContrast;
}
/**
* Get the default value for automatic outdoor mode
*
* @return true if enabled
*/
public boolean getDefaultAutoOutdoorMode() {
return mDefaultAutoOutdoorMode;
}
/**
* Get the default value for CABC
*
* @return true if enabled
*/
public boolean getDefaultCABC() {
return mDefaultCABC;
}
/**
* Get the default value for color enhancement
*
* @return true if enabled
*/
public boolean getDefaultColorEnhancement() {
return mDefaultColorEnhancement;
}
/** @hide */
public static final Parcelable.Creator<LiveDisplayConfig> CREATOR =
new Parcelable.Creator<LiveDisplayConfig>() {
public LiveDisplayConfig createFromParcel(Parcel in) {
return new LiveDisplayConfig(in);
}
@Override
public LiveDisplayConfig[] newArray(int size) {
return new LiveDisplayConfig[size];
}
};
}