From 7e3a0e5712b536f80140c052305f0cc1cb9b2c24 Mon Sep 17 00:00:00 2001 From: Maurizio Porrato Date: Sun, 17 Feb 2019 16:43:09 +0000 Subject: [PATCH] Implement schedule management --- .../eu/worn/apps/androvac/MainActivity.java | 40 ++++++++++++--- .../worn/apps/androvac/RoboVac11sRemote.java | 51 ++++++++++++++----- 2 files changed, 73 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/worn/apps/androvac/MainActivity.java b/app/src/main/java/eu/worn/apps/androvac/MainActivity.java index 79cf2f3..37a98e2 100644 --- a/app/src/main/java/eu/worn/apps/androvac/MainActivity.java +++ b/app/src/main/java/eu/worn/apps/androvac/MainActivity.java @@ -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); + } } diff --git a/app/src/main/java/eu/worn/apps/androvac/RoboVac11sRemote.java b/app/src/main/java/eu/worn/apps/androvac/RoboVac11sRemote.java index 02320b7..21706e8 100644 --- a/app/src/main/java/eu/worn/apps/androvac/RoboVac11sRemote.java +++ b/app/src/main/java/eu/worn/apps/androvac/RoboVac11sRemote.java @@ -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); }