/*
 * 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.
 * 总体分析
这段 Java 代码定义了一个名为FoldersListAdapter的类，它继承自CursorAdapter，主要用于在安卓应用中对数据库查询结果（以Cursor形式体现）进行适配，以便在列表等视图组件中展示相应的数据。它针对特定的笔记相关数据结构（从代码中的引用可推测涉及笔记文件夹相关信息），将查询到的包含文件夹ID和名称片段（SNIPPET）的数据，通过自定义的视图逻辑展示出来，同时提供了获取指定位置文件夹名称的方法，方便在界面交互过程中获取和展示文件夹相关的信息。
函数分析
构造函数
FoldersListAdapter(Context context, Cursor c)：
所属类：FoldersListAdapter
功能：这是类的构造函数，接收Context（用于获取系统资源等操作）和Cursor（包含了从数据库查询出来的数据）这两个参数，调用父类（CursorAdapter）的构造函数并传入这两个参数，完成基础的初始化工作，确保后续可以基于这个Cursor中的数据来进行视图适配等相关操作。不过目前构造函数内部暂时没有其他自定义的额外初始化逻辑（代码中 TODO Auto-generated constructor stub 提示可能后续还有待完善的地方）。
视图创建相关函数
newView(Context context, Cursor cursor, ViewGroup parent)：
所属类：FoldersListAdapter
功能：重写了父类CursorAdapter的newView方法，用于创建一个新的视图对象来展示Cursor中的每一条数据记录。在这个方法中，它创建并返回了一个FolderListItem类的实例，这个FolderListItem类是内部定义的一个继承自LinearLayout的自定义视图类，意味着每一条数据记录都会通过这个自定义的线性布局样式的视图来展示，后续可以在这个自定义视图中进行具体的数据绑定和展示相关操作。
视图数据绑定函数
bindView(View view, Context context, Cursor cursor)：
所属类：FoldersListAdapter
功能：重写了父类CursorAdapter的bindView方法，用于将Cursor中的数据绑定到对应的视图上进行展示。首先判断传入的视图是否是FolderListItem类型，如果是，则从Cursor中获取相应的数据来确定文件夹名称。这里有个特殊判断，如果当前记录对应的文件夹ID是根文件夹的ID（通过 Notes.ID_ROOT_FOLDER 判断），则使用 getString 方法获取一个特定的资源字符串（R.string.menu_move_parent_folder）作为文件夹名称，否则直接获取Cursor中对应列（通过 NAME_COLUMN 索引）的字符串作为文件夹名称，最后调用 ((FolderListItem) view).bind(folderName) 将获取到的文件夹名称传递给 FolderListItem 实例的 bind 方法，在该方法中会将名称设置到对应的 TextView 组件上进行展示。
获取文件夹名称函数
getFolderName(Context context, int position)：
所属类：FoldersListAdapter
功能：用于获取指定位置的文件夹名称。它先通过 getItem 方法（继承自 CursorAdapter）获取对应位置的 Cursor 对象，然后同样按照之前在 bindView 方法中类似的逻辑，根据文件夹 ID 是否为根文件夹 ID 来确定返回的文件夹名称，如果是根文件夹就获取特定资源字符串作为名称，否则获取 Cursor 中对应列的字符串作为名称，方便外部代码在需要知晓特定位置文件夹名称的情况下进行调用。
自定义视图类相关
FolderListItem 内部类：
所属类：FoldersListAdapter（作为其内部类存在）
功能：
构造函数方面，它继承自 LinearLayout，在构造函数中调用父类构造函数传入 Context，然后通过 inflate 方法加载一个名为 R.layout.folder_list_item 的布局文件到自身，这个布局文件应该定义了展示文件夹名称的具体视图样式，接着通过 findViewById 方法获取布局中的 TextView 组件（mName），用于后续设置和展示文件夹名称。
bind 方法方面，接收一个字符串参数（文件夹名称），并通过 mName.setText(name) 将传入的名称设置到对应的 TextView 组件上，从而实现将数据展示在视图中的功能，完成视图与数据的绑定操作。
 */

package net.micode.notes.ui;

import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;


public class FoldersListAdapter extends CursorAdapter {
    public static final String [] PROJECTION = {
        NoteColumns.ID,
        NoteColumns.SNIPPET
    };

    public static final int ID_COLUMN   = 0;
    public static final int NAME_COLUMN = 1;

    public FoldersListAdapter(Context context, Cursor c) {
        super(context, c);
        // TODO Auto-generated constructor stub
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return new FolderListItem(context);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        if (view instanceof FolderListItem) {
            String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context
                    .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN);
            ((FolderListItem) view).bind(folderName);
        }
    }

    public String getFolderName(Context context, int position) {
        Cursor cursor = (Cursor) getItem(position);
        return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context
                .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN);
    }

    private class FolderListItem extends LinearLayout {
        private TextView mName;

        public FolderListItem(Context context) {
            super(context);
            inflate(context, R.layout.folder_list_item, this);
            mName = (TextView) findViewById(R.id.tv_folder_name);
        }

        public void bind(String name) {
            mName.setText(name);
        }
    }

}
