/*
* Copyright (c) 2013 Allogy Interactive.
*
* 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.allogy.app.adapter;
import java.text.DecimalFormat;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.allogy.app.R;
import com.allogy.app.provider.Academic;
import com.allogy.app.provider.Academic.Lesson;
import com.allogy.app.provider.Academic.LessonFiles;
import com.allogy.app.provider.Academic.Progress;
public class CourseAdapter extends CursorAdapter {
public static final class CourseHolder {
public long id;
public int status;
public TextView title;
public ImageView statusIcon;
public ProgressBar progress;
public TextView progressText;
}
Activity mActivity;
LayoutInflater mInflater;
int mIdIndex;
int mTitleIndex;
int mStatusIndex;
public CourseAdapter(Activity activity, long publisher) {
super(activity, activity.managedQuery(Academic.Courses.CONTENT_URI,
null, String.format(" %s=?", Academic.Courses.PUBLISHER_ID),
new String[] { Long.toString(publisher) },
Academic.Courses.SORT_ORDER_DEFAULT), true);
mActivity = activity;
mInflater = LayoutInflater.from(activity);
Cursor c = getCursor();
mIdIndex = c.getColumnIndexOrThrow(Academic.Courses._ID);
mTitleIndex = c.getColumnIndexOrThrow(Academic.Courses.TITLE);
mStatusIndex = c.getColumnIndexOrThrow(Academic.Courses.STATUS);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
int status = cursor.getInt(mStatusIndex);
CourseHolder holder = (CourseHolder) view.getTag();
holder.id = cursor.getLong(mIdIndex);
holder.title.setText(cursor.getString(mTitleIndex));
holder.status = status;
if (status == Academic.STATUS_LOCKED)
holder.statusIcon.setImageResource(R.drawable.locked);
else {
holder.statusIcon.setVisibility(View.GONE);
holder.progress.setVisibility(View.VISIBLE);
// calculate progress
double numQuizzes = 0;
double numCompletedQuizzes = 0;
Cursor quizzes = context
.getContentResolver()
.query(LessonFiles.CONTENT_URI,
null,
String.format(
" %s.%s IN (SELECT %s.%s FROM %s WHERE %s.%s=?) AND %s.%s=?",
LessonFiles.TABLE_NAME,
LessonFiles.LESSON_ID, Lesson.TABLE_NAME,
Lesson._ID, Lesson.TABLE_NAME,
Lesson.TABLE_NAME, Lesson.COURSE_ID,
LessonFiles.TABLE_NAME,
LessonFiles.MEDIA_TYPE),
new String[] {
Long.toString(holder.id),
Integer.toString(Academic.CONTENT_TYPE_QUIZ) },
null);
if (quizzes != null) {
if (quizzes.getCount() > 0) {
quizzes.moveToFirst();
final int pathIndex = quizzes
.getColumnIndex(LessonFiles.URI);
String path = "";
for (quizzes.moveToFirst(); !quizzes.isAfterLast(); quizzes
.moveToNext()) {
path = quizzes.getString(pathIndex);
if (path.length() > 0 && path.compareTo("") != 0) {
numQuizzes++;
}
}
}
quizzes.close();
}
Cursor cq = context
.getContentResolver()
.query(Progress.CONTENT_URI,
null,
String.format(
" %s.%s IN (SELECT %s.%s FROM %s WHERE %s.%s=?) AND %s.%s=?",
Progress.TABLE_NAME, Progress.CONTENT_ID,
Lesson.TABLE_NAME, Lesson._ID,
Lesson.TABLE_NAME, Lesson.TABLE_NAME,
Lesson.COURSE_ID, Progress.TABLE_NAME,
Progress.CONTENT_TYPE),
new String[] {
Long.toString(holder.id),
Integer.toString(Academic.CONTENT_TYPE_QUIZ) },
null);
if (cq != null) {
numCompletedQuizzes = cq.getCount();
cq.close();
}
double progress = (numCompletedQuizzes / numQuizzes) * 100;
DecimalFormat df = new DecimalFormat("#.##");
holder.progress.setProgress((int) progress);
holder.progressText.setText("Quizzes: " + (int) numCompletedQuizzes
+ "/" + (int) numQuizzes + " (" + df.format(progress) + "%)");
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View listView = mInflater.inflate(R.layout.list_item_course, null);
CourseHolder holder = new CourseHolder();
holder.title = (TextView) listView
.findViewById(R.id.list_item_course_title);
holder.statusIcon = (ImageView) listView
.findViewById(R.id.list_item_course_status);
holder.progress = (ProgressBar) listView
.findViewById(R.id.list_item_course_progress);
holder.progressText = (TextView) listView
.findViewById(R.id.list_item_course_progress_text);
listView.setTag(holder);
return listView;
}
}