Implement schedule management

This commit is contained in:
Maurizio Porrato 2019-02-17 16:43:09 +00:00
parent 44e2d8b34a
commit 7e3a0e5712
2 changed files with 73 additions and 18 deletions

View File

@ -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);
}
}

View File

@ -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); }