package com.basket.lists; import java.util.ArrayList; import java.util.List; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.animation.DecelerateInterpolator; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import com.basket.adapters.BasketAdapter; import com.basket.containers.BasketSession; import com.basket.general.BidEvent; import com.basket.general.BuyEvent; import com.basket.general.CarJsonSpringAndroidSpiceService; import com.basket.general.Event; import com.basket.general.ProductBasket; import com.basket.restrequest.ByteContainer; import com.basket.restrequest.NewBasketRequest; import com.basket.restrequest.UpdateBasketRequest; import com.example.basket.R; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.exception.RequestCancelledException; import com.octo.android.robospice.persistence.DurationInMillis; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import com.octo.android.robospice.request.listener.RequestProgress; import com.octo.android.robospice.request.listener.RequestProgressListener; public class BasketListFragment extends android.app.ListFragment { private ArrayList<ProductBasket> foundBaskets; private Animator mCurrentAnimator; private int mShortAnimationDuration; private RelativeLayout layout; private int currentPos=0; private SpiceManager spiceManager = new SpiceManager(CarJsonSpringAndroidSpiceService.class); ProductBasket defaultPB; private boolean test = true; public void onCreate(Bundle savedInstance) { foundBaskets= BasketSession.getUser().getBaskets(); if(foundBaskets.size()==0){ defaultPB = new ProductBasket(); defaultPB.setBidEvents(new ArrayList<BidEvent>()); defaultPB.setBuyEvents(new ArrayList<BuyEvent>()); defaultPB.setName("Default"); if(!spiceManager.isStarted()) spiceManager.start(getActivity()); NewBasketRequest JsonSpringAndroidRequest = new NewBasketRequest(defaultPB,BasketSession.getUser().getUsername()); BasketSession.getUser().getBaskets().add(defaultPB); spiceManager.execute(JsonSpringAndroidRequest, "Basket_Update", DurationInMillis.ALWAYS_EXPIRED, new NewBasketListener()); } super.onCreate(savedInstance); foundBaskets= BasketSession.getUser().getBaskets(); getActivity().setTitle("Basket List"); BasketAdapter adapter = new BasketAdapter(this.getActivity(),foundBaskets); this.setListAdapter(adapter); layout= new RelativeLayout(this.getActivity()); RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); this.getActivity().addContentView(layout, rlp); } public void onListItemClick(ListView l, View v, int pos , long id ) { spiceManager.start(getActivity()); currentPos=pos; boolean found = false; for(int i = 0; i<BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().size();i++) { List<BuyEvent> list = BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents(); List<Event> inList = BasketSession.getProductSearch(); int in = BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().get(i).getId(); int out =0; if(this.getActivity().getIntent().getBooleanExtra("fromDeals", false)){ out = ((BuyEvent) BasketSession.getDeals().get(getActivity().getIntent().getIntExtra("selected", 0)).getEve()).getId(); } else if(this.getActivity().getIntent().getBooleanExtra("fromHP", false)){ out = ((BuyEvent) BasketSession.getRecommendations().get(getActivity().getIntent().getIntExtra("selected", 0))).getId(); } else out = ((BuyEvent) BasketSession.getProductSearch().get(getActivity().getIntent().getIntExtra("selected", 0))).getId(); if( in == out) { BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().get(i).setitem_quantity(BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().get(i).getitem_quantity()+1); found = true; break; } } if(!found) { if(this.getActivity().getIntent().getBooleanExtra("fromDeals", false)){ BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().add(((BuyEvent) BasketSession.getDeals().get(getActivity().getIntent().getIntExtra("selected", 0)).getEve())); } else if(this.getActivity().getIntent().getBooleanExtra("fromHP", false)){ BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().add((BuyEvent) BasketSession.getRecommendations().get(getActivity().getIntent().getIntExtra("selected", 0))); } else BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().add((BuyEvent) BasketSession.getProductSearch().get(getActivity().getIntent().getIntExtra("selected", 0))); } //is this ok? UpdateBasketRequest JsonSpringAndroidRequest; if(this.getActivity().getIntent().getBooleanExtra("fromDeals", false)) JsonSpringAndroidRequest = new UpdateBasketRequest(foundBaskets.get(pos).getId(),((BuyEvent) BasketSession.getDeals().get(getActivity().getIntent().getIntExtra("selected", 0)).getEve()).getId(),foundBaskets.get(pos)); else if (this.getActivity().getIntent().getBooleanExtra("fromHP", false)) JsonSpringAndroidRequest = new UpdateBasketRequest(foundBaskets.get(pos).getId(),((BuyEvent) BasketSession.getRecommendations().get(getActivity().getIntent().getIntExtra("selected", 0))).getId(),foundBaskets.get(pos)); else JsonSpringAndroidRequest = new UpdateBasketRequest(foundBaskets.get(pos).getId(),((BuyEvent) BasketSession.getProductSearch().get(getActivity().getIntent().getIntExtra("selected", 0))).getId(),foundBaskets.get(pos)); spiceManager.execute(JsonSpringAndroidRequest, "Basket_Update", DurationInMillis.ALWAYS_EXPIRED, new BasketUpdateListener()); } private void zoomImageFromThumb(final View thumbView, int imageResId) { // If there's an animation in progress, cancel it immediately and proceed with this one. if (mCurrentAnimator != null) { mCurrentAnimator.cancel(); } // Load the high-resolution "zoomed-in" image. final View expandedImageView = thumbView; // Calculate the starting and ending bounds for the zoomed-in image. This step // involves lots of math. Yay, math. final Rect startBounds = new Rect(); final Rect finalBounds = new Rect(); final Point globalOffset = new Point(); // The start bounds are the global visible rectangle of the thumbnail, and the // final bounds are the global visible rectangle of the container view. Also // set the container view's offset as the origin for the bounds, since that's // the origin for the positioning animation properties (X, Y). thumbView.getGlobalVisibleRect(startBounds); // thumbView.findViewById(R.id.fragmentContainer).getGlobalVisibleRect(finalBounds, globalOffset); startBounds.offset(-globalOffset.x, -globalOffset.y); finalBounds.offset(-globalOffset.x, -globalOffset.y); // Adjust the start bounds to be the same aspect ratio as the final bounds using the // "center crop" technique. This prevents undesirable stretching during the animation. // Also calculate the start scaling factor (the end scaling factor is always 1.0). float startScale; if ((float) finalBounds.width() / finalBounds.height() > (float) startBounds.width() / startBounds.height()) { // Extend start bounds horizontally startScale = (float) startBounds.height() / finalBounds.height(); float startWidth = startScale * finalBounds.width(); float deltaWidth = (startWidth - startBounds.width()) / 2; startBounds.left -= deltaWidth; startBounds.right += deltaWidth; } else { // Extend start bounds vertically startScale = (float) startBounds.width() / finalBounds.width(); float startHeight = startScale * finalBounds.height(); float deltaHeight = (startHeight - startBounds.height()) / 2; startBounds.top -= deltaHeight; startBounds.bottom += deltaHeight; } // Hide the thumbnail and show the zoomed-in view. When the animation begins, // it will position the zoomed-in view in the place of the thumbnail. thumbView.setAlpha(0f); expandedImageView.setVisibility(View.VISIBLE); // Set the pivot point for SCALE_X and SCALE_Y transformations to the top-left corner of // the zoomed-in view (the default is the center of the view). expandedImageView.setPivotX(0f); expandedImageView.setPivotY(0f); // Construct and run the parallel animation of the four translation and scale properties // (X, Y, SCALE_X, and SCALE_Y). AnimatorSet set = new AnimatorSet(); set .play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left, finalBounds.left)) .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top, finalBounds.top)) .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScale, 1f)) .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScale, 1f)); set.setDuration(mShortAnimationDuration); set.setInterpolator(new DecelerateInterpolator()); set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mCurrentAnimator = null; } @Override public void onAnimationCancel(Animator animation) { mCurrentAnimator = null; } }); set.start(); mCurrentAnimator = set; // Upon clicking the zoomed-in image, it should zoom back down to the original bounds // and show the thumbnail instead of the expanded image. final float startScaleFinal = startScale; expandedImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mCurrentAnimator != null) { mCurrentAnimator.cancel(); } // Animate the four positioning/sizing properties in parallel, back to their // original values. AnimatorSet set = new AnimatorSet(); set .play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left)) .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top)) .with(ObjectAnimator .ofFloat(expandedImageView, View.SCALE_X, startScaleFinal)) .with(ObjectAnimator .ofFloat(expandedImageView, View.SCALE_Y, startScaleFinal)); set.setDuration(mShortAnimationDuration); set.setInterpolator(new DecelerateInterpolator()); set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { thumbView.setAlpha(1f); expandedImageView.setVisibility(View.GONE); mCurrentAnimator = null; } @Override public void onAnimationCancel(Animator animation) { thumbView.setAlpha(1f); expandedImageView.setVisibility(View.GONE); mCurrentAnimator = null; } }); set.start(); mCurrentAnimator = set; } }); } public class MyRenderer extends RelativeLayout { public MyRenderer(Context context) { super(context); View e = View.inflate(context, R.layout.basket_overview, null); RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); // addView(e,rlp); } } private class BasketUpdateListener implements RequestListener<Boolean>, RequestProgressListener { @Override public void onRequestFailure(SpiceException arg0) { Log.d("error",arg0.getMessage()); if (!(arg0 instanceof RequestCancelledException)) { Toast.makeText(getActivity(), "Item could not be added", Toast.LENGTH_SHORT).show(); } Toast.makeText(getActivity(), "Item added", Toast.LENGTH_SHORT).show(); //BasketSession.getUser().getBaskets().get(currentPos).getBuyEvents().remove(BasketSession.getProductSearch().get(getActivity().getIntent().getIntExtra("selectedEvent", 0))); if (spiceManager.isStarted()) { spiceManager.shouldStop(); } } @Override public void onRequestSuccess(Boolean bool) { spiceManager.shouldStop(); Toast.makeText(getActivity(), "Product Added to Basket", Toast.LENGTH_SHORT).show(); getActivity().finish(); } @Override public void onRequestProgressUpdate(RequestProgress arg0) { } } private class NewBasketListener implements RequestListener<ByteContainer>, RequestProgressListener { @Override public void onRequestFailure(SpiceException arg0) { Log.d("error",arg0.getMessage()); if (!(arg0 instanceof RequestCancelledException)) { Toast.makeText(getActivity(), "Basket could not be created", Toast.LENGTH_SHORT).show(); } BasketSession.getUser().getBaskets().remove(BasketSession.getUser().getBaskets().size()-1); spiceManager.shouldStop(); } @Override public void onRequestSuccess(ByteContainer bool) { spiceManager.shouldStop(); defaultPB.setId(bool.getValue()); //BasketSession.getUser().getBaskets().add(defaultPB); Toast.makeText(getActivity(), "Basket Created", Toast.LENGTH_SHORT).show(); test = false; } @Override public void onRequestProgressUpdate(RequestProgress arg0) { } } }