package net.micode.notes.model; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.TextUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** * 模板管理类,用于管理笔记模板的存储、加载、添加、删除等操作 */ public class TemplateManager { private static final String PREF_TEMPLATES = "note_templates"; private static final String PREF_TEMPLATE_ID_COUNTER = "template_id_counter"; private static TemplateManager sInstance; private Context mContext; private List mTemplates; private TemplateManager(Context context) { mContext = context.getApplicationContext(); loadTemplates(); } public static synchronized TemplateManager getInstance(Context context) { if (sInstance == null) { sInstance = new TemplateManager(context); } return sInstance; } /** * 加载所有模板,包括系统模板和自定义模板 */ private void loadTemplates() { mTemplates = new ArrayList<>(); // 先添加系统模板 addSystemTemplates(); // 然后加载自定义模板 loadCustomTemplates(); } /** * 添加系统模板 */ private void addSystemTemplates() { // 会议记录模板 NoteTemplate meetingTemplate = new NoteTemplate(); meetingTemplate.setId(1); meetingTemplate.setName("会议记录"); meetingTemplate.setContent("会议记录

" + "会议主题
" + "会议时间
" + "会议地点
" + "参会人员
" + "主持人

" + "会议议程
" + "1.
" + "2.
" + "3.

" + "会议内容

" + "决议事项
" + "1.
" + "2.
" + "3.

" + "行动项
" + "任务负责人截止日期状态

" + "

" + "下次会议
" + "时间
" + "主题
"); meetingTemplate.setType(NoteTemplate.TYPE_SYSTEM); mTemplates.add(meetingTemplate); // 待办事项模板 NoteTemplate todoTemplate = new NoteTemplate(); todoTemplate.setId(2); todoTemplate.setName("待办事项"); todoTemplate.setContent("待办事项

" + "日期

" + "今日待办
" + "☐
" + "☐
" + "☐
" + "☐
" + "☐

" + "重要事项
" + "⭐
" + "⭐

" + "已完成
" + "✓
" + "✓
" + "✓
"); todoTemplate.setType(NoteTemplate.TYPE_SYSTEM); mTemplates.add(todoTemplate); // 购物清单模板 NoteTemplate shoppingTemplate = new NoteTemplate(); shoppingTemplate.setId(3); shoppingTemplate.setName("购物清单"); shoppingTemplate.setContent("购物清单

" + "日期
" + "商店
" + "预算

" + "清单
" + "物品数量单价备注状态
" + " ☐
" + " ☐
" + " ☐
" + " ☐
" + " ☐

" + "总计
" + "实际花费
" + "节省/超支
"); shoppingTemplate.setType(NoteTemplate.TYPE_SYSTEM); mTemplates.add(shoppingTemplate); } /** * 加载自定义模板 */ private void loadCustomTemplates() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); String templatesJson = prefs.getString(PREF_TEMPLATES, "[]"); try { JSONArray jsonArray = new JSONArray(templatesJson); for (int i = 0; i < jsonArray.length(); i++) { JSONObject json = jsonArray.getJSONObject(i); NoteTemplate template = NoteTemplate.fromJson(json); mTemplates.add(template); } } catch (JSONException e) { e.printStackTrace(); } } /** * 保存自定义模板到SharedPreferences */ private void saveCustomTemplates() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = prefs.edit(); JSONArray jsonArray = new JSONArray(); for (NoteTemplate template : mTemplates) { if (NoteTemplate.TYPE_CUSTOM.equals(template.getType())) { try { jsonArray.put(template.toJson()); } catch (JSONException e) { e.printStackTrace(); } } } editor.putString(PREF_TEMPLATES, jsonArray.toString()); editor.apply(); } /** * 获取所有模板 */ public List getAllTemplates() { return new ArrayList<>(mTemplates); } /** * 获取系统模板 */ public List getSystemTemplates() { List systemTemplates = new ArrayList<>(); for (NoteTemplate template : mTemplates) { if (NoteTemplate.TYPE_SYSTEM.equals(template.getType())) { systemTemplates.add(template); } } return systemTemplates; } /** * 获取自定义模板 */ public List getCustomTemplates() { List customTemplates = new ArrayList<>(); for (NoteTemplate template : mTemplates) { if (NoteTemplate.TYPE_CUSTOM.equals(template.getType())) { customTemplates.add(template); } } return customTemplates; } /** * 根据ID获取模板 */ public NoteTemplate getTemplateById(long id) { for (NoteTemplate template : mTemplates) { if (template.getId() == id) { return template; } } return null; } /** * 添加自定义模板 */ public void addCustomTemplate(NoteTemplate template) { // 生成唯一ID SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); long id = prefs.getLong(PREF_TEMPLATE_ID_COUNTER, 1000); template.setId(id); template.setType(NoteTemplate.TYPE_CUSTOM); template.setCreateTime(System.currentTimeMillis()); template.setUpdateTime(System.currentTimeMillis()); mTemplates.add(template); // 更新ID计数器 prefs.edit().putLong(PREF_TEMPLATE_ID_COUNTER, id + 1).apply(); // 保存自定义模板 saveCustomTemplates(); } /** * 删除自定义模板 */ public boolean deleteCustomTemplate(long id) { NoteTemplate templateToRemove = null; for (NoteTemplate template : mTemplates) { if (template.getId() == id && NoteTemplate.TYPE_CUSTOM.equals(template.getType())) { templateToRemove = template; break; } } if (templateToRemove != null) { mTemplates.remove(templateToRemove); saveCustomTemplates(); return true; } return false; } /** * 更新自定义模板 */ public boolean updateCustomTemplate(NoteTemplate updatedTemplate) { for (int i = 0; i < mTemplates.size(); i++) { NoteTemplate template = mTemplates.get(i); if (template.getId() == updatedTemplate.getId() && NoteTemplate.TYPE_CUSTOM.equals(template.getType())) { updatedTemplate.setUpdateTime(System.currentTimeMillis()); mTemplates.set(i, updatedTemplate); saveCustomTemplates(); return true; } } return false; } }