/* * 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. */ package net.micode.notes.tool; import android.content.Context; import android.preference.PreferenceManager; import net.micode.notes.R; import net.micode.notes.ui.NotesPreferenceActivity; // ResourceParser类,从名字可以推测它主要用于解析各种资源相关的信息,例如颜色、字体大小以及与笔记背景相关的资源等,方便在应用程序中统一管理和获取这些资源的配置情况,根据不同的条件返回相应的资源标识,供界面显示等相关操作使用。 public class ResourceParser { // 定义表示黄色的整型常量,可能用于标识某种颜色主题或者界面元素颜色相关的设定,在这里作为一种颜色分类的枚举值使用,方便后续代码中通过这个常量来指代黄色,提高代码可读性和可维护性,具体对应哪种黄色色调等细节取决于应用中的资源定义。 public static final int YELLOW = 0; // 定义表示蓝色的整型常量,与上面的YELLOW类似,用于代表蓝色这种颜色分类,在涉及颜色选择、界面元素颜色配置等场景中通过该常量来明确表示蓝色相关的操作和逻辑,同样具体颜色表现由应用资源决定。 public static final int BLUE = 1; // 定义表示白色的整型常量,用于标识白色相关的颜色设定,在诸如笔记背景颜色、文字颜色等可能涉及颜色配置的地方,可以用此常量来区分白色相关的情况,遵循统一的颜色表示方式。 public static final int WHITE = 2; // 定义表示绿色的整型常量,作为绿色颜色分类的标识,在应用中当需要指定绿色相关的颜色资源或者进行颜色相关逻辑判断时,可通过该常量进行操作,有助于清晰地表达代码中与绿色相关的意图。 public static final int GREEN = 3; // 定义表示红色的整型常量,用于代表红色这种颜色,在例如设置界面元素颜色、颜色主题切换等场景中使用该常量来表示红色相关的操作,使代码对颜色的处理更加规范和易于理解。 public static final int RED = 4; // 定义表示默认背景颜色的整型常量,初始化为YELLOW,意味着如果没有特殊的用户配置或者其他条件改变,默认情况下背景颜色会采用黄色相关的资源设定,后续代码可以根据这个常量来获取默认的背景颜色信息,方便进行界面的初始化等操作。 public static final int BG_DEFAULT_COLOR = YELLOW; // 定义表示小字体的整型常量,用于区分不同字体大小的分类,在字体大小设置相关的逻辑中,通过该常量来代表小字体情况,比如在设置笔记内容字体大小、界面显示字体大小时可作为一种选项标识。 public static final int TEXT_SMALL = 0; // 定义表示中等字体的整型常量,作为中等字体大小的标识,在涉及字体大小选择、默认字体大小设定等场景中,用此常量来明确表示中等字体相关的操作和逻辑,是字体大小配置中常用的一种表示方式。 public static final int TEXT_MEDIUM = 1; // 定义表示大字体的整型常量,用于代表大字体这种字体大小分类,在例如用户可调整字体大小的功能中,通过该常量来区分大字体相关的情况,方便根据用户选择来应用相应的字体大小资源。 public static final int TEXT_LARGE = 2; // 定义表示超大字体的整型常量,作为字体大小分类中最大的一种表示,在一些特殊的显示需求或者用户自定义字体大小场景下,通过该常量来标识超大字体相关的操作和逻辑,使字体大小的设定更具扩展性。 public static final int TEXT_SUPER = 3; // 定义表示默认字体大小的整型常量,初始化为TEXT_MEDIUM,说明在没有额外的用户配置等改变的情况下,默认会采用中等字体大小的相关资源来显示文字内容,方便进行界面初始化等操作时确定默认的字体大小设置。 public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM; // 定义一个内部静态类NoteBgResources,从名字推测它主要用于管理和提供与笔记背景相关的资源信息,例如背景图片资源等,将这些资源相关的操作封装在内部类中,使得代码结构更加清晰,便于对笔记背景资源进行集中管理和操作。 public static class NoteBgResources { // 定义一个私有静态整型数组BG_EDIT_RESOURCES,数组元素类型为int,用于存储与笔记编辑页面背景相关的资源ID(通过R.drawable中的资源标识符来表示,每个元素对应一种颜色背景的资源),这里按照顺序依次存储了黄色、蓝色、白色、绿色、红色对应的编辑页面背景资源ID,方便后续根据不同的索引获取相应颜色的背景资源,用于设置笔记编辑页面的背景显示效果。 private final static int [] BG_EDIT_RESOURCES = new int [] { R.drawable.edit_yellow, R.drawable.edit_blue, R.drawable.edit_white, R.drawable.edit_green, R.drawable.edit_red }; // 定义一个私有静态整型数组BG_EDIT_TITLE_RESOURCES,同样用于存储与笔记编辑页面标题背景相关的资源ID,每个元素对应一种颜色的标题背景资源,也是按照黄色、蓝色、白色、绿色、红色的顺序排列,便于根据索引获取相应颜色的标题背景资源,用于设置笔记编辑页面标题栏的背景显示效果。 private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { R.drawable.edit_title_yellow, R.drawable.edit_title_blue, R.drawable.edit_title_white, R.drawable.edit_title_green, R.drawable.edit_title_red }; // 定义一个公共静态方法,用于根据传入的索引id获取对应的笔记编辑页面背景资源ID,通过直接返回BG_EDIT_RESOURCES数组中指定索引位置的元素,实现根据不同的索引值(通常对应不同的颜色分类等情况)获取相应的背景资源ID,方便在设置笔记编辑页面背景时使用。 public static int getNoteBgResource(int id) { return BG_EDIT_RESOURCES[id]; } // 定义一个公共静态方法,用于根据传入的索引id获取对应的笔记编辑页面标题背景资源ID,与getNoteBgResource方法类似,通过返回BG_EDIT_TITLE_RESOURCES数组中指定索引位置的元素,实现按照索引获取相应的标题背景资源ID,用于设置笔记编辑页面标题栏的背景显示效果。 public static int getNoteTitleBgResource(int id) { return BG_EDIT_TITLE_RESOURCES[id]; } } // 定义一个公共静态方法,用于获取默认的背景颜色资源ID,该方法接收一个Context对象作为参数,通过Context可以获取应用程序的相关配置信息,例如用户在设置中对背景颜色的偏好设置等情况,进而决定返回的默认背景颜色资源ID。 public static int getDefaultBgId(Context context) { // 通过PreferenceManager.getDefaultSharedPreferences方法获取应用程序的默认共享偏好设置对象,该对象用于读取和管理用户在应用设置中保存的各种偏好设置信息(如是否自定义了背景颜色等)。 // 然后使用该对象的getBoolean方法,传入NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY(这应该是在NotesPreferenceActivity中定义的一个用于标识是否设置了背景颜色的偏好设置的键常量)作为键,以及false作为默认值(表示如果没有找到对应的设置项时的默认返回值),来判断用户是否已经在设置中自定义了背景颜色。 if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { // 如果用户已经自定义了背景颜色(即上述getBoolean方法返回true),通过Math.random()方法生成一个随机数(范围是0到1之间的浮点数),然后乘以NoteBgResources.BG_EDIT_RESOURCES.length(即背景资源数组的长度,也就是颜色种类的数量,这里是5种颜色),并将结果转换为整数(向下取整),以此随机获取一个背景资源数组的索引值,最后返回对应的背景资源ID,实现随机选择一种颜色背景资源作为默认背景的效果,给用户一种多样化的默认背景展示(前提是用户开启了自定义背景颜色但未明确指定具体颜色的情况)。 return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); } else { // 如果用户没有自定义背景颜色(即上述getBoolean方法返回false),则直接返回BG_DEFAULT_COLOR常量(前面定义为YELLOW对应的常量值),也就是采用默认的黄色背景资源ID作为默认背景颜色,遵循默认的背景颜色设定,保持界面显示的一致性和初始状态。 return BG_DEFAULT_COLOR; } } } // 定义一个公共静态内部类NoteItemBgResources,从类名推测它主要用于管理和提供与笔记项背景相关的各种资源信息,比如不同状态下笔记项的背景图片资源等,通过将这些资源相关的操作封装在内部类中,使代码结构更加清晰,便于对笔记项背景资源进行集中管理和统一调用。 public static class NoteItemBgResources { // 定义一个私有静态整型数组BG_FIRST_RESOURCES,数组元素类型为int,用于存储与笔记项在列表中处于第一个位置时对应的背景图片资源ID(通过R.drawable中的资源标识符来表示,每个元素对应一种颜色主题下的首个位置背景资源)。 // 这里按照顺序依次存储了黄色、蓝色、白色、绿色、红色这几种颜色主题对应的笔记项处于列表首个位置的背景图片资源ID,方便后续根据不同的索引获取相应颜色主题下的首个位置背景资源,用于在界面上展示笔记项处于列表开头时的特定背景效果。 private final static int [] BG_FIRST_RESOURCES = new int [] { R.drawable.list_yellow_up, R.drawable.list_blue_up, R.drawable.list_white_up, R.drawable.list_green_up, R.drawable.list_red_up }; // 定义一个私有静态整型数组BG_NORMAL_RESOURCES,同样用于存储笔记项在列表中处于普通位置(既不是第一个也不是最后一个)时对应的背景图片资源ID,每个元素对应一种颜色主题下的普通位置背景资源,也是按照黄色、蓝色、白色、绿色、红色的顺序排列。 // 这样便于根据索引获取相应颜色主题下的普通位置背景资源,用于设置笔记项在列表中间位置时的背景显示效果,使列表中的笔记项根据位置呈现不同的背景样式,增强界面的视觉效果和层次感。 private final static int [] BG_NORMAL_RESOURCES = new int [] { R.drawable.list_yellow_middle, R.drawable.list_blue_middle, R.drawable.list_white_middle, R.drawable.list_green_middle, R.drawable.list_red_middle }; // 定义一个私有静态整型数组BG_LAST_RESOURCES,用于存储笔记项在列表中处于最后一个位置时对应的背景图片资源ID,每个元素对应一种颜色主题下的末尾位置背景资源,同样按照黄色、蓝色、白色、绿色、红色的顺序进行存储。 // 通过索引可以获取相应颜色主题下的最后位置背景资源,以便在界面上准确展示笔记项处于列表末尾时的特定背景样式,使整个列表的笔记项背景显示更加符合视觉习惯和设计要求。 private final static int [] BG_LAST_RESOURCES = new int [] { R.drawable.list_yellow_down, R.drawable.list_blue_down, R.drawable.list_white_down, R.drawable.list_green_down, R.drawable.list_red_down, }; // 定义一个私有静态整型数组BG_SINGLE_RESOURCES,用于存储当列表中只有一个笔记项时对应的背景图片资源ID,每个元素对应一种颜色主题下的单个笔记项背景资源,按照黄色、蓝色、白色、绿色、红色的顺序排列这些资源ID。 // 后续可以依据索引获取相应颜色主题下的单个笔记项背景资源,用于在列表仅包含一个笔记项这种特殊情况下,为其设置合适的背景显示效果,保证不同场景下笔记项背景的一致性和美观性。 private final static int [] BG_SINGLE_RESOURCES = new int [] { R.drawable.list_yellow_single, R.drawable.list_blue_single, R.drawable.list_white_single, R.drawable.list_green_single, R.drawable.list_red_single }; // 定义一个公共静态方法getNoteBgFirstRes,用于根据传入的索引id获取笔记项在列表中处于第一个位置时对应的背景图片资源ID。 // 通过直接返回BG_FIRST_RESOURCES数组中指定索引位置的元素,实现根据不同的索引值(通常对应不同的颜色主题等情况)获取相应的首个位置背景资源ID,方便在设置笔记项列表首位背景时使用,确保界面能正确显示对应颜色和位置的背景图片。 public static int getNoteBgFirstRes(int id) { return BG_FIRST_RESOURCES[id]; } // 定义一个公共静态方法getNoteBgLastRes,用于根据传入的索引id获取笔记项在列表中处于最后一个位置时对应的背景图片资源ID。 // 与getNoteBgFirstRes方法类似,通过返回BG_LAST_RESOURCES数组中指定索引位置的元素,实现按照索引获取相应的末尾位置背景资源ID,用于设置笔记项列表尾位背景,使列表末尾的笔记项能显示正确的背景图片效果。 public static int getNoteBgLastRes(int id) { return BG_LAST_RESOURCES[id]; } // 定义一个公共静态方法getNoteBgSingleRes,用于根据传入的索引id获取当列表中只有一个笔记项时对应的背景图片资源ID。 // 同样是返回BG_SINGLE_RESOURCES数组中指定索引位置的元素,以此根据索引获取相应的单个笔记项背景资源ID,用于处理列表仅有一个笔记项的特殊情况,保证其背景显示符合预期的颜色和样式要求。 public static int getNoteBgSingleRes(int id) { return BG_SINGLE_RESOURCES[id]; } // 定义一个公共静态方法getNoteBgNormalRes,用于根据传入的索引id获取笔记项在列表中处于普通位置(非首非尾)时对应的背景图片资源ID。 // 通过返回BG_NORMAL_RESOURCES数组中指定索引位置的元素,实现按照索引获取相应的普通位置背景资源ID,便于在设置列表中间笔记项背景时使用,使笔记项在列表中的不同位置能呈现出相应合适的背景效果,提升界面的整体美观度和专业性。 public static int getNoteBgNormalRes(int id) { return BG_NORMAL_RESOURCES[id]; } // 定义一个公共静态方法getFolderBgRes,用于获取文件夹对应的背景图片资源ID。 // 直接返回R.drawable.list_folder,说明无论在何种情况下,文件夹的背景图片资源都是固定的这一个(由list_folder这个资源标识符所对应的图片资源决定),用于在界面上统一展示文件夹的背景样式,方便识别和区分文件夹与笔记项等不同类型的界面元素。 public static int getFolderBgRes() { return R.drawable.list_folder; } } // 定义一个公共静态内部类WidgetBgResources,从类名可以推测它主要用于管理和提供与小部件(Widget)背景相关的资源信息,通过将小部件背景资源相关的操作封装在这个内部类中,使得代码结构更加清晰,便于在应用中对小部件背景资源进行集中管理和统一调用。 public static class WidgetBgResources { // 定义一个私有静态整型数组BG_2X_RESOURCES,数组元素类型为int,用于存储小部件在某种特定尺寸(可能是 2 倍尺寸相关,具体取决于应用中的定义和使用场景)下,对应不同颜色主题的背景图片资源ID(通过R.drawable中的资源标识符来表示,每个元素对应一种颜色主题下的该尺寸背景资源)。 // 这里按照顺序依次存储了黄色、蓝色、白色、绿色、红色这几种颜色主题对应的小部件 2 倍尺寸背景图片资源ID,方便后续根据不同的索引获取相应颜色主题下的 2 倍尺寸背景资源,用于在界面上为特定尺寸的小部件展示相应颜色和样式的背景效果。 private final static int [] BG_2X_RESOURCES = new int [] { R.drawable.widget_2x_yellow, R.drawable.widget_2x_blue, R.drawable.widget_2x_white, R.drawable.widget_2x_green, R.drawable.widget_2x_red, }; // 定义一个公共静态方法getWidget2xBgResource,用于根据传入的索引id获取小部件在相应尺寸(前面提到的 2 倍尺寸相关情况)下对应的背景图片资源ID。 // 通过直接返回BG_2X_RESOURCES数组中指定索引位置的元素,实现根据不同的索引值(通常对应不同的颜色主题等情况)获取相应的 2 倍尺寸背景资源ID,方便在设置小部件该尺寸背景时使用,确保小部件能正确显示对应颜色和尺寸要求的背景图片。 public static int getWidget2xBgResource(int id) { return BG_2X_RESOURCES[id]; } // 定义一个私有静态整型数组BG_4X_RESOURCES,同样用于存储小部件在另一种特定尺寸(可能是 4 倍尺寸相关,依据应用具体设定)下,对应不同颜色主题的背景图片资源ID,每个元素对应一种颜色主题下的该尺寸背景资源,也是按照黄色、蓝色、白色、绿色、红色的顺序排列这些资源ID。 // 这样便于根据索引获取相应颜色主题下的 4 倍尺寸背景资源,用于在界面上为特定尺寸的小部件准确展示相应颜色和样式的背景效果,满足不同尺寸小部件背景显示的需求。 private final static int [] BG_4X_RESOURCES = new int [] { R.drawable.widget_4x_yellow, R.drawable.widget_4x_blue, R.drawable.widget_4x_white, R.drawable.widget_4x_green, R.drawable.widget_4x_red }; // 定义一个公共静态方法getWidget4xBgResource,用于根据传入的索引id获取小部件在相应尺寸(前面提到的 4 倍尺寸相关情况)下对应的背景图片资源ID。 // 与getWidget2xBgResource方法类似,通过返回BG_4X_RESOURCES数组中指定索引位置的元素,实现按照索引获取相应的 4 倍尺寸背景资源ID,用于设置小部件该尺寸背景,使小部件能呈现出符合要求的背景图片效果。 public static int getWidget4xBgResource(int id) { return BG_4X_RESOURCES[id]; } } // 定义一个公共静态内部类TextAppearanceResources,从类名推测它主要用于管理和提供与文本外观(如字体样式、大小等文本显示相关属性)相关的资源信息,将这些文本外观资源相关操作封装在内部类中,有助于使代码结构条理清晰,方便在应用里对文本外观资源进行统一管理与调用。 public static class TextAppearanceResources { // 定义一个私有静态整型数组TEXTAPPEARANCE_RESOURCES,数组元素类型为int,用于存储不同文本外观样式对应的资源ID(通过R.style中的资源标识符来表示,每个元素对应一种文本外观风格的资源)。 // 这里按照顺序依次存储了表示正常、中等、大、超大这几种不同字体外观风格对应的资源ID(分别对应TextAppearanceNormal、TextAppearanceMedium、TextAppearanceLarge、TextAppearanceSuper这些样式资源,具体样式的定义取决于应用中在styles.xml等相关资源文件里的设置),方便后续根据不同的索引获取相应的文本外观资源,用于设置文本在界面上的显示样式。 private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { R.style.TextAppearanceNormal, R.style.TextAppearanceMedium, R.style.TextAppearanceLarge, R.style.TextAppearanceSuper }; // 定义一个公共静态方法getTexAppearanceResource,用于根据传入的索引id获取对应的文本外观资源ID。 // 不过这里有一段注释提示存在一个需要修复的问题(HACKME注释部分),即存储在共享偏好设置中的资源ID可能会出现大于资源数组长度的情况(可能是由于数据存储或获取过程中的错误等原因导致),在这种情况下,为了避免出现数组越界等异常情况,并且保证程序的稳定性,当传入的索引id大于资源数组长度时,方法会返回默认的字体大小资源ID(通过调用外部类的BG_DEFAULT_FONT_SIZE常量获取,前面定义为中等字体大小对应的常量值),否则返回TEXTAPPEARANCE_RESOURCES数组中指定索引位置的元素,以此根据索引获取相应的文本外观资源ID,用于设置文本的显示样式,确保文本外观资源获取的合理性和程序的健壮性。 public static int getTexAppearanceResource(int id) { /** * HACKME: Fix bug of store the resource id in shared preference. * The id may larger than the length of resources, in this case, * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} */ if (id >= TEXTAPPEARANCE_RESOURCES.length) { return BG_DEFAULT_FONT_SIZE; } return TEXTAPPEARANCE_RESOURCES[id]; } // 定义一个公共静态方法getResourcesSize,用于获取文本外观资源数组的长度,也就是当前定义的不同文本外观样式的数量,通过返回TEXTAPPEARANCE_RESOURCES数组的长度,方便在其他地方(比如循环遍历资源、判断资源数量是否满足要求等场景)了解文本外观资源的数量情况,辅助进行相关的逻辑操作。 public static int getResourcesSize() { return TEXTAPPEARANCE_RESOURCES.length; } }