From 0ec60c69a090e11355af84c6d99adc3e7e2dcee0 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Fri, 15 Apr 2016 02:38:42 -0700 Subject: [PATCH] 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 --- api/cm_current.txt | 1 + .../internal/display/LiveDisplayService.java | 12 +++++++----- .../cyanogenmod/hardware/LiveDisplayConfig.java | 13 +++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/api/cm_current.txt b/api/cm_current.txt index 5c1d080..5fcbbc6 100644 --- a/api/cm_current.txt +++ b/api/cm_current.txt @@ -540,6 +540,7 @@ package cyanogenmod.hardware { method public int getDefaultMode(); method public int getDefaultNightTemperature(); method public boolean hasFeature(int); + method public boolean hasModeSupport(); method public boolean isAvailable(); method public void writeToParcel(android.os.Parcel, int); } diff --git a/cm/lib/main/java/org/cyanogenmod/platform/internal/display/LiveDisplayService.java b/cm/lib/main/java/org/cyanogenmod/platform/internal/display/LiveDisplayService.java index e7f9388..a46d10a 100644 --- a/cm/lib/main/java/org/cyanogenmod/platform/internal/display/LiveDisplayService.java +++ b/cm/lib/main/java/org/cyanogenmod/platform/internal/display/LiveDisplayService.java @@ -194,12 +194,14 @@ public class LiveDisplayService extends SystemService { updateDisplayState(mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY).getState()); - mModeObserver = new ModeObserver(mHandler); - mModeObserver.update(); + if (mConfig.hasModeSupport()) { + mModeObserver = new ModeObserver(mHandler); + mModeObserver.update(); - mContext.registerReceiver(mNextModeReceiver, - new IntentFilter(ACTION_NEXT_MODE)); - publishCustomTile(); + mContext.registerReceiver(mNextModeReceiver, + new IntentFilter(ACTION_NEXT_MODE)); + publishCustomTile(); + } mInitialized = true; } diff --git a/sdk/src/java/cyanogenmod/hardware/LiveDisplayConfig.java b/sdk/src/java/cyanogenmod/hardware/LiveDisplayConfig.java index 0a569d3..9e499ce 100644 --- a/sdk/src/java/cyanogenmod/hardware/LiveDisplayConfig.java +++ b/sdk/src/java/cyanogenmod/hardware/LiveDisplayConfig.java @@ -39,6 +39,8 @@ import cyanogenmod.os.Concierge.ParcelInfo; 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; @@ -54,6 +56,7 @@ public class LiveDisplayConfig implements Parcelable { boolean defaultCABC, boolean defaultColorEnhancement) { super(); mCapabilities = (BitSet) capabilities.clone(); + mAllModes.set(MODE_FIRST, MODE_LAST); mDefaultMode = defaultMode; mDefaultDayTemperature = defaultDayTemperature; mDefaultNightTemperature = defaultNightTemperature; @@ -91,6 +94,7 @@ public class LiveDisplayConfig implements Parcelable { // set temps mCapabilities = BitSet.valueOf(new long[] { capabilities }); + mAllModes.set(MODE_FIRST, MODE_LAST); mDefaultMode = defaultMode; mDefaultDayTemperature = defaultDayTemperature; mDefaultNightTemperature = defaultNightTemperature; @@ -162,6 +166,15 @@ public class LiveDisplayConfig implements Parcelable { 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