use of com.instructure.canvasapi2.models.QuizSubmissionQuestion in project instructure-android by instructure.
the class QuizSubmissionQuestionListRecyclerAdapter method onBindViewHolder.
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == size()) {
bindTheHolder(null, holder, position);
} else {
QuizSubmissionQuestion baseItem = getItemAtPosition(position);
bindTheHolder(baseItem, holder, position);
}
}
use of com.instructure.canvasapi2.models.QuizSubmissionQuestion in project instructure-android by instructure.
the class QuizMatchingBinder method setPreviouslySelectedAnswer.
private static void setPreviouslySelectedAnswer(QuizSubmissionQuestion quizSubmissionQuestion, QuizSubmissionAnswer answer, Spinner spinner, ArrayList<QuizSubmissionMatch> list) {
if (quizSubmissionQuestion.getAnswer() != null) {
// the api returns an ArrayList of LinkedTreeMaps
for (LinkedTreeMap<String, String> map : ((ArrayList<LinkedTreeMap<String, String>>) quizSubmissionQuestion.getAnswer())) {
int answerId = Integer.parseInt(map.get(Const.QUIZ_ANSWER_ID));
if (answerId == answer.getId()) {
if (map.get(Const.QUIZ_MATCH_ID) != null && !map.get(Const.QUIZ_MATCH_ID).equals("null")) {
int matchId = Integer.parseInt(map.get(Const.QUIZ_MATCH_ID));
// now see if we have a match in the list of matches
int listIndex = 0;
for (QuizSubmissionMatch match : list) {
if (match.getMatchId() == matchId) {
spinner.setSelection(listIndex);
break;
}
listIndex++;
}
}
}
}
}
}
use of com.instructure.canvasapi2.models.QuizSubmissionQuestion in project instructure-android by instructure.
the class QuizMultiChoiceBinder method bind.
public static void bind(final QuizMultiChoiceViewHolder holder, final QuizSubmissionQuestion quizSubmissionQuestion, final int courseColor, final int position, final boolean shouldLetAnswer, final Context context, final CanvasWebView.CanvasEmbeddedWebViewCallback embeddedWebViewCallback, final CanvasWebView.CanvasWebViewClientCallback webViewClientCallback, final QuizPostMultiChoice callback, final QuizToggleFlagState flagStateCallback) {
if (holder == null) {
return;
}
holder.question.loadUrl("about:blank");
holder.question.setBackgroundColor(Color.TRANSPARENT);
holder.question.setCanvasWebViewClientCallback(webViewClientCallback);
holder.question.formatHTML(quizSubmissionQuestion.getQuestionText(), "");
holder.question.setCanvasEmbeddedWebViewCallback(embeddedWebViewCallback);
holder.questionNumber.setText(context.getString(R.string.question) + " " + (position + 1));
holder.questionId = quizSubmissionQuestion.getId();
LayoutInflater inflater = LayoutInflater.from(context);
// are any in there
if (holder.answerContainer.getChildCount() > 0) {
holder.answerContainer.removeAllViews();
}
// Add answers to the answer container
int index = 0;
for (final QuizSubmissionAnswer answer : quizSubmissionQuestion.getAnswers()) {
final LinearLayout answerWrapper = (LinearLayout) inflater.inflate(R.layout.quiz_multi_choice_answer, null, false);
final CanvasWebView webView = answerWrapper.findViewById(R.id.html_answer);
webView.setClickable(false);
webView.setFocusableInTouchMode(false);
final TextView textView = answerWrapper.findViewById(R.id.text_answer);
final CheckBox checkBox = answerWrapper.findViewById(R.id.answer_checkbox);
if (!TextUtils.isEmpty(answer.getHtml())) {
textView.setVisibility(View.GONE);
final String html = StringUtilities.trimTrailingWhitespace(answer.getHtml()).toString();
webView.formatHTML(html, "");
webView.setBackgroundColor(Color.TRANSPARENT);
// We only care about marking the answers if they can actually answer
if (shouldLetAnswer) {
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// this may or may not be how we do the selection of things when we get the final UI
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
answerWrapper.performClick();
return true;
}
return true;
}
});
}
if (quizSubmissionQuestion.getAnswer() != null) {
if (Long.parseLong((String) quizSubmissionQuestion.getAnswer()) == answer.getId()) {
answerWrapper.setBackgroundColor(context.getResources().getColor(R.color.canvasBackgroundMedium));
// Mark this one as selected
checkBox.setChecked(true);
}
}
} else if (!TextUtils.isEmpty(answer.getText())) {
webView.setVisibility(View.GONE);
textView.setText(answer.getText());
if (quizSubmissionQuestion.getAnswer() != null) {
if (!TextUtils.isEmpty((String) quizSubmissionQuestion.getAnswer()) && Long.parseLong((String) quizSubmissionQuestion.getAnswer()) == answer.getId()) {
// mark this one as selected
checkBox.setChecked(true);
answerWrapper.setBackgroundColor(context.getResources().getColor(R.color.canvasBackgroundMedium));
}
}
}
if (shouldLetAnswer) {
answerWrapper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < holder.answerContainer.getChildCount(); i++) {
if (holder.answerContainer.getId() != view.getId()) {
resetViews(i, holder, context);
}
}
checkBox.setChecked(true);
answerWrapper.setBackgroundColor(context.getResources().getColor(R.color.canvasBackgroundMedium));
// Post the answer to the api
callback.postAnswer(holder.questionId, answer.getId());
// Set the answer on the quizSubmissionQuestion so we'll remember which question was answered during row recycling
quizSubmissionQuestion.setAnswer(Long.toString(answer.getId()));
}
});
}
final Drawable courseColorFlag = ColorKeeper.getColoredDrawable(context, R.drawable.vd_bookmark_filled, courseColor);
if (quizSubmissionQuestion.isFlagged()) {
holder.flag.setImageDrawable(courseColorFlag);
} else {
holder.flag.setImageDrawable(ColorKeeper.getColoredDrawable(context, R.drawable.vd_navigation_bookmarks, context.getResources().getColor(R.color.defaultTextGray)));
}
if (shouldLetAnswer) {
holder.flag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (quizSubmissionQuestion.isFlagged()) {
// Unflag it
holder.flag.setImageDrawable(ColorKeeper.getColoredDrawable(context, R.drawable.vd_navigation_bookmarks, context.getResources().getColor(R.color.defaultTextGray)));
flagStateCallback.toggleFlagged(false, quizSubmissionQuestion.getId());
quizSubmissionQuestion.setFlagged(false);
} else {
// Flag it
holder.flag.setImageDrawable(courseColorFlag);
flagStateCallback.toggleFlagged(true, quizSubmissionQuestion.getId());
quizSubmissionQuestion.setFlagged(true);
}
}
});
} else {
holder.flag.setEnabled(false);
}
holder.answerContainer.addView(answerWrapper);
if (index == quizSubmissionQuestion.getAnswers().length - 1) {
// If we're on the last answer remove the bottom divider
answerWrapper.findViewById(R.id.divider).setVisibility(View.GONE);
} else {
answerWrapper.findViewById(R.id.divider).setVisibility(View.VISIBLE);
index++;
}
}
}
use of com.instructure.canvasapi2.models.QuizSubmissionQuestion in project instructure-android by instructure.
the class QuizMatchingBinder method bind.
public static void bind(final QuizMatchingViewHolder holder, final QuizSubmissionQuestion quizSubmissionQuestion, final int position, final Context context, final CanvasWebView.CanvasEmbeddedWebViewCallback embeddedWebViewCallback, final CanvasWebView.CanvasWebViewClientCallback webViewClientCallback) {
if (holder == null) {
return;
}
setupViews(holder, quizSubmissionQuestion, position, context, embeddedWebViewCallback, webViewClientCallback);
LayoutInflater inflater = LayoutInflater.from(context);
// add answers to the answer container
int index = 0;
for (final QuizSubmissionAnswer answer : quizSubmissionQuestion.getAnswers()) {
final LinearLayout answerWrapper = (LinearLayout) inflater.inflate(R.layout.quiz_matching_answer, null, false);
final TextView answerTextView = (TextView) answerWrapper.findViewById(R.id.text_answer);
final Spinner spinner = (Spinner) answerWrapper.findViewById(R.id.answer_spinner);
ArrayList<QuizSubmissionMatch> list = new ArrayList<>();
QuizSubmissionMatch firstMatch = new QuizSubmissionMatch();
firstMatch.setText(context.getString(R.string.quizMatchingDefaultDisplay));
list.add(firstMatch);
for (QuizSubmissionMatch match : quizSubmissionQuestion.getMatches()) {
list.add(match);
}
QuizMatchSpinnerAdapter adapter = new QuizMatchSpinnerAdapter(context, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
if (!TextUtils.isEmpty(answer.getHtml())) {
answerTextView.setVisibility(View.GONE);
setPreviouslySelectedAnswer(quizSubmissionQuestion, answer, spinner, list);
} else if (!TextUtils.isEmpty(answer.getText())) {
answerTextView.setText(answer.getText());
setPreviouslySelectedAnswer(quizSubmissionQuestion, answer, spinner, list);
}
holder.answerContainer.addView(answerWrapper);
if (index == quizSubmissionQuestion.getAnswers().length - 1) {
// if we're on the last answer remove the bottom divider
answerWrapper.findViewById(R.id.divider).setVisibility(View.GONE);
} else {
answerWrapper.findViewById(R.id.divider).setVisibility(View.VISIBLE);
index++;
}
}
}
use of com.instructure.canvasapi2.models.QuizSubmissionQuestion in project instructure-android by instructure.
the class QuizMultiAnswerBinder method bind.
public static void bind(final QuizMultiChoiceViewHolder holder, final QuizSubmissionQuestion quizSubmissionQuestion, final int position, final Context context) {
if (holder == null) {
return;
}
holder.question.loadUrl("about:blank");
holder.question.setBackgroundColor(Color.TRANSPARENT);
holder.question.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)");
super.onPageFinished(view, url);
}
});
if (context instanceof Activity) {
holder.question.addJavascriptInterface(new QuizMultiChoiceBinder.WebAppInterface(((Activity) context), holder.question), "MyApp");
} else if (context instanceof ContextThemeWrapper) {
holder.question.addJavascriptInterface(new QuizMultiChoiceBinder.WebAppInterface((Activity) (((ContextThemeWrapper) context).getBaseContext()), holder.question), "MyApp");
}
holder.question.loadHtml(quizSubmissionQuestion.getQuestionText(), "");
holder.questionNumber.setText(quizSubmissionQuestion.getQuestionName() + " " + (position + 1));
holder.questionId = quizSubmissionQuestion.getId();
LayoutInflater inflater = LayoutInflater.from(context);
// are any in there
if (holder.answerContainer.getChildCount() > 0) {
holder.answerContainer.removeAllViews();
}
// add answers to the answer container
int index = 0;
for (final QuizSubmissionAnswer answer : quizSubmissionQuestion.getAnswers()) {
final LinearLayout answerContainer = (LinearLayout) inflater.inflate(R.layout.quiz_multi_choice_answer, null, false);
final CanvasWebView webView = (CanvasWebView) answerContainer.findViewById(R.id.html_answer);
webView.setClickable(false);
webView.setFocusableInTouchMode(false);
final TextView textView = (TextView) answerContainer.findViewById(R.id.text_answer);
final CheckBox checkBox = (CheckBox) answerContainer.findViewById(R.id.answer_checkbox);
if (!TextUtils.isEmpty(answer.getHtml())) {
textView.setVisibility(View.GONE);
final String html = answer.getHtml();
webView.loadHtml(html, "");
webView.setBackgroundColor(Color.TRANSPARENT);
} else if (!TextUtils.isEmpty(answer.getText())) {
webView.setVisibility(View.GONE);
textView.setText(answer.getText());
}
holder.answerContainer.addView(answerContainer);
if (index == quizSubmissionQuestion.getAnswers().length - 1) {
// if we're on the last answer remove the bottom divider
answerContainer.findViewById(R.id.divider).setVisibility(View.GONE);
} else {
answerContainer.findViewById(R.id.divider).setVisibility(View.VISIBLE);
index++;
}
}
}
Aggregations