Implement schedule management
This commit is contained in:
parent
44e2d8b34a
commit
7e3a0e5712
|
@ -1,13 +1,15 @@
|
|||
package eu.worn.apps.androvac;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.View;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.Switch;
|
||||
import android.widget.TimePicker;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
|
||||
public class MainActivity extends AppCompatActivity implements View.OnClickListener, TimePicker.OnTimeChangedListener {
|
||||
|
||||
private IRBeamer beamer;
|
||||
private RoboVac11sRemote remote;
|
||||
|
@ -45,7 +47,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
|
|||
setContentView(R.layout.activity_main);
|
||||
|
||||
if (remote == null)
|
||||
remote = new RoboVac11sRemote();
|
||||
remote = new RoboVac11sRemote(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));
|
||||
|
||||
if (beamer == null) {
|
||||
beamer = new AndroidIRBeamer(this);
|
||||
|
@ -57,15 +59,41 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
|
|||
}
|
||||
}
|
||||
|
||||
findViewById(R.id.schedule).setEnabled(
|
||||
((Switch) findViewById(R.id.enableSchedule)).isChecked());
|
||||
Switch scheduleSwitch = findViewById(R.id.enableSchedule);
|
||||
TimePicker schedulePicker = findViewById(R.id.schedule);
|
||||
int sh = remote.getScheduleHour();
|
||||
int sm = remote.getScheduleMinute();
|
||||
|
||||
((Switch) findViewById(R.id.enableSchedule)).setOnCheckedChangeListener(
|
||||
if ((sh >= 0) && (sm >= 0)) {
|
||||
schedulePicker.setCurrentHour(sh);
|
||||
schedulePicker.setCurrentMinute(sm);
|
||||
schedulePicker.setEnabled(true);
|
||||
scheduleSwitch.setChecked(true);
|
||||
} else {
|
||||
schedulePicker.setCurrentHour(0);
|
||||
schedulePicker.setCurrentMinute(0);
|
||||
schedulePicker.setEnabled(false);
|
||||
scheduleSwitch.setChecked(false);
|
||||
}
|
||||
|
||||
schedulePicker.setOnTimeChangedListener(this);
|
||||
|
||||
scheduleSwitch.setOnCheckedChangeListener(
|
||||
new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
findViewById(R.id.schedule).setEnabled(isChecked);
|
||||
TimePicker schedulePicker = findViewById(R.id.schedule);
|
||||
schedulePicker.setEnabled(isChecked);
|
||||
if (isChecked)
|
||||
beam(remote.setSchedule(schedulePicker.getCurrentHour(), schedulePicker.getCurrentMinute()));
|
||||
else
|
||||
beam(remote.clearSchedule());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
|
||||
remote.setSchedule(hourOfDay, minute);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
package eu.worn.apps.androvac;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
class RoboVac11sRemote {
|
||||
private SharedPreferences preferences;
|
||||
|
||||
final IRModulation modulation = new EufyIRModulation();
|
||||
|
||||
private Calendar schedule;
|
||||
private byte schedule = (byte) 0xff;
|
||||
|
||||
private byte[] buildMessage(byte command) {
|
||||
byte msg[] = new byte[6];
|
||||
|
@ -15,28 +19,51 @@ class RoboVac11sRemote {
|
|||
msg[1] = command;
|
||||
msg[2] = (byte) now.get(Calendar.HOUR_OF_DAY);
|
||||
msg[3] = (byte) now.get(Calendar.MINUTE);
|
||||
if (schedule != null)
|
||||
msg[4] = (byte) (schedule.get(Calendar.HOUR_OF_DAY) * 4 +
|
||||
schedule.get(Calendar.MINUTE) / 15);
|
||||
else
|
||||
msg[4] = (byte) 0xff;
|
||||
msg[4] = schedule;
|
||||
msg[5] = (byte) (msg[0] + msg[1] + msg[2] + msg[3] + msg[4]);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
RoboVac11sRemote() {
|
||||
schedule = null;
|
||||
RoboVac11sRemote(SharedPreferences pref) {
|
||||
preferences = pref;
|
||||
schedule = (byte) preferences.getInt("schedule", 0xff);
|
||||
}
|
||||
|
||||
public void setSchedule(Calendar s) {
|
||||
schedule = s;
|
||||
private void storeSchedule() {
|
||||
SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putInt("schedule", schedule);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public Calendar getSchedule() {
|
||||
return schedule;
|
||||
public int getScheduleHour() {
|
||||
if (schedule == 0xff)
|
||||
return -1;
|
||||
else
|
||||
return schedule / 4;
|
||||
}
|
||||
|
||||
public int getScheduleMinute() {
|
||||
if (schedule == 0xff)
|
||||
return -1;
|
||||
else
|
||||
return (schedule % 4) * 15;
|
||||
}
|
||||
|
||||
public byte[] setSchedule(int hour, int minute) {
|
||||
schedule = (byte) (hour * 4 + minute / 15);
|
||||
storeSchedule();
|
||||
return buildMessage((byte) 0xcf);
|
||||
}
|
||||
|
||||
public byte[] clearSchedule() {
|
||||
schedule = (byte) 0xff;
|
||||
storeSchedule();
|
||||
return buildMessage((byte) 0xdf);
|
||||
}
|
||||
|
||||
byte[] setTime() { return buildMessage((byte) 0xbf); }
|
||||
|
||||
byte[] cleanAuto() { return buildMessage((byte) 0x5d); }
|
||||
byte[] cleanSpot() { return buildMessage((byte) 0x8c); }
|
||||
byte[] cleanEdge() { return buildMessage((byte) 0x9c); }
|
||||
|
|
Loading…
Reference in New Issue