package com.truckmuncher.app.vendor; import android.app.Activity; import android.location.Location; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.Toast; import com.truckmuncher.app.R; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnCheckedChanged; public class VendorHomeFragment extends VendorMapFragment { private static final String ARG_CURRENT_LOCATION = "current_location"; @InjectView(R.id.vendor_map_marker) ImageView vendorMapMarker; @InjectView(R.id.vendor_map_marker_pulse) ImageView vendorMarkerPulse; private Location currentLocation; private OnServingModeChangedListener onServingModeChangedListener; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { onServingModeChangedListener = (OnServingModeChangedListener) activity; } catch (ClassCastException e) { throw new ClassCastException("Calling activity must implement " + OnServingModeChangedListener.class.getName()); } } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_vendor_home, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.inject(this, view); if (savedInstanceState != null) { currentLocation = savedInstanceState.getParcelable(ARG_CURRENT_LOCATION); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(ARG_CURRENT_LOCATION, currentLocation); } @Override public void onDestroyView() { ButterKnife.reset(this); super.onDestroyView(); } @Override public void onDetach() { onServingModeChangedListener = null; super.onDetach(); } @Override void onLocationUpdate(Location location) { currentLocation = location; } @OnCheckedChanged(R.id.serving_mode) void onServingModeClicked(SwitchCompat view) { if (currentLocation == null) { Toast.makeText(getActivity(), R.string.error_serving_no_location, Toast.LENGTH_LONG).show(); // Un-switch the switch view.toggle(); return; } boolean isChecked = view.isChecked(); int marker = isChecked ? R.drawable.map_marker_green : R.drawable.map_marker_gray; vendorMapMarker.setImageDrawable(getResources().getDrawable(marker)); updateAnimation(isChecked); setMapControlsEnabled(!isChecked); onServingModeChangedListener.onServingModeChanged(isChecked, currentLocation); } private void updateAnimation(boolean servingModeEnabled) { if (servingModeEnabled) { AnimationSet animations = new AnimationSet(false); animations.addAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.pulse)); animations.addAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade)); vendorMarkerPulse.startAnimation(animations); vendorMarkerPulse.setVisibility(View.VISIBLE); } else { vendorMarkerPulse.clearAnimation(); vendorMarkerPulse.setVisibility(View.GONE); } } interface OnServingModeChangedListener { void onServingModeChanged(boolean enabled, Location currentLocation); } }