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