/*
 * 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.
 */
//资源分析器，获取资源并且在程序中使用，比如颜色图片等
// 实现方法：主要利用R.java这个类，其中包括
// R.id      组件资源引用
// R.drawable  图片资源 （被使用）
// R.layout  布局资源
// R.menu   菜单资源
// R.String  文字资源
// R.style    主题资源 （被使用）
// 在按顺序设置好相应的id后，就可以编写简单的getXXX函数获取需要的资源
//
// 特殊的变量 ：
// @BG_DEFAULT_COLOR 默认背景颜色（黄）
// BG_DEFAULT_FONT_SIZE 默认文本大小（中）
package net.micode.notes.tool;//这个类定义了一个对象的不同属性

import android.content.Context;//.引用需要使用的类,可以理解为一个接口（抽象类），它提供了有关应用程序的全局信息。从它继承或者从它的直接或间接子类继承，那么继承的子类就可以拿到应用程序的全局信息。全局信息指： 它允许访问特定于应用程序的资源和类，以及对诸如启动活动，广播和接收意图等应用程序级操作的上调。
import android.preference.PreferenceManager;// 引入了需要使用的类

import net.micode.notes.R;//无此包
import net.micode.notes.ui.NotesPreferenceActivity;//导入ui包下的类

public class ResourceParser {//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 {//Note的背景颜色
        private final static int [] BG_EDIT_RESOURCES = new int [] {//调用drawable中的五种颜色的背景图片png文件
            R.drawable.edit_yellow,//调用drawable中的五种颜色的标题背景图片png文件
            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
        };

        public static int getNoteBgResource(int id) {//数组调用便签背景图片资源文件

            return BG_EDIT_RESOURCES[id];
        }

        public static int getNoteTitleBgResource(int id) {//数组调用标题背景图片资源文件

            return BG_EDIT_TITLE_RESOURCES[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 [] {// 对不同drawable的变量(first、normal、last、single)的初始化（声明）
            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) {//通过ID获取所需要的资源

            return BG_FIRST_RESOURCES[id];
        }

        public static int getNoteBgLastRes(int id) {//通过ID寻找last的颜色值

            return BG_LAST_RESOURCES[id];
        }

        public static int getNoteBgSingleRes(int id) {//通过ID寻找的颜色值

            return BG_SINGLE_RESOURCES[id];
        }

        public static int getNoteBgNormalRes(int id) {//通过ID寻找normal的颜色值

            return BG_NORMAL_RESOURCES[id];
        }

        public static int getFolderBgRes() {//小窗口背景资源

            return R.drawable.list_folder;
        }
    }

    public static class WidgetBgResources {// 小窗口情况下的背景资源类
        private final static int [] BG_2X_RESOURCES = new int [] {//4*4的窗口数据数组
            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返回窗口的颜色值

        public static int getWidget2xBgResource(int id) {//通过ID获取较小的图片

            return BG_2X_RESOURCES[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
        };

        public static int getWidget4xBgResource(int id) {// 方法：根据ID加载BG_4X_RESOURCES数组里的颜色资源序号。

            return BG_4X_RESOURCES[id];
        }
    }

    public static class TextAppearanceResources {// 方法：根据ID加载BG_4X_RESOURCES数组里的颜色资源序号。
        private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] {// 文本字体的四种大小
            R.style.TextAppearanceNormal,//这里有一个容错的函数，防止输入的id大于资源总量，若如此，则自动返回默认的设置结果
            R.style.TextAppearanceMedium,
            R.style.TextAppearanceLarge,
            R.style.TextAppearanceSuper
        };

        public static int getTexAppearanceResource(int id) {//根据id获取当前的资源
            /**
             * HACKME: Fix bug of store the resource id in shared preference.   修补bug
             * 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) {//若输入id大于字体编号最大值，则返回默认值
                return BG_DEFAULT_FONT_SIZE;
            }
            return TEXTAPPEARANCE_RESOURCES[id];
        }

        public static int getResourcesSize() {//直接返回为资源的长度

            return TEXTAPPEARANCE_RESOURCES.length;
        }
    }
}
