feat(android): add AndroidManifest, BootReceiver, widget XML configs
This commit is contained in:
parent
b68bd22cc3
commit
09e78d0920
108
android/app/src/main/AndroidManifest.xml
Normal file
108
android/app/src/main/AndroidManifest.xml
Normal 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>
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
11
android/app/src/main/res/xml/widget_medium_info.xml
Normal file
11
android/app/src/main/res/xml/widget_medium_info.xml
Normal 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" />
|
||||
11
android/app/src/main/res/xml/widget_small_info.xml
Normal file
11
android/app/src/main/res/xml/widget_small_info.xml
Normal 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" />
|
||||
Loading…
Reference in New Issue
Block a user