Skip to content

Commit f8db3db

Browse files
authored
Merge pull request #20891 from wordpress-mobile/issue/20820-update-inapp-reviews-flow
Update inapp reviews flow
2 parents 7d01797 + e468965 commit f8db3db

18 files changed

+170
-202
lines changed

WordPress/src/main/java/org/wordpress/android/AppInitializer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ import org.wordpress.android.util.config.OpenWebLinksWithJetpackFlowFeatureConfi
110110
import org.wordpress.android.util.enqueuePeriodicUploadWorkRequestForAllSites
111111
import org.wordpress.android.util.experiments.ExPlat
112112
import org.wordpress.android.util.image.ImageManager
113-
import org.wordpress.android.widgets.AppRatingDialog
113+
import org.wordpress.android.widgets.AppReviewManager
114114
import org.wordpress.android.workers.WordPressWorkersFactory
115115
import java.io.File
116116
import java.io.IOException
@@ -303,7 +303,7 @@ class AppInitializer @Inject constructor(
303303
initWpDb()
304304
context?.let { enableHttpResponseCache(it) }
305305

306-
AppRatingDialog.init(application)
306+
AppReviewManager.init(application)
307307

308308
if (!initialized) {
309309
// EventBus setup

WordPress/src/main/java/org/wordpress/android/modules/ViewModelModule.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import org.wordpress.android.ui.reader.viewmodels.ReaderPostListViewModel;
5555
import org.wordpress.android.ui.reader.viewmodels.ReaderViewModel;
5656
import org.wordpress.android.ui.reader.viewmodels.SubfilterPageViewModel;
57-
import org.wordpress.android.ui.review.ReviewViewModel;
5857
import org.wordpress.android.ui.stats.refresh.lists.DaysListViewModel;
5958
import org.wordpress.android.ui.stats.refresh.lists.InsightsDetailListViewModel;
6059
import org.wordpress.android.ui.stats.refresh.lists.InsightsListViewModel;
@@ -461,11 +460,6 @@ abstract class ViewModelModule {
461460
@ViewModelKey(UnifiedCommentListViewModel.class)
462461
abstract ViewModel unifiedCommentListViewModel(UnifiedCommentListViewModel viewModel);
463462

464-
@Binds
465-
@IntoMap
466-
@ViewModelKey(ReviewViewModel.class)
467-
abstract ViewModel reviewViewModel(ReviewViewModel viewModel);
468-
469463
@Binds
470464
@IntoMap
471465
@ViewModelKey(BloggingRemindersViewModel.class)

WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,14 @@
2828

2929
import com.google.android.gms.common.ConnectionResult;
3030
import com.google.android.gms.common.GoogleApiAvailability;
31-
import com.google.android.gms.tasks.Task;
3231
import com.google.android.material.floatingactionbutton.FloatingActionButton;
3332
import com.google.android.material.snackbar.Snackbar;
3433
import com.google.android.play.core.install.model.AppUpdateType;
35-
import com.google.android.play.core.review.ReviewInfo;
36-
import com.google.android.play.core.review.ReviewManager;
37-
import com.google.android.play.core.review.ReviewManagerFactory;
3834

3935
import org.greenrobot.eventbus.EventBus;
4036
import org.greenrobot.eventbus.Subscribe;
4137
import org.greenrobot.eventbus.ThreadMode;
4238
import org.wordpress.android.BuildConfig;
43-
import org.wordpress.android.inappupdate.InAppUpdateListener;
44-
import org.wordpress.android.inappupdate.IInAppUpdateManager;
4539
import org.wordpress.android.R;
4640
import org.wordpress.android.WordPress;
4741
import org.wordpress.android.analytics.AnalyticsTracker;
@@ -71,6 +65,8 @@
7165
import org.wordpress.android.fluxc.store.SiteStore.OnSiteChanged;
7266
import org.wordpress.android.fluxc.store.SiteStore.OnSiteEditorsChanged;
7367
import org.wordpress.android.fluxc.store.SiteStore.OnSiteRemoved;
68+
import org.wordpress.android.inappupdate.IInAppUpdateManager;
69+
import org.wordpress.android.inappupdate.InAppUpdateListener;
7470
import org.wordpress.android.login.LoginAnalyticsListener;
7571
import org.wordpress.android.networking.ConnectionChangeReceiver;
7672
import org.wordpress.android.push.GCMMessageHandler;
@@ -139,7 +135,6 @@
139135
import org.wordpress.android.ui.reader.services.update.ReaderUpdateLogic.UpdateTask;
140136
import org.wordpress.android.ui.reader.services.update.ReaderUpdateServiceStarter;
141137
import org.wordpress.android.ui.reader.tracker.ReaderTracker;
142-
import org.wordpress.android.ui.review.ReviewViewModel;
143138
import org.wordpress.android.ui.sitecreation.misc.SiteCreationSource;
144139
import org.wordpress.android.ui.stats.StatsTimeframe;
145140
import org.wordpress.android.ui.stats.refresh.utils.StatsLaunchedFrom;
@@ -178,7 +173,7 @@
178173
import org.wordpress.android.viewmodel.main.WPMainActivityViewModel.FocusPointInfo;
179174
import org.wordpress.android.viewmodel.mlp.ModalLayoutPickerViewModel;
180175
import org.wordpress.android.viewmodel.mlp.ModalLayoutPickerViewModel.CreatePageDashboardSource;
181-
import org.wordpress.android.widgets.AppRatingDialog;
176+
import org.wordpress.android.widgets.AppReviewManager;
182177
import org.wordpress.android.widgets.WPSnackbar;
183178
import org.wordpress.android.workers.notification.createsite.CreateSiteNotificationScheduler;
184179
import org.wordpress.android.workers.weeklyroundup.WeeklyRoundupScheduler;
@@ -196,7 +191,6 @@
196191
import static org.wordpress.android.login.LoginAnalyticsListener.CreatedAccountSource.EMAIL;
197192
import static org.wordpress.android.push.NotificationsProcessingService.ARG_NOTIFICATION_TYPE;
198193
import static org.wordpress.android.ui.JetpackConnectionSource.NOTIFICATIONS;
199-
import static org.wordpress.android.util.extensions.InAppReviewExtensionsKt.logException;
200194

201195
import dagger.hilt.android.AndroidEntryPoint;
202196
import kotlin.Unit;
@@ -261,7 +255,6 @@ public class WPMainActivity extends LocaleAwareActivity implements
261255

262256
private WPMainActivityViewModel mViewModel;
263257
private ModalLayoutPickerViewModel mMLPViewModel;
264-
@NonNull private ReviewViewModel mReviewViewModel;
265258
private BloggingRemindersViewModel mBloggingRemindersViewModel;
266259
private NotificationsListViewModel mNotificationsViewModel;
267260
private FloatingActionButton mFloatingActionButton;
@@ -509,7 +502,7 @@ && getIntent().getExtras().getBoolean(ARG_CONTINUE_JETPACK_CONNECT, false)) {
509502
}
510503

511504
if (canShowAppRatingPrompt) {
512-
AppRatingDialog.INSTANCE.showRateDialogIfNeeded(getSupportFragmentManager());
505+
AppReviewManager.INSTANCE.showRateDialogIfNeeded(getSupportFragmentManager());
513506
}
514507

515508
scheduleLocalNotifications();
@@ -691,7 +684,6 @@ private void initViewModel() {
691684

692685
mViewModel = new ViewModelProvider(this, mViewModelFactory).get(WPMainActivityViewModel.class);
693686
mMLPViewModel = new ViewModelProvider(this, mViewModelFactory).get(ModalLayoutPickerViewModel.class);
694-
mReviewViewModel = new ViewModelProvider(this, mViewModelFactory).get(ReviewViewModel.class);
695687
mBloggingRemindersViewModel =
696688
new ViewModelProvider(this, mViewModelFactory).get(BloggingRemindersViewModel.class);
697689

@@ -790,11 +782,6 @@ private void initViewModel() {
790782
});
791783
});
792784

