Skip to content

Commit 2814689

Browse files
authored
Merge pull request #14503 from wordpress-mobile/gb/1011-set-featured-button
1. Add a "Set as Featured Image" Button to Image Block 2. Audio block capability now enables/disables media upload's media sources
2 parents 24b5123 + 3e2d759 commit 2814689

File tree

14 files changed

+309
-29
lines changed

14 files changed

+309
-29
lines changed

WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ private void doMediaUrisSelected(@NonNull List<? extends Uri> mediaUris, @NonNul
276276
final String mimeType = getContentResolver().getType(mediaUri);
277277

278278
mFeaturedImageHelper.trackFeaturedImageEvent(
279-
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED,
279+
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED_POST_SETTINGS,
280280
mLocalPostId
281281
);
282282

@@ -330,7 +330,7 @@ private void doMediaIdsSelected(ArrayList<Long> mediaIds, @NonNull PhotoPickerMe
330330
// if user chose a featured image, track image picked event
331331
if (mBrowserType == MediaBrowserType.FEATURED_IMAGE_PICKER) {
332332
mFeaturedImageHelper.trackFeaturedImageEvent(
333-
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED,
333+
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED_POST_SETTINGS,
334334
mLocalPostId
335335
);
336336
}

WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@
239239
import static org.wordpress.android.analytics.AnalyticsTracker.Stat.APP_REVIEWS_EVENT_INCREMENTED_BY_PUBLISHING_POST_OR_PAGE;
240240
import static org.wordpress.android.imageeditor.preview.PreviewImageFragment.PREVIEW_IMAGE_REDUCED_SIZE_FACTOR;
241241
import static org.wordpress.android.ui.history.HistoryDetailContainerFragment.KEY_REVISION;
242+
import static org.wordpress.android.editor.gutenberg.GutenbergEditorFragment.MEDIA_ID_NO_FEATURED_IMAGE_SET;
242243

243244
import kotlin.Unit;
244245
import kotlin.jvm.functions.Function0;
@@ -403,6 +404,7 @@ enum RestartEditorOptions {
403404
@Inject StoriesPrefs mStoriesPrefs;
404405
@Inject StoriesEventListener mStoriesEventListener;
405406
@Inject ContactInfoBlockFeatureConfig mContactInfoBlockFeatureConfig;
407+
@Inject UpdateFeaturedImageUseCase mUpdateFeaturedImageUseCase;
406408

407409
private StorePostViewModel mViewModel;
408410
private StorageUtilsViewModel mStorageUtilsViewModel;
@@ -1673,7 +1675,7 @@ private void onUploadSuccess(MediaModel media) {
16731675
}
16741676
} else if (media.getMarkedLocallyAsFeatured() && media.getLocalPostId() == mEditPostRepository
16751677
.getId()) {
1676-
setFeaturedImageId(media.getMediaId(), false);
1678+
setFeaturedImageId(media.getMediaId(), false, false);
16771679
}
16781680
}
16791681
}
@@ -2302,9 +2304,7 @@ private GutenbergPropsBuilder getGutenbergPropsBuilder() {
23022304
enableXPosts,
23032305
isUnsupportedBlockEditorEnabled,
23042306
unsupportedBlockEditorSwitch,
2305-
!isFreeWPCom, // Disable audio block until it's usable on free sites via "Insert from URL" capability
2306-
// Only enable reusable block in WP.com sites until the issue
2307-
// (https://github.com/wordpress-mobile/gutenberg-mobile/issues/3457) in self-hosted sites is fixed
2307+
!isFreeWPCom,
23082308
isWPComSite,
23092309
wpcomLocaleSlug,
23102310
postType,
@@ -2484,12 +2484,32 @@ protected void setPostContentFromShareAction() {
24842484
}
24852485
}
24862486

