From 7be730bbf1388c878ee05912f3b3daf9ff619ab8 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Thu, 8 Sep 2016 13:39:43 -0700 Subject: [PATCH] cmsdk: Add CMSettings preference helpers * These lived in the Settings app previously, but are now moved as we need them in a few places. * The support library required to use these helpers, but we intentionally reference it using LOCAL_JAVA_LIBRARIES so the application will need to declare a dependency. Change-Id: I56844def5e1100ca0300d0027312cc9adcaab941 --- Android.mk | 15 ++++- api/cm_current.txt | 40 ++++++++++++ .../CMGlobalSettingSwitchPreference.java | 64 +++++++++++++++++++ .../CMSecureSettingSwitchPreference.java | 64 +++++++++++++++++++ .../CMSystemSettingSwitchPreference.java | 64 +++++++++++++++++++ .../SystemSettingSwitchPreference.java | 63 ++++++++++++++++++ 6 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 sdk/src/java/cyanogenmod/preference/CMGlobalSettingSwitchPreference.java create mode 100644 sdk/src/java/cyanogenmod/preference/CMSecureSettingSwitchPreference.java create mode 100644 sdk/src/java/cyanogenmod/preference/CMSystemSettingSwitchPreference.java create mode 100644 sdk/src/java/cyanogenmod/preference/SystemSettingSwitchPreference.java diff --git a/Android.mk b/Android.mk index bfe75ddc..008db5e4 100644 --- a/Android.mk +++ b/Android.mk @@ -24,7 +24,7 @@ LOCAL_PATH := $(call my-dir) cm_platform_res := APPS/org.cyanogenmod.platform-res_intermediates/src # List of packages used in cm-api-stubs -cm_stub_packages := cyanogenmod.alarmclock:cyanogenmod.app:cyanogenmod.content:cyanogenmod.externalviews:cyanogenmod.hardware:cyanogenmod.media:cyanogenmod.os:cyanogenmod.profiles:cyanogenmod.providers:cyanogenmod.platform:cyanogenmod.power:cyanogenmod.themes:cyanogenmod.util:cyanogenmod.weather:cyanogenmod.weatherservice +cm_stub_packages := cyanogenmod.alarmclock:cyanogenmod.app:cyanogenmod.content:cyanogenmod.externalviews:cyanogenmod.hardware:cyanogenmod.media:cyanogenmod.os:cyanogenmod.preference:cyanogenmod.profiles:cyanogenmod.providers:cyanogenmod.platform:cyanogenmod.power:cyanogenmod.themes:cyanogenmod.util:cyanogenmod.weather:cyanogenmod.weatherservice # The CyanogenMod Platform Framework Library # ============================================================ @@ -37,9 +37,14 @@ library_src := cm/lib/main/java LOCAL_MODULE := org.cyanogenmod.platform LOCAL_MODULE_TAGS := optional +cmsdk_LOCAL_JAVA_LIBRARIES := \ + android-support-v7-preference \ + android-support-v14-preference + LOCAL_JAVA_LIBRARIES := \ services \ - org.cyanogenmod.hardware + org.cyanogenmod.hardware \ + $(cmsdk_LOCAL_JAVA_LIBRARIES) LOCAL_SRC_FILES := \ $(call all-java-files-under, $(cyanogenmod_sdk_src)) \ @@ -124,6 +129,9 @@ cmsdk_LOCAL_INTERMEDIATE_SOURCES := \ LOCAL_INTERMEDIATE_SOURCES := \ $(cmsdk_LOCAL_INTERMEDIATE_SOURCES) +LOCAL_JAVA_LIBRARIES := \ + $(cmsdk_LOCAL_JAVA_LIBRARIES) + # Make sure that R.java and Manifest.java are built before we build # the source for this library. cm_framework_res_R_stamp := \ @@ -185,6 +193,9 @@ cmsdk_LOCAL_INTERMEDIATE_SOURCES := \ LOCAL_INTERMEDIATE_SOURCES := \ $(cmsdk_LOCAL_INTERMEDIATE_SOURCES) +LOCAL_JAVA_LIBRARIES := \ + $(cmsdk_LOCAL_JAVA_LIBRARIES) + $(full_target): $(cm_framework_built) $(gen) include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/api/cm_current.txt b/api/cm_current.txt index 3b80f90a..4a968d1b 100644 --- a/api/cm_current.txt +++ b/api/cm_current.txt @@ -780,6 +780,46 @@ package cyanogenmod.power { } +package cyanogenmod.preference { + + public class CMGlobalSettingSwitchPreference extends SwitchPreference { + ctor public CMGlobalSettingSwitchPreference(android.content.Context, android.util.AttributeSet, int); + ctor public CMGlobalSettingSwitchPreference(android.content.Context, android.util.AttributeSet); + ctor public CMGlobalSettingSwitchPreference(android.content.Context); + method protected boolean getPersistedBoolean(boolean); + method protected boolean isPersisted(); + method protected boolean persistBoolean(boolean); + } + + public class CMSecureSettingSwitchPreference extends SwitchPreference { + ctor public CMSecureSettingSwitchPreference(android.content.Context, android.util.AttributeSet, int); + ctor public CMSecureSettingSwitchPreference(android.content.Context, android.util.AttributeSet); + ctor public CMSecureSettingSwitchPreference(android.content.Context); + method protected boolean getPersistedBoolean(boolean); + method protected boolean isPersisted(); + method protected boolean persistBoolean(boolean); + } + + public class CMSystemSettingSwitchPreference extends SwitchPreference { + ctor public CMSystemSettingSwitchPreference(android.content.Context, android.util.AttributeSet, int); + ctor public CMSystemSettingSwitchPreference(android.content.Context, android.util.AttributeSet); + ctor public CMSystemSettingSwitchPreference(android.content.Context); + method protected boolean getPersistedBoolean(boolean); + method protected boolean isPersisted(); + method protected boolean persistBoolean(boolean); + } + + public class SystemSettingSwitchPreference extends SwitchPreference { + ctor public SystemSettingSwitchPreference(android.content.Context, android.util.AttributeSet, int); + ctor public SystemSettingSwitchPreference(android.content.Context, android.util.AttributeSet); + ctor public SystemSettingSwitchPreference(android.content.Context); + method protected boolean getPersistedBoolean(boolean); + method protected boolean isPersisted(); + method protected boolean persistBoolean(boolean); + } + +} + package cyanogenmod.profiles { public final class AirplaneModeSettings implements android.os.Parcelable { diff --git a/sdk/src/java/cyanogenmod/preference/CMGlobalSettingSwitchPreference.java b/sdk/src/java/cyanogenmod/preference/CMGlobalSettingSwitchPreference.java new file mode 100644 index 00000000..4a7952c7 --- /dev/null +++ b/sdk/src/java/cyanogenmod/preference/CMGlobalSettingSwitchPreference.java @@ -0,0 +1,64 @@ +/* + * 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.preference; + +import android.content.Context; +import android.support.v14.preference.SwitchPreference; +import android.util.AttributeSet; + +import cyanogenmod.providers.CMSettings; + +public class CMGlobalSettingSwitchPreference extends SwitchPreference { + public CMGlobalSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public CMGlobalSettingSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CMGlobalSettingSwitchPreference(Context context) { + super(context, null); + } + + @Override + protected boolean persistBoolean(boolean value) { + if (shouldPersist()) { + if (value == getPersistedBoolean(!value)) { + // It's already there, so the same as persisting + return true; + } + CMSettings.Global.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0); + return true; + } + return false; + } + + @Override + protected boolean getPersistedBoolean(boolean defaultReturnValue) { + if (!shouldPersist()) { + return defaultReturnValue; + } + return CMSettings.Global.getInt(getContext().getContentResolver(), + getKey(), defaultReturnValue ? 1 : 0) != 0; + } + + @Override + protected boolean isPersisted() { + return CMSettings.Global.getString(getContext().getContentResolver(), getKey()) != null; + } +} diff --git a/sdk/src/java/cyanogenmod/preference/CMSecureSettingSwitchPreference.java b/sdk/src/java/cyanogenmod/preference/CMSecureSettingSwitchPreference.java new file mode 100644 index 00000000..d3174249 --- /dev/null +++ b/sdk/src/java/cyanogenmod/preference/CMSecureSettingSwitchPreference.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2015 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.preference; + +import android.content.Context; +import android.support.v14.preference.SwitchPreference; +import android.util.AttributeSet; + +import cyanogenmod.providers.CMSettings; + +public class CMSecureSettingSwitchPreference extends SwitchPreference { + public CMSecureSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public CMSecureSettingSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CMSecureSettingSwitchPreference(Context context) { + super(context, null); + } + + @Override + protected boolean persistBoolean(boolean value) { + if (shouldPersist()) { + if (value == getPersistedBoolean(!value)) { + // It's already there, so the same as persisting + return true; + } + CMSettings.Secure.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0); + return true; + } + return false; + } + + @Override + protected boolean getPersistedBoolean(boolean defaultReturnValue) { + if (!shouldPersist()) { + return defaultReturnValue; + } + return CMSettings.Secure.getInt(getContext().getContentResolver(), + getKey(), defaultReturnValue ? 1 : 0) != 0; + } + + @Override + protected boolean isPersisted() { + return CMSettings.Secure.getString(getContext().getContentResolver(), getKey()) != null; + } +} diff --git a/sdk/src/java/cyanogenmod/preference/CMSystemSettingSwitchPreference.java b/sdk/src/java/cyanogenmod/preference/CMSystemSettingSwitchPreference.java new file mode 100644 index 00000000..c4f91d66 --- /dev/null +++ b/sdk/src/java/cyanogenmod/preference/CMSystemSettingSwitchPreference.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2015 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.preference; + +import android.content.Context; +import android.support.v14.preference.SwitchPreference; +import android.util.AttributeSet; + +import cyanogenmod.providers.CMSettings; + +public class CMSystemSettingSwitchPreference extends SwitchPreference { + public CMSystemSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public CMSystemSettingSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CMSystemSettingSwitchPreference(Context context) { + super(context, null); + } + + @Override + protected boolean persistBoolean(boolean value) { + if (shouldPersist()) { + if (value == getPersistedBoolean(!value)) { + // It's already there, so the same as persisting + return true; + } + CMSettings.System.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0); + return true; + } + return false; + } + + @Override + protected boolean getPersistedBoolean(boolean defaultReturnValue) { + if (!shouldPersist()) { + return defaultReturnValue; + } + return CMSettings.System.getInt(getContext().getContentResolver(), + getKey(), defaultReturnValue ? 1 : 0) != 0; + } + + @Override + protected boolean isPersisted() { + return CMSettings.System.getString(getContext().getContentResolver(), getKey()) != null; + } +} diff --git a/sdk/src/java/cyanogenmod/preference/SystemSettingSwitchPreference.java b/sdk/src/java/cyanogenmod/preference/SystemSettingSwitchPreference.java new file mode 100644 index 00000000..a774834e --- /dev/null +++ b/sdk/src/java/cyanogenmod/preference/SystemSettingSwitchPreference.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2013 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.preference; + +import android.content.Context; +import android.provider.Settings; +import android.support.v14.preference.SwitchPreference; +import android.util.AttributeSet; + +public class SystemSettingSwitchPreference extends SwitchPreference { + public SystemSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public SystemSettingSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SystemSettingSwitchPreference(Context context) { + super(context, null); + } + + @Override + protected boolean persistBoolean(boolean value) { + if (shouldPersist()) { + if (value == getPersistedBoolean(!value)) { + // It's already there, so the same as persisting + return true; + } + Settings.System.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0); + return true; + } + return false; + } + + @Override + protected boolean getPersistedBoolean(boolean defaultReturnValue) { + if (!shouldPersist()) { + return defaultReturnValue; + } + return Settings.System.getInt(getContext().getContentResolver(), + getKey(), defaultReturnValue ? 1 : 0) != 0; + } + + @Override + protected boolean isPersisted() { + return Settings.System.getString(getContext().getContentResolver(), getKey()) != null; + } +}