/*
 * 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
        };/*这是一个静态内部类 NoteBgResources，其中包含一个名为 BG_EDIT_RESOURCES 的静态常量数组，该数组包含了 5 个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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
        };/*这是一个私有的静态常量数组 BG_EDIT_TITLE_RESOURCES，它包含了五个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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];
        }/*一个静态方法 getNoteBgResource()，它接受一个整型参数 id，并返回一个整型值。在这个方法中，静态常量数组 BG_EDIT_RESOURCES 被索引到，以返回该数组中索引为 id 的元素的值。*/

        public static int getNoteTitleBgResource(int id) {
            return BG_EDIT_TITLE_RESOURCES[id];
        }
    }/*一个静态方法 getNoteTitleBgResource()，它接受一个整型参数 id，并返回一个整型值。在这个方法中，静态常量数组 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;
        }
    }/*一个公共静态方法 getDefaultBgId()，它接受一个 Context 对象作为参数，并返回一个整型值。

在这个方法中，首先通过 PreferenceManager.getDefaultSharedPreferences(context) 获取了一个默认的 SharedPreferences 对象，并检查其中的 PREFERENCE_SET_BG_COLOR_KEY 是否为 true。如果是 true，则使用 Math.random() 随机生成一个范围在 NoteBgResources.BG_EDIT_RESOURCES 数组长度内的整数，并返回该整数作为默认背景颜色的 ID。如果 PREFERENCE_SET_BG_COLOR_KEY 是 false，则返回 BG_DEFAULT_COLOR，它是 ResourceParser 类中定义的默认背景颜色的静态常量。*/

    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
        };/*一个静态内部类 NoteItemBgResources，其中包含一个名为 BG_FIRST_RESOURCES 的私有静态常量数组。

该数组包含了 5 个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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
        };/*这是一个私有的静态常量数组 BG_NORMAL_RESOURCES，它包含了五个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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。

这个数组可能是用于为笔记列表项设置不同背景颜色的 drawable 资源数组，每个元素对应一种背景颜色。
其中，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,
        };/*一个私有的静态常量数组 BG_LAST_RESOURCES，它包含了五个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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。

这个数组可能是用于为笔记列表项设置不同背景颜色的 drawable 资源数组，每个元素对应一种背景颜色。其中，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
        };/*一个私有的静态常量数组 BG_SINGLE_RESOURCES，它包含了五个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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。

这个数组可能是用于为笔记列表项设置不同背景颜色的 drawable 资源数组，每个元素对应一种背景颜色。其中，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 对应的是只有一个列表项时的背景颜色。*/

        public static int getNoteBgFirstRes(int id) {
            return BG_FIRST_RESOURCES[id];
        }/*一个公共静态方法 getNoteBgFirstRes()，它接受一个整型参数 id，并返回一个整型值。*/

        public static int getNoteBgLastRes(int id) {
            return BG_LAST_RESOURCES[id];
        }/*一个公共静态方法 getNoteBgLastRes()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，静态常量数组 BG_LAST_RESOURCES 被索引到，以返回该数组中索引为 id 的元素的值*/

        public static int getNoteBgSingleRes(int id) {
            return BG_SINGLE_RESOURCES[id];
        }/*一个公共静态方法 getNoteBgSingleRes()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，静态常量数组 BG_SINGLE_RESOURCES 被索引到，以返回该数组中索引为 id 的元素的值。*/

        public static int getNoteBgNormalRes(int id) {
            return BG_NORMAL_RESOURCES[id];
        }/*一个公共静态方法 getNoteBgNormalRes()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，静态常量数组 BG_NORMAL_RESOURCES 被索引到，以返回该数组中索引为 id 的元素的值。*/

        public static int getFolderBgRes() {
            return R.drawable.list_folder;
        }
    }/*一个公共静态方法 getFolderBgRes()，它返回一个整型值。

在这个方法中，返回了一个名为 list_folder 的 drawable 资源的 ID，该资源可能是用于为文件夹列表项设置背景的。*/

    public static class WidgetBgResources {
        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,
        };/*一个静态内部类 WidgetBgResources，它包含一个私有的静态常量数组 BG_2X_RESOURCES，该数组包含五个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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。*/

        public static int getWidget2xBgResource(int 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
        };/*一个公共静态方法 getWidget2xBgResource()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，静态常量数组 BG_2X_RESOURCES 被索引到，以返回该数组中索引为 id 的元素的值。

这个方法可能是用于获取小部件 2x2 大小的背景资源的方法，它接受一个背景颜色的 ID，返回对应的 drawable 资源。

这个静态内部类还包含了一个私有的静态常量数组 BG_4X_RESOURCES，该数组包含五个整型元素，这些整型元素对应着项目中的一些 drawable 资源 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) {
            return BG_4X_RESOURCES[id];
        }
    }/*一个公共静态方法 getWidget4xBgResource()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，静态常量数组 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
        };/*一个静态内部类 TextAppearanceResources，它包含一个私有的静态常量数组 TEXTAPPEARANCE_RESOURCES，该数组包含四个整型元素，这些整型元素对应着项目中的一些样式资源 R.style.TextAppearanceNormal、R.style.TextAppearanceMedium、R.style.TextAppearanceLarge、R.style.TextAppearanceSuper。*/

        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}
             */
            if (id >= TEXTAPPEARANCE_RESOURCES.length) {
                return BG_DEFAULT_FONT_SIZE;
            }
            return TEXTAPPEARANCE_RESOURCES[id];
        }/*一个公共静态方法 getTexAppearanceResource()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，首先判断传入的 id 是否大于等于 TEXTAPPEARANCE_RESOURCES 数组的长度，如果是，则返回默认的字体大小 BG_DEFAULT_FONT_SIZE。

如果 id 小于 TEXTAPPEARANCE_RESOURCES 数组的长度，则返回 TEXTAPPEARANCE_RESOURCES 数组中索引为 id 的元素的值。*/

        public static int getResourcesSize() {
            return TEXTAPPEARANCE_RESOURCES.length;
        }
    }
}/*一个公共静态方法 getTexAppearanceResource()，它接受一个整型参数 id，并返回一个整型值。

在这个方法中，首先判断传入的 id 是否大于等于 TEXTAPPEARANCE_RESOURCES 数组的长度，如果是，则返回默认的字体大小 BG_DEFAULT_FONT_SIZE。

如果 id 小于 TEXTAPPEARANCE_RESOURCES 数组的长度，则返回 TEXTAPPEARANCE_RESOURCES 数组中索引为 id 的元素的值。*/
