Add showing when the device wasn't worn by the user

This commit is contained in:
Daniele Gobbetti 2015-08-28 14:54:49 +02:00
parent fb5ebeacb6
commit 26792717d4
6 changed files with 42 additions and 15 deletions

View File

@ -93,6 +93,8 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
protected ActivityConfig akActivity = new ActivityConfig(ActivityKind.TYPE_ACTIVITY, "Activity", Color.rgb(89, 178, 44)); protected ActivityConfig akActivity = new ActivityConfig(ActivityKind.TYPE_ACTIVITY, "Activity", Color.rgb(89, 178, 44));
protected ActivityConfig akLightSleep = new ActivityConfig(ActivityKind.TYPE_LIGHT_SLEEP, "Light Sleep", Color.rgb(182, 191, 255)); protected ActivityConfig akLightSleep = new ActivityConfig(ActivityKind.TYPE_LIGHT_SLEEP, "Light Sleep", Color.rgb(182, 191, 255));
protected ActivityConfig akDeepSleep = new ActivityConfig(ActivityKind.TYPE_DEEP_SLEEP, "Deep Sleep", Color.rgb(76, 90, 255)); protected ActivityConfig akDeepSleep = new ActivityConfig(ActivityKind.TYPE_DEEP_SLEEP, "Deep Sleep", Color.rgb(76, 90, 255));
protected ActivityConfig akNotWorn = new ActivityConfig(ActivityKind.TYPE_NOT_WORN, "Not Worn", Color.rgb(84, 82, 84));
protected int BACKGROUND_COLOR; protected int BACKGROUND_COLOR;
protected int DESCRIPTION_COLOR; protected int DESCRIPTION_COLOR;
@ -101,6 +103,7 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
protected int AK_ACTIVITY_COLOR; protected int AK_ACTIVITY_COLOR;
protected int AK_DEEP_SLEEP_COLOR; protected int AK_DEEP_SLEEP_COLOR;
protected int AK_LIGHT_SLEEP_COLOR; protected int AK_LIGHT_SLEEP_COLOR;
protected int AK_NOT_WORN_COLOR;
protected AbstractChartFragment(String... intentFilterActions) { protected AbstractChartFragment(String... intentFilterActions) {
mIntentFilterActions = new HashSet<>(); mIntentFilterActions = new HashSet<>();
@ -133,10 +136,12 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
AK_ACTIVITY_COLOR = getResources().getColor(R.color.chart_activity_light); AK_ACTIVITY_COLOR = getResources().getColor(R.color.chart_activity_light);
AK_DEEP_SLEEP_COLOR = getResources().getColor(R.color.chart_light_sleep_light); AK_DEEP_SLEEP_COLOR = getResources().getColor(R.color.chart_light_sleep_light);
AK_LIGHT_SLEEP_COLOR = getResources().getColor(R.color.chart_deep_sleep_light); AK_LIGHT_SLEEP_COLOR = getResources().getColor(R.color.chart_deep_sleep_light);
AK_NOT_WORN_COLOR = getResources().getColor(R.color.chart_not_worn_light);
akActivity.color = AK_ACTIVITY_COLOR; akActivity.color = AK_ACTIVITY_COLOR;
akLightSleep.color = AK_LIGHT_SLEEP_COLOR; akLightSleep.color = AK_LIGHT_SLEEP_COLOR;
akDeepSleep.color = AK_DEEP_SLEEP_COLOR; akDeepSleep.color = AK_DEEP_SLEEP_COLOR;
akNotWorn.color = AK_NOT_WORN_COLOR;
} }
private void setStartDate(Date date) { private void setStartDate(Date date) {
@ -396,25 +401,28 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
float movement = sample.getIntensity(); float movement = sample.getIntensity();
float value = movement; float value = movement;
if (type == ActivityKind.TYPE_DEEP_SLEEP) { switch (type) {
value += SleepUtils.Y_VALUE_DEEP_SLEEP; case ActivityKind.TYPE_DEEP_SLEEP:
activityEntries.add(createBarEntry(value, i)); value += SleepUtils.Y_VALUE_DEEP_SLEEP;
colors.add(akDeepSleep.color); colors.add(akDeepSleep.color);
} else { break;
if (type == ActivityKind.TYPE_LIGHT_SLEEP) { case ActivityKind.TYPE_LIGHT_SLEEP:
activityEntries.add(createBarEntry(value, i));
colors.add(akLightSleep.color); colors.add(akLightSleep.color);
} else { break;
case ActivityKind.TYPE_NOT_WORN:
value = SleepUtils.Y_VALUE_DEEP_SLEEP; //a small value, just to show something on the graphs
colors.add(akNotWorn.color);
break;
default:
// short steps = sample.getSteps(); // short steps = sample.getSteps();
// if (use_steps_as_movement && steps != 0) { // if (use_steps_as_movement && steps != 0) {
// // I'm not sure using steps for this is actually a good idea // // I'm not sure using steps for this is actually a good idea
// movement = steps; // movement = steps;
// } // }
// value = ((float) movement) / movement_divisor; // value = ((float) movement) / movement_divisor;
activityEntries.add(createBarEntry(value, i));
colors.add(akActivity.color); colors.add(akActivity.color);
}
} }
activityEntries.add(createBarEntry(value, i));
String xLabel = ""; String xLabel = "";
if (annotate) { if (annotate) {

View File

@ -11,6 +11,7 @@ public class ActivityAnalysis {
public ActivityAmounts calculateActivityAmounts(List<ActivitySample> samples) { public ActivityAmounts calculateActivityAmounts(List<ActivitySample> samples) {
ActivityAmount deepSleep = new ActivityAmount(ActivityKind.TYPE_DEEP_SLEEP); ActivityAmount deepSleep = new ActivityAmount(ActivityKind.TYPE_DEEP_SLEEP);
ActivityAmount lightSleep = new ActivityAmount(ActivityKind.TYPE_LIGHT_SLEEP); ActivityAmount lightSleep = new ActivityAmount(ActivityKind.TYPE_LIGHT_SLEEP);
ActivityAmount notWorn = new ActivityAmount(ActivityKind.TYPE_NOT_WORN);
ActivityAmount activity = new ActivityAmount(ActivityKind.TYPE_ACTIVITY); ActivityAmount activity = new ActivityAmount(ActivityKind.TYPE_ACTIVITY);
ActivityAmount previousAmount = null; ActivityAmount previousAmount = null;
@ -24,6 +25,9 @@ public class ActivityAnalysis {
case ActivityKind.TYPE_LIGHT_SLEEP: case ActivityKind.TYPE_LIGHT_SLEEP:
amount = lightSleep; amount = lightSleep;
break; break;
case ActivityKind.TYPE_NOT_WORN:
amount = notWorn;
break;
case ActivityKind.TYPE_ACTIVITY: case ActivityKind.TYPE_ACTIVITY:
default: default:
amount = activity; amount = activity;

View File

@ -115,14 +115,16 @@ public class ActivitySleepChartFragment extends AbstractChartFragment {
} }
protected void setupLegend(Chart chart) { protected void setupLegend(Chart chart) {
List<Integer> legendColors = new ArrayList<>(3); List<Integer> legendColors = new ArrayList<>(4);
List<String> legendLabels = new ArrayList<>(3); List<String> legendLabels = new ArrayList<>(4);
legendColors.add(akActivity.color); legendColors.add(akActivity.color);
legendLabels.add(akActivity.label); legendLabels.add(akActivity.label);
legendColors.add(akLightSleep.color); legendColors.add(akLightSleep.color);
legendLabels.add(akLightSleep.label); legendLabels.add(akLightSleep.label);
legendColors.add(akDeepSleep.color); legendColors.add(akDeepSleep.color);
legendLabels.add(akDeepSleep.label); legendLabels.add(akDeepSleep.label);
legendColors.add(akNotWorn.color);
legendLabels.add(akNotWorn.label);
chart.getLegend().setColors(legendColors); chart.getLegend().setColors(legendColors);
chart.getLegend().setLabels(legendLabels); chart.getLegend().setLabels(legendLabels);
} }

View File

@ -8,9 +8,9 @@ public class MiBandSampleProvider implements SampleProvider {
public static final byte TYPE_LIGHT_SLEEP = 4; public static final byte TYPE_LIGHT_SLEEP = 4;
public static final byte TYPE_ACTIVITY = -1; public static final byte TYPE_ACTIVITY = -1;
public static final byte TYPE_UNKNOWN = -1; public static final byte TYPE_UNKNOWN = -1;
public static final byte TYPE_NONWEAR = 3;
public static final byte TYPE_CHARGING = 6;
// public static final byte TYPE_CHARGING = 6;
// public static final byte TYPE_NONWEAR = 3;
// public static final byte TYPE_NREM = 5; // DEEP SLEEP // public static final byte TYPE_NREM = 5; // DEEP SLEEP
// public static final byte TYPE_ONBED = 7; // public static final byte TYPE_ONBED = 7;
// public static final byte TYPE_REM = 4; // LIGHT SLEEP // public static final byte TYPE_REM = 4; // LIGHT SLEEP
@ -31,6 +31,10 @@ public class MiBandSampleProvider implements SampleProvider {
return ActivityKind.TYPE_LIGHT_SLEEP; return ActivityKind.TYPE_LIGHT_SLEEP;
case TYPE_ACTIVITY: case TYPE_ACTIVITY:
return ActivityKind.TYPE_ACTIVITY; return ActivityKind.TYPE_ACTIVITY;
case TYPE_NONWEAR:
return ActivityKind.TYPE_NOT_WORN;
case TYPE_CHARGING:
return ActivityKind.TYPE_NOT_WORN; //I believe it's a safe assumption
default: default:
// case TYPE_UNKNOWN: // fall through // case TYPE_UNKNOWN: // fall through
return ActivityKind.TYPE_UNKNOWN; return ActivityKind.TYPE_UNKNOWN;
@ -46,6 +50,8 @@ public class MiBandSampleProvider implements SampleProvider {
return TYPE_DEEP_SLEEP; return TYPE_DEEP_SLEEP;
case ActivityKind.TYPE_LIGHT_SLEEP: case ActivityKind.TYPE_LIGHT_SLEEP:
return TYPE_LIGHT_SLEEP; return TYPE_LIGHT_SLEEP;
case ActivityKind.TYPE_NOT_WORN:
return TYPE_NONWEAR;
case ActivityKind.TYPE_UNKNOWN: // fall through case ActivityKind.TYPE_UNKNOWN: // fall through
default: default:
return TYPE_UNKNOWN; return TYPE_UNKNOWN;

View File

@ -9,9 +9,10 @@ public class ActivityKind {
public static final int TYPE_ACTIVITY = 1; public static final int TYPE_ACTIVITY = 1;
public static final int TYPE_LIGHT_SLEEP = 2; public static final int TYPE_LIGHT_SLEEP = 2;
public static final int TYPE_DEEP_SLEEP = 4; public static final int TYPE_DEEP_SLEEP = 4;
public static final int TYPE_NOT_WORN = 8;
public static final int TYPE_SLEEP = TYPE_LIGHT_SLEEP | TYPE_DEEP_SLEEP; public static final int TYPE_SLEEP = TYPE_LIGHT_SLEEP | TYPE_DEEP_SLEEP;
public static final int TYPE_ALL = TYPE_ACTIVITY | TYPE_SLEEP; public static final int TYPE_ALL = TYPE_ACTIVITY | TYPE_SLEEP | TYPE_NOT_WORN;
public static byte[] mapToDBActivityTypes(int types, SampleProvider provider) { public static byte[] mapToDBActivityTypes(int types, SampleProvider provider) {
byte[] result = new byte[3]; byte[] result = new byte[3];
@ -25,6 +26,9 @@ public class ActivityKind {
if ((types & ActivityKind.TYPE_LIGHT_SLEEP) != 0) { if ((types & ActivityKind.TYPE_LIGHT_SLEEP) != 0) {
result[i++] = provider.toRawActivityKind(TYPE_LIGHT_SLEEP); result[i++] = provider.toRawActivityKind(TYPE_LIGHT_SLEEP);
} }
if ((types & ActivityKind.TYPE_NOT_WORN) != 0) {
result[i++] = provider.toRawActivityKind(TYPE_NOT_WORN);
}
return Arrays.copyOf(result, i); return Arrays.copyOf(result, i);
} }

View File

@ -20,4 +20,7 @@
<color name="chart_activity_light" type="color">#60bd6d</color> <color name="chart_activity_light" type="color">#60bd6d</color>
<color name="chart_activity_dark" type="color">#59b22c</color> <color name="chart_activity_dark" type="color">#59b22c</color>
<color name="chart_not_worn_light" type="color">#545254</color>
<color name="chart_not_worn_dark" type="color">#d8d9d8</color>
</resources> </resources>