//// ====================== 同步时间显示控制 ======================
 设置最后一次同步时间的UI显示逻辑
if (GTaskSyncService.isSyncing()) {                             // 检测同步服务是否正在运行
    lastSyncTimeView.setText(GTaskSyncService.getProgressString()); // 显示动态同步进度文本
    lastSyncTimeView.setVisibility(View.VISIBLE);               // 确保视图可见
} else {                                                        // 未处于同步状态时
    long lastSyncTime = getLastSyncTime(this);                  // 从SharedPreferences获取存储的时间戳
    if (lastSyncTime != 0) {                                    // 存在有效同步记录
        lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
                DateFormat.format(getString(R.string.preferences_last_sync_time_format),
                        lastSyncTime)));                        // 格式化时间为"yyyy-MM-dd HH:mm"样式
        lastSyncTimeView.setVisibility(View.VISIBLE);           // 显示时间文本
    } else {                                                    // 无同步记录
        lastSyncTimeView.setVisibility(View.GONE);              // 隐藏视图避免空白区域
    }
}

// ====================== 界面刷新方法 ======================
private void refreshUI() {
    loadAccountPreference();  // 更新顶部账户名称显示（调用内部方法）
    loadSyncButton();         // 控制同步按钮的可用状态（如网络未连接时禁用）
}

// ====================== 账户选择对话框 ======================
private void showSelectAccountAlertDialog() {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); // 创建对话框构建器

    // 构建自定义标题布局
    View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); // 加载布局文件
    TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); // 获取标题TextView
    titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); // 设置主标题文本
    TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); // 副标题视图
    subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); // 设置提示性文字
    dialogBuilder.setCustomTitle(titleView); // 应用自定义标题布局

    dialogBuilder.setPositiveButton(null, null); // 移除默认确认按钮（因使用单选列表交互）

    Account[] accounts = getGoogleAccounts(); // 通过AccountManager获取设备上所有Google账户
    String defAccount = getSyncAccountName(this); // 从SharedPreferences读取当前选中的账户名

    mOriAccounts = accounts;                   // 类成员变量缓存账户列表（用于后续比较是否新增账户）
    mHasAddedAccount = false;                  // 标记位标识用户是否执行了添加账户操作

    if (accounts.length > 0) {                // 存在可用账户时构建单选列表
        CharSequence[] items = new CharSequence[accounts.length]; // 准备显示项数组
        final CharSequence[] itemMapping = items; // 用于内部类访问的final引用
        int checkedItem = -1;                 // 默认没有选中项（-1表示无选中）
        int index = 0;                         // 数组索引计数器
        for (Account account : accounts) {     // 遍历所有Google账户
            if (TextUtils.equals(account.name, defAccount)) { // 匹配当前选中账户
                checkedItem = index;           // 记录选中项位置
            }
            items[index++] = account.name;     // 将账户名存入显示项数组
        }
        // 设置单选列表项及选择监听
        dialogBuilder.setSingleChoiceItems(items, checkedItem,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        setSyncAccount(itemMapping[which].toString()); // 用户点击时更新选中账户
                        dialog.dismiss();      // 关闭对话框
                        refreshUI();           // 刷新界面显示新账户
                    }
                });
    }

    // 添加"新建账户"入口
    View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); // 加载布局
    dialogBuilder.setView(addAccountView);     // 将布局添加到对话框底部

    final AlertDialog dialog = dialogBuilder.show(); // 显示完整对话框
    addAccountView.setOnClickListener(new View.OnClickListener() { // 处理添加账户点击事件
        @Override
        public void onClick(View v) {
            mHasAddedAccount = true;           // 标记已触发添加账户操作
            Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); // 系统级添加账户Intent
            intent.putExtra(AUTHORITIES_FILTER_KEY, new String[]{"gmail-ls"}); // 过滤只显示Gmail类账户
            startActivityForResult(intent, -1); // 启动系统界面（-1为临时请求码，建议改为常量）
            dialog.dismiss();                  // 关闭当前对话框
        }
    });
}

// ====================== 账户变更确认对话框 ======================
private void showChangeAccountConfirmAlertDialog() {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); // 新建对话框构建器

    // 复用标题布局，动态显示当前账户
    View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); 
    TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
    titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
            getSyncAccountName(this)));        // 动态插入当前账户名（例："当前账户：user@gmail.com"）
    TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
    subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg)); // 警告文本
    dialogBuilder.setCustomTitle(titleView);   // 应用自定义标题

    // 操作选项列表（更换/移除/取消）
    CharSequence[] menuItemArray = new CharSequence[]{
            getString(R.string.preferences_menu_change_account),  // 资源ID对应"更换账户"
            getString(R.string.preferences_menu_remove_account),  // "移除账户"
            getString(R.string.preferences_menu_cancel)           // "取消"
    };

    dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if (which == 0) {                  // 用户点击第一项（更换账户）
                showSelectAccountAlertDialog(); // 打开账户选择对话框
            } else if (which == 1) {           // 点击第二项（移除账户）
                removeSyncAccount();           // 清空SharedPreferences中的账户存储
                refreshUI();                   // 更新界面为无账户状态
            }                                  // 第三项"取消"无操作，自动关闭对话框
        }
    });
    dialogBuilder.show();                      // 显示最终对话框
}

