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.

276 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.
*/
package net.micode.notes.tool;
import android.content.Context;
import android.preference.PreferenceManager;
import net.micode.notes.R;
import net.micode.notes.ui.NotesPreferenceActivity;
/**
* 资源解析工具类
* 统一管理便签应用中的资源映射关系,包括:
* 1. 便签背景颜色资源
* 2. 便签列表项背景资源
* 3. 桌面小部件背景资源
* 4. 文本样式资源
* 提供资源ID与逻辑标识的映射转换方法
*/
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
* @param id 颜色逻辑标识0-4
* @return 对应的背景资源ID
*/
public static int getNoteBgResource(int id) {
return BG_EDIT_RESOURCES[id];
}
/**
* 获取便签编辑界面标题栏背景资源ID
* @param id 颜色逻辑标识0-4
* @return 对应的标题栏背景资源ID
*/
public static int getNoteTitleBgResource(int id) {
return BG_EDIT_TITLE_RESOURCES[id];
}
}
/**
* 获取默认背景颜色ID
* 逻辑:若用户启用随机背景,则随机返回一个颜色;否则返回默认颜色
* @param context 应用上下文
* @return 默认背景颜色逻辑标识
*/
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
* @param id 颜色逻辑标识0-4
* @return 对应的首项背景资源ID
*/
public static int getNoteBgFirstRes(int id) {
return BG_FIRST_RESOURCES[id];
}
/**
* 获取列表末项背景资源ID
* @param id 颜色逻辑标识0-4
* @return 对应的末项背景资源ID
*/
public static int getNoteBgLastRes(int id) {
return BG_LAST_RESOURCES[id];
}
/**
* 获取列表单项背景资源ID
* @param id 颜色逻辑标识0-4
* @return 对应的单项背景资源ID
*/
public static int getNoteBgSingleRes(int id) {
return BG_SINGLE_RESOURCES[id];
}
/**
* 获取列表中间项背景资源ID
* @param 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;
}
}
/**
* 桌面小部件背景资源管理类
* 管理不同尺寸小部件的背景资源
*/
public static class WidgetBgResources {
// 2x2小部件背景资源数组
private final static int[] BG_2X_RESOURCES = new int[]{
R.drawable.widget_2x_yellow, // 黄色2x2小部件背景
R.drawable.widget_2x_blue, // 蓝色2x2小部件背景
R.drawable.widget_2x_white, // 白色2x2小部件背景
R.drawable.widget_2x_green, // 绿色2x2小部件背景
R.drawable.widget_2x_red // 红色2x2小部件背景
};
/**
* 获取2x2小部件背景资源ID
* @param id 颜色逻辑标识0-4
* @return 对应的2x2小部件背景资源ID
*/
public static int getWidget2xBgResource(int id) {
return BG_2X_RESOURCES[id];
}
// 4x4小部件背景资源数组
private final static int[] BG_4X_RESOURCES = new int[]{
R.drawable.widget_4x_yellow, // 黄色4x4小部件背景
R.drawable.widget_4x_blue, // 蓝色4x4小部件背景
R.drawable.widget_4x_white, // 白色4x4小部件背景
R.drawable.widget_4x_green, // 绿色4x4小部件背景
R.drawable.widget_4x_red // 红色4x4小部件背景
};
/**
* 获取4x4小部件背景资源ID
* @param id 颜色逻辑标识0-4
* @return 对应的4x4小部件背景资源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
* @param id 字体大小逻辑标识0-3
* @return 对应的文本样式资源ID
*/
public static int getTexAppearanceResource(int id) {
/**
* 修复偏好设置中存储的资源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;
}
}
}