feat(android): add AndroidManifest, BootReceiver, widget XML configs

This commit is contained in:
saravanakumardb1 2026-02-27 23:07:54 -08:00
parent b68bd22cc3
commit 09e78d0920
4 changed files with 146 additions and 0 deletions

View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Exact alarm scheduling (Android 12+) -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
<!-- Notifications -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Wake device for alarms -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- Full-screen intent for critical alarms -->
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<!-- Foreground service for active timer display -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<application
android:name=".ChronoMindApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="ChronoMind"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ChronoMind">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.ChronoMind"
android:showOnLockScreen="true"
android:turnScreenOn="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Universal Links for shared timers -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="chronomind.app" android:pathPrefix="/t/" />
<data android:scheme="https" android:host="chronomind.app" android:pathPrefix="/ref/" />
</intent-filter>
</activity>
<!-- Alarm Receiver -->
<receiver
android:name=".notifications.TimerAlarmReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.chronomind.ACTION_SNOOZE" />
<action android:name="com.chronomind.ACTION_DISMISS" />
</intent-filter>
</receiver>
<!-- Boot Receiver — reschedule alarms after reboot -->
<receiver
android:name=".notifications.BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<!-- Widgets -->
<receiver
android:name=".widget.TimerWidgetSmallReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_small_info" />
</receiver>
<receiver
android:name=".widget.TimerWidgetMediumReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_medium_info" />
</receiver>
<receiver
android:name=".widget.TimerWidgetLargeReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_large_info" />
</receiver>
</application>
</manifest>

View File

@ -0,0 +1,16 @@
package com.chronomind.app.notifications
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
// Reschedule all active timer alarms after device reboot
// In production, load timers from Room DB and reschedule each
val manager = TimerNotificationManager(context)
manager.createNotificationChannels()
}
}
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="250dp"
android:minHeight="110dp"
android:targetCellWidth="4"
android:targetCellHeight="2"
android:updatePeriodMillis="60000"
android:initialLayout="@layout/widget_placeholder"
android:resizeMode="horizontal"
android:widgetCategory="home_screen"
android:description="@string/widget_medium_description" />

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="110dp"
android:minHeight="110dp"
android:targetCellWidth="2"
android:targetCellHeight="2"
android:updatePeriodMillis="60000"
android:initialLayout="@layout/widget_placeholder"
android:resizeMode="none"
android:widgetCategory="home_screen"
android:description="@string/widget_small_description" />