/*
* Licensed Materials - Property of IBM
* © Copyright IBM Corporation 2015. All Rights Reserved.
*/
package com.ibm.mil.readyapps.telco.mytext;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.ibm.mil.readyapps.telco.R;
import com.ibm.mil.readyapps.telco.cycles.Cycle;
import com.ibm.mil.readyapps.telco.cycles.CycleBinder;
import com.ibm.mil.readyapps.telco.offers.AcceptedOfferBinder;
import com.ibm.mil.readyapps.telco.offers.Offer;
import com.ibm.mil.readyapps.telco.offers.OfferModel;
import com.ibm.mil.readyapps.telco.offers.OfferModelImpl;
import com.ibm.mil.readyapps.telco.usage.Usage;
import com.ibm.mil.readyapps.telco.utils.PlanConstants;
import com.ibm.mil.readyapps.telco.utils.RecyclerDivider;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.Bind;
/**
* Fragment for Text tab of app.
*/
public class TextFragment extends Fragment implements TextView {
@Bind(R.id.my_text_recyclerview) RecyclerView talkRecyclerView;
private TextRecyclerAdapter textAdapter;
private TextPresenter presenter;
private List<Offer> acceptedOffers;
private Usage dataUsage;
private Cycle cycle;
private boolean alreadyInitializedRecyclerList = false;
private OfferModel offerModel;
private Resources resources;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_text, container, false);
ButterKnife.bind(this, view);
CoordinatorLayout layout = (CoordinatorLayout) getActivity().findViewById(R.id.coordinator_layout);
resources = getActivity().getResources();
offerModel = new OfferModelImpl();
presenter = new TextPresenterImpl(this, getActivity().getApplicationContext());
textAdapter = new TextRecyclerAdapter(layout, getActivity().getApplicationContext());
presenter.getAcceptedOffers();
presenter.listenForUndoAccept();
presenter.getUsage();
presenter.getCycle();
return view;
}
/**
* Initialize the recycler view with adapter and add subscribers.
*/
private void initRecyclerView() {
CycleBinder cycleBinder = textAdapter.getCycleBinder();
AcceptedOfferBinder offerBinder = textAdapter.getOfferBinder();
talkRecyclerView.setAdapter(textAdapter);
talkRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
populateRecyclerList();
presenter.removeOffer(offerBinder.getRemoveOfferStream());
presenter.undoRemoveOffer(offerModel.getUndoOfferRemoveStream());
}
/**
* Populate the recycler view with the relevant data.
*/
private void populateRecyclerList() {
textAdapter.setCycle(cycle);
textAdapter.setIncomingOutgoing(dataUsage);
textAdapter.setDividerHeader(new RecyclerDivider(resources.getString(R.string.add_to_plan_header), 0));
List<Offer> textOffers = new ArrayList<>();
for (Offer offer : acceptedOffers) {
if ((offer.getType()) == PlanConstants.TEXT) {
textOffers.add(offer);
}
}
textAdapter.setCardOffers(textOffers);
}
/**
* TextView override for displaying the cycle as it emits changes.
* Only initialize the recycler view if it has not been initialized
* before.
*
* @param cycle the cycle that has been updated
*/
@Override
public void displayCycle(Cycle cycle) {
this.cycle = cycle;
if (alreadyInitializedRecyclerList) {
populateRecyclerList();
} else {
initRecyclerView();
alreadyInitializedRecyclerList = true;
populateRecyclerList();
}
}
/**
* Update the data usage property.
*
* @param usage the new usage
*/
@Override
public void displayUsage(Usage usage) {
this.dataUsage = usage;
}
/**
* Update the accepted offers property.
*
* @param offers the new offers list
*/
@Override
public void displayAcceptedOffers(List<Offer> offers) {
this.acceptedOffers = offers;
}
/**
* Update the adapter with the new cycle.
*
* @param cycle the new cycle to be shown
*/
@Override
public void updateCycleView(Cycle cycle) {
textAdapter.setCycle(cycle);
}
/**
* Remove an offer from accepted offers array and
* update adapter also.
*
* @param offer the offer to remove
*/
@Override
public void removeAcceptedOffer(Offer offer) {
this.acceptedOffers.remove(offer);
textAdapter.removeCardOffer(offer);
}
/**
* Add offer to accepted offers and add card
* offer to adapter.
*
* @param offer the offer to add
*/
@Override
public void displayAcceptedOffer(Offer offer) {
this.acceptedOffers.add(offer);
if (offer.getType() == PlanConstants.TEXT) {
textAdapter.setCardOffer(offer);
}
}
}