package edu.grinnell.kdic.visualizer; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.OvershootInterpolator; import android.view.animation.ScaleAnimation; import android.widget.TextView; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import edu.grinnell.kdic.Favorites; import edu.grinnell.kdic.R; import edu.grinnell.kdic.Show; import edu.grinnell.kdic.schedule.Schedule; /** * A placeholder fragment containing a simple view. */ public class VisualizeFragment extends Fragment { public static final String TAG = "VisualizeFragment"; private TextView showName; private TextView showTime; private FloatingActionButton fabFavorite; private Show currentShow; private Favorites favorites; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main, container, false); showName = (TextView) view.findViewById(R.id.tv_show_name); showTime = (TextView) view.findViewById(R.id.tv_show_time); fabFavorite = (FloatingActionButton) view.findViewById(R.id.fab_favorite); favorites = new Favorites(getContext()); return view; } @Override public void onResume() { currentShow = Schedule.getCurrentShow(getActivity()); try { if (currentShow == null) { showName.setText("No show\nScheduled"); showTime.setText("The station is on Auto Play."); fabFavorite.setVisibility(View.GONE); } else { SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE"); SimpleDateFormat timeFormat = new SimpleDateFormat("h:mm a"); // E - day name in week // a - am/pm marker // h - hour in am/pm (1-12) // m - minute in hour // get today's date Date today = new Date(); Date time = timeFormat.parse(currentShow.getTime()); final Calendar calendar = Calendar.getInstance(); calendar.setTime(time); calendar.add(Calendar.HOUR, 1); String endTime = timeFormat.format(calendar.getTime()); String title = currentShow.getTitle(); String[] words = currentShow.getTitle().trim().split(" "); if (words.length > 1) { title = ""; for (int i = 0; i < words.length; i++) { title += words[i] + " "; if (i == words.length / 2 - 1) title += "\n"; } } showName.setText(title); showTime.setText(dayFormat.format(today) + "s " + currentShow.getTime() + " to " + endTime); fabFavorite.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final boolean wasFavorite = favorites.isFavorite(currentShow.getTitle()); if (wasFavorite) { favorites.removeFavorite(currentShow.getTitle()); } else { favorites.addFavorites(currentShow.getTitle()); } // animate the heart button final ScaleAnimation heartInAnim = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); heartInAnim.setInterpolator(new OvershootInterpolator()); heartInAnim.setDuration(200); ScaleAnimation heartOutAnim = new ScaleAnimation(1f, 0f, 1f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); heartOutAnim.setInterpolator(new AccelerateInterpolator()); heartOutAnim.setDuration(100); heartOutAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { fabFavorite.startAnimation(heartInAnim); fabFavorite.setImageResource(!wasFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_border_white_24dp); } @Override public void onAnimationRepeat(Animation animation) { } }); fabFavorite.startAnimation(heartOutAnim); } }); fabFavorite.setImageResource(favorites.isFavorite(currentShow.getTitle()) ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_border_white_24dp); fabFavorite.setVisibility(View.VISIBLE); } } catch (ParseException e) { e.printStackTrace(); } super.onResume(); } }