<?xml version="1.0" encoding="utf-8"?>
<!-- 
    Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
     
     AndroidManifest.xml - 应用清单文件
     定义了应用的基本信息、权限、组件（Activity、Service、Receiver、Provider）等配置
-->
<!-- 
    Manifest根元素
    package: 应用的包名，用于唯一标识应用
    versionCode: 版本代码，用于版本比较（内部版本号）
    versionName: 版本名称，显示给用户的版本号
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.micode.notes"
    android:versionCode="1"
    android:versionName="0.1" >
    
    <!-- ==================== 权限声明区域 ==================== -->
    
    <!-- 写入外部存储权限：用于导出笔记到SD卡、保存图片等 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    <!-- 读取外部存储权限：用于读取图片、导入文件等 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    <!-- 安装快捷方式权限：用于在桌面创建笔记快捷方式 -->
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    
    <!-- 网络访问权限：用于Google Tasks同步、在线语音识别等功能 -->
    <uses-permission android:name="android.permission.INTERNET" />
    
    <!-- 读取联系人权限：用于在笔记中识别电话号码并显示联系人名称 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    
    <!-- 管理账户权限：用于管理Google账户，进行Google Tasks同步 -->
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    
    <!-- 账户认证权限：用于Google账户认证 -->
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    
    <!-- 获取账户列表权限：用于获取系统中的Google账户列表 -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    
    <!-- 使用凭证权限：用于使用Google账户凭证进行同步 -->
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    
    <!-- 接收开机完成广播权限：用于在系统启动后重新设置闹钟提醒 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
    <!-- 录音权限：用于语音识别功能，记录音频输入 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
    <!-- 访问网络状态权限：用于检查网络连接状态（Android 6.0+需要） -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <!-- 读取媒体图片权限：Android 13+（API 33+）需要，用于从相册选择图片 -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <!-- ==================== 应用配置区域 ==================== -->
    
    <!-- 
        Application元素：定义应用的全局配置
        icon: 应用图标
        label: 应用名称（显示在应用列表中）
    -->
    <application
        android:icon="@drawable/icon_app"
        android:label="@string/app_name" >
        
        <!-- ==================== Activity组件 ==================== -->
        
        <!-- 
            笔记列表Activity - 应用主界面
            功能：显示笔记列表、文件夹管理、搜索等
            configChanges: 配置变化时不重启Activity（键盘、屏幕方向、屏幕尺寸）
            launchMode: singleTop - 如果Activity已在栈顶，则复用实例
            uiOptions: 窄屏时分割操作栏
            windowSoftInputMode: adjustPan - 软键盘弹出时平移窗口
            exported: true - 允许其他应用启动此Activity
        -->
        <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过滤器：应用入口，显示在应用列表中 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- 搜索Intent过滤器：支持系统搜索功能 -->
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <!-- 搜索配置元数据：指定搜索配置文件 -->
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

        <!-- 
            笔记编辑Activity
            功能：创建和编辑笔记内容
            configChanges: 配置变化时不重启Activity
            launchMode: singleTop - 如果Activity已在栈顶，则复用实例
            exported: true - 允许其他应用启动此Activity
        -->
        <activity
            android:name=".ui.NoteEditActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:launchMode="singleTop"
            android:theme="@style/NoteTheme"
            android:exported="true">
            <!-- 查看笔记Intent过滤器：支持查看文本笔记和通话记录笔记 -->
            <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过滤器：支持创建或编辑笔记 -->
            <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>
        </activity>


        <!-- ==================== ContentProvider组件 ==================== -->
        
        <!-- 
            笔记数据提供者
            功能：提供笔记数据的访问接口，支持其他应用访问笔记数据
            authorities: 内容提供者的唯一标识符
            multiprocess: true - 允许在多个进程中运行
        -->
        <provider
            android:name="net.micode.notes.data.NotesProvider"
            android:authorities="micode_notes"
            android:multiprocess="true" />

        <!-- ==================== BroadcastReceiver组件 ==================== -->
        
        <!-- 
            2x2尺寸桌面小部件提供者
            功能：提供2x2尺寸的桌面小部件，显示笔记内容
            exported: true - 允许系统启动此Receiver
        -->
        <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>
            <!-- 小部件配置元数据：指定小部件的配置文件 -->
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_2x_info" />
        </receiver>
        
        <!-- 
            4x4尺寸桌面小部件提供者
            功能：提供4x4尺寸的桌面小部件，显示更多笔记内容
            exported: true - 允许系统启动此Receiver
        -->
        <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>

        <!-- 
            闹钟初始化接收器
            功能：在系统启动完成后重新设置所有笔记的闹钟提醒
            exported: true - 允许系统启动此Receiver
        -->
        <receiver android:name=".ui.AlarmInitReceiver"
            android:exported="true">
            <intent-filter>
                <!-- 开机完成广播：系统启动完成后触发 -->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <!-- 
            闹钟提醒接收器
            功能：接收闹钟提醒广播，启动提醒界面
            process: :remote - 在独立进程中运行，避免影响主进程
        -->
        <receiver
            android:name="net.micode.notes.ui.AlarmReceiver"
            android:process=":remote" >
        </receiver>

        <!-- ==================== 其他Activity组件 ==================== -->
        
        <!-- 
            闹钟提醒Activity
            功能：显示笔记提醒对话框，播放提醒声音
            launchMode: singleInstance - 独立任务栈，确保只有一个实例
            theme: 使用壁纸主题，无标题栏
        -->
        <activity
            android:name=".ui.AlarmAlertActivity"
            android:label="@string/app_name"
            android:launchMode="singleInstance"
            android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
        </activity>

        <!-- 
            设置Activity
            功能：应用设置界面，管理同步账户、背景颜色等偏好设置
            launchMode: singleTop - 如果Activity已在栈顶，则复用实例
            theme: 使用浅色主题
        -->
        <activity
            android:name="net.micode.notes.ui.NotesPreferenceActivity"
            android:label="@string/preferences_title"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Holo.Light" >
        </activity>
        
        <!-- 
            回收站Activity
            功能：显示和管理已删除的便签，支持恢复和彻底删除
            launchMode: singleTop - 如果Activity已在栈顶，则复用实例
            exported: true - 允许其他应用启动此Activity
        -->
        <activity
            android:name=".ui.TrashActivity"
            android:label="@string/menu_trash"
            android:launchMode="singleTop"
            android:theme="@style/NoteTheme"
            android:exported="true" >
        </activity>
        
        <!-- 
            密码输入Activity
            功能：输入加密便签的密码，验证后跳转到编辑界面
            exported: false - 不允许其他应用启动，仅内部使用
        -->
        <activity
            android:name=".ui.PasswordInputActivity"
            android:label="@string/password_input_title"
            android:theme="@style/NoteTheme"
            android:exported="false" >
        </activity>

        <!-- ==================== Service组件 ==================== -->
        
        <!-- 
            Google Tasks同步服务
            功能：在后台执行Google Tasks同步操作
            exported: false - 不允许其他应用启动，仅内部使用
        -->
        <service
            android:name="net.micode.notes.gtask.remote.GTaskSyncService"
            android:exported="false" >
        </service>

        <!-- ==================== 应用元数据 ==================== -->
        
        <!-- 
            默认搜索Activity配置
            功能：指定应用的默认搜索Activity为NotesListActivity
        -->
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".ui.NotesListActivity" />

        <!--        <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>