package io.github.droidkaigi.confsched.fragment; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.content.ContextCompat; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import org.parceler.Parcels; import javax.inject.Inject; import io.github.droidkaigi.confsched.R; import io.github.droidkaigi.confsched.activity.ActivityNavigator; import io.github.droidkaigi.confsched.activity.VideoPlayerActivity; import io.github.droidkaigi.confsched.dao.SessionDao; import io.github.droidkaigi.confsched.databinding.FragmentSessionDetailBinding; import io.github.droidkaigi.confsched.model.Session; import io.github.droidkaigi.confsched.util.AlarmUtil; import io.github.droidkaigi.confsched.util.AppUtil; import io.github.droidkaigi.confsched.util.IntentUtil; public class SessionDetailFragment extends BaseFragment { @Inject SessionDao dao; @Inject ActivityNavigator activityNavigator; private FragmentSessionDetailBinding binding; private Session session; public static SessionDetailFragment create(@NonNull Session session) { SessionDetailFragment fragment = new SessionDetailFragment(); Bundle args = new Bundle(); args.putParcelable(Session.class.getSimpleName(), Parcels.wrap(session)); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); session = Parcels.unwrap(getArguments().getParcelable(Session.class.getSimpleName())); Activity activity = getActivity(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Change theme by category activity.setTheme(session.category.getThemeResId()); } AppUtil.setTaskDescription(activity, session.title, ContextCompat.getColor(activity, session.category.getVividColorResId())); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentSessionDetailBinding.inflate(inflater, container, false); setHasOptionsMenu(true); initToolbar(); initLayout(); return binding.getRoot(); } @Override public void onAttach(Context context) { super.onAttach(context); getComponent().inject(this); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) { if (session != null && !TextUtils.isEmpty(session.shareUrl)) { menuInflater.inflate(R.menu.menu_session_detail, menu); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_share: if (!TextUtils.isEmpty(session.shareUrl)) { IntentUtil.share(getContext(), session.shareUrl); } break; } return super.onOptionsItemSelected(item); } private void initToolbar() { AppCompatActivity activity = ((AppCompatActivity) getActivity()); activity.setSupportActionBar(binding.toolbar); ActionBar bar = activity.getSupportActionBar(); if (bar != null) { bar.setDisplayHomeAsUpEnabled(true); bar.setDisplayShowHomeEnabled(true); bar.setDisplayShowTitleEnabled(false); bar.setHomeButtonEnabled(true); } } private void initLayout() { binding.setSession(session); binding.fab.setOnClickListener(v -> { boolean checked = !binding.fab.isSelected(); binding.fab.setSelected(checked); session.checked = checked; dao.updateChecked(session); setResult(); AlarmUtil.handleSessionAlarm(getActivity(), session); }); binding.txtFeedback.setOnClickListener(v -> activityNavigator.showFeedback(getActivity(), session)); binding.iconSlide.setOnClickListener(this::onClickIconSlide); binding.iconMovie.setOnClickListener(this::onClickIconMovie); } private void onClickIconSlide(View view) { if (session.hasSlide()) { IntentUtil.toBrowser(getContext(), session.slideUrl); } } private void onClickIconMovie(View view) { if (session.hasDashVideo()) { Intent intent = VideoPlayerActivity.createIntent(getContext(), session.movieDashUrl); startActivity(intent); } } private void setResult() { Intent intent = new Intent(); intent.putExtra(Session.class.getSimpleName(), Parcels.wrap(session)); getActivity().setResult(Activity.RESULT_OK, intent); } }