2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 namespace Tizen.System
22 /// Enumeration for the battery levels.
24 /// <since_tizen> 3 </since_tizen>
25 public enum BatteryLevelStatus
28 /// The battery goes empty.
29 /// Prepare for the safe termination of the application,
30 /// because the device starts a shutdown process soon
31 /// after entering this level.
33 /// <since_tizen> 3 </since_tizen>
36 /// The battery charge is at a critical state.
37 /// You may have to stop using the multimedia features,
38 /// because they are not guaranteed to work correctly
39 /// with this battery status.
41 /// <since_tizen> 3 </since_tizen>
44 /// The battery has little charge left.
46 /// <since_tizen> 3 </since_tizen>
49 /// The battery status is not to be careful.
51 /// <since_tizen> 3 </since_tizen>
54 /// The battery status is fully charged.
55 /// It means no more charge.
57 /// <since_tizen> 3 </since_tizen>
62 /// The Battery class provides the properties and events for the device battery.
65 /// The Battery API provides the way to get the current battery capacity value (Percent),
66 /// the battery state, and the charging state. It also provides the events for an application
67 /// to receive the battery status change events from the device.
68 /// To receive the battery event, the application should register with the respective EventHandler.
71 /// Console.WriteLine("battery Charging state is: {0}", Tizen.System.Battery.IsCharging);
72 /// Console.WriteLine("battery Percent is: {0}", Tizen.System.Battery.Percent);
74 public static class Battery
76 private static readonly object s_lock = new object();
78 /// Gets the battery charge percentage.
80 /// <since_tizen> 3 </since_tizen>
81 /// <value>It returns an integer value from 0 to 100 that indicates the remaining
82 /// battery charge as a percentage of the maximum level.</value>
83 public static int Percent
88 DeviceError res = (DeviceError)Interop.Device.DeviceBatteryGetPercent(out percent);
89 if (res != DeviceError.None)
91 Log.Warn(DeviceExceptionFactory.LogTag, "unable to get battery percentage.");
97 /// Gets the current battery level.
99 /// <since_tizen> 3 </since_tizen>
100 public static BatteryLevelStatus Level
105 DeviceError res = (DeviceError)Interop.Device.DeviceBatteryGetLevelStatus(out level);
106 if (res != DeviceError.None)
108 Log.Warn(DeviceExceptionFactory.LogTag, "unable to get battery status.");
110 return (BatteryLevelStatus)level;
114 /// Gets the current charging state.
116 /// <since_tizen> 3 </since_tizen>
117 public static bool IsCharging
122 DeviceError res = (DeviceError)Interop.Device.DeviceBatteryIsCharging(out charging);
123 if (res != DeviceError.None)
125 Log.Warn(DeviceExceptionFactory.LogTag, "unable to get battery charging state.");
131 private static EventHandler<BatteryPercentChangedEventArgs> s_capacityChanged;
133 /// CapacityChanged is triggered when the battery charge percentage is changed.
135 /// <since_tizen> 3 </since_tizen>
137 /// public static async Task BatteryEventHandler()
139 /// EventHandler<BatteryPercentChangedEventArgs> handler = null;
140 /// handler = (object sender, BatteryChargingStateChangedEventArgs args) =>
142 /// Console.WriteLine("battery Percent is: {0}", args.Percent);
144 /// Battery.PercentChanged += handler;
145 /// await Task.Delay(20000);
148 public static event EventHandler<BatteryPercentChangedEventArgs> PercentChanged
154 if (s_capacityChanged == null)
156 EventListenerStart(EventType.BatteryPercent);
158 s_capacityChanged += value;
165 s_capacityChanged -= value;
166 if (s_capacityChanged == null)
168 EventListenerStop(EventType.BatteryPercent);
174 private static event EventHandler<BatteryLevelChangedEventArgs> s_levelChanged;
177 /// LevelChanged is triggered when the battery level is changed.
179 /// <since_tizen> 3 </since_tizen>
181 /// public static async Task BatteryEventHandler()
183 /// EventHandler<BatteryLevelChangedEventArgs> handler = null;
184 /// handler = (object sender, BatteryLevelChangedEventArgs args) =>
186 /// Console.WriteLine("battery Level is: {0}", args.Level);
188 /// Battery.LevelChanged += handler;
189 /// await Task.Delay(20000);
192 public static event EventHandler<BatteryLevelChangedEventArgs> LevelChanged
198 if (s_levelChanged == null)
200 EventListenerStart(EventType.BatteryLevel);
202 s_levelChanged += value;
209 s_levelChanged -= value;
210 if (s_levelChanged == null)
212 EventListenerStop(EventType.BatteryLevel);
218 private static event EventHandler<BatteryChargingStateChangedEventArgs> s_chargingStateChanged;
220 /// ChargingStatusChanged is triggered when the battery charging status is changed.
221 /// This event is triggered when the charger is connected/disconnected.
223 /// <since_tizen> 3 </since_tizen>
225 /// public static async Task BatteryEventHandler()
227 /// EventHandler<BatteryChargingStateChangedEventArgs> handler = null;
228 /// handler = (object sender, BatteryChargingStateChangedEventArgs args) =>
230 /// Console.WriteLine("battery Level is: {0}", args.IsCharging);
232 /// Battery.ChargingStateChanged += handler;
233 /// await Task.Delay(20000);
236 public static event EventHandler<BatteryChargingStateChangedEventArgs> ChargingStateChanged
242 if (s_chargingStateChanged == null)
244 EventListenerStart(EventType.BatteryCharging);
246 s_chargingStateChanged += value;
253 s_chargingStateChanged -= value;
254 if (s_chargingStateChanged == null)
256 EventListenerStop(EventType.BatteryCharging);
262 private static Interop.Device.deviceCallback s_cpacityHandler;
263 private static Interop.Device.deviceCallback s_levelHandler;
264 private static Interop.Device.deviceCallback s_chargingHandler;
266 private static void EventListenerStart(EventType eventType)
270 case EventType.BatteryPercent:
271 s_cpacityHandler = (int type, IntPtr value, IntPtr data) =>
273 int val = value.ToInt32();
274 BatteryPercentChangedEventArgs e = new BatteryPercentChangedEventArgs()
278 s_capacityChanged?.Invoke(null, e);
282 Interop.Device.DeviceAddCallback(eventType, s_cpacityHandler, IntPtr.Zero);
285 case EventType.BatteryLevel:
286 s_levelHandler = (int type, IntPtr value, IntPtr data) =>
288 int val = value.ToInt32();
289 BatteryLevelChangedEventArgs e = new BatteryLevelChangedEventArgs()
291 Level = (BatteryLevelStatus)val
293 s_levelChanged?.Invoke(null, e);
297 Interop.Device.DeviceAddCallback(eventType, s_levelHandler, IntPtr.Zero);
300 case EventType.BatteryCharging:
301 s_chargingHandler = (int type, IntPtr value, IntPtr data) =>
303 bool val = (value.ToInt32() == 1);
304 BatteryChargingStateChangedEventArgs e = new BatteryChargingStateChangedEventArgs()
308 s_chargingStateChanged?.Invoke(null, e);
311 Interop.Device.DeviceAddCallback(eventType, s_chargingHandler, IntPtr.Zero);
316 private static void EventListenerStop(EventType eventType)
320 case EventType.BatteryPercent:
321 Interop.Device.DeviceRemoveCallback(eventType, s_cpacityHandler);
324 case EventType.BatteryLevel:
325 Interop.Device.DeviceRemoveCallback(eventType, s_levelHandler);
328 case EventType.BatteryCharging:
329 Interop.Device.DeviceRemoveCallback(eventType, s_chargingHandler);