6 Commits
Author SHA1 Message Date
me b4f8f37c79 android, change manifest label to be human friendly. 2026-09-28 05:30:58 -07:00
me b4acaa308d main, alarm is now successfully working on Android! 2026-09-28 05:14:34 -07:00
me 14372df628 android, re-enable manifest alarm code. 2026-09-28 05:00:02 -07:00
me c32373173b main, re-enable alarm code. 2026-09-28 04:59:46 -07:00
me 64a070fb4e Update version. 2026-09-28 04:56:47 -07:00
me bb1118d071 Add yml file for F-Droid repo. 2026-09-28 04:56:19 -07:00
4 changed files with 32 additions and 19 deletions

No files matched your search

+6 -8
View File
@@ -3,13 +3,14 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
> >
<!-- Allow notifications to work. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.USE_EXACT_ALARM"/> <uses-permission android:name="android.permission.USE_EXACT_ALARM"/>
<!-- <!-- Allow alarms to work. -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>
@@ -25,10 +26,9 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
-->
<application <application
android:label="sunset_alarm" android:label="Sunset Alarm"
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"> android:icon="@mipmap/ic_launcher">
<activity <activity
@@ -59,6 +59,7 @@
android:name="flutterEmbedding" android:name="flutterEmbedding"
android:value="2" /> android:value="2" />
<!-- Allow notifications to work. -->
<receiver <receiver
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver"
android:enabled="true" /> android:enabled="true" />
@@ -74,16 +75,14 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<!-- <!-- Allow alarms to work. -->
<service <service
android:name="com.gdelataillade.alarm.AlarmService" android:name="com.gdelataillade.alarm.AlarmService"
android:foregroundServiceType="mediaPlayback" android:foregroundServiceType="mediaPlayback"
android:exported="false" /> android:exported="false" />
<receiver <receiver
android:name="com.gdelataillade.alarm.AlarmBroadcastReceiver" android:name="com.gdelataillade.alarm.AlarmBroadcastReceiver"
android:exported="false" /> android:exported="false" />
<receiver <receiver
android:name="com.gdelataillade.alarm.BootBroadcastReceiver" android:name="com.gdelataillade.alarm.BootBroadcastReceiver"
android:enabled="false" android:enabled="false"
@@ -92,7 +91,6 @@
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </intent-filter>
</receiver> </receiver>
<service <service
android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmService" android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmService"
android:permission="android.permission.BIND_JOB_SERVICE" android:permission="android.permission.BIND_JOB_SERVICE"
@@ -111,7 +109,7 @@
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </intent-filter>
</receiver> </receiver>
-->
</application> </application>
<!-- Required to query activities that can process text, see: <!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and https://developer.android.com/training/package-visibility and
+16
View File
@@ -0,0 +1,16 @@
AuthorName: 'Chad Michael "Hyperling" Greenwood'
AuthorEmail: 'me@hyperling.com'
AuthorWebSite: 'https://hyperling.com/about/'
Donate: 'https://hyperling.com/donate/'
Liberapay: 'HyperVegan'
Bitcoin: 'bc1qsfe8dkvry3d34kztz449gkq67wq8fu2nkgfkh0'
Litecoin: 'ltc1qavmpu5d6ljntxsd6jj548m4yys83zwscl0dzkx'
IssueTracker: 'https://hyperling.com/contact/'
Categories:
- fdroid
- hyperling
- utilities
Name: Sunset Timer
Summary: 'Play a notification at your chosen time before sunset.'
SourceCode: 'https://git.hyperling.com/me/flutter-sunset-alarm/'
WebSite: 'https://hyperling.com/apps/#sunset'
+9 -10
View File
@@ -6,16 +6,15 @@ import 'package:geolocator/geolocator.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:timezone/data/latest_all.dart' as tz; import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
//import 'package:alarm/alarm.dart'; import 'package:alarm/alarm.dart';
import 'dart:convert'; import 'dart:convert';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
tz.initializeTimeZones(); tz.initializeTimeZones();
//await Alarm.init(); await Alarm.init();
runApp(const SunsetAlarmApp()); runApp(const SunsetAlarmApp());
} }
@@ -232,7 +231,7 @@ class _HomeScreenState extends State<HomeScreen> {
'Alarm set for ${alarmTime.hour.toString().padLeft(2, '0')}:${alarmTime.minute.toString().padLeft(2, '0')} (app must stay open)', 'Alarm set for ${alarmTime.hour.toString().padLeft(2, '0')}:${alarmTime.minute.toString().padLeft(2, '0')} (app must stay open)',
); );
} else if (Platform.isAndroid) { } else if (Platform.isAndroid) {
/*** Notifcation Method - Works ***/ /*** Notifcation Method - Works *** /
// Android: use zonedSchedule (works in background) // Android: use zonedSchedule (works in background)
final tzAlarm = tz.TZDateTime.from(alarmTime, tz.local); final tzAlarm = tz.TZDateTime.from(alarmTime, tz.local);
const androidDetails = AndroidNotificationDetails( const androidDetails = AndroidNotificationDetails(
@@ -258,22 +257,22 @@ class _HomeScreenState extends State<HomeScreen> {
debugPrint('DEBUG: ${_notifications.toString()}'); debugPrint('DEBUG: ${_notifications.toString()}');
// End Notification Method ***/ // End Notification Method ***/
/*** Alarm Method - WIP *** / /*** Alarm Method - WIP ***/
// Schedule: // Schedule:
final settings = AlarmSettings( final settings = AlarmSettings(
id: 42, id: _alarmId,
dateTime: alarmTime, // your computed sunset time dateTime: alarmTime, // your computed sunset time
assetAudioPath: 'assets/alarm.mp3', // put an alarm sound in assets/ //assetAudioPath: 'assets/alarm.mp3', // put an alarm sound in assets/
loopAudio: true, // keeps ringing until dismissed loopAudio: true, // keeps ringing until dismissed
vibrate: true, vibrate: true,
androidFullScreenIntent: true, // wakes screen like clock app androidFullScreenIntent: true, // wakes screen like clock app
volumeSettings: VolumeSettings.fade( volumeSettings: VolumeSettings.fade(
volume: 0.8, volume: 0.8,
fadeDuration: Duration(seconds: 5), fadeDuration: Duration(seconds: 60),
), ),
notificationSettings: const NotificationSettings( notificationSettings: NotificationSettings(
title: 'Sunset Alarm', title: 'Sunset Alarm',
body: 'The sun sets now. Time to get ready!', body: 'Sun is setting in ${_minutesBefore} minute(s)!',
stopButton: 'Dismiss', stopButton: 'Dismiss',
), ),
); );
+1 -1
View File
@@ -1,7 +1,7 @@
name: sunset_alarm name: sunset_alarm
description: "Set an alarm to go off a specified time before sunset." description: "Set an alarm to go off a specified time before sunset."
publish_to: 'none' publish_to: 'none'
version: 0.1.2 version: 0.2.0
environment: environment:
sdk: ^3.7.2 sdk: ^3.7.2