793-
mReviewViewModel.getLaunchReview().observe(this, event -> event.applyIfNotHandled(unit -> {
794-
launchInAppReviews();
795-
return null;
796-
}));
797-
798785
BloggingReminderUtils.observeBottomSheet(
799786
mBloggingRemindersViewModel.isBottomSheetShowing(),
800787
this,
@@ -862,20 +849,6 @@ private void triggerCreatePageFlow(ActionType actionType) {
862849
}
863850
}
864851

865-
private void launchInAppReviews() {
866-
ReviewManager manager = ReviewManagerFactory.create(this);
867-
Task<ReviewInfo> request = manager.requestReviewFlow();
868-
request.addOnCompleteListener(task -> {
869-
if (task.isSuccessful()) {
870-
ReviewInfo reviewInfo = task.getResult();
871-
Task<Void> flow = manager.launchReviewFlow(this, reviewInfo);
872-
flow.addOnFailureListener(e -> AppLog.e(T.MAIN, "Error launching google review API flow.", e));
873-
} else {
874-
logException(task);
875-
}
876-
});
877-
}
878-
879852
private CreatePageDashboardSource getCreatePageDashboardSourceFromActionType(ActionType actionType) {
880853
if (actionType == ActionType.CREATE_NEW_PAGE_FROM_PAGES_CARD) {
881854
return CreatePageDashboardSource.PAGES_CARD;
@@ -1208,6 +1181,9 @@ protected void onResume() {
12081181
&& mBottomNav.getCurrentSelectedPage() == PageType.MY_SITE
12091182
);
12101183

1184+
if (AppReviewManager.INSTANCE.shouldShowInAppReviewsPrompt()) {
1185+
AppReviewManager.INSTANCE.launchInAppReviews(this);
1186+
}
12111187
checkForInAppUpdate();
12121188

12131189
mIsChangingConfiguration = false;
@@ -1425,7 +1401,9 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
14251401
v -> UploadUtils.publishPost(WPMainActivity.this, post, site, mDispatcher),
14261402
isFirstTimePublishing -> {
14271403
mBloggingRemindersViewModel.onPublishingPost(site.getId(), isFirstTimePublishing);
1428-
mReviewViewModel.onPublishingPost(isFirstTimePublishing);
1404+
if (isFirstTimePublishing) {
1405+
AppReviewManager.INSTANCE.onPostPublished();
1406+
}
14291407
}
14301408
);
14311409
}
@@ -1833,7 +1811,9 @@ public void onPostUploaded(OnPostUploaded event) {
18331811
targetSite,
18341812
isFirstTimePublishing -> {
18351813
mBloggingRemindersViewModel.onPublishingPost(targetSite.getId(), isFirstTimePublishing);
1836-
mReviewViewModel.onPublishingPost(isFirstTimePublishing);
1814+
if (isFirstTimePublishing) {
1815+
AppReviewManager.INSTANCE.onPostPublished();
1816+
}
18371817
}
18381818
);
18391819
}

WordPress/src/main/java/org/wordpress/android/ui/media/MediaBrowserActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
import org.wordpress.android.util.WPMediaUtils;
9292
import org.wordpress.android.util.WPPermissionUtils;
9393
import org.wordpress.android.util.analytics.AnalyticsUtils;
94-
import org.wordpress.android.widgets.AppRatingDialog;
94+
import org.wordpress.android.widgets.AppReviewManager;
9595
import org.wordpress.android.widgets.QuickStartFocusPoint;
9696

9797
import java.util.ArrayList;
@@ -1097,7 +1097,7 @@ private void addMediaToUploadService(@NonNull ArrayList<MediaModel> mediaModels)
10971097
}
10981098

10991099
UploadService.uploadMedia(this, mediaModels, "MediaBrowserActivity#addMediaToUploadService");
1100-
AppRatingDialog.INSTANCE.incrementInteractions(APP_REVIEWS_EVENT_INCREMENTED_BY_UPLOADING_MEDIA);
1100+
AppReviewManager.INSTANCE.incrementInteractions(APP_REVIEWS_EVENT_INCREMENTED_BY_UPLOADING_MEDIA);
11011101
}
11021102

11031103
private void queueFileForUpload(Uri uri, String mimeType) {

WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListFragmentPage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ import org.wordpress.android.util.NetworkUtils
7272
import org.wordpress.android.util.WPSwipeToRefreshHelper
7373
import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
7474
import org.wordpress.android.util.helpers.SwipeToRefreshHelper
75-
import org.wordpress.android.widgets.AppRatingDialog.incrementInteractions
75+
import org.wordpress.android.widgets.AppReviewManager.incrementInteractions
7676
import javax.inject.Inject
7777

7878
@AndroidEntryPoint

WordPress/src/main/java/org/wordpress/android/ui/notifications/NotificationsListViewModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import org.wordpress.android.util.NetworkUtilsWrapper
3535
import org.wordpress.android.util.ToastUtilsWrapper
3636
import org.wordpress.android.viewmodel.Event
3737
import org.wordpress.android.viewmodel.ScopedViewModel
38+
import org.wordpress.android.widgets.AppReviewsManagerWrapper
3839
import javax.inject.Inject
3940
import javax.inject.Named
4041

@@ -48,6 +49,7 @@ class NotificationsListViewModel @Inject constructor(
4849
private val networkUtilsWrapper: NetworkUtilsWrapper,
4950
private val toastUtilsWrapper: ToastUtilsWrapper,
5051
private val notificationsUtilsWrapper: NotificationsUtilsWrapper,
52+
private val appReviewsManagerWrapper: AppReviewsManagerWrapper,
5153
private val appLogWrapper: AppLogWrapper,
5254
private val siteStore: SiteStore,
5355
private val commentStore: CommentsStore,
@@ -141,6 +143,7 @@ class NotificationsListViewModel @Inject constructor(
141143
openDetailView: () -> Unit
142144
) {
143145
val note = noteId?.let { notificationsUtilsWrapper.getNoteById(noteId) }
146+
note?.let { appReviewsManagerWrapper.onNotificationReceived(it) }
144147
if (note != null && note.isCommentType && !note.canModerate()) {
145148
val readerPost = readerPostTableWrapper.getBlogPost(note.siteId.toLong(), note.postId.toLong(), false)
146149
if (readerPost != null) {
@@ -158,7 +161,8 @@ class NotificationsListViewModel @Inject constructor(
158161
appLogWrapper.w(AppLog.T.NOTIFS, "Failed to fetch post for comment: $statusCode")
159162
openDetailView()
160163
}
161-
})
164+
}
165+
)
162166
}
163167
} else {
164168
openDetailView()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ import org.wordpress.android.util.image.ImageType
244244
import org.wordpress.android.viewmodel.Event
245245
import org.wordpress.android.viewmodel.helpers.ToastMessageHolder
246246
import org.wordpress.android.viewmodel.storage.StorageUtilsViewModel
247-
import org.wordpress.android.widgets.AppRatingDialog.incrementInteractions
247+
import org.wordpress.android.widgets.AppReviewManager.incrementInteractions
248248
import org.wordpress.android.widgets.WPSnackbar.Companion.make
249249
import org.wordpress.android.widgets.WPViewPager
250250
import org.wordpress.aztec.AztecExceptionHandler

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

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import androidx.appcompat.widget.Toolbar
2121
import androidx.lifecycle.ViewModelProvider
2222
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
2323
import com.google.android.material.snackbar.Snackbar
24-
import com.google.android.play.core.review.ReviewManagerFactory
2524
import org.wordpress.android.R
2625
import org.wordpress.android.WordPress
2726
import org.wordpress.android.databinding.PostListActivityBinding
@@ -52,7 +51,6 @@ import org.wordpress.android.ui.posts.prepublishing.PrepublishingBottomSheetFrag
5251
import org.wordpress.android.ui.posts.prepublishing.PrepublishingBottomSheetFragment.Companion.newInstance
5352
import org.wordpress.android.ui.posts.prepublishing.home.PublishPost
5453
import org.wordpress.android.ui.posts.prepublishing.listeners.PrepublishingBottomSheetListener
55-
import org.wordpress.android.ui.review.ReviewViewModel
5654
import org.wordpress.android.ui.uploads.UploadActionUseCase
5755
import org.wordpress.android.ui.uploads.UploadUtilsWrapper
5856
import org.wordpress.android.ui.utils.UiHelpers
@@ -61,10 +59,10 @@ import org.wordpress.android.util.SnackbarItem
6159
import org.wordpress.android.util.SnackbarSequencer
6260
import org.wordpress.android.util.extensions.getSerializableCompat
6361
import org.wordpress.android.util.extensions.getSerializableExtraCompat
64-
import org.wordpress.android.util.extensions.logException
6562
import org.wordpress.android.util.extensions.redirectContextClickToLongPressListener
6663
import org.wordpress.android.util.extensions.setLiftOnScrollTargetViewIdAndRequestLayout
6764
import org.wordpress.android.viewmodel.observeEvent
65+
import org.wordpress.android.widgets.AppReviewManager
6866
import javax.inject.Inject
6967
import android.R as AndroidR
7068

@@ -122,9 +120,6 @@ class PostsListActivity : LocaleAwareActivity(),
122120
@Inject
123121
internal lateinit var bloggingRemindersViewModel: BloggingRemindersViewModel
124122

125-
@Inject
126-
internal lateinit var reviewViewModel: ReviewViewModel
127-
128123
@Inject
129124
internal lateinit var blazeFeatureUtils: BlazeFeatureUtils
130125

@@ -211,7 +206,6 @@ class PostsListActivity : LocaleAwareActivity(),
211206
initViewModel(initPreviewState, currentBottomSheetPostId)
212207
initSearchFragment()
213208
initBloggingReminders()
214-
initInAppReviews()
215209
initTabLayout(tabIndex)
216210
loadIntentData(intent)
217211
}
@@ -337,27 +331,6 @@ class PostsListActivity : LocaleAwareActivity(),
337331
}
338332
}
339333

