/*******************************************************************************
* Created by Orlando Aliaga
* Copyright 2015 Prey Inc. All rights reserved.
* License: GPLv3
* Full license at "/LICENSE"
******************************************************************************/
package com.prey.actions.battery;
import java.util.HashMap;
import com.prey.PreyLogger;
import com.prey.actions.HttpDataService;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Build;
public class BatteryInformation {
public Battery battery = null;
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
@TargetApi(Build.VERSION_CODES.ECLAIR)
@Override
public void onReceive(Context arg0, Intent intent) {
int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0);
int iconSmall = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, 0);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
boolean present = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0);
String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
battery = new Battery();
battery.setHealth(health);
battery.setIconSmall(iconSmall);
battery.setLevel(level);
battery.setPlugged(plugged);
battery.setPresent(present);
battery.setScale(scale);
battery.setStatus(status);
battery.setTechnology(technology);
battery.setTemperature(temperature);
battery.setVoltage(voltage);
battery.setCharging(charging);
PreyLogger.d("voltage:" + voltage + " status:" + status + " technology:" + technology + " temperature:" + voltage);
arg0.unregisterReceiver(mBatInfoReceiver);
}
};
public HttpDataService getInformation(Context ctx) {
battery = null;
ctx.getApplicationContext().registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
try {
int i = 0;
while (battery == null && i < 10) {
Thread.sleep(1000);
i++;
}
} catch (InterruptedException e) {
PreyLogger.d("Error, causa:" + e.getMessage());
}
HttpDataService data = null;
if (battery != null) {
data = new HttpDataService("battery_status");
HashMap<String, String> parametersMap = new HashMap<String, String>();
parametersMap.put("state", battery.isCharging() ? "charging" : "discharging");
parametersMap.put("remaining", Double.toString(battery.getLevel()));
data.getDataList().putAll(parametersMap);
data.setList(true);
}
// ctx.getApplicationContext().unregisterReceiver(batteryInfoReceiver);
return data;
}
private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() {
@TargetApi(Build.VERSION_CODES.ECLAIR)
@Override
public void onReceive(Context context, Intent intent) {
int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0);
int iconSmall = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, 0);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
boolean present = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0);
String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
battery = new Battery();
battery.setHealth(health);
battery.setIconSmall(iconSmall);
battery.setLevel(level);
battery.setPlugged(plugged);
battery.setPresent(present);
battery.setScale(scale);
battery.setStatus(status);
battery.setTechnology(technology);
battery.setTemperature(temperature);
battery.setVoltage(voltage);
battery.setCharging(charging);
}
};
@TargetApi(Build.VERSION_CODES.ECLAIR)
public Battery makeBattery(Intent intent) {
int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0);
int iconSmall = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, 0);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
boolean present = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0);
String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
Battery battery = new Battery();
battery.setHealth(health);
battery.setIconSmall(iconSmall);
battery.setLevel(level);
battery.setPlugged(plugged);
battery.setPresent(present);
battery.setScale(scale);
battery.setStatus(status);
battery.setTechnology(technology);
battery.setTemperature(temperature);
battery.setVoltage(voltage);
battery.setCharging(charging);
return battery;
}
}