package com.bdc.ociney.fragment; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; import android.graphics.Point; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.AbsListView; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.bdc.ociney.R; import com.bdc.ociney.activity.AppFragmentActivity; import com.bdc.ociney.activity.MovieActivity; import com.bdc.ociney.activity.StarActivity; import com.bdc.ociney.adapter.ImagesPagerAdapter; import com.bdc.ociney.adapter.ObjectAdapter; import com.bdc.ociney.fragment.core.BetterFragment; import com.bdc.ociney.modele.Media; import com.bdc.ociney.modele.Movie.Movie; import com.bdc.ociney.modele.Participation; import com.bdc.ociney.modele.Person.PersonFull; import com.bdc.ociney.service.Service; import com.bdc.ociney.utils.DateUtils; import com.bdc.ociney.utils.actionbar.ActionBarHider; import com.bdc.ociney.utils.transformation.BlurTransformation; import com.bdc.ociney.utils.transformation.CircleTransform; import com.bdc.ociney.utils.transformation.ParallaxTransformer; import com.bdc.ociney.view.CellJaquette; import com.bdc.ociney.view.ObservableScrollViewAnimateVisible; import com.bdc.ociney.view.textview.TextViewEx; import com.bdc.ociney.view.textview.TypefacedTextView; import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.squareup.picasso.Picasso; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class StarFragment extends BetterFragment { public static final String PERSON = "person"; private static final int NOMBRE_JAQUETTE_AFFICHE = 7; PersonFull person; SlidingUpPanelLayout slidingDrawer; ViewGroup castingLayout; ImageView personImage; View top_rank; View couronne; ImageView image0; ImageView image1; ImageView image2; TextView titreBiographie; TextViewEx biographie; TextView nameStar; TextView role; TextView dateNaissance; TextView lieuNaissance; TextView nationality; TextView age; ObservableScrollViewAnimateVisible scrollView; ActionBarHider actionBarHider; AbsListView gridViewFilmo; boolean premierLancement = true; ViewPager viewPager; ImagesPagerAdapter imagesAdapter; ObjectAdapter<Participation> filmoAdapter; List<String> imagesUrl = new ArrayList<String>(); View filmo1; View filmo2; View filmo3; View filmo4; View filmo5; View filmo6; View filmo7; View filmos; View plus_photo; List<Participation> participations; View filmoPlus; ImageView imageFond; boolean afficherFilmos = false; boolean erreurReseau = false; Toolbar toolbar; public static StarFragment newInstance(PersonFull person) { return newInstance(new Gson().toJson(person)); } public static StarFragment newInstance(String personJson) { StarFragment fragment = new StarFragment(); Bundle args = new Bundle(); args.putString(PERSON, personJson); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_star, container, false); setFragmentView(view); toolbar = (Toolbar)((getActivity()).findViewById(R.id.toolbar)); Bundle bundle = getArguments(); if (bundle != null) { if (bundle.containsKey(PERSON)) { person = new Gson().fromJson(bundle.getString(PERSON), new TypeToken<PersonFull>() { }.getType()); } } charger(); ajouterListeners(); remplirLocal(); slidingDrawer.setSlidingEnabled(false); tournerRoulette(true, R.id.placeholder_image_loader); new LoadPersonTask().execute(person.getCode() + ""); return view; } @Override protected void charger() { WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; findViewById(R.id.fragmentStarFond).setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, size.y + 200)); // GridView Jaquette gridViewFilmo = (AbsListView) findViewById(R.id.gridViewFilmo); slidingDrawer = (SlidingUpPanelLayout) findViewById(R.id.slidingDrawer); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { slidingDrawer.setElevation(0); } scrollView = (ObservableScrollViewAnimateVisible) findViewById(R.id.scrollView); actionBarHider = new ActionBarHider(getActivity(), toolbar, R.id.fragmentStarContent); this.viewPager = (ViewPager) findViewById(R.id.viewPager); // On charge les caracteristiques de la personnalité titreBiographie = (TextView) findViewById(R.id.titreBiographie); personImage = (ImageView) findViewById(R.id.personImage); biographie = (TextViewEx) findViewById(R.id.biographie); castingLayout = (ViewGroup) findViewById(R.id.castingLayout); nameStar = (TextView) findViewById(R.id.nameStar); role = (TextView) findViewById(R.id.role); this.top_rank = findViewById(R.id.topstar); this.couronne = findViewById(R.id.couronne); // On charge les photos image0 = (ImageView) findViewById(R.id.relative_photo).findViewById(R.id.image0); image1 = (ImageView) findViewById(R.id.relative_photo).findViewById(R.id.image1); image2 = (ImageView) findViewById(R.id.relative_photo).findViewById(R.id.image2); // On charge les jaquettes de la filmo filmo1 = findViewById(R.id.filmo1); filmo2 = findViewById(R.id.filmo2); filmo3 = findViewById(R.id.filmo3); filmo4 = findViewById(R.id.filmo4); filmo5 = findViewById(R.id.filmo5); filmo6 = findViewById(R.id.filmo6); filmo7 = findViewById(R.id.filmo7); filmos = findViewById(R.id.filmos); // On charge le bouton plus filmoPlus = findViewById(R.id.filmoPlus); // On charge les informations de naissance dateNaissance = (TextView) findViewById(R.id.dateNaissance); lieuNaissance = (TextView) findViewById(R.id.lieuNaissance); // Plus pour les photos plus_photo = findViewById(R.id.plus_photo); this.imageFond = (ImageView) findViewById(R.id.imageFond); // Nationality this.nationality = (TextView) findViewById(R.id.nationality); // Age this.age = (TextView) findViewById(R.id.age); } public void remplirLocal() { if (person.getPicture() != null && person.getPicture().getHref(0) != null) { String urlFond = person.getPicture().getHref(getActivity().getResources().getInteger(R.integer.fragment_movie_fond_personnality_height)); Picasso.with(getActivity()).load(urlFond).transform(new CircleTransform()).into(personImage); imagesUrl.add(urlFond); Picasso.with(getActivity()).load(urlFond).transform(new BlurTransformation()).into(imageFond); } if (person.getFullName() != null) { String name = ""; if (person.getFullName().getGiven() != null) name += person.getFullName().getGiven() + " "; if (person.getFullName().getFamily() != null) name += person.getFullName().getFamily(); this.nameStar.setText(name); // On met le nom de la star dans l'action bar ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(name); } this.top_rank.setVisibility(View.GONE); this.couronne.setVisibility(View.GONE); if (person.getStatistics() != null) { int top_rank = person.getStatistics().getRankTopStar(); switch (top_rank) { case 1: this.top_rank.setVisibility(View.VISIBLE); this.couronne.setVisibility(View.VISIBLE); this.top_rank.setBackgroundResource(R.drawable.ic_topstar_1); break; case 2: this.top_rank.setVisibility(View.VISIBLE); this.top_rank.setBackgroundResource(R.drawable.ic_topstar_2); break; case 3: this.top_rank.setVisibility(View.VISIBLE); this.top_rank.setBackgroundResource(R.drawable.ic_topstar_3); break; } } String activities = person.getActivities(); if (activities.trim().length() > 0) { this.role.setText(activities); } else { this.role.setText(getActivity().getString(R.string.activite_non_renseigne)); } } @Override protected void remplir() { tournerRoulette(false, R.id.placeholder_image_loader); try { String urImage0 = person.getMedia().get(0).getThumbnail().getHref(getResources().getInteger(R.integer.star_photo_height)); String urImage1 = person.getMedia().get(1).getThumbnail().getHref(getResources().getInteger(R.integer.star_photo_height)); String urImage2 = person.getMedia().get(2).getThumbnail().getHref(getResources().getInteger(R.integer.star_photo_height)); Picasso.with(getActivity()).load(urImage0).into(image0); Picasso.with(getActivity()).load(urImage1).into(image1); Picasso.with(getActivity()).load(urImage2).into(image2); findViewById(R.id.relative_photo).setVisibility(View.VISIBLE); imagesUrl.add(urImage0); imagesUrl.add(urImage1); imagesUrl.add(urImage2); //imageFond.activerBlur(getActivity().getResources().getInteger(R.integer.fragment_movie_fond_blur)) // .activerAnimations().loadFromUrl(getActivity(), urImage0); //Picasso.with(getActivity()).load(urImage0).transform(new CircleTransform()).into(personImage); } catch (Exception e) { e.printStackTrace(); findViewById(R.id.relative_photo).setVisibility(View.GONE); } if (person != null && person.getNationality() != null) { this.nationality.setText("(" + person.getNationality().get(0).get$() + ")"); this.nationality.setVisibility(View.VISIBLE); } if (person.getStatistics() != null) { int top_rank = person.getStatistics().getRankTopStar(); switch (top_rank) { case 1: this.couronne.setVisibility(View.VISIBLE); this.top_rank.setVisibility(View.VISIBLE); this.top_rank.setBackgroundResource(R.drawable.ic_topstar_1); break; case 2: this.top_rank.setVisibility(View.VISIBLE); this.top_rank.setBackgroundResource(R.drawable.ic_topstar_2); break; case 3: this.top_rank.setVisibility(View.VISIBLE); this.top_rank.setBackgroundResource(R.drawable.ic_topstar_3); break; } } // On change le rôle de la star role.setText(person.getActivities()); findViewById(R.id.metiers_container).setVisibility(View.VISIBLE); if (person.getBiography() != null) { // On écrit la biographie biographie.setText(person.getBiography(), true); findViewById(R.id.relative_biographie).setVisibility(View.VISIBLE); } if (person.getBirthDate() != null) { dateNaissance.setText(DateUtils.dateFormat(person.getBirthDate())); findViewById(R.id.relative_date_naissance).setVisibility(View.VISIBLE); // Calculer l'age this.age.setText(DateUtils.age(person.getBirthDate())); this.age.setVisibility(View.VISIBLE); } if (person.getBirthPlace() != null) { lieuNaissance.setText(person.getBirthPlace()); findViewById(R.id.relative_lieu_naissance).setVisibility(View.VISIBLE); } if (this.person.getParticipation() != null) { findViewById(R.id.relative_filmographie).setVisibility(View.VISIBLE); // On affiche la photo de la star s'il y en a une if (person.getPicture() != null && person.getPicture().getHref(0) != null) { participations = person.getParticipation(NOMBRE_JAQUETTE_AFFICHE); } if (this.person.getParticipation().size() > 0) { // Ajoute 4 films this.person.getParticipation().add(new Participation()); this.person.getParticipation().add(new Participation()); this.person.getParticipation().add(new Participation()); this.person.getParticipation().add(new Participation()); findViewById(R.id.relative_filmographie).setVisibility(View.VISIBLE); afficherJaquette(this.filmo1, 0); afficherJaquette(this.filmo2, 1); afficherJaquette(this.filmo3, 2); afficherJaquette(this.filmo4, 3); afficherJaquette(this.filmo5, 4); afficherJaquette(this.filmo6, 5); afficherJaquette(this.filmo7, 6); if (person.getParticipation() != null && person.getParticipation().size() > NOMBRE_JAQUETTE_AFFICHE) { filmoPlus.setVisibility(View.VISIBLE); } filmoAdapter = new ObjectAdapter<Participation>(getActivity(), this.person.getParticipation(), R.layout.jaquette, CellJaquette.class); gridViewFilmo.setAdapter(filmoAdapter); } } slidingDrawer.postDelayed(new Runnable() { @Override public void run() { slidingDrawer.setSlidingEnabled(true); slidingDrawer.expandPanel(); scrollView.start(); } }, 2000); viewPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent)); for (Media m : person.getMedia()) { if (m.getThumbnail() != null && m.getThumbnail().getHref(600) != null) imagesUrl.add(m.getThumbnail().getHref(600)); } imagesAdapter = new ImagesPagerAdapter(getChildFragmentManager(), getActivity(), imagesUrl); viewPager.setAdapter(imagesAdapter); } private void afficherJaquette(View view, int i) { Participation participation; if (participations != null && participations.size() > i) { participation = participations.get(i); view.setVisibility(View.VISIBLE); if (participation.getMovie() != null && participation.getMovie().getPoster() != null) { String urlImage = participation.getMovie().getUrlPoster(getActivity().getResources().getInteger(R.integer.star_filmo_jaquette_height)); Picasso.with(getActivity()).load(urlImage).into((ImageView) view.findViewById(R.id.jaquette)); } if (participation.getMovie() != null && participation.getMovie().getTitle() != null) { ((TypefacedTextView) view.findViewById(R.id.titreFilmo)).setText(participation.getMovie().getTitle()); } else { if (participation.getMovie() != null && participation.getMovie().getOriginalTitle() != null) { ((TypefacedTextView) view.findViewById(R.id.titreFilmo)).setText(participation.getMovie().getOriginalTitle()); } else { // participations.remove(i); view.setVisibility(View.GONE); } } if (participation.getRole() != null) ((TypefacedTextView) view.findViewById(R.id.roleFilmo)).setText(participation.getRole()); else ((TypefacedTextView) view.findViewById(R.id.roleFilmo)).setText(getString(R.string.role_non_renseigne)); } } @Override protected void ajouterListeners() { filmo1.setOnClickListener(this); filmo2.setOnClickListener(this); filmo3.setOnClickListener(this); filmo4.setOnClickListener(this); filmo5.setOnClickListener(this); filmo6.setOnClickListener(this); filmo7.setOnClickListener(this); plus_photo.setOnClickListener(this); image0.setOnClickListener(this); image1.setOnClickListener(this); image2.setOnClickListener(this); slidingDrawer.setPanelSlideListener( new SlidingUpPanelLayout.PanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { try { Field f = slidingDrawer.getClass().getDeclaredField("mSlideOffset"); f.setAccessible(true); float mSlideOffset = f.getFloat(slidingDrawer); imageFond.setAlpha(mSlideOffset); viewPager.setAlpha(1 - mSlideOffset); filmos.setAlpha(1 - mSlideOffset); //findViewById(R.id.fondFilmo).setAlpha(mSlideOffset); actionBarHider.setActionBarTranslation(-1 * mSlideOffset); }catch (Exception e){ e.printStackTrace(); } } @Override public void onPanelCollapsed(View panel) { if (afficherFilmos) { afficherFilmosFond(); } } @Override public void onPanelExpanded(View panel) { premierLancement = false; } @Override public void onPanelAnchored(View panel) { } @Override public void onPanelHidden(View view) { } } ); filmoPlus.setOnClickListener(this); } public void onClick(View view) { Movie movie = null; switch (view.getId()) { case R.id.filmo1: if (participations.get(0) != null) movie = participations.get(0).getMovie(); break; case R.id.filmo2: if (participations.get(1) != null) movie = participations.get(1).getMovie(); break; case R.id.filmo3: if (participations.get(2) != null) movie = participations.get(2).getMovie(); break; case R.id.filmo4: if (participations.get(3) != null) movie = participations.get(3).getMovie(); break; case R.id.filmo5: if (participations.get(4) != null) movie = participations.get(4).getMovie(); break; case R.id.filmo6: if (participations.get(5) != null) movie = participations.get(5).getMovie(); break; case R.id.filmo7: if (participations.get(6) != null) movie = participations.get(6).getMovie(); break; case R.id.filmoPlus: afficherFilmo(); break; case R.id.image0: afficherPhotos(1); break; case R.id.image1: afficherPhotos(2); break; case R.id.image2: afficherPhotos(3); break; case R.id.plus_photo: afficherPhotos(4); break; } if (movie != null) { lancerMovie(view, movie); } } public void refreshAdapter(List<Object> movies) { } public void lancerMovie(View view, Movie movie) { Intent intent = new Intent(getActivity(), MovieActivity.class); intent.putExtra(MovieFragment.ACTIONBAR_TITLE, AppFragmentActivity.actionBarSubTitle); intent.putExtra(MovieFragment.MOVIE, (new Gson()).toJson(movie)); Bundle b = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { b = ActivityOptions.makeScaleUpAnimation(view, 0, 0, view.getWidth(), view.getHeight()).toBundle(); getActivity().startActivity(intent, b); } else { getActivity().startActivity(intent); getActivity().overridePendingTransition(0, 0); } } public void afficherPhotos(int currentItem) { ((StarActivity) getActivity()).afficherPhoto(); findViewById(R.id.fondFilmo).setVisibility(View.GONE); filmos.setVisibility(View.GONE); if (imagesAdapter != null) viewPager.setAdapter(imagesAdapter); viewPager.getAdapter().notifyDataSetChanged(); viewPager.setCurrentItem(currentItem); slidingDrawer.collapsePanel(); } public void afficherFilmo() { ((StarActivity) getActivity()).afficherFilmo(); findViewById(R.id.fondFilmo).setVisibility(View.VISIBLE); afficherFilmos = true; slidingDrawer.collapsePanel(); } public void afficherFilmosFond() { findViewById(R.id.fondFilmo).setVisibility(View.VISIBLE); if (filmoAdapter != null) { filmos.setVisibility(View.VISIBLE); } afficherFilmos = false; } public PersonFull getPerson() { return person; } class LoadPersonTask extends AsyncTask<Object, Void, PersonFull> { @Override protected PersonFull doInBackground(Object... data) { String idPerson = (String) data[0]; try { PersonFull person = Service.person(idPerson, Service.PROFILE_LARGE, Service.FILTER_PERSON); return person; } catch (Service.NetworkException e) { erreurReseau = true; return null; } } @Override protected void onPostExecute(PersonFull person) { super.onPostExecute(person); try { if (erreurReseau) onErreurReseau(); else { StarFragment.this.person = person; remplir(); } } catch (Exception e) { } } } }