package com.solderbyte.openfit.ui; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Locale; import com.solderbyte.openfit.ExerciseData; import com.solderbyte.openfit.HeartRateData; import com.solderbyte.openfit.PedometerData; import com.solderbyte.openfit.PedometerTotal; import com.solderbyte.openfit.ProfileData; import com.solderbyte.openfit.R; import com.solderbyte.openfit.SleepData; import com.solderbyte.openfit.util.OpenFitData; import com.solderbyte.openfit.util.OpenFitIntent; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.widget.ListAdapter; public class DialogFitness extends DialogFragment { private static final String LOG_TAG = "OpenFit:DialogFitness"; private AlertDialog dialog = null; private Date trialDate = null; private ListAdapter adapter; private Context context; public DialogFitness() {} public DialogFitness(Context cntxt, ArrayList<PedometerData> pedometerDailyList, ArrayList<PedometerData> pedometerList, PedometerTotal pedometerTotal, ArrayList<ExerciseData> exerciseDataList, ArrayList<SleepData> sleepList, ArrayList<HeartRateData> heartRateList, ProfileData profileData) { context = cntxt; buildAdapter(pedometerDailyList, pedometerList, pedometerTotal, exerciseDataList, sleepList, heartRateList, profileData); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.dialog_title_fitness); builder.setAdapter(adapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int index) { Log.d(LOG_TAG, "Clicked: " + index); } }); builder.setNegativeButton(R.string.dialog_close_fitness, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int index) {} }); builder.setPositiveButton(R.string.dialog_sync_fitness, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int index) { Log.d(LOG_TAG, "Sync clicked"); Intent msg = new Intent(OpenFitIntent.INTENT_GOOGLE_FIT); msg.putExtra(OpenFitIntent.INTENT_EXTRA_MSG, OpenFitIntent.INTENT_GOOGLE_FIT_SYNC); msg.putExtra(OpenFitIntent.INTENT_EXTRA_DATA, true); getActivity().sendBroadcast(msg); } }); dialog = builder.create(); return dialog; } @Override public void onStart() { super.onStart(); Log.d(LOG_TAG, "Sync onstart"); } public void buildAdapter(ArrayList<PedometerData> pedometerDailyList, ArrayList<PedometerData> pedometerList, PedometerTotal pedometerTotal, ArrayList<ExerciseData> exerciseDataList, ArrayList<SleepData> sleepList, ArrayList<HeartRateData> heartRateList, ProfileData profileData) { ArrayList<String> items = new ArrayList<String>(); ArrayList<String> subitems = new ArrayList<String>(); ArrayList<Drawable> iDraw = new ArrayList<Drawable>(); Calendar cal = Calendar.getInstance(); // profile data if(profileData != null) { String item = "Profile"; String subitem = "Gender: " + OpenFitData.getGender(profileData.getGender()) + "\n"; subitem += "Age: " + profileData.getAge() + " years\n"; subitem += "Height: " + String.format(Locale.getDefault(), "%.2f", profileData.getHeight()) + "cm\n"; subitem += "Weight: " + String.format(Locale.getDefault(), "%.2f", profileData.getWeight()) + "kg"; Drawable icon = context.getResources().getDrawable(R.drawable.open_stand); icon.setBounds(0, 0, 144, 144); items.add(item); subitems.add(subitem); iDraw.add(icon); } // pedometer total if(pedometerTotal != null) { String steps = Integer.toString(pedometerTotal.getSteps()); String distance = String.format(Locale.getDefault(), "%.2f", pedometerTotal.getDistance()); String calories = String.format(Locale.getDefault(), "%.2f", pedometerTotal.getCalories()); String item = "Pedometer Total"; items.add(item); String subitem = "Total steps: " + steps + "\n"; subitem += "Distance: " + distance + "m\n"; subitem += "Calories: " + calories + "kcal"; subitems.add(subitem); Drawable icon = context.getResources().getDrawable(R.drawable.open_walk); icon.setBounds(0, 0, 144, 144); iDraw.add(icon); } // pedometer list for(int i = pedometerDailyList.size() - 1; i >= 0; i--) { Date date = new Date(pedometerDailyList.get(i).getTimeStamp()); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, (cal.get(Calendar.DAY_OF_MONTH) - 1)); String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); String day = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); String year = Integer.toString(cal.get(Calendar.YEAR)); String item = "Steps"; items.add(item); String steps = Integer.toString(pedometerDailyList.get(i).getSteps()); String distance = String.format(Locale.getDefault(), "%.2f", pedometerDailyList.get(i).getDistance()); String calories = String.format(Locale.getDefault(), "%.2f", pedometerDailyList.get(i).getCalories()); String subitem = month + " " + day + ", " + year + "\n"; subitem += "Steps: " + steps + "\n"; subitem += "Distance: " + distance + "m\n"; subitem += "Calories: " + calories + "kcal"; subitems.add(subitem); Drawable icon = context.getResources().getDrawable(R.drawable.open_walk); icon.setBounds(0, 0, 144, 144); iDraw.add(icon); } // exercise list for(int i = exerciseDataList.size() - 1; i >= 0; i--) { Date date = new Date(exerciseDataList.get(i).getTimeStamp()); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, (cal.get(Calendar.DAY_OF_MONTH))); String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); String day = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); String year = Integer.toString(cal.get(Calendar.YEAR)); String hour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY)); String min = String.format("%02d", cal.get(Calendar.MINUTE)); Drawable icon = null; String item = null; if(exerciseDataList.get(i).getExerciseType() == OpenFitData.WALK_EXERCISE) { item = "Exercise: Walking"; icon = context.getResources().getDrawable(R.drawable.open_walk); } else if(exerciseDataList.get(i).getExerciseType() == OpenFitData.RUN_EXERCISE) { item = "Exercise: Running"; icon = context.getResources().getDrawable(R.drawable.open_run); } else if(exerciseDataList.get(i).getExerciseType() == OpenFitData.CYCLING_EXERCISE) { item = "Exercise: Cycling"; icon = context.getResources().getDrawable(R.drawable.open_bike); } else if(exerciseDataList.get(i).getExerciseType() == OpenFitData.HIKING_EXERCISE) { item = "Exercise: Hiking"; icon = context.getResources().getDrawable(R.drawable.open_help); } items.add(item); int h = (int)exerciseDataList.get(i).getDuration() / 3600; int m = (int)(exerciseDataList.get(i).getDuration() % 3600) / 60; int s = (int)exerciseDataList.get(i).getDuration() % 60; String duration = Integer.toString(h) + "h " + Integer.toString(m) + "m " + Integer.toString(s) + "s"; String calories = String.format(Locale.getDefault(), "%.2f", exerciseDataList.get(i).getCalories()); String heartRate = Integer.toString(exerciseDataList.get(i).getAvgHeartRate()); String distance = String.format(Locale.getDefault(), "%.2f", exerciseDataList.get(i).getDistance()); String avgSpeed = String.format(Locale.getDefault(), "%.2f", exerciseDataList.get(i).getAvgSpeed()*3.6); // 3.6 to km/h String maxSpeed = String.format(Locale.getDefault(), "%.2f", exerciseDataList.get(i).getMaxSpeed()*3.6); // 3.6 to km/h String maxHeartRate = Integer.toString(exerciseDataList.get(i).getMaxHeartRate()); String maxAlt = Float.toString(exerciseDataList.get(i).getMaxAltitude()); String minAlt = Float.toString(exerciseDataList.get(i).getMinAltitude()); String inclineDist = Float.toString(exerciseDataList.get(i).getInclinedDistance()); String declineDist = Float.toString(exerciseDataList.get(i).getDeclinedDistance()); String subitem = month + " " + day + ", " + year + "\n"; subitem += "Time: " + hour + ":" + min + "\n"; subitem += "Duration: " + duration + "\n"; subitem += "Calories: " + calories + "kcal\n"; subitem += "Distance: " + distance + "m\n"; subitem += "Avg HR: " + heartRate + "bpm\n"; subitem += "Max HR: " + maxHeartRate + "bpm\n"; subitem += "Avg speed: " + avgSpeed + "km/h\n"; subitem += "Max speed: " + maxSpeed + "km/h\n"; subitem += "Max altitude: " + maxAlt + "m\n"; subitem += "Min altitude: " + minAlt + "m\n"; subitem += "Incline distance: " + inclineDist + "m\n"; subitem += "Decline distance: " + declineDist + "m"; subitems.add(subitem); icon.setBounds(0, 0, 144, 144); iDraw.add(icon); } // sleep list for(int i = sleepList.size() - 1; i >= 0 && i > sleepList.size() - 4; i--) { Date dateFrom = new Date(sleepList.get(i).getStartTimeStamp()); cal.setTime(dateFrom); cal.set(Calendar.DAY_OF_MONTH, (cal.get(Calendar.DAY_OF_MONTH))); String monthF = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); String dayF = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); String yearF = Integer.toString(cal.get(Calendar.YEAR)); String hourF = Integer.toString(cal.get(Calendar.HOUR_OF_DAY)); String minF = String.format("%02d", cal.get(Calendar.MINUTE)); Date dateTo = new Date(sleepList.get(i).getEndTimeStamp()); cal.setTime(dateTo); cal.set(Calendar.DAY_OF_MONTH, (cal.get(Calendar.DAY_OF_MONTH))); String monthT = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); String dayT = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); String yearT = Integer.toString(cal.get(Calendar.YEAR)); String hourT = Integer.toString(cal.get(Calendar.HOUR_OF_DAY)); String minT = String.format("%02d", cal.get(Calendar.MINUTE)); String item = "Sleep"; items.add(item); String efficiency = String.format("%.2f", sleepList.get(i).getEfficiency()); String subitem = "Start: " + monthF + " " + dayF + ", " + yearF + ", " + hourF + ":" + minF + "\n"; subitem += "Stop: " + monthT + " " + dayT + ", " + yearT + ", " + hourT + ":" + minT + "\n"; subitem += "Efficiency: " + efficiency + "%"; subitems.add(subitem); Drawable icon = context.getResources().getDrawable(R.drawable.open_sleep); icon.setBounds(0, 0, 144, 144); iDraw.add(icon); } // heartrate list for(int i = heartRateList.size() - 1; i >= 0 && i > heartRateList.size() - 4; i--) { Date date = new Date(heartRateList.get(i).getTimeStamp()); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, (cal.get(Calendar.DAY_OF_MONTH))); String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); String day = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)); String year = Integer.toString(cal.get(Calendar.YEAR)); String hour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY)); String min = String.format("%02d", cal.get(Calendar.MINUTE)); String item = "Heart Rate"; items.add(item); String heartRate = Integer.toString(heartRateList.get(i).getHeartRate()); String subitem = month + " " + day + ", " + year + "\n"; subitem += "Time: " + hour + ":" + min + "\n"; subitem += "Heart Rate: " + heartRate + "bpm"; subitems.add(subitem); Drawable icon = context.getResources().getDrawable(R.drawable.open_heart); icon.setBounds(0, 0, 144, 144); iDraw.add(icon); } // no fitness data if(items.size() <= 0) { String item = "No fitness data found"; String subitem = "Enable pedometer on Gear Fit"; items.add(item); subitems.add(subitem); Drawable icon = context.getResources().getDrawable(R.drawable.open_info); icon.setBounds(0, 0, 144, 144); iDraw.add(icon); } adapter = new ArrayAdapterFitness(context, items, subitems, iDraw); } }