<?xml version="1.0" encoding="UTF-8"?>

<!--
 * Apache 2.0 License
 *
 * Copyright (c) Sebastian Katzer 2017
 * Copyright (c) Manuel Beck 2024
 *
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apache License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://opensource.org/licenses/Apache-2.0/ and read it before using this
 * file.
 *
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
-->

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android"
        id="cordova-plugin-local-notification"
        version="1.2.3">

    <name>LocalNotification</name>

    <description>Schedules and queries for local notifications</description>

    <repo>https://github.com/katzer/cordova-plugin-local-notifications.git</repo>

    <keywords>notification, local notification, user notification</keywords>

    <license>Apache 2.0</license>

    <author>Sebastián Katzer and Manuel Beck</author>

    <dependency id="cordova-plugin-device" version=">=3.0.0" />

    <!-- js -->
    <js-module src="www/local-notification.js" name="LocalNotification">
        <clobbers target="cordova.plugins.notification.local" />
    </js-module>

    <!-- ios -->
    <platform name="ios">
        <config-file target="config.xml" parent="/*">
            <feature name="LocalNotification">
                <param name="ios-package" value="APPLocalNotification" onload="true" />
                <param name="onload" value="true" />
            </feature>
        </config-file>

        <framework src="UserNotifications.framework" />
        <framework src="CoreLocation.framework" />

        <header-file src="src/ios/APPLocalNotification.h" />
        <source-file src="src/ios/APPLocalNotification.m" />

        <header-file src="src/ios/APPNotificationCategory.h" />
        <source-file src="src/ios/APPNotificationCategory.m" />

        <header-file src="src/ios/APPNotificationContent.h" />
        <source-file src="src/ios/APPNotificationContent.m" />

        <header-file src="src/ios/APPNotificationOptions.h" />
        <source-file src="src/ios/APPNotificationOptions.m" />

        <header-file src="src/ios/UNUserNotificationCenter+APPLocalNotification.h" />
        <source-file src="src/ios/UNUserNotificationCenter+APPLocalNotification.m" />

        <header-file src="src/ios/UNNotificationRequest+APPLocalNotification.h" />
        <source-file src="src/ios/UNNotificationRequest+APPLocalNotification.m" />
    </platform>

    <!-- android -->
    <platform name="android">
        <!--
          Enable Cordova-Android's Kotlin support
          Note: This is only needed for Cordova-Android 13.0.0 and lower.
          For cordova-android 14.0.0 this can be removed.
        -->
        <config-file target="config.xml" parent="/*">
            <preference name="GradlePluginKotlinEnabled" value="true" />
        </config-file>

        <framework src="src/android/build/localnotification.gradle" custom="true" type="gradleReference"/>

        <preference name="ANDROIDX_CORE_VERSION" default="1.12.0"/>
        <framework src="androidx.core:core:$ANDROIDX_CORE_VERSION" />

        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="LocalNotification">
                <param name="android-package" value="de.appplant.cordova.plugin.localnotification.LocalNotification"/>
            </feature>
        </config-file>

        <config-file target="AndroidManifest.xml" parent="/manifest/application">

            <!--
              FileProvider to share files located in "[App path]/files/shared_files" and make them accessible through an content:// Uri.
              Asset files, where the www files are, are not accessible by a "file:///android_asset"  Uri. To make them
              accessible, they are copied to a shared folder and can be accessed by a content:// Uri.
              You can also put your own files there with cordova-plugin-file. To access the directory use
              cordova.file.dataDirectory + 'shared_files'. To use the file in this plugin, you can use "shared://myFile.png",
              which would point to cordova.file.dataDirectory + 'shared_files/myFile.png'.

              Explanation of the attributes:
              android:exported="false": The FileProvider ist not public
              android:grantUriPermissions="true": Grant temporary access to files
            -->
            <provider
                android:name="de.appplant.cordova.plugin.localnotification.util.PluginFileProvider"
                android:authorities="${applicationId}.localnotifications.provider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/shared_files_provider_paths"/>
            </provider>

            <!--
              Activity used to handle notification or action clicks without trampoline error on Android 12+,
              when the app should be started from the background or killed state.

              Explanation of the attributes:
              - android:taskAffinity="": Combined with the FLAG_ACTIVITY_NEW_TASK flag that you use in code,
                set this attribute blank to ensure this activity doesn't go into the app's default task.
                Any existing tasks that have the app's default affinity aren't affected.
              - android:excludeFromRecents="true": Excludes the new task from the Recents screen so that
                the user can't accidentally navigate back to it.
            -->
            <activity
                android:name="de.appplant.cordova.plugin.localnotification.ClickActivity"
                android:launchMode="singleTask"
                android:taskAffinity=""
                android:excludeFromRecents="true" />
            
            <!-- A notification will be triggered/shown -->
            <receiver
                android:name="de.appplant.cordova.plugin.localnotification.receiver.TriggerReceiver"
                android:exported="false" />

            <!-- Notification cleared by the user -->
            <receiver
                android:name="de.appplant.cordova.plugin.localnotification.receiver.ClearReceiver"
                android:exported="false" />

            <receiver
                android:name="de.appplant.cordova.plugin.localnotification.receiver.RestoreReceiver"
                android:exported="false" >
                <intent-filter>
                    <!--
                      Reschedule all alarms, when the device is booted and unlocked by the user
                    -->
                    <action android:name="android.intent.action.BOOT_COMPLETED" />

                    <!--
                      Reschedule all alarms, when the app is updated
                    -->
                    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />

                    <!--
                     An app is granted the Manifest.permission.SCHEDULE_EXACT_ALARM permission.
                     When the user revokes the Manifest.permission.SCHEDULE_EXACT_ALARM permission, all alarms scheduled with
                     setExact(int, long, PendingIntent), setExactAndAllowWhileIdle(int, long, PendingIntent) and setAlarmClock(android.app.AlarmManager.AlarmClockInfo, android.app.PendingIntent)
                     will be deleted.
                     This broadcast will not be sent when the user revokes the permission.
                    -->
                    <action android:name="android.app.action.SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED" />
                </intent-filter>
            </receiver>
        </config-file>

        <config-file target="AndroidManifest.xml" parent="/manifest">
            <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

            <!-- Needed, to turn the screen on, when a notification is posted -->
            <uses-permission android:name="android.permission.WAKE_LOCK" />

            <!-- Runtime permission for Android 13 and higher to post notifications -->
            <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
        </config-file>

        <source-file
            src="src/android/xml/shared_files_provider_paths.xml"
            target-dir="res/xml" />

        <source-file
            src="src/android/LocalNotification.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification" />

        <source-file
            src="src/android/ClickActivity.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification" />

        <source-file
            src="src/android/receiver/ClearReceiver.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/receiver" />

        <source-file
            src="src/android/receiver/RestoreReceiver.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/receiver" />

        <source-file
            src="src/android/receiver/TriggerReceiver.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/receiver" />

        <source-file
            src="src/android/action/Action.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/action" />

        <source-file
            src="src/android/action/ActionGroup.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/action" />

        <source-file
            src="src/android/trigger/TriggerHandler.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/trigger" />

        <source-file
            src="src/android/trigger/TriggerHandlerAt.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/trigger" />

        <source-file
            src="src/android/trigger/TriggerHandlerIn.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/trigger" />

        <source-file
            src="src/android/trigger/TriggerHandlerEvery.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/trigger" />

        <source-file
            src="src/android/util/PluginFileProvider.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/util" />

        <source-file
            src="src/android/util/AssetUtil.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/util" />

        <source-file
            src="src/android/util/CallbackContextUtil.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification/util" />

        <source-file
            src="src/android/Manager.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification" />

        <source-file
            src="src/android/Notification.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification" />

        <source-file
            src="src/android/Options.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification" />

        <source-file
            src="src/android/OptionsTrigger.java"
            target-dir="src/de/appplant/cordova/plugin/localnotification" />
    </platform>

</plugin>
