From 957d4418597418d3be205f43e459e0e93628ace5 Mon Sep 17 00:00:00 2001 From: vanous Date: Tue, 13 Aug 2019 19:54:18 +0200 Subject: [PATCH] Add Status and Alarms widget Squashed commits from #1604 --- app/src/main/AndroidManifest.xml | 23 +- .../freeyourgadget/gadgetbridge/Widget.java | 226 ++++++++++++++++++ .../activities/WidgetAlarmsActivity.java | 127 ++++++++++ .../activities/charts/ActivityAnalysis.java | 6 +- .../gadgetbridge/model/DailyTotals.java | 155 ++++++++++++ .../operations/AbstractFetchOperation.java | 3 + app/src/main/res/drawable/widget_preview.png | Bin 0 -> 55080 bytes app/src/main/res/layout/widget.xml | 121 ++++++++++ .../layout/widget_alarms_activity_list.xml | 103 ++++++++ app/src/main/res/values/strings.xml | 21 +- app/src/main/res/xml/widget_info.xml | 14 ++ 11 files changed, 792 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/Widget.java create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DailyTotals.java create mode 100644 app/src/main/res/drawable/widget_preview.png create mode 100644 app/src/main/res/layout/widget.xml create mode 100644 app/src/main/res/layout/widget_alarms_activity_list.xml create mode 100644 app/src/main/res/xml/widget_info.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6e962b68c..dadfcfa39 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -445,7 +445,8 @@ android:resource="@xml/shared_paths" /> - + @@ -456,6 +457,26 @@ android:resource="@xml/sleep_alarm_widget_info" /> + + + + + + + + + + + + . */ +package nodomain.freeyourgadget.gadgetbridge; + +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.widget.RemoteViews; +import android.widget.Toast; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.concurrent.TimeUnit; + +import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenterv2; +import nodomain.freeyourgadget.gadgetbridge.activities.WidgetAlarmsActivity; +import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.model.DailyTotals; +import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; +import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; +import nodomain.freeyourgadget.gadgetbridge.util.GB; + + +public class Widget extends AppWidgetProvider { + public static final String WIDGET_CLICK = "nodomain.freeyourgadget.gadgetbridge.WidgetClick"; + public static final String NEW_DATA_ACTION = "nodomain.freeyourgadget.gadgetbridge.NewDataTrigger"; + public static final String APPWIDGET_DELETED = "nodomain.freeyourgadget.gadgetbridge.APPWIDGET_DELETED"; + public static final String ACTION_DEVICE_CHANGED = "nodomain.freeyourgadget.gadgetbridge.gbdevice.action.device_changed"; + private static final Logger LOG = LoggerFactory.getLogger(Widget.class); + static BroadcastReceiver broadcastReceiver = null; + + private GBDevice getSelectedDevice() { + + Context context = GBApplication.getContext(); + + if (!(context instanceof GBApplication)) { + return null; + } + + GBApplication gbApp = (GBApplication) context; + + return gbApp.getDeviceManager().getSelectedDevice(); + } + + private float[] getSteps() { + Context context = GBApplication.getContext(); + Calendar day = GregorianCalendar.getInstance(); + + if (!(context instanceof GBApplication)) { + return new float[]{0, 0, 0}; + } + DailyTotals ds = new DailyTotals(); + return ds.getDailyTotalsForAllDevices(day); + } + + private String getHM(long value) { + return DateTimeUtils.formatDurationHoursMinutes(value, TimeUnit.MINUTES); + } + + private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, + int appWidgetId) { + + GBDevice device = getSelectedDevice(); + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); + + //onclick refresh + Intent intent = new Intent(context, Widget.class); + intent.setAction(WIDGET_CLICK); + PendingIntent refreshDataIntent = PendingIntent.getBroadcast( + context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + //views.setOnClickPendingIntent(R.id.todaywidget_bottom_layout, refreshDataIntent); + views.setOnClickPendingIntent(R.id.todaywidget_header_bar, refreshDataIntent); + + //open GB main window + Intent startMainIntent = new Intent(context, ControlCenterv2.class); + PendingIntent startMainPIntent = PendingIntent.getActivity(context, 0, startMainIntent, 0); + views.setOnClickPendingIntent(R.id.todaywidget_header_icon, startMainPIntent); + + //alarms popup menu + Intent startAlarmListIntent = new Intent(context, WidgetAlarmsActivity.class); + PendingIntent startAlarmListPIntent = PendingIntent.getActivity(context, 0, startAlarmListIntent, 0); + views.setOnClickPendingIntent(R.id.todaywidget_header_plus, startAlarmListPIntent); + + //charts, requires device + if (device != null) { + Intent startChartsIntent = new Intent(context, ChartsActivity.class); + startChartsIntent.putExtra(GBDevice.EXTRA_DEVICE, device); + PendingIntent startChartsPIntent = PendingIntent.getActivity(context, 0, startChartsIntent, 0); + views.setOnClickPendingIntent(R.id.todaywidget_bottom_layout, startChartsPIntent); + } + + + float[] DailyTotals = getSteps(); + + views.setTextViewText(R.id.todaywidget_steps, context.getString(R.string.widget_steps_label, (int) DailyTotals[0])); + views.setTextViewText(R.id.todaywidget_sleep, context.getString(R.string.widget_sleep_label, getHM((long) DailyTotals[1]))); + + if (device != null) { + String status = String.format("%1s", device.getStateString()); + if (device.isConnected()) { + if (device.getBatteryLevel() > 1) { + status = String.format("Battery %1s%%", device.getBatteryLevel()); + } + } + + views.setTextViewText(R.id.todaywidget_device_status, status); + views.setTextViewText(R.id.todaywidget_device_name, device.getName()); + + } + + // Instruct the widget manager to update the widget + appWidgetManager.updateAppWidget(appWidgetId, views); + } + + public void refreshData() { + Context context = GBApplication.getContext(); + GBDevice device = getSelectedDevice(); + + if (device == null || !device.isInitialized()) { + GB.toast(context, + context.getString(R.string.device_not_connected), + Toast.LENGTH_SHORT, GB.ERROR); + GBApplication.deviceService().connect(); + GB.toast(context, + context.getString(R.string.connecting), + Toast.LENGTH_SHORT, GB.INFO); + + return; + } + GB.toast(context, + context.getString(R.string.busy_task_fetch_activity_data), + Toast.LENGTH_SHORT, GB.INFO); + + GBApplication.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY); + } + + public void updateWidget() { + Context context = GBApplication.getContext(); + + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + ComponentName thisAppWidget = new ComponentName(context.getPackageName(), Widget.class.getName()); + int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); + + onUpdate(context, appWidgetManager, appWidgetIds); + + } + + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + // There may be multiple widgets active, so update all of them + for (int appWidgetId : appWidgetIds) { + updateAppWidget(context, appWidgetManager, appWidgetId); + } + } + + + @Override + public void onEnabled(Context context) { + if (this.broadcastReceiver == null) { + LOG.debug("gbwidget BROADCAST receiver initialized."); + this.broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + LOG.debug("gbwidget BROADCAST, action" + intent.getAction()); + updateWidget(); + } + }; + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(NEW_DATA_ACTION); + intentFilter.addAction(ACTION_DEVICE_CHANGED); + LocalBroadcastManager.getInstance(context).registerReceiver(this.broadcastReceiver, intentFilter); + } + } + + @Override + public void onDisabled(Context context) { + + if (this.broadcastReceiver != null) { + LocalBroadcastManager.getInstance(context).unregisterReceiver(this.broadcastReceiver); + this.broadcastReceiver=null; + } + } + + @Override + public void onReceive(Context context, Intent intent) { + super.onReceive(context, intent); + LOG.debug("gbwidget LOCAL onReceive, action: " + intent.getAction()); + //this handles widget re-connection after apk updates + if (WIDGET_CLICK.equals(intent.getAction())) { + if (this.broadcastReceiver == null) { + onEnabled(context); + } + refreshData(); + //updateWidget(); + } else if (APPWIDGET_DELETED.equals(intent.getAction())) { + onDisabled(context); + } + } + +} + diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java new file mode 100644 index 000000000..a58924d2a --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java @@ -0,0 +1,127 @@ +package nodomain.freeyourgadget.gadgetbridge.activities; + +import android.app.Activity; +import android.content.Context; +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; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Context appContext = this.getApplicationContext(); + if (appContext instanceof GBApplication) { + GBApplication gbApp = (GBApplication) appContext; + GBDevice selectedDevice = gbApp.getDeviceManager().getSelectedDevice(); + if (selectedDevice == null || !selectedDevice.isInitialized()) { + GB.toast(this, + this.getString(R.string.not_connected), + Toast.LENGTH_LONG, GB.WARN); + + } else { + setContentView(R.layout.widget_alarms_activity_list); + int userSleepDuration = new ActivityUser().getSleepDuration(); + textView = findViewById(R.id.alarm5); + if (userSleepDuration > 0) { + textView.setText(String.format(this.getString(R.string.widget_alarm_target_hours), 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().getSleepDuration(); + // 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 + + Context appContext = this.getApplicationContext(); + if (appContext instanceof GBApplication) { + GBApplication gbApp = (GBApplication) appContext; + GBDevice selectedDevice = gbApp.getDeviceManager().getSelectedDevice(); + if (selectedDevice == null || !selectedDevice.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, calendar); + ArrayList alarms = new ArrayList<>(1); + alarms.add(alarm); + GBApplication.deviceService().onSetAlarms(alarms); + + + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java index 155dcf7b2..25e7d342e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java @@ -28,15 +28,15 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; -class ActivityAnalysis { - private static final Logger LOG = LoggerFactory.getLogger(ActivityAnalysis.class); +public class ActivityAnalysis { + public static final Logger LOG = LoggerFactory.getLogger(ActivityAnalysis.class); // store raw steps and duration protected HashMap stats = new HashMap(); // max speed determined from samples private int maxSpeed = 0; - ActivityAmounts calculateActivityAmounts(List samples) { + public ActivityAmounts calculateActivityAmounts(List samples) { ActivityAmount deepSleep = new ActivityAmount(ActivityKind.TYPE_DEEP_SLEEP); ActivityAmount lightSleep = new ActivityAmount(ActivityKind.TYPE_LIGHT_SLEEP); ActivityAmount notWorn = new ActivityAmount(ActivityKind.TYPE_NOT_WORN); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DailyTotals.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DailyTotals.java new file mode 100644 index 000000000..bcd8ff73e --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DailyTotals.java @@ -0,0 +1,155 @@ +/* Copyright (C) 2017-2019 Carsten Pfeiffer, Daniele Gobbetti + + 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 . */ +package nodomain.freeyourgadget.gadgetbridge.model; + +import android.content.Context; +import android.widget.Toast; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Calendar; +import java.util.List; + +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.activities.charts.ActivityAnalysis; +import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; +import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; +import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; +import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; +import nodomain.freeyourgadget.gadgetbridge.util.GB; + + + +public class DailyTotals { + Logger LOG = LoggerFactory.getLogger(DailyTotals.class); + + + public float[] getDailyTotalsForAllDevices(Calendar day) { + Context context = GBApplication.getContext(); + //get today's steps for all devices in GB + float all_steps = 0; + float all_sleep = 0; + + + if (context instanceof GBApplication) { + GBApplication gbApp = (GBApplication) context; + List devices = gbApp.getDeviceManager().getDevices(); + for (GBDevice device : devices) { + float[] all_daily = getDailyTotalsForDevice(device, day); + all_steps += all_daily[0]; + all_sleep += all_daily[1] + all_daily[2]; + } + } + LOG.debug("gbwidget daily totals, all steps:" + all_steps); + LOG.debug("gbwidget daily totals, all sleep:" + all_sleep); + return new float[]{all_steps, all_sleep}; + } + + + public float[] getDailyTotalsForDevice(GBDevice device, Calendar day + ) { + + try (DBHandler handler = GBApplication.acquireDB()) { + ActivityAnalysis analysis = new ActivityAnalysis(); + ActivityAmounts amountsSteps = null; + ActivityAmounts amountsSleep = null; + + amountsSteps = analysis.calculateActivityAmounts(getSamplesOfDay(handler, day, 0, device)); + amountsSleep = analysis.calculateActivityAmounts(getSamplesOfDay(handler, day, -12, device)); + + float[] Sleep = getTotalsSleepForActivityAmounts(amountsSleep); + float Steps = getTotalsStepsForActivityAmounts(amountsSteps); + + return new float[]{Steps, Sleep[0], Sleep[1]}; + + } catch (Exception e) { + + GB.toast("Error loading activity summaries.", Toast.LENGTH_SHORT, GB.ERROR, e); + return new float[]{0, 0, 0}; + } + } + + private float[] getTotalsSleepForActivityAmounts(ActivityAmounts activityAmounts) { + long totalSecondsDeepSleep = 0; + long totalSecondsLightSleep = 0; + for (ActivityAmount amount : activityAmounts.getAmounts()) { + if (amount.getActivityKind() == ActivityKind.TYPE_DEEP_SLEEP) { + totalSecondsDeepSleep += amount.getTotalSeconds(); + } else if (amount.getActivityKind() == ActivityKind.TYPE_LIGHT_SLEEP) { + totalSecondsLightSleep += amount.getTotalSeconds(); + } + } + int totalMinutesDeepSleep = (int) (totalSecondsDeepSleep / 60); + int totalMinutesLightSleep = (int) (totalSecondsLightSleep / 60); + return new float[]{totalMinutesDeepSleep, totalMinutesLightSleep}; + } + + + private float getTotalsStepsForActivityAmounts(ActivityAmounts activityAmounts) { + long totalSteps = 0; + float totalValue = 0; + + for (ActivityAmount amount : activityAmounts.getAmounts()) { + totalSteps += amount.getTotalSteps(); + } + + float[] totalValues = new float[]{totalSteps}; + + for (int i = 0; i < totalValues.length; i++) { + float value = totalValues[i]; + totalValue += value; + } + return totalValue; + } + + + private List getSamplesOfDay(DBHandler db, Calendar day, int offsetHours, GBDevice device) { + int startTs; + int endTs; + + day = (Calendar) day.clone(); // do not modify the caller's argument + day.set(Calendar.HOUR_OF_DAY, 0); + day.set(Calendar.MINUTE, 0); + day.set(Calendar.SECOND, 0); + day.add(Calendar.HOUR, offsetHours); + + startTs = (int) (day.getTimeInMillis() / 1000); + endTs = startTs + 24 * 60 * 60 - 1; + + return getSamples(db, device, startTs, endTs); + } + + + protected List getSamples(DBHandler db, GBDevice device, int tsFrom, int tsTo) { + return getAllSamples(db, device, tsFrom, tsTo); + } + + + protected SampleProvider getProvider(DBHandler db, GBDevice device) { + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); + return coordinator.getSampleProvider(device, db.getDaoSession()); + } + + + protected List getAllSamples(DBHandler db, GBDevice device, int tsFrom, int tsTo) { + SampleProvider provider = getProvider(db, device); + return provider.getAllActivitySamples(tsFrom, tsTo); + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/AbstractFetchOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/AbstractFetchOperation.java index 915db7cd7..1c9d7691b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/AbstractFetchOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/AbstractFetchOperation.java @@ -19,6 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; +import android.content.Intent; import android.content.SharedPreferences; import android.widget.Toast; @@ -126,6 +127,8 @@ public abstract class AbstractFetchOperation extends AbstractHuamiOperation { GB.updateTransferNotification(null, "", false, 100, getContext()); operationFinished(); unsetBusy(); + Intent intent = new Intent("nodomain.freeyourgadget.gadgetbridge.NewDataTrigger"); + getContext().sendBroadcast(intent); } /** diff --git a/app/src/main/res/drawable/widget_preview.png b/app/src/main/res/drawable/widget_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad18604198964b29419757963de0f401aa837ee GIT binary patch literal 55080 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/widget.xml b/app/src/main/res/layout/widget.xml new file mode 100644 index 000000000..e6aca5181 --- /dev/null +++ b/app/src/main/res/layout/widget.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/widget_alarms_activity_list.xml b/app/src/main/res/layout/widget_alarms_activity_list.xml new file mode 100644 index 000000000..c646f189a --- /dev/null +++ b/app/src/main/res/layout/widget_alarms_activity_list.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 96cc3b117..47fd8a23b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -527,10 +527,7 @@ Authenticating Authentication required - Zzz - Add widget Preferred sleep duration in hours - Setting alarm for %1$02d:%2$02d Hardware revision: %1$s Firmware version: %1$s Error creating directory for log files: %1$s @@ -715,5 +712,23 @@ Filter Mode Mode Configuration Save Configuration + Not connected, alarm not set. + Zzz + Add widget + Setting alarm for %1$02d:%2$02d + Sleep Alarm + + Steps: %1$02d + Sleep: %1$s + Status and Alarms + Set alarm after: + 5 minutes + 10 minutes + 20 minutes + 1 hour + Icon + %d hours + + diff --git a/app/src/main/res/xml/widget_info.xml b/app/src/main/res/xml/widget_info.xml new file mode 100644 index 000000000..9bc0b9b98 --- /dev/null +++ b/app/src/main/res/xml/widget_info.xml @@ -0,0 +1,14 @@ + + + +