Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pt.galp.android.evodriver.cards;
- import android.app.Activity;
- import android.content.Context;
- import android.databinding.DataBindingUtil;
- import android.graphics.Color;
- import android.graphics.drawable.ColorDrawable;
- import android.os.Bundle;
- import android.support.annotation.NonNull;
- import android.support.annotation.Nullable;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.content.ContextCompat;
- import android.support.v4.view.ViewPager;
- import android.support.v7.app.AppCompatDialog;
- import android.support.v7.widget.AppCompatButton;
- import android.support.v7.widget.AppCompatImageView;
- import android.support.v7.widget.AppCompatTextView;
- import android.util.TypedValue;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.MenuInflater;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.Window;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.RelativeLayout;
- import com.elvishew.xlog.XLog;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Locale;
- import de.greenrobot.event.EventBus;
- import pt.galp.android.evodriver.BaseModel;
- import pt.galp.android.evodriver.BuildConfig;
- import pt.galp.android.evodriver.ContextProvider;
- import pt.galp.android.evodriver.GalpApplication;
- import pt.galp.android.evodriver.GalpBaseFragment;
- import pt.galp.android.evodriver.Globals;
- import pt.galp.android.evodriver.R;
- import pt.galp.android.evodriver.cards.adapter.CardsAdapter;
- import pt.galp.android.evodriver.databinding.FragmentCardsMainBinding;
- import pt.galp.android.evodriver.eventbus.LoginCompleteEvent;
- import pt.galp.android.evodriver.eventbus.NavigateToFragmentEvent;
- import pt.galp.android.evodriver.handlers.LogHandler;
- import pt.galp.android.evodriver.localytics.LocalyticsEvent;
- import pt.galp.android.evodriver.localytics.LocalyticsHelper;
- import pt.galp.android.evodriver.login.LoginSelectionFragment;
- import pt.galp.android.evodriver.models.Cards;
- import pt.galp.android.evodriver.models.DeleteCards;
- import pt.galp.android.evodriver.models.Favourite;
- import pt.galp.android.evodriver.models.LoginResponse;
- import pt.galp.android.evodriver.utils.APIUtils;
- import pt.galp.android.evodriver.utils.StringFormatUtils;
- import pt.galp.android.evodriver.utils.UserUtils;
- import pt.galp.android.evodriver.utils.Utils;
- import rx.Observable;
- import rx.Subscriber;
- import rx.android.schedulers.AndroidSchedulers;
- import rx.schedulers.Schedulers;
- /**
- * A simple {@link Fragment} subclass.
- */
- public class CardsMainFragment extends GalpBaseFragment implements CardsAdapter.OnItemClickListener {
- /* Constants */
- private static final float MAX_SCREEN_BRIGHTNESS = 1F;
- /* Properties */
- // Local class variables
- private FragmentActivity mActivity;
- private Context mContext;
- private ArrayList<Cards> mCards;
- private int positionItemClicked;
- private String mCardNumberValue;
- private int numOfCards;
- private float mDefaultScreenBrightness;
- private EventBus mEventBus = EventBus.getDefault();
- // private GalpIDLoginFragment mLoginFragment;
- private LoginSelectionFragment mLoginFragment;
- private FragmentCardsMainBinding cardsMainBinding;
- public CardsMainFragment() {
- // Required empty public constructor
- }
- public static CardsMainFragment newInstance(Bundle data) {
- CardsMainFragment fragment = new CardsMainFragment();
- fragment.setArguments(data);
- return fragment;
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- cardsMainBinding = DataBindingUtil.inflate(LayoutInflater.from(container.getContext()), R.layout.fragment_cards_main, container, false);
- return cardsMainBinding.getRoot();
- }
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- cardsMainBinding.listOfCards.setVisibility(View.GONE);
- cardsMainBinding.layAddCard.setVisibility(View.GONE);
- initCardsListLayout(view);
- initAddCardLayout(view);
- // Show Login fragment if not logged
- if(!UserUtils.isLoggedIn()) {
- showLoginFragment();
- }
- setHasOptionsMenu(true);
- Window window = ((Activity)mContext).getWindow();
- // Save default screen brightness
- mDefaultScreenBrightness = Utils.getScreenBrightness(window);
- }
- private void initAddCardLayout(View view) {
- cardsMainBinding.addCardButton.setOnClickListener(new View.OnClickListener(){
- @Override
- public void onClick(View view) {
- // Apply localytics event
- LocalyticsHelper.tagEvent(LocalyticsEvent.EVENT_ADD_CODE_VIEWED, null);
- mEventBus.post(new NavigateToFragmentEvent(new IntroCardsFragment(),true));
- }
- });
- }
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getCards();
- }
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- mActivity = (FragmentActivity)context;
- mContext = context;
- }
- @Override
- public void onDetach() {
- mActivity = null;
- mContext = null;
- super.onDetach();
- }
- @Override
- public void onResume() {
- super.onResume();
- mEventBus.register(this);
- // setFavouritesDialog();
- }
- @Override
- public void onPause() {
- mEventBus.unregister(this);
- Window window = ((Activity)mContext).getWindow();
- Utils.setScreenBrightness(window, mDefaultScreenBrightness);
- super.onPause();
- }
- @Override
- protected String onGetFragmentTitle() {
- return getString(R.string.cards_action_bar_title);
- }
- @Override
- protected boolean hasToolbar() {
- return true;
- }
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- menu.clear();
- if (UserUtils.isLoggedIn()) {
- inflater.inflate(R.menu.menu_card, menu);
- }
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.add:
- // Apply localytics event
- LocalyticsHelper.tagEvent(LocalyticsEvent.EVENT_ADD_CODE_VIEWED, null);
- mEventBus.post(new NavigateToFragmentEvent(new IntroCardsFragment(),true));
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
- private void getCards() {
- Observable<BaseModel<ArrayList<Cards>>> observable = CardsWebClient.getInstance().getCardsList(Utils.getTimezoneDifferenceFromUtc());
- observable.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Subscriber<BaseModel<ArrayList<Cards>>>() {
- @Override
- public void onCompleted() { }
- @Override
- public void onError(Throwable throwable) {
- XLog.e(throwable);
- }
- @Override
- public void onNext(BaseModel<ArrayList<Cards>> arrayListBaseModel) {
- if (arrayListBaseModel == null || arrayListBaseModel.getData().isEmpty() || arrayListBaseModel.getData().size() == 0){
- // Here we load the initial screen
- cardsMainBinding.layAddCard.setVisibility(View.VISIBLE);
- }else {
- // Here we load the cards list
- ArrayList<Cards> cards = arrayListBaseModel.getData();
- mCards = cards;
- numOfCards = arrayListBaseModel.getData().size();
- loadCardsList(cards);
- cardsMainBinding.layAddCard.setVisibility(View.GONE);
- cardsMainBinding.listOfCards.setVisibility(View.VISIBLE);
- if(numOfCards > 0) {
- /* Sets screen's brightness to max value. */
- Window window = ((Activity)mContext).getWindow();
- Utils.setScreenBrightness(window, MAX_SCREEN_BRIGHTNESS);
- }
- setFavouritesDialog();
- }
- }
- });
- }
- private void loadCardsList(ArrayList<Cards> cards) {
- if (cardsMainBinding.cardsListViewPager == null) return;
- int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, mActivity.getResources().getDisplayMetrics());
- setInitialCards(cards);
- cardsMainBinding.cardsListViewPager.setOffscreenPageLimit(cards != null ? cards.size() : 0);
- CardsAdapter mCardsAdapter = new CardsAdapter(cards, this);
- // mCardsAdapter.setOnFavouriteClickListener(onFavouriteClickListener);
- cardsMainBinding.cardsListViewPager.setPageMargin(margin);
- cardsMainBinding.cardsListViewPager.setAdapter(mCardsAdapter);
- if (cards.size() == 1) {
- if (!cardsMainBinding.cardsListViewPager.isFakeDragging()) cardsMainBinding.cardsListViewPager.beginFakeDrag();
- } else {
- if (cardsMainBinding.cardsListViewPager.isFakeDragging()) cardsMainBinding.cardsListViewPager.endFakeDrag();
- }
- }
- private void setInitialCards(ArrayList<Cards> cards) {
- cardsMainBinding.cardSize.setText(String.format(getString(R.string.promo_vouchers_cupon_status), 1 , cards.size()));
- if(cardsMainBinding.cardSize != null)
- cardsMainBinding.cardSize.setVisibility(numOfCards > 1 ? View.VISIBLE : View.GONE);
- cardsMainBinding.cardTitle.setText(cards.get(0).getCardName());
- cardsMainBinding.cardNumber.setText(cards.get(0).getCardNumber());
- cardsMainBinding.cardValidAt.setText(String.format(mActivity.getResources().getString(R.string.promos_vouchers_description_end_date),formatDate(cards.get(0).getExpirationDate())));
- mCardNumberValue = cards.get(0).getCardNumber();
- positionItemClicked = 0;
- if (!cards.get(0).isActive()){
- cardsMainBinding.cardNumber.setAlpha(0.5F);
- cardsMainBinding.cardTitle.setAlpha(0.5F);
- }
- }
- private void initCardsListLayout(View view){
- // AppCompatButton mCardDelete = view.findViewById(R.id.card_delete);
- cardsMainBinding.cardsListViewPager.addOnPageChangeListener(viewPageClickListener);
- cardsMainBinding.cardInfo.setOnClickListener(onCardInfoClickListener);
- cardsMainBinding.ivDeleteCard.setOnClickListener(onCardDeleteClickListener);
- // mCardDelete.setTypeface(StringFormatUtils.setFont(view.getContext(), "fonts/canaro-semibold.ttf"));
- }
- /* Dialogs */
- private void showDialog(String text) {
- final AppCompatDialog appCompatDialog = new AppCompatDialog(mActivity);
- appCompatDialog.setContentView(R.layout.dialog_favourite);
- appCompatDialog.setCanceledOnTouchOutside(false);
- if (appCompatDialog.getWindow() != null) {
- appCompatDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
- }
- appCompatDialog.show();
- AppCompatTextView title = appCompatDialog.findViewById(R.id.message);
- if (title != null) {
- title.setText(text);
- title.setTextColor(ContextCompat.getColor(mActivity, R.color.stations_price_confirmation_label));
- title.setTypeface(StringFormatUtils.setFont(mActivity, "fonts/canaro-book.ttf"));
- }
- AppCompatButton confirm = appCompatDialog.findViewById(R.id.close);
- if (confirm != null) {
- confirm.setTypeface(StringFormatUtils.setFont(mActivity, "fonts/canaro-semibold.ttf"));
- confirm.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Utils.setFavouriteDialog(GalpApplication.getInstance().getBaseContext(), true);
- appCompatDialog.dismiss();
- }
- });
- }
- }
- private void setFavouritesDialog() {
- boolean isFavorite = false;
- if (numOfCards > 1){
- for (Cards card : mCards){
- if (card.isFavorite()){
- isFavorite = true;
- }
- }
- if (!isFavorite) {
- boolean isShowPopUp = Utils.getFavouriteDialog(GalpApplication.getInstance().getBaseContext());
- if (!isShowPopUp)
- showDialog(mActivity.getResources().getString(R.string.favorites_title));
- }
- }
- }
- private void setCurrentCard(int position) {
- int currentPosition = position + 1;
- positionItemClicked = position;
- cardsMainBinding.cardSize.setText(String.format(getString(R.string.promo_vouchers_cupon_status), currentPosition , mCards.size()));
- cardsMainBinding.cardTitle.setText(mCards.get(position).getCardName());
- cardsMainBinding.cardNumber.setText(mCards.get(position).getCardNumber());
- cardsMainBinding.cardValidAt.setText(String.format(mActivity.getResources().getString(R.string.promos_vouchers_description_end_date),formatDate(mCards.get(position).getExpirationDate())));
- mCardNumberValue = mCards.get(position).getCardNumber();
- if (!mCards.get(position).isActive()) {
- cardsMainBinding.cardNumber.setAlpha(0.5F);
- cardsMainBinding.cardTitle.setAlpha(0.5F);
- }else {
- cardsMainBinding.cardNumber.setAlpha(1.0F);
- cardsMainBinding.cardTitle.setAlpha(1.0F);
- }
- }
- /* Interfaces overrides */
- private ViewPager.OnPageChangeListener viewPageClickListener = new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageScrolled(int i, float v, int i1) {
- }
- @Override
- public void onPageSelected(int i) {
- setCurrentCard(i);
- }
- @Override
- public void onPageScrollStateChanged(int i) {
- }
- };
- private View.OnClickListener onCardDeleteClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- LogHandler.addLog(mContext, getResources().getString(R.string.cards_delete));
- deleteCard(mCardNumberValue);
- GalpApplication.registerEvent(mActivity.getResources().getString(R.string.cards_action_bar_title), mActivity.getResources().getString(R.string.cards_delete), mActivity.getResources().getString(R.string.cards_delete_card));
- }
- };
- private View.OnClickListener onCardInfoClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- mEventBus.post(new NavigateToFragmentEvent(TermsAndConditionsFragment.newInstance(mCardNumberValue), true));
- }
- };
- @Override
- public void onFavouriteClicked(Cards cards, AppCompatImageView appCompatImageView) {
- if (cards.isFavorite()){
- removeFavourite(cards, appCompatImageView);
- }else {
- addFavourite(cards, appCompatImageView);
- }
- }
- @Override
- public void onContactClick(String contactEmail) {
- // Send Email
- Utils.shareEmailWithMailto(mContext, BuildConfig.CUSTOMER_SUPPORT_EMAIL,
- "",
- "",
- getString(R.string.profile_app_improvements_mail_intent_title));
- }
- /* Favourites methods */
- private void removeFavourite(final Cards cards, final AppCompatImageView favouriteImage) {
- final Favourite favourite = new Favourite();
- favourite.setToken(getSessionToken());
- favourite.setBundle(APIUtils.getCurrentBundleName(ContextProvider.getAppContext()));
- favourite.setPlatform(String.valueOf(Globals.API_REQ_PLATFORM));
- favourite.setVersion(String.valueOf(Globals.VERSION_NAME));
- favourite.setVersion_code(String.valueOf(Globals.VERSION_CODE_NUMBER));
- favourite.setFavorite(cards.isFavorite());
- favourite.setCardNumber(cards.getCardNumber());
- Observable<BaseModel<Favourite>> observable = CardsWebClient.getInstance().removeFavourite(favourite);
- observable.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Subscriber<BaseModel<Favourite>>() {
- @Override
- public void onCompleted() {}
- @Override
- public void onError(Throwable throwable) {
- XLog.e(throwable);
- }
- @Override
- public void onNext(BaseModel<Favourite> favouriteBaseModel) {
- cards.setFavorite(false);
- favouriteImage.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.favorito_off));
- }
- });
- }
- private void addFavourite(final Cards cards, final AppCompatImageView favouriteImage) {
- final Favourite favourite = new Favourite();
- favourite.setToken(getSessionToken());
- favourite.setBundle(APIUtils.getCurrentBundleName(ContextProvider.getAppContext()));
- favourite.setPlatform(String.valueOf(Globals.API_REQ_PLATFORM));
- favourite.setVersion(String.valueOf(Globals.VERSION_NAME));
- favourite.setVersion_code(String.valueOf(Globals.VERSION_CODE_NUMBER));
- favourite.setFavorite(cards.isFavorite());
- favourite.setCardNumber(cards.getCardNumber());
- Observable<BaseModel<Favourite>> observable = CardsWebClient.getInstance().addFavourite(favourite);
- observable.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Subscriber<BaseModel<Favourite>>() {
- @Override
- public void onCompleted() {}
- @Override
- public void onError(Throwable throwable) {
- XLog.e(throwable);
- }
- @Override
- public void onNext(BaseModel<Favourite> favouriteBaseModel) {
- cards.setFavorite(true);
- favouriteImage.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.favorito_on));
- unmarkFavouriteCards(cards);
- }
- });
- }
- private void unmarkFavouriteCards(Cards cards) {
- String cardNumber = cards.getCardNumber();
- for (int i = 0; i < mCards.size(); i++) {
- if (mCards.get(i).isFavorite()){
- if (!mCards.get(i).getCardNumber().equals(cardNumber)) {
- showDialog(mActivity.getResources().getString(R.string.favourites_marked));
- mCards.get(i).setFavorite(false);
- cardsMainBinding.cardsListViewPager.getAdapter().notifyDataSetChanged();
- }
- }
- }
- }
- private void deleteCard(String cardNumberValue) {
- final DeleteCards deleteCards = new DeleteCards();
- deleteCards.setToken(getSessionToken());
- deleteCards.setBundle(APIUtils.getCurrentBundleName(ContextProvider.getAppContext()));
- deleteCards.setPlatform(String.valueOf(Globals.API_REQ_PLATFORM));
- deleteCards.setVersion(String.valueOf(Globals.VERSION_NAME));
- deleteCards.setVersion_code(String.valueOf(Globals.VERSION_CODE_NUMBER));
- deleteCards.setCardNumber(cardNumberValue);
- Utils.showDialogCard(mActivity, "", new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Observable<BaseModel<DeleteCards>> observable = CardsWebClient.getInstance().removeCard(deleteCards);
- observable.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Subscriber<BaseModel<DeleteCards>>() {
- @Override
- public void onCompleted() {}
- @Override
- public void onError(Throwable throwable) {
- XLog.e(throwable);
- }
- @Override
- public void onNext(BaseModel<DeleteCards> deleteCardsBaseModel) {
- if (deleteCardsBaseModel != null && deleteCardsBaseModel.getData() != null){
- mCards.remove(positionItemClicked);
- cardsMainBinding.cardsListViewPager.getAdapter().notifyDataSetChanged();
- updateCardListText();
- if(mCards.size() == 0){
- cardsMainBinding.listOfCards.setVisibility(View.GONE);
- cardsMainBinding.layAddCard.setVisibility(View.VISIBLE);
- } else {
- cardsMainBinding.cardsListViewPager.setCurrentItem(0);
- setCurrentCard(0);
- }
- }
- }
- });
- }
- });
- }
- /* Utilities methods */
- private String getSessionToken() {
- LoginResponse response = Utils.getObjectFromSettings(mActivity, Globals.PREFERENCES_SESSION, LoginResponse.class);
- return response != null ? response.getAccessToken() : null;
- }
- private String formatDate(String dateValidAt){
- SimpleDateFormat dateFormatOutput = new SimpleDateFormat("MM/yyyy", Locale.getDefault());
- SimpleDateFormat dateFormatInput = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
- java.util.Date date = null;
- try {
- date = dateFormatInput.parse(dateValidAt);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- return dateFormatOutput.format(date);
- }
- private void showLoginFragment() {
- // mLoginFragment = GalpIDLoginFragment.newInstance();
- mLoginFragment = LoginSelectionFragment.newInstance();
- android.support.v4.app.FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
- ft.add(R.id.fragment_shell, mLoginFragment);
- ft.commit();
- }
- private void updateCardListText() {
- if(mCards.size() <= 1) {
- cardsMainBinding.cardSize.setVisibility(View.GONE);
- }else {
- cardsMainBinding.cardSize.setText(String.format(getString(R.string.promo_vouchers_cupon_status), 1 , mCards.size()));
- }
- }
- public void onEvent(LoginCompleteEvent loginCompleteEvent){
- if(loginCompleteEvent.isSuccess()){
- removeCurrentFragment(mLoginFragment);
- mLoginFragment = null;
- getCards();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement