<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="io.heckel.ntfy">
    <!-- Permissions -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <!-- For instant delivery foregrounds service -->
    <uses-permission android:name="android.permission.WAKE_LOCK"/> <!-- To keep foreground service awake; soon not needed anymore -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!-- To restart service on reboot -->
    <uses-permission android:name="android.permission.VIBRATE"/> <!-- Incoming notifications should be able to vibrate the phone -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/> <!-- Only required on SDK <= 28 -->
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <!-- To install packages downloaded through ntfy; craazyy! -->
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <!-- To reschedule the websocket retry -->

    <application
            android:name=".app.Application"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            android:networkSecurityConfig="@xml/network_security_config"
            android:usesCleartextTraffic="true">

        <!-- Main activity -->
        <activity
                android:name=".ui.MainActivity"
                android:label="@string/app_name"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <!-- Detail activity -->
        <activity
                android:name=".ui.DetailActivity"
                android:parentActivityName=".ui.MainActivity">
            <meta-data
                    android:name="android.support.PARENT_ACTIVITY"
                    android:value=".ui.MainActivity"/>
        </activity>

        <!-- Settings activity -->
        <activity
                android:name=".ui.SettingsActivity"
                android:parentActivityName=".ui.MainActivity">
            <meta-data
                    android:name="android.support.PARENT_ACTIVITY"
                    android:value=".ui.MainActivity"/>
        </activity>

        <!-- Detail settings activity -->
        <activity
                android:name=".ui.DetailSettingsActivity"
                android:parentActivityName=".ui.DetailActivity">
        </activity>

        <!-- Share file activity, incoming files/shares -->
        <activity android:name=".ui.ShareActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/*" />
                <data android:mimeType="text/*" />
                <data android:mimeType="audio/*" />
                <data android:mimeType="video/*" />
                <data android:mimeType="application/*" />
            </intent-filter>
        </activity>

        <!-- Subscriber foreground service for hosts other than ntfy.sh -->
        <service android:name=".service.SubscriberService"/>

        <!-- Subscriber service restart on reboot -->
        <receiver
                android:name=".service.SubscriberService$BootStartReceiver"
                android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

        <!-- Subscriber service restart on destruction -->
        <receiver
                android:name=".service.SubscriberService$AutoRestartReceiver"
                android:enabled="true"
                android:exported="false"/>

        <!-- Broadcast receiver to send messages via intents -->
        <receiver
                android:name=".msg.BroadcastService$BroadcastReceiver"
                android:enabled="true"
                android:exported="true">
            <intent-filter>
                <action android:name="io.heckel.ntfy.SEND_MESSAGE"/>
            </intent-filter>
        </receiver>

        <!-- Broadcast receiver for UnifiedPush; must match https://github.com/UnifiedPush/UP-spec/blob/main/specifications.md -->
        <receiver
                android:name=".up.BroadcastReceiver"
                android:enabled="true"
                android:exported="true">
            <intent-filter>
                <action android:name="org.unifiedpush.android.distributor.REGISTER"/>
                <action android:name="org.unifiedpush.android.distributor.UNREGISTER"/>
            </intent-filter>
        </receiver>

        <!-- Broadcast receiver for the "Download"/"Cancel" attachment action in the notification popup -->
        <receiver
                android:name=".msg.NotificationService$DownloadBroadcastReceiver"
                android:enabled="true"
                android:exported="false">
        </receiver>

        <!-- Firebase messaging (note that this is empty in the F-Droid flavor) -->
        <service
                android:name=".firebase.FirebaseService"
                android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <meta-data
                android:name="firebase_analytics_collection_enabled"
                android:value="false"/>
        <meta-data
                android:name="com.google.firebase.messaging.default_notification_icon"
                android:resource="@drawable/ic_notification"/>

        <!-- FileProvider required for older Android versions (<= P), to allow passing the file URI in the open intent.
             Avoids "exposed beyond app through Intent.getData" exception, see see https://stackoverflow.com/a/57288352/1440785 -->
        <provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="${applicationId}.provider"
                android:exported="false"
                android:grantUriPermissions="true">
            <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_paths"/>
        </provider>
    </application>
</manifest>
