package nerdydog.domoHomeProd;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.ListIterator;
import nerdydog.domoHomeProd.db.ConfDatabase;
import nerdydog.domoHomeProd.db.ToDoDBAdapter;
import nerdydog.domoHomeProd.json.ParseJSON;
import nerdydog.domoHomeProd.object.Action;
import nerdydog.domoHomeProd.object.Actuator;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Utility extends Activity{
public static final int ABOUT = 1;
public static final int BACK = 2;
public static final int SYNC = 3;
public static final int SETTINGS = 4;
public static final int ACTIONS = 5;
public static boolean continueSync;
public static final String TAG = "Utility";
public static boolean showMenu(Menu menu, MenuInflater inflater){
inflater.inflate(R.menu.menu, menu);
return true;
}
public static boolean choiceMenu(MenuItem item, Activity l){
switch (item.getItemId()){
case BACK:
l.finish();
return true;
case R.id.menuhome:
Intent ihome = new Intent(l, DomoHome.class);
l.startActivity(ihome);
return true;
case R.id.menusync:
syncArduino(l);
return true;
case R.id.menusettings:
Intent i = new Intent(l, Settings.class);
l.startActivity(i);
return true;
case R.id.menuactions:
Intent iaction = new Intent(l, SelectDomoItem.class);
l.startActivity(iaction);
return true;
case R.id.menuabout:
Intent iabout = new Intent(l, About.class);
l.startActivity(iabout);
return true;
}
return false;
}
// sync arduino - db
public static void syncArduino(final Activity activity){
continueSync = false;
AlertDialog.Builder alertbox = new AlertDialog.Builder(activity);
alertbox.setTitle("Arduino Sync");
alertbox.setMessage("All the data will be deleted. Are you sure?");
// set a positive/yes button and create a listener
alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Log.i(TAG, "yes " + continueSync);
doSync(activity);
}
});
// set a negative/no button and create a listener
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Log.i(TAG, "no " + continueSync);
}
});
// display box
alertbox.show();
}
public static void doSync(Activity activity){
ProgressDialog dialog = new ProgressDialog(activity);
dialog.setMessage("Loading...");
dialog.show();
try {
ToDoDBAdapter toDoDBAdapter;
// DATABASE
toDoDBAdapter = new ToDoDBAdapter(activity);
toDoDBAdapter.open();
//fill up all the ips
ArrayList<String> ips = new ArrayList<String>();
//ips.add(ConfDatabase.CURRENT_IP_KEY);
String ip_start = new String(ConfDatabase.CURRENT_IP_KEY);
String ip_end = new String(ConfDatabase.CURRENT_IP_END_KEY);
Log.i(TAG, "s ip "+ ip_start + " e ip " + ip_end);
String[] ary_start = ip_start.split("\\.");
String[] ary_end = ip_end.split("\\.");
int start=0, end=0;
String base_ip = "";
base_ip = ary_start[0] + "." + ary_start[1] + "." + ary_start[2] + ".";
start = Integer.parseInt(ary_start[3])-1;
end = Integer.parseInt(ary_end[3]);
Log.i(TAG, "base " + base_ip + " start " + start + " end " + end);
for(int i=start; i<=end; i++){
Log.i(TAG, "ip " + base_ip + i);
ips.add(base_ip + i);
}
//ips.add("192.168.10.16");
//ips.add("192.168.10.19");
//ips.add("192.168.10.22");
// insert actuators into the db
ArrayList<Actuator> aryActuators = ParseJSON.getAllActuator(ips);
if (aryActuators.size() > 0) {
toDoDBAdapter.clearActuator();
toDoDBAdapter.clearAction();
toDoDBAdapter.clearCounter();
ListIterator<Actuator> iter = aryActuators.listIterator();
while (iter.hasNext()) {
Actuator actuator = iter.next();
toDoDBAdapter.intertActuator(actuator);
}
}
toDoDBAdapter.close();
// start the DomeHome activity, in this way we refresh tha listview with all the actuators
Intent i = new Intent(activity, DomoHome.class);
activity.startActivity(i);
Log.i(TAG, "do sync ");
} catch (Exception e) {
Log.e(TAG, e.toString());
}finally{
dialog.dismiss();
}
}
// initialize the list view with all the actuators
public static void initializeActuators(ToDoDBAdapter toDoDBAdapter, ListView listViewType, Context c){
ArrayList<Actuator> aryActuators = toDoDBAdapter.getAllActuators(null, null, ConfDatabase.ACTUATOR_TYPE);
ArrayList<String> aryForList = new ArrayList<String>();
if(aryActuators.size() > 0){
ListIterator<Actuator> iter = aryActuators.listIterator();
while (iter.hasNext()) {
Actuator actuator = iter.next();
aryForList.add(actuator.getType() + " (" + toDoDBAdapter.getAllActuators(ConfDatabase.ACTUATOR_TYPE + "=" + "?", new String[]{actuator.getType()}, null).size() + ")");
}
}
final ArrayAdapter<String> aa;
aa = new ArrayAdapter<String>(c,
android.R.layout.simple_list_item_1,
aryForList);
listViewType.setAdapter(aa);
}
public static void showDialog(Context c, String msg){
AlertDialog.Builder alertbox = new AlertDialog.Builder(c);
alertbox.setMessage(msg);
// add a neutral button to the alert box and assign a click listener
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
// click listener on the alert box
public void onClick(DialogInterface arg0, int arg1) {
// the button was clicked
}
});
// show it
alertbox.show();
}
public static void runActuator(ArrayList<Actuator> aryActuator) {
try {
for(int i = 0; i < aryActuator.size(); i++){
Actuator a = aryActuator.get(i);
String url = "http://" + ConfDatabase.CURRENT_IP_KEY + "/?out=" + a.getOut() + "&status=1";
Log.i(TAG, url);
ParseJSON.doRequestToArduino(url);
Thread.sleep(100);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void getIpFromPreferencesData(Context c){
SharedPreferences prefs = c.getSharedPreferences(ConfDatabase.MY_PREFERENCES, Context.MODE_PRIVATE);
String p_ip = prefs.getString(ConfDatabase.IP_KEY, "");
String p_ip_end = prefs.getString(ConfDatabase.IP_END_KEY, "");
String p_power_adj = prefs.getString(ConfDatabase.IP_POWER_ADJ_KEY, "");
if(p_ip != null){
ConfDatabase.CURRENT_IP_KEY = p_ip;
ConfDatabase.CURRENT_IP_END_KEY = p_ip_end;
ConfDatabase.CURRENT_POWER_ADJ_KEY = p_power_adj;
}
}
public static String getScheduledDays(String schedul){
String days = "";
if(String.valueOf(schedul.charAt(0)).equals(new String("1"))){
days = days + "M";
}else{ days = days + "-";}
if(String.valueOf(schedul.charAt(1)).equals(new String("1"))){
days = days + "T";
}else{ days = days + "-";}
if(String.valueOf(schedul.charAt(2)).equals(new String("1"))){
days = days + "W";
}else{ days = days + "-";}
if(String.valueOf(schedul.charAt(3)).equals(new String("1"))){
days = days + "T";
}else{ days = days + "-";}
if(String.valueOf(schedul.charAt(4)).equals(new String("1"))){
days = days + "F";
}else{ days = days + "-";}
if(String.valueOf(schedul.charAt(5)).equals(new String("1"))){
days = days + "S";
}else{ days = days + "-";}
if(String.valueOf(schedul.charAt(6)).equals(new String("1"))){
days = days + "S";
}else{ days = days + "-";}
return days;
}
public static boolean is_day_to_trigger(String s_compare){
Date dateNow = new Date();
Log.i(TAG, "-- " + dateNow.getDay() + " " + Calendar.SUNDAY);
if(dateNow.getDay()+1 == Calendar.MONDAY){
if(String.valueOf(s_compare.charAt(0)).equals(new String("1"))){
return true;
}
}
if(dateNow.getDay()+1 == Calendar.TUESDAY){
if(String.valueOf(s_compare.charAt(1)).equals(new String("1"))){
return true;
}
}
if(dateNow.getDay()+1 == Calendar.WEDNESDAY){
if(String.valueOf(s_compare.charAt(2)).equals(new String("1"))){
return true;
}
}
if(dateNow.getDay()+1 == Calendar.THURSDAY){
if(String.valueOf(s_compare.charAt(3)).equals(new String("1"))){
return true;
}
}
if(dateNow.getDay()+1 == Calendar.FRIDAY){
if(String.valueOf(s_compare.charAt(4)).equals(new String("1"))){
Log.i(TAG, "c " + s_compare.charAt(4) + " " + String.valueOf(s_compare.charAt(4)).equals(new String("1")));
return true;
}
}
if(dateNow.getDay()+1 == Calendar.SATURDAY){
if(String.valueOf(s_compare.charAt(5)).equals(new String("1"))){
return true;
}
}
if(dateNow.getDay()+1 == Calendar.SUNDAY){
if(String.valueOf(s_compare.charAt(6)).equals(new String("1"))){
return true;
}
}
return false;
}
public static void updateActionTriggered(Context c){
ToDoDBAdapter toDoDBAdapter = new ToDoDBAdapter(c);
toDoDBAdapter.open();
ArrayList<Action> actions = toDoDBAdapter.getAllAction(null, null, null);
Calendar calNow = Calendar.getInstance();
//calNow.add(Calendar.DATE, -1);
//Log.i(TAG, " NOW " + calNow.get(Calendar.YEAR) +" "+ calNow.get(Calendar.MONTH) +" "+ calNow.get(Calendar.DATE));
for(int i = 0; i < actions.size(); i++){
Date created_at = actions.get(i).getCreated_at();
Calendar calAction = Calendar.getInstance();
Log.i(TAG, "action date " + created_at.toLocaleString() + " " + created_at.getYear() +" "+ created_at.getMonth() +" "+ created_at.getDay());
calAction.setTime(created_at);
//Log.i(TAG, "calAction " + calAction.getTime().toLocaleString());
//Log.i(TAG, " calAction " + calAction.get(Calendar.YEAR) +" "+ calAction.get(Calendar.MONTH) +" "+ calAction.get(Calendar.DATE));
if(calAction.get(Calendar.YEAR) == calNow.get(Calendar.YEAR)
&& calAction.get(Calendar.MONTH) == calNow.get(Calendar.MONTH)
&& calAction.get(Calendar.DATE) == calNow.get(Calendar.DATE) ){
// TODO update status and date creation
toDoDBAdapter.updateAction(actions.get(i), ConfDatabase.ACTION_POS, "0");
toDoDBAdapter.updateAction(actions.get(i), ConfDatabase.ACTION_CREATED_AT, new Date());
Log.i(TAG,"the same");
}
}
toDoDBAdapter.close();
}
}