1 package com.moiseum.wolnelektury.view.news.single;
3 import android.os.Bundle;
4 import android.support.design.widget.AppBarLayout;
5 import android.support.design.widget.CollapsingToolbarLayout;
6 import android.support.v4.view.ViewPager;
7 import android.support.v7.widget.Toolbar;
8 import android.view.View;
9 import android.view.ViewTreeObserver;
10 import android.widget.LinearLayout;
11 import android.widget.TextView;
13 import com.moiseum.wolnelektury.R;
14 import com.moiseum.wolnelektury.base.mvp.PresenterFragment;
15 import com.moiseum.wolnelektury.connection.models.NewsModel;
16 import com.moiseum.wolnelektury.view.news.zoom.ZoomActivity;
18 import org.parceler.Parcels;
19 import org.sufficientlysecure.htmltextview.HtmlTextView;
21 import java.util.ArrayList;
22 import java.util.List;
24 import butterknife.BindView;
25 import butterknife.OnClick;
26 import me.relex.circleindicator.CircleIndicator;
29 * Created by Piotr Ostrowski on 06.08.2018.
31 public class NewsFragment extends PresenterFragment<NewsPresenter> implements NewsView {
33 private static final String NEWS_ARGUMENT_KEY = "NewsArgumentKey";
34 private static final int FIVE_PAGES = 5;
36 public static NewsFragment newInstance(NewsModel news) {
37 NewsFragment fragment = new NewsFragment();
38 Bundle args = new Bundle(1);
39 args.putParcelable(NEWS_ARGUMENT_KEY, Parcels.wrap(news));
40 fragment.setArguments(args);
44 @BindView(R.id.vpGallery)
46 @BindView(R.id.indicator)
47 CircleIndicator indicator;
48 @BindView(R.id.tvNewsTitle)
50 @BindView(R.id.tvNewsTime)
52 @BindView(R.id.tvNewsPlace)
54 @BindView(R.id.tvNewsBody)
55 HtmlTextView tvNewsBody;
56 @BindView(R.id.clMainView)
58 @BindView(R.id.ctlCollapse)
59 CollapsingToolbarLayout ctlCollapse;
60 @BindView(R.id.llContentContainer)
61 LinearLayout llContentContainer;
64 public int getLayoutResourceId() {
65 return R.layout.fragment_single_news;
69 public void prepareView(View view, Bundle savedInstanceState) {
70 Toolbar toolbar = view.findViewById(R.id.bookToolbar);
71 setupToolbar(toolbar);
75 protected NewsPresenter createPresenter() {
76 if (getArguments() == null || getArguments().getParcelable(NEWS_ARGUMENT_KEY) == null) {
77 throw new IllegalStateException("Fragment is missing arguments");
79 NewsModel news = Parcels.unwrap(getArguments().getParcelable(NEWS_ARGUMENT_KEY));
80 return new NewsPresenter(news, this);
83 @OnClick(R.id.fabShare)
84 public void onShareClick() {
85 getPresenter().onShareNewsClicked();
89 public void initializeNewsView(NewsModel news) {
90 ctlCollapse.setTitle(news.getTitle());
91 ctlCollapse.setExpandedTitleColor(getResources().getColor(android.R.color.transparent));
92 tvNewsTitle.setText(news.getTitle());
93 tvNewsTime.setText(news.getTime());
94 tvNewsPlace.setText(news.getPlace());
95 tvNewsBody.setHtml(news.getBody());
97 NewsGalleryAdapter galleryAdapter = new NewsGalleryAdapter(news.getGalleryUrl(), getContext());
98 vpGallery.setAdapter(galleryAdapter);
99 vpGallery.setOffscreenPageLimit(FIVE_PAGES);
100 indicator.setViewPager(vpGallery);
101 addDisposable(galleryAdapter.getPageClickObservable().subscribe(position -> {
102 ArrayList<String> urls = new ArrayList<>(news.getGalleryUrl());
103 startActivity(new ZoomActivity.ZoomIntent(urls, position, getContext()));
105 enableToolbarCollapse();
109 public void startShareActivity(String shareUrl) {
110 showShareActivity(shareUrl);
113 private void enableToolbarCollapse() {
114 ViewTreeObserver viewTreeObserver = llContentContainer.getViewTreeObserver();
115 if (viewTreeObserver.isAlive()) {
116 viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
118 public void onGlobalLayout() {
119 llContentContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this);
120 if (ctlCollapse.getHeight() + llContentContainer.getHeight() > clMainView.getHeight()) {
121 AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) ctlCollapse.getLayoutParams();
122 params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
123 ctlCollapse.setLayoutParams(params);