From 5ebe7ae0b8ec1db6b511d6f101142e8908757c71 Mon Sep 17 00:00:00 2001 From: zoro024-p Date: Fri, 24 Jul 2026 16:27:38 +0000 Subject: [PATCH 1/4] wip --- .github/workflows/android.yml | 1 - app/src/main/AndroidManifest.xml | 5 ++ .../quickcalculation/QuestionResult.java | 20 ++++++ .../QuestionReviewAdapter.jav | 71 +++++++++++++++++++ .../quickcalculation/QuizActivity.java | 19 ++++- .../quickcalculation/ResultActivity.java | 35 +++++++++ app/src/main/res/layout/activity_result.xml | 40 +++++++++++ .../main/res/layout/item_question_review.xml | 43 +++++++++++ gradlew | 0 9 files changed, 231 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionResult.java create mode 100644 app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionReviewAdapter.jav create mode 100644 app/src/main/java/io/github/subhamtyagi/quickcalculation/ResultActivity.java create mode 100644 app/src/main/res/layout/activity_result.xml create mode 100644 app/src/main/res/layout/item_question_review.xml mode change 100644 => 100755 gradlew diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index aaedc7e..896b9ba 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -42,4 +42,3 @@ jobs: path: app/build/outputs/apk/release/*.apk - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 702a8cf..2324dc6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,6 +31,11 @@ + + \ No newline at end of file diff --git a/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionResult.java b/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionResult.java new file mode 100644 index 0000000..c30729e --- /dev/null +++ b/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionResult.java @@ -0,0 +1,20 @@ +package io.github.subhamtyagi.quickcalculation; + +import java.io.Serializable; + +public class QuestionResult implements Serializable { + private String question; + private String userAnswer; + private String correctAnswer; + + public QuestionResult(String question, String userAnswer, String correctAnswer) { + this.question = question; + this.userAnswer = userAnswer; + this.correctAnswer = correctAnswer; + } + + public String getQuestion() { return question; } + public String getUserAnswer() { return userAnswer; } + public String getCorrectAnswer() { return correctAnswer; } + } + \ No newline at end of file diff --git a/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionReviewAdapter.jav b/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionReviewAdapter.jav new file mode 100644 index 0000000..57ccb3b --- /dev/null +++ b/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuestionReviewAdapter.jav @@ -0,0 +1,71 @@ +package io.github.subhamtyagi.quickcalculation; + +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.ListAdapter; +import androidx.recyclerview.widget.RecyclerView; + +public class QuestionReviewAdapter extends ListAdapter { + + public QuestionReviewAdapter() { + super(DIFF_CALLBACK); + } + + // Matches the Kotlin DiffUtil logic to check for identical items + private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull QuestionResult oldItem, @NonNull QuestionResult newItem) { + return oldItem.getQuestion().equals(newItem.getQuestion()); + } + + @Override + public boolean areContentsTheSame(@NonNull QuestionResult oldItem, @NonNull QuestionResult newItem) { + return oldItem.getQuestion().equals(newItem.getQuestion()) && + oldItem.getUserAnswer().equals(newItem.getUserAnswer()) && + oldItem.getCorrectAnswer().equals(newItem.getCorrectAnswer()); + } + }; + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_question_review, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + QuestionResult result = getItem(position); + + holder.questionText.setText(result.getQuestion()); + holder.userAnswerText.setText("Your Answer: " + result.getUserAnswer()); + holder.correctAnswerText.setText("Correct Answer: " + result.getCorrectAnswer()); + + // Highlights correct vs wrong answers + if (result.getUserAnswer().equals(result.getCorrectAnswer())) { + holder.userAnswerText.setTextColor(Color.parseColor("#4CAF50")); + } else { + holder.userAnswerText.setTextColor(Color.parseColor("#F44336")); + } + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + TextView questionText; + TextView userAnswerText; + TextView correctAnswerText; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + // Verify these IDs match your item_question_review.xml layout + questionText = itemView.findViewById(R.id.tvQuestion); + userAnswerText = itemView.findViewById(R.id.tvUserAnswer); + correctAnswerText = itemView.findViewById(R.id.tvCorrectAnswer); + } + } + } + \ No newline at end of file diff --git a/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuizActivity.java b/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuizActivity.java index 321b717..73781b8 100644 --- a/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuizActivity.java +++ b/app/src/main/java/io/github/subhamtyagi/quickcalculation/QuizActivity.java @@ -18,6 +18,8 @@ import io.github.subhamtyagi.quickcalculation.factory.Question; import io.github.subhamtyagi.quickcalculation.utils.Utils; import io.github.subhamtyagi.quickcalculation.utils.SpUtil; +import java.util.ArrayList; +import android.content.Intent; public class QuizActivity extends AppCompatActivity { @@ -50,6 +52,9 @@ public class QuizActivity extends AppCompatActivity { private Question question; boolean isVibrationEnable ; + private ArrayList questionResultsList = new ArrayList<>(); + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -109,6 +114,7 @@ public void play(View v) { mScoreTextView.setText("0 / 0"); mCorrectCount = 0; mTotalQuestionCount = 0; + questionResultsList.clear(); showNewQuestion(); mPlayAgainButton.setVisibility(View.INVISIBLE); @@ -170,6 +176,9 @@ public void onFinish() { mTotalAttemptTextView.setText(Integer.toString(mTotalQuestionCount)); mTotalCorrectTextView.setText(Integer.toString(mCorrectCount)); mPlayAgainButton.setVisibility(View.VISIBLE); + Intent intent = new Intent(QuizActivity.this, ResultActivity.class); + intent.putExtra("QUESTION_RESULTS", questionResultsList); + startActivity(intent); } }.start(); } @@ -193,15 +202,21 @@ public void checkForAnswer(View view) { } } } + + QuestionResult result = new QuestionResult(mQuestionTextView.getText().toString(), String.valueOf(clickedAnswer), String.valueOf(question.getCorrectAnswer())); + + questionResultsList.add(result); + showNewQuestion(); mTotalQuestionCount++; mScoreTextView.setText(mCorrectCount + "/" + mTotalQuestionCount); } +} + /* * * BottomSheetResultsFragment bottomSheetResultsFragment = BottomSheetResultsFragment.newInstance(text); * bottomSheetResultsFragment.show(getSupportFragmentManager(), "bottomSheetResultsFragment"); * - */ -} \ No newline at end of file + */ \ No newline at end of file diff --git a/app/src/main/java/io/github/subhamtyagi/quickcalculation/ResultActivity.java b/app/src/main/java/io/github/subhamtyagi/quickcalculation/ResultActivity.java new file mode 100644 index 0000000..502c113 --- /dev/null +++ b/app/src/main/java/io/github/subhamtyagi/quickcalculation/ResultActivity.java @@ -0,0 +1,35 @@ +package io.github.subhamtyagi.quickcalculation; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import java.util.ArrayList; + +public class ResultActivity extends AppCompatActivity { + + @Override + @SuppressWarnings("unchecked") + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_result); + + // Retrieve the list passed from QuizActivity + ArrayList resultsList = (ArrayList) getIntent().getSerializableExtra("QUESTION_RESULTS"); + if (resultsList == null) { + resultsList = new ArrayList<>(); + } + + // Setup RecyclerView + RecyclerView recyclerView = findViewById(R.id.recyclerView); + if (recyclerView != null) { + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + + // Initialize Adapter and submit the data + QuestionReviewAdapter adapter = new QuestionReviewAdapter(); + recyclerView.setAdapter(adapter); + adapter.submitList(resultsList); + } + } + } + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_result.xml b/app/src/main/res/layout/activity_result.xml new file mode 100644 index 0000000..035c677 --- /dev/null +++ b/app/src/main/res/layout/activity_result.xml @@ -0,0 +1,40 @@ + + + + + + + + + +