livedisplay: Don't explode if no modes are available

* Don't create the mode observer or try to publish tiles if none
   of the adaptive modes are supported.

Change-Id: Iee6fe8131b0614e10f35b5a03d65fb44c71c0da9
This commit is contained in:
Steve Kondik 2016-04-15 02:38:42 -07:00
parent 712426f249
commit 0ec60c69a0
3 changed files with 21 additions and 5 deletions

View File

@ -540,6 +540,7 @@ package cyanogenmod.hardware {
method public int getDefaultMode(); method public int getDefaultMode();
method public int getDefaultNightTemperature(); method public int getDefaultNightTemperature();
method public boolean hasFeature(int); method public boolean hasFeature(int);
method public boolean hasModeSupport();
method public boolean isAvailable(); method public boolean isAvailable();
method public void writeToParcel(android.os.Parcel, int); method public void writeToParcel(android.os.Parcel, int);
} }

View File

@ -194,12 +194,14 @@ public class LiveDisplayService extends SystemService {
updateDisplayState(mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY).getState()); updateDisplayState(mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY).getState());
if (mConfig.hasModeSupport()) {
mModeObserver = new ModeObserver(mHandler); mModeObserver = new ModeObserver(mHandler);
mModeObserver.update(); mModeObserver.update();
mContext.registerReceiver(mNextModeReceiver, mContext.registerReceiver(mNextModeReceiver,
new IntentFilter(ACTION_NEXT_MODE)); new IntentFilter(ACTION_NEXT_MODE));
publishCustomTile(); publishCustomTile();
}
mInitialized = true; mInitialized = true;
} }

View File

@ -39,6 +39,8 @@ import cyanogenmod.os.Concierge.ParcelInfo;
public class LiveDisplayConfig implements Parcelable { public class LiveDisplayConfig implements Parcelable {
private final BitSet mCapabilities; private final BitSet mCapabilities;
private final BitSet mAllModes = new BitSet();
private final int mDefaultDayTemperature; private final int mDefaultDayTemperature;
private final int mDefaultNightTemperature; private final int mDefaultNightTemperature;
private final int mDefaultMode; private final int mDefaultMode;
@ -54,6 +56,7 @@ public class LiveDisplayConfig implements Parcelable {
boolean defaultCABC, boolean defaultColorEnhancement) { boolean defaultCABC, boolean defaultColorEnhancement) {
super(); super();
mCapabilities = (BitSet) capabilities.clone(); mCapabilities = (BitSet) capabilities.clone();
mAllModes.set(MODE_FIRST, MODE_LAST);
mDefaultMode = defaultMode; mDefaultMode = defaultMode;
mDefaultDayTemperature = defaultDayTemperature; mDefaultDayTemperature = defaultDayTemperature;
mDefaultNightTemperature = defaultNightTemperature; mDefaultNightTemperature = defaultNightTemperature;
@ -91,6 +94,7 @@ public class LiveDisplayConfig implements Parcelable {
// set temps // set temps
mCapabilities = BitSet.valueOf(new long[] { capabilities }); mCapabilities = BitSet.valueOf(new long[] { capabilities });
mAllModes.set(MODE_FIRST, MODE_LAST);
mDefaultMode = defaultMode; mDefaultMode = defaultMode;
mDefaultDayTemperature = defaultDayTemperature; mDefaultDayTemperature = defaultDayTemperature;
mDefaultNightTemperature = defaultNightTemperature; mDefaultNightTemperature = defaultNightTemperature;
@ -162,6 +166,15 @@ public class LiveDisplayConfig implements Parcelable {
return !mCapabilities.isEmpty(); 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 * 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 * set to 6500K, however this may not be entirely accurate. Use this value for