2487-
private void setFeaturedImageId(final long mediaId, final boolean imagePicked) {
2488-
if (mEditPostSettingsFragment != null) {
2489-
mEditPostSettingsFragment.updateFeaturedImage(mediaId, imagePicked);
2490-
if (mEditorFragment instanceof GutenbergEditorFragment) {
2491-
((GutenbergEditorFragment) mEditorFragment).sendToJSFeaturedImageId((int) mediaId);
2487+
private void setFeaturedImageId(final long mediaId, final boolean imagePicked, final boolean isGutenbergEditor) {
2488+
if (isGutenbergEditor) {
2489+
EditPostRepository postRepository = getEditPostRepository();
2490+
if (postRepository == null) {
2491+
return;
24922492
}
2493+
2494+
int postId = getEditPostRepository().getId();
2495+
if (mediaId == MEDIA_ID_NO_FEATURED_IMAGE_SET) {
2496+
mFeaturedImageHelper.trackFeaturedImageEvent(
2497+
FeaturedImageHelper.TrackableEvent.IMAGE_REMOVED_GUTENBERG_EDITOR,
2498+
postId
2499+
);
2500+
} else {
2501+
mFeaturedImageHelper.trackFeaturedImageEvent(
2502+
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED_GUTENBERG_EDITOR,
2503+
postId
2504+
);
2505+
}
2506+
mUpdateFeaturedImageUseCase.updateFeaturedImage(mediaId, postRepository,
2507+
postModel -> null);
2508+
} else if (mEditPostSettingsFragment != null) {
2509+
mEditPostSettingsFragment.updateFeaturedImage(mediaId, imagePicked);
2510+
}
2511+
if (mEditorFragment instanceof GutenbergEditorFragment) {
2512+
((GutenbergEditorFragment) mEditorFragment).sendToJSFeaturedImageId((int) mediaId);
24932513
}
24942514
}
24952515

@@ -2600,13 +2620,13 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
26002620
// user chose a featured image
26012621
if (data.hasExtra(MediaPickerConstants.EXTRA_MEDIA_ID)) {
26022622
long mediaId = data.getLongExtra(MediaPickerConstants.EXTRA_MEDIA_ID, 0);
2603-
setFeaturedImageId(mediaId, true);
2623+
setFeaturedImageId(mediaId, true, false);
26042624
} else if (data.hasExtra(MediaPickerConstants.EXTRA_MEDIA_QUEUED_URIS)) {
26052625
List<Uri> uris = convertStringArrayIntoUrisList(
26062626
data.getStringArrayExtra(MediaPickerConstants.EXTRA_MEDIA_QUEUED_URIS));
26072627
int postId = getImmutablePost().getId();
26082628
mFeaturedImageHelper.trackFeaturedImageEvent(
2609-
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED,
2629+
FeaturedImageHelper.TrackableEvent.IMAGE_PICKED_POST_SETTINGS,
26102630
postId
26112631
);
26122632
for (Uri mediaUri : uris) {
@@ -2894,6 +2914,11 @@ public void onEditPostPublishedSettingsClick() {
28942914
}
28952915
}
28962916

2917+
@Override
2918+
public void updateFeaturedImage(final long mediaId, final boolean imagePicked) {
2919+
setFeaturedImageId(mediaId, imagePicked, true);
2920+
}
2921+
28972922
@Override
28982923
public void onAddMediaClicked() {
28992924
if (mEditorPhotoPicker.isPhotoPickerShowing()) {

WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostSettingsFragment.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ public class EditPostSettingsFragment extends Fragment {
134134
@Inject AnalyticsTrackerWrapper mAnalyticsTrackerWrapper;
135135
@Inject UpdatePostStatusUseCase mUpdatePostStatusUseCase;
136136
@Inject MediaPickerLauncher mMediaPickerLauncher;
137+
@Inject UpdateFeaturedImageUseCase mUpdateFeaturedImageUseCase;
137138

138139
@Inject ViewModelProvider.Factory mViewModelFactory;
139140
private EditPostPublishSettingsViewModel mPublishedViewModel;
@@ -1000,23 +1001,21 @@ public void updateFeaturedImage(long featuredImageId, boolean imagePicked) {
10001001
if (isAdded() && imagePicked) {
10011002
int postId = getEditPostRepository().getId();
10021003
mFeaturedImageHelper.trackFeaturedImageEvent(
1003-
TrackableEvent.IMAGE_PICKED,
1004+
TrackableEvent.IMAGE_PICKED_POST_SETTINGS,
10041005
postId
10051006
);
10061007
}
1008+
10071009
EditPostRepository postRepository = getEditPostRepository();
10081010
if (postRepository == null) {
10091011
return;
10101012
}
1011-
postRepository.updateAsync(postModel -> {
1012-
postModel.setFeaturedImageId(featuredImageId);
1013-
return true;
1014-
}, (postModel, result) -> {
1015-
if (result == UpdatePostResult.Updated.INSTANCE) {
1016-
updateFeaturedImageView(postModel);
1017-
}
1018-
return null;
1019-
});
1013+
1014+
mUpdateFeaturedImageUseCase.updateFeaturedImage(featuredImageId, postRepository,
1015+
postModel -> {
1016+
updateFeaturedImageView(postModel);
1017+
return null;
1018+
});
10201019
}
10211020

10221021
private void clearFeaturedImage() {

WordPress/src/main/java/org/wordpress/android/ui/posts/FeaturedImageHelper.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,9 @@ class FeaturedImageHelper @Inject constructor(
201201

202202
enum class TrackableEvent(val label: Stat) {
203203
IMAGE_SET_CLICKED(Stat.FEATURED_IMAGE_SET_CLICKED_POST_SETTINGS),
204-
IMAGE_PICKED(Stat.FEATURED_IMAGE_PICKED_POST_SETTINGS),
204+
IMAGE_PICKED_POST_SETTINGS(Stat.FEATURED_IMAGE_PICKED_POST_SETTINGS),
205+
IMAGE_PICKED_GUTENBERG_EDITOR(Stat.FEATURED_IMAGE_PICKED_GUTENBERG_EDITOR),
206+
IMAGE_REMOVED_GUTENBERG_EDITOR(Stat.FEATURED_IMAGE_REMOVED_GUTENBERG_EDITOR),
205207
IMAGE_UPLOAD_CANCELED(Stat.FEATURED_IMAGE_UPLOAD_CANCELED_POST_SETTINGS),
206208
IMAGE_UPLOAD_RETRY_CLICKED(Stat.FEATURED_IMAGE_UPLOAD_RETRY_CLICKED_POST_SETTINGS),
207209
IMAGE_REMOVE_CLICKED(Stat.FEATURED_IMAGE_REMOVE_CLICKED_POST_SETTINGS)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.wordpress.android.ui.posts
2+
3+
import org.wordpress.android.fluxc.model.PostImmutableModel
4+
import org.wordpress.android.fluxc.model.PostModel
5+
import org.wordpress.android.ui.posts.EditPostRepository.UpdatePostResult
6+
import org.wordpress.android.ui.posts.EditPostRepository.UpdatePostResult.Updated
7+
import javax.inject.Inject
8+
9+
class UpdateFeaturedImageUseCase @Inject constructor() {
10+
fun updateFeaturedImage(
11+
featuredImageId: Long,
12+
editPostRepository: EditPostRepository,
13+
onPostFeaturedImageUpdated: (PostImmutableModel) -> Unit
14+
) {
15+
editPostRepository.updateAsync({ postModel: PostModel ->
16+
postModel.setFeaturedImageId(featuredImageId)
17+
true
18+
}) { postModel: PostImmutableModel, result: UpdatePostResult ->
19+
if (result === Updated) {
20+
onPostFeaturedImageUpdated.invoke(postModel)
21+
}
22+
}
23+
}
24+
}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
ext.kotlin_ktx_version = '1.2.0'
88
ext.wordPressUtilsVersion = 'develop-bb54ee34c5fec5fa7375ce90a356adb5adbdcae0'
99
ext.detektVersion = '1.15.0'
10-
ext.gutenbergMobileVersion = 'v1.54.0'
10+
ext.gutenbergMobileVersion = 'develop-b316b2b49f57f08426f1a33418f28480cdc8787b'
1111

1212
repositories {
1313
google()

libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,8 @@ public enum Stat {
691691
WELCOME_NO_SITES_INTERSTITIAL_DISMISSED,
692692
FEATURED_IMAGE_SET_CLICKED_POST_SETTINGS,
693693
FEATURED_IMAGE_PICKED_POST_SETTINGS,
694+
FEATURED_IMAGE_PICKED_GUTENBERG_EDITOR,
695+
FEATURED_IMAGE_REMOVED_GUTENBERG_EDITOR,
694696
FEATURED_IMAGE_UPLOAD_CANCELED_POST_SETTINGS,
695697
FEATURED_IMAGE_UPLOAD_RETRY_CLICKED_POST_SETTINGS,
696698
FEATURED_IMAGE_REMOVE_CLICKED_POST_SETTINGS,

libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,6 +1890,10 @@ public static String getEventNameForStat(AnalyticsTracker.Stat stat) {
18901890
return "featured_image_set_clicked_post_settings";
18911891
case FEATURED_IMAGE_PICKED_POST_SETTINGS:
18921892
return "featured_image_picked_post_settings";
1893+
case FEATURED_IMAGE_PICKED_GUTENBERG_EDITOR:
1894+
return "featured_image_picked_gutenberg_editor";
1895+
case FEATURED_IMAGE_REMOVED_GUTENBERG_EDITOR:
1896+
return "featured_image_removed_gutenberg_editor";
18931897
case FEATURED_IMAGE_UPLOAD_CANCELED_POST_SETTINGS:
18941898
return "featured_image_upload_canceled_post_settings";
18951899
case FEATURED_IMAGE_UPLOAD_RETRY_CLICKED_POST_SETTINGS:

libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/EditorFragmentAbstract.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public static MediaType getEditorMimeType(MediaFile mediaFile) {
178178
public interface EditorFragmentListener extends DialogVisibilityProvider {
179179
void onEditorFragmentInitialized();
180180
void onEditorFragmentContentReady(ArrayList<Object> unsupportedBlocks, boolean replaceBlockActionWaiting);
181+
void updateFeaturedImage(long mediaId, boolean imagePicked);
181182
void onAddMediaClicked();
182183
void onAddMediaImageClicked(boolean allowMultipleSelection);
183184
void onAddMediaVideoClicked(boolean allowMultipleSelection);

libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/gutenberg/GutenbergContainerFragment.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.wordpress.mobile.WPAndroidGlue.WPAndroidGlueCode.OnMediaEditorListener;
3030
import org.wordpress.mobile.WPAndroidGlue.WPAndroidGlueCode.OnMediaLibraryButtonListener;
3131
import org.wordpress.mobile.WPAndroidGlue.WPAndroidGlueCode.OnMediaFilesCollectionBasedBlockEditorListener;
32+
import org.wordpress.mobile.WPAndroidGlue.WPAndroidGlueCode.OnSetFeaturedImageListener;
3233

3334
import java.util.ArrayList;
3435

@@ -56,6 +57,7 @@ public boolean hasReceivedAnyContent() {
5657
public void attachToContainer(ViewGroup viewGroup, OnMediaLibraryButtonListener onMediaLibraryButtonListener,
5758
OnReattachMediaUploadQueryListener onReattachQueryListener,
5859
OnReattachMediaSavingQueryListener onStorySavingReattachQueryListener,
60+
OnSetFeaturedImageListener onSetFeaturedImageListener,
5961
OnEditorMountListener onEditorMountListener,
6062
OnEditorAutosaveListener onEditorAutosaveListener,
6163
OnAuthHeaderRequestedListener onAuthHeaderRequestedListener,
@@ -76,6 +78,7 @@ public void attachToContainer(ViewGroup viewGroup, OnMediaLibraryButtonListener
7678
onMediaLibraryButtonListener,
7779
onReattachQueryListener,
7880
onStorySavingReattachQueryListener,
81+
onSetFeaturedImageListener,
7982
onEditorMountListener,
8083
onEditorAutosaveListener,
8184
onAuthHeaderRequestedListener,

0 commit comments

Comments
 (0)