2018-SWENG/2018-SWENG-Radius

View on GitHub
app/src/main/java/ch/epfl/sweng/radius/utils/customLists/customTopics/CustomTopicTab.java

Summary

Maintainability
A
0 mins
Test Coverage
package ch.epfl.sweng.radius.utils.customLists.customTopics;

import android.util.Log;

import com.google.firebase.database.DatabaseError;

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

import ch.epfl.sweng.radius.database.CallBackDatabase;
import ch.epfl.sweng.radius.database.ChatLogs;
import ch.epfl.sweng.radius.database.Database;
import ch.epfl.sweng.radius.database.MLocation;
import ch.epfl.sweng.radius.database.OthersInfo;
import ch.epfl.sweng.radius.utils.customLists.CustomListAdapter;
import ch.epfl.sweng.radius.utils.customLists.CustomListItem;
import ch.epfl.sweng.radius.utils.customLists.CustomTab;

public abstract class CustomTopicTab extends CustomTab {

    @Override
    public CustomListAdapter getAdapter(List<CustomListItem> items) {
        ArrayList<Integer> removableTopicPositions = getRemovableTopicPositions(items);
        return new CustomTopicListAdapter(items, getContext(), removableTopicPositions);
    }

    public CallBackDatabase getAdapterCallback() {
        return new CallBackDatabase() {
            @Override
            public void onFinish(Object value) {
                ArrayList<CustomListItem> topicItems = new ArrayList<>();

                //Add dummy first item
                topicItems.add(0, new CustomListItem("Dummy","Dummy","Dummy"));

                String topicId, convId, topicName;
                for (ChatLogs topics: (List<ChatLogs>) value) {
                    topicId = topics.getID();convId = topics.getChatLogsId();
                    topicName = OthersInfo.getInstance().getTopicsPos().get(topicId).getTitle();
                    topicItems.add(new CustomListItem(topicId, convId, topicName));
                }
                if(adapter != null){
                    ArrayList<Integer> removableTopicPositions = getRemovableTopicPositions(topicItems);
                    ((CustomTopicListAdapter) adapter).setRemovableTopicPositions(removableTopicPositions);
                    adapter.setItems(topicItems);
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onError(DatabaseError error) {
                Log.e("Firebase", error.getMessage());
            }
        };
    }

    @Override
    protected void setUpAdapterWithList(List<String> listIds) {
        List<String> ids = new ArrayList<>(OthersInfo.getInstance().getTopicsPos().keySet());
        database.readListObjOnce(ids, Database.Tables.CHATLOGS, getAdapterCallback());
    }

    private ArrayList<Integer> getRemovableTopicPositions(List<CustomListItem> items) {
        HashMap<String, MLocation> topics = OthersInfo.getInstance().getTopicsPos();
        ArrayList<Integer> removableTopicPositions = new ArrayList<>();
        for (int i = 0; i < items.size(); i++) {
            MLocation location = topics.get(items.get(i).getItemId());
            if (location != null && location.isRemovableTopic()) {
                removableTopicPositions.add(i);
            }
        }
        return removableTopicPositions;
    }

}