340-
private fun initInAppReviews() {
341-
reviewViewModel = ViewModelProvider(this@PostsListActivity, viewModelFactory)[ReviewViewModel::class.java]
342-
reviewViewModel.launchReview.observeEvent(this) { launchInAppReviews() }
343-
}
344-
345-
private fun launchInAppReviews() {
346-
val manager = ReviewManagerFactory.create(this)
347-
val request = manager.requestReviewFlow()
348-
request.addOnCompleteListener { task ->
349-
if (task.isSuccessful) {
350-
val reviewInfo = task.result
351-
val flow = manager.launchReviewFlow(this, reviewInfo)
352-
flow.addOnFailureListener { e ->
353-
AppLog.e(AppLog.T.POSTS, "Error launching google review API flow.", e)
354-
}
355-
} else {
356-
task.logException()
357-
}
358-
}
359-
}
360-
361334
private fun PostListActivityBinding.setupActions() {
362335
viewModel.dialogAction.observe(this@PostsListActivity) {
363336
it?.show(this@PostsListActivity, supportFragmentManager, uiHelpers)
@@ -381,7 +354,9 @@ class PostsListActivity : LocaleAwareActivity(),
381354
) { isFirstTimePublishing ->
382355
changeTabsOnPostUpload()
383356
bloggingRemindersViewModel.onPublishingPost(site.id, isFirstTimePublishing)
384-
reviewViewModel.onPublishingPost(isFirstTimePublishing)
357+
if (isFirstTimePublishing) {
358+
AppReviewManager.onPostPublished()
359+
}
385360
}
386361
}
387362
}
@@ -452,6 +427,9 @@ class PostsListActivity : LocaleAwareActivity(),
452427
override fun onResume() {
453428
super.onResume()
454429
ActivityId.trackLastActivity(ActivityId.POSTS)
430+
if (AppReviewManager.shouldShowInAppReviewsPrompt()) {
431+
AppReviewManager.launchInAppReviews(this)
432+
}
455433
}
456434
@Suppress("DEPRECATION", "OVERRIDE_DEPRECATION")
457435
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

