diff options
author | Matt Garnes <matt@cyngn.com> | 2015-07-14 16:29:56 -0700 |
---|---|---|
committer | Matt Garnes <matt@cyngn.com> | 2015-08-06 11:35:00 -0700 |
commit | 0cdb1d513c70a794db0e29696ef620c573aa96ea (patch) | |
tree | 3d429fc60c4f88be649164c4367850923fa25eec /src/java/cyanogenmod/app | |
parent | 5b61a21f7f724de000980d3dfe36f0ec3b6485a1 (diff) | |
download | vendor_cmsdk-0cdb1d513c70a794db0e29696ef620c573aa96ea.zip vendor_cmsdk-0cdb1d513c70a794db0e29696ef620c573aa96ea.tar.gz vendor_cmsdk-0cdb1d513c70a794db0e29696ef620c573aa96ea.tar.bz2 |
Add SettingsManager.
Add new APIs for changing a subset of system settings.
Protected by cyanogenmod.permission.MODIFY_NETWORK_SETTINGS:
- Add ability to toggle airplane mode on/off.
- Add ability to toggle mobile data on/off.
Protected by android.permission.REBOOT:
- Add ability to shutdown or reboot the device.
Change-Id: I5e943be11260c58afa664f1702c0ecb4413528fe
Diffstat (limited to 'src/java/cyanogenmod/app')
-rw-r--r-- | src/java/cyanogenmod/app/CMContextConstants.java | 11 | ||||
-rw-r--r-- | src/java/cyanogenmod/app/ISettingsManager.aidl | 27 | ||||
-rw-r--r-- | src/java/cyanogenmod/app/SettingsManager.java | 152 |
3 files changed, 190 insertions, 0 deletions
diff --git a/src/java/cyanogenmod/app/CMContextConstants.java b/src/java/cyanogenmod/app/CMContextConstants.java index 3ce899a..13dedcb 100644 --- a/src/java/cyanogenmod/app/CMContextConstants.java +++ b/src/java/cyanogenmod/app/CMContextConstants.java @@ -50,4 +50,15 @@ public final class CMContextConstants { * @hide */ public static final String CM_PROFILE_SERVICE = "profile"; + + /** + * Use with {@link android.content.Context#getSystemService} to retrieve a + * {@link cyanogenmod.app.SettingsManager} changing system settings. + * + * @see android.content.Context#getSystemService + * @see cyanogenmod.app.SettingsManager + * + * @hide + */ + public static final String CM_SETTINGS_SERVICE = "cmsettings"; } diff --git a/src/java/cyanogenmod/app/ISettingsManager.aidl b/src/java/cyanogenmod/app/ISettingsManager.aidl new file mode 100644 index 0000000..83d7bf0 --- /dev/null +++ b/src/java/cyanogenmod/app/ISettingsManager.aidl @@ -0,0 +1,27 @@ +/* //device/java/android/android/app/IProfileManager.aidl +** +** 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.app; + +/** {@hide} */ +interface ISettingsManager +{ + void setAirplaneModeEnabled(boolean enabled); + void setMobileDataEnabled(boolean enabled); + void shutdown(); + void reboot(); +} diff --git a/src/java/cyanogenmod/app/SettingsManager.java b/src/java/cyanogenmod/app/SettingsManager.java new file mode 100644 index 0000000..2ab871b --- /dev/null +++ b/src/java/cyanogenmod/app/SettingsManager.java @@ -0,0 +1,152 @@ +/* + * 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.app; + +import android.content.Context; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; + +/** + * <p> + * The SettingsManager allows applications to modify a subset of system settings. + * </p> + */ +public class SettingsManager { + + private static ISettingsManager sService; + + private Context mContext; + + /** + * Allows an application to change network settings, + * such as enabling or disabling airplane mode. + */ + public static final String MODIFY_NETWORK_SETTINGS_PERMISSION = + "cyanogenmod.permission.MODIFY_NETWORK_SETTINGS"; + + private static final String TAG = "SettingsManager"; + + private static SettingsManager sSettingsManagerInstance; + + private SettingsManager(Context context) { + Context appContext = context.getApplicationContext(); + if (appContext != null) { + mContext = appContext; + } else { + mContext = context; + } + sService = getService(); + } + + /** + * Get or create an instance of the {@link cyanogenmod.app.SettingsManager} + * @param context + * @return {@link SettingsManager} + */ + public static SettingsManager getInstance(Context context) { + if (sSettingsManagerInstance == null) { + sSettingsManagerInstance = new SettingsManager(context); + } + return sSettingsManagerInstance; + } + + /** @hide */ + static public ISettingsManager getService() { + if (sService != null) { + return sService; + } + IBinder b = ServiceManager.getService(CMContextConstants.CM_SETTINGS_SERVICE); + if (b != null) { + sService = ISettingsManager.Stub.asInterface(b); + return sService; + } else { + return null; + } + } + + /** + * Turns on or off airplane mode. + * + * You will need {@link #MODIFY_NETWORK_SETTINGS_PERMISSION} + * to utilize this functionality. + * @param enabled if true, sets airplane mode to enabled, otherwise disables airplane mode. + */ + public void setAirplaneModeEnabled(boolean enabled) { + if (sService == null) { + return; + } + try { + getService().setAirplaneModeEnabled(enabled); + } catch (RemoteException e) { + Log.e(TAG, e.getLocalizedMessage(), e); + } + } + + /** + * Turns on or off mobile network. + * + * You will need {@link #MODIFY_NETWORK_SETTINGS_PERMISSION} + * to utilize this functionality. + * @param enabled if true, sets mobile network to enabled, otherwise disables mobile network. + */ + public void setMobileDataEnabled(boolean enabled) { + if (sService == null) { + return; + } + try { + getService().setMobileDataEnabled(enabled); + } catch (RemoteException e) { + Log.e(TAG, e.getLocalizedMessage(), e); + } + } + + /** + * Shuts down the device, immediately. + * + * You will need {@link android.Manifest.permission.REBOOT} + * to utilize this functionality. + */ + public void shutdownDevice() { + if (sService == null) { + return; + } + try { + getService().shutdown(); + } catch (RemoteException e) { + Log.e(TAG, e.getLocalizedMessage(), e); + } + } + + /** + * Reboots the device, immediately. + * + * You will need {@link android.Manifest.permission.REBOOT} + * to utilize this functionality. + */ + public void rebootDevice() { + if (sService == null) { + return; + } + try { + getService().reboot(); + } catch (RemoteException e) { + Log.e(TAG, e.getLocalizedMessage(), e); + } + } +} |