aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsDetailActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsDetailActivity.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsDetailActivity.java225
1 files changed, 225 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsDetailActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsDetailActivity.java
new file mode 100644
index 000000000..408194613
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsDetailActivity.java
@@ -0,0 +1,225 @@
+package org.wordpress.android.ui.notifications;
+
+import android.app.Fragment;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.view.MenuItem;
+import android.view.WindowManager;
+
+import com.simperium.client.BucketObjectMissingException;
+
+import org.wordpress.android.GCMMessageService;
+import org.wordpress.android.R;
+import org.wordpress.android.analytics.AnalyticsTracker;
+import org.wordpress.android.models.AccountHelper;
+import org.wordpress.android.models.CommentStatus;
+import org.wordpress.android.models.Note;
+import org.wordpress.android.ui.ActivityLauncher;
+import org.wordpress.android.ui.WPWebViewActivity;
+import org.wordpress.android.ui.comments.CommentActions;
+import org.wordpress.android.ui.comments.CommentDetailFragment;
+import org.wordpress.android.ui.notifications.blocks.NoteBlockRangeType;
+import org.wordpress.android.ui.notifications.utils.SimperiumUtils;
+import org.wordpress.android.ui.reader.ReaderActivityLauncher;
+import org.wordpress.android.ui.reader.ReaderPostDetailFragment;
+import org.wordpress.android.ui.stats.StatsAbstractFragment;
+import org.wordpress.android.ui.stats.StatsActivity;
+import org.wordpress.android.ui.stats.StatsTimeframe;
+import org.wordpress.android.ui.stats.StatsViewAllActivity;
+import org.wordpress.android.ui.stats.StatsViewType;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.StringUtils;
+import org.wordpress.android.util.ToastUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import de.greenrobot.event.EventBus;
+
+public class NotificationsDetailActivity extends AppCompatActivity implements
+ CommentActions.OnNoteCommentActionListener {
+ private static final String ARG_TITLE = "activityTitle";
+ private static final String DOMAIN_WPCOM = "wordpress.com";
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ AppLog.i(AppLog.T.NOTIFS, "Creating NotificationsDetailActivity");
+
+ setContentView(R.layout.notifications_detail_activity);
+
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+
+ if (savedInstanceState == null) {
+ String noteId = getIntent().getStringExtra(NotificationsListFragment.NOTE_ID_EXTRA);
+ if (noteId == null) {
+ showErrorToastAndFinish();
+ return;
+ }
+
+ if (SimperiumUtils.getNotesBucket() != null) {
+ try {
+ Note note = SimperiumUtils.getNotesBucket().get(noteId);
+
+ Map<String, String> properties = new HashMap<>();
+ properties.put("notification_type", note.getType());
+ AnalyticsTracker.track(AnalyticsTracker.Stat.NOTIFICATIONS_OPENED_NOTIFICATION_DETAILS, properties);
+
+ Fragment detailFragment = getDetailFragmentForNote(note);
+ getFragmentManager().beginTransaction()
+ .add(R.id.notifications_detail_container, detailFragment)
+ .commitAllowingStateLoss();
+
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setTitle(note.getTitle());
+ }
+
+ // mark the note as read if it's unread
+ if (note.isUnread()) {
+ // mark as read which syncs with simperium
+ note.markAsRead();
+ EventBus.getDefault().post(new NotificationEvents.NotificationsChanged());
+ }
+ } catch (BucketObjectMissingException e) {
+ showErrorToastAndFinish();
+ return;
+ }
+ }
+
+ GCMMessageService.removeNotificationWithNoteIdFromSystemBar(this, noteId);//clearNotifications();
+
+ } else if (savedInstanceState.containsKey(ARG_TITLE) && getSupportActionBar() != null) {
+ getSupportActionBar().setTitle(StringUtils.notNullStr(savedInstanceState.getString(ARG_TITLE)));
+ }
+
+ // Hide the keyboard, unless we arrived here from the 'Reply' action in a push notification
+ if (!getIntent().getBooleanExtra(NotificationsListFragment.NOTE_INSTANT_REPLY_EXTRA, false)) {
+ getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
+ }
+
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ if (getSupportActionBar() != null && getSupportActionBar().getTitle() != null) {
+ outState.putString(ARG_TITLE, getSupportActionBar().getTitle().toString());
+ }
+
+ super.onSaveInstanceState(outState);
+ }
+
+ private void showErrorToastAndFinish() {
+ AppLog.e(AppLog.T.NOTIFS, "Note could not be found.");
+ ToastUtils.showToast(this, R.string.error_notification_open);
+ finish();
+ }
+
+ /**
+ * Tries to pick the correct fragment detail type for a given note
+ * Defaults to NotificationDetailListFragment
+ */
+ private Fragment getDetailFragmentForNote(Note note) {
+ if (note == null)
+ return null;
+
+ Fragment fragment;
+ if (note.isCommentType()) {
+ // show comment detail for comment notifications
+ boolean isInstantLike = getIntent().getBooleanExtra(NotificationsListFragment.NOTE_INSTANT_LIKE_EXTRA, false);
+ boolean isInstantApprove = getIntent().getBooleanExtra(NotificationsListFragment.NOTE_INSTANT_APPROVE_EXTRA, false);
+ fragment = isInstantLike ?
+ CommentDetailFragment.newInstanceForInstantLike(note.getId()) :
+ isInstantApprove ?
+ CommentDetailFragment.newInstanceForInstantApprove(note.getId()) :
+ CommentDetailFragment.newInstance(note.getId());
+ } else if (note.isAutomattcherType()) {
+ // show reader post detail for automattchers about posts - note that comment
+ // automattchers are handled by note.isCommentType() above
+ boolean isPost = (note.getSiteId() != 0 && note.getPostId() != 0 && note.getCommentId() == 0);
+ if (isPost) {
+ fragment = ReaderPostDetailFragment.newInstance(note.getSiteId(), note.getPostId());
+ } else {
+ fragment = NotificationsDetailListFragment.newInstance(note.getId());
+ }
+ } else {
+ fragment = NotificationsDetailListFragment.newInstance(note.getId());
+ }
+
+ return fragment;
+ }
+
+ public void showBlogPreviewActivity(long siteId) {
+ if (isFinishing()) return;
+
+ ReaderActivityLauncher.showReaderBlogPreview(this, siteId);
+ }
+
+ public void showPostActivity(long siteId, long postId) {
+ if (isFinishing()) return;
+
+ ReaderActivityLauncher.showReaderPostDetail(this, siteId, postId);
+ }
+
+ public void showStatsActivityForSite(int localTableSiteId, NoteBlockRangeType rangeType) {
+ if (isFinishing()) return;
+
+ if (rangeType == NoteBlockRangeType.FOLLOW) {
+ Intent intent = new Intent(this, StatsViewAllActivity.class);
+ intent.putExtra(StatsAbstractFragment.ARGS_VIEW_TYPE, StatsViewType.FOLLOWERS);
+ intent.putExtra(StatsAbstractFragment.ARGS_TIMEFRAME, StatsTimeframe.DAY);
+ intent.putExtra(StatsAbstractFragment.ARGS_SELECTED_DATE, "");
+ intent.putExtra(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableSiteId);
+ intent.putExtra(StatsViewAllActivity.ARG_STATS_VIEW_ALL_TITLE, getString(R.string.stats_view_followers));
+ startActivity(intent);
+ } else {
+ ActivityLauncher.viewBlogStats(this, localTableSiteId);
+ }
+ }
+
+ public void showWebViewActivityForUrl(String url) {
+ if (isFinishing() || url == null) return;
+
+ if (url.contains(DOMAIN_WPCOM)) {
+ WPWebViewActivity.openUrlByUsingWPCOMCredentials(this, url, AccountHelper.getDefaultAccount().getUserName());
+ } else {
+ WPWebViewActivity.openURL(this, url);
+ }
+ }
+
+ public void showReaderPostLikeUsers(long blogId, long postId) {
+ if (isFinishing()) return;
+
+ ReaderActivityLauncher.showReaderLikingUsers(this, blogId, postId);
+ }
+
+ public void showReaderCommentsList(long siteId, long postId, long commentId) {
+ if (isFinishing()) return;
+
+ ReaderActivityLauncher.showReaderComments(this, siteId, postId, commentId);
+ }
+
+ @Override
+ public void onModerateCommentForNote(Note note, CommentStatus newStatus) {
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(NotificationsListFragment.NOTE_MODERATE_ID_EXTRA, note.getId());
+ resultIntent.putExtra(NotificationsListFragment.NOTE_MODERATE_STATUS_EXTRA, CommentStatus.toRESTString(newStatus));
+
+ setResult(RESULT_OK, resultIntent);
+ finish();
+ }
+}