You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2Q1/tool/ResourceParser.java

250 lines
23 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 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;
}
}