Newer
Older

Peter Joseph De Jonckheere CESM2014
committed
package com.example.stimulusStrategy;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;

Peter Joseph De Jonckheere CESM2014
committed
import android.app.job.JobParameters;
import android.app.job.JobScheduler;

Peter Joseph De Jonckheere CESM2014
committed
import android.app.job.JobService;
import android.app.job.JobWorkItem;
import android.content.ComponentName;

Peter Joseph De Jonckheere CESM2014
committed
import android.content.Context;
import android.content.Intent;

Peter Joseph De Jonckheere CESM2014
committed
import android.content.SharedPreferences;

Peter Joseph De Jonckheere CESM2014
committed
import android.hardware.Sensor;

Peter Joseph De Jonckheere CESM2014
committed
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

Peter Joseph De Jonckheere CESM2014
committed
import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
import android.os.IBinder;
import android.support.annotation.NonNull;

Peter Joseph De Jonckheere CESM2014
committed
import android.support.annotation.Nullable;
import android.util.Log;

Peter Joseph De Jonckheere CESM2014
committed
import android.widget.Toast;

Peter Joseph De Jonckheere CESM2014
committed
import com.example.notification.Notification;

Peter Joseph De Jonckheere CESM2014
committed
import com.example.pharmacy.frontEnd.R;

Peter Joseph De Jonckheere CESM2014
committed

Peter Joseph De Jonckheere CESM2014
committed
/**
* Created by pharmacy on 17/01/2018.
*/
public class SigMotionDetect extends Service implements StimulusStrategy {
private SensorManager mSensorManager;
private Sensor md;
private TriggerEventListener tel;
private AlarmManager am;
//Set up alarm manager to fire in one hour, and set up significant motion sensor to fire and call monitor which
// will then cancel the alarm and reschedule it for one hour from now. Monitor should also use step-counter? to monitor the length
// of unsedentary behaviour for progress monitoring.
@Override
public void onCreate(){
am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
setUpClock();
mSensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);

Peter Joseph De Jonckheere CESM2014
committed
//Need to test if this produces null to avoid NULLPOINTEREXCEPTION
md = mSensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);

Peter Joseph De Jonckheere CESM2014
committed
tel = new TriggerEventListener() {
@Override
public void onTrigger(TriggerEvent triggerEvent) {
monitor();
}
};

Peter Joseph De Jonckheere CESM2014
committed
mSensorManager.requestTriggerSensor(tel, md);

Peter Joseph De Jonckheere CESM2014
committed
}
private void setUpClock() {
Intent i = new Intent(this, Notification.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
am.set(AlarmManager.ELAPSED_REALTIME, AlarmManager.INTERVAL_HOUR, pi);
// Log.i("myTag", "Alarm SET");

Peter Joseph De Jonckheere CESM2014
committed
}
public void monitor() {
//Use step counter sensor? to detect if movement lasted for a prolonged period of time.
//Anything over 60 steps per minute counts as a minute of activity.
//Check every minute until the change is less than this.
//Then register to daily progress for number of minutes > 60.

Peter Joseph De Jonckheere CESM2014
committed
Toast saved = Toast.makeText(this, R.string.motion,Toast.LENGTH_LONG);
saved.show();

Peter Joseph De Jonckheere CESM2014
committed
am.cancel(am.getNextAlarmClock().getShowIntent());

Peter Joseph De Jonckheere CESM2014
committed
setUpClock();
mSensorManager.requestTriggerSensor(tel, md);
}

Peter Joseph De Jonckheere CESM2014
committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Intent intent = new Intent(this, StepCounter.class);
startActivity(intent);
}
private class StepCounter extends Service implements SensorEventListener{
private Sensor stepCounter;
private float stepCount;
private float prevStepCount = 0;
private int minutes = 0;
public void onCreate(){
stepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
mSensorManager.registerListener(this, stepCounter, 60000000);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (prevStepCount == 0) {
prevStepCount = event.values[0];
} else {
stepCount = event.values[0];
if(stepCount - 60 > prevStepCount){
minutes++;
prevStepCount = stepCount;
Toast saved = Toast.makeText(this, R.string.minute_progress,Toast.LENGTH_LONG);
saved.show();
} else {
mSensorManager.unregisterListener(this);
SharedPreferences sharedPref = this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.daily_progress), minutes);
editor.commit();
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}

Peter Joseph De Jonckheere CESM2014
committed
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

Peter Joseph De Jonckheere CESM2014
committed
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}