nheyek/SDP-2018

View on GitHub
app/src/main/java/ch/epfl/sweng/studyup/specialQuest/AvailableSpecialQuestsActivity.java

Summary

Maintainability
A
2 hrs
Test Coverage
package ch.epfl.sweng.studyup.specialQuest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

import ch.epfl.sweng.studyup.R;
import ch.epfl.sweng.studyup.player.Player;
import ch.epfl.sweng.studyup.utils.RefreshContext;
import ch.epfl.sweng.studyup.utils.adapters.SpecialQuestListViewAdapter;

import static ch.epfl.sweng.studyup.utils.Constants.SPECIAL_QUEST_KEY;

public class AvailableSpecialQuestsActivity extends RefreshContext {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_available_special_quests);

        populateYourSpecialQuestsList();
        populateAvailableSpecialQuestsList();
    }

    @Override
    protected void onResume() {
        super.onResume();

        populateYourSpecialQuestsList();
        populateAvailableSpecialQuestsList();
    }

    public void populateYourSpecialQuestsList() {

        final List<SpecialQuest> yourSpecialQuestsList = Player.get().getSpecialQuests();

        List<Integer> iconList = new ArrayList<>();
        for (SpecialQuest currSpecialQuest : yourSpecialQuestsList) {
            if (currSpecialQuest.getProgress() == 1) {
                iconList.add(R.drawable.ic_check_green_24dp);
            }
            else {
                iconList.add(R.drawable.ic_todo_grey_24dp);
            }
        }

        ListView specialQuestsListView = findViewById(R.id.your_special_quests_list_view);
        SpecialQuestListViewAdapter listAdapter =
                new SpecialQuestListViewAdapter(this, R.layout.special_quest_model, yourSpecialQuestsList, iconList);
        specialQuestsListView.setAdapter(listAdapter);

        /*
        Set onClick listeners for all special quests that will open SpecialQuestDisplayActivity,
        passing the Special Quest as a serializable object. It will be de-serialized and used in that activity.
         */
        specialQuestsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent displaySpecialQuestion = new Intent(AvailableSpecialQuestsActivity.this, SpecialQuestDisplayActivity.class);
                displaySpecialQuestion.putExtra(SPECIAL_QUEST_KEY, Player.get().getSpecialQuests().get(position));

                startActivity(displaySpecialQuestion);
            }});
    }

    public void populateAvailableSpecialQuestsList() {

        final List<SpecialQuest> availableSpecialQuestList = new ArrayList<>();
        List<Integer> iconList = new ArrayList<>();

        /*
        Create special quests for enrollment only if the current player isn't
        already enrolled in a special quest of a given type.
        For all available special quests, use default icon.
         */
        List<SpecialQuest> alreadyEnrolledSpecialQuests = Player.get().getSpecialQuests();
        for (final SpecialQuestType specialQuestType : SpecialQuestType.values()) {
            SpecialQuest newSpecialQuest = new SpecialQuest(specialQuestType);
            if(!alreadyEnrolledSpecialQuests.contains(newSpecialQuest)) {
                availableSpecialQuestList.add(newSpecialQuest);
                iconList.add(R.drawable.ic_todo_grey_24dp);
            }
        }

        ListView availableQuestsListView = findViewById(R.id.available_special_quests_list_view);
        SpecialQuestListViewAdapter listAdapter =
                new SpecialQuestListViewAdapter(this, R.layout.special_quest_model, availableSpecialQuestList, iconList);
        availableQuestsListView.setAdapter(listAdapter);

        /*
        Set onClick listeners for available special quests that will open SpecialQuestDisplayActivity,
        passing the Special Quest as a serializable object. It will be de-serialized and used in that activity.
         */
        availableQuestsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent displaySpecialQuestion = new Intent(AvailableSpecialQuestsActivity.this, SpecialQuestDisplayActivity.class);
                displaySpecialQuestion.putExtra(SPECIAL_QUEST_KEY, availableSpecialQuestList.get(position));

                startActivity(displaySpecialQuestion);
            }});
    }

    public void onBackButtonAvailableSpecialQuests(View v) {
        finish();
    }
}