diff options
Diffstat (limited to 'sdk/src/java/cyanogenmod/os/Build.java')
-rw-r--r-- | sdk/src/java/cyanogenmod/os/Build.java | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/sdk/src/java/cyanogenmod/os/Build.java b/sdk/src/java/cyanogenmod/os/Build.java new file mode 100644 index 0000000..ce7b8fb --- /dev/null +++ b/sdk/src/java/cyanogenmod/os/Build.java @@ -0,0 +1,148 @@ +/* + * 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.os; + +import android.os.SystemProperties; +import android.text.TextUtils; +import android.util.SparseArray; + +/** + * Information about the current CyanogenMod build, extracted from system properties. + */ +public class Build { + /** Value used for when a build property is unknown. */ + public static final String UNKNOWN = "unknown"; + + /** A build ID utilized to distinguish cyanogenmod versions */ + public static final String CYANOGENMOD_VERSION = "ro.cm.version"; + + /** A build ID string meant for displaying to the user */ + public static final String CYANOGENMOD_DISPLAY_VERSION = "ro.cm.display.version"; + + private static final SparseArray<String> sdkMap; + static + { + sdkMap = new SparseArray<String>(); + sdkMap.put(CM_VERSION_CODES.APRICOT, "Apricot"); + sdkMap.put(CM_VERSION_CODES.BOYSENBERRY, "Boysenberry"); + sdkMap.put(CM_VERSION_CODES.CANTALOUPE, "Cantaloupe"); + sdkMap.put(CM_VERSION_CODES.DRAGON_FRUIT, "Dragon Fruit"); + sdkMap.put(CM_VERSION_CODES.ELDERBERRY, "Elderberry"); + } + + /** Various version strings. */ + public static class CM_VERSION { + /** + * The user-visible SDK version of the framework; its possible + * values are defined in {@link Build.CM_VERSION_CODES}. + * + * Will return 0 if the device does not support the CM SDK. + */ + public static final int SDK_INT = SystemProperties.getInt( + "ro.cm.build.version.plat.sdk", 0); + } + + /** + * Enumeration of the currently known SDK version codes. These are the + * values that can be found in {@link CM_VERSION#SDK_INT}. Version numbers + * increment monotonically with each official platform release. + * + * To programmatically validate that a given API is available for use on the device, + * you can quickly check if the SDK_INT from the OS is provided and is greater or equal + * to the API level that your application is targeting. + * + * <p>Example for validating that Profiles API is available + * <pre class="prettyprint"> + * private void removeActiveProfile() { + * Make sure we're running on BoysenBerry or higher to use Profiles API + * if (Build.CM_VERSION.SDK_INT >= Build.CM_VERSION_CODES.BOYSENBERRY) { + * ProfileManager profileManager = ProfileManager.getInstance(this); + * Profile activeProfile = profileManager.getActiveProfile(); + * if (activeProfile != null) { + * profileManager.removeProfile(activeProfile); + * } + * } + * } + * </pre> + */ + public static class CM_VERSION_CODES { + /** + * June 2015: The first version of the platform sdk for CyanogenMod + */ + public static final int APRICOT = 1; + + /** + * September 2015: The second version of the platform sdk for CyanogenMod + * + * <p>Applications targeting this or a later release will get these + * new features:</p> + * <ul> + * <li>Profiles API via {@link cyanogenmod.app.ProfileManager} + * <li>New Expanded Styles for Custom Tiles via + * {@link cyanogenmod.app.CustomTile.RemoteExpandedStyle} + * <li>Hardware Abstraction Framework Access via + * {@link cyanogenmod.hardware.CMHardwareManager} (Not for use by 3rd parties) + * <li>MSIM API via {@link cyanogenmod.app.CMTelephonyManager} + * <li>Interface for partners via {@link cyanogenmod.app.PartnerInterface} + * <li>Introductory Settings Provider {@link cyanogenmod.providers.CMSettings} + * <li>AlarmClock API via {@link cyanogenmod.alarmclock.CyanogenModAlarmClock} + * </ul> + */ + public static final int BOYSENBERRY = 2; + + /** + * November - December 2015: The third iteration of the platform sdk for CyanogenMod + * Transition api level that is mostly 1:1 to {@link #BOYSENBERRY} + */ + public static final int CANTALOUPE = 3; + + /** + * January 2016: The 4th iteration of the platform sdk for CyanogenMod + * + * <p>Applications targeting this or a later version will get access to these + * new features:</p> + * <ul> + * <li>External views api, and specifically Keyguard interfaces for making + * live lockscreens via {@link cyanogenmod.externalviews.KeyguardExternalView}</li> + * <li>Inclusion of the PerformanceManager interfaces, allowing an application to specify + * the type of mode to have the device be placed in via + * {@link cyanogenmod.power.PerformanceManager}</li> + * <li>Numerous new "System" settings exposed via the + * {@link cyanogenmod.providers.CMSettings.System} interface</li> + * </ul> + */ + public static final int DRAGON_FRUIT = 4; + + /** + * Future M Release - 2nd quarter 2016 + */ + public static final int ELDERBERRY = 5; + } + + /** + * Retrieve the name for the SDK int + * @param sdkInt + * @return name of the SDK int, {@link #UNKNOWN) if not known + */ + public static String getNameForSDKInt(int sdkInt) { + final String name = sdkMap.get(sdkInt); + if (TextUtils.isEmpty(name)) { + return UNKNOWN; + } + return name; + } +} |