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

235 lines
8.4 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 类设计用于便捷地访问与笔记背景及文本样式相关的资源标识符。
* 它封装了表示各种颜色、文本大小的静态常量并为不同的笔记编辑场景提供了对drawable资源的访问。
*/
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;
/**
* NoteBgResources 内部类封装了与编辑笔记背景相关的drawable资源数组。
* 分别为普通编辑背景BG_EDIT_RESOURCES和标题编辑背景BG_EDIT_TITLE_RESOURCES
* 对应于已定义的不同颜色常量,便于在实际应用中根据颜色选择相应的资源。
*/
public static class NoteBgResources {
// 编辑笔记背景时使用的drawable资源数组与颜色常量一一对应。
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
};
// 编辑笔记标题背景时使用的drawable资源数组同样与颜色常量一一对应。
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获取注释背景资源。
* @param id 注释的id用于索引背景资源数组。
* @return 返回对应id的背景资源。
*/
public static int getNoteBgResource(int id) {
return BG_EDIT_RESOURCES[id];
}
/**
* 根据提供的id获取注释标题背景资源。
* @param id 注释标题的id用于索引标题背景资源数组。
* @return 返回对应id的标题背景资源。
*/
public static int getNoteTitleBgResource(int id) {
return BG_EDIT_TITLE_RESOURCES[id];
}
/**
* 获取默认背景资源id。
* 根据用户设置是否设置了自定义背景颜色来决定返回随机背景资源或默认背景资源。
* @param context 上下文对象用于访问SharedPreferences。
* @return 返回背景资源的id。
*/
public static int getDefaultBgId(Context context) {
// 检查用户是否设置了自定义背景颜色
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) {
// 如果设置了,返回一个随机的背景资源
return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length);
} else {
// 如果未设置,返回默认背景资源
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获取对应的笔记背景资源的第一个资源。
public static int getNoteBgFirstRes(int id) {
return BG_FIRST_RESOURCES[id];
}
//根据提供的ID获取对应的笔记背景资源的最后一个资源。
public static int getNoteBgLastRes(int id) {
return BG_LAST_RESOURCES[id];
}
//根据提供的ID获取对应的笔记背景资源的单个资源。
public static int getNoteBgSingleRes(int id) {
return BG_SINGLE_RESOURCES[id];
}
//根据提供的ID获取对应的笔记背景资源的普通资源。
public static int getNoteBgNormalRes(int id) {
return BG_NORMAL_RESOURCES[id];
}
//获取文件夹背景资源的ID。
public static int getFolderBgRes() {
return R.drawable.list_folder;
}
//这个内部类提供了一系列的Widget背景资源。
public static class WidgetBgResources {
public static int getWidget2xBgResource(int id) {
return BG_2X_RESOURCES[id];
}
// 提供4x尺寸的Widget背景资源。
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
};
//获取指定索引的4x Widget背景资源的ID。
c 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
}
public class ResourceParser {
// HACKME: 修复了存储资源ID到共享偏好中的bug。如果ID大于资源数组的长度
// 则返回默认字体大小BG_DEFAULT_FONT_SIZE。
public static int getTexAppearanceResource(int id) {
if (id >= TEXTAPPEARANCE_RESOURCES.length) {
return BG_DEFAULT_FONT_SIZE;
}
return TEXTAPPEARANCE_RESOURCES[id];
}
// 获取TEXTAPPEARANCE_RESOURCES数组的大小。
public static int getResourcesSize() {
return TEXTAPPEARANCE_RESOURCES.length;
}
}