// ====================== 账户管理工具方法 ======================
private Account[] getGoogleAccounts() {
    AccountManager accountManager = AccountManager.get(this); // 获取系统账户管理器实例
    return accountManager.getAccountsByType("com.google");   // 过滤出所有Google类型账户
}

// ====================== 核心账户设置方法 ======================
private void setSyncAccount(String account) {
    if (!getSyncAccountName(this).equals(account)) { // 仅在新旧账户不同时执行操作
        // 持久化存储账户名到SharedPreferences
        SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit(); // 获取编辑器
        if (account != null) {
            editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); // 存储有效账户名
        } else {
            editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, "");      // 空值处理
        }
        editor.commit();                         // 立即提交写入（注意：同步操作可能阻塞UI）

        setLastSyncTime(this, 0);                // 重置最后同步时间戳为0（表示需要重新同步）

        // 启动后台线程清理旧账户关联数据
        new Thread(new Runnable() {
            @Override
            public void run() {
                ContentValues values = new ContentValues();  // 创建更新数据集
                values.put(NoteColumns.GTASK_ID, "");         // 清空任务ID字段
                values.put(NoteColumns.SYNC_ID, 0);           // 重置同步ID为初始状态
                getContentResolver().update(
                        Notes.CONTENT_NOTE_URI,    // 目标ContentProvider URI
                        values,                    // 更新内容
                        null,                      // 无WHERE条件（更新所有记录）
                        null                       // 无参数
                ); // 执行批量更新操作
            }
        }).start();                               // 立即启动清理线程

        // 显示操作成功的Toast提示
        Toast.makeText(NotesPreferenceActivity.this,
                getString(R.string.preferences_toast_success_set_accout, account), // 动态插入账户名
                Toast.LENGTH_SHORT).show();       // 短时显示提示
    }
}



private void removeSyncAccount() {
    // 获取SharedPreferences实例（私有模式仅本应用可访问）
    SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit(); // 获取编辑器对象

    // 条件移除账户名配置（避免删除不存在的键）
    if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
        editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME); // 删除键值对
    }
    // 条件移除最后同步时间戳
    if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
        editor.remove(PREFERENCE_LAST_SYNC_TIME); 
    }
    editor.commit(); // 同步提交修改（立即生效，适合关键配置操作）

    // 启动异步任务清理关联数据
    new Thread(new Runnable() {
        public void run() {
            ContentValues values = new ContentValues();
            values.put(NoteColumns.GTASK_ID, "");  // 重置任务ID为空字符串
            values.put(NoteColumns.SYNC_ID, 0);    // 重置同步标识为初始状态
            getContentResolver().update(
                Notes.CONTENT_NOTE_URI,  // 目标ContentProvider的URI
                values,                  // 更新值集合
                null,                    // 无WHERE条件（全表更新）
                null                     // 无参数绑定
            ); // 执行批量数据清理
        }
    }).start(); // 立即启动后台线程
}

// ====================== 配置存取工具方法 ======================
// 获取当前绑定账户名（返回空字符串表示未设置）
public static String getSyncAccountName(Context context) {
    SharedPreferences settings = context.getSharedPreferences(
        PREFERENCE_NAME,    // 配置文件名
        Context.MODE_PRIVATE // 访问模式
    );
    return settings.getString(
        PREFERENCE_SYNC_ACCOUNT_NAME, // 键名
        ""                            // 默认值（空字符串）
    );
}

// 更新最后同步时间戳（单位：毫秒）
public static void setLastSyncTime(Context context, long time) {
    SharedPreferences settings = context.getSharedPreferences(
        PREFERENCE_NAME, 
        Context.MODE_PRIVATE
    );
    SharedPreferences.Editor editor = settings.edit();
    editor.putLong(PREFERENCE_LAST_SYNC_TIME, time); // 写入长整型数值
    editor.commit(); // 同步提交保证时间戳立即更新
}

// 获取最后成功同步时间（返回0表示从未同步）
public static long getLastSyncTime(Context context) {
    SharedPreferences settings = context.getSharedPreferences(
        PREFERENCE_NAME,
        Context.MODE_PRIVATE
    );
    return settings.getLong(
        PREFERENCE_LAST_SYNC_TIME, // 键名
        0L                         // 默认值（0）
    );
}

// ====================== 同步状态广播接收器 ======================
private class GTaskReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        refreshUI(); // 强制刷新界面显示最新状态
        
        // 检测广播是否携带同步状态
        if (intent.getBooleanExtra(
            GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, // 附加参数键名
            false                                                // 默认值
        )) {
            TextView syncStatus = (TextView) findViewById(
                R.id.prefenerece_sync_status_textview // 状态显示文本框ID
            );
            // 设置动态进度信息（例如："同步中(50%)"）
            syncStatus.setText(intent.getStringExtra(
                GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG
            ));
        }
    }
}

// ====================== 选项菜单处理 ======================
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:  // 处理导航栏返回按钮
            Intent intent = new Intent(this, NotesListActivity.class);
            // 清理活动栈：如果目标Activity已在栈中，则弹出其上所有Activity
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
            startActivity(intent); // 跳转到笔记列表
            return true; // 消费事件
        default:
            return false; // 未处理的事件传递给超类
    }
}