mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-11 20:49:25 +01:00
152 lines
5.1 KiB
Java
152 lines
5.1 KiB
Java
/* Copyright (C) 2019-2024 Dmitry Markin, José Rebelo, Petr Vaněk,
|
|
Taavi Eomäe
|
|
|
|
This file is part of Gadgetbridge.
|
|
|
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published
|
|
by the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Gadgetbridge is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
|
package nodomain.freeyourgadget.gadgetbridge.activities;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.res.Resources;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.view.View;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Calendar;
|
|
import java.util.GregorianCalendar;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
|
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
|
|
import nodomain.freeyourgadget.gadgetbridge.util.AlarmUtils;
|
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
|
|
|
public class WidgetAlarmsActivity extends Activity implements View.OnClickListener {
|
|
|
|
TextView textView;
|
|
GBDevice deviceForWidget;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
Context appContext = this.getApplicationContext();
|
|
|
|
Bundle extras = getIntent().getExtras();
|
|
if (extras != null) {
|
|
deviceForWidget = extras.getParcelable(GBDevice.EXTRA_DEVICE);
|
|
} else {
|
|
GB.toast(this,
|
|
"Error no device",
|
|
Toast.LENGTH_LONG, GB.ERROR);
|
|
return;
|
|
}
|
|
|
|
if (appContext instanceof GBApplication) {
|
|
|
|
if (deviceForWidget == null || !deviceForWidget.isInitialized()) {
|
|
GB.toast(this,
|
|
this.getString(R.string.not_connected),
|
|
Toast.LENGTH_LONG, GB.INFO);
|
|
|
|
} else {
|
|
setContentView(R.layout.widget_alarms_activity_list);
|
|
int userSleepDuration = new ActivityUser().getSleepDurationGoal();
|
|
textView = findViewById(R.id.alarm5);
|
|
if (userSleepDuration > 0) {
|
|
Resources res = getResources();
|
|
textView.setText(res.getQuantityString(R.plurals.widget_alarm_target_hours, userSleepDuration, userSleepDuration));
|
|
} else {
|
|
textView.setVisibility(View.GONE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View v) {
|
|
|
|
switch (v.getId()) {
|
|
case R.id.alarm1:
|
|
setAlarm(5);
|
|
break;
|
|
case R.id.alarm2:
|
|
setAlarm(10);
|
|
break;
|
|
case R.id.alarm3:
|
|
setAlarm(20);
|
|
break;
|
|
case R.id.alarm4:
|
|
setAlarm(60);
|
|
break;
|
|
case R.id.alarm5:
|
|
setAlarm(0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
//this is to prevent screen flashing during closing
|
|
new Handler().postDelayed(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
finish();
|
|
}
|
|
}, 150);
|
|
}
|
|
|
|
public void setAlarm(int duration) {
|
|
// current timestamp
|
|
GregorianCalendar calendar = new GregorianCalendar();
|
|
if (duration > 0) {
|
|
calendar.add(Calendar.MINUTE, duration);
|
|
} else {
|
|
int userSleepDuration = new ActivityUser().getSleepDurationGoal();
|
|
// add preferred sleep duration
|
|
if (userSleepDuration > 0) {
|
|
calendar.add(Calendar.HOUR_OF_DAY, userSleepDuration);
|
|
} else { // probably testing
|
|
calendar.add(Calendar.MINUTE, 1);
|
|
}
|
|
}
|
|
|
|
// overwrite the first alarm and activate it, without
|
|
|
|
if (deviceForWidget == null || !deviceForWidget.isInitialized()) {
|
|
GB.toast(this,
|
|
this.getString(R.string.appwidget_not_connected),
|
|
Toast.LENGTH_LONG, GB.WARN);
|
|
return;
|
|
}
|
|
|
|
int hours = calendar.get(Calendar.HOUR_OF_DAY);
|
|
int minutes = calendar.get(Calendar.MINUTE);
|
|
|
|
GB.toast(this,
|
|
this.getString(R.string.appwidget_setting_alarm, hours, minutes),
|
|
Toast.LENGTH_SHORT, GB.INFO);
|
|
|
|
Alarm alarm = AlarmUtils.createSingleShot(0, true, true, calendar);
|
|
ArrayList<Alarm> alarms = new ArrayList<>(1);
|
|
alarms.add(alarm);
|
|
GBApplication.deviceService(deviceForWidget).onSetAlarms(alarms);
|
|
|
|
}
|
|
}
|