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.

368 lines
11 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.
*/
/**
* 文件: ResourceParser.java
* 描述: 资源解析工具类用于管理应用中的各种资源ID和常量
* 作用: 提供便签背景颜色、文本大小等资源的统一访问接口便于UI层使用
*/
package net.micode.notes.tool;
import android.content.Context;
import android.preference.PreferenceManager;
import net.micode.notes.R;
import net.micode.notes.ui.NotesPreferenceActivity;
/**
* 资源解析工具类
*
* 该类负责管理和提供应用中使用的各种资源ID和常量包括
* - 便签背景颜色资源
* - 便签列表项背景资源
* - 小部件背景资源
* - 文本外观样式资源
*
* 通过集中管理这些资源使得UI层可以方便地访问和使用它们
*/
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 {
/**
* 便签编辑背景资源数组
* 按颜色索引存储不同颜色的背景资源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
};
/**
* 便签编辑标题背景资源数组
* 按颜色索引存储不同颜色的标题背景资源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
*
* @param id 颜色索引
* @return 对应颜色的背景资源ID
*/
public static int getNoteBgResource(int id) {
return BG_EDIT_RESOURCES[id];
}
/**
* 获取便签标题背景资源ID
*
* @param id 颜色索引
* @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)) {
// 随机选择一种背景颜色
return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length);
} else {
// 使用默认背景颜色
return BG_DEFAULT_COLOR;
}
}
/**
* 便签列表项背景资源类
*
* 提供便签列表中不同位置项目的背景资源
*/
public static class NoteItemBgResources {
/**
* 列表第一项背景资源数组
* 按颜色索引存储不同颜色的第一项背景资源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
};
/**
* 列表中间项背景资源数组
* 按颜色索引存储不同颜色的中间项背景资源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
};
/**
* 列表最后一项背景资源数组
* 按颜色索引存储不同颜色的最后一项背景资源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,
};
/**
* 列表单项背景资源数组
* 按颜色索引存储不同颜色的单项背景资源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
};
/**
* 获取列表第一项的背景资源ID
*
* @param id 颜色索引
* @return 对应颜色的第一项背景资源ID
*/
public static int getNoteBgFirstRes(int id) {
return BG_FIRST_RESOURCES[id];
}
/**
* 获取列表最后一项的背景资源ID
*
* @param id 颜色索引
* @return 对应颜色的最后一项背景资源ID
*/
public static int getNoteBgLastRes(int id) {
return BG_LAST_RESOURCES[id];
}
/**
* 获取列表单项的背景资源ID
*
* @param id 颜色索引
* @return 对应颜色的单项背景资源ID
*/
public static int getNoteBgSingleRes(int id) {
return BG_SINGLE_RESOURCES[id];
}
/**
* 获取列表中间项的背景资源ID
*
* @param id 颜色索引
* @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;
}
}
/**
* 小部件背景资源类
*
* 提供不同尺寸小部件的背景资源
*/
public static class WidgetBgResources {
/**
* 2x小部件背景资源数组
* 按颜色索引存储不同颜色的2x小部件背景资源ID
*/
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,
};
/**
* 获取2x小部件背景资源ID
*
* @param id 颜色索引
* @return 对应颜色的2x小部件背景资源ID
*/
public static int getWidget2xBgResource(int id) {
return BG_2X_RESOURCES[id];
}
/**
* 4x小部件背景资源数组
* 按颜色索引存储不同颜色的4x小部件背景资源ID
*/
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小部件背景资源ID
*
* @param id 颜色索引
* @return 对应颜色的4x小部件背景资源ID
*/
public static int getWidget4xBgResource(int id) {
return BG_4X_RESOURCES[id];
}
}
/**
* 文本外观资源类
*
* 提供不同大小的文本外观样式资源
*/
public static class TextAppearanceResources {
/**
* 文本外观样式资源数组
* 按大小索引存储不同大小的文本外观样式资源ID
*/
private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] {
R.style.TextAppearanceNormal,
R.style.TextAppearanceMedium,
R.style.TextAppearanceLarge,
R.style.TextAppearanceSuper
};
/**
* 获取文本外观样式资源ID
*
* @param id 大小索引
* @return 对应大小的文本外观样式资源ID
*/
public static int getTexAppearanceResource(int id) {
/**
* 修复Bug: 修复在共享偏好中存储资源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;
}
}
}