package com.malmstein.yahnac.comments; import android.content.Intent; import android.view.MenuItem; import com.malmstein.yahnac.HNewsActivity; import com.malmstein.yahnac.R; import com.malmstein.yahnac.data.DataPersister; import com.malmstein.yahnac.data.Provider; import com.malmstein.yahnac.injection.Inject; import com.malmstein.yahnac.model.OperationResponse; import com.malmstein.yahnac.model.Story; import com.novoda.notils.exception.DeveloperError; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; public class CommentsOperator { private final HNewsActivity activity; private final Story story; private DataPersister persister; private Subscription subscription; public CommentsOperator(HNewsActivity activity) { this.activity = activity; this.story = getStory(); this.persister = Inject.dataPersister(); } private Story getStory() { if (activity.getIntent().getExtras().containsKey(CommentsActivity.ARG_STORY)) { return (Story) activity.getIntent().getExtras().getSerializable(CommentsActivity.ARG_STORY); } else { throw new DeveloperError("Missing argument"); } } public void onResume() { trackAnalytics(R.string.analytics_page_comments); } public void onArticleSelected() { trackAnalytics(R.string.analytics_event_view_story_comments); activity.navigate().toInnerBrowser(story); activity.finish(); } public void onBookmarkUnselected() { trackAnalytics(R.string.analytics_event_remove_bookmark_comments); persister.removeBookmark(story); } public void onBookmarkSelected() { trackAnalytics(R.string.analytics_event_add_bookmark_comments); persister.addBookmark(story); } public void onShareArticle() { trackAnalytics(R.string.analytics_event_share_story); Intent chooserIntent = Intent.createChooser( story.createShareIntent(), null); activity.startActivity(chooserIntent); } private void trackAnalytics(int actionResource) { Inject.usageAnalytics().trackShareEvent( activity.getString(actionResource), story); } public void retrieveComments() { Provider provider = Inject.provider(); subscription = provider .observeComments(getStory().getId()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<OperationResponse>() { @Override public void onCompleted() { if (!subscription.isUnsubscribed()) { subscription.unsubscribe(); } } @Override public void onError(Throwable e) { Inject.crashAnalytics().logSomethingWentWrong("DataRepository: getCommentsFrom " + getStory().getId(), e); } @Override public void onNext(OperationResponse response) { } }); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_article: onArticleSelected(); return true; case R.id.action_bookmark: if (item.isChecked()) { onBookmarkUnselected(); } else { onBookmarkSelected(); } return true; case android.R.id.home: activity.finish(); return true; case R.id.action_share: onShareArticle(); return true; default: return false; } } public void onRefresh(boolean online) { if (online) { retrieveComments(); } } public void onPostCreate(boolean online) { onRefresh(online); } }