package com.malmstein.yahnac.bookmarks; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import com.malmstein.yahnac.HNewsNavigationDrawerActivity; import com.malmstein.yahnac.R; import com.malmstein.yahnac.data.DataPersister; import com.malmstein.yahnac.injection.Inject; import com.malmstein.yahnac.model.Story; import com.malmstein.yahnac.stories.StoryListener; import com.malmstein.yahnac.views.SnackBarView; import com.malmstein.yahnac.views.drawer.ActionBarDrawerListener; import com.malmstein.yahnac.views.drawer.NavigationDrawerHeader; import com.novoda.notils.caster.Views; public class BookmarksActivity extends HNewsNavigationDrawerActivity implements StoryListener, ActionBarDrawerListener.Listener, NavigationDrawerHeader.Listener { private static final CharSequence SHARE_DIALOG_DEFAULT_TITLE = null; private SnackBarView snackbarView; private int croutonAnimationDuration; private int croutonBackgroundAlpha; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bookmarks); setupViews(); } @Override protected void onResume() { super.onResume(); Inject.usageAnalytics().trackPage(getString(R.string.analytics_page_bookmarks)); } private void setupViews() { setupSnackbar(); setupAppBar(); } private void setupAppBar() { setHighLevelActivity(); setTitle(getString(R.string.title_bookmarks)); } private void setupSnackbar() { snackbarView = Views.findById(this, R.id.snackbar); croutonBackgroundAlpha = getResources().getInteger(R.integer.feed_crouton_background_alpha); croutonAnimationDuration = getResources().getInteger(R.integer.feed_crouton_animation_duration); } @Override public void onShareClicked(Intent shareIntent) { Intent chooserIntent = Intent.createChooser(shareIntent, SHARE_DIALOG_DEFAULT_TITLE); startActivity(chooserIntent); } @Override public void onCommentsClicked(View v, Story story) { navigate().toComments(v, story); } @Override public void onCommentsClicked(Story story) { Inject.usageAnalytics().trackNavigateEvent(getString(R.string.analytics_event_view_comments_bookmarks), story); navigate().toComments(story); } @Override public void onContentClicked(Story story) { Inject.usageAnalytics().trackNavigateEvent(getString(R.string.analytics_event_view_story_bookmarks), story); DataPersister persister = Inject.dataPersister(); persister.markStoryAsRead(story); navigate().toInnerBrowser(story); } @Override public void onExternalLinkClicked(Story story) { if (story.isHackerNewsLocalItem()) { Inject.usageAnalytics().trackNavigateEvent(getString(R.string.analytics_event_view_comments_bookmarks), story); navigate().toComments(story); } else { Inject.usageAnalytics().trackNavigateEvent(getString(R.string.analytics_event_view_external_url_bookmarks), story); navigate().toExternalBrowser(Uri.parse(story.getUrl())); } } @Override public void onBookmarkAdded(Story story) { Inject.usageAnalytics().trackBookmarkEvent(getString(R.string.analytics_event_add_bookmark_bookmarks), story); DataPersister persister = Inject.dataPersister(); showAddedBookmarkSnackbar(persister, story); } @Override public void onBookmarkRemoved(Story story) { Inject.usageAnalytics().trackBookmarkEvent(getString(R.string.analytics_event_remove_bookmark_bookmarks), story); DataPersister persister = Inject.dataPersister(); showRemovedBookmarkSnackbar(persister, story); } @Override public void onStoryVoteClicked(Story story) { //no op } private void showAddedBookmarkSnackbar(final DataPersister persister, final Story story) { snackbarView.showSnackBar(getResources().getText(R.string.feed_snackbar_added_bookmark)) .withBackgroundColor(R.color.black, croutonBackgroundAlpha) .withAnimationDuration(croutonAnimationDuration) .withUndoClickListener(new View.OnClickListener() { @Override public void onClick(View v) { snackbarView.hideCrouton(); removeBookmark(persister, story); } }) .animating(); } private void showRemovedBookmarkSnackbar(final DataPersister persister, final Story story) { snackbarView.showSnackBar(getResources().getText(R.string.feed_snackbar_removed_bookmark)) .withBackgroundColor(R.color.black, croutonBackgroundAlpha) .withAnimationDuration(croutonAnimationDuration) .withUndoClickListener(new View.OnClickListener() { @Override public void onClick(View v) { snackbarView.hideCrouton(); addBookmark(persister, story); } }) .animating(); } private void removeBookmark(DataPersister persister, Story story) { Inject.usageAnalytics().trackBookmarkEvent(getString(R.string.analytics_event_remove_bookmark_bookmarks), story); persister.removeBookmark(story); showRemovedBookmarkSnackbar(persister, story); } private void addBookmark(DataPersister persister, Story story) { Inject.usageAnalytics().trackBookmarkEvent(getString(R.string.analytics_event_add_bookmark_bookmarks), story); persister.addBookmark(story); showAddedBookmarkSnackbar(persister, story); } @Override public void onNotImplementedFeatureSelected() { snackbarView.showSnackBar(getResources().getText(R.string.feed_snackbar_not_implemented)) .withBackgroundColor(R.color.black, croutonBackgroundAlpha) .withAnimationDuration(croutonAnimationDuration) .animating(); } @Override public void onLoginClicked() { navigate().toLogin(Views.findById(this, R.id.view_drawer_header_login)); } }