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.
xiaomi/tool/ResourceParser.java

285 lines
10 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;
/**
* 资源解析器类,负责管理和解析与笔记相关的各种资源,
* 如背景颜色、字体大小、背景图片资源等,为应用提供统一的资源获取方式。
*/
public class ResourceParser {
// 定义笔记背景颜色的常量,分别对应黄色、蓝色、白色、绿色、红色
public static final int YELLOW = 0;
public static final int BLUE = 1;
public static final int WHITE = 2;
public static final int GREEN = 3;
public static final int RED = 4;
// 默认的笔记背景颜色,这里设置为黄色
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;
// 默认的笔记文本字体大小,这里设置为中等
public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;
/**
* 笔记编辑界面背景资源管理类,负责管理和提供笔记编辑界面的背景和标题背景资源。
*/
public static class NoteBgResources {
// 笔记编辑界面的背景资源数组,按颜色顺序存储
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
};
// 笔记编辑界面标题的背景资源数组,按颜色顺序存储
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
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的背景资源 ID
*/
public static int getNoteBgResource(int id) {
return BG_EDIT_RESOURCES[id];
}
/**
* 根据颜色 ID 获取笔记编辑界面标题的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的标题背景资源 ID
*/
public static int getNoteTitleBgResource(int id) {
return BG_EDIT_TITLE_RESOURCES[id];
}
}
/**
* 获取默认的笔记背景颜色 ID
*
* @param context 应用上下文
* @return 默认的背景颜色 ID
*/
public static int getDefaultBgId(Context context) {
// 检查是否开启了随机背景颜色的偏好设置
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) {
// 如果开启,则随机返回一个背景颜色 ID
return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length);
} else {
// 如果未开启,则返回默认的背景颜色 ID
return BG_DEFAULT_COLOR;
}
}
/**
* 笔记列表项背景资源管理类,负责管理和提供笔记列表项不同位置(首项、普通项、末项、单项)的背景资源。
*/
public static class NoteItemBgResources {
// 笔记列表首项的背景资源数组,按颜色顺序存储
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
};
// 笔记列表普通项的背景资源数组,按颜色顺序存储
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
};
// 笔记列表末项的背景资源数组,按颜色顺序存储
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,
};
// 笔记列表单项(只有一项时)的背景资源数组,按颜色顺序存储
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
};
/**
* 根据颜色 ID 获取笔记列表首项的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的首项背景资源 ID
*/
public static int getNoteBgFirstRes(int id) {
return BG_FIRST_RESOURCES[id];
}
/**
* 根据颜色 ID 获取笔记列表末项的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的末项背景资源 ID
*/
public static int getNoteBgLastRes(int id) {
return BG_LAST_RESOURCES[id];
}
/**
* 根据颜色 ID 获取笔记列表单项的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的单项背景资源 ID
*/
public static int getNoteBgSingleRes(int id) {
return BG_SINGLE_RESOURCES[id];
}
/**
* 根据颜色 ID 获取笔记列表普通项的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的普通项背景资源 ID
*/
public static int getNoteBgNormalRes(int id) {
return BG_NORMAL_RESOURCES[id];
}
/**
* 获取文件夹的背景资源 ID
*
* @return 文件夹背景资源 ID
*/
public static int getFolderBgRes() {
return R.drawable.list_folder;
}
}
/**
* 小部件背景资源管理类负责管理和提供不同尺寸2x 和 4x小部件的背景资源。
*/
public static class WidgetBgResources {
// 2x 尺寸小部件的背景资源数组,按颜色顺序存储
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,
};
/**
* 根据颜色 ID 获取 2x 尺寸小部件的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的 2x 小部件背景资源 ID
*/
public static int getWidget2xBgResource(int id) {
return BG_2X_RESOURCES[id];
}
// 4x 尺寸小部件的背景资源数组,按颜色顺序存储
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
};
/**
* 根据颜色 ID 获取 4x 尺寸小部件的背景资源 ID
*
* @param id 颜色对应的 ID取值范围为 0 - 4
* @return 对应的 4x 小部件背景资源 ID
*/
public static int getWidget4xBgResource(int id) {
return BG_4X_RESOURCES[id];
}
}
/**
* 文本外观资源管理类,负责管理和提供不同字体大小对应的文本外观资源。
*/
public static class TextAppearanceResources {
// 文本外观资源数组,按字体大小顺序存储
private final static int[] TEXTAPPEARANCE_RESOURCES = new int[]{
R.style.TextAppearanceNormal,
R.style.TextAppearanceMedium,
R.style.TextAppearanceLarge,
R.style.TextAppearanceSuper
};
/**
* 根据字体大小 ID 获取对应的文本外观资源 ID
*
* @param id 字体大小对应的 ID取值范围为 0 - 3
* @return 对应的文本外观资源 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}
*/
// 防止传入的 ID 超出资源数组的范围,如果超出则返回默认字体大小对应的资源 ID
if (id >= TEXTAPPEARANCE_RESOURCES.length) {
return BG_DEFAULT_FONT_SIZE;
}
return TEXTAPPEARANCE_RESOURCES[id];
}
/**
* 获取文本外观资源数组的长度
*
* @return 资源数组的长度
*/
public static int getResourcesSize() {
return TEXTAPPEARANCE_RESOURCES.length;
}
}
}