diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java index bd49a1f4..83a4ae50 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/BluetoothCommunicationService.java @@ -21,6 +21,7 @@ import android.widget.Toast; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBDevice.State; @@ -267,7 +268,8 @@ public class BluetoothCommunicationService extends Service { mStarted = true; break; case ACTION_SET_ALARMS: - mDeviceSupport.onSetAlarms(); + ArrayList alarms = intent.getParcelableArrayListExtra("alarms"); + mDeviceSupport.onSetAlarms(alarms); break; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/EventHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/EventHandler.java index 29d7b1cc..78995fd3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/EventHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/EventHandler.java @@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge; import android.net.Uri; +import java.util.ArrayList; import java.util.UUID; public interface EventHandler { @@ -13,7 +14,7 @@ public interface EventHandler { void onSetTime(long ts); - void onSetAlarms(); + void onSetAlarms(ArrayList alarms); void onSetCallState(String number, String name, GBCommand command); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBAlarm.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBAlarm.java index 8232423e..83dc8cae 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBAlarm.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBAlarm.java @@ -1,13 +1,16 @@ package nodomain.freeyourgadget.gadgetbridge; import android.content.SharedPreferences; +import android.os.Parcel; +import android.os.Parcelable; import android.preference.PreferenceManager; import java.util.Calendar; import static nodomain.freeyourgadget.gadgetbridge.miband.MiBandConst.PREF_MIBAND_ALARM_PREFIX; -public class GBAlarm { +public class GBAlarm implements Parcelable { + private int index; private boolean enabled; private boolean smartWakeup; @@ -50,6 +53,41 @@ public class GBAlarm { store(); } + private static GBAlarm readFromParcel(Parcel pc) { + int index = pc.readInt(); + boolean enabled = Boolean.parseBoolean(pc.readString()); + boolean smartWakeup = Boolean.parseBoolean(pc.readString()); + int repetition = pc.readInt(); + int hour = pc.readInt(); + int minute = pc.readInt(); + return new GBAlarm(index, enabled, smartWakeup, (byte)repetition, hour, minute); + } + + @Override + public boolean equals(Object o) { + if (o instanceof GBAlarm) { + GBAlarm comp = (GBAlarm)o; + return comp.getIndex() == getIndex(); + } else { + return false; + } + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(this.index); + dest.writeString(String.valueOf(this.enabled)); + dest.writeString(String.valueOf(this.smartWakeup)); + dest.writeInt(this.repetition); + dest.writeInt(this.hour); + dest.writeInt(this.minute); + } + public int getIndex() { return this.index; } @@ -135,4 +173,15 @@ public class GBAlarm { String pref = PREF_MIBAND_ALARM_PREFIX +(this.index+1); sharedPrefs.edit().putString(pref, this.toPreferences()).apply(); } + + public static final Creator CREATOR = new Creator() { + public GBAlarm createFromParcel(Parcel in) { + return readFromParcel(in); + } + + public GBAlarm[] newArray(int size) { + return new GBAlarm[size]; + } + + }; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ServiceDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ServiceDeviceSupport.java index e3a63afe..8ea3df39 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ServiceDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/ServiceDeviceSupport.java @@ -7,6 +7,7 @@ import android.net.Uri; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.UUID; /** @@ -228,10 +229,10 @@ public class ServiceDeviceSupport implements DeviceSupport { } @Override - public void onSetAlarms() { + public void onSetAlarms(ArrayList alarms) { if (checkBusy("set alarms")) { return; } - delegate.onSetAlarms(); + delegate.onSetAlarms(alarms); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AlarmDetails.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AlarmDetails.java index a9c4d709..41cdc893 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AlarmDetails.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AlarmDetails.java @@ -3,6 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.activities; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Parcelable; import android.preference.PreferenceManager; import android.text.format.DateFormat; import android.view.View; @@ -42,89 +43,81 @@ public class AlarmDetails extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm_details); - int index = getIntent().getExtras().getInt("alarm_index"); - if (index <0 || index > 2) { - finish(); - }else { - SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); - String pref = PREF_MIBAND_ALARM_PREFIX +(index+1); - alarm = new GBAlarm(sharedPrefs.getString(pref, "")); - //TODO: this is horrible and error-prone + Parcelable p = getIntent().getExtras().getParcelable("alarm"); + alarm = (GBAlarm) p; - timePicker = (TimePicker) findViewById(R.id.alarm_time_picker); - ctvSmartWakeup = (CheckedTextView) findViewById(R.id.alarm_ctv_smart_wakeup); - ctvMonday = (CheckedTextView) findViewById(R.id.alarm_ctv_mon); - ctvTuesday = (CheckedTextView) findViewById(R.id.alarm_ctv_tue); - ctvWednesday = (CheckedTextView) findViewById(R.id.alarm_ctv_wed); - ctvThursday = (CheckedTextView) findViewById(R.id.alarm_ctv_thu); - ctvFriday = (CheckedTextView) findViewById(R.id.alarm_ctv_fri); - ctvSaturday = (CheckedTextView) findViewById(R.id.alarm_ctv_sat); - ctvSunday = (CheckedTextView) findViewById(R.id.alarm_ctv_sun); + timePicker = (TimePicker) findViewById(R.id.alarm_time_picker); + ctvSmartWakeup = (CheckedTextView) findViewById(R.id.alarm_ctv_smart_wakeup); + ctvMonday = (CheckedTextView) findViewById(R.id.alarm_ctv_mon); + ctvTuesday = (CheckedTextView) findViewById(R.id.alarm_ctv_tue); + ctvWednesday = (CheckedTextView) findViewById(R.id.alarm_ctv_wed); + ctvThursday = (CheckedTextView) findViewById(R.id.alarm_ctv_thu); + ctvFriday = (CheckedTextView) findViewById(R.id.alarm_ctv_fri); + ctvSaturday = (CheckedTextView) findViewById(R.id.alarm_ctv_sat); + ctvSunday = (CheckedTextView) findViewById(R.id.alarm_ctv_sun); - timePicker.setIs24HourView(DateFormat.is24HourFormat(GBApplication.getContext())); - timePicker.setCurrentHour(alarm.getHour()); - timePicker.setCurrentMinute(alarm.getMinute()); + timePicker.setIs24HourView(DateFormat.is24HourFormat(GBApplication.getContext())); + timePicker.setCurrentHour(alarm.getHour()); + timePicker.setCurrentMinute(alarm.getMinute()); - ctvSmartWakeup.setChecked(alarm.isSmartWakeup()); - ctvSmartWakeup.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); + ctvSmartWakeup.setChecked(alarm.isSmartWakeup()); + ctvSmartWakeup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); - ctvMonday.setChecked(alarm.getRepetition(GBAlarm.ALARM_MON)); - ctvTuesday.setChecked(alarm.getRepetition(GBAlarm.ALARM_TUE)); - ctvWednesday.setChecked(alarm.getRepetition(GBAlarm.ALARM_WED)); - ctvThursday.setChecked(alarm.getRepetition(GBAlarm.ALARM_THU)); - ctvFriday.setChecked(alarm.getRepetition(GBAlarm.ALARM_FRI)); - ctvSaturday.setChecked(alarm.getRepetition(GBAlarm.ALARM_SAT)); - ctvSunday.setChecked(alarm.getRepetition(GBAlarm.ALARM_SUN)); + ctvMonday.setChecked(alarm.getRepetition(GBAlarm.ALARM_MON)); + ctvTuesday.setChecked(alarm.getRepetition(GBAlarm.ALARM_TUE)); + ctvWednesday.setChecked(alarm.getRepetition(GBAlarm.ALARM_WED)); + ctvThursday.setChecked(alarm.getRepetition(GBAlarm.ALARM_THU)); + ctvFriday.setChecked(alarm.getRepetition(GBAlarm.ALARM_FRI)); + ctvSaturday.setChecked(alarm.getRepetition(GBAlarm.ALARM_SAT)); + ctvSunday.setChecked(alarm.getRepetition(GBAlarm.ALARM_SUN)); - ctvMonday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - ctvTuesday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - ctvWednesday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - ctvThursday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - ctvFriday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - ctvSaturday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - ctvSunday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((CheckedTextView) v).toggle(); - } - }); - - } + ctvMonday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); + ctvTuesday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); + ctvWednesday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); + ctvThursday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); + ctvFriday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); + ctvSaturday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); + ctvSunday.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((CheckedTextView) v).toggle(); + } + }); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java index c3176d6c..b5a34456 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java @@ -26,7 +26,7 @@ public class ConfigureAlarms extends Activity { ListView alarmListView; private GBAlarmListAdapter mGBAlarmListAdapter; - final List alarmList = new ArrayList<>(); + final ArrayList alarmList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -49,7 +49,9 @@ public class ConfigureAlarms extends Activity { protected void onDestroy() { super.onDestroy(); Intent startIntent = new Intent(ConfigureAlarms.this, BluetoothCommunicationService.class); + startIntent.putParcelableArrayListExtra("alarms", alarmList); startIntent.setAction(BluetoothCommunicationService.ACTION_SET_ALARMS); startService(startIntent); } + } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java index c5e6ff97..78e6c3be 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java @@ -74,7 +74,7 @@ public class GBAlarmListAdapter extends ArrayAdapter { public void onClick(View v) { Intent startIntent; startIntent = new Intent(mContext, AlarmDetails.class); - startIntent.putExtra("alarm_index", alarm.getIndex()); + startIntent.putExtra("alarm", alarm); mContext.startActivity(startIntent); } }); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java index ef195b0b..678d9188 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java @@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.text.DateFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.GregorianCalendar; @@ -328,14 +329,13 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { } @Override - public void onSetAlarms() { + public void onSetAlarms(ArrayList alarms) { try { - SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext()); BluetoothGattCharacteristic characteristic = getCharacteristic(MiBandService.UUID_CHARACTERISTIC_CONTROL_POINT); TransactionBuilder builder = performInitialized("Set alarm"); - queueAlarm(new GBAlarm(sharedPrefs.getString(PREF_MIBAND_ALARM1, GBAlarm.DEFAULT_ALARM1)), builder, characteristic); - queueAlarm(new GBAlarm(sharedPrefs.getString(PREF_MIBAND_ALARM2, GBAlarm.DEFAULT_ALARM2)), builder, characteristic); - queueAlarm(new GBAlarm(sharedPrefs.getString(PREF_MIBAND_ALARM3, GBAlarm.DEFAULT_ALARM3)), builder, characteristic); + for (GBAlarm alarm : alarms) { + queueAlarm(alarm, builder, characteristic); + } builder.queue(getQueue()); } catch (IOException ex) { LOG.error("Unable to set alarms on MI device", ex); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java index 4d6fad6e..43b50d96 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java @@ -2,7 +2,10 @@ package nodomain.freeyourgadget.gadgetbridge.pebble; import android.net.Uri; +import java.util.ArrayList; + import nodomain.freeyourgadget.gadgetbridge.AbstractBTDeviceSupport; +import nodomain.freeyourgadget.gadgetbridge.GBAlarm; import nodomain.freeyourgadget.gadgetbridge.GBDeviceIoThread; import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceProtocol; @@ -40,7 +43,7 @@ public class PebbleSupport extends AbstractBTDeviceSupport { } @Override - public void onSetAlarms() { + public void onSetAlarms(ArrayList alarms) { //nothing to do ATM } }