WordPress/src/main/java/org/wordpress/android/ui/prefs/AppPrefs.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,10 @@ public enum DeletablePrefKey implements PrefKey {
162162
SITE_JETPACK_CAPABILITIES,
163163
REMOVED_QUICK_START_CARD_TYPE,
164164
PINNED_DYNAMIC_CARD,
165-
// PUBLISHED_POST_COUNT will increase until it reaches ReviewViewModel.TARGET_COUNT_POST_PUBLISHED
165+
// PUBLISHED_POST_COUNT will increase until it reaches AppReviewManager.TARGET_COUNT_POST_PUBLISHED
166166
PUBLISHED_POST_COUNT,
167-
IN_APP_REVIEW_SHOWN,
167+
// PUBLISHED_POST_COUNT will increase until it reaches AppReviewManager.TARGET_COUNT_NOTIFICATIONS
168+
IN_APP_REVIEWS_NOTIFICATION_COUNT,
168169
BLOGGING_REMINDERS_SHOWN,
169170
SHOULD_SCHEDULE_CREATE_SITE_NOTIFICATION,
170171
SHOULD_SHOW_WEEKLY_ROUNDUP_NOTIFICATION,
@@ -1303,16 +1304,24 @@ public static void incrementPublishedPostCount() {
13031304
putInt(DeletablePrefKey.PUBLISHED_POST_COUNT, getPublishedPostCount() + 1);
13041305
}
13051306

1307+
public static void resetPublishedPostCount() {
1308+
remove(DeletablePrefKey.PUBLISHED_POST_COUNT);
1309+
}
1310+
13061311
public static int getPublishedPostCount() {
13071312
return prefs().getInt(DeletablePrefKey.PUBLISHED_POST_COUNT.name(), 0);
13081313
}
13091314

1310-
public static void setInAppReviewsShown() {
1311-
putBoolean(DeletablePrefKey.IN_APP_REVIEW_SHOWN, true);
1315+
public static void incrementInAppReviewsNotificationCount() {
1316+
putInt(DeletablePrefKey.IN_APP_REVIEWS_NOTIFICATION_COUNT, getInAppReviewsNotificationCount() + 1);
1317+
}
1318+
1319+
public static int getInAppReviewsNotificationCount() {
1320+
return prefs().getInt(DeletablePrefKey.IN_APP_REVIEWS_NOTIFICATION_COUNT.name(), 0);
13121321
}
13131322

1314-
public static boolean isInAppReviewsShown() {
1315-
return prefs().getBoolean(DeletablePrefKey.IN_APP_REVIEW_SHOWN.name(), false);
1323+
public static void resetInAppReviewsNotificationCount() {
1324+
remove(DeletablePrefKey.IN_APP_REVIEWS_NOTIFICATION_COUNT);
13161325
}
13171326

13181327
public static void setBloggingRemindersShown(int siteId) {

0 commit comments

Comments
 (0)