public BatteryData GetCurrentState()
        {
            BatteryReport report = Battery.AggregateBattery.GetReport();

            BatteryData data = new BatteryData();
            data.BatteryLife = report.BatteryLevelInPercentage();
            data.BatteryLifeTime = report.EstimateTimeToDischarge();

            switch (report.Status)
            {
                case Windows.System.Power.BatteryStatus.NotPresent:
                    data.BatteryState = BatteryState.NotPresent;
                    break;
                case Windows.System.Power.BatteryStatus.Discharging:
                    data.BatteryState = BatteryState.Discharging;
                    break;
                case Windows.System.Power.BatteryStatus.Charging:
                    data.BatteryState = BatteryState.Charging;
                    break;
                default:
                    data.BatteryState = BatteryState.Unknown;
                    break;
            }

            if (lastBatteryData == null || data.BatteryLife != lastBatteryData.BatteryLife || data.BatteryLifeTime != lastBatteryData.BatteryLifeTime || data.BatteryState != lastBatteryData.BatteryState)
            {
                BatteryStateChanged?.Invoke(this, new BatteryStateChangedEventArgs(data));
            }

            lastBatteryData = data;

            return data;
        }
        public BatteryData GetCurrentState()
        {
            if (battery == null)
            {
                battery = Battery.GetDefault();
            }

            BatteryData data = new BatteryData();
            data.BatteryLife = battery.RemainingChargePercent;
            TimeSpan dischargeTime = battery.RemainingDischargeTime;

            if (dischargeTime.Days < 1000)
            {
                data.BatteryLifeTime = battery.RemainingDischargeTime;
                data.BatteryState = BatteryState.Discharging;
            }
            else
            {
                // High discharge time means phone is charging.
                data.BatteryState = BatteryState.Charging;
            }

            // Notify only when values changes. GetCurrentState can be called manually.
            if (lastBatteryData == null || data.BatteryLife != lastBatteryData.BatteryLife || data.BatteryLifeTime != lastBatteryData.BatteryLifeTime || data.BatteryState != lastBatteryData.BatteryState)
            {
                BatteryStateChanged?.Invoke(this, new BatteryStateChangedEventArgs(data));
            }

            lastBatteryData = data;

            return data;
        }
        public BatteryData GetCurrentState()
        {
            var status = BatteryNativeUtils.GetStatus();

            BatteryData data = new BatteryData();
            data.BatteryLife = status.BatteryLifePercent;

            if (status.BatteryLifeTime > 0)
            {
                data.BatteryLifeTime = TimeSpan.FromSeconds(status.BatteryLifeTime);
            }

            if ((status.BatteryFlag & BatteryNativeUtils.BatteryFlag.Charging) > 0)
            {
                data.BatteryState = BatteryState.Charging;
            }
            else if ((status.BatteryFlag & BatteryNativeUtils.BatteryFlag.NoSystemBattery) > 0)
            {
                data.BatteryState = BatteryState.NotPresent;
            }
            else if (status.BatteryFlag != BatteryNativeUtils.BatteryFlag.Unknown)
            {
                data.BatteryState = BatteryState.Discharging;
            }
            else
            {
                data.BatteryState = BatteryState.Unknown;
            }

            if (lastBatteryData == null || data.BatteryLife != lastBatteryData.BatteryLife || data.BatteryLifeTime != lastBatteryData.BatteryLifeTime || data.BatteryState != lastBatteryData.BatteryState)
            {
                BatteryStateChanged?.Invoke(this, new BatteryStateChangedEventArgs(data));
            }

            lastBatteryData = data;

            return data;
        }
 public BatteryStateChangedEventArgs(BatteryData data)
 {
     Data = data;
 }
 private void UpdateBattery(BatteryData data)
 {
     BatteryLife.Text = (data.BatteryLife.HasValue ? data.BatteryLife.Value.ToString() : "-") + " %";
     BatteryLifeTime.Text = data.BatteryLifeTime.HasValue ? data.BatteryLifeTime.Value.ToString() : "-";
     BatteryStatus.Text = data.BatteryState.ToString();
 }