<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!--
     * 应用所需权限声明
     * 注意：从 Android 6.0 (API level 23) 开始，部分权限需要在运行时动态申请
     -->

    <!-- 允许应用写入外部存储（如 SD 卡） -->
    <!-- 注意：从 Android 10 开始，建议使用 Scoped Storage 替代此权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- 允许应用在主屏幕上创建快捷方式 -->
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

    <!-- 允许应用访问网络连接 -->
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- 允许应用读取用户的联系人数据 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <!-- 允许应用管理账户（如添加、删除账户） -->
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

    <!-- 允许应用执行账户认证 -->
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />

    <!-- 允许应用获取账户列表 -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <!-- 允许应用使用账户凭证 -->
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />

    <!-- 允许应用接收系统启动完成的广播 -->
    <!-- 用于在设备启动后重新设置闹钟等任务 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
        tools:targetApi="31">

        <!--
         * 应用主界面活动：笔记列表
         * 特性：
         * - singleTop 启动模式：避免重复创建相同的 Activity 实例
         * - 处理屏幕旋转和键盘显示等配置变化
         * - 支持分屏操作（splitActionBarWhenNarrow）
         -->
        <activity
            android:name=".ui.NotesListActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:theme="@style/NoteTheme"
            android:uiOptions="splitActionBarWhenNarrow"
            android:windowSoftInputMode="adjustPan"
            android:exported="true">

            <!-- 应用启动入口点 -->
            <!-- 系统启动器通过此 intent-filter 识别应用图标和启动 Activity -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!--
         * 笔记编辑活动
         * 支持以下操作：
         * - 查看现有笔记（VIEW 操作）
         * - 创建或编辑笔记（INSERT_OR_EDIT 操作）
         * - 搜索笔记内容（SEARCH 操作）
         -->
        <activity
            android:name=".ui.NoteEditActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:launchMode="singleTop"
            android:theme="@style/NoteTheme"
            android:exported="true">

            <!-- 处理查看笔记请求的意图过滤器 -->
            <!-- 支持两种 MIME 类型：文本笔记和通话笔记 -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/text_note" />
                <data android:mimeType="vnd.android.cursor.item/call_note" />
            </intent-filter>

            <!-- 处理插入或编辑笔记请求的意图过滤器 -->
            <!-- 同样支持文本笔记和通话笔记两种类型 -->
            <intent-filter>
                <action android:name="android.intent.action.INSERT_OR_EDIT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/text_note" />
                <data android:mimeType="vnd.android.cursor.item/call_note" />
            </intent-filter>

            <!-- 搜索功能的意图过滤器 -->
            <!-- 与下面的 searchable 元数据配合实现搜索功能 -->
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <!-- 配置搜索功能的元数据 -->
            <!-- @xml/searchable 文件定义了搜索框的样式和搜索逻辑 -->
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

        <!--
         * 内容提供者：用于管理和访问应用的笔记数据
         * - authorities 指定内容提供者的唯一标识符
         * - multiprocess 允许在多个进程中实例化此提供者
         -->
        <provider
            android:name="net.micode.notes.data.NotesProvider"
            android:authorities="micode_notes"
            android:multiprocess="true" />

        <!--
         * 2x2 尺寸的桌面小部件
         * 响应以下广播事件：
         * - APPWIDGET_UPDATE：小部件更新事件
         * - APPWIDGET_DELETED：小部件删除事件
         * - PRIVACY_MODE_CHANGED：隐私模式变更事件
         -->
        <receiver
            android:name=".widget.NoteWidgetProvider_2x"
            android:label="@string/app_widget2x2"
            android:exported="true">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
                <action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
            </intent-filter>

            <!-- 小部件配置元数据 -->
            <!-- @xml/widget_2x_info 定义了小部件的布局、更新周期等信息 -->
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_2x_info" />
        </receiver>

        <!--
         * 4x4 尺寸的桌面小部件
         * 功能与 2x2 小部件类似，但提供更大的显示区域
         -->
        <receiver
            android:name=".widget.NoteWidgetProvider_4x"
            android:label="@string/app_widget4x4"
            android:exported="true">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
                <action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
            </intent-filter>

            <!-- 小部件配置元数据 -->
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_4x_info" />
        </receiver>

        <!--
         * 开机初始化接收器
         * 响应系统启动完成广播（BOOT_COMPLETED）
         * 主要用于重新设置已安排的闹钟提醒
         -->
        <receiver android:name=".ui.AlarmInitReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <!--
         * 闹钟提醒接收器
         * 在单独的进程中运行（:remote）
         * 处理闹钟触发事件并启动提醒界面
         -->
        <receiver
            android:name="net.micode.notes.ui.AlarmReceiver"
            android:process=":remote" >
        </receiver>

        <!--
         * 闹钟提醒活动
         * 以 singleInstance 模式启动
         * 使用全屏无标题栏主题，确保在锁屏状态下也能显示
         -->
        <activity
            android:name=".ui.AlarmAlertActivity"
            android:label="@string/app_name"
            android:launchMode="singleInstance"
            android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
        </activity>

        <!--
         * 应用设置偏好活动
         * 提供应用内设置选项（如主题、通知等）
         * 使用 Holo.Light 主题提供简洁的设置界面
         -->
        <activity
            android:name="net.micode.notes.ui.NotesPreferenceActivity"
            android:label="@string/preferences_title"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Holo.Light" >
        </activity>

        <!--
         * Google 任务同步服务
         * 用于与 Google Tasks 同步笔记数据
         * 设计为不可导出服务，仅由应用内部调用
         -->
        <service
            android:name="net.micode.notes.gtask.remote.GTaskSyncService"
            android:exported="false" >
        </service>

        <!--
         * 默认搜索活动配置
         * 指定 NoteEditActivity 作为应用的默认搜索处理活动
         -->
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".ui.NoteEditActivity" />

        <!--
         * 注释掉的主活动示例
         * 保留此代码作为参考，展示另一种主活动配置方式
         * 注意：一个应用只能有一个 MAIN/LAUNCHER intent-filter
         -->
        <!--
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        -->

    </application>

</manifest>