/* * Copyright 2014 Google Inc. All rights reserved. * * 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 com.android.example.leanback.data; import android.app.LoaderManager; import android.content.Context; import android.content.CursorLoader; import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v17.leanback.database.CursorMapper; import android.support.v17.leanback.widget.CursorObjectAdapter; import android.support.v17.leanback.widget.ObjectAdapter; import java.util.ArrayList; import java.util.List; /** * Created by anirudhd on 10/25/14. * * */ public class VideoDataManager implements LoaderManager.LoaderCallbacks<Cursor> { protected Loader<Cursor> mDataLoader; protected Context mContext; protected LoaderManager mLoaderManager; protected int LOADER_ID; protected Uri mRowUri; private final VideoItemMapper mMapper; public static String[] PROJECTION = { VideoItemContract.VideoItemColumns._ID, VideoItemContract.VideoItemColumns.TITLE, VideoItemContract.VideoItemColumns.CATEGORY, VideoItemContract.VideoItemColumns.DESCRIPTION, VideoItemContract.VideoItemColumns.RATING, VideoItemContract.VideoItemColumns.YEAR, VideoItemContract.VideoItemColumns.THUMB_IMG_URL, VideoItemContract.VideoItemColumns.TAGS, VideoItemContract.VideoItemColumns.CONTENT_URL, }; private ObjectAdapter mItemList; public VideoDataManager(Context mContext, LoaderManager mLoaderManager, Uri mRowUri, ObjectAdapter rowContents) { this.mLoaderManager = mLoaderManager; this.mRowUri = mRowUri; this.mContext = mContext; mItemList = rowContents; LOADER_ID = Double.valueOf(Math.random() * Integer.MAX_VALUE).intValue(); mMapper = new VideoItemMapper(); ((CursorObjectAdapter)mItemList).setMapper(mMapper); } public void startDataLoading() { if (mDataLoader == null) { mDataLoader = mLoaderManager.initLoader(LOADER_ID, null, this); } else { mLoaderManager.restartLoader(mDataLoader.getId(), null, this); } } @Override public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { return new CursorLoader(mContext, mRowUri, PROJECTION, null, null, VideoItemContract.VideoItem.DEFAULT_SORT); } public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) { if (mItemList instanceof CursorObjectAdapter) { ((CursorObjectAdapter) mItemList).swapCursor(cursor); } } public void onLoaderReset(Loader<Cursor> cursorLoader) { if (mItemList instanceof CursorObjectAdapter) { ((CursorObjectAdapter) mItemList).swapCursor(null); } } public ObjectAdapter getItemList() { return mItemList; } public static class VideoItemMapper extends CursorMapper { private int[] mColumnMap; private static final int ID = 0; private static final int TITLE = 1; private static final int CATEGORY = 2; private static final int DESCRIPTION = 3; private static final int RATING = 4; private static final int YEAR = 5; private static final int THUMB_IMG_URL = 6; private static final int TAGS = 6; private static final int CONTENT_URL = 6; public void bindColumns(Cursor cursor) { mColumnMap = new int[9]; mColumnMap[ID] = cursor.getColumnIndex(PROJECTION[0]); mColumnMap[TITLE] = cursor.getColumnIndex(PROJECTION[1]); mColumnMap[CATEGORY] = cursor.getColumnIndex(PROJECTION[2]); mColumnMap[DESCRIPTION] = cursor.getColumnIndex(PROJECTION[3]); mColumnMap[RATING] = cursor.getColumnIndex(PROJECTION[4]); mColumnMap[YEAR] = cursor.getColumnIndex(PROJECTION[5]); mColumnMap[THUMB_IMG_URL] = cursor.getColumnIndex(PROJECTION[THUMB_IMG_URL]); mColumnMap[TAGS] = cursor.getColumnIndex(PROJECTION[7]); mColumnMap[CONTENT_URL] = cursor.getColumnIndex(PROJECTION[8]); } public Video bind(Cursor cursor) { Video item = new Video(); item.setId(cursor.getLong(mColumnMap[ID])); item.setRating(cursor.getInt(mColumnMap[RATING])); item.setYear(cursor.getInt(mColumnMap[YEAR])); item.setTags(cursor.getString(mColumnMap[TAGS])); item.setTitle(cursor.getString(mColumnMap[TITLE])); item.setDescription(cursor.getString(mColumnMap[DESCRIPTION])); item.setThumbUrl(cursor.getString(cursor.getColumnIndex("thumb_img_url"))); item.setCategory(cursor.getString(mColumnMap[CATEGORY])); item.setContentUrl(cursor.getString(mColumnMap[CONTENT_URL])); return item; } } }