package shts.jp.android.nogifeed.fragments; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import rx.subscriptions.CompositeSubscription; import shts.jp.android.nogifeed.R; import shts.jp.android.nogifeed.activities.BlogActivity; import shts.jp.android.nogifeed.adapters.MemberFeedListAdapter; import shts.jp.android.nogifeed.api.NogiFeedApiClient; import shts.jp.android.nogifeed.models.Entries; import shts.jp.android.nogifeed.models.Entry; import shts.jp.android.nogifeed.providers.FavoriteContentObserver; import shts.jp.android.nogifeed.providers.UnreadArticlesContentObserver; import shts.jp.android.nogifeed.providers.dao.Favorites; import shts.jp.android.nogifeed.views.DividerItemDecoration; import shts.jp.android.nogifeed.views.ViewMemberDetailHeader; public class MemberDetailFragment extends Fragment { public static MemberDetailFragment newInstance(int memberId) { Bundle bundle = new Bundle(); bundle.putInt("memberId", memberId); MemberDetailFragment memberDetailFragment = new MemberDetailFragment(); memberDetailFragment.setArguments(bundle); return memberDetailFragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); unreadArticlesContentObserver.register(getContext()); } @Override public void onResume() { super.onResume(); favoriteContentObserver.register(getContext()); } @Override public void onPause() { favoriteContentObserver.unregister(getContext()); super.onPause(); } @Override public void onDestroyView() { unreadArticlesContentObserver.unregister(getContext()); subscriptions.unsubscribe(); super.onDestroyView(); } private RecyclerView recyclerView; private CollapsingToolbarLayout collapsingToolbarLayout; private CoordinatorLayout coordinatorLayout; private CompositeSubscription subscriptions = new CompositeSubscription(); @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.fragment_member_detail2, null); final ViewMemberDetailHeader viewMemberDetailHeader = (ViewMemberDetailHeader) view.findViewById(R.id.view_member_detail_header); final int memberId = getArguments().getInt("memberId"); viewMemberDetailHeader.setup(memberId); final FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Favorites.toggle(getContext(), memberId); } }); coordinatorLayout = (CoordinatorLayout) view.findViewById(R.id.coordinator); collapsingToolbarLayout = (CollapsingToolbarLayout) view.findViewById(R.id.collapsing_toolbar); collapsingToolbarLayout.setCollapsedTitleTextColor( ContextCompat.getColor(getContext(), android.R.color.white)); collapsingToolbarLayout.setExpandedTitleColor( ContextCompat.getColor(getContext(), android.R.color.transparent)); recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setHasFixedSize(false); recyclerView.addItemDecoration(new DividerItemDecoration(getActivity())); getEntries(); return view; } private void getEntries() { subscriptions.add(NogiFeedApiClient .getMemberEntries(getArguments().getInt("memberId"), 0, 30) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Entries>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Snackbar.make(coordinatorLayout, R.string.feed_failure, Snackbar.LENGTH_SHORT).show(); } @Override public void onNext(Entries entries) { if (entries == null) { Snackbar.make(coordinatorLayout, R.string.feed_failure, Snackbar.LENGTH_SHORT).show(); return; } final Activity activity = getActivity(); MemberFeedListAdapter adapter = new MemberFeedListAdapter(activity, entries); adapter.setClickCallback(new MemberFeedListAdapter.OnItemClickCallback() { @Override public void onClick(Entry entry) { activity.startActivity(BlogActivity.getStartIntent(activity, entry)); } }); recyclerView.setAdapter(adapter); collapsingToolbarLayout.setTitle(entries.get(0).getMemberName()); } })); } private FavoriteContentObserver favoriteContentObserver = new FavoriteContentObserver() { @Override public void onChangeState(@State int state) { if (state == State.ADD) { Snackbar.make(coordinatorLayout, R.string.registered_favorite_member, Snackbar.LENGTH_SHORT).show(); } else { Snackbar.make(coordinatorLayout, R.string.unregistered_favorite_member, Snackbar.LENGTH_SHORT).show(); } } }; private UnreadArticlesContentObserver unreadArticlesContentObserver = new UnreadArticlesContentObserver() { @Override public void onChangeState(@State int state) { recyclerView.getAdapter().notifyDataSetChanged(); } }; }