package com.thebluealliance.androidclient.fragments.team; import com.thebluealliance.androidclient.R; import com.thebluealliance.androidclient.accounts.AccountController; import com.thebluealliance.androidclient.binders.TeamInfoBinder; import com.thebluealliance.androidclient.datafeed.combiners.TeamMediaAndSocialMediaCombiner; import com.thebluealliance.androidclient.eventbus.LiveEventUpdateEvent; import com.thebluealliance.androidclient.fragments.DatafeedFragment; import com.thebluealliance.androidclient.helpers.EventTeamHelper; import com.thebluealliance.androidclient.listeners.EventTeamClickListener; import com.thebluealliance.androidclient.listitems.EventListElement; import com.thebluealliance.androidclient.models.NoDataViewParams; import com.thebluealliance.androidclient.renderers.EventRenderer; import com.thebluealliance.androidclient.subscribers.TeamInfoSubscriber; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import javax.inject.Inject; import dagger.Lazy; import rx.Observable; public class TeamInfoFragment extends DatafeedFragment<TeamInfoSubscriber.Model, TeamInfoBinder.Model, TeamInfoSubscriber, TeamInfoBinder> { private static final String TEAM_KEY = "team_key"; private String mTeamKey; @Inject EventBus mEventBus; @Inject Lazy<EventRenderer> mEventRenderer; @Inject AccountController mAccountController; public static TeamInfoFragment newInstance(String teamKey) { TeamInfoFragment fragment = new TeamInfoFragment(); Bundle args = new Bundle(); args.putString(TEAM_KEY, teamKey); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { mTeamKey = getArguments().getString(TEAM_KEY); if (mTeamKey == null) { throw new IllegalArgumentException("TeamInfoFragment must be created with a team key!"); } super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_team_info, container, false); // Only show space for the FAB if the FAB is visible boolean myTbaEnabled = mAccountController.isMyTbaEnabled(); view.findViewById(R.id.fab_padding).setVisibility(myTbaEnabled ? View.VISIBLE : View.GONE); mBinder.setRootView(view); return view; } @Override public void onResume() { super.onResume(); mEventBus.register(this); } @Override public void onPause() { super.onPause(); mEventBus.unregister(this); } public void showCurrentEvent(final EventListElement event) { final FrameLayout eventLayout = (FrameLayout) getView() .findViewById(R.id.team_current_event); final FrameLayout container = (FrameLayout) getView() .findViewById(R.id.team_current_event_container); getActivity().runOnUiThread(() -> { eventLayout.removeAllViews(); eventLayout.addView(event.getView(getActivity(), getActivity().getLayoutInflater(), null)); eventLayout.setTag(EventTeamHelper.generateKey(event.getEventKey(), mTeamKey)); eventLayout.setOnClickListener(new EventTeamClickListener(getActivity())); container.setVisibility(View.VISIBLE); }); } @SuppressWarnings("unused") @Subscribe(threadMode = ThreadMode.MAIN) public void onLiveEventUpdate(LiveEventUpdateEvent event) { if (event.getEvent() != null) { showCurrentEvent(mEventRenderer.get().renderFromModel(event.getEvent(), null)); } } @Override protected void inject() { mComponent.inject(this); } @Override protected Observable<TeamInfoSubscriber.Model> getObservable(String tbaCacheHeader) { return Observable.zip( mDatafeed.fetchTeam(mTeamKey, tbaCacheHeader), mDatafeed.fetchTeamSocialMedia(mTeamKey, tbaCacheHeader), new TeamMediaAndSocialMediaCombiner()); } @Override protected String getRefreshTag() { return String.format("teamInfo_%1$s", mTeamKey); } @Override public NoDataViewParams getNoDataParams() { return new NoDataViewParams(R.drawable.ic_info_black_48dp, R.string.no_team_info); } }