diff options
author | Sam Mortimer <sam@mortimer.me.uk> | 2017-10-20 17:24:54 -0700 |
---|---|---|
committer | Sam Mortimer <sam@mortimer.me.uk> | 2017-10-24 22:52:07 -0700 |
commit | 3c54d586914d2d5c7354f1ccbe5c2327ac9954c6 (patch) | |
tree | 1c6904b33a2afa3f91ea3cff45af33d0408b7912 /sdk/src/java/lineageos/preference/ConstraintsHelper.java | |
parent | 3276a6baa3f83e5d4ca5e2b4efe165604a2102fe (diff) | |
download | lineage-sdk-3c54d586914d2d5c7354f1ccbe5c2327ac9954c6.tar.gz lineage-sdk-3c54d586914d2d5c7354f1ccbe5c2327ac9954c6.tar.bz2 lineage-sdk-3c54d586914d2d5c7354f1ccbe5c2327ac9954c6.zip |
lineage-sdk: Support requiresConfig integers and add requiresConfigMask
*) Add support for integer requiresConfig resources (previously supported
only strings and bools). Preference is removed if the int is 0.
*) Add a new attribute requiresConfigMask that takes a string decimal int.
If requiresConfig is an integer then the pref is removed if
(requiresConfig resource value & requiresConfigMask value) == 0.
If requiresConfig is not an integer type then requiresConfigMask
is ignored.
*) Code clean-up for the rest of checking requiresConfig.
Change-Id: Ic2622809c02a94d9cecf6f59ed6e689fdb835458
Diffstat (limited to 'sdk/src/java/lineageos/preference/ConstraintsHelper.java')
-rw-r--r-- | sdk/src/java/lineageos/preference/ConstraintsHelper.java | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/sdk/src/java/lineageos/preference/ConstraintsHelper.java b/sdk/src/java/lineageos/preference/ConstraintsHelper.java index ac55fc66..35e1d5d1 100644 --- a/sdk/src/java/lineageos/preference/ConstraintsHelper.java +++ b/sdk/src/java/lineageos/preference/ConstraintsHelper.java @@ -201,21 +201,25 @@ public class ConstraintsHelper { } } - // Check a config resource. This can be a bool or a string. A null string - // fails the constraint. + // Check a config resource. This can be a bool, string or integer. + // The preference is removed if any of the following are true: + // * A bool resource is false. + // * A string resource is null. + // * An integer resource is zero. + // * An integer is non-zero and when bitwise logically ANDed with + // attribute requiresConfigMask, the result is zero. TypedValue tv = a.peekValue(R.styleable.lineage_SelfRemovingPreference_requiresConfig); - if (tv != null) { - if (tv.type == TypedValue.TYPE_STRING) { - if (tv.resourceId != 0) { - if (mContext.getResources().getString(tv.resourceId) == null) { - return false; - } - } - } else if (tv.type == TypedValue.TYPE_INT_BOOLEAN) { - if (tv.resourceId != 0) { - if (tv.data == 0) { - return false; - } + if (tv != null && tv.resourceId != 0) { + if (tv.type == TypedValue.TYPE_STRING && + mContext.getResources().getString(tv.resourceId) == null) { + return false; + } else if (tv.type == TypedValue.TYPE_INT_BOOLEAN && tv.data == 0) { + return false; + } else if (tv.type == TypedValue.TYPE_INT_DEC) { + int mask = a.getInt( + R.styleable.lineage_SelfRemovingPreference_requiresConfigMask, -1); + if (tv.data == 0 || (mask >= 0 && (tv.data & mask) == 0)) { + return false; } } } |