Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import android.support.v4.app.NotificationCompat;
import android.text.TextUtils;
import android.util.SparseArray;
Expand All @@ -20,6 +21,7 @@
import org.wordpress.android.ui.posts.PostsListActivity;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.CrashlyticsUtils;
import org.wordpress.android.util.StringUtils;
import org.wordpress.android.util.SystemServiceFactory;
import org.wordpress.android.util.WPMeShortlinks;

Expand Down Expand Up @@ -53,10 +55,8 @@ public PostUploadNotifier(Context context, PostUploadService service) {
mNotificationBuilder.setSmallIcon(android.R.drawable.stat_sys_upload);
}

public void updateNotificationNewPost(PostModel post, String title, String message) {
if (title != null) {
mNotificationBuilder.setContentTitle(title);
}
public void createNotificationForPost(@NonNull PostModel post, String message) {
mNotificationBuilder.setContentTitle(buildNotificationTitleForPost(post));
if (message != null) {
mNotificationBuilder.setContentText(message);
}
Expand All @@ -68,6 +68,16 @@ public void updateNotificationNewPost(PostModel post, String title, String messa
mService.startForeground(notificationId, mNotificationBuilder.build());
}

public boolean isDisplayingNotificationForPost(@NonNull PostModel post) {
return mPostIdToNotificationData.get(post.getId()) != null;
}

public void updateNotificationMessage(@NonNull PostModel post, String message) {
NotificationData notificationData = mPostIdToNotificationData.get(post.getId());
mNotificationBuilder.setContentText(StringUtils.notNullStr(message));
doNotify(notificationData.notificationId, mNotificationBuilder.build());
}

public void updateNotificationIcon(PostModel post, Bitmap icon) {
NotificationData notificationData = mPostIdToNotificationData.get(post.getId());

Expand Down Expand Up @@ -231,4 +241,9 @@ public void setCurrentMediaItem(PostModel post, int currentItem) {
mNotificationBuilder.setContentText(String.format(mContext.getString(R.string.uploading_total),
currentItem, notificationData.totalMediaItems));
}

private String buildNotificationTitleForPost(PostModel post) {
String postTitle = TextUtils.isEmpty(post.getTitle()) ? mContext.getString(R.string.untitled) : post.getTitle();
return String.format(mContext.getString(R.string.posting_post), postTitle);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ public int onStartCommand(Intent intent, int flags, int startId) {
}

uploadNextPost();
showNotificationsForPendingMediaPosts();
// We want this service to continue running until it is explicitly stopped, so return sticky.
return START_STICKY;
}
Expand Down Expand Up @@ -214,6 +215,16 @@ private PostModel getNextUploadablePost() {
return null;
}

private void showNotificationsForPendingMediaPosts() {
for (PostModel postModel : mPostsList) {
if (MediaUploadService.hasPendingMediaUploadsForPost(postModel)) {
if (!mPostUploadNotifier.isDisplayingNotificationForPost(postModel)) {
mPostUploadNotifier.createNotificationForPost(postModel, getString(R.string.uploading_post_media));
}
}
}
}

/**
* Removes a post from the queued post list given its local ID.
* @return the post that was removed - if no post was removed, returns null
Expand Down Expand Up @@ -266,14 +277,16 @@ protected void onPostExecute(Boolean pushActionWasDispatched) {
protected Boolean doInBackground(PostModel... posts) {
mPost = posts[0];

String postTitle = TextUtils.isEmpty(mPost.getTitle()) ? getString(R.string.untitled) : mPost.getTitle();
String uploadingPostTitle = String.format(getString(R.string.posting_post), postTitle);
String uploadingPostMessage = String.format(
getString(R.string.sending_content),
mPost.isPage() ? getString(R.string.page).toLowerCase() : getString(R.string.post).toLowerCase()
);

mPostUploadNotifier.updateNotificationNewPost(mPost, uploadingPostTitle, uploadingPostMessage);
if (mPostUploadNotifier.isDisplayingNotificationForPost(mPost)) {
mPostUploadNotifier.updateNotificationMessage(mPost, uploadingPostMessage);
} else {
mPostUploadNotifier.createNotificationForPost(mPost, uploadingPostMessage);
}

mSite = mSiteStore.getSiteByLocalId(mPost.getLocalSiteId());
if (mSite == null) {
Expand Down Expand Up @@ -606,11 +619,14 @@ private String uploadImageFile(MediaFile mediaFile, SiteModel site) {
}
}

private void cancelPostUploadMatchingMedia(MediaModel media) {
private void cancelPostUploadMatchingMedia(MediaModel media, String mediaErrorMessage) {
PostModel postToCancel = removeQueuedPostByLocalId(media.getLocalPostId());
if (postToCancel == null) return;

// TODO: Update post upload messaging at this point
SiteModel site = mSiteStore.getSiteByLocalId(postToCancel.getLocalSiteId());
String message = getErrorMessage(postToCancel, mediaErrorMessage);
mPostUploadNotifier.updateNotificationError(postToCancel, site, message, true);

mFirstPublishPosts.remove(postToCancel.getId());
EventBus.getDefault().post(new PostEvents.PostUploadCanceled(postToCancel.getLocalSiteId()));
finishUpload();
Expand Down Expand Up @@ -705,14 +721,15 @@ private void handleMediaUploadCompleted(OnMediaUploaded event) {
if (event.isError()) {
AppLog.e(T.MEDIA, "Media upload failed for post " + event.media.getLocalPostId() + " : " +
event.error.type + ": " + event.error.message);
cancelPostUploadMatchingMedia(event.media);
String errorMessage = getErrorMessageFromMediaError(event.error);
cancelPostUploadMatchingMedia(event.media, errorMessage);
return;
}

if (event.canceled) {
AppLog.i(T.MEDIA, "Upload cancelled for post with id " + event.media.getLocalPostId()
+ " - a media upload for this post has been cancelled, id: " + event.media.getId());
cancelPostUploadMatchingMedia(event.media);
cancelPostUploadMatchingMedia(event.media, getString(R.string.error_media_canceled));
return;
}

Expand Down
2 changes: 2 additions & 0 deletions WordPress/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@
<string name="update_verb">Update</string>
<string name="sending_content">Uploading %s content</string>
<string name="uploading_total">Uploading %1$d of %2$d</string>
<string name="uploading_post_media">Uploading media…</string>

<!-- new account view -->
<string name="signing_in">Logging in…</string>
Expand Down Expand Up @@ -1090,6 +1091,7 @@
<string name="error_media_load">Unable to load media</string>
<string name="error_media_request_too_large">Media too large, can\'t be uploaded</string>
<string name="error_media_save">Unable to save media</string>
<string name="error_media_canceled">Uploading media were canceled</string>
<string name="error_blog_hidden">This blog is hidden and couldn\'t be loaded. Enable it again in settings and try again.</string>
<string name="fatal_db_error">An error occurred while creating the app database. Try reinstalling the app.</string>
<string name="error_copy_to_clipboard">An error occurred while copying text to clipboard</string>
Expand Down